2016-04-14 16:24:03 +00:00
|
|
|
package me.mrCookieSlime.Slimefun.api.energy;
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
import java.util.List;
|
|
|
|
|
2016-12-03 23:08:59 +00:00
|
|
|
import org.bukkit.ChatColor;
|
2016-05-14 17:24:40 +00:00
|
|
|
import org.bukkit.Material;
|
2016-04-14 16:24:03 +00:00
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.inventory.ItemStack;
|
|
|
|
import org.bukkit.inventory.meta.ItemMeta;
|
|
|
|
|
2016-05-14 17:24:40 +00:00
|
|
|
import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
|
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
public class ItemEnergy {
|
|
|
|
|
2016-11-23 15:51:57 +00:00
|
|
|
// "&c&o&8\u21E8 &e\u26A1 &70 / 50 J"
|
2016-04-14 16:24:03 +00:00
|
|
|
|
|
|
|
public static float getStoredEnergy(ItemStack item) {
|
|
|
|
if (item == null || item.getType() == null || item.getType().equals(Material.AIR)) return 0F;
|
|
|
|
if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F;
|
|
|
|
|
|
|
|
for (String line: item.getItemMeta().getLore()) {
|
2016-12-03 23:08:59 +00:00
|
|
|
if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) {
|
|
|
|
return Float.valueOf(line.split(" / ")[0].replace(ChatColor.translateAlternateColorCodes('&', "&c&o&8\u21E8 &e\u26A1 &7"), ""));
|
2016-04-14 16:24:03 +00:00
|
|
|
}
|
|
|
|
}
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
return 0F;
|
|
|
|
}
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
public static float getMaxEnergy(ItemStack item) {
|
|
|
|
if (item == null || item.getType() == null || item.getType().equals(Material.AIR)) return 0F;
|
|
|
|
if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F;
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
for (String line: item.getItemMeta().getLore()) {
|
2016-12-03 23:08:59 +00:00
|
|
|
if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) {
|
2016-04-14 16:24:03 +00:00
|
|
|
return Float.valueOf(line.split(" / ")[1].replace(" J", ""));
|
|
|
|
}
|
|
|
|
}
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
return 0F;
|
|
|
|
}
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
public static float addStoredEnergy(ItemStack item, float energy) {
|
|
|
|
if (item == null || item.getType() == null || item.getType().equals(Material.AIR)) return 0F;
|
|
|
|
if (!item.hasItemMeta() || !item.getItemMeta().hasLore()) return 0F;
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
float rest = 0F;
|
|
|
|
float capacity = getMaxEnergy(item);
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
if (capacity == 0F) {
|
|
|
|
return rest;
|
|
|
|
}
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
float stored = getStoredEnergy(item);
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
if (stored + energy > capacity) {
|
|
|
|
rest = (stored + energy) - capacity;
|
|
|
|
stored = capacity;
|
|
|
|
}
|
|
|
|
else if (stored + energy < 0) {
|
|
|
|
stored = 0F;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
stored = stored + energy;
|
|
|
|
}
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
List<String> lore = item.getItemMeta().getLore();
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
int index = -1;
|
|
|
|
for (int i = 0; i < lore.size(); i++) {
|
|
|
|
String line = lore.get(i);
|
2016-12-03 23:08:59 +00:00
|
|
|
if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&c&o&8\u21E8 &e\u26A1 &7")) && line.contains(" / ") && line.endsWith(" J")) {
|
2016-04-14 16:24:03 +00:00
|
|
|
index = i;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
2016-12-03 23:08:59 +00:00
|
|
|
|
2016-04-14 16:24:03 +00:00
|
|
|
BigDecimal decimal = new BigDecimal(stored).setScale(2, BigDecimal.ROUND_HALF_UP);
|
2016-12-03 23:08:59 +00:00
|
|
|
|
|
|
|
lore.set(index, ChatColor.translateAlternateColorCodes('&', "&c&o&8\u21E8 &e\u26A1 &7") + decimal.floatValue() + " / " + capacity + " J");
|
2016-04-14 16:24:03 +00:00
|
|
|
|
|
|
|
ItemMeta im = item.getItemMeta();
|
|
|
|
im.setLore(lore);
|
|
|
|
item.setItemMeta(im);
|
|
|
|
return rest;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static ItemStack chargeItem(ItemStack item, float energy) {
|
|
|
|
addStoredEnergy(item, energy);
|
|
|
|
return item;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void chargeInventory(Player p, float energy) {
|
|
|
|
p.getInventory().setItemInMainHand(chargeItem(p.getInventory().getItemInMainHand(), energy));
|
|
|
|
p.getInventory().setItemInOffHand(chargeItem(p.getInventory().getItemInOffHand(), energy));
|
|
|
|
p.getInventory().setHelmet(chargeItem(p.getInventory().getHelmet(), energy));
|
|
|
|
p.getInventory().setChestplate(chargeItem(p.getInventory().getChestplate(), energy));
|
|
|
|
p.getInventory().setLeggings(chargeItem(p.getInventory().getLeggings(), energy));
|
|
|
|
p.getInventory().setBoots(chargeItem(p.getInventory().getBoots(), energy));
|
|
|
|
|
|
|
|
PlayerInventory.update(p);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|