diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 000000000..b1a6f98a1
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,14 @@
+## Description
+
+
+## Changes
+
+
+## Related Issues
+
+
+
+## Testability
+
+- [ ] I have fully tested the proposed changes and promise that they will not break everything into chaos.
+- [ ] I have also tested the proposed changes in combination with various popular addons and can confirm my changes do not break them.
diff --git a/.github/PULL_REQUEST_TEMPLATE/features.md b/.github/PULL_REQUEST_TEMPLATE/features.md
new file mode 100644
index 000000000..d260edea3
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE/features.md
@@ -0,0 +1,18 @@
+## Description
+
+
+## Changes
+
+
+## How this benefits Slimefun
+
+
+
+## Related Issues (Optional)
+
+
+
+## Testability
+
+* [ ] I have fully tested the proposed changes and promise that they will not break everything into chaos.
+* [ ] I have also tested the proposed changes in combination with various popular addons and can confirm my changes do not break them.
diff --git a/.github/PULL_REQUEST_TEMPLATE/fix.md b/.github/PULL_REQUEST_TEMPLATE/fix.md
new file mode 100644
index 000000000..de8429877
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE/fix.md
@@ -0,0 +1,14 @@
+## Description
+
+
+## Changes
+
+
+## Related Issues
+
+
+
+## Testability
+
+* [ ] I have fully tested the proposed changes and promise that they will not break everything into chaos.
+* [ ] I have also tested the proposed changes in combination with various popular addons and can confirm my changes do not break them.
diff --git a/README.md b/README.md
index 3871b6d53..6cf538887 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,9 @@ Release Candidates or "stable" builds will have a proper Version such as "4.1.18
+You can also find the most recent development builds for all my other Plugins (including Slimefun Addons) on here:
+https://thebusybiscuit.github.io/builds/
+
## Discord
You can find Slimefun's community on Discord!
Click the badge to join it for Suggestions/Questions or other discussions about this plugin.
diff --git a/pom.xml b/pom.xml
index 6274bb7e6..e2aed4a93 100644
--- a/pom.xml
+++ b/pom.xml
@@ -67,6 +67,8 @@
com.github.thebusybiscuit:CS-CoreLib2
**/cscorelib2/updater/**
+ **/cscorelib2/materials/**
+ **/cscorelib2/protection/**
@@ -122,7 +124,7 @@
com.github.thebusybiscuit
CS-CoreLib2
- 0.3.7
+ 0.4.1
compile
diff --git a/src/config.yml b/src/config.yml
index 7b2c23711..2dec0165d 100644
--- a/src/config.yml
+++ b/src/config.yml
@@ -14,6 +14,7 @@ options:
research-give-fireworks: true
legacy-ore-washer: false
legacy-dust-washer: false
+ legacy-ore-grinder: true
guide:
default-view-book: false
URID:
diff --git a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java
deleted file mode 100644
index 99771fec1..000000000
--- a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java
+++ /dev/null
@@ -1,1431 +0,0 @@
-package me.mrCookieSlime.Slimefun.Android;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
-import java.util.UUID;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.Effect;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.OfflinePlayer;
-import org.bukkit.Sound;
-import org.bukkit.block.Block;
-import org.bukkit.block.BlockFace;
-import org.bukkit.block.Dispenser;
-import org.bukkit.block.Skull;
-import org.bukkit.block.data.Ageable;
-import org.bukkit.block.data.Rotatable;
-import org.bukkit.entity.Animals;
-import org.bukkit.entity.ArmorStand;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Monster;
-import org.bukkit.entity.Player;
-import org.bukkit.event.inventory.InventoryClickEvent;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.metadata.FixedMetadataValue;
-
-import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
-import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
-import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Block.TreeCalculator;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.AdvancedMenuClickHandler;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.MenuHelper;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
-import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
-import me.mrCookieSlime.ExoticGarden.ExoticGarden;
-import me.mrCookieSlime.Slimefun.SlimefunStartup;
-import me.mrCookieSlime.Slimefun.Android.comparators.ScriptReputationSorter;
-import me.mrCookieSlime.Slimefun.Lists.RecipeType;
-import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
-import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
-import me.mrCookieSlime.Slimefun.Setup.Messages;
-import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
-import me.mrCookieSlime.Slimefun.api.BlockStorage;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
-import me.mrCookieSlime.Slimefun.holograms.AndroidStatusHologram;
-
-public abstract class ProgrammableAndroid extends SlimefunItem {
-
- private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 18, 24, 25, 26, 27, 33, 35, 36, 42, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
- private static final int[] border_out = {10, 11, 12, 13, 14, 19, 23, 28, 32, 37, 38, 39, 40, 41};
-
- private static final ItemStack[] fish = new ItemStack[] {new ItemStack(Material.COD), new ItemStack(Material.SALMON), new ItemStack(Material.PUFFERFISH), new ItemStack(Material.TROPICAL_FISH), new ItemStack(Material.STRING), new ItemStack(Material.BONE), new ItemStack(Material.STICK)};
-
- private static final List directions = Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST);
- private static final List blockblacklist = new ArrayList<>();
-
-
- static {
- blockblacklist.add(Material.BEDROCK);
- blockblacklist.add(Material.BARRIER);
- blockblacklist.add(Material.END_PORTAL_FRAME);
- blockblacklist.add(Material.COMMAND_BLOCK);
- blockblacklist.add(Material.CHAIN_COMMAND_BLOCK);
- blockblacklist.add(Material.REPEATING_COMMAND_BLOCK);
- blockblacklist.add(Material.STRUCTURE_BLOCK);
- }
-
- private Set recipes = new HashSet<>();
-
- public String getInventoryTitle() {
- return "Programmable Android";
- }
-
- public int[] getOutputSlots() {
- return new int[] {20, 21, 22, 29, 30, 31};
- }
-
- public abstract AndroidType getAndroidType();
- public abstract float getFuelEfficiency();
- public abstract int getTier();
-
- public ProgrammableAndroid(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
- super(category, item, name, recipeType, recipe);
-
- if (getTier() == 1) {
- registerFuel(new MachineFuel(80, new ItemStack(Material.COAL)));
- registerFuel(new MachineFuel(80, new ItemStack(Material.CHARCOAL)));
- registerFuel(new MachineFuel(800, new ItemStack(Material.COAL_BLOCK)));
- registerFuel(new MachineFuel(45, new ItemStack(Material.BLAZE_ROD)));
-
- // Logs
- registerFuel(new MachineFuel(4, new ItemStack(Material.OAK_LOG)));
- registerFuel(new MachineFuel(4, new ItemStack(Material.BIRCH_LOG)));
- registerFuel(new MachineFuel(4, new ItemStack(Material.SPRUCE_LOG)));
- registerFuel(new MachineFuel(4, new ItemStack(Material.JUNGLE_LOG)));
- registerFuel(new MachineFuel(4, new ItemStack(Material.DARK_OAK_LOG)));
- registerFuel(new MachineFuel(4, new ItemStack(Material.ACACIA_LOG)));
-
- // Wooden Planks
- registerFuel(new MachineFuel(1, new ItemStack(Material.OAK_PLANKS)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.BIRCH_PLANKS)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.SPRUCE_PLANKS)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.JUNGLE_PLANKS)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.DARK_OAK_PLANKS)));
- registerFuel(new MachineFuel(1, new ItemStack(Material.ACACIA_PLANKS)));
- }
- else if (getTier() == 2){
- registerFuel(new MachineFuel(100, new ItemStack(Material.LAVA_BUCKET)));
- registerFuel(new MachineFuel(200, SlimefunItems.BUCKET_OF_OIL));
- registerFuel(new MachineFuel(500, SlimefunItems.BUCKET_OF_FUEL));
- }
- else {
- registerFuel(new MachineFuel(2500, SlimefunItems.URANIUM));
- registerFuel(new MachineFuel(1200, SlimefunItems.NEPTUNIUM));
- registerFuel(new MachineFuel(3000, SlimefunItems.BOOSTED_URANIUM));
- }
-
- new BlockMenuPreset(name, getInventoryTitle()) {
-
- @Override
- public void init() {
- try {
- constructMenu(this);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- boolean open = BlockStorage.getLocationInfo(b.getLocation(), "owner").equals(p.getUniqueId().toString()) || p.hasPermission("slimefun.android.bypass");
- if (!open) {
- Messages.local.sendTranslation(p, "inventory.no-access", true);
- }
- return open;
- }
-
- @Override
- public void newInstance(BlockMenu menu, final Block b) {
- try {
- menu.replaceExistingItem(15, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTAxYzdiNTcyNjE3ODk3NGIzYjNhMDFiNDJhNTkwZTU0MzY2MDI2ZmQ0MzgwOGYyYTc4NzY0ODg0M2E3ZjVhIn19fQ=="), "&aStart/Continue"));
- menu.addMenuClickHandler(15, (p, slot, item, action) -> {
- Messages.local.sendTranslation(p, "robot.started", true);
- BlockStorage.addBlockInfo(b, "paused", "false");
- p.closeInventory();
- return false;
- });
-
- menu.replaceExistingItem(17, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTYxMzlmZDFjNTY1NGU1NmU5ZTRlMmM4YmU3ZWIyYmQ1YjQ5OWQ2MzM2MTY2NjNmZWVlOTliNzQzNTJhZDY0In19fQ=="), "&4Pause"));
- menu.addMenuClickHandler(17, (p, slot, item, action) -> {
- BlockStorage.addBlockInfo(b, "paused", "true");
- Messages.local.sendTranslation(p, "robot.stopped", true);
- return false;
- });
-
- menu.replaceExistingItem(16, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDc4ZjJiN2U1ZTc1NjM5ZWE3ZmI3OTZjMzVkMzY0YzRkZjI4YjQyNDNlNjZiNzYyNzdhYWRjZDYyNjEzMzcifX19"), "&bMemory Core", "", "&8\u21E8 &7Click to open the Script Editor"));
- menu.addMenuClickHandler(16, (p, slot, item, action) -> {
- try {
- BlockStorage.addBlockInfo(b, "paused", "true");
- Messages.local.sendTranslation(p, "robot.stopped", true);
- openScriptEditor(p, b);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- });
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- return new int[0];
- }
- };
-
- registerBlockHandler(name, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString());
- BlockStorage.addBlockInfo(b, "script", "START-TURN_LEFT-REPEAT");
- BlockStorage.addBlockInfo(b, "index", "0");
- BlockStorage.addBlockInfo(b, "fuel", "0");
- BlockStorage.addBlockInfo(b, "rotation", p.getFacing().getOppositeFace().toString());
- BlockStorage.addBlockInfo(b, "paused", "true");
- b.setType(Material.PLAYER_HEAD);
- Rotatable blockData = (Rotatable) b.getBlockData();
- blockData.setRotation(p.getFacing());
- b.setBlockData(blockData);
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- boolean allow = reason.equals(UnregisterReason.PLAYER_BREAK) && (BlockStorage.getLocationInfo(b.getLocation(), "owner").equals(p.getUniqueId().toString()) || p.hasPermission("slimefun.android.bypass"));
-
- if (allow) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- if (inv.getItemInSlot(43) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(43));
- inv.replaceExistingItem(43, null);
- }
- for (int slot: getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- }
- AndroidStatusHologram.remove(b);
- }
-
- return allow;
- }
- });
- }
-
- protected void tick(Block b) {
- try {
- if (!(b.getState() instanceof Skull)) {
- return;
- }
- } catch (NullPointerException x) {
- return;
- }
-
- if (BlockStorage.getLocationInfo(b.getLocation(), "paused").equals("false")) {
- float fuel = Float.parseFloat(BlockStorage.getLocationInfo(b.getLocation(), "fuel"));
- if (fuel < 0.001) {
- ItemStack item = BlockStorage.getInventory(b).getItemInSlot(43);
- if (item != null) {
- for (MachineFuel recipe: recipes) {
- if (SlimefunManager.isItemSimiliar(item, recipe.getInput(), true)) {
- BlockStorage.getInventory(b).replaceExistingItem(43, InvUtils.decreaseItem(item, 1));
- if (getTier() == 2) {
- pushItems(b, new ItemStack(Material.BUCKET));
- }
- BlockStorage.addBlockInfo(b, "fuel", String.valueOf((int) (recipe.getTicks() * this.getFuelEfficiency())));
- break;
- }
- }
- }
- }
- else {
- String[] script = BlockStorage.getLocationInfo(b.getLocation(), "script").split("-");
- int index = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "index")) + 1;
- if (index >= script.length) index = 0;
- boolean refresh = true;
- BlockStorage.addBlockInfo(b, "fuel", String.valueOf(fuel - 1));
- ScriptPart part = ScriptPart.valueOf(script[index]);
-
- if (getAndroidType().isType(part.getRequiredType())) {
- switch (part) {
- case GO_DOWN: {
- try {
- BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));
- Block block = b.getRelative(BlockFace.DOWN);
- move(b, face, block);
- } catch (Exception e) {
- e.printStackTrace();
- }
- break;
- }
- case GO_FORWARD: {
- try {
- BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));
- Block block = b.getRelative(face);
- move(b, face, block);
- } catch (Exception e) {
- e.printStackTrace();
- }
- break;
- }
- case GO_UP: {
- try {
- BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));
- Block block = b.getRelative(BlockFace.UP);
- move(b, face, block);
- } catch (Exception e) {
- e.printStackTrace();
- }
- break;
- }
- case REPEAT: {
- BlockStorage.addBlockInfo(b, "index", String.valueOf(0));
- break;
- }
- case TURN_LEFT: {
- int rotIndex = directions.indexOf(BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) - 1;
- if (rotIndex < 0) rotIndex = directions.size() - 1;
- BlockFace dir = directions.get(rotIndex);
- Rotatable blockData = (Rotatable) b.getBlockData();
- blockData.setRotation(dir);
- b.setBlockData(blockData);
- BlockStorage.addBlockInfo(b, "rotation", dir.toString());
- break;
- }
- case TURN_RIGHT: {
- int rotIndex = directions.indexOf(BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) + 1;
- if (rotIndex == directions.size()) rotIndex = 0;
- BlockFace dir = directions.get(rotIndex);
- Rotatable blockData = (Rotatable) b.getBlockData();
- blockData.setRotation(dir);
- b.setBlockData(blockData);
- BlockStorage.addBlockInfo(b, "rotation", dir.toString());
- break;
- }
- case DIG_FORWARD: {
- Block block = b.getRelative(BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation")));
- mine(b, block);
- break;
- }
- case DIG_UP: {
- Block block = b.getRelative(BlockFace.UP);
- mine(b, block);
- break;
- }
- case DIG_DOWN: {
- Block block = b.getRelative(BlockFace.DOWN);
- mine(b, block);
- break;
- }
- case CATCH_FISH: {
- Block block = b.getRelative(BlockFace.DOWN);
- if (block.getType().equals(Material.WATER)) {
- block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F);
- if (CSCoreLib.randomizer().nextInt(100) < 10 * getTier()) {
- ItemStack drop = fish[CSCoreLib.randomizer().nextInt(fish.length)];
- if (fits(b, drop)) pushItems(b, drop);
- }
-
- }
- break;
- }
- case MOVE_AND_DIG_FORWARD: {
- BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));
- Block block = b.getRelative(face);
- movedig(b, face, block);
- break;
- }
- case MOVE_AND_DIG_UP: {
- BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));
- Block block = b.getRelative(BlockFace.UP);
- movedig(b, face, block);
- break;
- }
- case MOVE_AND_DIG_DOWN: {
- BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));
- Block block = b.getRelative(BlockFace.DOWN);
- movedig(b, face, block);
- break;
- }
- case INTERFACE_ITEMS: {
- BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));
- Block block = b.getRelative(face);
- if (BlockStorage.check(block, "ANDROID_INTERFACE_ITEMS") && block.getState() instanceof Dispenser) {
- Dispenser d = (Dispenser) block.getState();
- for (int slot: getOutputSlots()) {
- ItemStack stack = BlockStorage.getInventory(b).getItemInSlot(slot);
- if (stack != null) {
- Optional optional = d.getInventory().addItem(stack).values().stream().findFirst();
-
- if (optional.isPresent()) {
- BlockStorage.getInventory(b).replaceExistingItem(slot, optional.get());
- }
- else {
- BlockStorage.getInventory(b).replaceExistingItem(slot, null);
- }
- }
- }
- }
- break;
- }
- case INTERFACE_FUEL: {
- BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));
- Block block = b.getRelative(face);
- if (BlockStorage.check(block, "ANDROID_INTERFACE_FUEL") && block.getState() instanceof Dispenser) {
- Dispenser d = (Dispenser) block.getState();
- for (int slot = 0; slot < 9; slot++) {
- ItemStack item = d.getInventory().getItem(slot);
- if (item != null) {
- if (BlockStorage.getInventory(b).getItemInSlot(43) == null) {
- BlockStorage.getInventory(b).replaceExistingItem(43, item);
- d.getInventory().setItem(slot, null);
- break;
- }
- else if (SlimefunManager.isItemSimiliar(item, BlockStorage.getInventory(b).getItemInSlot(43), true)) {
- int rest = item.getType().getMaxStackSize() - BlockStorage.getInventory(b).getItemInSlot(43).getAmount();
- if (rest > 0) {
- int amt = item.getAmount() > rest ? rest: item.getAmount();
- BlockStorage.getInventory(b).replaceExistingItem(43, new CustomItem(item, BlockStorage.getInventory(b).getItemInSlot(43).getAmount() + amt));
- d.getInventory().setItem(slot, InvUtils.decreaseItem(item, amt));
- }
- break;
- }
- }
- }
- }
- break;
- }
- case FARM_FORWARD: {
- BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));
- Block block = b.getRelative(face);
- farm(b, block);
- break;
- }
- case FARM_DOWN: {
- Block block = b.getRelative(BlockFace.DOWN);
- farm(b, block);
- break;
- }
- case FARM_EXOTIC_FORWARD: {
- BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));
- Block block = b.getRelative(face);
- exoticFarm(b, block);
- break;
- }
- case FARM_EXOTIC_DOWN: {
- Block block = b.getRelative(BlockFace.DOWN);
- exoticFarm(b, block);
- break;
- }
- case CHOP_TREE: {
- BlockFace face = BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"));
- Block block = b.getRelative(face);
- if (MaterialHelper.isLog( block.getType())) {
- List list = new ArrayList();
- list.add(block.getLocation());
- TreeCalculator.getTree(block.getLocation(), block.getLocation(), list);
- if (!list.isEmpty()) {
- refresh = false;
- Block log = list.get(list.size() - 1).getBlock();
- Collection drops = log.getDrops();
- log.getWorld().playEffect(log.getLocation(), Effect.STEP_SOUND, log.getType());
- if (!drops.isEmpty() && CSCoreLib.getLib().getProtectionManager().canBuild(UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), log)) {
- ItemStack[] items = drops.toArray(new ItemStack[drops.size()]);
- if (fits(b, items)) {
- pushItems(b, items);
- log.getWorld().playEffect(log.getLocation(), Effect.STEP_SOUND, log.getType());
- if (log.getY() == block.getY()) {
- log.setType(MaterialHelper.getSaplingFromLog(log.getType()));
- }
- else log.setType(Material.AIR);
- }
-
- }
- }
- }
- break;
- }
- case ATTACK_MOBS_ANIMALS: {
- double damage = getTier() < 2 ? 20D : 4D * getTier();
-
- entities:
- for (Entity n: AndroidStatusHologram.getNearbyEntities(b, 4D + getTier())) {
- switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
- case NORTH: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() < b.getZ()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case EAST: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() > b.getX()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case SOUTH: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() > b.getZ()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case WEST: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() < b.getX()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- default:
- break;
- }
- }
- break;
- }
- case ATTACK_MOBS: {
- double damage = getTier() < 2 ? 20D : 4D * getTier();
-
- entities:
- for (Entity n: AndroidStatusHologram.getNearbyEntities(b, 4D + getTier())) {
- if (n instanceof Animals) continue;
- switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
- case NORTH: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() < b.getZ()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case EAST: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() > b.getX()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case SOUTH: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() > b.getZ()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case WEST: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() < b.getX()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- default:
- break;
- }
- }
- break;
- }
-
- case ATTACK_ANIMALS: {
- double damage = getTier() < 2 ? 20D : 4D * getTier();
-
- entities:
- for (Entity n: AndroidStatusHologram.getNearbyEntities(b, 4D + getTier())) {
- if (n instanceof Monster) continue;
- switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
- case NORTH: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() < b.getZ()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case EAST: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() > b.getX()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case SOUTH: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() > b.getZ()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case WEST: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() < b.getX()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- default:
- break;
- }
- }
- break;
- }
-
- case ATTACK_ANIMALS_ADULT: {
- double damage = getTier() < 2 ? 20D : 4D * getTier();
-
- entities:
- for (Entity n: AndroidStatusHologram.getNearbyEntities(b, 4D + getTier())) {
- if (n instanceof Monster) continue;
- if (n instanceof org.bukkit.entity.Ageable && !((org.bukkit.entity.Ageable) n).isAdult()) continue;
- switch (BlockFace.valueOf(BlockStorage.getLocationInfo(b.getLocation(), "rotation"))) {
- case NORTH: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() < b.getZ()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case EAST: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() > b.getX()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case SOUTH: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getZ() > b.getZ()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- case WEST: {
- if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !(n instanceof Player) && n.getLocation().getX() < b.getX()) {
- if (n.hasMetadata("android_killer")) n.removeMetadata("android_killer", SlimefunStartup.instance);
- n.setMetadata("android_killer", new FixedMetadataValue(SlimefunStartup.instance, new AndroidObject(this, b)));
-
- ((LivingEntity) n).damage(damage);
- break entities;
- }
- break;
- }
- default:
- break;
- }
- }
- break;
- }
- default:
- break;
- }
- }
- if (refresh) BlockStorage.addBlockInfo(b, "index", String.valueOf(index));
- }
- }
- }
-
- private void move(Block b, BlockFace face, Block block) throws Exception {
- if (block.getY() < 0 || block.getY() > block.getWorld().getMaxHeight())
- return;
- if (block.getType() == Material.AIR || block.getType() == Material.CAVE_AIR) {
- block.setType(Material.PLAYER_HEAD);
- Rotatable blockData = (Rotatable) block.getBlockData();
- blockData.setRotation(face.getOppositeFace());
- block.setBlockData(blockData);
- CustomSkull.setSkull(block, CustomSkull.getTexture(getItem()));
- b.setType(Material.AIR);
- BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation());
- }
- }
-
- private void mine(Block b, Block block) {
- Collection drops = block.getDrops();
- if (!blockblacklist.contains(block.getType()) && !drops.isEmpty() && CSCoreLib.getLib().getProtectionManager().canBuild(UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), block)) {
- SlimefunItem item = BlockStorage.check(block);
-
- if (item != null) {
- return;
- /*if (fits(b, item.getItem())) {
- if (SlimefunItem.blockhandler.containsKey(item.getID())) {
- if (SlimefunItem.blockhandler.get(item.getID()).onBreak(null, block, item, UnregisterReason.ANDROID_DIG)) {
- pushItems(b, BlockStorage.retrieve(block));
- if (SlimefunItem.blockhandler.containsKey(item.getID())) SlimefunItem.blockhandler.get(item.getID()).onBreak(null, block, item, UnregisterReason.ANDROID_DIG);
- block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
- block.setType(Material.AIR);
- }
- }
- }*/
- } else {
- ItemStack[] items = drops.toArray(new ItemStack[drops.size()]);
- if (fits(b, items)) {
- pushItems(b, items);
- block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
- block.setType(Material.AIR);
- }
- }
- }
- }
-
-
- private void movedig(Block b, BlockFace face, Block block) {
- Collection drops = block.getDrops();
- if (!blockblacklist.contains(block.getType()) && !drops.isEmpty() && CSCoreLib.getLib().getProtectionManager().canBuild(UUID.fromString(BlockStorage.getLocationInfo(b.getLocation(), "owner")), block)) {
- try {
- SlimefunItem item = BlockStorage.check(block);
- if (item != null) {
- if (fits(b, item.getItem())) {
- if (SlimefunItem.blockhandler.containsKey(item.getID())) {
- if (SlimefunItem.blockhandler.get(item.getID()).onBreak(null, block, item, UnregisterReason.ANDROID_DIG)) {
- pushItems(b, BlockStorage.retrieve(block));
- block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
- block.setType(Material.PLAYER_HEAD);
- Rotatable blockData = (Rotatable) block.getBlockData();
- blockData.setRotation(face.getOppositeFace());
- block.setBlockData(blockData);
- CustomSkull.setSkull(block, CustomSkull.getTexture(getItem()));
- b.setType(Material.AIR);
- BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation());
- }
- }
- }
- }
- else {
- ItemStack[] items = drops.toArray(new ItemStack[drops.size()]);
- if (fits(b, items)) {
- pushItems(b, items);
- block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
- block.setType(Material.PLAYER_HEAD);
- Rotatable blockData = (Rotatable) block.getBlockData();
- blockData.setRotation(face.getOppositeFace());
- block.setBlockData(blockData);
- CustomSkull.setSkull(block, CustomSkull.getTexture(getItem()));
- b.setType(Material.AIR);
- BlockStorage.moveBlockInfo(b.getLocation(), block.getLocation());
- }
- }
- } catch (Exception x) {
- x.printStackTrace();
- }
- }
- else {
- try {
- move(b, face, block);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
- private boolean isFullGrown(Block block){
- Ageable ageable = ((Ageable) block.getBlockData());
- return ageable.getAge() >= ageable.getMaximumAge();
- }
-
- private void farm(Block b, Block block) {
- switch (block.getType()) {
- case WHEAT: {
- if (isFullGrown(block)) {
- ItemStack drop = new ItemStack(Material.WHEAT, CSCoreLib.randomizer().nextInt(3) + 1);
- if (fits(b, drop)) {
- pushItems(b, drop);
- Ageable ageable = (Ageable) block.getBlockData();
- ageable.setAge(0);
- block.setBlockData(ageable);
- block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
- }
- }
- break;
- }
- case POTATOES: {
- if (isFullGrown(block)) {
- ItemStack drop = new ItemStack(Material.POTATO, CSCoreLib.randomizer().nextInt(3) + 1);
- if (fits(b, drop)) {
- pushItems(b, drop);
- Ageable ageable = (Ageable) block.getBlockData();
- ageable.setAge(0);
- block.setBlockData(ageable);
- block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
- }
- }
- break;
- }
- case CARROTS: {
- if (isFullGrown(block)) {
- ItemStack drop = new ItemStack(Material.CARROT, CSCoreLib.randomizer().nextInt(3) + 1);
- if (fits(b, drop)) {
- pushItems(b, drop);
- Ageable ageable = (Ageable) block.getBlockData();
- ageable.setAge(0);
- block.setBlockData(ageable);
- block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
- }
- }
- break;
- }
- case BEETROOTS: {
- if (isFullGrown(block)) {
- ItemStack drop = new ItemStack(Material.BEETROOT, CSCoreLib.randomizer().nextInt(3) + 1);
- if (fits(b, drop)) {
- pushItems(b, drop);
- Ageable ageable = (Ageable) block.getBlockData();
- ageable.setAge(0);
- block.setBlockData(ageable);
- block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
- }
- }
- break;
- }
- case COCOA: {
- if (isFullGrown(block)) {
- ItemStack drop = new ItemStack(Material.COCOA_BEANS, CSCoreLib.randomizer().nextInt(3) + 1);
- if (fits(b, drop)) {
- pushItems(b, drop);
- Ageable ageable = (Ageable) block.getBlockData();
- ageable.setAge(0);
- block.setBlockData(ageable);
- block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
- }
- }
- break;
- }
- case NETHER_WART: {
- if (isFullGrown(block)) {
- ItemStack drop = new ItemStack(Material.NETHER_WART, CSCoreLib.randomizer().nextInt(3) + 1);
- if (fits(b, drop)) {
- pushItems(b, drop);
- Ageable ageable = (Ageable) block.getBlockData();
- ageable.setAge(0);
- block.setBlockData(ageable);
- block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
- }
- }
- break;
- }
- default:
- break;
- }
- }
-
- private void exoticFarm(Block b, Block block) {
- farm(b, block);
- if (SlimefunStartup.instance.isExoticGardenInstalled()) {
- ItemStack drop = ExoticGarden.harvestPlant(block);
- if (drop != null && fits(b, drop)) {
- pushItems(b, drop);
- block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, block.getType());
- }
- }
- }
-
- private void constructMenu(BlockMenuPreset preset) throws Exception {
- for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
- }
- for (int i : border_out) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
- }
-
- for (int i : getOutputSlots()) {
- preset.addMenuClickHandler(i, new AdvancedMenuClickHandler() {
-
- @Override
- public boolean onClick(Player p, int slot, ItemStack cursor, ClickAction action) {
- return false;
- }
-
- @Override
- public boolean onClick(InventoryClickEvent e, Player p, int slot, ItemStack cursor, ClickAction action) {
- return cursor == null || cursor.getType() == null || cursor.getType() == Material.AIR;
- }
- });
- }
-
- if (getTier() == 1) {
- preset.addItem(34, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on solid Fuel", "&re.g. Coal, Wood, etc..."),
- (p, slot, item, action) -> false
- );
- }
- else if (getTier() == 2){
- preset.addItem(34, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on liquid Fuel", "&re.g. Lava, Oil, Fuel, etc..."),
- (p, slot, item, action) -> false
- );
- }
- else {
- preset.addItem(34, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&8\u21E9 &cFuel Input &8\u21E9", "", "&rThis Android runs on radioactive Fuel", "&re.g. Uranium, Neptunium or Boosted Uranium"),
- (p, slot, item, action) -> false
- );
- }
- }
-
- public void openScriptEditor(Player p, final Block b) throws Exception {
- ChestMenu menu = new ChestMenu("&eScript Editor");
-
- menu.addItem(1, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDliZjZkYjRhZWRhOWQ4ODIyYjlmNzM2NTM4ZThjMThiOWE0ODQ0Zjg0ZWI0NTUwNGFkZmJmZWU4N2ViIn19fQ=="), "&2> Edit Script", "", "&aEdits your current Script"),
- (pl, slot, item, action) -> {
- try {
- openScript(pl, b, BlockStorage.getLocationInfo(b.getLocation(), "script"));
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- );
-
- menu.addItem(3, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTcxZDg5NzljMTg3OGEwNTk4N2E3ZmFmMjFiNTZkMWI3NDRmOWQwNjhjNzRjZmZjZGUxZWExZWRhZDU4NTIifX19"), "&4> Create new Script", "", "&cDeletes your current Script", "&cand creates a blank one"),
- (pl, slot, item, action) -> {
- try {
- openScript(pl, b, "START-TURN_LEFT-REPEAT");
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- );
-
- menu.addItem(5, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzAxNTg2ZTM5ZjZmZmE2M2I0ZmIzMDFiNjVjYTdkYThhOTJmNzM1M2FhYWI4OWQzODg2NTc5MTI1ZGZiYWY5In19fQ=="), "&6> Download a Script", "", "&eDownload a Script from the Server", "&eYou can edit or simply use it"),
- (pl, slot, item, action) -> {
- try {
- openScriptDownloader(pl, b, 1);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- );
-
- menu.addItem(8, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTE4NWM5N2RiYjgzNTNkZTY1MjY5OGQyNGI2NDMyN2I3OTNhM2YzMmE5OGJlNjdiNzE5ZmJlZGFiMzVlIn19fQ=="), "&6> Back", "", "&7Return to the Android's interface"),
- (pl, slot, item, action) -> {
- try {
- BlockStorage.getInventory(b).open(p);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- );
-
- menu.open(p);
- }
-
- public void openScript(final Player p, final Block b, final String script) throws Exception {
- ChestMenu menu = new ChestMenu("&eScript Editor");
- final String[] commands = script.split("-");
-
- menu.addItem(0, new CustomItem(ScriptPart.START.toItemStack(), ScriptPart.START.toItemStack().getItemMeta().getDisplayName(), "", "&7\u21E8 &eLeft Click &7to return to the Android's interface"));
- menu.addMenuClickHandler(0, (pl, slot, item, action) -> {
- BlockStorage.getInventory(b).open(pl);
- return false;
- });
-
- for (int i = 1; i < commands.length; i++) {
- final int index = i;
- if (i == commands.length - 1) {
- int additional = commands.length == 54 ? 0: 1;
-
- if (additional == 1) {
- menu.addItem(i, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTcxZDg5NzljMTg3OGEwNTk4N2E3ZmFmMjFiNTZkMWI3NDRmOWQwNjhjNzRjZmZjZGUxZWExZWRhZDU4NTIifX19"), "&7> Add new Command"));
- menu.addMenuClickHandler(i, (pl, slot, item, action) -> {
- try {
- openScriptComponentEditor(pl, b, script, index);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- });
- }
-
- menu.addItem(i + additional, new CustomItem(ScriptPart.REPEAT.toItemStack(), ScriptPart.REPEAT.toItemStack().getItemMeta().getDisplayName(), "", "&7\u21E8 &eLeft Click &7to return to the Android's interface"));
- menu.addMenuClickHandler(i + additional, (pl, slot, item, action) -> {
- BlockStorage.getInventory(b).open(pl);
- return false;
- });
- }
- else {
- ItemStack stack = ScriptPart.valueOf(commands[i]).toItemStack();
- menu.addItem(i, new CustomItem(stack, stack.getItemMeta().getDisplayName(), "", "&7\u21E8 &eLeft Click &7to edit", "&7\u21E8 &eRight Click &7to delete", "&7\u21E8 &eShift + Right Click &7to duplicate"));
- menu.addMenuClickHandler(i, (pl, slot, item, action) -> {
- if (action.isRightClicked() && action.isShiftClicked()) {
- if (commands.length == 54) return false;
-
- int j = 0;
- StringBuilder builder = new StringBuilder("START-");
- for (String command : commands) {
- if (j > 0) {
- if (j == index) {
- builder.append(commands[j] + "-");
- builder.append(commands[j] + "-");
- }
- else if (j < commands.length - 1) builder.append(command + "-");
- }
- j++;
- }
- builder.append("REPEAT");
- BlockStorage.addBlockInfo(b, "script", builder.toString());
-
- try {
- openScript(pl, b, builder.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- else if (action.isRightClicked()) {
- int j = 0;
- StringBuilder builder = new StringBuilder("START-");
- for (String command : commands) {
- if (j != index && j > 0 && j < commands.length - 1) builder.append(command + "-");
- j++;
- }
- builder.append("REPEAT");
- BlockStorage.addBlockInfo(b, "script", builder.toString());
- try {
- openScript(pl, b, builder.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- else {
- try {
- openScriptComponentEditor(pl, b, script, index);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return false;
- });
- }
- }
-
- menu.open(p);
- }
-
- private void openScriptDownloader(final Player p, final Block b, final int page) throws Exception {
- final ChestMenu menu = new ChestMenu("Android Scripts");
-
- menu.addMenuOpeningHandler(
- (pl) -> pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_HAT, 0.7F, 0.7F)
- );
-
- List scripts = getUploadedScripts();
-
- int index = 0;
- final int pages = (scripts.size() / 45) + 1;
-
- for (int i = 45; i < 54; i++) {
- menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "));
- menu.addMenuClickHandler(i,
- (pl, slot, item, action) -> false
- );
- }
-
- menu.addItem(46, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&r\u21E6 Previous Page", "", "&7(" + page + " / " + pages + ")"));
- menu.addMenuClickHandler(46, (pl, slot, item, action) -> {
- int next = page - 1;
- if (next < 1) next = pages;
- if (next != page) {
- try {
- openScriptDownloader(pl, b, next);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return false;
- });
-
- menu.addItem(48, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTA1YTJjYWI4YjY4ZWE1N2UzYWY5OTJhMzZlNDdjOGZmOWFhODdjYzg3NzYyODE5NjZmOGMzY2YzMWEzOCJ9fX0="), "&eUpload a Script", "", "&6Click &7to upload your Android's Script", "&7to the Database"));
- menu.addMenuClickHandler(48, (pl, slot, item, action) -> {
- final String code = BlockStorage.getLocationInfo(b.getLocation(), "script");
- int num = 1;
-
- for (Config script: getUploadedScripts()) {
- if (script.getString("author").equals(pl.getUniqueId().toString())) num++;
- if (script.getString("code").equals(code)) {
- Messages.local.sendTranslation(pl, "android.scripts.already-uploaded", true);
- return false;
- }
- }
-
- final int id = num;
-
- pl.closeInventory();
- Messages.local.sendTranslation(pl, "android.scripts.enter-name", true);
-
- MenuHelper.awaitChatInput(pl, (player, message) -> {
- Config script = new Config("plugins/Slimefun/scripts/" + getAndroidType().toString() + "/" + p.getName() + " " + id + ".sfs");
-
- script.setValue("author", player.getUniqueId().toString());
- script.setValue("author_name", player.getName());
- script.setValue("name", ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', message)));
- script.setValue("code", code);
- script.setValue("downloads", 0);
- script.setValue("android", getAndroidType().toString());
- script.setValue("rating.positive", new ArrayList());
- script.setValue("rating.negative", new ArrayList());
- script.save();
-
- try {
- Messages.local.sendTranslation(player, "android.uploaded", true);
- openScriptDownloader(player, b, page);
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- return false;
- });
- return false;
- });
-
- menu.addItem(50, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), "&rNext Page \u21E8", "", "&7(" + page + " / " + pages + ")"));
- menu.addMenuClickHandler(50, (pl, slot, item, action) -> {
- int next = page + 1;
- if (next > pages) next = 1;
- if (next != page) {
- try {
- openScriptDownloader(pl, b, next);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return false;
- });
-
- menu.addItem(53, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTE4NWM5N2RiYjgzNTNkZTY1MjY5OGQyNGI2NDMyN2I3OTNhM2YzMmE5OGJlNjdiNzE5ZmJlZGFiMzVlIn19fQ=="), "&6> Back", "", "&7Return to the Android's interface"));
- menu.addMenuClickHandler(53, (pl, slot, item, action) -> {
- try {
- openScriptEditor(pl, b);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- });
-
- int category_index = 45 * (page - 1);
- for (int i = 0; i < 45; i++) {
- int target = category_index + i;
- if (target >= scripts.size()) break;
- else {
- final Config script = scripts.get(target);
-
- OfflinePlayer op = Bukkit.getOfflinePlayer(script.getUUID("author"));
- String author = (op != null && op.getName() != null) ? op.getName(): script.getString("author_name");
-
- if (script.getString("author").equals(p.getUniqueId().toString())) {
- menu.addItem(index, new CustomItem(this.getItem(), "&b" + script.getString("name"), "&7by &r" + author, "", "&7Downloads: &r" + script.getInt("downloads"), "&7Rating: " + getScriptRatingPercentage(script), "&a" + getScriptRating(script, true) + " \u263A &7- &4\u2639 " + getScriptRating(script, false), "", "&eLeft Click &rto download this Script", "&4(This will override your current Script)"));
- }
- else {
- menu.addItem(index, new CustomItem(this.getItem(), "&b" + script.getString("name"), "&7by &r" + author, "", "&7Downloads: &r" + script.getInt("downloads"), "&7Rating: " + getScriptRatingPercentage(script), "&a" + getScriptRating(script, true) + " \u263A &7- &4\u2639 " + getScriptRating(script, false), "", "&eLeft Click &rto download this Script", "&4(This will override your current Script)", "&eShift + Left Click &rto leave a positive Rating", "&eShift + Right Click &rto leave a negative Rating"));
- }
-
- menu.addMenuClickHandler(index, (pl, slot, item, action) -> {
- Config script2 = new Config(script.getFile());
-
- if (action.isShiftClicked()) {
- if (script2.getString("author").equals(pl.getUniqueId().toString())) {
- Messages.local.sendTranslation(pl, "android.scripts.rating.own", true);
- }
- else if (action.isRightClicked()) {
- if (!script2.getStringList("rating.negative").contains(pl.getUniqueId().toString()) && !script2.getStringList("rating.positive").contains(pl.getUniqueId().toString())) {
- List list = script2.getStringList("rating.negative");
- list.add(p.getUniqueId().toString());
-
- script2.setValue("rating.negative", list);
- script2.save();
-
- try {
- openScriptDownloader(pl, b, page);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- else {
- Messages.local.sendTranslation(pl, "android.scripts.rating.already", true);
- }
- }
- else {
- if (!script2.getStringList("rating.negative").contains(pl.getUniqueId().toString()) && !script2.getStringList("rating.positive").contains(pl.getUniqueId().toString())) {
- List list = script2.getStringList("rating.positive");
- list.add(pl.getUniqueId().toString());
-
- script2.setValue("rating.positive", list);
- script2.save();
-
- try {
- openScriptDownloader(pl, b, page);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- else {
- Messages.local.sendTranslation(pl, "android.scripts.rating.already", true);
- }
- }
- }
- else if (!action.isRightClicked()) {
- try {
- script2.setValue("downloads", script2.getInt("downloads") + 1);
- script2.save();
-
- BlockStorage.addBlockInfo(b, "script", script2.getString("code"));
- openScriptEditor(pl, b);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return false;
- });
-
- index++;
- }
- }
-
- menu.open(p);
- }
-
- public float getScriptRating(Config script) {
- int positive = getScriptRating(script, true) + 1;
- int negative = getScriptRating(script, false);
- return Math.round((positive / (double) (positive + negative)) * 100.0f) / 100.0f;
- }
-
- private int getScriptRating(Config script, boolean positive) {
- if (positive) return script.getStringList("rating.positive").size();
- else return script.getStringList("rating.negative").size();
- }
-
- private String getScriptRatingPercentage(Config script) {
- String progress = String.valueOf(getScriptRating(script));
- if (Float.parseFloat(progress) < 16.0F) progress = "&4" + progress + "&r% ";
- else if (Float.parseFloat(progress) < 32.0F) progress = "&c" + progress + "&r% ";
- else if (Float.parseFloat(progress) < 48.0F) progress = "&6" + progress + "&r% ";
- else if (Float.parseFloat(progress) < 64.0F) progress = "&e" + progress + "&r% ";
- else if (Float.parseFloat(progress) < 80.0F) progress = "&2" + progress + "&r% ";
- else progress = "&a" + progress + "&r% ";
-
- return progress;
- }
-
- protected void openScriptComponentEditor(Player p, final Block b, final String script, final int index) throws Exception {
- ChestMenu menu = new ChestMenu("&eScript Editor");
-
- final String[] commands = script.split("-");
-
- for (int i = 0; i < 9; i++) {
- menu.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
- (pl, slot, item, action) -> false
- );
- }
-
- menu.addItem(9, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTYxMzlmZDFjNTY1NGU1NmU5ZTRlMmM4YmU3ZWIyYmQ1YjQ5OWQ2MzM2MTY2NjNmZWVlOTliNzQzNTJhZDY0In19fQ=="), "&rDo nothing"),
- (pl, slot, item, action) -> {
- int i = 0;
- StringBuilder builder = new StringBuilder("START-");
- for (String command : commands) {
- if (i != index && i > 0 && i < commands.length - 1) builder.append(command + "-");
- i++;
- }
- builder.append("REPEAT");
- BlockStorage.addBlockInfo(b, "script", builder.toString());
- try {
- openScript(p, b, builder.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- );
-
- int i = 10;
- for (final ScriptPart part : getAccessibleScriptParts()) {
- menu.addItem(i, part.toItemStack(),
- (pl, slot, item, action) -> {
- int j = 0;
- StringBuilder builder = new StringBuilder("START-");
- for (String command : commands) {
- if (j > 0) {
- if (j == index) builder.append(part.toString() + "-");
- else if (j < commands.length - 1) builder.append(command + "-");
- }
- j++;
- }
- builder.append("REPEAT");
- BlockStorage.addBlockInfo(b, "script", builder.toString());
-
- try {
- openScript(pl, b, builder.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- );
- i++;
- }
-
- menu.open(p);
- }
-
- private Inventory inject(Block b) {
- int size = BlockStorage.getInventory(b).toInventory().getSize();
- Inventory inv = Bukkit.createInventory(null, size);
- for (int i = 0; i < size; i++) {
- inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
- }
- for (int slot: getOutputSlots()) {
- inv.setItem(slot, BlockStorage.getInventory(b).getItemInSlot(slot));
- }
- return inv;
- }
-
- protected boolean fits(Block b, ItemStack... items) {
- return inject(b).addItem(items).isEmpty();
- }
-
- protected void pushItems(Block b, ItemStack... items) {
- Inventory inv = inject(b);
- inv.addItem(items);
-
- for (int slot : getOutputSlots()) {
- BlockStorage.getInventory(b).replaceExistingItem(slot, inv.getItem(slot));
- }
- }
-
- public void addItems(Block b, ItemStack... items) {
- this.pushItems(b, items);
- }
-
- @Override
- public void register(boolean slimefun) {
- addItemHandler(new BlockTicker() {
-
- @Override
- public void tick(Block b, SlimefunItem sf, Config data) {
- if (b != null) ProgrammableAndroid.this.tick(b);
- }
-
- @Override
- public void uniqueTick() {
- }
-
- @Override
- public boolean isSynchronized() {
- return true;
- }
- });
-
- super.register(slimefun);
- }
-
- public void registerFuel(MachineFuel fuel) {
- this.recipes.add(fuel);
- }
-
- public List getUploadedScripts() {
- List scripts = new ArrayList();
-
- File directory = new File("plugins/Slimefun/scripts/" + this.getAndroidType().toString());
- if (!directory.exists()) directory.mkdirs();
-
- for (File script : directory.listFiles()) {
- if (script.getName().endsWith("sfs")) scripts.add(new Config(script));
- }
-
- if (!this.getAndroidType().equals(AndroidType.NONE)) {
- File directory2 = new File("plugins/Slimefun/scripts/NONE");
- if (!directory2.exists()) directory2.mkdirs();
-
- for (File script : directory2.listFiles()) {
- if (script.getName().endsWith("sfs")) scripts.add(new Config(script));
- }
- }
-
- Collections.sort(scripts, new ScriptReputationSorter(this));
-
- return scripts;
- }
-
- public List getAccessibleScriptParts() {
- List list = new ArrayList();
-
- for (final ScriptPart part : ScriptPart.values()) {
- if (!part.equals(ScriptPart.START) && !part.equals(ScriptPart.REPEAT) && getAndroidType().isType(part.getRequiredType())) {
- list.add(part);
- }
- }
-
- return list;
- }
-
-}
diff --git a/src/me/mrCookieSlime/Slimefun/CSCoreLibSetup/CSCoreLibLoader.java b/src/me/mrCookieSlime/Slimefun/CSCoreLibSetup/CSCoreLibLoader.java
deleted file mode 100644
index ce5cce8e4..000000000
--- a/src/me/mrCookieSlime/Slimefun/CSCoreLibSetup/CSCoreLibLoader.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package me.mrCookieSlime.Slimefun.CSCoreLibSetup;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLConnection;
-
-import org.bukkit.plugin.Plugin;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-
-public class CSCoreLibLoader {
-
- Plugin plugin;
- URL url;
- URL download;
- File file;
-
- public CSCoreLibLoader(Plugin plugin) {
- this.plugin = plugin;
- try {
- this.url = new URL("https://api.curseforge.com/servermods/files?projectIds=88802");
- } catch (MalformedURLException e) {
- }
- }
-
- public boolean load() {
- if (plugin.getServer().getPluginManager().isPluginEnabled("CS-CoreLib")) return true;
- else {
- System.err.println(" ");
- System.err.println("#################### - INFO - ####################");
- System.err.println(" ");
- System.err.println(plugin.getName() + " could not be loaded.");
- System.err.println("It appears that you have not installed CS-CoreLib");
- System.err.println("Your Server will now try to download and install");
- System.err.println("CS-CoreLib for you.");
- System.err.println("You will be asked to restart your Server when it's finished.");
- System.err.println("If this somehow fails, please download and install CS-CoreLib manually:");
- System.err.println("https://dev.bukkit.org/projects/cs-corelib");
- System.err.println(" ");
- System.err.println("#################### - INFO - ####################");
- System.err.println(" ");
- plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, () -> {
- if (connect()) install();
- }, 10L);
- return false;
- }
- }
-
- private boolean connect() {
- try {
- final URLConnection connection = this.url.openConnection();
- connection.setConnectTimeout(5000);
- connection.addRequestProperty("User-Agent", "CS-CoreLib Loader (by mrCookieSlime)");
- connection.setDoOutput(true);
-
- final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
- final JsonArray array = new JsonParser().parse(reader).getAsJsonArray();
- final JsonObject json = array.get(array.size() - 1).getAsJsonObject();
-
- download = traceURL(json.get("downloadUrl").getAsString().replace("https:", "http:"));
- file = new File("plugins/" + json.get("name").getAsString() + ".jar");
-
- return true;
- } catch (IOException e) {
- System.err.println(" ");
- System.err.println("#################### - WARNING - ####################");
- System.err.println(" ");
- System.err.println("Could not connect to BukkitDev.");
- System.err.println("Please download & install CS-CoreLib manually:");
- System.err.println("https://dev.bukkit.org/projects/cs-corelib");
- System.err.println(" ");
- System.err.println("#################### - WARNING - ####################");
- System.err.println(" ");
- return false;
- }
- }
-
- private URL traceURL(String location) throws IOException {
- HttpURLConnection connection = null;
-
- while (true) {
- URL url = new URL(location);
- connection = (HttpURLConnection) url.openConnection();
-
- connection.setInstanceFollowRedirects(false);
- connection.setConnectTimeout(5000);
- connection.addRequestProperty("User-Agent", "Auto Updater (by mrCookieSlime)");
-
- switch (connection.getResponseCode()) {
- case HttpURLConnection.HTTP_MOVED_PERM:
- case HttpURLConnection.HTTP_MOVED_TEMP:
- String loc = connection.getHeaderField("Location");
- location = new URL(new URL(location), loc).toExternalForm();
- continue;
- }
- break;
- }
-
- return new URL(connection.getURL().toString().replaceAll(" ", "%20"));
- }
-
- private void install() {
- BufferedInputStream input = null;
- FileOutputStream output = null;
- try {
- input = new BufferedInputStream(download.openStream());
- output = new FileOutputStream(file);
-
- final byte[] data = new byte[1024];
- int read;
- while ((read = input.read(data, 0, 1024)) != -1) {
- output.write(data, 0, read);
- }
- } catch (Exception ex) {
- System.err.println(" ");
- System.err.println("#################### - WARNING - ####################");
- System.err.println(" ");
- System.err.println("Failed to download CS-CoreLib");
- System.err.println("Please download & install CS-CoreLib manually:");
- System.err.println("https://dev.bukkit.org/projects/cs-corelib");
- System.err.println(" ");
- System.err.println("#################### - WARNING - ####################");
- System.err.println(" ");
- } finally {
- try {
- if (input != null) input.close();
- if (output != null) output.close();
- System.err.println(" ");
- System.err.println("#################### - INFO - ####################");
- System.err.println(" ");
- System.err.println("Please restart your Server to finish the Installation");
- System.err.println("of " + plugin.getName() + " and CS-CoreLib");
- System.err.println(" ");
- System.err.println("#################### - INFO - ####################");
- System.err.println(" ");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
-}
diff --git a/src/me/mrCookieSlime/Slimefun/Events/MultiBlockInteractEvent.java b/src/me/mrCookieSlime/Slimefun/Events/MultiBlockInteractEvent.java
index 77740205b..0737cc11d 100644
--- a/src/me/mrCookieSlime/Slimefun/Events/MultiBlockInteractEvent.java
+++ b/src/me/mrCookieSlime/Slimefun/Events/MultiBlockInteractEvent.java
@@ -12,18 +12,18 @@ public class MultiBlockInteractEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
- Player p;
- MultiBlock mb;
- Block b;
- boolean cancelled;
+ private Player p;
+ private MultiBlock mb;
+ private Block b;
+ private boolean cancelled;
public HandlerList getHandlers() {
return handlers;
}
-
+
public static HandlerList getHandlerList() {
- return handlers;
- }
+ return handlers;
+ }
public MultiBlockInteractEvent(Player p, MultiBlock mb, Block clicked) {
this.p = p;
diff --git a/src/me/mrCookieSlime/Slimefun/Events/ResearchUnlockEvent.java b/src/me/mrCookieSlime/Slimefun/Events/ResearchUnlockEvent.java
index 474fd2ffe..9b2ba24aa 100644
--- a/src/me/mrCookieSlime/Slimefun/Events/ResearchUnlockEvent.java
+++ b/src/me/mrCookieSlime/Slimefun/Events/ResearchUnlockEvent.java
@@ -11,17 +11,17 @@ public class ResearchUnlockEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
- Player p;
- Research r;
- boolean cancelled;
+ private Player p;
+ private Research r;
+ private boolean cancelled;
public HandlerList getHandlers() {
return handlers;
}
-
+
public static HandlerList getHandlerList() {
- return handlers;
- }
+ return handlers;
+ }
public ResearchUnlockEvent(Player p, Research res) {
this.p = p;
diff --git a/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java b/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java
index 012d1058f..71e50e7c0 100644
--- a/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java
+++ b/src/me/mrCookieSlime/Slimefun/GEO/OreGenResource.java
@@ -5,16 +5,24 @@ import org.bukkit.inventory.ItemStack;
public interface OreGenResource {
- // Returns the default supply of this resource in that biome
- public int getDefaultSupply(Biome biome);
+ /**
+ * Returns the default supply of this resource in that biome
+ */
+ int getDefaultSupply(Biome biome);
- // Name/ID e.g. "Oil"
- public String getName();
+ /**
+ * Name/ID e.g. "Oil"
+ */
+ String getName();
- // For the GEO-Scanner
- public ItemStack getIcon();
+ /**
+ * For the GEO-Scanner
+ */
+ ItemStack getIcon();
- // Measurement Unit e.g. "Buckets"
- public String getMeasurementUnit();
+ /**
+ * Measurement Unit e.g. "Buckets"
+ */
+ String getMeasurementUnit();
}
diff --git a/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java b/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java
index fe547c8a4..31c75f4de 100644
--- a/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java
+++ b/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java
@@ -1,26 +1,27 @@
package me.mrCookieSlime.Slimefun.GEO;
import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.logging.Level;
import org.bukkit.Chunk;
import org.bukkit.block.Biome;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
-public class OreGenSystem {
+public final class OreGenSystem {
- public static Map map = new HashMap<>();
+ private OreGenSystem() {}
public static Collection listResources() {
- return map.values();
+ return SlimefunPlugin.getUtilities().resources.values();
}
public static void registerResource(OreGenResource resource) {
- map.put(resource.getName(), resource);
- System.out.println("[Slimefun - GEO] Registering Ore Gen: " + resource.getName());
+ SlimefunPlugin.getUtilities().resources.put(resource.getName(), resource);
+ Slimefun.getLogger().log(Level.INFO, "Registering Ore Gen: " + resource.getName());
Config cfg = new Config("plugins/Slimefun/generators/" + resource.getName() + ".cfg");
for (Biome biome: Biome.values()) {
@@ -30,7 +31,7 @@ public class OreGenSystem {
}
public static OreGenResource getResource(String name) {
- return map.get(name);
+ return SlimefunPlugin.getUtilities().resources.get(name);
}
private static int getDefault(OreGenResource resource, Biome biome) {
diff --git a/src/me/mrCookieSlime/Slimefun/GEO/Resources/NetherIceResource.java b/src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java
similarity index 79%
rename from src/me/mrCookieSlime/Slimefun/GEO/Resources/NetherIceResource.java
rename to src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java
index 3445c3bdd..2a86ea450 100644
--- a/src/me/mrCookieSlime/Slimefun/GEO/Resources/NetherIceResource.java
+++ b/src/me/mrCookieSlime/Slimefun/GEO/resources/NetherIceResource.java
@@ -1,4 +1,4 @@
-package me.mrCookieSlime.Slimefun.GEO.Resources;
+package me.mrCookieSlime.Slimefun.GEO.resources;
import org.bukkit.block.Biome;
import org.bukkit.inventory.ItemStack;
@@ -10,14 +10,7 @@ public class NetherIceResource implements OreGenResource {
@Override
public int getDefaultSupply(Biome biome) {
- switch (biome) {
- case NETHER: {
- return 32;
- }
- default: {
- return 0;
- }
- }
+ return biome == Biome.NETHER ? 32: 0;
}
@Override
diff --git a/src/me/mrCookieSlime/Slimefun/GEO/Resources/OilResource.java b/src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java
similarity index 85%
rename from src/me/mrCookieSlime/Slimefun/GEO/Resources/OilResource.java
rename to src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java
index 16817b518..cac4cbd09 100644
--- a/src/me/mrCookieSlime/Slimefun/GEO/Resources/OilResource.java
+++ b/src/me/mrCookieSlime/Slimefun/GEO/resources/OilResource.java
@@ -1,4 +1,4 @@
-package me.mrCookieSlime.Slimefun.GEO.Resources;
+package me.mrCookieSlime.Slimefun.GEO.resources;
import org.bukkit.block.Biome;
import org.bukkit.inventory.ItemStack;
@@ -14,35 +14,30 @@ public class OilResource implements OreGenResource {
switch (biome) {
case SNOWY_BEACH:
case STONE_SHORE:
- case BEACH: {
+ case BEACH:
return CSCoreLib.randomizer().nextInt(6) + 2;
- }
case DESERT:
case DESERT_HILLS:
- case DESERT_LAKES: {
+ case DESERT_LAKES:
return CSCoreLib.randomizer().nextInt(40) + 19;
- }
case MOUNTAINS:
case GRAVELLY_MOUNTAINS:
case MOUNTAIN_EDGE:
- case RIVER: {
+ case RIVER:
return CSCoreLib.randomizer().nextInt(14) + 13;
- }
case SNOWY_MOUNTAINS:
case SNOWY_TUNDRA:
case ICE_SPIKES:
case FROZEN_OCEAN:
- case FROZEN_RIVER: {
+ case FROZEN_RIVER:
return CSCoreLib.randomizer().nextInt(11) + 3;
- }
case THE_END:
- case NETHER: {
+ case NETHER:
return 0;
- }
case BADLANDS:
@@ -52,24 +47,20 @@ public class OilResource implements OreGenResource {
case MODIFIED_BADLANDS_PLATEAU:
case MODIFIED_WOODED_BADLANDS_PLATEAU:
case MUSHROOM_FIELDS:
- case MUSHROOM_FIELD_SHORE: {
+ case MUSHROOM_FIELD_SHORE:
return CSCoreLib.randomizer().nextInt(24) + 14;
- }
case DEEP_OCEAN:
- case OCEAN: {
+ case OCEAN:
return CSCoreLib.randomizer().nextInt(62) + 24;
- }
case SWAMP:
- case SWAMP_HILLS: {
+ case SWAMP_HILLS:
return CSCoreLib.randomizer().nextInt(20) + 4;
- }
- default: {
+ default:
return CSCoreLib.randomizer().nextInt(10) + 6;
}
- }
}
@Override
diff --git a/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java b/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java
index 175259f84..88ecba204 100644
--- a/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java
+++ b/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java
@@ -1,7 +1,6 @@
package me.mrCookieSlime.Slimefun.GPS;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Set;
import java.util.UUID;
import org.bukkit.ChatColor;
@@ -16,13 +15,14 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.CustomBookOverlay;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.MenuHelper;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
-public class Elevator {
-
- public static List ignored = new ArrayList<>();
+public final class Elevator {
+ private Elevator() {}
+
public static void openEditor(Player p, final Block b) {
ChestMenu menu = new ChestMenu("Elevator Settings");
@@ -35,7 +35,7 @@ public class Elevator {
pl.sendMessage("");
MenuHelper.awaitChatInput(pl, (player, message) -> {
- BlockStorage.addBlockInfo(b, "floor", message.replaceAll("&", "&"));
+ BlockStorage.addBlockInfo(b, "floor", message.replace(ChatColor.COLOR_CHAR, '&'));
player.sendMessage("");
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&4&l>> &eSuccessfully named this Floor:"));
@@ -53,8 +53,10 @@ public class Elevator {
}
public static void openDialogue(Player p, Block b) {
- if (ignored.contains(p.getUniqueId())) {
- ignored.remove(p.getUniqueId());
+ Set elevatorUsers = SlimefunPlugin.getUtilities().elevatorUsers;
+
+ if (elevatorUsers.contains(p.getUniqueId())) {
+ elevatorUsers.remove(p.getUniqueId());
return;
}
diff --git a/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java b/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java
index 46214dad7..bc0425cc4 100644
--- a/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java
+++ b/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java
@@ -5,6 +5,7 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
+import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -24,6 +25,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.MenuHelper;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.GEO.OreGenResource;
import me.mrCookieSlime.Slimefun.GEO.OreGenSystem;
import me.mrCookieSlime.Slimefun.Setup.Messages;
@@ -35,17 +37,21 @@ public class GPSNetwork {
private int[] border = new int[] {0, 1, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
private int[] inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43};
- public void updateTransmitter(Block b, UUID uuid, NetworkStatus status) {
+ private static final int[] teleporter_border = new int[] {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
+ private static final int[] teleporter_inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43};
+
+ public void updateTransmitter(Location l, UUID uuid, NetworkStatus status) {
Set set = new HashSet<>();
if (transmitters.containsKey(uuid)) set = transmitters.get(uuid);
- if (status.equals(NetworkStatus.ONLINE)) {
- if (!set.contains(b.getLocation())) {
- set.add(b.getLocation());
+
+ if (status == NetworkStatus.ONLINE) {
+ if (!set.contains(l)) {
+ set.add(l);
transmitters.put(uuid, set);
}
}
else {
- set.remove(b.getLocation());
+ set.remove(l);
transmitters.put(uuid, set);
}
}
@@ -64,7 +70,7 @@ public class GPSNetwork {
else return transmitters.get(uuid).size();
}
- public void openTransmitterControlPanel(Player p) throws Exception {
+ public void openTransmitterControlPanel(Player p) {
ChestMenu menu = new ChestMenu("&9Control Panel");
for (int slot : border) {
@@ -73,37 +79,35 @@ public class GPSNetwork {
);
}
- menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &e(Selected)"));
- menu.addMenuClickHandler(2,
- (pl, slot, item, action) -> false
- );
-
- menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (getNetworkComplexity(p.getUniqueId()) > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + getNetworkComplexity(p.getUniqueId())));
- menu.addMenuClickHandler(4,
- (pl, slot, item, action) -> false
- );
-
- menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &r(Select)"));
- menu.addMenuClickHandler(6, (pl, slot, item, action) -> {
- try {
- openWaypointControlPanel(pl);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- });
-
- int index = 0;
- for (Location l : getTransmitters(p.getUniqueId())) {
- if (index >= inventory.length) break;
- int slot = inventory[index];
-
- menu.addItem(slot, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS Transmitter", "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &7Signal Strength: &r" + l.getBlockY(), "&8\u21E8 &7Ping: &r" + DoubleHandler.fixDouble(1000D / l.getY()) + "ms"));
- menu.addMenuClickHandler(slot,
- (pl, slotn, item, action) -> false
+ try {
+ menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &e(Selected)"));
+ menu.addMenuClickHandler(2,
+ (pl, slot, item, action) -> false
);
- index++;
+ menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (getNetworkComplexity(p.getUniqueId()) > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + getNetworkComplexity(p.getUniqueId())));
+ menu.addMenuClickHandler(4,
+ (pl, slot, item, action) -> false
+ );
+
+ menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &r(Select)"));
+ menu.addMenuClickHandler(6, (pl, slot, item, action) -> {
+ openWaypointControlPanel(pl);
+ return false;
+ });
+
+ int index = 0;
+ for (Location l : getTransmitters(p.getUniqueId())) {
+ if (index >= inventory.length) break;
+ int slot = inventory[index];
+
+ menu.addItem(slot, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS Transmitter", "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &7Signal Strength: &r" + l.getBlockY(), "&8\u21E8 &7Ping: &r" + DoubleHandler.fixDouble(1000D / l.getY()) + "ms"));
+ menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> false);
+
+ index++;
+ }
+ } catch(Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the GPS Transmitter Panel for Slimefun " + Slimefun.getVersion(), x);
}
menu.open(p);
@@ -115,10 +119,10 @@ public class GPSNetwork {
if (entry.getKey().startsWith("&4Deathpoint")) {
return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWFlMzg1NWY5NTJjZDRhMDNjMTQ4YTk0NmUzZjgxMmE1OTU1YWQzNWNiY2I1MjYyN2VhNGFjZDQ3ZDMwODEifX19");
}
- else if (l.getWorld().getEnvironment().equals(Environment.NETHER)) {
+ else if (l.getWorld().getEnvironment() == Environment.NETHER) {
return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDgzNTcxZmY1ODlmMWE1OWJiMDJiODA4MDBmYzczNjExNmUyN2MzZGNmOWVmZWJlZGU4Y2YxZmRkZSJ9fX0=");
}
- else if (l.getWorld().getEnvironment().equals(Environment.THE_END)) {
+ else if (l.getWorld().getEnvironment() == Environment.THE_END) {
return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzZjYWM1OWIyYWFlNDg5YWEwNjg3YjVkODAyYjI1NTVlYjE0YTQwYmQ2MmIyMWViMTE2ZmE1NjljZGI3NTYifX19");
}
else {
@@ -126,61 +130,53 @@ public class GPSNetwork {
}
}
- public void openWaypointControlPanel(Player p) throws Exception {
+ public void openWaypointControlPanel(Player p) {
ChestMenu menu = new ChestMenu("&9Control Panel");
for (int slot: border) {
- menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
- (pl, slotn, item, action) -> false
- );
+ menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (pl, slotn, item, action) -> false);
}
- menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &r(Select)"));
- menu.addMenuClickHandler(2, (pl, slot, item, action) -> {
- try {
+ try {
+ menu.addItem(2, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&7Transmitter Overview &r(Select)"));
+ menu.addMenuClickHandler(2, (pl, slot, item, action) -> {
openTransmitterControlPanel(pl);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- });
-
- menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (getNetworkComplexity(p.getUniqueId()) > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + getNetworkComplexity(p.getUniqueId())));
- menu.addMenuClickHandler(4,
- (pl, slot, item, action) -> false
- );
-
- menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Selected)"));
- menu.addMenuClickHandler(6,
- (pl, slot, item, action) -> false
- );
-
- int index = 0;
- for (final Map.Entry entry : getWaypoints(p.getUniqueId()).entrySet()) {
- if (index >= inventory.length) break;
- int slot = inventory[index];
-
- Location l = entry.getValue();
- ItemStack globe = getPlanet(entry);
-
- menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &cClick to delete"));
- menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> {
- String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', entry.getKey())).toUpperCase().replace(" ", "_");
- Config cfg = new Config("data-storage/Slimefun/waypoints/" + pl.getUniqueId().toString() + ".yml");
- cfg.setValue(id, null);
- cfg.save();
- pl.playSound(pl.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F);
- try {
- openWaypointControlPanel(pl);
- } catch (Exception e) {
- e.printStackTrace();
- }
return false;
});
- index++;
+ menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&7Network Info", "", "&8\u21E8 &7Status: " + (getNetworkComplexity(p.getUniqueId()) > 0 ? "&2&lONLINE": "&4&lOFFLINE"), "&8\u21E8 &7Complexity: &r" + getNetworkComplexity(p.getUniqueId())));
+ menu.addMenuClickHandler(4, (pl, slot, item, action) -> false);
+
+ menu.addItem(6, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Selected)"));
+ menu.addMenuClickHandler(6, (pl, slot, item, action) -> false);
+
+ int index = 0;
+ for (final Map.Entry entry : getWaypoints(p.getUniqueId()).entrySet()) {
+ if (index >= inventory.length) break;
+ int slot = inventory[index];
+
+ Location l = entry.getValue();
+ ItemStack globe = getPlanet(entry);
+
+ menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "", "&8\u21E8 &cClick to delete"));
+ menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> {
+ String id = ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', entry.getKey())).toUpperCase().replace(" ", "_");
+ Config cfg = new Config("data-storage/Slimefun/waypoints/" + pl.getUniqueId().toString() + ".yml");
+ cfg.setValue(id, null);
+ cfg.save();
+ pl.playSound(pl.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F);
+
+ openWaypointControlPanel(pl);
+ return false;
+ });
+
+ index++;
+ }
}
-
+ catch(Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the GPS Waypoint Panel for Slimefun " + Slimefun.getVersion(), x);
+ }
+
menu.open(p);
}
@@ -223,7 +219,7 @@ public class GPSNetwork {
}
public Set getTransmitters(UUID uuid) {
- return transmitters.containsKey(uuid) ? transmitters.get(uuid): new HashSet();
+ return transmitters.containsKey(uuid) ? transmitters.get(uuid): new HashSet<>();
}
public void scanChunk(Player p, Chunk chunk) {
@@ -238,29 +234,22 @@ public class GPSNetwork {
for (OreGenResource resource: OreGenSystem.listResources()) {
int supply = OreGenSystem.getSupplies(resource, chunk, true);
- menu.addItem(index, new CustomItem(resource.getIcon(), "&7Resource: &e" + resource.getName(), "", "&7Scanned Chunk:", "&8\u21E8 &7X: " + chunk.getX() + " Z: " + chunk.getZ(), "", "&7Result: &e" + supply + " " + resource.getMeasurementUnit()),
- (pl, slot, item, action) -> false
- );
+ menu.addItem(index, new CustomItem(resource.getIcon(), "&7Resource: &e" + resource.getName(), "", "&7Scanned Chunk:", "&8\u21E8 &7X: " + chunk.getX() + " Z: " + chunk.getZ(), "", "&7Result: &e" + supply + " " + resource.getMeasurementUnit()), (pl, slot, item, action) -> false);
index++;
}
menu.open(p);
}
- private final static int[] teleporter_border = new int[] {0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
- private final static int[] teleporter_inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43};
-
- public static void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) throws Exception {
- if (TeleportationSequence.players.contains(p.getUniqueId())) return;
+ public static void openTeleporterGUI(Player p, UUID uuid, Block b, final int complexity) {
+ if (SlimefunPlugin.getUtilities().teleporterUsers.contains(p.getUniqueId())) return;
p.playSound(p.getLocation(), Sound.UI_BUTTON_CLICK, 1F, 1F);
- TeleportationSequence.players.add(p.getUniqueId());
+ SlimefunPlugin.getUtilities().teleporterUsers.add(p.getUniqueId());
ChestMenu menu = new ChestMenu("&3Teleporter");
- menu.addMenuCloseHandler(
- pl -> TeleportationSequence.players.remove(pl.getUniqueId())
- );
+ menu.addMenuCloseHandler(pl -> SlimefunPlugin.getUtilities().teleporterUsers.remove(pl.getUniqueId()));
for (int slot : teleporter_border) {
menu.addItem(slot, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
@@ -268,28 +257,31 @@ public class GPSNetwork {
);
}
- menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Select a Destination)"));
- menu.addMenuClickHandler(4,
- (pl, slot, item, action) -> false
- );
-
- final Location source = new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + 2D, b.getZ() + 0.5D);
- int index = 0;
- for (final Map.Entry entry: Slimefun.getGPSNetwork().getWaypoints(uuid).entrySet()) {
- if (index >= teleporter_inventory.length) break;
- int slot = teleporter_inventory[index];
+ try {
+ menu.addItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzljODg4MWU0MjkxNWE5ZDI5YmI2MWExNmZiMjZkMDU5OTEzMjA0ZDI2NWRmNWI0MzliM2Q3OTJhY2Q1NiJ9fX0="), "&7Waypoint Overview &e(Select a Destination)"));
+ menu.addMenuClickHandler(4, (pl, slot, item, action) -> false);
- final Location l = entry.getValue();
- ItemStack globe = getPlanet(entry);
-
- menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "&8\u21E8 &7Estimated Teleportation Time: &r" + (50 / TeleportationSequence.getSpeed(Slimefun.getGPSNetwork().getNetworkComplexity(uuid), source, l)) + "s", "", "&8\u21E8 &cClick to select"));
- menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> {
- pl.closeInventory();
- TeleportationSequence.start(pl.getUniqueId(), complexity, source, l, false);
- return false;
- });
-
- index++;
+ final Location source = new Location(b.getWorld(), b.getX() + 0.5D, b.getY() + 2D, b.getZ() + 0.5D);
+ int index = 0;
+ for (final Map.Entry entry: Slimefun.getGPSNetwork().getWaypoints(uuid).entrySet()) {
+ if (index >= teleporter_inventory.length) break;
+ int slot = teleporter_inventory[index];
+
+ final Location l = entry.getValue();
+ ItemStack globe = getPlanet(entry);
+
+ menu.addItem(slot, new CustomItem(globe, entry.getKey(), "&8\u21E8 &7World: &r" + l.getWorld().getName(), "&8\u21E8 &7X: &r" + l.getX(), "&8\u21E8 &7Y: &r" + l.getY(), "&8\u21E8 &7Z: &r" + l.getZ(), "&8\u21E8 &7Estimated Teleportation Time: &r" + (50 / TeleportationSequence.getSpeed(Slimefun.getGPSNetwork().getNetworkComplexity(uuid), source, l)) + "s", "", "&8\u21E8 &cClick to select"));
+ menu.addMenuClickHandler(slot, (pl, slotn, item, action) -> {
+ pl.closeInventory();
+ TeleportationSequence.start(pl.getUniqueId(), complexity, source, l, false);
+ return false;
+ });
+
+ index++;
+ }
+ }
+ catch (Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating a Teleporter Menu for Slimefun " + Slimefun.getVersion(), x);
}
menu.open(p);
diff --git a/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java b/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java
index 10798406e..9ca69123c 100644
--- a/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java
+++ b/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java
@@ -1,8 +1,7 @@
package me.mrCookieSlime.Slimefun.GPS;
-import java.util.HashSet;
-import java.util.Set;
import java.util.UUID;
+import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -15,14 +14,15 @@ import org.bukkit.potion.PotionEffectType;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder.TitleType;
-import me.mrCookieSlime.Slimefun.SlimefunStartup;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
-public class TeleportationSequence {
-
- public static Set players = new HashSet<>();
+public final class TeleportationSequence {
+
+ private TeleportationSequence() {}
public static void start(UUID uuid, int complexity, Location source, Location destination, boolean resistance) {
- players.add(uuid);
+ SlimefunPlugin.getUtilities().teleporterUsers.add(uuid);
updateProgress(uuid, getSpeed(complexity, source, destination), 1, source, destination, resistance);
}
@@ -50,7 +50,8 @@ public class TeleportationSequence {
}
private static void cancel(UUID uuid, Player p) {
- players.remove(uuid);
+ SlimefunPlugin.getUtilities().teleporterUsers.remove(uuid);
+
if (p != null) {
try {
TitleBuilder title = (TitleBuilder) new TitleBuilder(20, 60, 20).addText(ChatColor.translateAlternateColorCodes('&', "&4Teleportation cancelled"));
@@ -59,7 +60,7 @@ public class TeleportationSequence {
title.send(TitleType.TITLE, p);
subtitle.send(TitleType.SUBTITLE, p);
} catch(Exception x) {
- x.printStackTrace();
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while cancelling a Teleportation Sequence for Slimefun " + Slimefun.getVersion(), x);
}
}
}
@@ -84,7 +85,7 @@ public class TeleportationSequence {
destination.getWorld().spawnParticle(Particle.PORTAL,new Location(destination.getWorld(), destination.getX(), destination.getY() + 1, destination.getZ()),progress * 2, 0.2F, 0.8F, 0.2F );
destination.getWorld().playSound(destination, Sound.ENTITY_BLAZE_DEATH, 2F, 1.4F);
- players.remove(uuid);
+ SlimefunPlugin.getUtilities().teleporterUsers.remove(uuid);
}
else {
TitleBuilder title = (TitleBuilder) new TitleBuilder(0, 60, 0).addText(ChatColor.translateAlternateColorCodes('&', "&3Teleporting..."));
@@ -96,12 +97,10 @@ public class TeleportationSequence {
source.getWorld().spawnParticle(Particle.PORTAL, source, progress * 2, 0.2F, 0.8F, 0.2F);
source.getWorld().playSound(source, Sound.UI_BUTTON_CLICK, 1.7F, 0.6F);
- Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
- updateProgress(uuid, speed, progress + speed, source, destination, resistance);
- }, 10l);
+ Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> updateProgress(uuid, speed, progress + speed, source, destination, resistance), 10L);
}
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured during a Teleportation Sequence for Slimefun " + Slimefun.getVersion(), x);
}
}
else cancel(uuid, p);
diff --git a/src/me/mrCookieSlime/Slimefun/Lists/Categories.java b/src/me/mrCookieSlime/Slimefun/Lists/Categories.java
index 912cc6ce0..65e59cace 100644
--- a/src/me/mrCookieSlime/Slimefun/Lists/Categories.java
+++ b/src/me/mrCookieSlime/Slimefun/Lists/Categories.java
@@ -1,16 +1,13 @@
package me.mrCookieSlime.Slimefun.Lists;
+import org.bukkit.Color;
+import org.bukkit.Material;
+
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomArmor;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.MenuItem;
-import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.LockedCategory;
-import me.mrCookieSlime.Slimefun.Objects.SeasonCategory;
-
-import org.bukkit.ChatColor;
-import org.bukkit.Color;
-import org.bukkit.Material;
+import me.mrCookieSlime.Slimefun.Objects.SeasonalCategory;
/**
* Built-in categories.
@@ -19,42 +16,35 @@ import org.bukkit.Material;
* @since 4.0
* @see Category
*/
-public class Categories {
+public final class Categories {
- public static Category WEAPONS = new Category(new MenuItem(Material.GOLDEN_SWORD, "&7Weapons", 0, "open"), 1);
- public static Category PORTABLE = null;
- public static Category FOOD = new Category(new MenuItem(Material.APPLE, "&7Food", 0, "open"), 2);
- public static Category MACHINES_1 = null;
- public static LockedCategory ELECTRICITY = null;
- public static LockedCategory GPS = null;
- public static Category ARMOR = new Category(new MenuItem(Material.IRON_CHESTPLATE, "&7Armor", 0, "open"), 2);
- public static Category LUMPS_AND_MAGIC = new Category(new MenuItem(Material.FIRE_CHARGE, "&7Magical Items", 0, "open"), 2);
- public static Category MAGIC = new Category(new MenuItem(Material.BLAZE_POWDER, "&7Magical Gadgets", 0, "open"), 3);
- public static Category MISC = null;
- public static Category TECH = new Category(new CustomArmor(new MenuItem(Material.LEATHER_CHESTPLATE, "&7Technical Gadgets", 0, "open"), Color.SILVER), 3);
- public static Category RESOURCES = null;
- public static Category CARGO = null;
- public static Category TECH_MISC = new Category(new MenuItem(Material.COMPARATOR, "&7Technical Components", 0, "open"), 2);
- public static Category MAGIC_ARMOR = new Category(new MenuItem(Material.GOLDEN_CHESTPLATE, "&7Magical Armor", 0, "open"), 2);
- public static Category TALISMANS_1 = new Category(new MenuItem(Material.EMERALD, "&7Talismans - &aTier I", 0, "open"), 2);
- public static LockedCategory TALISMANS_2 = new LockedCategory(new MenuItem(Material.EMERALD, "&7Talismans - &aTier II", 0, "open"), 3, TALISMANS_1);
- public static Category TOOLS = new Category(new MenuItem(Material.GOLDEN_PICKAXE, "&7Tools", 0, "open"), 1);
- public static SeasonCategory CHRISTMAS = new SeasonCategory(12, 1, new MenuItem(Material.NETHER_STAR, "&aC&ch&ar&ci&as&ct&am&ca&as", 0, ChatColor.translateAlternateColorCodes('&', "&chelp &aSanta")));
- public static SeasonCategory VALENTINES_DAY = new SeasonCategory(2, 2, new MenuItem(Material.POPPY, "&dValentine's Day", 0, ChatColor.translateAlternateColorCodes('&', "&dcelebrate Love")));
- public static SeasonCategory EASTER = new SeasonCategory(4, 2, new MenuItem(Material.EGG, "&6Easter", 0, ChatColor.translateAlternateColorCodes('&', "&apaint some Eggs")));
- public static SeasonCategory BIRTHDAY = new SeasonCategory(10, 1, new MenuItem(Material.FIREWORK_ROCKET, "&a&lTheBusyBiscuit's Birthday &7(26th October)", 0, ChatColor.translateAlternateColorCodes('&', "&acelebrate with me")));
+ private Categories() {}
+
+ private static final String LORE = "&a> Click to open";
+
+ public static final Category WEAPONS = new Category(new CustomItem(Material.GOLDEN_SWORD, "&7Weapons", "", LORE), 1);
+ public static final Category PORTABLE = new Category(new CustomItem(SlimefunItems.BACKPACK_MEDIUM, "&7Items", "", LORE), 1);
+ public static final Category FOOD = new Category(new CustomItem(Material.APPLE, "&7Food", "", LORE), 2);
+ public static final Category MACHINES_1 = new Category(new CustomItem(Material.SMITHING_TABLE, "&7Basic Machines", "", LORE), 1);
+ public static final LockedCategory ELECTRICITY = new LockedCategory(new CustomItem(SlimefunItems.NUCLEAR_REACTOR, "&bEnergy and Electricity", "", LORE), 4, MACHINES_1);
+ public static final LockedCategory GPS = new LockedCategory(new CustomItem(SlimefunItems.GPS_TRANSMITTER, "&bGPS-based Machines", "", LORE), 4, MACHINES_1);
+ public static final Category ARMOR = new Category(new CustomItem(Material.IRON_CHESTPLATE, "&7Armor", "", LORE), 2);
+ public static final Category LUMPS_AND_MAGIC = new Category(new CustomItem(SlimefunItems.RUNE_ENDER, "&7Magical Items", "", LORE), 2);
+ public static final Category MAGIC = new Category(new CustomItem(Material.ELYTRA, "&7Magical Gadgets", "", LORE), 3);
+ public static final Category MISC = new Category(new CustomItem(SlimefunItems.CAN, "&7Miscellaneous", "", LORE), 2);
+ public static final Category TECH = new Category(new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&7Technical Gadgets", "", LORE), Color.SILVER), 3);
+ public static final Category RESOURCES = new Category(new CustomItem(SlimefunItems.SYNTHETIC_SAPPHIRE, "&7Resources", "", LORE), 1);
+ public static final Category CARGO = new LockedCategory(new CustomItem(SlimefunItems.CARGO_MANAGER, "&cCargo Management", "", LORE), 4, MACHINES_1);
+ public static final Category TECH_MISC = new Category(new CustomItem(SlimefunItems.HEATING_COIL, "&7Technical Components", "", LORE), 2);
+ public static final Category MAGIC_ARMOR = new Category(new CustomItem(SlimefunItems.ENDER_HELMET, "&7Magical Armor", "", LORE), 2);
+ public static final Category TALISMANS_1 = new Category(new CustomItem(Material.EMERALD, "&7Talismans - &aTier I", "", LORE), 2);
+ public static final LockedCategory TALISMANS_2 = new LockedCategory(new CustomItem(Material.EMERALD, "&7Talismans - &aTier II", "", LORE), 3, TALISMANS_1);
+ public static final Category TOOLS = new Category(new CustomItem(Material.GOLDEN_PICKAXE, "&7Tools", "", LORE), 1);
+
+ // Seasonal Categories
+ public static final SeasonalCategory CHRISTMAS = new SeasonalCategory(12, 1, new CustomItem(Material.NETHER_STAR, "&aC&ch&ar&ci&as&ct&am&ca&as", "", "&c> Click to help &aSanta"));
+ public static final SeasonalCategory VALENTINES_DAY = new SeasonalCategory(2, 2, new CustomItem(Material.POPPY, "&dValentine's Day", "", "&d> Click to celebrate Love"));
+ public static final SeasonalCategory EASTER = new SeasonalCategory(4, 2, new CustomItem(Material.EGG, "&6Easter", "", "&a> Click to paint some Eggs"));
+ public static final SeasonalCategory BIRTHDAY = new SeasonalCategory(10, 1, new CustomItem(Material.FIREWORK_ROCKET, "&a&lTheBusyBiscuit's Birthday &7(26th October)", "", "&a> Click to celebrate with me"));
- static {
- try {
- MISC = new Category(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTRkYTk3ZjA4MGUzOTViODQyYzRjYzgyYTg0MDgyM2Q0ZGJkOGNhNjg4YTIwNjg1M2U1NzgzZTRiZmRjMDEyIn19fQ=="), "&7Miscellaneous", "", "&a> Click to open"), 2);
- PORTABLE = new Category(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&7Items", "", "&a> Click to open"), 1);
- MACHINES_1 = new Category(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&7Basic Machines", "", "&a> Click to open"), 1);
- ELECTRICITY = new LockedCategory(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTU4NDQzMmFmNmYzODIxNjcxMjAyNThkMWVlZThjODdjNmU3NWQ5ZTQ3OWU3YjBkNGM3YjZhZDQ4Y2ZlZWYifX19"), "&bEnergy and Electricity", "", "&a> Click to open"), 4, MACHINES_1);
- GPS = new LockedCategory(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS-based Machines", "", "&a> Click to open"), 4, MACHINES_1);
- RESOURCES = new Category(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2U4ZjVhZGIxNGQ2YzlmNmI4MTBkMDI3NTQzZjFhOGMxZjQxN2UyZmVkOTkzYzk3YmNkODljNzRmNWUyZTgifX19"), "&7Resources", "", "&a> Click to open"), 1);
- CARGO = new LockedCategory(new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0="), "&cCargo Management", "", "&a> Click to open"), 4, MACHINES_1);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java b/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java
index 607a07c6a..fdb190ca1 100644
--- a/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java
+++ b/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java
@@ -14,26 +14,26 @@ import org.bukkit.inventory.ItemStack;
public class RecipeType {
- public static final RecipeType MULTIBLOCK = new RecipeType(new CustomItem(Material.BRICK, "&bMultiBlock", 0, new String[] {"", "&a&oBuild it in the World"}));
- public static final RecipeType ARMOR_FORGE = new RecipeType(new CustomItem(Material.ANVIL, "&bArmor Forge", 0, new String[] {"", "&a&oCraft it in an Armor Forge"}), "ARMOR_FORGE");
- public static final RecipeType GRIND_STONE = new RecipeType(new CustomItem(Material.DISPENSER, "&bGrind Stone", 0, new String[] {"", "&a&oGrind it using the Grind Stone"}), "GRIND_STONE");
- public static final RecipeType MOB_DROP = new RecipeType(new CustomItem(Material.IRON_SWORD, "&bMob Drop", 0, new String[] {"", "&a&oKill the specified Mob to obtain this Item"}));
- public static final RecipeType SMELTERY = new RecipeType(new CustomItem(Material.FURNACE, "&6Smeltery", 0, new String[] {"", "&a&oSmelt it using a Smeltery"}), "SMELTERY");
- public static final RecipeType ORE_CRUSHER = new RecipeType(new CustomItem(Material.DISPENSER, "&bOre Crusher", 0, new String[] {"", "&a&oCrush it using the Ore Crusher"}), "ORE_CRUSHER");
- public static final RecipeType GOLD_PAN = new RecipeType(new CustomItem(Material.BOWL, "&bGold Pan", 0, new String[] {"", "&a&oUse a Gold Pan on Gravel to obtain this Item"}));
- public static final RecipeType COMPRESSOR = new RecipeType(new CustomItem(Material.PISTON, "&bCompressor", 0, new String[] {"", "&a&oCompress it using the Compressor"}), "COMPRESSOR");
- public static final RecipeType PRESSURE_CHAMBER = new RecipeType(new CustomItem(Material.GLASS, "&bPressure Chamber", 0, new String[] {"", "&a&oCompress it using the Pressure Chamber"}), "PRESSURE_CHAMBER");
- public static final RecipeType OVEN = new RecipeType(new CustomItem(Material.FURNACE, "&bOven", 0, new String[] {"", "&a&oSmelt it in an Oven"}), "OVEN");
- public static final RecipeType MAGIC_WORKBENCH = new RecipeType(new CustomItem(Material.BOOKSHELF, "&6Magic Workbench", 0, new String[] {"", "&a&oCraft it in a Magic Workbench"}), "MAGIC_WORKBENCH");
- public static final RecipeType ORE_WASHER = new RecipeType(new CustomItem(Material.CAULDRON, "&6Ore Washer", 0, new String[] {"", "&a&oWash it in an Ore Washer"}), "ORE_WASHER");
- public static final RecipeType ENHANCED_CRAFTING_TABLE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eEnhanced Crafting Table", 0, new String[] {"", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power..."}), "ENHANCED_CRAFTING_TABLE");
- public static final RecipeType JUICER = new RecipeType(new CustomItem(Material.GLASS_BOTTLE, "&eJuicer", 0, new String[] {"", "&a&oUsed for Juice Creation"}), "JUICER");
- public static final RecipeType ANCIENT_ALTAR = new RecipeType(new CustomItem(Material.ENCHANTING_TABLE, "&4Ancient Altar", 0, new String[] {"", "&dYou will need to craft this Item", "&dby performing an Ancient Altar Ritual"}));
+ public static final RecipeType MULTIBLOCK = new RecipeType(new CustomItem(Material.BRICK, "&bMultiBlock", "", "&a&oBuild it in the World"));
+ public static final RecipeType ARMOR_FORGE = new RecipeType(new CustomItem(Material.ANVIL, "&bArmor Forge", "", "&a&oCraft it in an Armor Forge"), "ARMOR_FORGE");
+ public static final RecipeType GRIND_STONE = new RecipeType(new CustomItem(Material.DISPENSER, "&bGrind Stone", "", "&a&oGrind it using the Grind Stone"), "GRIND_STONE");
+ public static final RecipeType MOB_DROP = new RecipeType(new CustomItem(Material.IRON_SWORD, "&bMob Drop", "", "&a&oKill the specified Mob to obtain this Item"));
+ public static final RecipeType SMELTERY = new RecipeType(new CustomItem(Material.FURNACE, "&6Smeltery", "", "&a&oSmelt it using a Smeltery"), "SMELTERY");
+ public static final RecipeType ORE_CRUSHER = new RecipeType(new CustomItem(Material.DISPENSER, "&bOre Crusher", "", "&a&oCrush it using the Ore Crusher"), "ORE_CRUSHER");
+ public static final RecipeType GOLD_PAN = new RecipeType(new CustomItem(Material.BOWL, "&bGold Pan", "", "&a&oUse a Gold Pan on Gravel to obtain this Item"));
+ public static final RecipeType COMPRESSOR = new RecipeType(new CustomItem(Material.PISTON, "&bCompressor", "", "&a&oCompress it using the Compressor"), "COMPRESSOR");
+ public static final RecipeType PRESSURE_CHAMBER = new RecipeType(new CustomItem(Material.GLASS, "&bPressure Chamber", "", "&a&oCompress it using the Pressure Chamber"), "PRESSURE_CHAMBER");
+ public static final RecipeType OVEN = new RecipeType(new CustomItem(Material.FURNACE, "&bOven", "", "&a&oSmelt it in an Oven"), "OVEN");
+ public static final RecipeType MAGIC_WORKBENCH = new RecipeType(new CustomItem(Material.BOOKSHELF, "&6Magic Workbench", "", "&a&oCraft it in a Magic Workbench"), "MAGIC_WORKBENCH");
+ public static final RecipeType ORE_WASHER = new RecipeType(new CustomItem(Material.CAULDRON, "&6Ore Washer", "", "&a&oWash it in an Ore Washer"), "ORE_WASHER");
+ public static final RecipeType ENHANCED_CRAFTING_TABLE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eEnhanced Crafting Table", "", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power..."), "ENHANCED_CRAFTING_TABLE");
+ public static final RecipeType JUICER = new RecipeType(new CustomItem(Material.GLASS_BOTTLE, "&eJuicer", "", "&a&oUsed for Juice Creation"), "JUICER");
+ public static final RecipeType ANCIENT_ALTAR = new RecipeType(new CustomItem(Material.ENCHANTING_TABLE, "&4Ancient Altar", "", "&dYou will need to craft this Item", "&dby performing an Ancient Altar Ritual"));
public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType(new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS), "&cHeated Pressure Chamber", "", "&a&oCraft this Item in a", "&a&oHeated Pressure Chamber"), "HEATED_PRESSURE_CHAMBER");
- public static final RecipeType SHAPED_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShaped Recipe", 0, new String[] {"", "&a&oJust a standard Recipe in the Workbench..."}));
- public static final RecipeType SHAPELESS_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShapeless Recipe", 0, new String[] {"", "&a&oJust a standard Recipe in the Workbench..."}));
- public static final RecipeType FURNACE = new RecipeType(new CustomItem(Material.FURNACE, "&eFurnace Recipe", 0, new String[] {"", "&a&oJust smelt it in a regular Furnace"}));
+ public static final RecipeType SHAPED_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShaped Recipe", "", "&a&oJust a standard Recipe in the Workbench..."));
+ public static final RecipeType SHAPELESS_RECIPE = new RecipeType(new CustomItem(Material.CRAFTING_TABLE, "&eShapeless Recipe", "", "&a&oJust a standard Recipe in the Workbench..."));
+ public static final RecipeType FURNACE = new RecipeType(new CustomItem(Material.FURNACE, "&eFurnace Recipe", "", "&a&oJust smelt it in a regular Furnace"));
public static final RecipeType NULL = new RecipeType(null);
private ItemStack item;
diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java
index a0456b9d1..cc02ae1c6 100644
--- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java
+++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java
@@ -1,10 +1,15 @@
package me.mrCookieSlime.Slimefun.Lists;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.FireworkEffect;
import org.bukkit.FireworkEffect.Type;
import org.bukkit.Material;
+import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.FireworkEffectMeta;
import org.bukkit.potion.PotionEffect;
@@ -15,412 +20,522 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomPotion;
import me.mrCookieSlime.CSCoreLibPlugin.general.String.Christmas;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
-public class SlimefunItems {
+public final class SlimefunItems {
+
+ private SlimefunItems() {}
/* Items */
- public static ItemStack PORTABLE_CRAFTER = null;
- public static ItemStack PORTABLE_DUSTBIN = null;
- public static ItemStack ENDER_BACKPACK = null;
- public static ItemStack MAGIC_EYE_OF_ENDER = new CustomItem(Material.ENDER_EYE, "&6&lMagic Eye of Ender", "&4&lRequires full Ender Armor", "", "&7&eRight Click&7 to shoot an Ender Pearl");
- public static ItemStack BROKEN_SPAWNER = new CustomItem(Material.SPAWNER, "&cBroken Spawner", "&7Type: &b", "", "&cFractured, must be repaired in an Ancient Altar");
- public static ItemStack REPAIRED_SPAWNER = new CustomItem(Material.SPAWNER, "&bReinforced Spawner", "&7Type: &b");
- public static ItemStack INFERNAL_BONEMEAL = new CustomItem(Material.BONE_MEAL, "&4Infernal Bonemeal", "", "&cSpeeds up the Growth of", "&cNether Warts as well");
+ public static final ItemStack PORTABLE_CRAFTER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzJlYzRhNGJkOGE1OGY4MzYxZjhhMDMwM2UyMTk5ZDMzZDYyNGVhNWY5MmY3Y2IzNDE0ZmVlOTVlMmQ4NjEifX19"), "&6Portable Crafter", "&a&oA portable Crafting Table", "", "&eRight Click&7 to open");
+ public static final ItemStack PORTABLE_DUSTBIN = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzJkNDEwNDJjZTk5MTQ3Y2MzOGNhYzllNDY3NDE1NzZlN2VlNzkxMjgzZTZmYWM4ZDMyOTJjYWUyOTM1ZjFmIn19fQ=="), "&6Portable Dustbin", "&rYour portable Item-Destroyer", "", "&eRight Click&7 to open");
+ public static final ItemStack ENDER_BACKPACK = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&6Ender Backpack","&a&oA portable Ender Chest", "", "&eRight Click&7 to open");
+ public static final ItemStack MAGIC_EYE_OF_ENDER = new CustomItem(Material.ENDER_EYE, "&6&lMagic Eye of Ender", "&4&lRequires full Ender Armor", "", "&7&eRight Click&7 to shoot an Ender Pearl");
+ public static final ItemStack BROKEN_SPAWNER = new CustomItem(Material.SPAWNER, "&cBroken Spawner", "&7Type: &b", "", "&cFractured, must be repaired in an Ancient Altar");
+ public static final ItemStack REPAIRED_SPAWNER = new CustomItem(Material.SPAWNER, "&bReinforced Spawner", "&7Type: &b");
+ public static final ItemStack INFERNAL_BONEMEAL = new CustomItem(Material.BONE_MEAL, "&4Infernal Bonemeal", "", "&cSpeeds up the Growth of", "&cNether Warts as well");
/* Gadgets */
- public static ItemStack GOLD_PAN = new CustomItem(Material.BOWL, "&6Gold Pan", "&a&oCan get you all kinds of Goodies...", "", "&7&eRight Click&7 to pan various Stuff out of Gravel");
- public static ItemStack PARACHUTE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&r&lParachute", "", "&7Hold &eShift&7 to use"), Color.WHITE);
- public static ItemStack GRAPPLING_HOOK = new CustomItem(Material.LEAD, "&6Grappling Hook", "", "&7&eRight Click&7 to use");
- public static ItemStack SOLAR_HELMET = new CustomItem(Material.IRON_HELMET, "&bSolar Helmet", "", "&a&oCharges held Items and Armor");
- public static ItemStack CLOTH = new CustomItem(Material.PAPER, "&bCloth");
- public static ItemStack CAN = null;
- public static ItemStack NIGHT_VISION_GOGGLES = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&aNight Vision Goggles", "", "&9+ Night Vision"), Color.BLACK);
- public static ItemStack FARMER_SHOES = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&eFarmer Shoes", "", "&6&oPrevents you from trampling your Crops"), Color.YELLOW);
- public static ItemStack INFUSED_MAGNET = null;
- public static ItemStack FLASK_OF_KNOWLEDGE = new CustomItem(Material.GLASS_BOTTLE, "&cFlask of Knowledge", "", "&rAllows you to store some of", "&ryour Experience in a Bottle", "&7Cost: &a1 Level");
- public static ItemStack RAG = new CustomItem(Material.PAPER, "&cRag", "", "&aLevel I - Medical Supply", "", "&rRestores 2 Hearts", "&rExtinguishes Fire", "", "&7&eRight Click&7 to use");
- public static ItemStack BANDAGE = new CustomItem(Material.PAPER, "&cBandage", "", "&aLevel II - Medical Supply", "", "&rRestores 4 Hearts", "&rExtinguishes Fire", "", "&7&eRight Click&7 to use");
- public static ItemStack SPLINT = new CustomItem(Material.STICK, "&cSplint", "", "&aLevel I - Medical Supply", "", "&rRestores 2 Hearts", "", "&7&eRight Click&7 to use");
- public static ItemStack VITAMINS = new CustomItem(Material.NETHER_WART, "&cVitamins", "", "&aLevel III - Medical Supply", "", "&rRestores 4 Hearts", "&rExtinguishes Fire", "&rCures Poison/Wither/Radiation", "", "&7&eRight Click&7 to use");
- public static ItemStack MEDICINE = new CustomPotion("&cMedicine", Color.RED, new PotionEffect(PotionEffectType.HEAL, 0, 0), "", "&aLevel III - Medical Supply", "", "&rRestores 4 Hearts", "&rExtinguishes Fire", "&rCures Poison/Wither/Radiation");
+ public static final ItemStack GOLD_PAN = new CustomItem(Material.BOWL, "&6Gold Pan", "&a&oCan get you all kinds of Goodies...", "", "&7&eRight Click&7 to pan various Stuff out of Gravel");
+ public static final ItemStack PARACHUTE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&r&lParachute", "", "&7Hold &eShift&7 to use"), Color.WHITE);
+ public static final ItemStack GRAPPLING_HOOK = new CustomItem(Material.LEAD, "&6Grappling Hook", "", "&7&eRight Click&7 to use");
+ public static final ItemStack SOLAR_HELMET = new CustomItem(Material.IRON_HELMET, "&bSolar Helmet", "", "&a&oCharges held Items and Armor");
+ public static final ItemStack CLOTH = new CustomItem(Material.PAPER, "&bCloth");
+ public static final ItemStack CAN = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTRkYTk3ZjA4MGUzOTViODQyYzRjYzgyYTg0MDgyM2Q0ZGJkOGNhNjg4YTIwNjg1M2U1NzgzZTRiZmRjMDEyIn19fQ=="), "&rTin Can");
+ public static final ItemStack NIGHT_VISION_GOGGLES = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&aNight Vision Goggles", "", "&9+ Night Vision"), Color.BLACK);
+ public static final ItemStack FARMER_SHOES = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&eFarmer Shoes", "", "&6&oPrevents you from trampling your Crops"), Color.YELLOW);
+ public static final ItemStack INFUSED_MAGNET = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWJhOGViYzRjNmE4MTczMDk0NzQ5OWJmN2UxZDVlNzNmZWQ2YzFiYjJjMDUxZTk2ZDM1ZWIxNmQyNDYxMGU3In19fQ=="), "&aInfused Magnet" , "", "&rMagical infused Magnets", "&rattract nearby Items", "&ras long as it is somewhere in", "&ryour Inventory", "", "&7Hold &eShift&7 to pick up nearby Items");
+ public static final ItemStack FLASK_OF_KNOWLEDGE = new CustomItem(Material.GLASS_BOTTLE, "&cFlask of Knowledge", "", "&rAllows you to store some of", "&ryour Experience in a Bottle", "&7Cost: &a1 Level");
+ public static final ItemStack RAG = new CustomItem(Material.PAPER, "&cRag", "", "&aLevel I - Medical Supply", "", "&rRestores 2 Hearts", "&rExtinguishes Fire", "", "&7&eRight Click&7 to use");
+ public static final ItemStack BANDAGE = new CustomItem(Material.PAPER, "&cBandage", "", "&aLevel II - Medical Supply", "", "&rRestores 4 Hearts", "&rExtinguishes Fire", "", "&7&eRight Click&7 to use");
+ public static final ItemStack SPLINT = new CustomItem(Material.STICK, "&cSplint", "", "&aLevel I - Medical Supply", "", "&rRestores 2 Hearts", "", "&7&eRight Click&7 to use");
+ public static final ItemStack VITAMINS = new CustomItem(Material.NETHER_WART, "&cVitamins", "", "&aLevel III - Medical Supply", "", "&rRestores 4 Hearts", "&rExtinguishes Fire", "&rCures Poison/Wither/Radiation", "", "&7&eRight Click&7 to use");
+ public static final ItemStack MEDICINE = new CustomPotion("&cMedicine", Color.RED, new PotionEffect(PotionEffectType.HEAL, 0, 0), "", "&aLevel III - Medical Supply", "", "&rRestores 4 Hearts", "&rExtinguishes Fire", "&rCures Poison/Wither/Radiation");
/* Backpacks */
- public static ItemStack BACKPACK_SMALL = null;
- public static ItemStack BACKPACK_MEDIUM = null;
- public static ItemStack BACKPACK_LARGE = null;
- public static ItemStack WOVEN_BACKPACK = null;
- public static ItemStack GILDED_BACKPACK = null;
- public static ItemStack RADIANT_BACKPACK = null;
- public static ItemStack BOUND_BACKPACK = null;
- public static ItemStack COOLER = null;
+ public static final ItemStack BACKPACK_SMALL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eSmall Backpack","", "&7Size: &e9", "&7ID: ", "", "&7&eRight Click&7 to open");
+ public static final ItemStack BACKPACK_MEDIUM = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eBackpack","", "&7Size: &e18", "&7ID: ", "", "&7&eRight Click&7 to open");
+ public static final ItemStack BACKPACK_LARGE = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eLarge Backpack","", "&7Size: &e27", "&7ID: ", "", "&7&eRight Click&7 to open");
+ public static final ItemStack WOVEN_BACKPACK = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eWoven Backpack","", "&7Size: &e36", "&7ID: ", "", "&7&eRight Click&7 to open");
+ public static final ItemStack GILDED_BACKPACK = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eGilded Backpack","", "&7Size: &e45", "&7ID: ", "", "&7&eRight Click&7 to open");
+ public static final ItemStack RADIANT_BACKPACK = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eRadiant Backpack","", "&7Size: &e54 (Double chest)", "&7ID: ", "", "&7&eRight Click&7 to open");
+ public static final ItemStack BOUND_BACKPACK = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&cSoulbound Backpack","", "&7Size: &e36", "&7ID: ", "", "&7&eRight Click&7 to open");
+ public static final ItemStack COOLER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDRjMTU3MjU4NGViNWRlMjI5ZGU5ZjVhNGY3NzlkMGFhY2JhZmZkMzNiY2IzM2ViNDUzNmE2YTJiYzZhMSJ9fX0="), "&bCooler","&rAllows you to store Juices/Smoothies", "&rand automatically consumes them when you are hungry", "&rand you have this in your Inventory", "", "&7Size: &e27", "&7ID: ", "", "&7&eRight Click&7 to open");
+
+ public static final ItemStack VOIDBAG_SMALL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&4Small Void Bag","", "&7Size: &e9", "&7ID: ", "", "&7&eLeft Click&7 to suck up nearby Items", "&7&eRight Click&7 to open");
+ public static final ItemStack VOIDBAG_MEDIUM = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&4Void Bag","", "&7Size: &e18", "&7ID: ", "", "&7&eLeft Click&7 to suck up nearby Items", "&7&eRight Click&7 to open");
+ public static final ItemStack VOIDBAG_BIG = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&4Big Void Bag","", "&7Size: &e27", "&7ID: ", "", "&7&eLeft Click&7 to suck up nearby Items", "&7&eRight Click&7 to open");
+ public static final ItemStack VOIDBAG_LARGE = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&4Large Void Bag","", "&7Size: &e36", "&7ID: ", "", "&7&eLeft Click&7 to suck up nearby Items", "&7&eRight Click&7 to open");
+ public static final ItemStack BOUND_VOIDBAG = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&4Soulbound Void Bag","", "&7Size: &e36", "&7ID: ", "", "&7&eLeft Click&7 to suck up nearby Items", "&7&eRight Click&7 to open");
- public static ItemStack VOIDBAG_SMALL = null;
- public static ItemStack VOIDBAG_MEDIUM = null;
- public static ItemStack VOIDBAG_BIG = null;
- public static ItemStack VOIDBAG_LARGE = null;
- public static ItemStack BOUND_VOIDBAG = null;
/* Jetpacks */
- public static ItemStack DURALUMIN_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eI", "", "&8\u21E8 &7Material: &bDuralumin", "&c&o&8\u21E8 &e\u26A1 &70 / 20 J", "&8\u21E8 &7Thrust: &c0.35", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack SOLDER_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eII", "", "&8\u21E8 &7Material: &bSolder", "&c&o&8\u21E8 &e\u26A1 &70 / 30 J", "&8\u21E8 &7Thrust: &c0.4", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack BILLON_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eIII", "", "&8\u21E8 &7Material: &bBillon", "&c&o&8\u21E8 &e\u26A1 &70 / 45 J", "&8\u21E8 &7Thrust: &c0.45", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack STEEL_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eIV", "", "&8\u21E8 &7Material: &bSteel", "&c&o&8\u21E8 &e\u26A1 &70 / 60 J", "&8\u21E8 &7Thrust: &c0.5", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack DAMASCUS_STEEL_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eV", "", "&8\u21E8 &7Material: &bDamascus Steel", "&c&o&8\u21E8 &e\u26A1 &70 / 75 J", "&8\u21E8 &7Thrust: &c0.55", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack REINFORCED_ALLOY_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eVI", "", "&8\u21E8 &7Material: &bReinforced Alloy", "&c&o&8\u21E8 &e\u26A1 &70 / 100 J", "&8\u21E8 &7Thrust: &c0.6", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack CARBONADO_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eVII", "", "&8\u21E8 &7Material: &bCarbonado", "&c&o&8\u21E8 &e\u26A1 &70 / 150 J", "&8\u21E8 &7Thrust: &c0.7", "", "&7Hold &eShift&7 to use"), Color.BLACK);
- public static ItemStack ARMORED_JETPACK = new CustomItem(Material.IRON_CHESTPLATE, "&9Armored Jetpack", "&8\u21E8 &7Material: &bSteel", "", "&c&o&8\u21E8 &e\u26A1 &70 / 50 J", "&8\u21E8 &7Thrust: &c0.45", "", "&7Hold &eShift&7 to use");
+ public static final ItemStack DURALUMIN_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eI", "", "&8\u21E8 &7Material: &bDuralumin", "&c&o&8\u21E8 &e\u26A1 &70 / 20 J", "&8\u21E8 &7Thrust: &c0.35", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack SOLDER_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eII", "", "&8\u21E8 &7Material: &bSolder", "&c&o&8\u21E8 &e\u26A1 &70 / 30 J", "&8\u21E8 &7Thrust: &c0.4", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack BILLON_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eIII", "", "&8\u21E8 &7Material: &bBillon", "&c&o&8\u21E8 &e\u26A1 &70 / 45 J", "&8\u21E8 &7Thrust: &c0.45", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack STEEL_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eIV", "", "&8\u21E8 &7Material: &bSteel", "&c&o&8\u21E8 &e\u26A1 &70 / 60 J", "&8\u21E8 &7Thrust: &c0.5", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack DAMASCUS_STEEL_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eV", "", "&8\u21E8 &7Material: &bDamascus Steel", "&c&o&8\u21E8 &e\u26A1 &70 / 75 J", "&8\u21E8 &7Thrust: &c0.55", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack REINFORCED_ALLOY_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eVI", "", "&8\u21E8 &7Material: &bReinforced Alloy", "&c&o&8\u21E8 &e\u26A1 &70 / 100 J", "&8\u21E8 &7Thrust: &c0.6", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack CARBONADO_JETPACK = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&9Electric Jetpack &7- &eVII", "", "&8\u21E8 &7Material: &bCarbonado", "&c&o&8\u21E8 &e\u26A1 &70 / 150 J", "&8\u21E8 &7Thrust: &c0.7", "", "&7Hold &eShift&7 to use"), Color.BLACK);
+ public static final ItemStack ARMORED_JETPACK = new CustomItem(Material.IRON_CHESTPLATE, "&9Armored Jetpack", "&8\u21E8 &7Material: &bSteel", "", "&c&o&8\u21E8 &e\u26A1 &70 / 50 J", "&8\u21E8 &7Thrust: &c0.45", "", "&7Hold &eShift&7 to use");
/* Jetboots */
- public static ItemStack DURALUMIN_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eI", "", "&8\u21E8 &7Material: &bDuralumin", "&c&o&8\u21E8 &e\u26A1 &70 / 20 J", "&8\u21E8 &7Speed: &a0.35", "&8\u21E8 &7Accuracy: &c50%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack SOLDER_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eII", "", "&8\u21E8 &7Material: &bSolder", "&c&o&8\u21E8 &e\u26A1 &70 / 30 J", "&8\u21E8 &7Speed: &a0.4", "&8\u21E8 &7Accuracy: &660%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack BILLON_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eIII", "", "&8\u21E8 &7Material: &bBillon", "&c&o&8\u21E8 &e\u26A1 &70 / 40 J", "&8\u21E8 &7Speed: &a0.45", "&8\u21E8 &7Accuracy: &665%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack STEEL_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eIV", "", "&8\u21E8 &7Material: &bSteel", "&c&o&8\u21E8 &e\u26A1 &70 / 50 J", "&8\u21E8 &7Speed: &a0.5", "&8\u21E8 &7Accuracy: &e70%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack DAMASCUS_STEEL_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eV", "", "&8\u21E8 &7Material: &bDamascus Steel", "&c&o&8\u21E8 &e\u26A1 &70 / 75 J", "&8\u21E8 &7Speed: &a0.55", "&8\u21E8 &7Accuracy: &a75%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack REINFORCED_ALLOY_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eVI", "", "&8\u21E8 &7Material: &bReinforced Alloy", "&c&o&8\u21E8 &e\u26A1 &70 / 100 J", "&8\u21E8 &7Speed: &a0.6", "&8\u21E8 &7Accuracy: &c80%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
- public static ItemStack CARBONADO_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eVII", "", "&8\u21E8 &7Material: &bCarbonado", "&c&o&8\u21E8 &e\u26A1 &70 / 125 J", "&8\u21E8 &7Speed: &a0.7", "&8\u21E8 &7Accuracy: &c99.9%", "", "&7Hold &eShift&7 to use"), Color.BLACK);
- public static ItemStack ARMORED_JETBOOTS = new CustomItem(Material.IRON_BOOTS, "&9Armored Jet Boots", "", "&8\u21E8 &7Material: &bSteel", "&c&o&8\u21E8 &e\u26A1 &70 / 50 J", "&8\u21E8 &7Speed: &a0.45", "&8\u21E8 &7Accuracy: &e70%", "", "&7Hold &eShift&7 to use");
+ public static final ItemStack DURALUMIN_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eI", "", "&8\u21E8 &7Material: &bDuralumin", "&c&o&8\u21E8 &e\u26A1 &70 / 20 J", "&8\u21E8 &7Speed: &a0.35", "&8\u21E8 &7Accuracy: &c50%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack SOLDER_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eII", "", "&8\u21E8 &7Material: &bSolder", "&c&o&8\u21E8 &e\u26A1 &70 / 30 J", "&8\u21E8 &7Speed: &a0.4", "&8\u21E8 &7Accuracy: &660%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack BILLON_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eIII", "", "&8\u21E8 &7Material: &bBillon", "&c&o&8\u21E8 &e\u26A1 &70 / 40 J", "&8\u21E8 &7Speed: &a0.45", "&8\u21E8 &7Accuracy: &665%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack STEEL_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eIV", "", "&8\u21E8 &7Material: &bSteel", "&c&o&8\u21E8 &e\u26A1 &70 / 50 J", "&8\u21E8 &7Speed: &a0.5", "&8\u21E8 &7Accuracy: &e70%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack DAMASCUS_STEEL_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eV", "", "&8\u21E8 &7Material: &bDamascus Steel", "&c&o&8\u21E8 &e\u26A1 &70 / 75 J", "&8\u21E8 &7Speed: &a0.55", "&8\u21E8 &7Accuracy: &a75%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack REINFORCED_ALLOY_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eVI", "", "&8\u21E8 &7Material: &bReinforced Alloy", "&c&o&8\u21E8 &e\u26A1 &70 / 100 J", "&8\u21E8 &7Speed: &a0.6", "&8\u21E8 &7Accuracy: &c80%", "", "&7Hold &eShift&7 to use"), Color.SILVER);
+ public static final ItemStack CARBONADO_JETBOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&9Jet Boots &7- &eVII", "", "&8\u21E8 &7Material: &bCarbonado", "&c&o&8\u21E8 &e\u26A1 &70 / 125 J", "&8\u21E8 &7Speed: &a0.7", "&8\u21E8 &7Accuracy: &c99.9%", "", "&7Hold &eShift&7 to use"), Color.BLACK);
+ public static final ItemStack ARMORED_JETBOOTS = new CustomItem(Material.IRON_BOOTS, "&9Armored Jet Boots", "", "&8\u21E8 &7Material: &bSteel", "&c&o&8\u21E8 &e\u26A1 &70 / 50 J", "&8\u21E8 &7Speed: &a0.45", "&8\u21E8 &7Accuracy: &e70%", "", "&7Hold &eShift&7 to use");
/* Multi Tools */
- public static ItemStack DURALUMIN_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eI", "", "&8\u21E8 &7Material: &bDuralumin", "&c&o&8\u21E8 &e\u26A1 &70 / 20 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
- public static ItemStack SOLDER_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eII", "", "&8\u21E8 &7Material: &bSolder", "&c&o&8\u21E8 &e\u26A1 &70 / 30 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
- public static ItemStack BILLON_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eIII", "", "&8\u21E8 &7Material: &bBillon", "&c&o&8\u21E8 &e\u26A1 &70 / 40 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
- public static ItemStack STEEL_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eIV", "", "&8\u21E8 &7Material: &bSteel", "&c&o&8\u21E8 &e\u26A1 &70 / 50 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
- public static ItemStack DAMASCUS_STEEL_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eV", "", "&8\u21E8 &7Material: &bDamascus Steel", "&c&o&8\u21E8 &e\u26A1 &70 / 60 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
- public static ItemStack REINFORCED_ALLOY_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eVI", "", "&8\u21E8 &7Material: &bReinforced Alloy", "&c&o&8\u21E8 &e\u26A1 &70 / 75 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
- public static ItemStack CARBONADO_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eVII", "", "&8\u21E8 &7Material: &bCarbonado", "&c&o&8\u21E8 &e\u26A1 &70 / 100 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
+ public static final ItemStack DURALUMIN_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eI", "", "&8\u21E8 &7Material: &bDuralumin", "&c&o&8\u21E8 &e\u26A1 &70 / 20 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
+ public static final ItemStack SOLDER_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eII", "", "&8\u21E8 &7Material: &bSolder", "&c&o&8\u21E8 &e\u26A1 &70 / 30 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
+ public static final ItemStack BILLON_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eIII", "", "&8\u21E8 &7Material: &bBillon", "&c&o&8\u21E8 &e\u26A1 &70 / 40 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
+ public static final ItemStack STEEL_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eIV", "", "&8\u21E8 &7Material: &bSteel", "&c&o&8\u21E8 &e\u26A1 &70 / 50 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
+ public static final ItemStack DAMASCUS_STEEL_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eV", "", "&8\u21E8 &7Material: &bDamascus Steel", "&c&o&8\u21E8 &e\u26A1 &70 / 60 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
+ public static final ItemStack REINFORCED_ALLOY_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eVI", "", "&8\u21E8 &7Material: &bReinforced Alloy", "&c&o&8\u21E8 &e\u26A1 &70 / 75 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
+ public static final ItemStack CARBONADO_MULTI_TOOL = new CustomItem(Material.SHEARS, "&9Multi Tool &7- &eVII", "", "&8\u21E8 &7Material: &bCarbonado", "&c&o&8\u21E8 &e\u26A1 &70 / 100 J", "", "&7&eRight Click&7 to use", "&7Hold &eShift + Right Click&7 to change the Mode");
/* Food */
- public static ItemStack FORTUNE_COOKIE = new CustomItem(Material.COOKIE, "&6Fortune Cookie", "", "&a&oTells you stuff about your Future :o");
- public static ItemStack BEEF_JERKY = new CustomItem(Material.COOKED_BEEF, "&6Beef Jerky", "", "&a&oSaturating");
- public static ItemStack MAGIC_SUGAR = new CustomItem(Material.SUGAR, "&6Magic Sugar", "", "&a&oFeel the Power of Hermes!");
- public static ItemStack MONSTER_JERKY = new CustomItem(Material.ROTTEN_FLESH, "&6Monster Jerky", "", "&a&oNo longer hungry");
- public static ItemStack APPLE_JUICE = new CustomPotion("&cApple Juice", Color.RED, new PotionEffect(PotionEffectType.SATURATION, 6, 0), "", "&7&oRestores &b&o" + "3.0" + " &7&oHunger");
- public static ItemStack MELON_JUICE = new CustomPotion("&cMelon Juice", Color.RED, new PotionEffect(PotionEffectType.SATURATION, 6, 0), "", "&7&oRestores &b&o" + "3.0" + " &7&oHunger");
- public static ItemStack CARROT_JUICE = new CustomPotion("&6Carrot Juice", Color.ORANGE, new PotionEffect(PotionEffectType.SATURATION, 6, 0), "", "&7&oRestores &b&o" + "3.0" + " &7&oHunger");
- public static ItemStack PUMPKIN_JUICE = new CustomPotion("&6Pumpkin Juice", Color.ORANGE, new PotionEffect(PotionEffectType.SATURATION, 6, 0), "", "&7&oRestores &b&o" + "3.0" + " &7&oHunger");
- public static ItemStack GOLDEN_APPLE_JUICE = new CustomPotion("&bGolden Apple Juice", Color.YELLOW, new PotionEffect(PotionEffectType.ABSORPTION, 20 * 20, 0));
+ public static final ItemStack FORTUNE_COOKIE = new CustomItem(Material.COOKIE, "&6Fortune Cookie", "", "&a&oTells you stuff about your Future :o");
+ public static final ItemStack DIET_COOKIE = new CustomItem(Material.COOKIE, "&6Diet Cookie", "", "&aA very &olightweight &r&acookie.");
+ public static final ItemStack BEEF_JERKY = new CustomItem(Material.COOKED_BEEF, "&6Beef Jerky", "", "&a&oSaturating");
+ public static final ItemStack MAGIC_SUGAR = new CustomItem(Material.SUGAR, "&6Magic Sugar", "", "&a&oFeel the Power of Hermes!");
+ public static final ItemStack MONSTER_JERKY = new CustomItem(Material.ROTTEN_FLESH, "&6Monster Jerky", "", "&a&oNo longer hungry");
+ public static final ItemStack APPLE_JUICE = new CustomPotion("&cApple Juice", Color.RED, new PotionEffect(PotionEffectType.SATURATION, 6, 0), "", "&7&oRestores &b&o" + "3.0" + " &7&oHunger");
+ public static final ItemStack MELON_JUICE = new CustomPotion("&cMelon Juice", Color.RED, new PotionEffect(PotionEffectType.SATURATION, 6, 0), "", "&7&oRestores &b&o" + "3.0" + " &7&oHunger");
+ public static final ItemStack CARROT_JUICE = new CustomPotion("&6Carrot Juice", Color.ORANGE, new PotionEffect(PotionEffectType.SATURATION, 6, 0), "", "&7&oRestores &b&o" + "3.0" + " &7&oHunger");
+ public static final ItemStack PUMPKIN_JUICE = new CustomPotion("&6Pumpkin Juice", Color.ORANGE, new PotionEffect(PotionEffectType.SATURATION, 6, 0), "", "&7&oRestores &b&o" + "3.0" + " &7&oHunger");
+ public static final ItemStack GOLDEN_APPLE_JUICE = new CustomPotion("&bGolden Apple Juice", Color.YELLOW, new PotionEffect(PotionEffectType.ABSORPTION, 20 * 20, 0));
/* Christmas */
- public static ItemStack CHRISTMAS_MILK = new CustomPotion("&6Glass of Milk", Color.WHITE, new PotionEffect(PotionEffectType.SATURATION, 5, 0), "", "&7&oRestores &b&o" + "2.5" + " &7&oHunger");
- public static ItemStack CHRISTMAS_CHOCOLATE_MILK = new CustomPotion("&6Chocolate Milk", Color.MAROON, new PotionEffect(PotionEffectType.SATURATION, 12, 0), "", "&7&oRestores &b&o" + "6.0" + " &7&oHunger");
- public static ItemStack CHRISTMAS_EGG_NOG = new CustomPotion("&aEgg Nog", Color.GRAY, new PotionEffect(PotionEffectType.SATURATION, 7, 0), "", "&7&oRestores &b&o" + "3.5" + " &7&oHunger");
- public static ItemStack CHRISTMAS_APPLE_CIDER = new CustomPotion("&cApple Cider", Color.RED, new PotionEffect(PotionEffectType.SATURATION, 14, 0), "", "&7&oRestores &b&o" + "7.0" + " &7&oHunger");
- public static ItemStack CHRISTMAS_COOKIE = new CustomItem(Material.COOKIE, Christmas.color("Christmas Cookie"));
- public static ItemStack CHRISTMAS_FRUIT_CAKE = new CustomItem(Material.PUMPKIN_PIE, Christmas.color("Fruit Cake"));
- public static ItemStack CHRISTMAS_APPLE_PIE = new CustomItem(Material.PUMPKIN_PIE, "&rApple Pie");
- public static ItemStack CHRISTMAS_HOT_CHOCOLATE = new CustomPotion("&6Hot Chocolate", Color.MAROON, new PotionEffect(PotionEffectType.SATURATION, 14, 0), "", "&7&oRestores &b&o" + "7.0" + " &7&oHunger");
- public static ItemStack CHRISTMAS_CAKE = new CustomItem(Material.PUMPKIN_PIE, Christmas.color("Christmas Cake"));
- public static ItemStack CHRISTMAS_CARAMEL = new CustomItem(Material.BRICKS, "&6Caramel");
- public static ItemStack CHRISTMAS_CARAMEL_APPLE = new CustomItem(Material.APPLE, "&6Caramel Apple");
- public static ItemStack CHRISTMAS_CHOCOLATE_APPLE = new CustomItem(Material.APPLE, "&6Chocolate Apple");
- public static ItemStack CHRISTMAS_PRESENT = new CustomItem(Material.CHEST, Christmas.color("Christmas Present"), "&7From: &emrCookieSlime", "&7To: &eYou", "", "&eRight Click&7 to open");
+ public static final ItemStack CHRISTMAS_MILK = new CustomPotion("&6Glass of Milk", Color.WHITE, new PotionEffect(PotionEffectType.SATURATION, 5, 0), "", "&7&oRestores &b&o" + "2.5" + " &7&oHunger");
+ public static final ItemStack CHRISTMAS_CHOCOLATE_MILK = new CustomPotion("&6Chocolate Milk", Color.MAROON, new PotionEffect(PotionEffectType.SATURATION, 12, 0), "", "&7&oRestores &b&o" + "6.0" + " &7&oHunger");
+ public static final ItemStack CHRISTMAS_EGG_NOG = new CustomPotion("&aEgg Nog", Color.GRAY, new PotionEffect(PotionEffectType.SATURATION, 7, 0), "", "&7&oRestores &b&o" + "3.5" + " &7&oHunger");
+ public static final ItemStack CHRISTMAS_APPLE_CIDER = new CustomPotion("&cApple Cider", Color.RED, new PotionEffect(PotionEffectType.SATURATION, 14, 0), "", "&7&oRestores &b&o" + "7.0" + " &7&oHunger");
+ public static final ItemStack CHRISTMAS_COOKIE = new CustomItem(Material.COOKIE, Christmas.color("Christmas Cookie"));
+ public static final ItemStack CHRISTMAS_FRUIT_CAKE = new CustomItem(Material.PUMPKIN_PIE, Christmas.color("Fruit Cake"));
+ public static final ItemStack CHRISTMAS_APPLE_PIE = new CustomItem(Material.PUMPKIN_PIE, "&rApple Pie");
+ public static final ItemStack CHRISTMAS_HOT_CHOCOLATE = new CustomPotion("&6Hot Chocolate", Color.MAROON, new PotionEffect(PotionEffectType.SATURATION, 14, 0), "", "&7&oRestores &b&o" + "7.0" + " &7&oHunger");
+ public static final ItemStack CHRISTMAS_CAKE = new CustomItem(Material.PUMPKIN_PIE, Christmas.color("Christmas Cake"));
+ public static final ItemStack CHRISTMAS_CARAMEL = new CustomItem(Material.BRICKS, "&6Caramel");
+ public static final ItemStack CHRISTMAS_CARAMEL_APPLE = new CustomItem(Material.APPLE, "&6Caramel Apple");
+ public static final ItemStack CHRISTMAS_CHOCOLATE_APPLE = new CustomItem(Material.APPLE, "&6Chocolate Apple");
+ public static final ItemStack CHRISTMAS_PRESENT = new CustomItem(Material.CHEST, Christmas.color("Christmas Present"), "&7From: &emrCookieSlime", "&7To: &eYou", "", "&eRight Click&7 to open");
/* Easter */
- public static ItemStack EASTER_EGG = new CustomItem(Material.EGG, "&rEaster Egg", "&bSurprise! Surprise!");
- public static ItemStack EASTER_CARROT_PIE = new CustomItem(Material.PUMPKIN_PIE, "&6Carrot Pie");
+ public static final ItemStack EASTER_EGG = new CustomItem(Material.EGG, "&rEaster Egg", "&bSurprise! Surprise!");
+ public static final ItemStack EASTER_CARROT_PIE = new CustomItem(Material.PUMPKIN_PIE, "&6Carrot Pie");
/* Weapons */
- public static ItemStack GRANDMAS_WALKING_STICK = new CustomItem(Material.STICK, "&7Grandmas Walking Stick", 0, new String[0], new String[] {"KNOCKBACK-2"});
- public static ItemStack GRANDPAS_WALKING_STICK = new CustomItem(Material.STICK, "&7Grandpas Walking Stick", 0, new String[0], new String[] {"KNOCKBACK-5"});
- public static ItemStack SWORD_OF_BEHEADING = new CustomItem(Material.IRON_SWORD, "&6Sword of Beheading", "&7Beheading II", "", "&rHas a chance to behead Mobs", "&r(even a higher chance for Wither Skeletons)");
- public static ItemStack BLADE_OF_VAMPIRES = new CustomItem(Material.GOLDEN_SWORD, "&cBlade of Vampires", 0, new String[] {"&7Life Steal I", "", "&rEverytime you attack something", "&ryou have a 45% chance to", "&rrecover 2 Hearts of your Health"}, new String[] {"FIRE_ASPECT-2", "DURABILITY-4", "DAMAGE_ALL-2"});
- public static ItemStack SEISMIC_AXE = new CustomItem(Material.IRON_AXE, "&aSeismic Axe", "", "&7&oA portable Earthquake...", "", "&7&eRight Click&7 to use");
+ public static final ItemStack GRANDMAS_WALKING_STICK = new CustomItem(Material.STICK, "&7Grandmas Walking Stick");
+ public static final ItemStack GRANDPAS_WALKING_STICK = new CustomItem(Material.STICK, "&7Grandpas Walking Stick");
+ public static final ItemStack SWORD_OF_BEHEADING = new CustomItem(Material.IRON_SWORD, "&6Sword of Beheading", "&7Beheading II", "", "&rHas a chance to behead Mobs", "&r(even a higher chance for Wither Skeletons)");
+ public static final ItemStack BLADE_OF_VAMPIRES = new CustomItem(Material.GOLDEN_SWORD, "&cBlade of Vampires", "&7Life Steal I", "", "&rEverytime you attack something", "&ryou have a 45% chance to", "&rrecover 2 Hearts of your Health");
+ public static final ItemStack SEISMIC_AXE = new CustomItem(Material.IRON_AXE, "&aSeismic Axe", "", "&7&oA portable Earthquake...", "", "&7&eRight Click&7 to use");
+
+ static {
+ GRANDMAS_WALKING_STICK.addUnsafeEnchantment(Enchantment.KNOCKBACK, 2);
+ GRANDPAS_WALKING_STICK.addUnsafeEnchantment(Enchantment.KNOCKBACK, 5);
+
+ BLADE_OF_VAMPIRES.addUnsafeEnchantment(Enchantment.FIRE_ASPECT, 2);
+ BLADE_OF_VAMPIRES.addUnsafeEnchantment(Enchantment.DURABILITY, 4);
+ BLADE_OF_VAMPIRES.addUnsafeEnchantment(Enchantment.DAMAGE_ALL, 2);
+ }
/* Bows */
- public static ItemStack EXPLOSIVE_BOW = new CustomItem(Material.BOW, "&cExplosive Bow", "&rAny Arrows fired using this Bow", "&rwill launch hit enemys into the air");
- public static ItemStack ICY_BOW = new CustomItem(Material.BOW, "&bIcy Bow", "&rAny Arrows fired using this Bow", "&rwill prevent hit enemys from moving", "&rfor 2 seconds");
+ public static final ItemStack EXPLOSIVE_BOW = new CustomItem(Material.BOW, "&cExplosive Bow", "&rAny Arrows fired using this Bow", "&rwill launch hit enemys into the air");
+ public static final ItemStack ICY_BOW = new CustomItem(Material.BOW, "&bIcy Bow", "&rAny Arrows fired using this Bow", "&rwill prevent hit enemys from moving", "&rfor 2 seconds");
/* Tools */
- public static ItemStack AUTO_SMELT_PICKAXE = new CustomItem(Material.DIAMOND_PICKAXE, "&6Smelter's Pickaxe", "&c&lAuto-Smelting", "", "&9Works with Fortune");
- public static ItemStack LUMBER_AXE = new CustomItem(Material.DIAMOND_AXE, "&6Lumber Axe", "&a&oCuts down the whole Tree...");
- public static ItemStack PICKAXE_OF_CONTAINMENT = new CustomItem(Material.IRON_PICKAXE, "&cPickaxe of Containment", "", "&9Can pickup Spawners");
- public static ItemStack HERCULES_PICKAXE = new CustomItem(Material.IRON_PICKAXE, "&9Hercules' Pickaxe", 0, new String[] {"", "&rSo powerful that it", "&rcrushes all mined Ores", "&rinto Dust..."}, new String[] {"DURABILITY-2", "DIG_SPEED-4"});
- public static ItemStack EXPLOSIVE_PICKAXE = new CustomItem(Material.DIAMOND_PICKAXE, "&eExplosive Pickaxe", "", "&rAllows you to mine a good bit", "&rof Blocks at once...", "", "&9Works with Fortune");
- public static ItemStack PICKAXE_OF_THE_SEEKER = new CustomItem(Material.DIAMOND_PICKAXE, "&aPickaxe of the Seeker", "&rWill always point you to the nearest Ore", "&rbut might get damaged when doing it", "", "&7&eRight Click&7 to be pointed to the nearest Ore");
- public static ItemStack COBALT_PICKAXE = new CustomItem(Material.IRON_PICKAXE, "&9Cobalt Pickaxe", 0, new String[0], new String[] {"DURABILITY-3", "DIG_SPEED-6"});
- public static ItemStack PICKAXE_OF_VEIN_MINING = new CustomItem(Material.DIAMOND_PICKAXE, "&ePickaxe of Vein Mining", "", "&rThis Pickaxe will dig out", "&rwhole Veins of Ores...");
+ public static final ItemStack AUTO_SMELT_PICKAXE = new CustomItem(Material.DIAMOND_PICKAXE, "&6Smelter's Pickaxe", "&c&lAuto-Smelting", "", "&9Works with Fortune");
+ public static final ItemStack LUMBER_AXE = new CustomItem(Material.DIAMOND_AXE, "&6Lumber Axe", "&a&oCuts down the whole Tree...");
+ public static final ItemStack PICKAXE_OF_CONTAINMENT = new CustomItem(Material.IRON_PICKAXE, "&cPickaxe of Containment", "", "&9Can pickup Spawners");
+ public static final ItemStack HERCULES_PICKAXE = new CustomItem(Material.IRON_PICKAXE, "&9Hercules' Pickaxe", "", "&rSo powerful that it", "&rcrushes all mined Ores", "&rinto Dust...");
+ public static final ItemStack EXPLOSIVE_PICKAXE = new CustomItem(Material.DIAMOND_PICKAXE, "&eExplosive Pickaxe", "", "&rAllows you to mine a good bit", "&rof Blocks at once...", "", "&9Works with Fortune");
+ public static final ItemStack EXPLOSIVE_SHOVEL = new CustomItem(Material.DIAMOND_SHOVEL, "&eExplosive Shovel", "", "&rAllows you to mine a good bit", "&rof diggable Blocks at once...");
+ public static final ItemStack PICKAXE_OF_THE_SEEKER = new CustomItem(Material.DIAMOND_PICKAXE, "&aPickaxe of the Seeker", "&rWill always point you to the nearest Ore", "&rbut might get damaged when doing it", "", "&7&eRight Click&7 to be pointed to the nearest Ore");
+ public static final ItemStack COBALT_PICKAXE = new CustomItem(Material.IRON_PICKAXE, "&9Cobalt Pickaxe");
+ public static final ItemStack PICKAXE_OF_VEIN_MINING = new CustomItem(Material.DIAMOND_PICKAXE, "&ePickaxe of Vein Mining", "", "&rThis Pickaxe will dig out", "&rwhole Veins of Ores...");
+
+ static {
+ HERCULES_PICKAXE.addUnsafeEnchantment(Enchantment.DURABILITY, 5);
+ HERCULES_PICKAXE.addUnsafeEnchantment(Enchantment.DIG_SPEED, 3);
+
+ COBALT_PICKAXE.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
+ COBALT_PICKAXE.addUnsafeEnchantment(Enchantment.DIG_SPEED, 6);
+ }
/* Armor */
- public static ItemStack GLOWSTONE_HELMET = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&e&lGlowstone Helmet", "", "&a&oShining like the sun!", "", "&9+ Night Vision"), Color.YELLOW);
- public static ItemStack GLOWSTONE_CHESTPLATE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&e&lGlowstone Chestplate", "", "&a&oShining like the sun!", "", "&9+ Night Vision"), Color.YELLOW);
- public static ItemStack GLOWSTONE_LEGGINGS = new CustomArmor(new CustomItem(Material.LEATHER_LEGGINGS, "&e&lGlowstone Leggings", "", "&a&oShining like the sun!", "", "&9+ Night Vision"), Color.YELLOW);
- public static ItemStack GLOWSTONE_BOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&e&lGlowstone Boots", "", "&a&oShining like the sun!", "", "&9+ Night Vision"), Color.YELLOW);
- public static ItemStack ENDER_HELMET = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&5&lEnder Helmet", "", "&a&oSometimes its here, sometimes there!"), Color.fromRGB(28, 25, 112));
- public static ItemStack ENDER_CHESTPLATE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&5&lEnder Chestplate", "", "&a&oSometimes its here, sometimes there!"), Color.fromRGB(28, 25, 112));
- public static ItemStack ENDER_LEGGINGS = new CustomArmor(new CustomItem(Material.LEATHER_LEGGINGS, "&5&lEnder Leggings", "", "&a&oSometimes its here, sometimes there!"), Color.fromRGB(28, 25, 112));
- public static ItemStack ENDER_BOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&5&lEnder Boots", "", "&a&oSometimes its here, sometimes there!", "" , "&9+ No Enderpearl Damage"), Color.fromRGB(28, 25, 112));
- public static ItemStack SLIME_HELMET = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&a&lSlime Helmet", "", "&a&oBouncy Feeling"), Color.LIME);
- public static ItemStack SLIME_CHESTPLATE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&a&lSlime Chestplate", "", "&a&oBouncy Feeling"), Color.LIME);
- public static ItemStack SLIME_LEGGINGS = new CustomArmor(new CustomItem(Material.LEATHER_LEGGINGS, "&a&lSlime Leggings", "", "&a&oBouncy Feeling", "", "&9+ Speed"), Color.LIME);
- public static ItemStack SLIME_BOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&a&lSlime Boots", "", "&a&oBouncy Feeling", "", "&9+ Jump Boost", "&9+ No Fall Damage"), Color.LIME);
- public static ItemStack CACTUS_HELMET = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&2Cactus Helmet", 0, new String[0], new String[] {"THORNS-3", "DURABILITY-5"}), Color.GREEN);
- public static ItemStack CACTUS_CHESTPLATE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&2Cactus Chestplate", 0, new String[0], new String[] {"THORNS-3", "DURABILITY-5"}), Color.GREEN);
- public static ItemStack CACTUS_LEGGINGS = new CustomArmor(new CustomItem(Material.LEATHER_LEGGINGS, "&2Cactus Leggings", 0, new String[0], new String[] {"THORNS-3", "DURABILITY-5"}), Color.GREEN);
- public static ItemStack CACTUS_BOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&2Cactus Boots", 0, new String[0], new String[] {"THORNS-3", "DURABILITY-5"}), Color.GREEN);
- public static ItemStack DAMASCUS_STEEL_HELMET = new CustomItem(Material.IRON_HELMET, "&7Damascus Steel Helmet", new String[] {"DURABILITY-4", "PROTECTION_ENVIRONMENTAL-4"}, 0);
- public static ItemStack DAMASCUS_STEEL_CHESTPLATE = new CustomItem(Material.IRON_CHESTPLATE, "&7Damascus Steel Chestplate", new String[] {"DURABILITY-4", "PROTECTION_ENVIRONMENTAL-4"}, 0);
- public static ItemStack DAMASCUS_STEEL_LEGGINGS = new CustomItem(Material.IRON_LEGGINGS, "&7Damascus Steel Leggings", new String[] {"DURABILITY-4", "PROTECTION_ENVIRONMENTAL-4"}, 0);
- public static ItemStack DAMASCUS_STEEL_BOOTS = new CustomItem(Material.IRON_BOOTS, "&7Damascus Steel Boots", new String[] {"DURABILITY-4", "PROTECTION_ENVIRONMENTAL-4"}, 0);
- public static ItemStack REINFORCED_ALLOY_HELMET = new CustomItem(Material.IRON_HELMET, "&bReinforced Helmet", new String[] {"DURABILITY-9", "PROTECTION_ENVIRONMENTAL-9"}, 0);
- public static ItemStack REINFORCED_ALLOY_CHESTPLATE = new CustomItem(Material.IRON_CHESTPLATE, "&bReinforced Chestplate", new String[] {"DURABILITY-9", "PROTECTION_ENVIRONMENTAL-9"}, 0);
- public static ItemStack REINFORCED_ALLOY_LEGGINGS = new CustomItem(Material.IRON_LEGGINGS, "&bReinforced Leggings", new String[] {"DURABILITY-9", "PROTECTION_ENVIRONMENTAL-9"}, 0);
- public static ItemStack REINFORCED_ALLOY_BOOTS = new CustomItem(Material.IRON_BOOTS, "&bReinforced Boots", new String[] {"DURABILITY-9", "PROTECTION_ENVIRONMENTAL-9"}, 0);
- public static ItemStack SCUBA_HELMET = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&cScuba Helmet", "", "&bAllows you to breathe Underwater", "&4&oPart of Hazmat Suit"), Color.ORANGE);
- public static ItemStack HAZMATSUIT_CHESTPLATE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&cHazmat Suit", "", "&bAllows you to walk through Fire", "&4&oPart of Hazmat Suit"), Color.ORANGE);
- public static ItemStack HAZMATSUIT_LEGGINGS = new CustomArmor(new CustomItem(Material.LEATHER_LEGGINGS, "&cHazmat Suit Leggings", "", "&4&oPart of Hazmat Suit"), Color.ORANGE);
- public static ItemStack RUBBER_BOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&cRubber Boots", "", "&4&oPart of Hazmat Suit"), Color.BLACK);
- public static ItemStack GILDED_IRON_HELMET = new CustomItem(Material.GOLDEN_HELMET, "&6Gilded Iron Helmet", new String[] {"DURABILITY-6", "PROTECTION_ENVIRONMENTAL-8"}, 0);
- public static ItemStack GILDED_IRON_CHESTPLATE = new CustomItem(Material.GOLDEN_CHESTPLATE, "&6Gilded Iron Chestplate", new String[] {"DURABILITY-6", "PROTECTION_ENVIRONMENTAL-8"}, 0);
- public static ItemStack GILDED_IRON_LEGGINGS = new CustomItem(Material.GOLDEN_LEGGINGS, "&6Gilded Iron Leggings", new String[] {"DURABILITY-6", "PROTECTION_ENVIRONMENTAL-8"}, 0);
- public static ItemStack GILDED_IRON_BOOTS = new CustomItem(Material.GOLDEN_BOOTS, "&6Gilded Iron Boots", new String[] {"DURABILITY-6", "PROTECTION_ENVIRONMENTAL-8"}, 0);
- public static ItemStack GOLD_HELMET = new CustomItem(Material.GOLDEN_HELMET, "&6Gold Helmet", 0, new String[] {"&912-Carat"}, new String[] {"DURABILITY-10"});
- public static ItemStack GOLD_CHESTPLATE = new CustomItem(Material.GOLDEN_CHESTPLATE, "&6Gold Chestplate", 0, new String[] {"&912-Carat"}, new String[] {"DURABILITY-10"});
- public static ItemStack GOLD_LEGGINGS = new CustomItem(Material.GOLDEN_LEGGINGS, "&6Gold Leggings", 0, new String[] {"&912-Carat"}, new String[] {"DURABILITY-10"});
- public static ItemStack GOLD_BOOTS = new CustomItem(Material.GOLDEN_BOOTS, "&6Gold Boots", 0, new String[] {"&912-Carat"}, new String[] {"DURABILITY-10"});
- public static ItemStack SLIME_HELMET_STEEL = new CustomItem(Material.IRON_HELMET, "&a&lSlime Helmet", 0, new String[] {"&7&oReinforced", "", "&a&oBouncy Feeling"}, new String[] {"DURABILITY-4", "PROTECTION_ENVIRONMENTAL-2"});
- public static ItemStack SLIME_CHESTPLATE_STEEL = new CustomItem(Material.IRON_CHESTPLATE, "&a&lSlime Chestplate", 0, new String[] {"&7&oReinforced", "", "&a&oBouncy Feeling"}, new String[] {"DURABILITY-4", "PROTECTION_ENVIRONMENTAL-2"});
- public static ItemStack SLIME_LEGGINGS_STEEL = new CustomItem(Material.IRON_LEGGINGS, "&a&lSlime Leggings", 0, new String[] {"&7&oReinforced", "", "&a&oBouncy Feeling", "", "&9+ Speed"}, new String[] {"DURABILITY-4", "PROTECTION_ENVIRONMENTAL-2"});
- public static ItemStack SLIME_BOOTS_STEEL = new CustomItem(Material.IRON_BOOTS, "&a&lSlime Boots", 0, new String[] {"&7&oReinforced", "", "&a&oBouncy Feeling", "", "&9+ Jump Boost", "&9+ No Fall Damage"}, new String[] {"DURABILITY-4", "PROTECTION_ENVIRONMENTAL-2"});
- public static ItemStack BOOTS_OF_THE_STOMPER = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&bBoots of the Stomper", "", "&9All Fall Damage you receive", "&9will be applied to nearby Mobs/Players", "", "&9+ No Fall Damage"), Color.AQUA);
- public static ItemStack HEAVY_METAL_HELMET = new CustomItem(Material.IRON_HELMET, "&cHeavy Helmet", 0, new String[] {"", "&9+ Strength", "&9+ Slowness"}, new String[] {"DURABILITY-10", "PROTECTION_ENVIRONMENTAL-10"});
- public static ItemStack HEAVY_METAL_CHESTPLATE = new CustomItem(Material.IRON_CHESTPLATE, "&cHeavy Chestplate", 0, new String[] {"", "&9+ Strength", "&9+ Slowness"}, new String[] {"DURABILITY-10", "PROTECTION_ENVIRONMENTAL-10"});
- public static ItemStack HEAVY_METAL_LEGGINGS = new CustomItem(Material.IRON_LEGGINGS, "&cHeavy Leggings", 0, new String[] {"", "&9+ Strength", "&9+ Slowness"}, new String[] {"DURABILITY-10", "PROTECTION_ENVIRONMENTAL-10"});
- public static ItemStack HEAVY_METAL_BOOTS = new CustomItem(Material.IRON_BOOTS, "&cHeavy Boots", 0, new String[] {"", "&9+ Strength", "&9+ Slowness"}, new String[] {"DURABILITY-10", "PROTECTION_ENVIRONMENTAL-10"});
+ public static final ItemStack GLOWSTONE_HELMET = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&e&lGlowstone Helmet", "", "&a&oShining like the sun!", "", "&9+ Night Vision"), Color.YELLOW);
+ public static final ItemStack GLOWSTONE_CHESTPLATE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&e&lGlowstone Chestplate", "", "&a&oShining like the sun!", "", "&9+ Night Vision"), Color.YELLOW);
+ public static final ItemStack GLOWSTONE_LEGGINGS = new CustomArmor(new CustomItem(Material.LEATHER_LEGGINGS, "&e&lGlowstone Leggings", "", "&a&oShining like the sun!", "", "&9+ Night Vision"), Color.YELLOW);
+ public static final ItemStack GLOWSTONE_BOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&e&lGlowstone Boots", "", "&a&oShining like the sun!", "", "&9+ Night Vision"), Color.YELLOW);
+
+ public static final ItemStack ENDER_HELMET = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&5&lEnder Helmet", "", "&a&oSometimes its here, sometimes there!"), Color.fromRGB(28, 25, 112));
+ public static final ItemStack ENDER_CHESTPLATE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&5&lEnder Chestplate", "", "&a&oSometimes its here, sometimes there!"), Color.fromRGB(28, 25, 112));
+ public static final ItemStack ENDER_LEGGINGS = new CustomArmor(new CustomItem(Material.LEATHER_LEGGINGS, "&5&lEnder Leggings", "", "&a&oSometimes its here, sometimes there!"), Color.fromRGB(28, 25, 112));
+ public static final ItemStack ENDER_BOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&5&lEnder Boots", "", "&a&oSometimes its here, sometimes there!", "" , "&9+ No Enderpearl Damage"), Color.fromRGB(28, 25, 112));
+
+ public static final ItemStack SLIME_HELMET = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&a&lSlime Helmet", "", "&a&oBouncy Feeling"), Color.LIME);
+ public static final ItemStack SLIME_CHESTPLATE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&a&lSlime Chestplate", "", "&a&oBouncy Feeling"), Color.LIME);
+ public static final ItemStack SLIME_LEGGINGS = new CustomArmor(new CustomItem(Material.LEATHER_LEGGINGS, "&a&lSlime Leggings", "", "&a&oBouncy Feeling", "", "&9+ Speed"), Color.LIME);
+ public static final ItemStack SLIME_BOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&a&lSlime Boots", "", "&a&oBouncy Feeling", "", "&9+ Jump Boost", "&9+ No Fall Damage"), Color.LIME);
+
+ public static final ItemStack CACTUS_HELMET = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&2Cactus Helmet"), Color.GREEN);
+ public static final ItemStack CACTUS_CHESTPLATE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&2Cactus Chestplate"), Color.GREEN);
+ public static final ItemStack CACTUS_LEGGINGS = new CustomArmor(new CustomItem(Material.LEATHER_LEGGINGS, "&2Cactus Leggings"), Color.GREEN);
+ public static final ItemStack CACTUS_BOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&2Cactus Boots"), Color.GREEN);
+
+ public static final ItemStack DAMASCUS_STEEL_HELMET = new CustomItem(Material.IRON_HELMET, "&7Damascus Steel Helmet");
+ public static final ItemStack DAMASCUS_STEEL_CHESTPLATE = new CustomItem(Material.IRON_CHESTPLATE, "&7Damascus Steel Chestplate");
+ public static final ItemStack DAMASCUS_STEEL_LEGGINGS = new CustomItem(Material.IRON_LEGGINGS, "&7Damascus Steel Leggings");
+ public static final ItemStack DAMASCUS_STEEL_BOOTS = new CustomItem(Material.IRON_BOOTS, "&7Damascus Steel Boots");
+
+ public static final ItemStack REINFORCED_ALLOY_HELMET = new CustomItem(Material.IRON_HELMET, "&bReinforced Helmet");
+ public static final ItemStack REINFORCED_ALLOY_CHESTPLATE = new CustomItem(Material.IRON_CHESTPLATE, "&bReinforced Chestplate");
+ public static final ItemStack REINFORCED_ALLOY_LEGGINGS = new CustomItem(Material.IRON_LEGGINGS, "&bReinforced Leggings");
+ public static final ItemStack REINFORCED_ALLOY_BOOTS = new CustomItem(Material.IRON_BOOTS, "&bReinforced Boots");
+
+ public static final ItemStack SCUBA_HELMET = new CustomArmor(new CustomItem(Material.LEATHER_HELMET, "&cScuba Helmet", "", "&bAllows you to breathe Underwater", "&4&oPart of Hazmat Suit"), Color.ORANGE);
+ public static final ItemStack HAZMATSUIT_CHESTPLATE = new CustomArmor(new CustomItem(Material.LEATHER_CHESTPLATE, "&cHazmat Suit", "", "&bAllows you to walk through Fire", "&4&oPart of Hazmat Suit"), Color.ORANGE);
+ public static final ItemStack HAZMATSUIT_LEGGINGS = new CustomArmor(new CustomItem(Material.LEATHER_LEGGINGS, "&cHazmat Suit Leggings", "", "&4&oPart of Hazmat Suit"), Color.ORANGE);
+ public static final ItemStack RUBBER_BOOTS = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&cRubber Boots", "", "&4&oPart of Hazmat Suit"), Color.BLACK);
+
+ public static final ItemStack GILDED_IRON_HELMET = new CustomItem(Material.GOLDEN_HELMET, "&6Gilded Iron Helmet");
+ public static final ItemStack GILDED_IRON_CHESTPLATE = new CustomItem(Material.GOLDEN_CHESTPLATE, "&6Gilded Iron Chestplate");
+ public static final ItemStack GILDED_IRON_LEGGINGS = new CustomItem(Material.GOLDEN_LEGGINGS, "&6Gilded Iron Leggings");
+ public static final ItemStack GILDED_IRON_BOOTS = new CustomItem(Material.GOLDEN_BOOTS, "&6Gilded Iron Boots");
+
+ public static final ItemStack GOLD_HELMET = new CustomItem(Material.GOLDEN_HELMET, "&6Gold Helmet", "&912-Carat");
+ public static final ItemStack GOLD_CHESTPLATE = new CustomItem(Material.GOLDEN_CHESTPLATE, "&6Gold Chestplate", "&912-Carat");
+ public static final ItemStack GOLD_LEGGINGS = new CustomItem(Material.GOLDEN_LEGGINGS, "&6Gold Leggings", "&912-Carat");
+ public static final ItemStack GOLD_BOOTS = new CustomItem(Material.GOLDEN_BOOTS, "&6Gold Boots", "&912-Carat");
+
+ public static final ItemStack SLIME_HELMET_STEEL = new CustomItem(Material.IRON_HELMET, "&a&lSlime Helmet", "&7&oReinforced", "", "&a&oBouncy Feeling");
+ public static final ItemStack SLIME_CHESTPLATE_STEEL = new CustomItem(Material.IRON_CHESTPLATE, "&a&lSlime Chestplate", "&7&oReinforced", "", "&a&oBouncy Feeling");
+ public static final ItemStack SLIME_LEGGINGS_STEEL = new CustomItem(Material.IRON_LEGGINGS, "&a&lSlime Leggings", "&7&oReinforced", "", "&a&oBouncy Feeling", "", "&9+ Speed");
+ public static final ItemStack SLIME_BOOTS_STEEL = new CustomItem(Material.IRON_BOOTS, "&a&lSlime Boots", "&7&oReinforced", "", "&a&oBouncy Feeling", "", "&9+ Jump Boost", "&9+ No Fall Damage");
+
+ public static final ItemStack HEAVY_METAL_HELMET = new CustomItem(Material.IRON_HELMET, "&cHeavy Helmet", "", "&9+ Strength", "&9+ Slowness");
+ public static final ItemStack HEAVY_METAL_CHESTPLATE = new CustomItem(Material.IRON_CHESTPLATE, "&cHeavy Chestplate", "", "&9+ Strength", "&9+ Slowness");
+ public static final ItemStack HEAVY_METAL_LEGGINGS = new CustomItem(Material.IRON_LEGGINGS, "&cHeavy Leggings", "", "&9+ Strength", "&9+ Slowness");
+ public static final ItemStack HEAVY_METAL_BOOTS = new CustomItem(Material.IRON_BOOTS, "&cHeavy Boots", "", "&9+ Strength", "&9+ Slowness");
+
+ public static final ItemStack BOOTS_OF_THE_STOMPER = new CustomArmor(new CustomItem(Material.LEATHER_BOOTS, "&bBoots of the Stomper", "", "&9All Fall Damage you receive", "&9will be applied to nearby Mobs/Players", "", "&9+ No Fall Damage"), Color.AQUA);
+
+ static {
+ Map cactus = new HashMap<>();
+ cactus.put(Enchantment.THORNS, 3);
+ cactus.put(Enchantment.DURABILITY, 6);
+
+ CACTUS_HELMET.addUnsafeEnchantments(cactus);
+ CACTUS_CHESTPLATE.addUnsafeEnchantments(cactus);
+ CACTUS_LEGGINGS.addUnsafeEnchantments(cactus);
+ CACTUS_BOOTS.addUnsafeEnchantments(cactus);
+
+ Map damascus = new HashMap<>();
+ damascus.put(Enchantment.DURABILITY, 5);
+ damascus.put(Enchantment.PROTECTION_ENVIRONMENTAL, 5);
+
+ DAMASCUS_STEEL_HELMET.addUnsafeEnchantments(damascus);
+ DAMASCUS_STEEL_CHESTPLATE.addUnsafeEnchantments(damascus);
+ DAMASCUS_STEEL_LEGGINGS.addUnsafeEnchantments(damascus);
+ DAMASCUS_STEEL_BOOTS.addUnsafeEnchantments(damascus);
+
+ Map reinforced = new HashMap<>();
+ reinforced.put(Enchantment.DURABILITY, 9);
+ reinforced.put(Enchantment.PROTECTION_ENVIRONMENTAL, 9);
+
+ REINFORCED_ALLOY_HELMET.addUnsafeEnchantments(reinforced);
+ REINFORCED_ALLOY_CHESTPLATE.addUnsafeEnchantments(reinforced);
+ REINFORCED_ALLOY_LEGGINGS.addUnsafeEnchantments(reinforced);
+ REINFORCED_ALLOY_BOOTS.addUnsafeEnchantments(reinforced);
+
+ Map gilded = new HashMap<>();
+ gilded.put(Enchantment.DURABILITY, 6);
+ gilded.put(Enchantment.PROTECTION_ENVIRONMENTAL, 8);
+
+ GILDED_IRON_HELMET.addUnsafeEnchantments(gilded);
+ GILDED_IRON_CHESTPLATE.addUnsafeEnchantments(gilded);
+ GILDED_IRON_LEGGINGS.addUnsafeEnchantments(gilded);
+ GILDED_IRON_BOOTS.addUnsafeEnchantments(gilded);
+
+ GOLD_HELMET.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
+ GOLD_CHESTPLATE.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
+ GOLD_LEGGINGS.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
+ GOLD_BOOTS.addUnsafeEnchantment(Enchantment.DURABILITY, 10);
+
+ Map slime = new HashMap<>();
+ slime.put(Enchantment.DURABILITY, 4);
+ slime.put(Enchantment.PROTECTION_ENVIRONMENTAL, 2);
+
+ SLIME_HELMET_STEEL.addUnsafeEnchantments(slime);
+ SLIME_CHESTPLATE_STEEL.addUnsafeEnchantments(slime);
+ SLIME_LEGGINGS_STEEL.addUnsafeEnchantments(slime);
+ SLIME_BOOTS_STEEL.addUnsafeEnchantments(slime);
+
+ Map heavy = new HashMap<>();
+ heavy.put(Enchantment.DURABILITY, 10);
+ heavy.put(Enchantment.PROTECTION_ENVIRONMENTAL, 10);
+
+ HEAVY_METAL_HELMET.addUnsafeEnchantments(heavy);
+ HEAVY_METAL_CHESTPLATE.addUnsafeEnchantments(heavy);
+ HEAVY_METAL_LEGGINGS.addUnsafeEnchantments(heavy);
+ HEAVY_METAL_BOOTS.addUnsafeEnchantments(heavy);
+ }
/* Misc */
- public static ItemStack MAGIC_LUMP_1 = new CustomItem(Material.GOLD_NUGGET, "&6Magical Lump &7- &eI", "", "&c&oTier: I");
- public static ItemStack MAGIC_LUMP_2 = new CustomItem(Material.GOLD_NUGGET, "&6Magical Lump &7- &eII", "", "&c&oTier: II");
- public static ItemStack MAGIC_LUMP_3 = new CustomItem(Material.GOLD_NUGGET, "&6Magical Lump &7- &eIII", "", "&c&oTier: III");
- public static ItemStack ENDER_LUMP_1 = new CustomItem(Material.GOLD_NUGGET, "&5Ender Lump &7- &eI", "", "&c&oTier: I");
- public static ItemStack ENDER_LUMP_2 = new CustomItem(Material.GOLD_NUGGET, "&5Ender Lump &7- &eII", "", "&c&oTier: II");
- public static ItemStack ENDER_LUMP_3 = new CustomItem(Material.GOLD_NUGGET, "&5Ender Lump &7- &eIII", "", "&c&oTier: III");
- public static ItemStack MAGICAL_BOOK_COVER = new CustomItem(Material.PAPER, "&6Magical Book Cover", "", "&a&oUsed for various Magic Books");
- public static ItemStack BASIC_CIRCUIT_BOARD = new CustomItem(Material.ACTIVATOR_RAIL, "&bBasic Circuit Board");
- public static ItemStack ADVANCED_CIRCUIT_BOARD = new CustomItem(Material.POWERED_RAIL, "&bAdvanced Circuit Board");
- public static ItemStack WHEAT_FLOUR = new CustomItem(Material.SUGAR, "&rWheat Flour");
- public static ItemStack STEEL_PLATE = new CustomItem(Material.PAPER, "&7&lSteel Plate");
- public static ItemStack COMPRESSED_CARBON = null;
- public static ItemStack BATTERY = null;
- public static ItemStack CARBON_CHUNK = null;
- public static ItemStack STEEL_THRUSTER = new CustomItem(Material.BUCKET, "&7&lSteel Thruster");
- public static ItemStack POWER_CRYSTAL = null;
- public static ItemStack CHAIN = new CustomItem(Material.STRING, "&bChain");
- public static ItemStack HOOK = new CustomItem(Material.FLINT, "&bHook");
- public static ItemStack SIFTED_ORE = new CustomItem(Material.GUNPOWDER, "&6Sifted Ore");
- public static ItemStack STONE_CHUNK = null;
- public static ItemStack LAVA_CRYSTAL = null;
- public static ItemStack SALT = new CustomItem(Material.SUGAR, "&rSalt");
- public static ItemStack BUTTER = null;
- public static ItemStack CHEESE = null;
- public static ItemStack HEAVY_CREAM = new CustomItem(Material.SNOWBALL, "&rHeavy Cream");
- public static ItemStack CRUSHED_ORE = new CustomItem(Material.GUNPOWDER, "&6Crushed Ore");
- public static ItemStack PULVERIZED_ORE = new CustomItem(Material.GUNPOWDER, "&6Pulverized Ore");
- public static ItemStack PURE_ORE_CLUSTER = new CustomItem(Material.GUNPOWDER, "&6Pure Ore Cluster");
- public static ItemStack TINY_URANIUM = null;
- public static ItemStack SMALL_URANIUM = null;
- public static ItemStack MAGNET = null;
- public static ItemStack NECROTIC_SKULL = new CustomItem(Material.WITHER_SKELETON_SKULL, "&cNecrotic Skull");
- public static ItemStack ESSENCE_OF_AFTERLIFE = new CustomItem(Material.GUNPOWDER, "&4Essence of Afterlife");
- public static ItemStack ELECTRO_MAGNET = null;
- public static ItemStack HEATING_COIL = null;
- public static ItemStack COOLING_UNIT = null;
- public static ItemStack ELECTRIC_MOTOR = null;
- public static ItemStack CARGO_MOTOR = null;
- public static ItemStack SCROLL_OF_DIMENSIONAL_TELEPOSITION = new CustomItem(Material.PAPER, "&6Scroll of Dimensional Teleposition", "", "&cThis Scroll is capable of creating", "&ca temporary black Hole which pulls", "&cnearby Entities into itself and sends", "&cthem into another Dimension where", "&ceverything is turned around", "", "&rIn other words: Makes Entities turn by 180 Degrees");
- public static ItemStack TOME_OF_KNOWLEDGE_SHARING = new CustomItem(Material.BOOK, "&6Tome of Knowledge Sharing", "&7Owner: &bNone", "", "&eRight Click&7 to bind this Tome to yourself", "", "", "&eRight Click&7 to obtain all Researches by", "&7the previously assigned Owner");
- public static ItemStack HARDENED_GLASS = new CustomItem(Material.LIGHT_GRAY_STAINED_GLASS, "&7Hardened Glass", "", "&rWithstands Explosions");
- public static ItemStack WITHER_PROOF_OBSIDIAN = new CustomItem(Material.OBSIDIAN, "&5Wither-Proof Obsidian", "", "&rWithstands Explosions", "&rWithstands Wither Bosses");
- public static ItemStack WITHER_PROOF_GLASS = new CustomItem(Material.PURPLE_STAINED_GLASS, "&5Wither-Proof Glass", "", "&rWithstands Explosions", "&rWithstands Wither Bosses");
- public static ItemStack REINFORCED_PLATE = new CustomItem(Material.PAPER, "&7Reinforced Plate");
- public static ItemStack ANCIENT_PEDESTAL = new CustomItem(Material.DISPENSER, "&dAncient Pedestal", "", "&5Part of the Ancient Altar");
- public static ItemStack ANCIENT_ALTAR = new CustomItem(Material.ENCHANTING_TABLE, "&dAncient Altar", "", "&5Multi-Block Altar for", "&5magical Crafting Processes");
- public static ItemStack DUCT_TAPE = null;
- public static ItemStack COPPER_WIRE = new CustomItem(Material.STRING, "&6Copper Wire", "", "&6Crucial component in electric modules");
-
+ public static final ItemStack MAGIC_LUMP_1 = new CustomItem(Material.GOLD_NUGGET, "&6Magical Lump &7- &eI", "", "&c&oTier: I");
+ public static final ItemStack MAGIC_LUMP_2 = new CustomItem(Material.GOLD_NUGGET, "&6Magical Lump &7- &eII", "", "&c&oTier: II");
+ public static final ItemStack MAGIC_LUMP_3 = new CustomItem(Material.GOLD_NUGGET, "&6Magical Lump &7- &eIII", "", "&c&oTier: III");
+ public static final ItemStack ENDER_LUMP_1 = new CustomItem(Material.GOLD_NUGGET, "&5Ender Lump &7- &eI", "", "&c&oTier: I");
+ public static final ItemStack ENDER_LUMP_2 = new CustomItem(Material.GOLD_NUGGET, "&5Ender Lump &7- &eII", "", "&c&oTier: II");
+ public static final ItemStack ENDER_LUMP_3 = new CustomItem(Material.GOLD_NUGGET, "&5Ender Lump &7- &eIII", "", "&c&oTier: III");
+ public static final ItemStack MAGICAL_BOOK_COVER = new CustomItem(Material.PAPER, "&6Magical Book Cover", "", "&a&oUsed for various Magic Books");
+ public static final ItemStack BASIC_CIRCUIT_BOARD = new CustomItem(Material.ACTIVATOR_RAIL, "&bBasic Circuit Board");
+ public static final ItemStack ADVANCED_CIRCUIT_BOARD = new CustomItem(Material.POWERED_RAIL, "&bAdvanced Circuit Board");
+ public static final ItemStack WHEAT_FLOUR = new CustomItem(Material.SUGAR, "&rWheat Flour");
+ public static final ItemStack STEEL_PLATE = new CustomItem(Material.PAPER, "&7&lSteel Plate");
+ public static final ItemStack BATTERY = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmUyZGRhNmVmNjE4NWQ0ZGQ2ZWE4Njg0ZTk3ZDM5YmE4YWIwMzdlMjVmNzVjZGVhNmJkMjlkZjhlYjM0ZWUifX19"), "&6Battery");
+ public static final ItemStack CARBON = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGIzYTA5NWI2YjgxZTZiOTg1M2ExOTMyNGVlZGYwYmI5MzQ5NDE3MjU4ZGQxNzNiOGVmZjg3YTA4N2FhIn19fQ=="), "&eCarbon");
+ public static final ItemStack COMPRESSED_CARBON = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzIxZDQ5NTE2NTc0OGQzMTE2Zjk5ZDZiNWJkNWQ0MmViOGJhNTkyYmNkZmFkMzdmZDk1ZjliNmMwNGEzYiJ9fX0="), "&cCompressed Carbon");
+ public static final ItemStack CARBON_CHUNK = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzIxZDQ5NTE2NTc0OGQzMTE2Zjk5ZDZiNWJkNWQ0MmViOGJhNTkyYmNkZmFkMzdmZDk1ZjliNmMwNGEzYiJ9fX0="), "&4Carbon Chunk");
+ public static final ItemStack STEEL_THRUSTER = new CustomItem(Material.BUCKET, "&7&lSteel Thruster");
+ public static final ItemStack POWER_CRYSTAL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTNjMWIwMzZiNmUwMzUxN2IyODVhODExYmQ4NWU3M2Y1YWJmZGFjYzFkZGY5MGRmZjk2MmUxODA5MzRlMyJ9fX0="), "&c&lPower Crystal");
+ public static final ItemStack CHAIN = new CustomItem(Material.STRING, "&bChain");
+ public static final ItemStack HOOK = new CustomItem(Material.FLINT, "&bHook");
+ public static final ItemStack SIFTED_ORE = new CustomItem(Material.GUNPOWDER, "&6Sifted Ore");
+ public static final ItemStack STONE_CHUNK = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2U4ZjVhZGIxNGQ2YzlmNmI4MTBkMDI3NTQzZjFhOGMxZjQxN2UyZmVkOTkzYzk3YmNkODljNzRmNWUyZTgifX19"), "&6Stone Chunk");
+ public static final ItemStack LAVA_CRYSTAL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTNhZDhlZTg0OWVkZjA0ZWQ5YTI2Y2EzMzQxZjYwMzNiZDc2ZGNjNDIzMWVkMWVhNjNiNzU2NTc1MWIyN2FjIn19fQ=="), "&4Lava Crystal");
+ public static final ItemStack SALT = new CustomItem(Material.SUGAR, "&rSalt");
+ public static final ItemStack CHEESE = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzRmZWJiYzE1ZDFkNGNjNjJiZWRjNWQ3YTJiNmYwZjQ2Y2Q1YjA2OTZhODg0ZGU3NWUyODllMzVjYmI1M2EwIn19fQ=="), "&rCheese");
+ public static final ItemStack BUTTER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjY2YjE5ZjdkNjM1ZDAzNDczODkxZGYzMzAxN2M1NDkzNjMyMDlhOGY2MzI4YTg1NDJjMjEzZDA4NTI1ZSJ9fX0="), "&rButter");
+ public static final ItemStack DUCT_TAPE = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjJmYWFjZWFiNjM4NGZmZjVlZDI0YmI0NGE0YWYyZjU4NGViMTM4MjcyOWVjZDkzYTUzNjlhY2ZkNjY1NCJ9fX0="), "&8Duct Tape", "", "&rYou can repair Items using this", "&rin an Auto-Anvil");
+ public static final ItemStack HEAVY_CREAM = new CustomItem(Material.SNOWBALL, "&rHeavy Cream");
+ public static final ItemStack CRUSHED_ORE = new CustomItem(Material.GUNPOWDER, "&6Crushed Ore");
+ public static final ItemStack PULVERIZED_ORE = new CustomItem(Material.GUNPOWDER, "&6Pulverized Ore");
+ public static final ItemStack PURE_ORE_CLUSTER = new CustomItem(Material.GUNPOWDER, "&6Pure Ore Cluster");
+ public static final ItemStack SMALL_URANIUM = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzhiMjlhZmE2ZDZkYzkyM2UyZTEzMjRiZjgxOTI3NTBmN2JkYmRkYzY4OTYzMmEyYjZjMThkOWZlN2E1ZSJ9fX0="), "&cSmall Chunk of Uranium", "", "&eRadiation Level: MODERATE", "&4&oHazmat Suit required");
+ public static final ItemStack TINY_URANIUM = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzhiMjlhZmE2ZDZkYzkyM2UyZTEzMjRiZjgxOTI3NTBmN2JkYmRkYzY4OTYzMmEyYjZjMThkOWZlN2E1ZSJ9fX0="), "&cTiny Pile of Uranium", "", "&cRadiation Level: LOW", "&4&oNo Hazmat Suit required");
- public static ItemStack RAINBOW_WOOL = new CustomItem(Material.WHITE_WOOL, "&5Rainbow Wool", "", "&dCycles through all Colors of the Rainbow!");
- public static ItemStack RAINBOW_GLASS = new CustomItem(Material.WHITE_STAINED_GLASS, "&5Rainbow Glass", "", "&dCycles through all Colors of the Rainbow!");
- public static ItemStack RAINBOW_CLAY = new CustomItem(Material.WHITE_TERRACOTTA, "&5Rainbow Clay", "", "&dCycles through all Colors of the Rainbow!");
- public static ItemStack RAINBOW_GLASS_PANE = new CustomItem(Material.WHITE_STAINED_GLASS_PANE, "&5Rainbow Glass Pane", "", "&dCycles through all Colors of the Rainbow!");
+ public static final ItemStack MAGNET = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWJhOGViYzRjNmE4MTczMDk0NzQ5OWJmN2UxZDVlNzNmZWQ2YzFiYjJjMDUxZTk2ZDM1ZWIxNmQyNDYxMGU3In19fQ=="), "&cMagnet");
+ public static final ItemStack NECROTIC_SKULL = new CustomItem(Material.WITHER_SKELETON_SKULL, "&cNecrotic Skull");
+ public static final ItemStack ESSENCE_OF_AFTERLIFE = new CustomItem(Material.GUNPOWDER, "&4Essence of Afterlife");
+ public static final ItemStack ELECTRO_MAGNET = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWJhOGViYzRjNmE4MTczMDk0NzQ5OWJmN2UxZDVlNzNmZWQ2YzFiYjJjMDUxZTk2ZDM1ZWIxNmQyNDYxMGU3In19fQ=="), "&cElectromagnet");
+ public static final ItemStack HEATING_COIL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2UzYmM0ODkzYmE0MWEzZjczZWUyODE3NGNkZjRmZWY2YjE0NWU0MWZlNmM4MmNiN2JlOGQ4ZTk3NzFhNSJ9fX0="), "&cHeating Coil");
+ public static final ItemStack COOLING_UNIT = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzU0YmFkODZjOTlkZjc4MGM4ODlhMTA5OGY3NzY0OGVhZDczODVjYzFkZGIwOTNkYTVhN2Q4YzRjMmFlNTRkIn19fQ=="), "&bCooling Unit");
+ public static final ItemStack ELECTRIC_MOTOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGNiY2EwMTJmNjdlNTRkZTlhZWU3MmZmNDI0ZTA1NmMyYWU1OGRlNWVhY2M5NDlhYjJiY2Q5NjgzY2VjIn19fQ=="), "&cElectric Motor");
+ public static final ItemStack CARGO_MOTOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGNiY2EwMTJmNjdlNTRkZTlhZWU3MmZmNDI0ZTA1NmMyYWU1OGRlNWVhY2M5NDlhYjJiY2Q5NjgzY2VjIn19fQ=="), "&3Cargo Motor");
+ public static final ItemStack SCROLL_OF_DIMENSIONAL_TELEPOSITION = new CustomItem(Material.PAPER, "&6Scroll of Dimensional Teleposition", "", "&cThis Scroll is capable of creating", "&ca temporary black Hole which pulls", "&cnearby Entities into itself and sends", "&cthem into another Dimension where", "&ceverything is turned around", "", "&rIn other words: Makes Entities turn by 180 Degrees");
+ public static final ItemStack TOME_OF_KNOWLEDGE_SHARING = new CustomItem(Material.BOOK, "&6Tome of Knowledge Sharing", "&7Owner: &bNone", "", "&eRight Click&7 to bind this Tome to yourself", "", "", "&eRight Click&7 to obtain all Researches by", "&7the previously assigned Owner");
+ public static final ItemStack HARDENED_GLASS = new CustomItem(Material.LIGHT_GRAY_STAINED_GLASS, "&7Hardened Glass", "", "&rWithstands Explosions");
+ public static final ItemStack WITHER_PROOF_OBSIDIAN = new CustomItem(Material.OBSIDIAN, "&5Wither-Proof Obsidian", "", "&rWithstands Explosions", "&rWithstands Wither Bosses");
+ public static final ItemStack WITHER_PROOF_GLASS = new CustomItem(Material.PURPLE_STAINED_GLASS, "&5Wither-Proof Glass", "", "&rWithstands Explosions", "&rWithstands Wither Bosses");
+ public static final ItemStack REINFORCED_PLATE = new CustomItem(Material.PAPER, "&7Reinforced Plate");
+ public static final ItemStack ANCIENT_PEDESTAL = new CustomItem(Material.DISPENSER, "&dAncient Pedestal", "", "&5Part of the Ancient Altar");
+ public static final ItemStack ANCIENT_ALTAR = new CustomItem(Material.ENCHANTING_TABLE, "&dAncient Altar", "", "&5Multi-Block Altar for", "&5magical Crafting Processes");
+ public static final ItemStack COPPER_WIRE = new CustomItem(Material.STRING, "&6Copper Wire", "", "&6Crucial component in electric modules");
- public static ItemStack RAINBOW_WOOL_XMAS = new CustomItem(Material.WHITE_WOOL, "&5Rainbow Wool &7(Christmas)", "", Christmas.color("< Christmas Edition >"));
- public static ItemStack RAINBOW_GLASS_XMAS = new CustomItem(Material.WHITE_STAINED_GLASS, "&5Rainbow Glass &7(Christmas)", "", Christmas.color("< Christmas Edition >"));
- public static ItemStack RAINBOW_CLAY_XMAS = new CustomItem(Material.WHITE_TERRACOTTA, "&5Rainbow Clay &7(Christmas)", "", Christmas.color("< Christmas Edition >"));
- public static ItemStack RAINBOW_GLASS_PANE_XMAS = new CustomItem(Material.WHITE_STAINED_GLASS_PANE, "&5Rainbow Glass Pane &7(Christmas)", "", Christmas.color("< Christmas Edition >"));
+ public static final ItemStack RAINBOW_WOOL = new CustomItem(Material.WHITE_WOOL, "&5Rainbow Wool", "", "&dCycles through all Colors of the Rainbow!");
+ public static final ItemStack RAINBOW_GLASS = new CustomItem(Material.WHITE_STAINED_GLASS, "&5Rainbow Glass", "", "&dCycles through all Colors of the Rainbow!");
+ public static final ItemStack RAINBOW_CLAY = new CustomItem(Material.WHITE_TERRACOTTA, "&5Rainbow Clay", "", "&dCycles through all Colors of the Rainbow!");
+ public static final ItemStack RAINBOW_GLASS_PANE = new CustomItem(Material.WHITE_STAINED_GLASS_PANE, "&5Rainbow Glass Pane", "", "&dCycles through all Colors of the Rainbow!");
- public static ItemStack RAINBOW_WOOL_VALENTINE = new CustomItem(Material.PINK_WOOL, "&5Rainbow Wool &7(Valentine's Day)", "", "&d< Valentine's Day Edition >");
- public static ItemStack RAINBOW_GLASS_VALENTINE = new CustomItem(Material.PINK_STAINED_GLASS, "&5Rainbow Glass &7(Valentine's Day)", "", "&d< Valentine's Day Edition >");
- public static ItemStack RAINBOW_CLAY_VALENTINE = new CustomItem(Material.PINK_TERRACOTTA, "&5Rainbow Clay &7(Valentine's Day)", "", "&d< Valentine's Day Edition >");
- public static ItemStack RAINBOW_GLASS_PANE_VALENTINE = new CustomItem(Material.PINK_STAINED_GLASS_PANE, "&5Rainbow Glass Pane &7(Valentine's Day)", "", "&d< Valentine's Day Edition >");
+ public static final ItemStack RAINBOW_WOOL_XMAS = new CustomItem(Material.WHITE_WOOL, "&5Rainbow Wool &7(Christmas)", "", Christmas.color("< Christmas Edition >"));
+ public static final ItemStack RAINBOW_GLASS_XMAS = new CustomItem(Material.WHITE_STAINED_GLASS, "&5Rainbow Glass &7(Christmas)", "", Christmas.color("< Christmas Edition >"));
+ public static final ItemStack RAINBOW_CLAY_XMAS = new CustomItem(Material.WHITE_TERRACOTTA, "&5Rainbow Clay &7(Christmas)", "", Christmas.color("< Christmas Edition >"));
+ public static final ItemStack RAINBOW_GLASS_PANE_XMAS = new CustomItem(Material.WHITE_STAINED_GLASS_PANE, "&5Rainbow Glass Pane &7(Christmas)", "", Christmas.color("< Christmas Edition >"));
+
+ public static final ItemStack RAINBOW_WOOL_VALENTINE = new CustomItem(Material.PINK_WOOL, "&5Rainbow Wool &7(Valentine's Day)", "", "&d< Valentine's Day Edition >");
+ public static final ItemStack RAINBOW_GLASS_VALENTINE = new CustomItem(Material.PINK_STAINED_GLASS, "&5Rainbow Glass &7(Valentine's Day)", "", "&d< Valentine's Day Edition >");
+ public static final ItemStack RAINBOW_CLAY_VALENTINE = new CustomItem(Material.PINK_TERRACOTTA, "&5Rainbow Clay &7(Valentine's Day)", "", "&d< Valentine's Day Edition >");
+ public static final ItemStack RAINBOW_GLASS_PANE_VALENTINE = new CustomItem(Material.PINK_STAINED_GLASS_PANE, "&5Rainbow Glass Pane &7(Valentine's Day)", "", "&d< Valentine's Day Edition >");
/* Ingots */
- public static ItemStack COPPER_INGOT = new CustomItem(Material.BRICK, "&bCopper Ingot");
- public static ItemStack TIN_INGOT = new CustomItem(Material.IRON_INGOT, "&bTin Ingot");
- public static ItemStack SILVER_INGOT = new CustomItem(Material.IRON_INGOT, "&bSilver Ingot");
- public static ItemStack ALUMINUM_INGOT = new CustomItem(Material.IRON_INGOT, "&bAluminum Ingot");
- public static ItemStack LEAD_INGOT = new CustomItem(Material.IRON_INGOT, "&bLead Ingot");
- public static ItemStack ZINC_INGOT = new CustomItem(Material.IRON_INGOT, "&bZinc Ingot");
- public static ItemStack MAGNESIUM_INGOT = new CustomItem(Material.IRON_INGOT, "&bMagnesium Ingot");
+ public static final ItemStack COPPER_INGOT = new CustomItem(Material.BRICK, "&bCopper Ingot");
+ public static final ItemStack TIN_INGOT = new CustomItem(Material.IRON_INGOT, "&bTin Ingot");
+ public static final ItemStack SILVER_INGOT = new CustomItem(Material.IRON_INGOT, "&bSilver Ingot");
+ public static final ItemStack ALUMINUM_INGOT = new CustomItem(Material.IRON_INGOT, "&bAluminum Ingot");
+ public static final ItemStack LEAD_INGOT = new CustomItem(Material.IRON_INGOT, "&bLead Ingot");
+ public static final ItemStack ZINC_INGOT = new CustomItem(Material.IRON_INGOT, "&bZinc Ingot");
+ public static final ItemStack MAGNESIUM_INGOT = new CustomItem(Material.IRON_INGOT, "&bMagnesium Ingot");
/* Alloy (Carbon + Iron) */
- public static ItemStack STEEL_INGOT = new CustomItem(Material.IRON_INGOT, "&bSteel Ingot");
+ public static final ItemStack STEEL_INGOT = new CustomItem(Material.IRON_INGOT, "&bSteel Ingot");
/* Alloy (Copper + Tin) */
- public static ItemStack BRONZE_INGOT = new CustomItem(Material.BRICK, "&bBronze Ingot");
+ public static final ItemStack BRONZE_INGOT = new CustomItem(Material.BRICK, "&bBronze Ingot");
/* Alloy (Copper + Aluminum) */
- public static ItemStack DURALUMIN_INGOT = new CustomItem(Material.IRON_INGOT, "&bDuralumin Ingot");
+ public static final ItemStack DURALUMIN_INGOT = new CustomItem(Material.IRON_INGOT, "&bDuralumin Ingot");
/* Alloy (Copper + Silver) */
- public static ItemStack BILLON_INGOT = new CustomItem(Material.IRON_INGOT, "&bBillon Ingot");
+ public static final ItemStack BILLON_INGOT = new CustomItem(Material.IRON_INGOT, "&bBillon Ingot");
/* Alloy (Copper + Zinc) */
- public static ItemStack BRASS_INGOT = new CustomItem(Material.GOLD_INGOT, "&bBrass Ingot");
+ public static final ItemStack BRASS_INGOT = new CustomItem(Material.GOLD_INGOT, "&bBrass Ingot");
/* Alloy (Aluminum + Brass) */
- public static ItemStack ALUMINUM_BRASS_INGOT = new CustomItem(Material.GOLD_INGOT, "&bAluminum Brass Ingot");
+ public static final ItemStack ALUMINUM_BRASS_INGOT = new CustomItem(Material.GOLD_INGOT, "&bAluminum Brass Ingot");
/* Alloy (Aluminum + Bronze) */
- public static ItemStack ALUMINUM_BRONZE_INGOT = new CustomItem(Material.GOLD_INGOT, "&bAluminum Bronze Ingot");
+ public static final ItemStack ALUMINUM_BRONZE_INGOT = new CustomItem(Material.GOLD_INGOT, "&bAluminum Bronze Ingot");
/* Alloy (Gold + Silver + Copper) */
- public static ItemStack CORINTHIAN_BRONZE_INGOT = new CustomItem(Material.GOLD_INGOT, "&bCorinthian Bronze Ingot");
+ public static final ItemStack CORINTHIAN_BRONZE_INGOT = new CustomItem(Material.GOLD_INGOT, "&bCorinthian Bronze Ingot");
/* Alloy (Lead + Tin) */
- public static ItemStack SOLDER_INGOT = new CustomItem(Material.IRON_INGOT, "&bSolder Ingot");
+ public static final ItemStack SOLDER_INGOT = new CustomItem(Material.IRON_INGOT, "&bSolder Ingot");
/* Alloy (Steel + Iron + Carbon) */
- public static ItemStack DAMASCUS_STEEL_INGOT = new CustomItem(Material.IRON_INGOT, "&bDamascus Steel Ingot");
+ public static final ItemStack DAMASCUS_STEEL_INGOT = new CustomItem(Material.IRON_INGOT, "&bDamascus Steel Ingot");
/* Alloy (Damascus Steel + Duralumin + Compressed Carbon + Aluminium Bronze) */
- public static ItemStack HARDENED_METAL_INGOT = new CustomItem(Material.IRON_INGOT, "&b&lHardened Metal");
+ public static final ItemStack HARDENED_METAL_INGOT = new CustomItem(Material.IRON_INGOT, "&b&lHardened Metal");
/* Alloy (Hardened Metal + Corinthian Bronze + Solder + Billon + Damascus Steel) */
- public static ItemStack REINFORCED_ALLOY_INGOT = new CustomItem(Material.IRON_INGOT, "&b&lReinforced Alloy Ingot");
+ public static final ItemStack REINFORCED_ALLOY_INGOT = new CustomItem(Material.IRON_INGOT, "&b&lReinforced Alloy Ingot");
/* Alloy (Iron + Silicon) */
- public static ItemStack FERROSILICON = new CustomItem(Material.IRON_INGOT, "&bFerrosilicon");
+ public static final ItemStack FERROSILICON = new CustomItem(Material.IRON_INGOT, "&bFerrosilicon");
/* Alloy (Iron + Gold) */
- public static ItemStack GILDED_IRON = new CustomItem(Material.GOLD_INGOT, "&6&lGilded Iron");
+ public static final ItemStack GILDED_IRON = new CustomItem(Material.GOLD_INGOT, "&6&lGilded Iron");
/* Alloy (Redston + Ferrosilicon) */
- public static ItemStack REDSTONE_ALLOY = new CustomItem(Material.BRICK, "&cRedstone Alloy Ingot");
+ public static final ItemStack REDSTONE_ALLOY = new CustomItem(Material.BRICK, "&cRedstone Alloy Ingot");
/* Alloy (Iron + Copper) */
- public static ItemStack NICKEL_INGOT = new CustomItem(Material.IRON_INGOT, "&bNickel Ingot");
+ public static final ItemStack NICKEL_INGOT = new CustomItem(Material.IRON_INGOT, "&bNickel Ingot");
/* Alloy (Nickel + Iron + Copper) */
- public static ItemStack COBALT_INGOT = new CustomItem(Material.IRON_INGOT, "&9Cobalt Ingot");
+ public static final ItemStack COBALT_INGOT = new CustomItem(Material.IRON_INGOT, "&9Cobalt Ingot");
/* Gold */
- public static ItemStack GOLD_4K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(4-Carat)");
- public static ItemStack GOLD_6K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(6-Carat)");
- public static ItemStack GOLD_8K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(8-Carat)");
- public static ItemStack GOLD_10K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(10-Carat)");
- public static ItemStack GOLD_12K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(12-Carat)");
- public static ItemStack GOLD_14K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(14-Carat)");
- public static ItemStack GOLD_16K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(16-Carat)");
- public static ItemStack GOLD_18K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(18-Carat)");
- public static ItemStack GOLD_20K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(20-Carat)");
- public static ItemStack GOLD_22K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(22-Carat)");
- public static ItemStack GOLD_24K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(24-Carat)");
+ public static final ItemStack GOLD_4K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(4-Carat)");
+ public static final ItemStack GOLD_6K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(6-Carat)");
+ public static final ItemStack GOLD_8K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(8-Carat)");
+ public static final ItemStack GOLD_10K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(10-Carat)");
+ public static final ItemStack GOLD_12K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(12-Carat)");
+ public static final ItemStack GOLD_14K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(14-Carat)");
+ public static final ItemStack GOLD_16K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(16-Carat)");
+ public static final ItemStack GOLD_18K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(18-Carat)");
+ public static final ItemStack GOLD_20K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(20-Carat)");
+ public static final ItemStack GOLD_22K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(22-Carat)");
+ public static final ItemStack GOLD_24K = new CustomItem(Material.GOLD_INGOT, "&rGold Ingot &7(24-Carat)");
/* Dusts */
- public static ItemStack IRON_DUST = new CustomItem(Material.GUNPOWDER, "&6Iron Dust");
- public static ItemStack GOLD_DUST = new CustomItem(Material.GLOWSTONE_DUST, "&6Gold Dust");
- public static ItemStack TIN_DUST = new CustomItem(Material.SUGAR, "&6Tin Dust");
- public static ItemStack COPPER_DUST = new CustomItem(Material.GLOWSTONE_DUST, "&6Copper Dust");
- public static ItemStack SILVER_DUST = new CustomItem(Material.SUGAR, "&6Silver Dust");
- public static ItemStack ALUMINUM_DUST = new CustomItem(Material.SUGAR, "&6Aluminum Dust");
- public static ItemStack LEAD_DUST = new CustomItem(Material.GUNPOWDER, "&6Lead Dust");
- public static ItemStack SULFATE = new CustomItem(Material.GLOWSTONE_DUST, "&6Sulfate");
- public static ItemStack ZINC_DUST = new CustomItem(Material.SUGAR, "&6Zinc Dust");
- public static ItemStack MAGNESIUM_DUST = new CustomItem(Material.SUGAR, "&6Magnesium");
- public static ItemStack CARBON = null;
- public static ItemStack SILICON = new CustomItem(Material.FIREWORK_STAR, "&6Silicon");
- public static ItemStack GOLD_24K_BLOCK = new CustomItem(Material.GOLD_BLOCK, "&rGold Block &7(24-Carat)");
+ public static final ItemStack IRON_DUST = new CustomItem(Material.GUNPOWDER, "&6Iron Dust");
+ public static final ItemStack GOLD_DUST = new CustomItem(Material.GLOWSTONE_DUST, "&6Gold Dust");
+ public static final ItemStack TIN_DUST = new CustomItem(Material.SUGAR, "&6Tin Dust");
+ public static final ItemStack COPPER_DUST = new CustomItem(Material.GLOWSTONE_DUST, "&6Copper Dust");
+ public static final ItemStack SILVER_DUST = new CustomItem(Material.SUGAR, "&6Silver Dust");
+ public static final ItemStack ALUMINUM_DUST = new CustomItem(Material.SUGAR, "&6Aluminum Dust");
+ public static final ItemStack LEAD_DUST = new CustomItem(Material.GUNPOWDER, "&6Lead Dust");
+ public static final ItemStack SULFATE = new CustomItem(Material.GLOWSTONE_DUST, "&6Sulfate");
+ public static final ItemStack ZINC_DUST = new CustomItem(Material.SUGAR, "&6Zinc Dust");
+ public static final ItemStack MAGNESIUM_DUST = new CustomItem(Material.SUGAR, "&6Magnesium");
+ public static final ItemStack SILICON = new CustomItem(Material.FIREWORK_STAR, "&6Silicon");
+ public static final ItemStack GOLD_24K_BLOCK = new CustomItem(Material.GOLD_BLOCK, "&rGold Block &7(24-Carat)");
/* Gems */
- public static ItemStack SYNTHETIC_DIAMOND = new CustomItem(Material.DIAMOND, "&bSynthetic Diamond");
- public static ItemStack SYNTHETIC_EMERALD = new CustomItem(Material.EMERALD, "&bSynthetic Emerald");
- public static ItemStack SYNTHETIC_SAPPHIRE = null;
- public static ItemStack CARBONADO = null;
- public static ItemStack RAW_CARBONADO = null;
- public static ItemStack URANIUM = null;
- public static ItemStack NEPTUNIUM = null;
- public static ItemStack PLUTONIUM = null;
- public static ItemStack BOOSTED_URANIUM = null;
+ public static final ItemStack SYNTHETIC_DIAMOND = new CustomItem(Material.DIAMOND, "&bSynthetic Diamond");
+ public static final ItemStack SYNTHETIC_EMERALD = new CustomItem(Material.EMERALD, "&bSynthetic Emerald");
+ public static final ItemStack SYNTHETIC_SAPPHIRE = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTM1MDMyZjRkN2QwMWRlOGVjOTlkODlmODcyMzAxMmQ0ZTc0ZmE3MzAyMmM0ZmFjZjFiNTdjN2ZmNmZmMCJ9fX0="), "&bSynthetic Sapphire");
+ public static final ItemStack CARBONADO = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTJmNGIxNTc3ZjUxNjBjNjg5MzE3MjU3MWM0YTcxZDhiMzIxY2RjZWFhMDMyYzZlMGUzYjYwZTBiMzI4ZmEifX19"), "&b&lCarbonado", "", "&7&o\"Black Diamond\"");
+ public static final ItemStack RAW_CARBONADO = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWI0OWU2ZWMxMDc3MWU4OTkyMjVhZWE3M2NkOGNmMDM2ODRmNDExZDE0MTVjNzMyM2M5M2NiOTQ3NjIzMCJ9fX0="), "&bRaw Carbonado");
+
+ public static final ItemStack URANIUM = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzhiMjlhZmE2ZDZkYzkyM2UyZTEzMjRiZjgxOTI3NTBmN2JkYmRkYzY4OTYzMmEyYjZjMThkOWZlN2E1ZSJ9fX0="), "&4Uranium", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
+ public static final ItemStack NEPTUNIUM = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGVkZWE2YmZkMzdlNDlkZTQzZjE1NGZlNmZjYTYxN2Q0MTI5ZTYxYjk1NzU5YTNkNDlhMTU5MzVhMWMyZGNmMCJ9fX0="), "&aNeptunium", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
+ public static final ItemStack PLUTONIUM = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjVjZjkxYjczODg2NjVhNmQ3YzFiNjAyNmJkYjIzMjJjNmQyNzg5OTdhNDQ0Nzg2NzdjYmNjMTVmNzYxMjRmIn19fQ=="), "&7Plutonium", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
+ public static final ItemStack BOOSTED_URANIUM = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjgzN2NhMTJmMjIyZjQ3ODcxOTZhMTdiOGFiNjU2OTg1Zjg0MDRjNTA3NjdhZGJjYjZlN2YxNDI1NGZlZSJ9fX0="), "&2Boosted Uranium", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
/* Talisman */
- public static ItemStack TALISMAN = new CustomItem(Material.EMERALD, "&6Common Talisman");
- public static ItemStack TALISMAN_ANVIL = new CustomItem(Material.EMERALD, "&aTalisman of the Anvil", "", "&rEach Talisman can prevent", "&r1 Tool from breaking, but will then", "&rbe consumed", "", "&4&lWARNING:", "&4This Talisman does not work on", "&4Tools which are too powerful", "&4due to their complexity");
- public static ItemStack TALISMAN_MINER = new CustomItem(Material.EMERALD, "&aTalisman of the Miner", "", "&rWhile you have this Talisman", "&rin your Inventory it has", "&ra 20% chance of doubling", "&rall Ores you mine");
- public static ItemStack TALISMAN_HUNTER = new CustomItem(Material.EMERALD, "&aTalisman of the Hunter", "", "&rWhile you have this Talisman", "&rin your Inventory it has", "&ra 20% chance of doubling", "&rall Drops from Mobs you kill");
- public static ItemStack TALISMAN_LAVA = new CustomItem(Material.EMERALD, "&aTalisman of the Lava Walker", "", "&rWhile you have this Talisman", "&rin your Inventory it will", "&rgive you Fire Resistance", "&ras soon as you touch Lava", "&rbut will then be consumed");
- public static ItemStack TALISMAN_WATER = new CustomItem(Material.EMERALD, "&aTalisman of the Water Breather", "", "&rWhile you have this Talisman", "&rin your Inventory it will", "&rgive you the ability", "&rto breath underwater as", "&rsoon as you start drowning", "&rbut will then be consumed");
- public static ItemStack TALISMAN_ANGEL = new CustomItem(Material.EMERALD, "&aTalisman of the Angel", "", "&rWhile you have this Talisman", "&rin your Inventory it has a", "&r75% chance to prevent you", "&rfrom taking Fall Damage");
- public static ItemStack TALISMAN_FIRE = new CustomItem(Material.EMERALD, "&aTalisman of the Firefighter", "", "&rWhile you have this Talisman", "&rin your Inventory it will", "&rgive you Fire Resistance", "&ras soon as you start burning", "&rbut will then be consumed");
- public static ItemStack TALISMAN_MAGICIAN = new CustomItem(Material.EMERALD, "&aTalisman of the Magician", "", "&rWhile you have this Talisman", "&rin your Inventory it gives", "&ryou a 80% Luck Bonus on Enchanting", "&rYou will sometimes get an Extra Enchantment");
- public static ItemStack TALISMAN_TRAVELLER = new CustomItem(Material.EMERALD, "&aTalisman of the Traveller", "", "&rWhile you have this Talisman", "&rin your Inventory it gives", "&ryou a 60% Chance for a decent", "&rSpeed Buff when you start sprinting");
- public static ItemStack TALISMAN_WARRIOR = new CustomItem(Material.EMERALD, "&aTalisman of the Warrior", "", "&rWhile you have this Talisman", "&rin your Inventory it gives", "&ryou Strength III whenever you get hit", "&rbut will then be consumed");
- public static ItemStack TALISMAN_KNIGHT = new CustomItem(Material.EMERALD, "&aTalisman of the Knight", "", "&rWhile you have this Talisman", "&rin your Inventory it gives", "&ryou a 30% Chance for 5 Seconds of Regeneration", "&rwhenever You get hit", "&rbut will then be consumed");
- public static ItemStack TALISMAN_WHIRLWIND = new CustomItem(Material.EMERALD, "&aTalisman of the Whirlwind", "", "&rWhile you have this Talisman", "&rin your Inventory it will reflect", "&r60% of all Projectiles fired at you");
- public static ItemStack TALISMAN_WIZARD = new CustomItem(Material.EMERALD, "&aTalisman of the Wizard", "", "&rWhile you have this Talisman", "&rin your Inventory it allows you to", "&robtain Fortune Level 4/5 however", "&rit also has a chance to lower the", "&rLevel of some Enchantments on your Item");
+ public static final ItemStack TALISMAN = new CustomItem(Material.EMERALD, "&6Common Talisman");
+ public static final ItemStack TALISMAN_ANVIL = new CustomItem(Material.EMERALD, "&aTalisman of the Anvil", "", "&rEach Talisman can prevent", "&r1 Tool from breaking, but will then", "&rbe consumed", "", "&4&lWARNING:", "&4This Talisman does not work on", "&4Tools which are too powerful", "&4due to their complexity");
+ public static final ItemStack TALISMAN_MINER = new CustomItem(Material.EMERALD, "&aTalisman of the Miner", "", "&rWhile you have this Talisman", "&rin your Inventory it has", "&ra 20% chance of doubling", "&rall Ores you mine");
+ public static final ItemStack TALISMAN_HUNTER = new CustomItem(Material.EMERALD, "&aTalisman of the Hunter", "", "&rWhile you have this Talisman", "&rin your Inventory it has", "&ra 20% chance of doubling", "&rall Drops from Mobs you kill");
+ public static final ItemStack TALISMAN_LAVA = new CustomItem(Material.EMERALD, "&aTalisman of the Lava Walker", "", "&rWhile you have this Talisman", "&rin your Inventory it will", "&rgive you Fire Resistance", "&ras soon as you touch Lava", "&rbut will then be consumed");
+ public static final ItemStack TALISMAN_WATER = new CustomItem(Material.EMERALD, "&aTalisman of the Water Breather", "", "&rWhile you have this Talisman", "&rin your Inventory it will", "&rgive you the ability", "&rto breath underwater as", "&rsoon as you start drowning", "&rbut will then be consumed");
+ public static final ItemStack TALISMAN_ANGEL = new CustomItem(Material.EMERALD, "&aTalisman of the Angel", "", "&rWhile you have this Talisman", "&rin your Inventory it has a", "&r75% chance to prevent you", "&rfrom taking Fall Damage");
+ public static final ItemStack TALISMAN_FIRE = new CustomItem(Material.EMERALD, "&aTalisman of the Firefighter", "", "&rWhile you have this Talisman", "&rin your Inventory it will", "&rgive you Fire Resistance", "&ras soon as you start burning", "&rbut will then be consumed");
+ public static final ItemStack TALISMAN_MAGICIAN = new CustomItem(Material.EMERALD, "&aTalisman of the Magician", "", "&rWhile you have this Talisman", "&rin your Inventory it gives", "&ryou a 80% Luck Bonus on Enchanting", "&rYou will sometimes get an Extra Enchantment");
+ public static final ItemStack TALISMAN_TRAVELLER = new CustomItem(Material.EMERALD, "&aTalisman of the Traveller", "", "&rWhile you have this Talisman", "&rin your Inventory it gives", "&ryou a 60% Chance for a decent", "&rSpeed Buff when you start sprinting");
+ public static final ItemStack TALISMAN_WARRIOR = new CustomItem(Material.EMERALD, "&aTalisman of the Warrior", "", "&rWhile you have this Talisman", "&rin your Inventory it gives", "&ryou Strength III whenever you get hit", "&rbut will then be consumed");
+ public static final ItemStack TALISMAN_KNIGHT = new CustomItem(Material.EMERALD, "&aTalisman of the Knight", "", "&rWhile you have this Talisman", "&rin your Inventory it gives", "&ryou a 30% Chance for 5 Seconds of Regeneration", "&rwhenever You get hit", "&rbut will then be consumed");
+ public static final ItemStack TALISMAN_WHIRLWIND = new CustomItem(Material.EMERALD, "&aTalisman of the Whirlwind", "", "&rWhile you have this Talisman", "&rin your Inventory it will reflect", "&r60% of all Projectiles fired at you");
+ public static final ItemStack TALISMAN_WIZARD = new CustomItem(Material.EMERALD, "&aTalisman of the Wizard", "", "&rWhile you have this Talisman", "&rin your Inventory it allows you to", "&robtain Fortune Level 4/5 however", "&rit also has a chance to lower the", "&rLevel of some Enchantments on your Item");
/* Staves */
- public static ItemStack STAFF_ELEMENTAL = new CustomItem(Material.STICK, "&6Elemental Staff");
- public static ItemStack STAFF_WIND = new CustomItem(Material.STICK, "&6Elemental Staff &7- &b&oWind", 0, new String[] {"", "&7Element: &b&oWind", "", "&7&eRight Click&7 to launch yourself forward"}, new String[] {"LUCK-1"});
- public static ItemStack STAFF_FIRE = new CustomItem(Material.STICK, "&6Elemental Staff &7- &c&oFire", 0, new String[] {"", "&7Element: &c&oFire"}, new String[] {"FIRE_ASPECT-5"});
- public static ItemStack STAFF_WATER = new CustomItem(Material.STICK, "&6Elemental Staff &7- &1&oWater", 0, new String[] {"", "&7Element: &1&oWater", "", "&7&eRight Click&7 to extinguish yourself"}, new String[] {"WATER_WORKER-1"});
+ public static final ItemStack STAFF_ELEMENTAL = new CustomItem(Material.STICK, "&6Elemental Staff");
+ public static final ItemStack STAFF_WIND = new CustomItem(Material.STICK, "&6Elemental Staff &7- &b&oWind", "", "&7Element: &b&oWind", "", "&eRight Click&7 to launch yourself forward");
+ public static final ItemStack STAFF_FIRE = new CustomItem(Material.STICK, "&6Elemental Staff &7- &c&oFire", "", "&7Element: &c&oFire");
+ public static final ItemStack STAFF_WATER = new CustomItem(Material.STICK, "&6Elemental Staff &7- &1&oWater", "", "&7Element: &1&oWater", "", "&eRight Click&7 to extinguish yourself");
+ public static final ItemStack STAFF_STORM = new CustomItem(Material.STICK, "&6Elemental Staff &7- &8&oStorm", "", "&7Element: &8&oStorm", "", "&eRight Click&7 to summon a lightning", "&eX Uses &7left");
+
+ static {
+ STAFF_WIND.addUnsafeEnchantment(Enchantment.LUCK, 1);
+ STAFF_FIRE.addUnsafeEnchantment(Enchantment.FIRE_ASPECT, 5);
+ STAFF_WATER.addUnsafeEnchantment(Enchantment.WATER_WORKER, 1);
+ STAFF_STORM.addUnsafeEnchantment(Enchantment.DURABILITY, 1);
+ }
/* Machines */
- public static ItemStack GRIND_STONE = new CustomItem(Material.DISPENSER, "&bGrind Stone", "", "&a&oGrinds Items for more Efficiency");
- public static ItemStack ARMOR_FORGE = new CustomItem(Material.ANVIL, "&6Armor Forge", "", "&a&oGives you the Ability to create powerful Armor");
- public static ItemStack SMELTERY = new CustomItem(Material.FURNACE, "&6Smeltery", "", "&a&oActs as a high-temperature Furnace for Metals");
- public static ItemStack IGNITION_CHAMBER = new CustomItem(Material.HOPPER, "&4Automatic Ignition Chamber", "&rPrevents the Smeltery from using up fire.", "&rRequires Flint and Steel", "&rMust be placed adjacent to the Smeltery's dispenser");
- public static ItemStack ORE_CRUSHER = new CustomItem(Material.DISPENSER, "&bOre Crusher", "", "&a&oCrushes Ores to double them");
- public static ItemStack COMPRESSOR = new CustomItem(Material.PISTON, "&bCompressor", "", "&a&oCompresses Items");
- public static ItemStack PRESSURE_CHAMBER = new CustomItem(Material.GLASS, "&bPressure Chamber", "", "&a&oCompresses Items even more");
- public static ItemStack MAGIC_WORKBENCH = new CustomItem(Material.CRAFTING_TABLE, "&6Magic Workbench", "Infuses Items with magical Energy");
- public static ItemStack ORE_WASHER = new CustomItem(Material.CAULDRON, "&6Ore Washer", "", "&a&oWashes Sifted Ore to filter Ores", "&a&oand gives you small Stone Chunks");
- public static ItemStack TABLE_SAW = new CustomItem(Material.STONECUTTER, "&6Table Saw", "", "&a&oAllows you get 8 planks from 1 Log", "&a&o(Works with all log types)");
- public static ItemStack SAW_MILL = new CustomItem(Material.BARRIER, "&6Saw Mill", "", "&cObsolete! Use the Table Saw instead");
- public static ItemStack COMPOSTER = new CustomItem(Material.CAULDRON, "&aComposter", "", "&a&oCan convert various Materials over Time...");
- public static ItemStack ENHANCED_CRAFTING_TABLE = new CustomItem(Material.CRAFTING_TABLE, "&eEnhanced Crafting Table", "", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power...");
- public static ItemStack CRUCIBLE = new CustomItem(Material.CAULDRON, "&cCrucible", "", "&a&oUsed to smelt Items into Liquids");
- public static ItemStack JUICER = new CustomItem(Material.GLASS_BOTTLE, "&aJuicer", "", "&a&oAllows you to create delicious Juice");
+ public static final ItemStack GRIND_STONE = new CustomItem(Material.DISPENSER, "&bGrind Stone", "", "&a&oGrinds Items for more Efficiency");
+ public static final ItemStack ARMOR_FORGE = new CustomItem(Material.ANVIL, "&6Armor Forge", "", "&a&oGives you the Ability to create powerful Armor");
+ public static final ItemStack SMELTERY = new CustomItem(Material.FURNACE, "&6Smeltery", "", "&a&oActs as a high-temperature Furnace for Metals");
+ public static final ItemStack IGNITION_CHAMBER = new CustomItem(Material.HOPPER, "&4Automatic Ignition Chamber", "&rPrevents the Smeltery from using up fire.", "&rRequires Flint and Steel", "&rMust be placed adjacent to the Smeltery's dispenser");
+ public static final ItemStack ORE_CRUSHER = new CustomItem(Material.DISPENSER, "&bOre Crusher", "", "&a&oCrushes Ores to double them");
+ public static final ItemStack COMPRESSOR = new CustomItem(Material.PISTON, "&bCompressor", "", "&a&oCompresses Items");
+ public static final ItemStack PRESSURE_CHAMBER = new CustomItem(Material.GLASS, "&bPressure Chamber", "", "&a&oCompresses Items even more");
+ public static final ItemStack MAGIC_WORKBENCH = new CustomItem(Material.CRAFTING_TABLE, "&6Magic Workbench", "Infuses Items with magical Energy");
+ public static final ItemStack ORE_WASHER = new CustomItem(Material.CAULDRON, "&6Ore Washer", "", "&a&oWashes Sifted Ore to filter Ores", "&a&oand gives you small Stone Chunks");
+ public static final ItemStack TABLE_SAW = new CustomItem(Material.STONECUTTER, "&6Table Saw", "", "&a&oAllows you get 8 planks from 1 Log", "&a&o(Works with all log types)");
+ public static final ItemStack SAW_MILL = new CustomItem(Material.BARRIER, "&6Saw Mill", "", "&cObsolete! Use the Table Saw instead");
+ public static final ItemStack COMPOSTER = new CustomItem(Material.CAULDRON, "&aComposter", "", "&a&oCan convert various Materials over Time...");
+ public static final ItemStack ENHANCED_CRAFTING_TABLE = new CustomItem(Material.CRAFTING_TABLE, "&eEnhanced Crafting Table", "", "&a&oA regular Crafting Table cannot", "&a&ohold this massive Amount of Power...");
+ public static final ItemStack CRUCIBLE = new CustomItem(Material.CAULDRON, "&cCrucible", "", "&a&oUsed to smelt Items into Liquids");
+ public static final ItemStack JUICER = new CustomItem(Material.GLASS_BOTTLE, "&aJuicer", "", "&a&oAllows you to create delicious Juice");
- public static ItemStack SOLAR_PANEL = new CustomItem(Material.DAYLIGHT_DETECTOR, "&bSolar Panel", "", "&a&oTransforms Sunlight to Energy");
- public static ItemStack SOLAR_ARRAY = new CustomItem(Material.DAYLIGHT_DETECTOR, "&bSolar Array", "", "&a&oTransforms Sunlight to Energy");
- public static ItemStack DIGITAL_MINER = new CustomItem(Material.IRON_PICKAXE, "&bDigital Miner", "", "&a&oDigs out everything!");
- public static ItemStack ADVANCED_DIGITAL_MINER = new CustomItem(Material.DIAMOND_PICKAXE, "&6Advanced Digital Miner", "", "&a&oDigs out everything!", "&a&oAutomatically crushes your Ores");
- public static ItemStack AUTOMATED_PANNING_MACHINE = new CustomItem(Material.BOWL, "&aAutomated Panning Machine", "", "&a&oA MultiBlock Version of the Gold Pan");
- public static ItemStack OUTPUT_CHEST = new CustomItem(Material.CHEST, "&4Output Chest", "", "&c&oA basic machine will try to put", "&c&oitems in this chest if it's placed", "&c&oadjacent to the dispenser.");
- public static ItemStack HOLOGRAM_PROJECTOR = new CustomItem(Material.QUARTZ_SLAB, "&bHologram Projector", "", "&rProjects an Editable Hologram");
+ public static final ItemStack SOLAR_PANEL = new CustomItem(Material.DAYLIGHT_DETECTOR, "&bSolar Panel", "", "&a&oTransforms Sunlight to Energy");
+ public static final ItemStack SOLAR_ARRAY = new CustomItem(Material.DAYLIGHT_DETECTOR, "&bSolar Array", "", "&a&oTransforms Sunlight to Energy");
+
+ @Deprecated
+ public static final ItemStack DIGITAL_MINER = new CustomItem(Material.IRON_PICKAXE, "&bDigital Miner", "", "&4DEPRECATED", "&cThis machine will soon be removed!");
+
+ @Deprecated
+ public static final ItemStack ADVANCED_DIGITAL_MINER = new CustomItem(Material.DIAMOND_PICKAXE, "&6Advanced Digital Miner", "", "&4DEPRECATED", "&cThis machine will soon be removed!");
+
+ public static final ItemStack AUTOMATED_PANNING_MACHINE = new CustomItem(Material.BOWL, "&aAutomated Panning Machine", "", "&a&oA MultiBlock Version of the Gold Pan");
+ public static final ItemStack OUTPUT_CHEST = new CustomItem(Material.CHEST, "&4Output Chest", "", "&c&oA basic machine will try to put", "&c&oitems in this chest if it's placed", "&c&oadjacent to the dispenser.");
+ public static final ItemStack HOLOGRAM_PROJECTOR = new CustomItem(Material.QUARTZ_SLAB, "&bHologram Projector", "", "&rProjects an Editable Hologram");
/* Enhanced Furnaces */
- public static ItemStack ENHANCED_FURNACE = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eI", "", "&7Processing Speed: &e1x", "&7Fuel Efficiency: &e1x", "&7Luck Multiplier: &e1x");
- public static ItemStack ENHANCED_FURNACE_2 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eII", "", "&7Processing Speed: &e2x", "&7Fuel Efficiency: &e1x", "&7Luck Multiplier: &e1x");
- public static ItemStack ENHANCED_FURNACE_3 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eIII", "", "&7Processing Speed: &e2x", "&7Fuel Efficiency: &e2x", "&7Luck Multiplier: &e1x");
- public static ItemStack ENHANCED_FURNACE_4 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eIV", "", "&7Processing Speed: &e3x", "&7Fuel Efficiency: &e2x", "&7Luck Multiplier: &e1x");
- public static ItemStack ENHANCED_FURNACE_5 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eV", "", "&7Processing Speed: &e3x", "&7Fuel Efficiency: &e2x", "&7Luck Multiplier: &e2x");
- public static ItemStack ENHANCED_FURNACE_6 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eVI", "", "&7Processing Speed: &e3x", "&7Fuel Efficiency: &e3x", "&7Luck Multiplier: &e2x");
- public static ItemStack ENHANCED_FURNACE_7 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eVII", "", "&7Processing Speed: &e4x", "&7Fuel Efficiency: &e3x", "&7Luck Multiplier: &e2x");
- public static ItemStack ENHANCED_FURNACE_8 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eVIII", "", "&7Processing Speed: &e4x", "&7Fuel Efficiency: &e4x", "&7Luck Multiplier: &e2x");
- public static ItemStack ENHANCED_FURNACE_9 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eIX", "", "&7Processing Speed: &e5x", "&7Fuel Efficiency: &e4x", "&7Luck Multiplier: &e2x");
- public static ItemStack ENHANCED_FURNACE_10 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eX", "", "&7Processing Speed: &e5x", "&7Fuel Efficiency: &e5x", "&7Luck Multiplier: &e2x");
- public static ItemStack ENHANCED_FURNACE_11 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eXI", "", "&7Processing Speed: &e5x", "&7Fuel Efficiency: &e5x", "&7Luck Multiplier: &e3x");
- public static ItemStack REINFORCED_FURNACE = new CustomItem(Material.FURNACE, "&7Reinforced Furnace", "", "&7Processing Speed: &e10x", "&7Fuel Efficiency: &e10x", "&7Luck Multiplier: &e3x");
- public static ItemStack CARBONADO_EDGED_FURNACE = new CustomItem(Material.FURNACE, "&7Carbonado Edged Furnace", "", "&7Processing Speed: &e20x", "&7Fuel Efficiency: &e10x", "&7Luck Multiplier: &e3x");
+ public static final ItemStack ENHANCED_FURNACE = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eI", "", "&7Processing Speed: &e1x", "&7Fuel Efficiency: &e1x", "&7Luck Multiplier: &e1x");
+ public static final ItemStack ENHANCED_FURNACE_2 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eII", "", "&7Processing Speed: &e2x", "&7Fuel Efficiency: &e1x", "&7Luck Multiplier: &e1x");
+ public static final ItemStack ENHANCED_FURNACE_3 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eIII", "", "&7Processing Speed: &e2x", "&7Fuel Efficiency: &e2x", "&7Luck Multiplier: &e1x");
+ public static final ItemStack ENHANCED_FURNACE_4 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eIV", "", "&7Processing Speed: &e3x", "&7Fuel Efficiency: &e2x", "&7Luck Multiplier: &e1x");
+ public static final ItemStack ENHANCED_FURNACE_5 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eV", "", "&7Processing Speed: &e3x", "&7Fuel Efficiency: &e2x", "&7Luck Multiplier: &e2x");
+ public static final ItemStack ENHANCED_FURNACE_6 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eVI", "", "&7Processing Speed: &e3x", "&7Fuel Efficiency: &e3x", "&7Luck Multiplier: &e2x");
+ public static final ItemStack ENHANCED_FURNACE_7 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eVII", "", "&7Processing Speed: &e4x", "&7Fuel Efficiency: &e3x", "&7Luck Multiplier: &e2x");
+ public static final ItemStack ENHANCED_FURNACE_8 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eVIII", "", "&7Processing Speed: &e4x", "&7Fuel Efficiency: &e4x", "&7Luck Multiplier: &e2x");
+ public static final ItemStack ENHANCED_FURNACE_9 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eIX", "", "&7Processing Speed: &e5x", "&7Fuel Efficiency: &e4x", "&7Luck Multiplier: &e2x");
+ public static final ItemStack ENHANCED_FURNACE_10 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eX", "", "&7Processing Speed: &e5x", "&7Fuel Efficiency: &e5x", "&7Luck Multiplier: &e2x");
+ public static final ItemStack ENHANCED_FURNACE_11 = new CustomItem(Material.FURNACE, "&7Enhanced Furnace - &eXI", "", "&7Processing Speed: &e5x", "&7Fuel Efficiency: &e5x", "&7Luck Multiplier: &e3x");
+ public static final ItemStack REINFORCED_FURNACE = new CustomItem(Material.FURNACE, "&7Reinforced Furnace", "", "&7Processing Speed: &e10x", "&7Fuel Efficiency: &e10x", "&7Luck Multiplier: &e3x");
+ public static final ItemStack CARBONADO_EDGED_FURNACE = new CustomItem(Material.FURNACE, "&7Carbonado Edged Furnace", "", "&7Processing Speed: &e20x", "&7Fuel Efficiency: &e10x", "&7Luck Multiplier: &e3x");
- public static ItemStack BLOCK_PLACER = new CustomItem(Material.DISPENSER, "&aBlock Placer", "", "&rAll Blocks in this Dispenser", "&rwill automatically get placed");
+ public static final ItemStack BLOCK_PLACER = new CustomItem(Material.DISPENSER, "&aBlock Placer", "", "&rAll Blocks in this Dispenser", "&rwill automatically get placed");
/* Soulbound Items */
- public static ItemStack SOULBOUND_SWORD = new CustomItem(Material.DIAMOND_SWORD, "&cSoulbound Sword");
- public static ItemStack SOULBOUND_BOW = new CustomItem(Material.BOW, "&cSoulbound Bow");
- public static ItemStack SOULBOUND_PICKAXE = new CustomItem(Material.DIAMOND_PICKAXE, "&cSoulbound Pickaxe");
- public static ItemStack SOULBOUND_AXE = new CustomItem(Material.DIAMOND_AXE, "&cSoulbound Axe");
- public static ItemStack SOULBOUND_SHOVEL = new CustomItem(Material.DIAMOND_SHOVEL, "&cSoulbound Shovel");
- public static ItemStack SOULBOUND_HOE = new CustomItem(Material.DIAMOND_HOE, "&cSoulbound Hoe");
+ public static final ItemStack SOULBOUND_SWORD = new CustomItem(Material.DIAMOND_SWORD, "&cSoulbound Sword");
+ public static final ItemStack SOULBOUND_BOW = new CustomItem(Material.BOW, "&cSoulbound Bow");
+ public static final ItemStack SOULBOUND_PICKAXE = new CustomItem(Material.DIAMOND_PICKAXE, "&cSoulbound Pickaxe");
+ public static final ItemStack SOULBOUND_AXE = new CustomItem(Material.DIAMOND_AXE, "&cSoulbound Axe");
+ public static final ItemStack SOULBOUND_SHOVEL = new CustomItem(Material.DIAMOND_SHOVEL, "&cSoulbound Shovel");
+ public static final ItemStack SOULBOUND_HOE = new CustomItem(Material.DIAMOND_HOE, "&cSoulbound Hoe");
- public static ItemStack SOULBOUND_HELMET = new CustomItem(Material.DIAMOND_HELMET, "&cSoulbound Helmet");
- public static ItemStack SOULBOUND_CHESTPLATE = new CustomItem(Material.DIAMOND_CHESTPLATE, "&cSoulbound Chestplate");
- public static ItemStack SOULBOUND_LEGGINGS = new CustomItem(Material.DIAMOND_LEGGINGS, "&cSoulbound Leggings");
- public static ItemStack SOULBOUND_BOOTS = new CustomItem(Material.DIAMOND_BOOTS, "&cSoulbound Boots");
+ public static final ItemStack SOULBOUND_HELMET = new CustomItem(Material.DIAMOND_HELMET, "&cSoulbound Helmet");
+ public static final ItemStack SOULBOUND_CHESTPLATE = new CustomItem(Material.DIAMOND_CHESTPLATE, "&cSoulbound Chestplate");
+ public static final ItemStack SOULBOUND_LEGGINGS = new CustomItem(Material.DIAMOND_LEGGINGS, "&cSoulbound Leggings");
+ public static final ItemStack SOULBOUND_BOOTS = new CustomItem(Material.DIAMOND_BOOTS, "&cSoulbound Boots");
/* Runes */
- public static ItemStack BLANK_RUNE = null;
- public static ItemStack RUNE_AIR = null;
- public static ItemStack RUNE_WATER = null;
- public static ItemStack RUNE_FIRE = null;
- public static ItemStack RUNE_EARTH = null;
- public static ItemStack RUNE_ENDER = null;
- public static ItemStack RUNE_RAINBOW = null;
+ public static final ItemStack BLANK_RUNE;
+ public static final ItemStack RUNE_AIR;
+ public static final ItemStack RUNE_WATER;
+ public static final ItemStack RUNE_FIRE;
+ public static final ItemStack RUNE_EARTH;
+ public static final ItemStack RUNE_ENDER;
+ public static final ItemStack RUNE_RAINBOW;
+ public static final ItemStack RUNE_LIGHTNING;
static {
ItemStack itemB = new ItemStack(Material.FIREWORK_STAR);
@@ -471,327 +586,214 @@ public class SlimefunItems {
imR.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&d&lRainbow&8&l]"));
itemR.setItemMeta(imR);
RUNE_RAINBOW = itemR;
+
+ ItemStack itemL = new ItemStack(Material.FIREWORK_STAR);
+ FireworkEffectMeta imL = (FireworkEffectMeta) itemL.getItemMeta();
+ imL.setEffect(FireworkEffect.builder().with(Type.BURST).withColor(Color.YELLOW).build());
+ imL.setDisplayName(ChatColor.translateAlternateColorCodes('&', "&7Ancient Rune &8&l[&e&lLightning&8&l]"));
+ itemL.setItemMeta(imL);
+ RUNE_LIGHTNING = itemL;
}
/* Electricity */
- public static ItemStack SOLAR_GENERATOR = new CustomItem(Material.DAYLIGHT_DETECTOR, "&bSolar Generator", "", "&eBasic Generator", "&8\u21E8 &e\u26A1 &70 J Buffer", "&8\u21E8 &e\u26A1 &74 J/s");
- public static ItemStack SOLAR_GENERATOR_2 = new CustomItem(Material.DAYLIGHT_DETECTOR, "&cAdvanced Solar Generator", "", "&aMedium Generator", "&8\u21E8 &e\u26A1 &70 J Buffer", "&8\u21E8 &e\u26A1 &716 J/s");
- public static ItemStack SOLAR_GENERATOR_3 = new CustomItem(Material.DAYLIGHT_DETECTOR, "&4Carbonado Solar Generator", "", "&4End-Game Generator", "&8\u21E8 &e\u26A1 &70 J Buffer", "&8\u21E8 &e\u26A1 &764 J/s");
- public static ItemStack SOLAR_GENERATOR_4 = new CustomItem(Material.DAYLIGHT_DETECTOR, "&eEnergized Solar Generator", "", "&9Works at Night", "", "&4End-Game Generator", "&8\u21E8 &e\u26A1 &70 J Buffer", "&8\u21E8 &e\u26A1 &7256 J/s (Day)", "&8\u21E8 &e\u26A1 &7128 J/s (Night)");
+ public static final ItemStack SOLAR_GENERATOR = new CustomItem(Material.DAYLIGHT_DETECTOR, "&bSolar Generator", "", "&eBasic Generator", "&8\u21E8 &e\u26A1 &70 J Buffer", "&8\u21E8 &e\u26A1 &74 J/s");
+ public static final ItemStack SOLAR_GENERATOR_2 = new CustomItem(Material.DAYLIGHT_DETECTOR, "&cAdvanced Solar Generator", "", "&aMedium Generator", "&8\u21E8 &e\u26A1 &70 J Buffer", "&8\u21E8 &e\u26A1 &716 J/s");
+ public static final ItemStack SOLAR_GENERATOR_3 = new CustomItem(Material.DAYLIGHT_DETECTOR, "&4Carbonado Solar Generator", "", "&4End-Game Generator", "&8\u21E8 &e\u26A1 &70 J Buffer", "&8\u21E8 &e\u26A1 &764 J/s");
+ public static final ItemStack SOLAR_GENERATOR_4 = new CustomItem(Material.DAYLIGHT_DETECTOR, "&eEnergized Solar Generator", "", "&9Works at Night", "", "&4End-Game Generator", "&8\u21E8 &e\u26A1 &70 J Buffer", "&8\u21E8 &e\u26A1 &7256 J/s (Day)", "&8\u21E8 &e\u26A1 &7128 J/s (Night)");
- public static ItemStack COAL_GENERATOR = null;
- public static ItemStack LAVA_GENERATOR = null;
+ public static final ItemStack COAL_GENERATOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&cCoal Generator", "", "&6Average Generator", "&8\u21E8 &e\u26A1 &764 J Buffer", "&8\u21E8 &e\u26A1 &716 J/s");
+ public static final ItemStack COAL_GENERATOR_2 = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&cCoal Generator &7(&eII&7)", "", "&6Advanced Generator", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &730 J/s");
- public static ItemStack ELECTRIC_FURNACE = new CustomItem(Material.FURNACE, "&cElectric Furnace", "", "&eBasic Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &74 J/s");
- public static ItemStack ELECTRIC_FURNACE_2 = new CustomItem(Material.FURNACE, "&cElectric Furnace &7- &eII", "", "&aMedium Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &76 J/s");
- public static ItemStack ELECTRIC_FURNACE_3 = new CustomItem(Material.FURNACE, "&cElectric Furnace &7- &eIII", "", "&aMedium Machine", "&8\u21E8 &7Speed: 4x", "&8\u21E8 &e\u26A1 &710 J/s");
+ public static final ItemStack LAVA_GENERATOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&4Lava Generator", "", "&6Average Generator", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &720 J/s");
+ public static final ItemStack LAVA_GENERATOR_2 = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&4Lava Generator &7&eII&7)", "", "&6Advanced Generator", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &740 J/s");
- public static ItemStack ELECTRIC_ORE_GRINDER = new CustomItem(Material.FURNACE, "&cElectric Ore Grinder", "","&rWorks as an Ore Crusher and Grind Stone", "", "&6Advanced Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &712 J/s");
- public static ItemStack ELECTRIC_ORE_GRINDER_2 = new CustomItem(Material.FURNACE, "&cElectric Ore Grinder &7(&eII&7)", "","&rWorks as an Ore Crusher and Grind Stone", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 4x", "&8\u21E8 &e\u26A1 &730 J/s");
- public static ItemStack ELECTRIC_INGOT_PULVERIZER = new CustomItem(Material.FURNACE, "&cElectric Ingot Pulverizer", "", "&rPulverizes Ingots into Dust", "", "&aMedium Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &714 J/s");
- public static ItemStack AUTO_ENCHANTER = new CustomItem(Material.ENCHANTING_TABLE, "&5Auto Enchanter", "", "&aMedium Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &718 J/s");
- public static ItemStack AUTO_DISENCHANTER = new CustomItem(Material.ENCHANTING_TABLE, "&5Auto Disenchanter", "", "&aMedium Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &718 J/s");
- public static ItemStack AUTO_ANVIL = new CustomItem(Material.IRON_BLOCK, "&7Auto Anvil", "", "&6Advanced Machine", "&8\u21E8 &7Repair Factor: 10%", "&8\u21E8 &e\u26A1 &724 J/s");
- public static ItemStack AUTO_ANVIL_2 = new CustomItem(Material.IRON_BLOCK, "&7Auto Anvil Mk.II", "", "&4End-Game Machine", "&8\u21E8 &7Repair Factor: 25%", "&8\u21E8 &e\u26A1 &732 J/s");
+ public static final ItemStack ELECTRIC_FURNACE = new CustomItem(Material.FURNACE, "&cElectric Furnace", "", "&eBasic Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &74 J/s");
+ public static final ItemStack ELECTRIC_FURNACE_2 = new CustomItem(Material.FURNACE, "&cElectric Furnace &7- &eII", "", "&aMedium Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &76 J/s");
+ public static final ItemStack ELECTRIC_FURNACE_3 = new CustomItem(Material.FURNACE, "&cElectric Furnace &7- &eIII", "", "&aMedium Machine", "&8\u21E8 &7Speed: 4x", "&8\u21E8 &e\u26A1 &710 J/s");
- public static ItemStack BIO_REACTOR = new CustomItem(Material.LIME_TERRACOTTA, "&2Bio Reactor", "", "&6Average Generator", "&8\u21E8 &e\u26A1 &7128 J Buffer", "&8\u21E8 &e\u26A1 &78 J/s");
- public static ItemStack MULTIMETER = new CustomItem(Material.CLOCK, "&eMultimeter", "", "&rMeasures the Amount of stored", "&rEnergy in a Block");
- public static ItemStack SMALL_CAPACITOR = null, MEDIUM_CAPACITOR = null, BIG_CAPACITOR = null, LARGE_CAPACITOR = null, CARBONADO_EDGED_CAPACITOR = null;
+ public static final ItemStack ELECTRIC_ORE_GRINDER = new CustomItem(Material.FURNACE, "&cElectric Ore Grinder", "","&rWorks as an Ore Crusher and Grind Stone", "", "&6Advanced Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &712 J/s");
+ public static final ItemStack ELECTRIC_ORE_GRINDER_2 = new CustomItem(Material.FURNACE, "&cElectric Ore Grinder &7(&eII&7)", "","&rWorks as an Ore Crusher and Grind Stone", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 4x", "&8\u21E8 &e\u26A1 &730 J/s");
+ public static final ItemStack ELECTRIC_INGOT_PULVERIZER = new CustomItem(Material.FURNACE, "&cElectric Ingot Pulverizer", "", "&rPulverizes Ingots into Dust", "", "&aMedium Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &714 J/s");
+ public static final ItemStack AUTO_DRIER = new CustomItem(Material.SMOKER, "&eAuto Drier", "", "&aMedium Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &710 J/s");
+ public static final ItemStack AUTO_ENCHANTER = new CustomItem(Material.ENCHANTING_TABLE, "&5Auto Enchanter", "", "&aMedium Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &718 J/s");
+ public static final ItemStack AUTO_DISENCHANTER = new CustomItem(Material.ENCHANTING_TABLE, "&5Auto Disenchanter", "", "&aMedium Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &718 J/s");
+ public static final ItemStack AUTO_ANVIL = new CustomItem(Material.IRON_BLOCK, "&7Auto Anvil", "", "&6Advanced Machine", "&8\u21E8 &7Repair Factor: 10%", "&8\u21E8 &e\u26A1 &724 J/s");
+ public static final ItemStack AUTO_ANVIL_2 = new CustomItem(Material.IRON_BLOCK, "&7Auto Anvil Mk.II", "", "&4End-Game Machine", "&8\u21E8 &7Repair Factor: 25%", "&8\u21E8 &e\u26A1 &732 J/s");
+
+ public static final ItemStack BIO_REACTOR = new CustomItem(Material.LIME_TERRACOTTA, "&2Bio Reactor", "", "&6Average Generator", "&8\u21E8 &e\u26A1 &7128 J Buffer", "&8\u21E8 &e\u26A1 &78 J/s");
+ public static final ItemStack MULTIMETER = new CustomItem(Material.CLOCK, "&eMultimeter", "", "&rMeasures the Amount of stored", "&rEnergy in a Block");
+
+ public static final ItemStack SMALL_CAPACITOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTEzNjFlNTc2YjQ5M2NiZmRmYWUzMjg2NjFjZWRkMWFkZDU1ZmFiNGU1ZWI0MThiOTJjZWJmNjI3NWY4YmI0In19fQ=="), "&aSmall Energy Capacitor", "", "&eBasic Capacitor", "&8\u21E8 &e\u26A1 &7128 J Capacity");
+ public static final ItemStack MEDIUM_CAPACITOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTEzNjFlNTc2YjQ5M2NiZmRmYWUzMjg2NjFjZWRkMWFkZDU1ZmFiNGU1ZWI0MThiOTJjZWJmNjI3NWY4YmI0In19fQ=="), "&aMedium Energy Capacitor", "", "&6Average Capacitor", "&8\u21E8 &e\u26A1 &7512 J Capacity");
+ public static final ItemStack BIG_CAPACITOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTEzNjFlNTc2YjQ5M2NiZmRmYWUzMjg2NjFjZWRkMWFkZDU1ZmFiNGU1ZWI0MThiOTJjZWJmNjI3NWY4YmI0In19fQ=="), "&aBig Energy Capacitor", "", "&aMedium Capacitor", "&8\u21E8 &e\u26A1 &71024 J Capacity");
+ public static final ItemStack LARGE_CAPACITOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTEzNjFlNTc2YjQ5M2NiZmRmYWUzMjg2NjFjZWRkMWFkZDU1ZmFiNGU1ZWI0MThiOTJjZWJmNjI3NWY4YmI0In19fQ=="), "&aLarge Energy Capacitor", "", "&2Good Capacitor", "&8\u21E8 &e\u26A1 &78192 J Capacity");
+ public static final ItemStack CARBONADO_EDGED_CAPACITOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTEzNjFlNTc2YjQ5M2NiZmRmYWUzMjg2NjFjZWRkMWFkZDU1ZmFiNGU1ZWI0MThiOTJjZWJmNjI3NWY4YmI0In19fQ=="), "&aCarbonado Edged Energy Capacitor", "", "&4End-Game Capacitor", "&8\u21E8 &e\u26A1 &765536 J Capacity");
/* Robots */
- public static ItemStack PROGRAMMABLE_ANDROID = null;
- public static ItemStack PROGRAMMABLE_ANDROID_MINER = null;
- public static ItemStack PROGRAMMABLE_ANDROID_BUTCHER = null;
- public static ItemStack PROGRAMMABLE_ANDROID_FARMER = null;
- public static ItemStack PROGRAMMABLE_ANDROID_WOODCUTTER = null;
- public static ItemStack PROGRAMMABLE_ANDROID_FISHERMAN = null;
+ public static final ItemStack PROGRAMMABLE_ANDROID = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzUwM2NiN2VkODQ1ZTdhNTA3ZjU2OWFmYzY0N2M0N2FjNDgzNzcxNDY1YzlhNjc5YTU0NTk0Yzc2YWZiYSJ9fX0="), "&cProgrammable Android &7(Normal)", "", "&8\u21E8 &7Function: None", "&8\u21E8 &7Fuel Efficiency: 1.0x");
+ public static final ItemStack PROGRAMMABLE_ANDROID_FARMER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjlkMzMzNTdlODQxODgyM2JmNzgzZGU5MmRlODAyOTFiNGViZDM5MmFlYzg3MDY2OThlMDY4OTZkNDk4ZjYifX19"), "&cProgrammable Android &7(Farmer)", "", "&8\u21E8 &7Function: Farming", "&8\u21E8 &7Fuel Efficiency: 1.0x");
+ public static final ItemStack PROGRAMMABLE_ANDROID_MINER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTYzOGEyODU0MWFiM2FlMGE3MjNkNTU3ODczOGUwODc1ODM4OGVjNGMzMzI0N2JkNGNhMTM0ODJhZWYzMzQifX19"), "&cProgrammable Android &7(Miner)", "", "&8\u21E8 &7Function: Mining", "&8\u21E8 &7Fuel Efficiency: 1.0x");
+ public static final ItemStack PROGRAMMABLE_ANDROID_WOODCUTTER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDMyYTgxNDUxMDE0MjIwNTE2OWExYWQzMmYwYTc0NWYxOGU5Y2I2YzY2ZWU2NGVjYTJlNjViYWJkZWY5ZmYifX19"), "&cProgrammable Android &7(Woodcutter)", "", "&8\u21E8 &7Function: Woodcutting", "&8\u21E8 &7Fuel Efficiency: 1.0x");
+ public static final ItemStack PROGRAMMABLE_ANDROID_BUTCHER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2I0NzJkZjBhZDlhM2JlODhmMmU1ZDVkNDIyZDAyYjExNmQ2NGQ4ZGYxNDc1ZWQzMmU1NDZhZmM4NGIzMSJ9fX0="), "&cProgrammable Android &7(Butcher)", "", "&8\u21E8 &7Function: Slaughtering", "&8\u21E8 &7Damage: 4", "&8\u21E8 &7Fuel Efficiency: 1.0x");
+ public static final ItemStack PROGRAMMABLE_ANDROID_FISHERMAN = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzQ1ZTg3MzNhNzMxMTQzMzNiOThiMzYwMTc1MTI0MTcyMmY0NzEzZTFhMWE1ZDM2ZmJiMTMyNDkzZjFjNyJ9fX0="), "&cProgrammable Android &7(Fisherman)", "", "&8\u21E8 &7Function: Fishing", "&8\u21E8 &7Success Rate: 10%", "&8\u21E8 &7Fuel Efficiency: 1.0x");
+
+ public static final ItemStack PROGRAMMABLE_ANDROID_2 = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzUwM2NiN2VkODQ1ZTdhNTA3ZjU2OWFmYzY0N2M0N2FjNDgzNzcxNDY1YzlhNjc5YTU0NTk0Yzc2YWZiYSJ9fX0="), "&cAdvanced Programmable Android &7(Normal)", "", "&8\u21E8 &7Function: None", "&8\u21E8 &7Fuel Efficiency: 1.5x");
+ public static final ItemStack PROGRAMMABLE_ANDROID_2_FISHERMAN = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzQ1ZTg3MzNhNzMxMTQzMzNiOThiMzYwMTc1MTI0MTcyMmY0NzEzZTFhMWE1ZDM2ZmJiMTMyNDkzZjFjNyJ9fX0="), "&cAdvanced Programmable Android &7(Fisherman)", "", "&8\u21E8 &7Function: Fishing", "&8\u21E8 &7Success Rate: 20%", "&8\u21E8 &7Fuel Efficiency: 1.5x");
+ public static final ItemStack PROGRAMMABLE_ANDROID_2_FARMER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjlkMzMzNTdlODQxODgyM2JmNzgzZGU5MmRlODAyOTFiNGViZDM5MmFlYzg3MDY2OThlMDY4OTZkNDk4ZjYifX19"), "&cAdvanced Programmable Android &7(Farmer)", "", "&8\u21E8 &7Function: Farming", "&8\u21E8 &7Fuel Efficiency: 1.5x", "&8\u21E8 &7Can also harvest Plants from ExoticGarden");
+ public static final ItemStack PROGRAMMABLE_ANDROID_2_BUTCHER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2I0NzJkZjBhZDlhM2JlODhmMmU1ZDVkNDIyZDAyYjExNmQ2NGQ4ZGYxNDc1ZWQzMmU1NDZhZmM4NGIzMSJ9fX0="), "&cAdvanced Programmable Android &7(Butcher)", "", "&8\u21E8 &7Function: Slaughtering", "&8\u21E8 &7Damage: 8", "&8\u21E8 &7Fuel Efficiency: 1.5x");
- public static ItemStack PROGRAMMABLE_ANDROID_2 = null;
- public static ItemStack PROGRAMMABLE_ANDROID_2_FISHERMAN = null;
- public static ItemStack PROGRAMMABLE_ANDROID_2_FARMER = null;
- public static ItemStack PROGRAMMABLE_ANDROID_2_BUTCHER = null;
-
- public static ItemStack PROGRAMMABLE_ANDROID_3 = null;
- public static ItemStack PROGRAMMABLE_ANDROID_3_FISHERMAN = null;
- public static ItemStack PROGRAMMABLE_ANDROID_3_BUTCHER = null;
+ public static final ItemStack PROGRAMMABLE_ANDROID_3 = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzUwM2NiN2VkODQ1ZTdhNTA3ZjU2OWFmYzY0N2M0N2FjNDgzNzcxNDY1YzlhNjc5YTU0NTk0Yzc2YWZiYSJ9fX0="), "&eEmpowered Programmable Android &7(Normal)", "", "&8\u21E8 &7Function: None", "&8\u21E8 &7Fuel Efficiency: 3.0x");
+ public static final ItemStack PROGRAMMABLE_ANDROID_3_FISHERMAN = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzQ1ZTg3MzNhNzMxMTQzMzNiOThiMzYwMTc1MTI0MTcyMmY0NzEzZTFhMWE1ZDM2ZmJiMTMyNDkzZjFjNyJ9fX0="), "&eEmpowered Programmable Android &7(Fisherman)", "", "&8\u21E8 &7Function: Fishing", "&8\u21E8 &7Success Rate: 30%", "&8\u21E8 &7Fuel Efficiency: 8.0x");
+ public static final ItemStack PROGRAMMABLE_ANDROID_3_BUTCHER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2I0NzJkZjBhZDlhM2JlODhmMmU1ZDVkNDIyZDAyYjExNmQ2NGQ4ZGYxNDc1ZWQzMmU1NDZhZmM4NGIzMSJ9fX0="), "&eEmpowered Programmable Android &7(Butcher)", "", "&8\u21E8 &7Function: Slaughtering", "&8\u21E8 &7Damage: 20", "&8\u21E8 &7Fuel Efficiency: 8.0x");
/* GPS */
- public static ItemStack GPS_TRANSMITTER = null;
- public static ItemStack GPS_TRANSMITTER_2 = null;
- public static ItemStack GPS_TRANSMITTER_3 = null;
- public static ItemStack GPS_TRANSMITTER_4 = null;
+ public static final ItemStack GPS_TRANSMITTER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS Transmitter", "", "&8\u21E8 &e\u26A1 &716 J Buffer", "&8\u21E8 &e\u26A1 &72 J/s");
+ public static final ItemStack GPS_TRANSMITTER_2 = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&cAdvanced GPS Transmitter", "", "&8\u21E8 &e\u26A1 &764 J Buffer", "&8\u21E8 &e\u26A1 &76 J/s");
+ public static final ItemStack GPS_TRANSMITTER_3 = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&4Carbonado GPS Transmitter", "", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &722 J/s");
+ public static final ItemStack GPS_TRANSMITTER_4 = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&eEnergized GPS Transmitter", "", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &792 J/s");
- public static ItemStack GPS_CONTROL_PANEL = null;
- public static ItemStack GPS_MARKER_TOOL = new CustomItem(Material.REDSTONE_TORCH, "&bGPS Marker Tool", "", "&rAllows you to set a Waypoint at", "&rthe Location you place this");
- public static ItemStack GPS_EMERGENCY_TRANSMITTER = null;
- public static ItemStack GPS_GEO_SCANNER = null;
+ public static final ItemStack GPS_MARKER_TOOL = new CustomItem(Material.REDSTONE_TORCH, "&bGPS Marker Tool", "", "&rAllows you to set a Waypoint at", "&rthe Location you place this");
+ public static final ItemStack GPS_CONTROL_PANEL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&bGPS Control Panel", "", "&rAllows you to trach your Satellites", "&rand manage your Waypoints");
+ public static final ItemStack GPS_EMERGENCY_TRANSMITTER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&cGPS Emergency Transmitter", "", "&rCarrying this in your Inventory", "&rautomatically sets a Waypoint", "&rat your Location when you die.");
- public static ItemStack ANDROID_INTERFACE_FUEL = new CustomItem(Material.DISPENSER, "&7Android Interface &c(Fuel)", "", "&rItems stored in this Interface", "&rwill be inserted into an Android's Fuel Slot", "&rwhen its Script tells them to do so");
- public static ItemStack ANDROID_INTERFACE_ITEMS = new CustomItem(Material.DISPENSER, "&7Android Interface &9(Items)", "", "&rItems stored in an Android's Inventory", "&rwill be inserted into this Interface", "&rwhen its Script tells them to do so");
+ public static final ItemStack ANDROID_INTERFACE_FUEL = new CustomItem(Material.DISPENSER, "&7Android Interface &c(Fuel)", "", "&rItems stored in this Interface", "&rwill be inserted into an Android's Fuel Slot", "&rwhen its Script tells them to do so");
+ public static final ItemStack ANDROID_INTERFACE_ITEMS = new CustomItem(Material.DISPENSER, "&7Android Interface &9(Items)", "", "&rItems stored in an Android's Inventory", "&rwill be inserted into this Interface", "&rwhen its Script tells them to do so");
+
+ public static final ItemStack GPS_GEO_SCANNER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmFkOGNmZWIzODdhNTZlM2U1YmNmODUzNDVkNmE0MTdiMjQyMjkzODg3ZGIzY2UzYmE5MWZhNDA5YjI1NGI4NiJ9fX0="), "&bGPS Geo-Scanner", "", "&rScans a Chunk for natural Resources", "&rsuch as &8Oil");
+ public static final ItemStack OIL_PUMP = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWZlMWEwNDBhNDI1ZTMxYTQ2ZDRmOWE5Yjk4MDZmYTJmMGM0N2VlODQ3MTFjYzE5MzJmZDhhYjMyYjJkMDM4In19fQ=="), "&rOil Pump", "", "&7Pumps up Oil and fills it into Buckets", "", "&c&l! &cMake sure to Geo-Scan the Chunk first");
+ public static final ItemStack BUCKET_OF_OIL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmNlMDRiNDFkMTllYzc5MjdmOTgyYTYzYTk0YTNkNzlmNzhlY2VjMzMzNjMwNTFmZGUwODMxYmZhYmRiZCJ9fX0="), "&rBucket of Oil");
+ public static final ItemStack BUCKET_OF_FUEL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTg0ZGRjYTc2NjcyNWI4Yjk3NDEzZjI1OWMzZjc2NjgwNzBmNmFlNTU0ODNhOTBjOGU1NTI1Mzk0ZjljMDk5In19fQ=="), "&rBucket of Fuel");
- public static ItemStack BUCKET_OF_OIL = null;
- public static ItemStack BUCKET_OF_FUEL = null;
- public static ItemStack OIL_PUMP = null;
-
- public static ItemStack REFINERY = new CustomItem(Material.PISTON, "&cRefinery", "", "&rRefines Oil to create Fuel");
- public static ItemStack COMBUSTION_REACTOR = null;
- public static ItemStack ANDROID_MEMORY_CORE = null;
+ public static final ItemStack REFINERY = new CustomItem(Material.PISTON, "&cRefinery", "", "&rRefines Oil to create Fuel");
+ public static final ItemStack COMBUSTION_REACTOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&cCombustion Reactor", "", "&6Advanced Generator", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &724 J/s");
+ public static final ItemStack ANDROID_MEMORY_CORE = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDc4ZjJiN2U1ZTc1NjM5ZWE3ZmI3OTZjMzVkMzY0YzRkZjI4YjQyNDNlNjZiNzYyNzdhYWRjZDYyNjEzMzcifX19"), "&bAndroid Memory Core");
- public static ItemStack GPS_TELEPORTER_PYLON = new CustomItem(Material.PURPLE_STAINED_GLASS, "&5GPS Teleporter Pylon", "", "&7Teleporter Component");
- public static ItemStack GPS_TELEPORTATION_MATRIX = new CustomItem(Material.IRON_BLOCK, "&bGPS Teleporter Matrix", "", "&rThis is your Teleporter's Main Component", "&rThis Matrix allows Players to choose from all", "&rWaypoints made by the Player who has placed", "&rthis Device.");
- public static ItemStack GPS_ACTIVATION_DEVICE_SHARED = new CustomItem(Material.STONE_PRESSURE_PLATE, "&rGPS Activation Device &3(Shared)", "", "&rPlace this onto a Teleportation Matrix", "&rand step onto this Plate to activate", "&rthe Teleportation Process");
- public static ItemStack GPS_ACTIVATION_DEVICE_PERSONAL = new CustomItem(Material.STONE_PRESSURE_PLATE, "&rGPS Activation Device &a(Personal)", "", "&rPlace this onto a Teleportation Matrix", "&rand step onto this Plate to activate", "&rthe Teleportation Process", "", "&rThis Version only allows the Person who", "&rplaced this Device to use it");
+ public static final ItemStack GPS_TELEPORTER_PYLON = new CustomItem(Material.PURPLE_STAINED_GLASS, "&5GPS Teleporter Pylon", "", "&7Teleporter Component");
+ public static final ItemStack GPS_TELEPORTATION_MATRIX = new CustomItem(Material.IRON_BLOCK, "&bGPS Teleporter Matrix", "", "&rThis is your Teleporter's Main Component", "&rThis Matrix allows Players to choose from all", "&rWaypoints made by the Player who has placed", "&rthis Device.");
+ public static final ItemStack GPS_ACTIVATION_DEVICE_SHARED = new CustomItem(Material.STONE_PRESSURE_PLATE, "&rGPS Activation Device &3(Shared)", "", "&rPlace this onto a Teleportation Matrix", "&rand step onto this Plate to activate", "&rthe Teleportation Process");
+ public static final ItemStack GPS_ACTIVATION_DEVICE_PERSONAL = new CustomItem(Material.STONE_PRESSURE_PLATE, "&rGPS Activation Device &a(Personal)", "", "&rPlace this onto a Teleportation Matrix", "&rand step onto this Plate to activate", "&rthe Teleportation Process", "", "&rThis Version only allows the Person who", "&rplaced this Device to use it");
- public static ItemStack ELEVATOR = new CustomItem(Material.STONE_PRESSURE_PLATE, "&bElevator Plate", "", "&rPlace an Elevator Plate on every floor", "&rand you will be able to teleport between them.", "", "&eRight Click this Block &7to name it");
+ public static final ItemStack ELEVATOR = new CustomItem(Material.STONE_PRESSURE_PLATE, "&bElevator Plate", "", "&rPlace an Elevator Plate on every floor", "&rand you will be able to teleport between them.", "", "&eRight Click this Block &7to name it");
- public static ItemStack INFUSED_HOPPER = new CustomItem(Material.HOPPER, "&5Infused Hopper", "", "&rAutomatically picks up nearby Items in a 7x7x7", "&rRadius when placed.");
+ public static final ItemStack INFUSED_HOPPER = new CustomItem(Material.HOPPER, "&5Infused Hopper", "", "&rAutomatically picks up nearby Items in a 7x7x7", "&rRadius when placed.");
- public static ItemStack PLASTIC_SHEET = new CustomItem(Material.PAPER, "&rPlastic Sheet");
- public static ItemStack HEATED_PRESSURE_CHAMBER = new CustomItem(Material.LIGHT_GRAY_STAINED_GLASS, "&cHeated Pressure Chamber", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &710 J/s");
- public static ItemStack HEATED_PRESSURE_CHAMBER_2 = new CustomItem(Material.LIGHT_GRAY_STAINED_GLASS, "&cHeated Pressure Chamber &7- &eII", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 5x", "&8\u21E8 &e\u26A1 &744 J/s");
+ public static final ItemStack PLASTIC_SHEET = new CustomItem(Material.PAPER, "&rPlastic Sheet");
+ public static final ItemStack HEATED_PRESSURE_CHAMBER = new CustomItem(Material.LIGHT_GRAY_STAINED_GLASS, "&cHeated Pressure Chamber", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &710 J/s");
+ public static final ItemStack HEATED_PRESSURE_CHAMBER_2 = new CustomItem(Material.LIGHT_GRAY_STAINED_GLASS, "&cHeated Pressure Chamber &7- &eII", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 5x", "&8\u21E8 &e\u26A1 &744 J/s");
- public static ItemStack ELECTRIC_SMELTERY = new CustomItem(Material.FURNACE, "&cElectric Smeltery", "", "&4Alloys-Only, doesn't smelt Dust into Ingots", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &720 J/s");
- public static ItemStack ELECTRIC_SMELTERY_2 = new CustomItem(Material.FURNACE, "&cElectric Smeltery &7- &eII", "", "&4Alloys-Only, doesn't smelt Dust into Ingots", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 3x", "&8\u21E8 &e\u26A1 &740 J/s");
+ public static final ItemStack ELECTRIC_SMELTERY = new CustomItem(Material.FURNACE, "&cElectric Smeltery", "", "&4Alloys-Only, doesn't smelt Dust into Ingots", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &720 J/s");
+ public static final ItemStack ELECTRIC_SMELTERY_2 = new CustomItem(Material.FURNACE, "&cElectric Smeltery &7- &eII", "", "&4Alloys-Only, doesn't smelt Dust into Ingots", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 3x", "&8\u21E8 &e\u26A1 &740 J/s");
- public static ItemStack ELECTRIFIED_CRUCIBLE = new CustomItem(Material.RED_TERRACOTTA, "&cElectrified Crucible", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &748 J/s");
- public static ItemStack ELECTRIFIED_CRUCIBLE_2 = new CustomItem(Material.RED_TERRACOTTA, "&cElectrified Crucible &7- &eII", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &780 J/s");
- public static ItemStack ELECTRIFIED_CRUCIBLE_3 = new CustomItem(Material.RED_TERRACOTTA, "&cElectrified Crucible &7- &eIII", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 4x", "&8\u21E8 &e\u26A1 &7120 J/s");
+ public static final ItemStack ELECTRIFIED_CRUCIBLE = new CustomItem(Material.RED_TERRACOTTA, "&cElectrified Crucible", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &748 J/s");
+ public static final ItemStack ELECTRIFIED_CRUCIBLE_2 = new CustomItem(Material.RED_TERRACOTTA, "&cElectrified Crucible &7- &eII", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &780 J/s");
+ public static final ItemStack ELECTRIFIED_CRUCIBLE_3 = new CustomItem(Material.RED_TERRACOTTA, "&cElectrified Crucible &7- &eIII", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 4x", "&8\u21E8 &e\u26A1 &7120 J/s");
- public static ItemStack CARBON_PRESS = new CustomItem(Material.BLACK_STAINED_GLASS, "&cCarbon Press", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &720 J/s");
- public static ItemStack CARBON_PRESS_2 = new CustomItem(Material.BLACK_STAINED_GLASS, "&cCarbon Press &7- &eII", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 3x", "&8\u21E8 &e\u26A1 &750 J/s");
- public static ItemStack CARBON_PRESS_3 = new CustomItem(Material.BLACK_STAINED_GLASS, "&cCarbon Press &7- &eIII", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 15x", "&8\u21E8 &e\u26A1 &7180 J/s");
+ public static final ItemStack CARBON_PRESS = new CustomItem(Material.BLACK_STAINED_GLASS, "&cCarbon Press", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &720 J/s");
+ public static final ItemStack CARBON_PRESS_2 = new CustomItem(Material.BLACK_STAINED_GLASS, "&cCarbon Press &7- &eII", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 3x", "&8\u21E8 &e\u26A1 &750 J/s");
+ public static final ItemStack CARBON_PRESS_3 = new CustomItem(Material.BLACK_STAINED_GLASS, "&cCarbon Press &7- &eIII", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 15x", "&8\u21E8 &e\u26A1 &7180 J/s");
- public static ItemStack BLISTERING_INGOT = new CustomItem(Material.GOLD_INGOT, "&6Blistering Ingot &7(33%)", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
- public static ItemStack BLISTERING_INGOT_2 = new CustomItem(Material.GOLD_INGOT, "&6Blistering Ingot &7(66%)", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
- public static ItemStack BLISTERING_INGOT_3 = new CustomItem(Material.GOLD_INGOT, "&6Blistering Ingot", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
+ public static final ItemStack BLISTERING_INGOT = new CustomItem(Material.GOLD_INGOT, "&6Blistering Ingot &7(33%)", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
+ public static final ItemStack BLISTERING_INGOT_2 = new CustomItem(Material.GOLD_INGOT, "&6Blistering Ingot &7(66%)", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
+ public static final ItemStack BLISTERING_INGOT_3 = new CustomItem(Material.GOLD_INGOT, "&6Blistering Ingot", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
- public static ItemStack ENERGY_REGULATOR = null;
- public static ItemStack DEBUG_FISH = new CustomItem(Material.PUFFERFISH, "&3How much is the Fish?", "", "&eRight Click &rany Block to view it's BlockData", "&eLeft Click &rto break a Block", "&eShift + Left Click &rany Block to erase it's BlockData", "&eShift + Right Click &rto place a Placeholder Block");
-
-
- public static ItemStack NETHER_ICE = null;
- public static ItemStack ENRICHED_NETHER_ICE = null;
- public static ItemStack NETHER_ICE_COOLANT_CELL = null;
- public static ItemStack NETHER_DRILL = new CustomItem(Material.RED_TERRACOTTA, "&4Nether Drill", "", "&rAllows you to mine Nether Ice", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7102 J/s", "", "&c&l! &cCan only be used in the Nether!", "&c&l! &cMake sure to Geo-Scan the Chunk first");
+ public static final ItemStack ENERGY_REGULATOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDc4ZjJiN2U1ZTc1NjM5ZWE3ZmI3OTZjMzVkMzY0YzRkZjI4YjQyNDNlNjZiNzYyNzdhYWRjZDYyNjEzMzcifX19"), "&6Energy Regulator", "", "&rCore Component of an Energy Network");
+ public static final ItemStack DEBUG_FISH = new CustomItem(Material.PUFFERFISH, "&3How much is the Fish?", "", "&eRight Click &rany Block to view it's BlockData", "&eLeft Click &rto break a Block", "&eShift + Left Click &rany Block to erase it's BlockData", "&eShift + Right Click &rto place a Placeholder Block");
+
+ public static final ItemStack NETHER_ICE = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2NlMmRhZDliYWY3ZWFiYTdlODBkNGQwZjlmYWMwYWFiMDFhNzZiMTJmYjcxYzNkMmFmMmExNmZkZDRjNzM4MyJ9fX0="), "&eNether Ice", "", "&eRadiation Level: MODERATE", "&4&oHazmat Suit required");
+ public static final ItemStack ENRICHED_NETHER_ICE = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2M4MThhYTEzYWFiYzcyOTQ4MzhkMjFjYWFjMDU3ZTk3YmQ4Yzg5NjQxYTBjMGY4YTU1NDQyZmY0ZTI3In19fQ=="), "&eEnriched Nether Ice", "", "&2Radiation Level: EXTREMELY HIGH", "&4&oHazmat Suit required");
+ public static final ItemStack NETHER_ICE_COOLANT_CELL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGQzY2Q0MTI1NTVmODk3MDE2MjEzZTVkNmM3NDMxYjQ0OGI5ZTU2NDRlMWIxOWVjNTFiNTMxNmYzNTg0MGUwIn19fQ=="), "&6Nether Ice Coolant Cell");
+ public static final ItemStack NETHER_DRILL = new CustomItem(Material.RED_TERRACOTTA, "&4Nether Drill", "", "&rAllows you to mine Nether Ice", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7102 J/s", "", "&c&l! &cCan only be used in the Nether!", "&c&l! &cMake sure to Geo-Scan the Chunk first");
// Cargo
- public static ItemStack CARGO_MANAGER = null;
- public static ItemStack CARGO_NODE = null;
- public static ItemStack CARGO_INPUT = null;
- public static ItemStack CARGO_OUTPUT = null;
- public static ItemStack CARGO_OUTPUT_ADVANCED = null;
+ public static final ItemStack CARGO_MANAGER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0="), "&6Cargo Manager", "", "&rCore Component of an Item Transport Network");
+ public static final ItemStack CARGO_NODE = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMDdiN2VmNmZkNzg2NDg2NWMzMWMxZGM4N2JlZDI0YWI1OTczNTc5ZjVjNjYzOGZlY2I4ZGVkZWI0NDNmZjAifX19"), "&7Cargo Node &c(Connector)", "", "&rCargo Connector Pipe");
+ public static final ItemStack CARGO_INPUT = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTZkMWMxYTY5YTNkZTlmZWM5NjJhNzdiZjNiMmUzNzZkZDI1Yzg3M2EzZDhmMTRmMWRkMzQ1ZGFlNGM0In19fQ=="), "&7Cargo Node &c(Input)", "", "&rCargo Input Pipe");
+ public static final ItemStack CARGO_OUTPUT = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTViMjFmZDQ4MGMxYzQzYmYzYjlmODQyYzg2OWJkYzNiYzVhY2MyNTk5YmYyZWI2YjhhMWM5NWRjZTk3OGYifX19"), "&7Cargo Node &c(Output)", "", "&rCargo Output Pipe");
+ public static final ItemStack CARGO_OUTPUT_ADVANCED = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTViMjFmZDQ4MGMxYzQzYmYzYjlmODQyYzg2OWJkYzNiYzVhY2MyNTk5YmYyZWI2YjhhMWM5NWRjZTk3OGYifX19"), "&6Advanced Cargo Node &c(Output)", "", "&rCargo Output Pipe");
- public static ItemStack AUTO_BREEDER = new CustomItem(Material.HAY_BLOCK, "&eAuto-Breeder", "", "&rRuns on &aOrganic Food", "", "&4End-Game Machine", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &760 J/Animal");;
+ public static final ItemStack AUTO_BREEDER = new CustomItem(Material.HAY_BLOCK, "&eAuto-Breeder", "", "&rRuns on &aOrganic Food", "", "&4End-Game Machine", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &760 J/Animal");
- public static ItemStack ORGANIC_FOOD = null;
- public static ItemStack WHEAT_ORGANIC_FOOD = null;
- public static ItemStack CARROT_ORGANIC_FOOD = null;
- public static ItemStack POTATO_ORGANIC_FOOD = null;
- public static ItemStack SEEDS_ORGANIC_FOOD = null;
- public static ItemStack BEETROOT_ORGANIC_FOOD = null;
- public static ItemStack MELON_ORGANIC_FOOD = null;
- public static ItemStack APPLE_ORGANIC_FOOD = null;
+ public static final ItemStack ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9X");
+ public static final ItemStack WHEAT_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Wheat");
+ public static final ItemStack CARROT_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Carrots");
+ public static final ItemStack POTATO_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Potatoes");
+ public static final ItemStack SEEDS_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Seeds");
+ public static final ItemStack BEETROOT_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Beetroot");
+ public static final ItemStack MELON_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Melon");
+ public static final ItemStack APPLE_ORGANIC_FOOD = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Apple");
- public static ItemStack FERTILIZER = null;
- public static ItemStack WHEAT_FERTILIZER = null;
- public static ItemStack CARROT_FERTILIZER = null;
- public static ItemStack POTATO_FERTILIZER = null;
- public static ItemStack SEEDS_FERTILIZER = null;
- public static ItemStack BEETROOT_FERTILIZER = null;
- public static ItemStack MELON_FERTILIZER = null;
- public static ItemStack APPLE_FERTILIZER = null;
+ public static final ItemStack FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9X");
+ public static final ItemStack WHEAT_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Wheat");
+ public static final ItemStack CARROT_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Carrots");
+ public static final ItemStack POTATO_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Potatoes");
+ public static final ItemStack SEEDS_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Seeds");
+ public static final ItemStack BEETROOT_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Beetroot");
+ public static final ItemStack MELON_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Melon");
+ public static final ItemStack APPLE_FERTILIZER = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Apple");
- public static ItemStack ANIMAL_GROWTH_ACCELERATOR = new CustomItem(Material.HAY_BLOCK, "&bAnimal Growth Accelerator", "", "&rRuns on &aOrganic Food", "", "&4End-Game Machine", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &728 J/s");;
- public static ItemStack CROP_GROWTH_ACCELERATOR = new CustomItem(Material.LIME_TERRACOTTA, "&aCrop Growth Accelerator", "", "&rRuns on &aOrganic Fertilizer", "", "&4End-Game Machine", "&8\u21E8 &7Radius: 7x7", "&8\u21E8 &7Speed: &a3/time", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &750 J/s");
- public static ItemStack CROP_GROWTH_ACCELERATOR_2 = new CustomItem(Material.LIME_TERRACOTTA, "&aCrop Growth Accelerator &7(&eII&7)", "", "&rRuns on &aOrganic Fertilizer", "", "&4End-Game Machine", "&8\u21E8 &7Radius: 9x9", "&8\u21E8 &7Speed: &a4/time", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &760 J/s");
+ public static final ItemStack ANIMAL_GROWTH_ACCELERATOR = new CustomItem(Material.HAY_BLOCK, "&bAnimal Growth Accelerator", "", "&rRuns on &aOrganic Food", "", "&4End-Game Machine", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &728 J/s");
+ public static final ItemStack CROP_GROWTH_ACCELERATOR = new CustomItem(Material.LIME_TERRACOTTA, "&aCrop Growth Accelerator", "", "&rRuns on &aOrganic Fertilizer", "", "&4End-Game Machine", "&8\u21E8 &7Radius: 7x7", "&8\u21E8 &7Speed: &a3/time", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &750 J/s");
+ public static final ItemStack CROP_GROWTH_ACCELERATOR_2 = new CustomItem(Material.LIME_TERRACOTTA, "&aCrop Growth Accelerator &7(&eII&7)", "", "&rRuns on &aOrganic Fertilizer", "", "&4End-Game Machine", "&8\u21E8 &7Radius: 9x9", "&8\u21E8 &7Speed: &a4/time", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &760 J/s");
- public static ItemStack FOOD_FABRICATOR = new CustomItem(Material.GREEN_STAINED_GLASS, "&cFood Fabricator", "", "&rProduces &aOrganic Food", "", "&6Advanced Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &714 J/s");
- public static ItemStack FOOD_FABRICATOR_2 = new CustomItem(Material.GREEN_STAINED_GLASS, "&cFood Fabricator &7(&eII&7)", "", "&rProduces &aOrganic Food", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 6x", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &748 J/s");
+ public static final ItemStack FOOD_FABRICATOR = new CustomItem(Material.GREEN_STAINED_GLASS, "&cFood Fabricator", "", "&rProduces &aOrganic Food", "", "&6Advanced Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &714 J/s");
+ public static final ItemStack FOOD_FABRICATOR_2 = new CustomItem(Material.GREEN_STAINED_GLASS, "&cFood Fabricator &7(&eII&7)", "", "&rProduces &aOrganic Food", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 6x", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &748 J/s");
- public static ItemStack FOOD_COMPOSTER = new CustomItem(Material.GREEN_TERRACOTTA, "&cFood Composter", "", "&rProduces &aOrganic Fertilizer", "", "&6Advanced Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &716 J/s");
- public static ItemStack FOOD_COMPOSTER_2 = new CustomItem(Material.GREEN_TERRACOTTA, "&cFood Composter &7(&eII&7)", "", "&rProduces &aOrganic Fertilizer", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &752 J/s");
+ public static final ItemStack FOOD_COMPOSTER = new CustomItem(Material.GREEN_TERRACOTTA, "&cFood Composter", "", "&rProduces &aOrganic Fertilizer", "", "&6Advanced Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &716 J/s");
+ public static final ItemStack FOOD_COMPOSTER_2 = new CustomItem(Material.GREEN_TERRACOTTA, "&cFood Composter &7(&eII&7)", "", "&rProduces &aOrganic Fertilizer", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &752 J/s");
- public static ItemStack XP_COLLECTOR = null;
- public static ItemStack REACTOR_COOLANT_CELL = null;
+ public static final ItemStack XP_COLLECTOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTc2MmExNWIwNDY5MmEyZTRiM2ZiMzY2M2JkNGI3ODQzNGRjZTE3MzJiOGViMWM3YTlmN2MwZmJmNmYifX19"), "&aEXP Collector", "", "&rCollects nearby Exp and stores it", "", "&4End-Game Machine", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &720 J/s");
+ public static final ItemStack REACTOR_COOLANT_CELL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGU0MDczYmU0MGNiM2RlYjMxMGEwYmU5NTliNGNhYzY4ZTgyNTM3MjcyOGZhZmI2YzI5NzNlNGU3YzMzIn19fQ=="), "&bReactor Coolant Cell");
- public static ItemStack NUCLEAR_REACTOR = null;
- public static ItemStack NETHERSTAR_REACTOR = null;
- public static ItemStack REACTOR_ACCESS_PORT = new CustomItem(Material.CYAN_TERRACOTTA, "&2Reactor Access Port", "", "&rAllows you to interact with a Reactor", "&rvia Cargo Nodes, can also be used", "&ras a Buffer", "", "&8\u21E8 &eMust be placed &a3 Blocks &eabove the Reactor");
+ public static final ItemStack NUCLEAR_REACTOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&2Nuclear Reactor", "", "&rRequires Cooling!", "&8\u21E8 &bMust be surrounded by Water", "&8\u21E8 &bMust be supplied with Reactor Coolant Cells", "", "&4End-Game Generator", "&8\u21E8 &e\u26A1 &716384 J Buffer", "&8\u21E8 &e\u26A1 &7500 J/s");
+ public static final ItemStack NETHERSTAR_REACTOR = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&fNether Star Reactor", "", "&fRuns on Nether Stars", "&8\u21E8 &bMust be surrounded by Water", "&8\u21E8 &bMust be supplied with Nether Ice Coolant Cells", "", "&4End-Game Generator", "&8\u21E8 &e\u26A1 &732768 J Buffer", "&8\u21E8 &e\u26A1 &71024 J/s", "&8\u21E8 &4Causes nearby Entities to get Withered");
+ public static final ItemStack REACTOR_ACCESS_PORT = new CustomItem(Material.CYAN_TERRACOTTA, "&2Reactor Access Port", "", "&rAllows you to interact with a Reactor", "&rvia Cargo Nodes, can also be used", "&ras a Buffer", "", "&8\u21E8 &eMust be placed &a3 Blocks &eabove the Reactor");
- public static ItemStack FREEZER = new CustomItem(Material.LIGHT_BLUE_STAINED_GLASS, "&bFreezer", "", "&6Advanced Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &718 J/s");;
- public static ItemStack FREEZER_2 = new CustomItem(Material.LIGHT_BLUE_STAINED_GLASS, "&bFreezer &7(&eII&7)", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &730 J/s");;
+ public static final ItemStack FREEZER = new CustomItem(Material.LIGHT_BLUE_STAINED_GLASS, "&bFreezer", "", "&6Advanced Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &718 J/s");
+ public static final ItemStack FREEZER_2 = new CustomItem(Material.LIGHT_BLUE_STAINED_GLASS, "&bFreezer &7(&eII&7)", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &730 J/s");
- public static ItemStack ELECTRIC_GOLD_PAN = new CustomItem(Material.BROWN_TERRACOTTA, "&6Electric Gold Pan", "", "&eBasic Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &72 J/s");
- public static ItemStack ELECTRIC_GOLD_PAN_2 = new CustomItem(Material.BROWN_TERRACOTTA, "&6Electric Gold Pan &7(&eII&7)", "", "&eBasic Machine", "&8\u21E8 &7Speed: 3x", "&8\u21E8 &e\u26A1 &74 J/s");
- public static ItemStack ELECTRIC_GOLD_PAN_3 = new CustomItem(Material.BROWN_TERRACOTTA, "&6Electric Gold Pan &7(&eIII&7)", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &714 J/s");
+ public static final ItemStack ELECTRIC_GOLD_PAN = new CustomItem(Material.BROWN_TERRACOTTA, "&6Electric Gold Pan", "", "&eBasic Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &72 J/s");
+ public static final ItemStack ELECTRIC_GOLD_PAN_2 = new CustomItem(Material.BROWN_TERRACOTTA, "&6Electric Gold Pan &7(&eII&7)", "", "&eBasic Machine", "&8\u21E8 &7Speed: 3x", "&8\u21E8 &e\u26A1 &74 J/s");
+ public static final ItemStack ELECTRIC_GOLD_PAN_3 = new CustomItem(Material.BROWN_TERRACOTTA, "&6Electric Gold Pan &7(&eIII&7)", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &714 J/s");
- public static ItemStack ELECTRIC_DUST_WASHER = new CustomItem(Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer", "", "&eBasic Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &76 J/s");
- public static ItemStack ELECTRIC_DUST_WASHER_2 = new CustomItem(Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer &7(&eII&7)", "", "&eBasic Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &710 J/s");
- public static ItemStack ELECTRIC_DUST_WASHER_3 = new CustomItem(Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer &7(&eIII&7)", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &730 J/s");
+ public static final ItemStack ELECTRIC_DUST_WASHER = new CustomItem(Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer", "", "&eBasic Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &76 J/s");
+ public static final ItemStack ELECTRIC_DUST_WASHER_2 = new CustomItem(Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer &7(&eII&7)", "", "&eBasic Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &710 J/s");
+ public static final ItemStack ELECTRIC_DUST_WASHER_3 = new CustomItem(Material.BLUE_STAINED_GLASS, "&3Electric Dust Washer &7(&eIII&7)", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 10x", "&8\u21E8 &e\u26A1 &730 J/s");
- public static ItemStack ELECTRIC_INGOT_FACTORY = new CustomItem(Material.RED_TERRACOTTA, "&cElectric Ingot Factory", "", "&eBasic Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &78 J/s");
- public static ItemStack ELECTRIC_INGOT_FACTORY_2 = new CustomItem(Material.RED_TERRACOTTA, "&cElectric Ingot Factory &7(&eII&7)", "", "&eBasic Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &714 J/s");
- public static ItemStack ELECTRIC_INGOT_FACTORY_3 = new CustomItem(Material.RED_TERRACOTTA, "&cElectric Ingot Factory &7(&eIII&7)", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 8x", "&8\u21E8 &e\u26A1 &740 J/s");
+ public static final ItemStack ELECTRIC_INGOT_FACTORY = new CustomItem(Material.RED_TERRACOTTA, "&cElectric Ingot Factory", "", "&eBasic Machine", "&8\u21E8 &7Speed: 1x", "&8\u21E8 &e\u26A1 &78 J/s");
+ public static final ItemStack ELECTRIC_INGOT_FACTORY_2 = new CustomItem(Material.RED_TERRACOTTA, "&cElectric Ingot Factory &7(&eII&7)", "", "&eBasic Machine", "&8\u21E8 &7Speed: 2x", "&8\u21E8 &e\u26A1 &714 J/s");
+ public static final ItemStack ELECTRIC_INGOT_FACTORY_3 = new CustomItem(Material.RED_TERRACOTTA, "&cElectric Ingot Factory &7(&eIII&7)", "", "&4End-Game Machine", "&8\u21E8 &7Speed: 8x", "&8\u21E8 &e\u26A1 &740 J/s");
- public static ItemStack AUTOMATED_CRAFTING_CHAMBER = new CustomItem(Material.CRAFTING_TABLE, "&6Automated Crafting Chamber", "", "&6Advanced Machine", "&8\u21E8 &e\u26A1 &710 J/Item");
- public static ItemStack FLUID_PUMP = new CustomItem(Material.BLUE_TERRACOTTA, "&9Fluid Pump", "", "&6Advanced Machine", "&8\u21E8 &e\u26A1 &732 J/Block");
- public static ItemStack CHARGING_BENCH = new CustomItem(Material.CRAFTING_TABLE, "&6Charging Bench", "", "&rCharges Items such as Jetpacks", "", "&eBasic Machine", "&8\u21E8 &e\u26A1 &7128 J Buffer", "&8\u21E8 &e\u26A1 &7Energy Loss: &c50%");
+ public static final ItemStack AUTOMATED_CRAFTING_CHAMBER = new CustomItem(Material.CRAFTING_TABLE, "&6Automated Crafting Chamber", "", "&6Advanced Machine", "&8\u21E8 &e\u26A1 &710 J/Item");
+ public static final ItemStack FLUID_PUMP = new CustomItem(Material.BLUE_TERRACOTTA, "&9Fluid Pump", "", "&6Advanced Machine", "&8\u21E8 &e\u26A1 &732 J/Block");
+ public static final ItemStack CHARGING_BENCH = new CustomItem(Material.CRAFTING_TABLE, "&6Charging Bench", "", "&rCharges Items such as Jetpacks", "", "&eBasic Machine", "&8\u21E8 &e\u26A1 &7128 J Buffer", "&8\u21E8 &e\u26A1 &7Energy Loss: &c50%");
- public static ItemStack WITHER_ASSEMBLER = new CustomItem(Material.OBSIDIAN, "&5Wither Assembler", "", "&4End-Game Machine", "&8\u21E8 &7Cooldown: &b30 Seconds", "&8\u21E8 &e\u26A1 &74096 J Buffer", "&8\u21E8 &e\u26A1 &74096 J/Wither");
+ public static final ItemStack WITHER_ASSEMBLER = new CustomItem(Material.OBSIDIAN, "&5Wither Assembler", "", "&4End-Game Machine", "&8\u21E8 &7Cooldown: &b30 Seconds", "&8\u21E8 &e\u26A1 &74096 J Buffer", "&8\u21E8 &e\u26A1 &74096 J/Wither");
- public static ItemStack TRASH_CAN = null;
+ public static final ItemStack TRASH_CAN = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzJkNDEwNDJjZTk5MTQ3Y2MzOGNhYzllNDY3NDE1NzZlN2VlNzkxMjgzZTZmYWM4ZDMyOTJjYWUyOTM1ZjFmIn19fQ=="), "&3Trash Can", "", "&rWill destroy all Items put into it");
- public static ItemStack ELYTRA = new ItemStack(Material.ELYTRA);
- public static ItemStack ELYTRA_SCALE = new CustomItem(Material.FEATHER, "&bEyltra Scale");
- public static ItemStack INFUSED_ELYTRA = new CustomItem(new CustomItem(ELYTRA, "&5Infused Elytra"), new String[] {"MENDING-1"});
- public static ItemStack SOULBOUND_ELYTRA = new CustomItem(ELYTRA, "&cSoulbound Elytra");
+ public static final ItemStack ELYTRA = new ItemStack(Material.ELYTRA);
+ public static final ItemStack ELYTRA_SCALE = new CustomItem(Material.FEATHER, "&bElytra Scale");
+ public static final ItemStack INFUSED_ELYTRA = new CustomItem(ELYTRA, "&5Infused Elytra");
+ public static final ItemStack SOULBOUND_ELYTRA = new CustomItem(ELYTRA, "&cSoulbound Elytra");
+
+ static {
+ INFUSED_ELYTRA.addUnsafeEnchantment(Enchantment.MENDING, 1);
+ }
// ChestTerminal Addon
- public static ItemStack CHEST_TERMINAL = null;
- public static ItemStack CT_IMPORT_BUS = null;
- public static ItemStack CT_EXPORT_BUS = null;
+ public static final ItemStack CHEST_TERMINAL = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2E0NGZmM2E1ZjQ5YzY5Y2FiNjc2YmFkOGQ5OGEwNjNmYTc4Y2ZhNjE5MTZmZGVmM2UyNjc1NTdmZWMxODI4MyJ9fX0="), "&3CT Access Terminal", "&7If this Block is connected to a", "&7Cargo Network, it will allow you to remotely", "&7interact with any Items supplied by", "&7Nodes tuned into the ChestTerminal Channel");
+ public static final ItemStack CT_IMPORT_BUS = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTEzZGIyZTdlNzJlYTQ0MzJlZWZiZDZlNThhODVlYWEyNDIzZjgzZTY0MmNhNDFhYmM2YTkzMTc3NTdiODg5In19fQ=="), "&3CT Import Bus", "&7If this Block is connected to a", "&7Cargo Network, it will pull any Items from", "&7the Inventory it is attached to and place it", "&7into the CT Network Channel");
+ public static final ItemStack CT_EXPORT_BUS = new CustomItem(getSkull("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTEzZGIyZTdlNzJlYTQ0MzJlZWZiZDZlNThhODVlYWEyNDIzZjgzZTY0MmNhNDFhYmM2YTkzMTc3NTdiODg5In19fQ=="), "&3CT Export Bus", "&7If this Block is connected to a", "&7Cargo Network, it will pull any Items from", "&7the CT Network Channel and place these", "&7into the Inventory it is attached to");
- static {
+ private static ItemStack getSkull(String texture) {
try {
- PORTABLE_CRAFTER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzJlYzRhNGJkOGE1OGY4MzYxZjhhMDMwM2UyMTk5ZDMzZDYyNGVhNWY5MmY3Y2IzNDE0ZmVlOTVlMmQ4NjEifX19"), "&6Portable Crafter", "&a&oA portable Crafting Table", "", "&eRight Click&7 to open");
- PORTABLE_DUSTBIN = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzJkNDEwNDJjZTk5MTQ3Y2MzOGNhYzllNDY3NDE1NzZlN2VlNzkxMjgzZTZmYWM4ZDMyOTJjYWUyOTM1ZjFmIn19fQ=="), "&6Portable Dustbin", "&rYour portable Item-Destroyer", "", "&eRight Click&7 to open");
- TRASH_CAN = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzJkNDEwNDJjZTk5MTQ3Y2MzOGNhYzllNDY3NDE1NzZlN2VlNzkxMjgzZTZmYWM4ZDMyOTJjYWUyOTM1ZjFmIn19fQ=="), "&3Trash Can", "", "&rWill destroy all Items put into it");
- CAN = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTRkYTk3ZjA4MGUzOTViODQyYzRjYzgyYTg0MDgyM2Q0ZGJkOGNhNjg4YTIwNjg1M2U1NzgzZTRiZmRjMDEyIn19fQ=="), "&rTin Can");
+ return CustomSkull.getItem(texture);
+ }
+ catch(Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while initializing the Items for Slimefun " + Slimefun.getVersion(), x);
- STONE_CHUNK = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvY2U4ZjVhZGIxNGQ2YzlmNmI4MTBkMDI3NTQzZjFhOGMxZjQxN2UyZmVkOTkzYzk3YmNkODljNzRmNWUyZTgifX19"), "&6Stone Chunk");
-
- INFUSED_MAGNET = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWJhOGViYzRjNmE4MTczMDk0NzQ5OWJmN2UxZDVlNzNmZWQ2YzFiYjJjMDUxZTk2ZDM1ZWIxNmQyNDYxMGU3In19fQ=="), "&aInfused Magnet" , "", "&rMagical infused Magnets", "&rattract nearby Items", "&ras long as it is somewhere in", "&ryour Inventory", "", "&7Hold &eShift&7 to pick up nearby Items");
- MAGNET = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWJhOGViYzRjNmE4MTczMDk0NzQ5OWJmN2UxZDVlNzNmZWQ2YzFiYjJjMDUxZTk2ZDM1ZWIxNmQyNDYxMGU3In19fQ=="), "&cMagnet");
- ELECTRO_MAGNET = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWJhOGViYzRjNmE4MTczMDk0NzQ5OWJmN2UxZDVlNzNmZWQ2YzFiYjJjMDUxZTk2ZDM1ZWIxNmQyNDYxMGU3In19fQ=="), "&cElectromagnet");
- ELECTRIC_MOTOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGNiY2EwMTJmNjdlNTRkZTlhZWU3MmZmNDI0ZTA1NmMyYWU1OGRlNWVhY2M5NDlhYjJiY2Q5NjgzY2VjIn19fQ=="), "&cElectric Motor");
- CARGO_MOTOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGNiY2EwMTJmNjdlNTRkZTlhZWU3MmZmNDI0ZTA1NmMyYWU1OGRlNWVhY2M5NDlhYjJiY2Q5NjgzY2VjIn19fQ=="), "&3Cargo Motor");
-
- BACKPACK_SMALL = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eSmall Backpack", new String[] {"", "&7Size: &e9", "&7ID: ", "", "&7&eRight Click&7 to open"});
- BACKPACK_MEDIUM = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eBackpack", new String[] {"", "&7Size: &e18", "&7ID: ", "", "&7&eRight Click&7 to open"});
- BACKPACK_LARGE = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eLarge Backpack", new String[] {"", "&7Size: &e27", "&7ID: ", "", "&7&eRight Click&7 to open"});
- WOVEN_BACKPACK = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eWoven Backpack", new String[] {"", "&7Size: &e36", "&7ID: ", "", "&7&eRight Click&7 to open"});
- GILDED_BACKPACK = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eGilded Backpack", new String[] {"", "&7Size: &e45", "&7ID: ", "", "&7&eRight Click&7 to open"});
- RADIANT_BACKPACK = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDBjYjFlNjdiNTEyYWIyZDRiZjNkN2FjZTBlYWFmNjFjMzJjZDQ2ODFkZGMzOTg3Y2ViMzI2NzA2YTMzZmEifX19"), "&eRadiant Backpack", new String[] {"", "&7Size: &e54 (Double chest)", "&7ID: ", "", "&7&eRight Click&7 to open"});
- BOUND_BACKPACK = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&cSoulbound Backpack", new String[] {"", "&7Size: &e36", "&7ID: ", "", "&7&eRight Click&7 to open"});
- COOLER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDRjMTU3MjU4NGViNWRlMjI5ZGU5ZjVhNGY3NzlkMGFhY2JhZmZkMzNiY2IzM2ViNDUzNmE2YTJiYzZhMSJ9fX0="), "&bCooler", new String[] {"&rAllows you to store Juices/Smoothies", "&rand automatically consumes them when you are hungry", "&rand you have this in your Inventory", "", "&7Size: &e27", "&7ID: ", "", "&7&eRight Click&7 to open"});
- ENDER_BACKPACK = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&6Ender Backpack", new String[] {"&a&oA portable Ender Chest", "", "&eRight Click&7 to open"});
-
- VOIDBAG_SMALL = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&4Small Void Bag", new String[] {"", "&7Size: &e9", "&7ID: ", "", "&7&eLeft Click&7 to suck up nearby Items", "&7&eRight Click&7 to open"});
- VOIDBAG_MEDIUM = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&4Void Bag", new String[] {"", "&7Size: &e18", "&7ID: ", "", "&7&eLeft Click&7 to suck up nearby Items", "&7&eRight Click&7 to open"});
- VOIDBAG_BIG = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&4Big Void Bag", new String[] {"", "&7Size: &e27", "&7ID: ", "", "&7&eLeft Click&7 to suck up nearby Items", "&7&eRight Click&7 to open"});
- VOIDBAG_LARGE = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&4Large Void Bag", new String[] {"", "&7Size: &e36", "&7ID: ", "", "&7&eLeft Click&7 to suck up nearby Items", "&7&eRight Click&7 to open"});
- BOUND_VOIDBAG = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmEzYjM0ODYyYjlhZmI2M2NmOGQ1Nzc5OTY2ZDNmYmE3MGFmODJiMDRlODNmM2VhZjY0NDlhZWJhIn19fQ=="), "&4Soulbound Void Bag", new String[] {"", "&7Size: &e36", "&7ID: ", "", "&7&eLeft Click&7 to suck up nearby Items", "&7&eRight Click&7 to open"});
-
- COAL_GENERATOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&cCoal Generator", "", "&6Average Generator", "&8\u21E8 &e\u26A1 &764 J Buffer", "&8\u21E8 &e\u26A1 &716 J/s");
- LAVA_GENERATOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&4Lava Generator", "", "&6Average Generator", "&8\u21E8 &e\u26A1 &7512 J Buffer", "&8\u21E8 &e\u26A1 &720 J/s");
- COMBUSTION_REACTOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&cCombustion Reactor", "", "&6Advanced Generator", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &724 J/s");
-
- NUCLEAR_REACTOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&2Nuclear Reactor", "", "&rRequires Cooling!", "&8\u21E8 &bMust be surrounded by Water", "&8\u21E8 &bMust be supplied with Reactor Coolant Cells", "", "&4End-Game Generator", "&8\u21E8 &e\u26A1 &716384 J Buffer", "&8\u21E8 &e\u26A1 &7500 J/s");
- NETHERSTAR_REACTOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&fNether Star Reactor", "", "&fRuns on Nether Stars", "&8\u21E8 &bMust be surrounded by Water", "&8\u21E8 &bMust be supplied with Nether Ice Coolant Cells", "", "&4End-Game Generator", "&8\u21E8 &e\u26A1 &732768 J Buffer", "&8\u21E8 &e\u26A1 &71024 J/s", "&8\u21E8 &4Causes nearby Entities to get Withered");
-
- SMALL_CAPACITOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTEzNjFlNTc2YjQ5M2NiZmRmYWUzMjg2NjFjZWRkMWFkZDU1ZmFiNGU1ZWI0MThiOTJjZWJmNjI3NWY4YmI0In19fQ=="), "&aSmall Energy Capacitor", "", "&eBasic Capacitor", "&8\u21E8 &e\u26A1 &7128 J Capacity");
- MEDIUM_CAPACITOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTEzNjFlNTc2YjQ5M2NiZmRmYWUzMjg2NjFjZWRkMWFkZDU1ZmFiNGU1ZWI0MThiOTJjZWJmNjI3NWY4YmI0In19fQ=="), "&aMedium Energy Capacitor", "", "&6Average Capacitor", "&8\u21E8 &e\u26A1 &7512 J Capacity");
- BIG_CAPACITOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTEzNjFlNTc2YjQ5M2NiZmRmYWUzMjg2NjFjZWRkMWFkZDU1ZmFiNGU1ZWI0MThiOTJjZWJmNjI3NWY4YmI0In19fQ=="), "&aBig Energy Capacitor", "", "&aMedium Capacitor", "&8\u21E8 &e\u26A1 &71024 J Capacity");
- LARGE_CAPACITOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTEzNjFlNTc2YjQ5M2NiZmRmYWUzMjg2NjFjZWRkMWFkZDU1ZmFiNGU1ZWI0MThiOTJjZWJmNjI3NWY4YmI0In19fQ=="), "&aLarge Energy Capacitor", "", "&2Good Capacitor", "&8\u21E8 &e\u26A1 &78192 J Capacity");
- CARBONADO_EDGED_CAPACITOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTEzNjFlNTc2YjQ5M2NiZmRmYWUzMjg2NjFjZWRkMWFkZDU1ZmFiNGU1ZWI0MThiOTJjZWJmNjI3NWY4YmI0In19fQ=="), "&aCarbonado Edged Energy Capacitor", "", "&4End-Game Capacitor", "&8\u21E8 &e\u26A1 &765536 J Capacity");
- CHEESE = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzRmZWJiYzE1ZDFkNGNjNjJiZWRjNWQ3YTJiNmYwZjQ2Y2Q1YjA2OTZhODg0ZGU3NWUyODllMzVjYmI1M2EwIn19fQ=="), "&rCheese");
- BUTTER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjY2YjE5ZjdkNjM1ZDAzNDczODkxZGYzMzAxN2M1NDkzNjMyMDlhOGY2MzI4YTg1NDJjMjEzZDA4NTI1ZSJ9fX0="), "&rButter");
- DUCT_TAPE = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjJmYWFjZWFiNjM4NGZmZjVlZDI0YmI0NGE0YWYyZjU4NGViMTM4MjcyOWVjZDkzYTUzNjlhY2ZkNjY1NCJ9fX0="), "&8Duct Tape", "", "&rYou can repair Items using this", "&rin an Auto-Anvil");
-
- URANIUM = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzhiMjlhZmE2ZDZkYzkyM2UyZTEzMjRiZjgxOTI3NTBmN2JkYmRkYzY4OTYzMmEyYjZjMThkOWZlN2E1ZSJ9fX0="), "&4Uranium", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
- SMALL_URANIUM = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzhiMjlhZmE2ZDZkYzkyM2UyZTEzMjRiZjgxOTI3NTBmN2JkYmRkYzY4OTYzMmEyYjZjMThkOWZlN2E1ZSJ9fX0="), "&cSmall Chunk of Uranium", "", "&eRadiation Level: MODERATE", "&4&oHazmat Suit required");
- TINY_URANIUM = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzhiMjlhZmE2ZDZkYzkyM2UyZTEzMjRiZjgxOTI3NTBmN2JkYmRkYzY4OTYzMmEyYjZjMThkOWZlN2E1ZSJ9fX0="), "&cTiny Pile of Uranium", "", "&cRadiation Level: LOW", "&4&oNo Hazmat Suit required");
-
- NEPTUNIUM = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGVkZWE2YmZkMzdlNDlkZTQzZjE1NGZlNmZjYTYxN2Q0MTI5ZTYxYjk1NzU5YTNkNDlhMTU5MzVhMWMyZGNmMCJ9fX0="), "&aNeptunium", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
- PLUTONIUM = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjVjZjkxYjczODg2NjVhNmQ3YzFiNjAyNmJkYjIzMjJjNmQyNzg5OTdhNDQ0Nzg2NzdjYmNjMTVmNzYxMjRmIn19fQ=="), "&7Plutonium", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
- BOOSTED_URANIUM = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjgzN2NhMTJmMjIyZjQ3ODcxOTZhMTdiOGFiNjU2OTg1Zjg0MDRjNTA3NjdhZGJjYjZlN2YxNDI1NGZlZSJ9fX0="), "&2Boosted Uranium", "", "&2Radiation Level: HIGH", "&4&oHazmat Suit required");
-
- PROGRAMMABLE_ANDROID = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzUwM2NiN2VkODQ1ZTdhNTA3ZjU2OWFmYzY0N2M0N2FjNDgzNzcxNDY1YzlhNjc5YTU0NTk0Yzc2YWZiYSJ9fX0="), "&cProgrammable Android &7(Normal)", "", "&8\u21E8 &7Function: None", "&8\u21E8 &7Fuel Efficiency: 1.0x");
- PROGRAMMABLE_ANDROID_FARMER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjlkMzMzNTdlODQxODgyM2JmNzgzZGU5MmRlODAyOTFiNGViZDM5MmFlYzg3MDY2OThlMDY4OTZkNDk4ZjYifX19"), "&cProgrammable Android &7(Farmer)", "", "&8\u21E8 &7Function: Farming", "&8\u21E8 &7Fuel Efficiency: 1.0x");
- PROGRAMMABLE_ANDROID_MINER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTYzOGEyODU0MWFiM2FlMGE3MjNkNTU3ODczOGUwODc1ODM4OGVjNGMzMzI0N2JkNGNhMTM0ODJhZWYzMzQifX19"), "&cProgrammable Android &7(Miner)", "", "&8\u21E8 &7Function: Mining", "&8\u21E8 &7Fuel Efficiency: 1.0x");
- PROGRAMMABLE_ANDROID_WOODCUTTER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDMyYTgxNDUxMDE0MjIwNTE2OWExYWQzMmYwYTc0NWYxOGU5Y2I2YzY2ZWU2NGVjYTJlNjViYWJkZWY5ZmYifX19"), "&cProgrammable Android &7(Woodcutter)", "", "&8\u21E8 &7Function: Woodcutting", "&8\u21E8 &7Fuel Efficiency: 1.0x");
- PROGRAMMABLE_ANDROID_BUTCHER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2I0NzJkZjBhZDlhM2JlODhmMmU1ZDVkNDIyZDAyYjExNmQ2NGQ4ZGYxNDc1ZWQzMmU1NDZhZmM4NGIzMSJ9fX0="), "&cProgrammable Android &7(Butcher)", "", "&8\u21E8 &7Function: Slaughtering", "&8\u21E8 &7Damage: 4", "&8\u21E8 &7Fuel Efficiency: 1.0x");
- PROGRAMMABLE_ANDROID_FISHERMAN = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzQ1ZTg3MzNhNzMxMTQzMzNiOThiMzYwMTc1MTI0MTcyMmY0NzEzZTFhMWE1ZDM2ZmJiMTMyNDkzZjFjNyJ9fX0="), "&cProgrammable Android &7(Fisherman)", "", "&8\u21E8 &7Function: Fishing", "&8\u21E8 &7Success Rate: 10%", "&8\u21E8 &7Fuel Efficiency: 1.0x");
-
- PROGRAMMABLE_ANDROID_2 = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzUwM2NiN2VkODQ1ZTdhNTA3ZjU2OWFmYzY0N2M0N2FjNDgzNzcxNDY1YzlhNjc5YTU0NTk0Yzc2YWZiYSJ9fX0="), "&cAdvanced Programmable Android &7(Normal)", "", "&8\u21E8 &7Function: None", "&8\u21E8 &7Fuel Efficiency: 1.5x");
- PROGRAMMABLE_ANDROID_2_FISHERMAN = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzQ1ZTg3MzNhNzMxMTQzMzNiOThiMzYwMTc1MTI0MTcyMmY0NzEzZTFhMWE1ZDM2ZmJiMTMyNDkzZjFjNyJ9fX0="), "&cAdvanced Programmable Android &7(Fisherman)", "", "&8\u21E8 &7Function: Fishing", "&8\u21E8 &7Success Rate: 20%", "&8\u21E8 &7Fuel Efficiency: 1.5x");
- PROGRAMMABLE_ANDROID_2_FARMER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjlkMzMzNTdlODQxODgyM2JmNzgzZGU5MmRlODAyOTFiNGViZDM5MmFlYzg3MDY2OThlMDY4OTZkNDk4ZjYifX19"), "&cAdvanced Programmable Android &7(Farmer)", "", "&8\u21E8 &7Function: Farming", "&8\u21E8 &7Fuel Efficiency: 1.5x", "&8\u21E8 &7Can also harvest Plants from ExoticGarden");
- PROGRAMMABLE_ANDROID_2_BUTCHER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2I0NzJkZjBhZDlhM2JlODhmMmU1ZDVkNDIyZDAyYjExNmQ2NGQ4ZGYxNDc1ZWQzMmU1NDZhZmM4NGIzMSJ9fX0="), "&cAdvanced Programmable Android &7(Butcher)", "", "&8\u21E8 &7Function: Slaughtering", "&8\u21E8 &7Damage: 8", "&8\u21E8 &7Fuel Efficiency: 1.5x");
-
- PROGRAMMABLE_ANDROID_3 = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzUwM2NiN2VkODQ1ZTdhNTA3ZjU2OWFmYzY0N2M0N2FjNDgzNzcxNDY1YzlhNjc5YTU0NTk0Yzc2YWZiYSJ9fX0="), "&eEmpowered Programmable Android &7(Normal)", "", "&8\u21E8 &7Function: None", "&8\u21E8 &7Fuel Efficiency: 3.0x");
- PROGRAMMABLE_ANDROID_3_FISHERMAN = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzQ1ZTg3MzNhNzMxMTQzMzNiOThiMzYwMTc1MTI0MTcyMmY0NzEzZTFhMWE1ZDM2ZmJiMTMyNDkzZjFjNyJ9fX0="), "&eEmpowered Programmable Android &7(Fisherman)", "", "&8\u21E8 &7Function: Fishing", "&8\u21E8 &7Success Rate: 30%", "&8\u21E8 &7Fuel Efficiency: 8.0x");
- PROGRAMMABLE_ANDROID_3_BUTCHER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2I0NzJkZjBhZDlhM2JlODhmMmU1ZDVkNDIyZDAyYjExNmQ2NGQ4ZGYxNDc1ZWQzMmU1NDZhZmM4NGIzMSJ9fX0="), "&eEmpowered Programmable Android &7(Butcher)", "", "&8\u21E8 &7Function: Slaughtering", "&8\u21E8 &7Damage: 20", "&8\u21E8 &7Fuel Efficiency: 8.0x");
-
- GPS_TRANSMITTER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&bGPS Transmitter", "", "&8\u21E8 &e\u26A1 &716 J Buffer", "&8\u21E8 &e\u26A1 &72 J/s");
- GPS_TRANSMITTER_2 = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&cAdvanced GPS Transmitter", "", "&8\u21E8 &e\u26A1 &764 J Buffer", "&8\u21E8 &e\u26A1 &76 J/s");
- GPS_TRANSMITTER_3 = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&4Carbonado GPS Transmitter", "", "&8\u21E8 &e\u26A1 &7256 J Buffer", "&8\u21E8 &e\u26A1 &722 J/s");
- GPS_TRANSMITTER_4 = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&eEnergized GPS Transmitter", "", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &792 J/s");
-
- GPS_CONTROL_PANEL = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGRjZmJhNThmYWYxZjY0ODQ3ODg0MTExODIyYjY0YWZhMjFkN2ZjNjJkNDQ4MWYxNGYzZjNiY2I2MzMwIn19fQ=="), "&bGPS Control Panel", "", "&rAllows you to trach your Satellites", "&rand manage your Waypoints");
- GPS_EMERGENCY_TRANSMITTER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjBjOWMxYTAyMmY0MGI3M2YxNGI0Y2JhMzdjNzE4YzZhNTMzZjNhMjg2NGI2NTM2ZDVmNDU2OTM0Y2MxZiJ9fX0="), "&cGPS Emergency Transmitter", "", "&rCarrying this in your Inventory", "&rautomatically sets a Waypoint", "&rat your Location when you die.");
-
- GPS_GEO_SCANNER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmFkOGNmZWIzODdhNTZlM2U1YmNmODUzNDVkNmE0MTdiMjQyMjkzODg3ZGIzY2UzYmE5MWZhNDA5YjI1NGI4NiJ9fX0="), "&bGPS Geo-Scanner", "", "&rScans a Chunk for natural Resources", "&rsuch as &8Oil");
- OIL_PUMP = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYWZlMWEwNDBhNDI1ZTMxYTQ2ZDRmOWE5Yjk4MDZmYTJmMGM0N2VlODQ3MTFjYzE5MzJmZDhhYjMyYjJkMDM4In19fQ=="), "&rOil Pump", "", "&7Pumps up Oil and fills it into Buckets", "", "&c&l! &cMake sure to Geo-Scan the Chunk first");
- BUCKET_OF_OIL = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmNlMDRiNDFkMTllYzc5MjdmOTgyYTYzYTk0YTNkNzlmNzhlY2VjMzMzNjMwNTFmZGUwODMxYmZhYmRiZCJ9fX0="), "&rBucket of Oil");
- BUCKET_OF_FUEL = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTg0ZGRjYTc2NjcyNWI4Yjk3NDEzZjI1OWMzZjc2NjgwNzBmNmFlNTU0ODNhOTBjOGU1NTI1Mzk0ZjljMDk5In19fQ=="), "&rBucket of Fuel");
-
- NETHER_ICE = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2NlMmRhZDliYWY3ZWFiYTdlODBkNGQwZjlmYWMwYWFiMDFhNzZiMTJmYjcxYzNkMmFmMmExNmZkZDRjNzM4MyJ9fX0="), "&eNether Ice", "", "&eRadiation Level: MODERATE", "&4&oHazmat Suit required");
- ENRICHED_NETHER_ICE = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2M4MThhYTEzYWFiYzcyOTQ4MzhkMjFjYWFjMDU3ZTk3YmQ4Yzg5NjQxYTBjMGY4YTU1NDQyZmY0ZTI3In19fQ=="), "&eEnriched Nether Ice", "", "&2Radiation Level: EXTREMELY HIGH", "&4&oHazmat Suit required");
-
- LAVA_CRYSTAL = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTNhZDhlZTg0OWVkZjA0ZWQ5YTI2Y2EzMzQxZjYwMzNiZDc2ZGNjNDIzMWVkMWVhNjNiNzU2NTc1MWIyN2FjIn19fQ=="), "&4Lava Crystal");
- ANDROID_MEMORY_CORE = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDc4ZjJiN2U1ZTc1NjM5ZWE3ZmI3OTZjMzVkMzY0YzRkZjI4YjQyNDNlNjZiNzYyNzdhYWRjZDYyNjEzMzcifX19"), "&bAndroid Memory Core");
-
- CARBON = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGIzYTA5NWI2YjgxZTZiOTg1M2ExOTMyNGVlZGYwYmI5MzQ5NDE3MjU4ZGQxNzNiOGVmZjg3YTA4N2FhIn19fQ=="), "&eCarbon");
- COMPRESSED_CARBON = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzIxZDQ5NTE2NTc0OGQzMTE2Zjk5ZDZiNWJkNWQ0MmViOGJhNTkyYmNkZmFkMzdmZDk1ZjliNmMwNGEzYiJ9fX0="), "&cCompressed Carbon");
- CARBON_CHUNK = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzIxZDQ5NTE2NTc0OGQzMTE2Zjk5ZDZiNWJkNWQ0MmViOGJhNTkyYmNkZmFkMzdmZDk1ZjliNmMwNGEzYiJ9fX0="), "&4Carbon Chunk");
-
- SYNTHETIC_SAPPHIRE = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTM1MDMyZjRkN2QwMWRlOGVjOTlkODlmODcyMzAxMmQ0ZTc0ZmE3MzAyMmM0ZmFjZjFiNTdjN2ZmNmZmMCJ9fX0="), "&bSynthetic Sapphire");
- CARBONADO = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTJmNGIxNTc3ZjUxNjBjNjg5MzE3MjU3MWM0YTcxZDhiMzIxY2RjZWFhMDMyYzZlMGUzYjYwZTBiMzI4ZmEifX19"), "&b&lCarbonado", "", "&7&o\"Black Diamond\"");
- RAW_CARBONADO = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZWI0OWU2ZWMxMDc3MWU4OTkyMjVhZWE3M2NkOGNmMDM2ODRmNDExZDE0MTVjNzMyM2M5M2NiOTQ3NjIzMCJ9fX0="), "&bRaw Carbonado");
-
- ENERGY_REGULATOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDc4ZjJiN2U1ZTc1NjM5ZWE3ZmI3OTZjMzVkMzY0YzRkZjI4YjQyNDNlNjZiNzYyNzdhYWRjZDYyNjEzMzcifX19"), "&6Energy Regulator", "", "&rCore Component of an Energy Network");
-
- CARGO_MANAGER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUxMGJjODUzNjJhMTMwYTZmZjlkOTFmZjExZDZmYTQ2ZDdkMTkxMmEzNDMxZjc1MTU1OGVmM2M0ZDljMiJ9fX0="), "&6Cargo Manager", "", "&rCore Component of an Item Transport Network");
- CARGO_NODE = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMDdiN2VmNmZkNzg2NDg2NWMzMWMxZGM4N2JlZDI0YWI1OTczNTc5ZjVjNjYzOGZlY2I4ZGVkZWI0NDNmZjAifX19"), "&7Cargo Node &c(Connector)", "", "&rCargo Connector Pipe");
- CARGO_INPUT = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTZkMWMxYTY5YTNkZTlmZWM5NjJhNzdiZjNiMmUzNzZkZDI1Yzg3M2EzZDhmMTRmMWRkMzQ1ZGFlNGM0In19fQ=="), "&7Cargo Node &c(Input)", "", "&rCargo Input Pipe");
- CARGO_OUTPUT = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTViMjFmZDQ4MGMxYzQzYmYzYjlmODQyYzg2OWJkYzNiYzVhY2MyNTk5YmYyZWI2YjhhMWM5NWRjZTk3OGYifX19"), "&7Cargo Node &c(Output)", "", "&rCargo Output Pipe");
- CARGO_OUTPUT_ADVANCED = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTViMjFmZDQ4MGMxYzQzYmYzYjlmODQyYzg2OWJkYzNiYzVhY2MyNTk5YmYyZWI2YjhhMWM5NWRjZTk3OGYifX19"), "&6Advanced Cargo Node &c(Output)", "", "&rCargo Output Pipe");
-
- XP_COLLECTOR = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTc2MmExNWIwNDY5MmEyZTRiM2ZiMzY2M2JkNGI3ODQzNGRjZTE3MzJiOGViMWM3YTlmN2MwZmJmNmYifX19"), "&aEXP Collector", "", "&rCollects nearby Exp and stores it", "", "&4End-Game Machine", "&8\u21E8 &e\u26A1 &71024 J Buffer", "&8\u21E8 &e\u26A1 &720 J/s");
-
- ORGANIC_FOOD = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9X");
- WHEAT_ORGANIC_FOOD = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Wheat");
- CARROT_ORGANIC_FOOD = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Carrots");
- POTATO_ORGANIC_FOOD = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Potatoes");
- SEEDS_ORGANIC_FOOD = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Seeds");
- BEETROOT_ORGANIC_FOOD = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Beetroot");
- MELON_ORGANIC_FOOD = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Melon");
- APPLE_ORGANIC_FOOD = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Food", "&7Content: &9Apple");
-
- FERTILIZER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9X");
- WHEAT_FERTILIZER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Wheat");
- CARROT_FERTILIZER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Carrots");
- POTATO_FERTILIZER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Potatoes");
- SEEDS_FERTILIZER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Seeds");
- BEETROOT_FERTILIZER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Beetroot");
- MELON_FERTILIZER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Melon");
- APPLE_FERTILIZER = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjQzOWUzZjVhY2JlZTliZTRjNDI1OTI4OWQ2ZDlmMzVjNjM1ZmZhNjYxMTE0Njg3YjNlYTZkZGE4Yzc5In19fQ=="), "&aOrganic Fertilizer", "&7Content: &9Apple");
-
- NETHER_ICE_COOLANT_CELL = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGQzY2Q0MTI1NTVmODk3MDE2MjEzZTVkNmM3NDMxYjQ0OGI5ZTU2NDRlMWIxOWVjNTFiNTMxNmYzNTg0MGUwIn19fQ=="), "&6Nether Ice Coolant Cell");
- REACTOR_COOLANT_CELL = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGU0MDczYmU0MGNiM2RlYjMxMGEwYmU5NTliNGNhYzY4ZTgyNTM3MjcyOGZhZmI2YzI5NzNlNGU3YzMzIn19fQ=="), "&bReactor Coolant Cell");
-
- CHEST_TERMINAL = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2E0NGZmM2E1ZjQ5YzY5Y2FiNjc2YmFkOGQ5OGEwNjNmYTc4Y2ZhNjE5MTZmZGVmM2UyNjc1NTdmZWMxODI4MyJ9fX0="), "&3CT Access Terminal", "&7If this Block is connected to a", "&7Cargo Network, it will allow you to remotely", "&7interact with any Items supplied by", "&7Nodes tuned into the ChestTerminal Channel");
- CT_IMPORT_BUS = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTEzZGIyZTdlNzJlYTQ0MzJlZWZiZDZlNThhODVlYWEyNDIzZjgzZTY0MmNhNDFhYmM2YTkzMTc3NTdiODg5In19fQ=="), "&3CT Import Bus", "&7If this Block is connected to a", "&7Cargo Network, it will pull any Items from", "&7the Inventory it is attached to and place it", "&7into the CT Network Channel");
- CT_EXPORT_BUS = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTEzZGIyZTdlNzJlYTQ0MzJlZWZiZDZlNThhODVlYWEyNDIzZjgzZTY0MmNhNDFhYmM2YTkzMTc3NTdiODg5In19fQ=="), "&3CT Export Bus", "&7If this Block is connected to a", "&7Cargo Network, it will pull any Items from", "&7the CT Network Channel and place these", "&7into the Inventory it is attached to");
-
- BATTERY = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmUyZGRhNmVmNjE4NWQ0ZGQ2ZWE4Njg0ZTk3ZDM5YmE4YWIwMzdlMjVmNzVjZGVhNmJkMjlkZjhlYjM0ZWUifX19"), "&6Battery");
-
- HEATING_COIL = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2UzYmM0ODkzYmE0MWEzZjczZWUyODE3NGNkZjRmZWY2YjE0NWU0MWZlNmM4MmNiN2JlOGQ4ZTk3NzFhNSJ9fX0="), "&cHeating Coil");
- COOLING_UNIT = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzU0YmFkODZjOTlkZjc4MGM4ODlhMTA5OGY3NzY0OGVhZDczODVjYzFkZGIwOTNkYTVhN2Q4YzRjMmFlNTRkIn19fQ=="), "&bCooling Unit");
- POWER_CRYSTAL = new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTNjMWIwMzZiNmUwMzUxN2IyODVhODExYmQ4NWU3M2Y1YWJmZGFjYzFkZGY5MGRmZjk2MmUxODA5MzRlMyJ9fX0="), "&c&lPower Crystal");
- } catch (Exception e) {
- e.printStackTrace();
+ return new ItemStack(Material.PLAYER_HEAD);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Misc/BookDesign.java b/src/me/mrCookieSlime/Slimefun/Misc/BookDesign.java
deleted file mode 100644
index d38730b91..000000000
--- a/src/me/mrCookieSlime/Slimefun/Misc/BookDesign.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package me.mrCookieSlime.Slimefun.Misc;
-
-public enum BookDesign {
-
- BOOK,
- CHEST,
- CHEAT_SHEET;
-
-}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/Category.java b/src/me/mrCookieSlime/Slimefun/Objects/Category.java
index 3c31ed8f6..20acc458f 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/Category.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/Category.java
@@ -2,14 +2,15 @@ package me.mrCookieSlime.Slimefun.Objects;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
+import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.Categories;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.api.Slimefun;
/**
* Statically handles categories.
@@ -20,16 +21,10 @@ import me.mrCookieSlime.Slimefun.api.Slimefun;
* @since 4.0
*
* @see LockedCategory
- * @see SeasonCategory
+ * @see SeasonalCategory
*/
public class Category {
- /**
- * List of the registered Categories.
- * @since 4.0
- * @see Categories
- */
- public static List list = new ArrayList<>();
-
+
private ItemStack item;
private List items;
private int tier;
@@ -44,6 +39,11 @@ public class Category {
*/
public Category(ItemStack item) {
this.item = item;
+
+ ItemMeta meta = item.getItemMeta();
+ meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
+ this.item.setItemMeta(meta);
+
this.items = new ArrayList<>();
this.tier = 3;
}
@@ -72,14 +72,19 @@ public class Category {
* @since 4.0
*/
public void register() {
- list.add(this);
- Collections.sort(list, new CategorySorter());
+ SlimefunPlugin.getUtilities().allCategories.add(this);
+ Collections.sort(list(), SlimefunPlugin.getUtilities().categorySorter);
- if (this instanceof SeasonCategory) {
- if (((SeasonCategory) this).isUnlocked()) Slimefun.current_categories.add(this);
+ if (this instanceof SeasonalCategory) {
+ if (((SeasonalCategory) this).isUnlocked()) {
+ SlimefunPlugin.getUtilities().enabledCategories.add(this);
+ }
}
- else Slimefun.current_categories.add(this);
- Collections.sort(Slimefun.current_categories, new CategorySorter());
+ else {
+ SlimefunPlugin.getUtilities().enabledCategories.add(this);
+ }
+
+ Collections.sort(SlimefunPlugin.getUtilities().enabledCategories, SlimefunPlugin.getUtilities().categorySorter);
}
/**
@@ -91,7 +96,7 @@ public class Category {
* @see Categories
*/
public static List list() {
- return list;
+ return SlimefunPlugin.getUtilities().allCategories;
}
/**
@@ -135,8 +140,9 @@ public class Category {
*
* @since 4.0
*/
+ @Deprecated
public static Category getByItem(ItemStack item) {
- for (Category c: list) {
+ for (Category c: list()) {
if (c.getItem().isSimilar(item)) return c;
}
return null;
@@ -153,19 +159,4 @@ public class Category {
return tier;
}
- /**
- * @since 4.0
- */
- class CategorySorter implements Comparator {
-
- /**
- * @since 4.0
- */
- @Override
- public int compare(Category c1, Category c2) {
- return Integer.compare(c1.getTier(), c2.getTier());
- }
-
- }
-
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/Charge.java b/src/me/mrCookieSlime/Slimefun/Objects/Charge.java
deleted file mode 100644
index b7287aa5d..000000000
--- a/src/me/mrCookieSlime/Slimefun/Objects/Charge.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package me.mrCookieSlime.Slimefun.Objects;
-
-public class Charge {
-
- private double charge;
- private double capacity;
-
- public Charge(double charge, double capacity) {
- this.charge = charge;
- this.capacity = capacity;
- }
-
- public double getStoredEnergy() {
- return charge;
- }
-
- public double getCapacity() {
- return capacity;
- }
-
-}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java b/src/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java
index 2e2703c52..d0560bd2c 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/LockedCategory.java
@@ -20,7 +20,7 @@ import org.bukkit.inventory.ItemStack;
* @since 4.0
*
* @see Category
- * @see SeasonCategory
+ * @see SeasonalCategory
*/
public class LockedCategory extends Category {
@@ -116,11 +116,7 @@ public class LockedCategory extends Category {
for (Category category: parents) {
for (SlimefunItem item: category.getItems()) {
- if (Slimefun.isEnabled(p, item.getItem(), false) && Slimefun.hasPermission(p, item, false)) {
- if (item.getResearch() != null) {
- if (!profile.hasUnlocked(item.getResearch())) return false;
- }
- }
+ if (Slimefun.isEnabled(p, item.getItem(), false) && Slimefun.hasPermission(p, item, false) && item.getResearch() != null && !profile.hasUnlocked(item.getResearch())) return false;
}
}
return true;
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java
index a4854f297..d1630e1a4 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/MultiBlock.java
@@ -1,20 +1,18 @@
package me.mrCookieSlime.Slimefun.Objects;
-import java.util.ArrayList;
import java.util.List;
-import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
-
import org.bukkit.Material;
+import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine;
+
public class MultiBlock {
- public static List list = new ArrayList<>();
-
- Material[] blocks;
- Material trigger;
+ private Material[] blocks;
+ private Material trigger;
public MultiBlock(Material[] build, Material trigger) {
this.blocks = build;
@@ -30,48 +28,46 @@ public class MultiBlock {
}
public void register() {
- list.add(this);
+ SlimefunPlugin.getUtilities().allMultiblocks.add(this);
}
public static List list() {
- return list;
+ return SlimefunPlugin.getUtilities().allMultiblocks;
}
public boolean isMultiBlock(SlimefunItem machine) {
- if (machine == null) return false;
- else if (!(machine instanceof SlimefunMachine)) return false;
- else if (machine instanceof SlimefunMachine) {
- MultiBlock mb = ((SlimefunMachine) machine).toMultiBlock();
- if (trigger == mb.getTriggerBlock()) {
- for (int i = 0; i < mb.getBuild().length; i++) {
- if (mb.getBuild()[i] != null) {
- if (MaterialHelper.isLog( mb.getBuild()[i])) {
- if (!MaterialHelper.isLog(blocks[i])) return false;
- }
- else if (mb.getBuild()[i] != blocks[i]) return false;
- }
- }
- return true;
- }
- else return false;
+ if (machine instanceof SlimefunMachine) {
+ return isMultiBlock(((SlimefunMachine) machine).toMultiBlock());
}
else return false;
}
public boolean isMultiBlock(MultiBlock mb) {
if (mb == null) return false;
- else if (trigger == mb.getTriggerBlock()) {
+
+ if (trigger == mb.getTriggerBlock()) {
for (int i = 0; i < mb.getBuild().length; i++) {
- if (mb.getBuild()[i] != null) {
- if (MaterialHelper.isLog(mb.getBuild()[i])) {
- if (!MaterialHelper.isLog(blocks[i])) return false;
- }
- else if (mb.getBuild()[i] != blocks[i]) return false;
- }
+ if (!compareBlocks(blocks[i], mb.getBuild()[i])) return false;
}
+
return true;
}
- else return false;
+
+ return false;
+ }
+
+ private boolean compareBlocks(Material a, Material b) {
+ if (b != null) {
+ if (MaterialHelper.isLog(b)) {
+ return MaterialHelper.isLog(a);
+ }
+
+ if (b != a) {
+ return false;
+ }
+ }
+
+ return true;
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/Research.java b/src/me/mrCookieSlime/Slimefun/Objects/Research.java
index 3eb997786..ceae58924 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/Research.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/Research.java
@@ -1,12 +1,12 @@
package me.mrCookieSlime.Slimefun.Objects;
import java.util.ArrayList;
-import java.util.HashSet;
+import java.util.Collection;
import java.util.Iterator;
-import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.UUID;
+import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -17,7 +17,7 @@ import org.bukkit.entity.Player;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Variable;
import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.FireworkShow;
-import me.mrCookieSlime.Slimefun.SlimefunStartup;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Events.ResearchUnlockEvent;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Setup.Messages;
@@ -40,36 +40,6 @@ public class Research {
private static final int[] research_progress = {23, 44, 57, 92};
- /**
- * Whether researching is enabled or not;
- * @since 4.0
- */
- public static boolean enableResearching;
-
- /**
- * Contains all the registered researches;
- * @since 4.0
- * @see ResearchSetup
- */
- public static List list = new LinkedList<>();
-
- /**
- * Contains all Research Titles
- */
- public static List titles;
-
- /**
- * Contains all the players (UUIDs) that are currently unlocking a research.
- * @since 4.0
- */
- public static Set researching = new HashSet<>();
-
- /**
- * Whether researching in creative is free.
- * @since 4.0
- */
- public static boolean creative_research = true;
-
private int id;
private String name;
private List items;
@@ -103,7 +73,7 @@ public class Research {
}
public boolean isEnabled() {
- return enableResearching && enabled;
+ return SlimefunPlugin.getSettings().researchesEnabled && enabled;
}
/**
@@ -138,7 +108,7 @@ public class Research {
*/
@Deprecated
public int getLevel() {
- return cost;
+ return getCost();
}
/**
@@ -151,7 +121,7 @@ public class Research {
*/
@Deprecated
public void setLevel(int level) {
- this.cost = level;
+ setCost(level);
}
/**
@@ -237,7 +207,7 @@ public class Research {
*/
public boolean canUnlock(Player p) {
if (!isEnabled()) return true;
- return (p.getGameMode() == GameMode.CREATIVE && creative_research) || p.getLevel() >= this.cost;
+ return (p.getGameMode() == GameMode.CREATIVE && SlimefunPlugin.getSettings().researchesFreeInCreative) || p.getLevel() >= this.cost;
}
/**
@@ -266,37 +236,33 @@ public class Research {
ResearchUnlockEvent event = new ResearchUnlockEvent(p, this);
Bukkit.getPluginManager().callEvent(event);
+ Runnable runnable = () -> {
+ PlayerProfile.fromUUID(p.getUniqueId()).setResearched(this, true);
+ Messages.local.sendTranslation(p, "messages.unlocked", true, new Variable("%research%", getName()));
+
+ if (SlimefunPlugin.getCfg().getBoolean("options.research-unlock-fireworks")) {
+ FireworkShow.launchRandom(p, 1);
+ }
+ };
+
if (!event.isCancelled()) {
- if (instant) {
- PlayerProfile.fromUUID(p.getUniqueId()).setResearched(this, true);
-
- Messages.local.sendTranslation(p, "messages.unlocked", true, new Variable("%research%", getName()));
- if (SlimefunStartup.getCfg().getBoolean("options.research-give-fireworks")) {
- FireworkShow.launchRandom(p, 1);
- }
- }
- else if (!researching.contains(p.getUniqueId())){
- researching.add(p.getUniqueId());
+ if (instant) runnable.run();
+ else if (!SlimefunPlugin.getUtilities().researching.contains(p.getUniqueId())){
+ SlimefunPlugin.getUtilities().researching.add(p.getUniqueId());
Messages.local.sendTranslation(p, "messages.research.start", true, new Variable("%research%", getName()));
for (int i = 1; i < research_progress.length + 1; i++) {
int j = i;
- Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
+ Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 0.7F, 1F);
Messages.local.sendTranslation(p, "messages.research.progress", true, new Variable("%research%", getName()), new Variable("%progress%", research_progress[j - 1] + "%"));
}, i * 20L);
}
- Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
- PlayerProfile.fromUUID(p.getUniqueId()).setResearched(this, true);
- Messages.local.sendTranslation(p, "messages.unlocked", true, new Variable("%research%", getName()));
-
- if (SlimefunStartup.getCfg().getBoolean("options.research-unlock-fireworks")) {
- FireworkShow.launchRandom(p, 1);
- }
-
- researching.remove(p.getUniqueId());
+ Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
+ runnable.run();
+ SlimefunPlugin.getUtilities().researching.remove(p.getUniqueId());
}, (research_progress.length + 1) * 20L);
}
}
@@ -309,9 +275,9 @@ public class Research {
* @since 4.0
*/
public void register() {
- SlimefunStartup.getResearchCfg().setDefaultValue("enable-researching", true);
+ SlimefunPlugin.getResearchCfg().setDefaultValue("enable-researching", true);
- if (SlimefunStartup.getResearchCfg().contains(this.getID() + ".enabled") && !SlimefunStartup.getResearchCfg().getBoolean(this.getID() + ".enabled")) {
+ if (SlimefunPlugin.getResearchCfg().contains(this.getID() + ".enabled") && !SlimefunPlugin.getResearchCfg().getBoolean(this.getID() + ".enabled")) {
Iterator iterator = items.iterator();
while (iterator.hasNext()) {
SlimefunItem item = iterator.next();
@@ -321,16 +287,18 @@ public class Research {
return;
}
- SlimefunStartup.getResearchCfg().setDefaultValue(this.getID() + ".name", this.getName());
- SlimefunStartup.getResearchCfg().setDefaultValue(this.getID() + ".cost", this.getCost());
- SlimefunStartup.getResearchCfg().setDefaultValue(this.getID() + ".enabled", true);
+ SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".name", this.getName());
+ SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".cost", this.getCost());
+ SlimefunPlugin.getResearchCfg().setDefaultValue(this.getID() + ".enabled", true);
- this.name = SlimefunStartup.getResearchCfg().getString(this.getID() + ".name");
- this.cost = SlimefunStartup.getResearchCfg().getInt(this.getID() + ".cost");
- this.enabled = SlimefunStartup.getResearchCfg().getBoolean(this.getID() + ".enabled");
+ this.name = SlimefunPlugin.getResearchCfg().getString(this.getID() + ".name");
+ this.cost = SlimefunPlugin.getResearchCfg().getInt(this.getID() + ".cost");
+ this.enabled = SlimefunPlugin.getResearchCfg().getBoolean(this.getID() + ".enabled");
- list.add(this);
- if (SlimefunStartup.getCfg().getBoolean("options.print-out-loading")) System.out.println("[Slimefun] Loaded Research \"" + this.getName() + "\"");
+ SlimefunPlugin.getUtilities().allResearches.add(this);
+ if (SlimefunPlugin.getSettings().printOutLoading) {
+ Slimefun.getLogger().log(Level.INFO, "Loaded Research \"" + this.getName() + "\"");
+ }
}
/**
@@ -342,7 +310,7 @@ public class Research {
* @see ResearchSetup
*/
public static List list() {
- return list;
+ return SlimefunPlugin.getUtilities().allResearches;
}
/**
@@ -354,7 +322,7 @@ public class Research {
* @since 4.0
*/
public static boolean isResearching(Player p) {
- return researching.contains(p.getUniqueId());
+ return SlimefunPlugin.getUtilities().researching.contains(p.getUniqueId());
}
/**
@@ -370,9 +338,9 @@ public class Research {
public static void sendStats(CommandSender sender, Player p) {
PlayerProfile profile = PlayerProfile.fromUUID(p.getUniqueId());
Set researched = profile.getResearches();
- int levels = researched.stream().mapToInt(r -> r.getCost()).sum();
+ int levels = researched.stream().mapToInt(Research::getCost).sum();
- String progress = String.valueOf(Math.round(((researched.size() * 100.0f) / list().size()) * 100.0f) / 100.0f);
+ String progress = String.valueOf(Math.round(((researched.size() * 100.0F) / list().size()) * 100.0F) / 100.0F);
if (Float.parseFloat(progress) < 16.0F) progress = "&4" + progress + " &r% ";
else if (Float.parseFloat(progress) < 32.0F) progress = "&c" + progress + " &r% ";
else if (Float.parseFloat(progress) < 48.0F) progress = "&6" + progress + " &r% ";
@@ -399,10 +367,8 @@ public class Research {
* @see #sendStats(CommandSender, Player)
*/
@Deprecated
- public static String getTitle(Player p, Set researched) {
- int index = Math.round(Float.valueOf(String.valueOf(Math.round(((researched.size() * 100.0f) / list().size()) * 100.0f) / 100.0f)) / 100.0F) * titles.size();
- if (index > 0) index--;
- return titles.get(index);
+ public static String getTitle(Player p, Collection researched) {
+ return PlayerProfile.fromUUID(p.getUniqueId()).getTitle();
}
/**
@@ -414,7 +380,7 @@ public class Research {
* @since 4.0
*/
public static Research getByID(int id) {
- for (Research research: list) {
+ for (Research research: list()) {
if (research.getID() == id) return research;
}
return null;
@@ -452,4 +418,9 @@ public class Research {
public static List getResearches(String uuid) {
return getResearches(UUID.fromString(uuid));
}
+
+ @Override
+ public String toString() {
+ return "Research {" + id + "," + name + "}";
+ }
}
\ No newline at end of file
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SeasonCategory.java b/src/me/mrCookieSlime/Slimefun/Objects/SeasonalCategory.java
similarity index 92%
rename from src/me/mrCookieSlime/Slimefun/Objects/SeasonCategory.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SeasonalCategory.java
index 2515ce4b9..75d5dbcf2 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SeasonCategory.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SeasonalCategory.java
@@ -16,7 +16,7 @@ import org.bukkit.inventory.ItemStack;
* @see Category
* @see LockedCategory
*/
-public class SeasonCategory extends Category {
+public class SeasonalCategory extends Category {
private int month = -1;
@@ -32,7 +32,7 @@ public class SeasonCategory extends Category {
*
* @since 4.0
*/
- public SeasonCategory(int month, int tier, ItemStack item) {
+ public SeasonalCategory(int month, int tier, ItemStack item) {
super(item, tier);
this.month = month - 1;
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunBlockHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunBlockHandler.java
index d484e38c1..23c03d170 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunBlockHandler.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunBlockHandler.java
@@ -6,9 +6,30 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
+@FunctionalInterface
public interface SlimefunBlockHandler {
- void onPlace(Player p, Block b, SlimefunItem item);
-
+ /**
+ * This method gets called when the Block is placed.
+ * Use this method to initialize block data.
+ *
+ * @param p The Player who placed it
+ * @param b The Block that was placed
+ * @param item The Item that will be stored inside the Block
+ */
+ default void onPlace(Player p, Block b, SlimefunItem item) {
+ // This method can optionally be implemented by classes implementing it.
+ }
+
+ /**
+ * This method gets called when the Block is broken
+ * p is nullable if the Block is exploded
+ *
+ * @param p The Player who broke the Block
+ * @param b The Block that was broken
+ * @param item The SlimefunItem that was stored in that block
+ * @param reason The reason for the Block breaking
+ * @return Whether the Event should be cancelled
+ */
boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason);
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ChargableItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ChargableItem.java
index 84cbafa3b..994e15738 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ChargableItem.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ChargableItem.java
@@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack;
public class ChargableItem extends SlimefunItem {
- String chargeType;
+ private String chargeType;
public ChargableItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String chargeType) {
super(category, item, id, recipeType, recipe);
@@ -19,6 +19,8 @@ public class ChargableItem extends SlimefunItem {
this.chargeType = chargeType;
}
- public String getChargeType() { return this.chargeType; }
+ public String getChargeType() {
+ return chargeType;
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ChargedItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ChargedItem.java
index 255851dd3..3ddd3a129 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ChargedItem.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ChargedItem.java
@@ -1,13 +1,13 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
+import org.bukkit.inventory.ItemStack;
+
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import org.bukkit.inventory.ItemStack;
-
public class ChargedItem extends SlimefunItem {
- String chargeType;
+ private String chargeType;
public ChargedItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String chargeType) {
super(category, item, id, recipeType, recipe);
@@ -19,6 +19,8 @@ public class ChargedItem extends SlimefunItem {
this.chargeType = chargeType;
}
- public String getChargeType() { return this.chargeType; }
+ public String getChargeType() {
+ return chargeType;
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/DamagableChargableItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/DamagableChargableItem.java
index 6fe190f1e..5281f4db8 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/DamagableChargableItem.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/DamagableChargableItem.java
@@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack;
public class DamagableChargableItem extends SlimefunItem {
- String chargeType;
+ private String chargeType;
public DamagableChargableItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String chargeType) {
super(category, item, id, recipeType, recipe);
@@ -19,6 +19,8 @@ public class DamagableChargableItem extends SlimefunItem {
this.chargeType = chargeType;
}
- public String getChargeType() { return this.chargeType; }
+ public String getChargeType() {
+ return this.chargeType;
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java
index 5e6add098..f6b515413 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnderTalisman.java
@@ -1,36 +1,42 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Lists.Categories;
-import me.mrCookieSlime.Slimefun.Lists.RecipeType;
-import me.mrCookieSlime.Slimefun.api.Slimefun;
-
import org.bukkit.inventory.ItemStack;
-import org.bukkit.potion.PotionEffect;
+
+import me.mrCookieSlime.Slimefun.Lists.Categories;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
/**
* @since 4.0
*/
-public class EnderTalisman extends SlimefunItem {
-
- private String suffix;
- private boolean consumable;
- private boolean cancel;
- private PotionEffect[] effects;
- private int chance;
+public class EnderTalisman extends Talisman {
public EnderTalisman(Talisman parent) {
- super(Categories.TALISMANS_2, parent.upgrade(), "ENDER_" + parent.getID(), RecipeType.MAGIC_WORKBENCH, new ItemStack[] {SlimefunItem.getItem("ENDER_LUMP_3"), null, SlimefunItem.getItem("ENDER_LUMP_3"), null, parent.getItem(), null, SlimefunItem.getItem("ENDER_LUMP_3"), null, SlimefunItem.getItem("ENDER_LUMP_3")}, parent.upgrade());
- this.consumable = parent.isConsumable();
- this.cancel = parent.isEventCancelled();
- this.suffix = parent.getSuffix();
- this.effects = parent.getEffects();
- this.chance = parent.getChance();
+ super(Categories.TALISMANS_2, parent.upgrade(), "ENDER_" + parent.getID(), new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, null, parent.getItem(), null, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3});
+
+ consumable = parent.isConsumable();
+ cancel = parent.isEventCancelled();
+ suffix = parent.getSuffix();
+ effects = parent.getEffects();
+ chance = parent.getChance();
+
Slimefun.addHint("ENDER_" + parent.getID(), "&eEnder Talismans have the advantage", "&eof still working while they", "&eare in your Ender Chest");
}
-
- public String getSuffix() { return this.suffix; }
- public boolean isConsumable() { return this.consumable; }
- public boolean isEventCancelled() { return this.cancel; }
- public PotionEffect[] getEffects() { return this.effects; }
- public int getChance() { return this.chance; }
+
+ @Override
+ public ItemStack upgrade() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void install() {
+ // Let's override that, otherwise we would be creating Ender Talismans
+ // for every Ender Talisman
+ }
+
+ @Override
+ public void create() {
+ // Let's override that, otherwise we would be creating Ender Talismans
+ // for every Ender Talisman
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java
index 324db7244..b01620841 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/EnhancedFurnace.java
@@ -1,18 +1,22 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
-import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
-import me.mrCookieSlime.Slimefun.SlimefunStartup;
-import me.mrCookieSlime.Slimefun.Lists.Categories;
-import me.mrCookieSlime.Slimefun.Lists.RecipeType;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
+import java.util.Random;
import org.bukkit.block.Block;
import org.bukkit.block.Furnace;
import org.bukkit.inventory.ItemStack;
-public class EnhancedFurnace extends SlimefunItem {
+import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
+import me.mrCookieSlime.Slimefun.Lists.Categories;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+
+public class EnhancedFurnace extends SimpleSlimefunItem {
- int speed, efficiency, fortune;
+ private int speed;
+ private int efficiency;
+ private int fortune;
public EnhancedFurnace(int speed, int efficiency, int fortune, ItemStack item, String id, ItemStack[] recipe) {
super(Categories.MACHINES_1, item, id, RecipeType.ENHANCED_CRAFTING_TABLE, recipe);
@@ -20,33 +24,6 @@ public class EnhancedFurnace extends SlimefunItem {
this.speed = speed - 1;
this.efficiency = efficiency - 1;
this.fortune = fortune - 1;
-
- addItemHandler(new BlockTicker() {
- @Override
- public void tick(Block b, SlimefunItem item, Config data) {
- if (b.getState() instanceof Furnace) {
- if (((Furnace) b.getState()).getCookTime() > 0) {
- Furnace furnace = (Furnace) b.getState();
-
- int newCookTime = furnace.getCookTime() + getSpeed() * 10;
-
- if (newCookTime > 200) furnace.setCookTime((short) 188);
- else furnace.setCookTime((short) newCookTime);
-
- furnace.update(true, false);
- }
- }
- }
-
- @Override
- public void uniqueTick() {
- }
-
- @Override
- public boolean isSynchronized() {
- return true;
- }
- });
}
public int getSpeed() {
@@ -59,9 +36,38 @@ public class EnhancedFurnace extends SlimefunItem {
public int getOutput() {
int fortune = this.fortune;
- fortune = SlimefunStartup.randomize(fortune + 2) - 1;
+ fortune = new Random().nextInt(fortune + 2) - 1;
if (fortune <= 0) fortune = 0;
fortune++;
return fortune;
}
+
+ @Override
+ public BlockTicker getItemHandler() {
+ return new BlockTicker() {
+
+ @Override
+ public void tick(Block b, SlimefunItem item, Config data) {
+ if (!(b.getState() instanceof Furnace)) {
+ // The Furnace has been destroyed, we can clear the block data
+ BlockStorage.clearBlockInfo(b);
+ }
+ else if (((Furnace) b.getState()).getCookTime() > 0) {
+ Furnace furnace = (Furnace) b.getState();
+
+ int newCookTime = furnace.getCookTime() + getSpeed() * 10;
+
+ if (newCookTime > 200) furnace.setCookTime((short) 188);
+ else furnace.setCookTime((short) newCookTime);
+
+ furnace.update(true, false);
+ }
+ }
+
+ @Override
+ public boolean isSynchronized() {
+ return true;
+ }
+ };
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java
index 8a75fee13..c20512b9a 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedBlock.java
@@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
public class ExcludedBlock extends SlimefunItem implements NotPlaceable {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java
index 6bd151202..1a35ecc55 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedGadget.java
@@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
public class ExcludedGadget extends SlimefunGadget implements NotPlaceable {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java
index 8be575860..120ab916f 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedSoulboundTool.java
@@ -4,7 +4,7 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
public class ExcludedSoulboundTool extends SoulboundItem implements NotPlaceable {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java
index 6f2e49c7d..2ac5f15cb 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/ExcludedTool.java
@@ -4,8 +4,9 @@ import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
+@Deprecated
public class ExcludedTool extends SlimefunItem implements NotPlaceable {
public ExcludedTool(Category category, ItemStack item, String id,RecipeType recipeType, ItemStack[] recipe) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Interfaces/NotPlaceable.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Interfaces/NotPlaceable.java
deleted file mode 100644
index 41c515d34..000000000
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Interfaces/NotPlaceable.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Interfaces;
-
-public interface NotPlaceable {
-
-}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/JetBoots.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/JetBoots.java
index 84a47d1d9..f512be3e7 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/JetBoots.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/JetBoots.java
@@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack;
public class JetBoots extends DamagableChargableItem {
- double speed;
+ private double speed;
public JetBoots(ItemStack item, String id, ItemStack[] recipe, double speed) {
super(Categories.TECH, item, id, RecipeType.ENHANCED_CRAFTING_TABLE, recipe, "Jet Boots");
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Jetpack.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Jetpack.java
index b7093a53e..a0c2b1cfc 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Jetpack.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Jetpack.java
@@ -7,7 +7,7 @@ import org.bukkit.inventory.ItemStack;
public class Jetpack extends DamagableChargableItem {
- double thrust;
+ private double thrust;
public Jetpack(ItemStack item, String id, ItemStack[] recipe, double thrust) {
super(Categories.TECH, item, id, RecipeType.ENHANCED_CRAFTING_TABLE, recipe, "Jetpack");
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/MultiTool.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/MultiTool.java
index 133847d58..d26bb4271 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/MultiTool.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/MultiTool.java
@@ -11,7 +11,7 @@ import org.bukkit.inventory.ItemStack;
public class MultiTool extends DamagableChargableItem {
- List modes;
+ private List modes;
public MultiTool(ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
super(Categories.TECH, item, id, recipeType, recipe, "Multi Tool", keys, values);
@@ -19,11 +19,9 @@ public class MultiTool extends DamagableChargableItem {
@Override
public void create() {
- List list = new ArrayList();
+ List list = new ArrayList<>();
for (int i = 0; i < 50; i++) {
- if (Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled") != null) {
- if ((Boolean) Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled")) list.add(i);
- }
+ if (Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled") != null && (Boolean) Slimefun.getItemValue(this.getID(), "mode." + i + ".enabled")) list.add(i);
}
this.modes = list;
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java
new file mode 100644
index 000000000..5e8f4c29b
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java
@@ -0,0 +1,30 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
+
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
+
+public abstract class SimpleSlimefunItem extends SlimefunItem {
+
+ public SimpleSlimefunItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ public SimpleSlimefunItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
+ super(category, item, id, recipeType, recipe, recipeOutput);
+ }
+
+ public SimpleSlimefunItem(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
+ super(category, item, id, recipeType, recipe, keys, values);
+ }
+
+ @Override
+ public void preRegister() {
+ addItemHandler(getItemHandler());
+ }
+
+ public abstract T getItemHandler();
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunArmorPiece.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunArmorPiece.java
index 5ed225ad5..92924744f 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunArmorPiece.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunArmorPiece.java
@@ -8,7 +8,7 @@ import org.bukkit.potion.PotionEffect;
public class SlimefunArmorPiece extends SlimefunItem {
- PotionEffect[] effects;
+ private PotionEffect[] effects;
public SlimefunArmorPiece(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, PotionEffect[] effects) {
super(category, item, id, recipeType, recipe);
@@ -20,6 +20,8 @@ public class SlimefunArmorPiece extends SlimefunItem {
this.effects = effects;
}
- public PotionEffect[] getEffects() { return this.effects; }
+ public PotionEffect[] getEffects() {
+ return this.effects;
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java
index 787845be8..17502c1a7 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunBackpack.java
@@ -7,12 +7,16 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
public class SlimefunBackpack extends SlimefunItem {
- public int size;
+ private int size;
public SlimefunBackpack(int size, Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, id, recipeType, recipe);
this.size = size;
}
+
+ public int getSize() {
+ return size;
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java
index 678ead229..26da5ca11 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunGadget.java
@@ -3,33 +3,37 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
import java.util.ArrayList;
import java.util.List;
-import me.mrCookieSlime.Slimefun.Lists.RecipeType;
-import me.mrCookieSlime.Slimefun.Objects.Category;
-
import org.bukkit.inventory.ItemStack;
-public class SlimefunGadget extends SlimefunItem {
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
+
+public class SlimefunGadget extends SlimefunItem implements RecipeDisplayItem {
- List recipes;
- List display_recipes;
+ private List recipes;
+ private List displayRecipes;
public SlimefunGadget(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes) {
super(category, item, id, recipeType, recipe);
- this.recipes = new ArrayList();
- this.display_recipes = new ArrayList();
+
+ this.recipes = new ArrayList<>();
+ this.displayRecipes = new ArrayList<>();
+
for (ItemStack i: machineRecipes) {
this.recipes.add(new ItemStack[] {i});
- this.display_recipes.add(i);
+ this.displayRecipes.add(i);
}
}
public SlimefunGadget(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes, String[] keys, Object[] values) {
super(category, item, id, recipeType, recipe, keys, values);
- this.recipes = new ArrayList();
- this.display_recipes = new ArrayList();
+ this.recipes = new ArrayList<>();
+ this.displayRecipes = new ArrayList<>();
+
for (ItemStack i: machineRecipes) {
this.recipes.add(new ItemStack[] {i});
- this.display_recipes.add(i);
+ this.displayRecipes.add(i);
}
}
@@ -37,14 +41,15 @@ public class SlimefunGadget extends SlimefunItem {
return this.recipes;
}
+ @Override
public List getDisplayRecipes() {
- return this.display_recipes;
+ return this.displayRecipes;
}
public void addRecipe(ItemStack input, ItemStack output) {
this.recipes.add(new ItemStack[] {input});
this.recipes.add(new ItemStack[] {output});
- this.display_recipes.add(input);
- this.display_recipes.add(output);
+ this.displayRecipes.add(input);
+ this.displayRecipes.add(output);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java
index 873e25f21..f41d29cc8 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java
@@ -2,11 +2,10 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
+import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
@@ -15,37 +14,26 @@ import org.bukkit.block.Block;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;
-import me.mrCookieSlime.Slimefun.SlimefunStartup;
-import me.mrCookieSlime.Slimefun.AncientAltar.AltarRecipe;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.Research;
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemHandler;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.ancient_altar.AltarRecipe;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.energy.EnergyNet;
-import me.mrCookieSlime.Slimefun.api.energy.EnergyNet.NetworkComponent;
+import me.mrCookieSlime.Slimefun.api.energy.EnergyNetComponent;
import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
public class SlimefunItem {
-
- public static List items = new ArrayList<>();
-
- public static Map map_id = new HashMap<>();
- public static List radioactive = new ArrayList<>();
- public static int vanilla = 0;
- public static Set tickers = new HashSet<>();
-
- public static List all = new ArrayList<>();
- public static Map> handlers = new HashMap<>();
- public static Map blockhandler = new HashMap<>();
-
+
private String id;
private String hash;
private State state;
@@ -53,27 +41,29 @@ public class SlimefunItem {
private Category category;
private ItemStack[] recipe;
private RecipeType recipeType;
- private ItemStack recipeOutput = null;
+ protected ItemStack recipeOutput = null;
private Research research;
private int month = -1;
- private boolean enchantable = true, disenchantable = true;
+ private boolean enchantable = true;
+ private boolean disenchantable = true;
private boolean hidden = false;
private boolean replacing = false;
private boolean addon = false;
private String permission = "";
- private Set itemhandlers = new HashSet();
+ private Set itemhandlers = new HashSet<>();
private boolean ticking = false;
private BlockTicker blockTicker;
private EnergyTicker energyTicker;
private String[] keys = null;
private Object[] values = null;
+ private String wiki = null;
/**
* Defines whether a SlimefunItem is enabled, disabled or fall-back to its vanilla behavior.
*
* @since 4.1.10
*/
- public enum State {
+ public static enum State {
/**
* This SlimefunItem is enabled.
*/
@@ -155,7 +145,10 @@ public class SlimefunItem {
* @since 4.1.11, rename of {@link #getName()}.
*/
public String getID() { return id; }
+
+ @Deprecated
public String getHash() { return hash; }
+
public State getState() { return state; }
public ItemStack getItem() { return item; }
public Category getCategory() { return category; }
@@ -205,72 +198,80 @@ public class SlimefunItem {
public void register() {
register(false);
}
-
+
public void register(boolean slimefun) {
this.addon = !slimefun;
try {
- if (map_id.containsKey(this.id)) throw new IllegalArgumentException("ID \"" + this.id + "\" already exists");
+ preRegister();
+
+ if (SlimefunPlugin.getUtilities().itemIDs.containsKey(this.id)) {
+ throw new IllegalArgumentException("ID \"" + this.id + "\" already exists");
+ }
if (this.recipe.length < 9) this.recipe = new ItemStack[] {null, null, null, null, null, null, null, null, null};
- all.add(this);
+ SlimefunPlugin.getUtilities().allItems.add(this);
- SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".enabled", true);
- SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".can-be-used-in-workbenches", this.replacing);
- SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".hide-in-guide", this.hidden);
- SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".allow-enchanting", this.enchantable);
- SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".allow-disenchanting", this.disenchantable);
- SlimefunStartup.getItemCfg().setDefaultValue(this.id + ".required-permission", this.permission);
+ SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".enabled", true);
+ SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".can-be-used-in-workbenches", this.replacing);
+ SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".hide-in-guide", this.hidden);
+ SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".allow-enchanting", this.enchantable);
+ SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".allow-disenchanting", this.disenchantable);
+ SlimefunPlugin.getItemCfg().setDefaultValue(this.id + ".required-permission", this.permission);
if (this.keys != null && this.values != null) {
for (int i = 0; i < this.keys.length; i++) {
- SlimefunStartup.getItemCfg().setDefaultValue(this.id + "." + this.keys[i], this.values[i]);
+ SlimefunPlugin.getItemCfg().setDefaultValue(this.id + "." + this.keys[i], this.values[i]);
}
}
for (World world: Bukkit.getWorlds()) {
- SlimefunStartup.getWhitelist().setDefaultValue(world.getName() + ".enabled", true);
- SlimefunStartup.getWhitelist().setDefaultValue(world.getName() + ".enabled-items." + this.id, true);
+ SlimefunPlugin.getWhitelist().setDefaultValue(world.getName() + ".enabled", true);
+ SlimefunPlugin.getWhitelist().setDefaultValue(world.getName() + ".enabled-items." + this.id, true);
}
- if (this.ticking && !SlimefunStartup.getCfg().getBoolean("URID.enable-tickers")) {
+ if (this.ticking && !SlimefunPlugin.getCfg().getBoolean("URID.enable-tickers")) {
this.state = State.DISABLED;
return;
}
- if (SlimefunStartup.getItemCfg().getBoolean(id + ".enabled")) {
+ if (SlimefunPlugin.getItemCfg().getBoolean(id + ".enabled")) {
if (!Category.list().contains(category)) category.register();
this.state = State.ENABLED;
- this.replacing = SlimefunStartup.getItemCfg().getBoolean(this.id + ".can-be-used-in-workbenches");
- this.hidden = SlimefunStartup.getItemCfg().getBoolean(this.id + ".hide-in-guide");
- this.enchantable = SlimefunStartup.getItemCfg().getBoolean(this.id + ".allow-enchanting");
- this.disenchantable = SlimefunStartup.getItemCfg().getBoolean(this.id + ".allow-disenchanting");
- this.permission = SlimefunStartup.getItemCfg().getString(this.id + ".required-permission");
- items.add(this);
- if (slimefun) vanilla++;
- map_id.put(this.id, this);
- this.create();
+ this.replacing = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".can-be-used-in-workbenches");
+ this.hidden = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".hide-in-guide");
+ this.enchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-enchanting");
+ this.disenchantable = SlimefunPlugin.getItemCfg().getBoolean(this.id + ".allow-disenchanting");
+ this.permission = SlimefunPlugin.getItemCfg().getString(this.id + ".required-permission");
+ SlimefunPlugin.getUtilities().enabledItems.add(this);
+ if (slimefun) SlimefunPlugin.getUtilities().vanillaItems++;
+ SlimefunPlugin.getUtilities().itemIDs.put(this.id, this);
+
+ create();
for (ItemHandler handler: itemhandlers) {
Set handlerset = getHandlers(handler.toCodename());
handlerset.add(handler);
- handlers.put(handler.toCodename(), handlerset);
+ SlimefunPlugin.getUtilities().itemHandlers.put(handler.toCodename(), handlerset);
}
- if (SlimefunStartup.getCfg().getBoolean("options.print-out-loading")) System.out.println("[Slimefun] Loaded Item \"" + this.id + "\"");
+ if (SlimefunPlugin.getSettings().printOutLoading) {
+ Slimefun.getLogger().log(Level.INFO, "Loaded Item \"{0}\"", this.id);
+ }
}
else {
if (this instanceof VanillaItem) this.state = State.VANILLA;
else this.state = State.DISABLED;
}
+
+ postRegister();
} catch(Exception x) {
- System.err.println("[Slimefun] Item Registration failed: " + this.id);
- x.printStackTrace();
+ Slimefun.getLogger().log(Level.WARNING, "Registering the Item '" + id + "' for Slimefun " + Slimefun.getVersion() + " has failed", x);
}
}
public static List list() {
- return items;
+ return SlimefunPlugin.getUtilities().enabledItems;
}
public void bindToResearch(Research r) {
@@ -278,6 +279,7 @@ public class SlimefunItem {
this.research = r;
}
+ @Deprecated
public void setHash(String hash) {
this.hash = hash;
}
@@ -308,24 +310,26 @@ public class SlimefunItem {
*/
@Deprecated
public static SlimefunItem getByName(String name) {
- return map_id.get(name);
+ return getByID(name);
}
/**
* @since 4.1.11, rename of {@link #getByName(String)}.
*/
public static SlimefunItem getByID(String id) {
- return map_id.get(id);
+ return SlimefunPlugin.getUtilities().itemIDs.get(id);
}
public static SlimefunItem getByItem(ItemStack item) {
if (item == null) return null;
- for (SlimefunItem sfi: items) {
- if (sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
- else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
- else if (sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
- else if (sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi;
- else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), true)) return sfi;
+ for (SlimefunItem sfi: SlimefunPlugin.getUtilities().enabledItems) {
+ if ((sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
+ (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
+ (sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
+ (sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) ||
+ SlimefunManager.isItemSimiliar(item, sfi.getItem(), true))
+
+ return sfi;
}
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) return getByID("BROKEN_SPAWNER");
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REINFORCED_SPAWNER");
@@ -347,13 +351,14 @@ public class SlimefunItem {
if (recipeOutput != null) output = recipeOutput.clone();
if (recipeType.toItem().isSimilar(RecipeType.MOB_DROP.toItem())) {
+ String mob = ChatColor.stripColor(recipe[4].getItemMeta().getDisplayName()).toUpperCase().replace(" ", "_");
try {
- EntityType entity = EntityType.valueOf(ChatColor.stripColor(recipe[4].getItemMeta().getDisplayName()).toUpperCase().replace(" ", "_"));
- List dropping = new ArrayList();
- if (SlimefunManager.drops.containsKey(entity)) dropping = SlimefunManager.drops.get(entity);
+ EntityType entity = EntityType.valueOf(mob);
+ List dropping = SlimefunPlugin.getUtilities().drops.getOrDefault(entity, new ArrayList<>());
dropping.add(output);
- SlimefunManager.drops.put(entity, dropping);
+ SlimefunPlugin.getUtilities().drops.put(entity, dropping);
} catch(Exception x) {
+ Slimefun.getLogger().log(Level.WARNING, "An Exception occured when setting a Drop for the Mob: " + mob + " (" + x.getClass().getSimpleName() + ")");
}
}
else if (recipeType.toItem().isSimilar(RecipeType.ANCIENT_ALTAR.toItem())) {
@@ -362,14 +367,15 @@ public class SlimefunItem {
else if (recipeType.getMachine() != null && getByID(recipeType.getMachine().getID()) instanceof SlimefunMachine) {
((SlimefunMachine) getByID(recipeType.getMachine().getID())).addRecipe(recipe, output);
}
+
install();
} catch(Exception x) {
- System.err.println("[Slimefun] Item Initialization failed: " + id);
+ Slimefun.getLogger().log(Level.WARNING, "Item Setup failed: " + id + " (" + x.getClass().getSimpleName() + ")");
}
}
public static State getState(ItemStack item) {
- for (SlimefunItem i: all) {
+ for (SlimefunItem i: SlimefunPlugin.getUtilities().allItems) {
if (i.isItem(item)) {
return i.getState();
}
@@ -378,7 +384,7 @@ public class SlimefunItem {
}
public static boolean isDisabled(ItemStack item) {
- for (SlimefunItem i: all) {
+ for (SlimefunItem i: SlimefunPlugin.getUtilities().allItems) {
if (i.isItem(item)) {
return i.isDisabled();
}
@@ -386,21 +392,39 @@ public class SlimefunItem {
return false;
}
- public void install() {}
- public void create() {}
+ @Deprecated
+ public void install() {
+ // Deprecated
+ }
+
+ /**
+ * @deprecated Use {@link SlimefunItem#postRegister()} instead
+ */
+ @Deprecated
+ public void create() {
+ // Deprecated
+ }
+ /**
+ * @deprecated Use {@link SlimefunItem#addItemHandler(ItemHandler...)} instead
+ */
+ @Deprecated
+ public void addItemHandler(me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemHandler... handler) {
+ addItemHandler((ItemHandler[]) handler);
+ }
+
public void addItemHandler(ItemHandler... handler) {
this.itemhandlers.addAll(Arrays.asList(handler));
for (ItemHandler h: handler) {
if (h instanceof BlockTicker) {
this.ticking = true;
- tickers.add(getID());
+ SlimefunPlugin.getUtilities().tickers.add(getID());
this.blockTicker = (BlockTicker) h;
}
else if (h instanceof EnergyTicker) {
this.energyTicker = (EnergyTicker) h;
- EnergyNet.registerComponent(getID(), NetworkComponent.SOURCE);
+ EnergyNet.registerComponent(getID(), EnergyNetComponent.SOURCE);
}
}
}
@@ -415,23 +439,40 @@ public class SlimefunItem {
register(false);
}
+ /**
+ * @deprecated Use {@link SlimefunItem#register(boolean, ItemHandler...)} instead
+ */
+ @Deprecated
+ public void register(boolean vanilla, me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemHandler... handlers) {
+ addItemHandler(handlers);
+ register(vanilla);
+ }
+
+ /**
+ * @deprecated Use {@link SlimefunItem#register(ItemHandler...)} instead
+ */
+ @Deprecated
+ public void register(me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemHandler... handlers) {
+ register((ItemHandler[]) handlers);
+ }
+
public void register(boolean vanilla, SlimefunBlockHandler handler) {
- blockhandler.put(getID(), handler);
+ SlimefunPlugin.getUtilities().blockHandlers.put(getID(), handler);
register(vanilla);
}
public void register(SlimefunBlockHandler handler) {
- blockhandler.put(getID(), handler);
+ SlimefunPlugin.getUtilities().blockHandlers.put(getID(), handler);
register(false);
}
public static Set getHandlers(String codeid) {
- if (handlers.containsKey(codeid)) return handlers.get(codeid);
+ if (SlimefunPlugin.getUtilities().itemHandlers.containsKey(codeid)) return SlimefunPlugin.getUtilities().itemHandlers.get(codeid);
else return new HashSet<>();
}
public static void setRadioactive(ItemStack item) {
- radioactive.add(item);
+ SlimefunPlugin.getUtilities().radioactiveItems.add(item);
}
public static ItemStack getItem(String id) {
@@ -442,13 +483,14 @@ public class SlimefunItem {
public static void patchExistingItem(String id, ItemStack stack) {
SlimefunItem item = getByID(id);
if (item != null) {
- System.out.println("[Slimefun] WARNING - Patching existing Item - " + id);
- System.out.println("[Slimefun] This might take a while");
+ Slimefun.getLogger().log(Level.INFO, "Patching existing Item... {0}", id);
+ Slimefun.getLogger().log(Level.INFO, "This might take a while");
final ItemStack old = item.getItem();
item.setItem(stack);
for (SlimefunItem sfi: list()) {
ItemStack[] recipe = sfi.getRecipe();
+
for (int i = 0; i < 9; i++) {
if (SlimefunManager.isItemSimiliar(recipe[i], old, true)) recipe[i] = stack;
}
@@ -464,7 +506,7 @@ public class SlimefunItem {
public void registerChargeableBlock(boolean slimefun, int capacity) {
this.register(slimefun);
ChargableBlock.registerChargableBlock(id, capacity, true);
- EnergyNet.registerComponent(id, NetworkComponent.CONSUMER);
+ EnergyNet.registerComponent(id, EnergyNetComponent.CONSUMER);
}
public void registerUnrechargeableBlock(boolean slimefun, int capacity) {
@@ -479,25 +521,35 @@ public class SlimefunItem {
public void registerEnergyDistributor(boolean slimefun) {
this.register(slimefun);
- EnergyNet.registerComponent(id, NetworkComponent.DISTRIBUTOR);
+ EnergyNet.registerComponent(id, EnergyNetComponent.DISTRIBUTOR);
}
public void registerDistibutingCapacitor(boolean slimefun, final int capacity) {
this.register(slimefun);
- EnergyNet.registerComponent(id, NetworkComponent.DISTRIBUTOR);
+ EnergyNet.registerComponent(id, EnergyNetComponent.DISTRIBUTOR);
ChargableBlock.registerCapacitor(id, capacity);
}
+ public void preRegister() {
+ // Override this method to execute code before the Item has been registered
+ // Useful for calls to addItemHandler(...)
+ }
+
+ public void postRegister() {
+ // Override this method to execute code after the Item has been registered
+ // Useful for calls to Slimefun.getItemValue(...)
+ }
+
protected void setItem(ItemStack stack) {
this.item = stack;
}
public static boolean isTicking(String item) {
- return tickers.contains(item);
+ return SlimefunPlugin.getUtilities().tickers.contains(item);
}
public static void registerBlockHandler(String id, SlimefunBlockHandler handler) {
- blockhandler.put(id, handler);
+ SlimefunPlugin.getUtilities().blockHandlers.put(id, handler);
}
public void registerChargeableBlock(boolean vanilla, int capacity, ItemHandler... handlers) {
@@ -510,6 +562,19 @@ public class SlimefunItem {
}
public void addWikipage(String page) {
- Slimefun.addWikiPage(this.getID(), "https://github.com/TheBusyBiscuit/Slimefun4/wiki/" + page);
+ wiki = "https://github.com/TheBusyBiscuit/Slimefun4/wiki/" + page;
+ }
+
+ public boolean hasWiki() {
+ return wiki != null;
+ }
+
+ public String getWiki() {
+ return wiki;
+ }
+
+ @Override
+ public String toString() {
+ return "SlimefunItem: " + id + " (" + state + ", vanilla=" + !addon + ")";
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java
index 62a388806..a986a7245 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunMachine.java
@@ -1,33 +1,24 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
-import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.block.BlockFace;
-import org.bukkit.block.Container;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.ItemStack;
-
-public class SlimefunMachine extends SlimefunItem {
+public class SlimefunMachine extends SlimefunItem implements RecipeDisplayItem {
private List recipes;
- private List shownRecipes;
private Material trigger;
- //Adjacent blockfaces for iterative output chest checks
- private static final BlockFace[] outputFaces = {
- BlockFace.UP,
- BlockFace.NORTH,
- BlockFace.EAST,
- BlockFace.SOUTH,
- BlockFace.WEST
- };
+
+ protected List shownRecipes;
public SlimefunMachine(Category category, ItemStack item, String id, ItemStack[] recipe, ItemStack[] machineRecipes, Material trigger) {
super(category, item, id, RecipeType.MULTIBLOCK, recipe);
@@ -54,20 +45,17 @@ public class SlimefunMachine extends SlimefunItem {
}
public List getRecipes() {
- return this.recipes;
+ return recipes;
}
+ @Override
public List getDisplayRecipes() {
- return this.shownRecipes;
- }
-
- public static BlockFace[] getOutputFaces() {
- return outputFaces;
+ return shownRecipes;
}
public void addRecipe(ItemStack[] input, ItemStack output) {
- this.recipes.add(input);
- this.recipes.add(new ItemStack[] {output});
+ recipes.add(input);
+ recipes.add(new ItemStack[] {output});
}
@Override
@@ -79,8 +67,9 @@ public class SlimefunMachine extends SlimefunItem {
public void install() {
for (ItemStack i: this.getDisplayRecipes()) {
SlimefunItem item = SlimefunItem.getByItem(i);
- if (item == null) this.recipes.add(new ItemStack[] {i});
- else if (!SlimefunItem.isDisabled(i)) this.recipes.add(new ItemStack[] {i});
+ if (item == null || !SlimefunItem.isDisabled(i)) {
+ this.recipes.add(new ItemStack[] {i});
+ }
}
}
@@ -99,34 +88,4 @@ public class SlimefunMachine extends SlimefunItem {
return this.recipes.iterator();
}
- // Overloaded method for finding a potential output chest. Fallbacks to the old system of putting the adding back into the dispenser.
- // Optional last argument Inventory placeCheckerInv is for multiblock machines that create a dummy inventory to check if there's a space for the adding,
- // i.e. Enhanced crafting table
- public static Inventory findValidOutputInv(ItemStack adding, Block dispBlock, Inventory dispInv) {
- return findValidOutputInv(adding, dispBlock, dispInv, dispInv);
- }
-
- public static Inventory findValidOutputInv(ItemStack product, Block dispBlock, Inventory dispInv, Inventory placeCheckerInv) {
- Inventory outputInv = null;
- for (BlockFace face : outputFaces) {
- Block potentialOutput = dispBlock.getRelative(face);
- String id = BlockStorage.checkID(potentialOutput);
- if (id != null && id.equals("OUTPUT_CHEST")) {
- // Found the output chest! Now, let's check if we can fit the product in it.
- Inventory inv = ((Container) potentialOutput.getState()).getInventory();
- if (InvUtils.fits(inv, product)) {
- // It fits! Let's set the inventory to that now.
- outputInv = inv;
- break;
- }
- }
- }
- // This if-clause will trigger if no suitable output chest was found. It's functionally the same as the old fit check for the dispenser, only refactored.
- if (outputInv == null && InvUtils.fits(placeCheckerInv, product)) outputInv = dispInv;
-
- return outputInv;
-
-
- }
-
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SoulboundItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SoulboundItem.java
index b850bed87..1dd8bbff6 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SoulboundItem.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SoulboundItem.java
@@ -5,11 +5,18 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import org.bukkit.inventory.ItemStack;
+/**
+ * Represents an Item that will not drop on death.
+ *
+ * @author TheBusyBiscuit
+ *
+ */
public class SoulboundItem extends SlimefunItem {
public SoulboundItem(Category category, ItemStack item, String id, ItemStack[] recipe) {
super(category, item, id, RecipeType.MAGIC_WORKBENCH, recipe);
}
+
public SoulboundItem(Category category, ItemStack item, String id, RecipeType type, ItemStack[] recipe) {
super(category, item, id, type, recipe);
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java
index 78bbfd972..ef0d493e4 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/Talisman.java
@@ -2,14 +2,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem;
import java.util.ArrayList;
import java.util.List;
-
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
-import me.mrCookieSlime.Slimefun.SlimefunStartup;
-import me.mrCookieSlime.Slimefun.Lists.Categories;
-import me.mrCookieSlime.Slimefun.Lists.RecipeType;
-import me.mrCookieSlime.Slimefun.Objects.Research;
-import me.mrCookieSlime.Slimefun.Setup.Messages;
-import me.mrCookieSlime.Slimefun.api.Slimefun;
+import java.util.Random;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -23,16 +16,24 @@ import org.bukkit.event.player.PlayerEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.Lists.Categories;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.Research;
+import me.mrCookieSlime.Slimefun.Setup.Messages;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+
/**
* @since 4.0
*/
public class Talisman extends SlimefunItem {
- private String suffix;
- private boolean consumable = true;
- private boolean cancel = true;
- private PotionEffect[] effects;
- private int chance = 100;
+ protected String suffix;
+ protected boolean consumable = true;
+ protected boolean cancel = true;
+ protected PotionEffect[] effects;
+ protected int chance = 100;
public Talisman(ItemStack item, String id, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, PotionEffect... effects) {
super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe, new CustomItem(item, consumable ? 4 : 1));
@@ -52,12 +53,16 @@ public class Talisman extends SlimefunItem {
}
public Talisman(ItemStack item, String id, ItemStack[] recipe, String messageSuffix, int chance, PotionEffect... effects) {
- super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe, item);
+ super(Categories.TALISMANS_1, item, id, RecipeType.MAGIC_WORKBENCH, recipe);
this.suffix = messageSuffix;
this.effects = effects;
this.chance = chance;
}
+ protected Talisman(Category category, ItemStack item, String id, ItemStack[] recipe) {
+ super(category, item, id, RecipeType.MAGIC_WORKBENCH, recipe);
+ }
+
public String getSuffix() {
return this.suffix;
}
@@ -78,13 +83,45 @@ public class Talisman extends SlimefunItem {
return this.chance;
}
+ public ItemStack upgrade() {
+ List lore = new ArrayList<>();
+ lore.add("&7&oEnder Infused");
+ lore.add("");
+ for (String line : getItem().getItemMeta().getLore()) {
+ lore.add(line);
+ }
+ return new CustomItem(getItem().getType(), "&5Ender " + ChatColor.stripColor(getItem().getItemMeta().getDisplayName()), lore.toArray(new String[lore.size()]));
+ }
+
+ @Override
+ public void create() {
+ EnderTalisman talisman = new EnderTalisman(this);
+ talisman.register(!isAddonItem());
+ }
+
+ @Override
+ public void install() {
+ EnderTalisman talisman = (EnderTalisman) SlimefunItem.getByItem(upgrade());
+ Research research = Research.getByID(112);
+ if (talisman != null) {
+ Slimefun.addOfficialWikiPage(talisman.getID(), "Talismans");
+ if (research != null) talisman.bindToResearch(research);
+ }
+
+ Slimefun.addOfficialWikiPage(getID(), "Talismans");
+ }
+
+ private static boolean isTalismanMessage(Talisman talisman){
+ return !("").equalsIgnoreCase(talisman.getSuffix());
+ }
+
public static boolean checkFor(Event e, SlimefunItem item) {
if (!(item instanceof Talisman)) {
return false;
}
Talisman talisman = (Talisman) item;
- if (!SlimefunStartup.chance(100, talisman.getChance())) {
+ if (new Random().nextInt(100) < talisman.getChance()) {
return false;
}
@@ -108,39 +145,6 @@ public class Talisman extends SlimefunItem {
else return false;
}
else return false;
-
- }
-
- public ItemStack upgrade() {
- List lore = new ArrayList<>();
- lore.add("&7&oEnder Infused");
- lore.add("");
- for (String line : getItem().getItemMeta().getLore()) {
- lore.add(line);
- }
- return new CustomItem(getItem().getType(), "&5Ender " + ChatColor.stripColor(getItem().getItemMeta().getDisplayName()), lore.toArray(new String[lore.size()]));
- }
-
- @Override
- public void create() {
- EnderTalisman talisman = new EnderTalisman(this);
- talisman.register(true);
- }
-
- @Override
- public void install() {
- EnderTalisman talisman = (EnderTalisman) SlimefunItem.getByItem(upgrade());
- Research research = Research.getByID(112);
- if (talisman != null) {
- Slimefun.addOfficialWikiPage(talisman.getID(), "Talismans");
- if (research != null) talisman.bindToResearch(research);
- }
-
- Slimefun.addOfficialWikiPage(getID(), "Talismans");
- }
-
- private static boolean isTalismanMessage(Talisman talisman){
- return !("").equalsIgnoreCase(talisman.getSuffix());
}
private static void executeTalismanAttributes(Event e, Player p, Talisman talisman){
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java
index 6fc41b9cd..083e24d10 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java
@@ -5,17 +5,12 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
-import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.Damageable;
-import org.bukkit.inventory.meta.ItemMeta;
-import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu.AdvancedMenuClickHandler;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
@@ -23,23 +18,21 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
-public abstract class AContainer extends SlimefunItem {
+public abstract class AContainer extends SlimefunItem implements InventoryBlock {
- public static Map processing = new HashMap();
- public static Map progress = new HashMap();
+ public static Map processing = new HashMap<>();
+ public static Map progress = new HashMap<>();
- protected List recipes = new ArrayList();
+ protected List recipes = new ArrayList<>();
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 31, 36, 37, 38, 39, 40, 41, 42, 43, 44};
private static final int[] border_in = {9, 10, 11, 12, 18, 21, 27, 28, 29, 30};
@@ -48,140 +41,53 @@ public abstract class AContainer extends SlimefunItem {
public AContainer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, id, recipeType, recipe);
- new BlockMenuPreset(id, getInventoryTitle()) {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
- else return getOutputSlots();
- }
- };
+ createPreset(this, getInventoryTitle(), this::constructMenu);
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(id, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getInputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+
+ for (int slot : getOutputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- progress.remove(b);
- processing.remove(b);
- return true;
}
+
+ progress.remove(b);
+ processing.remove(b);
+ return true;
});
this.registerDefaultRecipes();
}
public AContainer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
- super(category, item, id, recipeType, recipe, recipeOutput);
-
- new BlockMenuPreset(id, getInventoryTitle()) {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
- else return getOutputSlots();
- }
- };
-
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
-
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot: getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- for (int slot: getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- }
- processing.remove(b);
- progress.remove(b);
- return true;
- }
- });
-
- this.registerDefaultRecipes();
+ this(category, item, id, recipeType, recipe);
+ this.recipeOutput = recipeOutput;
}
protected void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
- }
- for (int i : border_in) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
- }
- for (int i : border_out) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
- preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ for (int i : border_in) {
+ preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
+ }
+
+ for (int i : border_out) {
+ preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
+ }
+
+ preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
for (int i : getOutputSlots()) {
preset.addMenuClickHandler(i, new AdvancedMenuClickHandler() {
@@ -201,15 +107,31 @@ public abstract class AContainer extends SlimefunItem {
public abstract String getInventoryTitle();
public abstract ItemStack getProgressBar();
- public abstract void registerDefaultRecipes();
public abstract int getEnergyConsumption();
public abstract int getSpeed();
public abstract String getMachineIdentifier();
+ public void registerDefaultRecipes() {
+ // Override this method to register your machine recipes
+ }
+
+ public List getDisplayRecipes() {
+ List displayRecipes = new ArrayList<>(recipes.size() * 2);
+
+ for (MachineRecipe recipe: recipes) {
+ displayRecipes.add(recipe.getInput()[0]);
+ displayRecipes.add(recipe.getOutput()[0]);
+ }
+
+ return displayRecipes;
+ }
+
+ @Override
public int[] getInputSlots() {
return new int[] {19, 20};
}
-
+
+ @Override
public int[] getOutputSlots() {
return new int[] {24, 25};
}
@@ -231,33 +153,8 @@ public abstract class AContainer extends SlimefunItem {
this.registerRecipe(new MachineRecipe(seconds, input, output));
}
- private Inventory inject(Block b) {
- int size = BlockStorage.getInventory(b).toInventory().getSize();
- Inventory inv = Bukkit.createInventory(null, size);
- for (int i = 0; i < size; i++) {
- inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
- }
- for (int slot : getOutputSlots()) {
- inv.setItem(slot, BlockStorage.getInventory(b).getItemInSlot(slot));
- }
- return inv;
- }
-
- protected boolean fits(Block b, ItemStack[] items) {
- return inject(b).addItem(items).isEmpty();
- }
-
- protected void pushItems(Block b, ItemStack[] items) {
- Inventory inv = inject(b);
- inv.addItem(items);
-
- for (int slot : getOutputSlots()) {
- BlockStorage.getInventory(b).replaceExistingItem(slot, inv.getItem(slot));
- }
- }
-
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -265,35 +162,18 @@ public abstract class AContainer extends SlimefunItem {
AContainer.this.tick(b);
}
- @Override
- public void uniqueTick() {
- }
-
@Override
public boolean isSynchronized() {
return false;
}
});
-
- super.register(slimefun);
}
protected void tick(Block b) {
if (isProcessing(b)) {
int timeleft = progress.get(b);
if (timeleft > 0) {
- ItemStack item = getProgressBar().clone();
- ItemMeta im = item.getItemMeta();
- ((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(b).getTicks()));
- im.setDisplayName(" ");
- List lore = new ArrayList();
- lore.add(MachineHelper.getProgress(timeleft, processing.get(b).getTicks()));
- lore.add("");
- lore.add(MachineHelper.getTimeLeft(timeleft / 2));
- im.setLore(lore);
- item.setItemMeta(im);
-
- BlockStorage.getInventory(b).replaceExistingItem(22, item);
+ MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
if (ChargableBlock.isChargable(b)) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
@@ -312,30 +192,31 @@ public abstract class AContainer extends SlimefunItem {
}
else {
MachineRecipe r = null;
- Map found = new HashMap();
- outer:
+ Map found = new HashMap<>();
+
for (MachineRecipe recipe: recipes) {
for (ItemStack input: recipe.getInput()) {
- slots:
for (int slot: getInputSlots()) {
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), input, true)) {
found.put(slot, input.getAmount());
- break slots;
+ break;
}
}
}
if (found.size() == recipe.getInput().length) {
r = recipe;
- break outer;
+ break;
}
else found.clear();
}
if (r != null) {
if (!fits(b, r.getOutput())) return;
+
for (Map.Entry entry: found.entrySet()) {
BlockStorage.getInventory(b).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(entry.getKey()), entry.getValue()));
}
+
processing.put(b, r);
progress.put(b, r.getTicks());
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/ADrill.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/ADrill.java
index ac2752ca7..0e17512ea 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/ADrill.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/ADrill.java
@@ -1,15 +1,10 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
-import java.util.ArrayList;
-import java.util.List;
-
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.Damageable;
-import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
@@ -21,7 +16,6 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
@@ -77,10 +71,6 @@ public abstract class ADrill extends AContainer {
}
}
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
@Override
public boolean canOpen(Block b, Player p) {
if (!(p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true))) {
@@ -96,7 +86,7 @@ public abstract class ADrill extends AContainer {
@Override
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
+ if (flow == ItemTransportFlow.INSERT) return getInputSlots();
else return getOutputSlots();
}
};
@@ -109,23 +99,13 @@ public abstract class ADrill extends AContainer {
@Override
public void registerDefaultRecipes() {}
-
+
+ @Override
protected void tick(Block b) {
if (isProcessing(b)) {
int timeleft = progress.get(b);
if (timeleft > 0) {
- ItemStack item = getProgressBar().clone();
- ItemMeta im = item.getItemMeta();
- ((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(b).getTicks()));
- im.setDisplayName(" ");
- List lore = new ArrayList();
- lore.add(MachineHelper.getProgress(timeleft, processing.get(b).getTicks()));
- lore.add("");
- lore.add(MachineHelper.getTimeLeft(timeleft / 2));
- im.setLore(lore);
- item.setItemMeta(im);
-
- BlockStorage.getInventory(b).replaceExistingItem(22, item);
+ MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
ChargableBlock.addCharge(b, -getEnergyConsumption());
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java
index e66b2f00e..a5a780fd9 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java
@@ -16,10 +16,8 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
@@ -27,24 +25,20 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
public abstract class AFarm extends SlimefunItem {
-
+
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 36, 37, 38, 39, 40, 41, 42, 43, 44};
private static final int[] border_out = {9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35};
public AFarm(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, id, recipeType, recipe);
-
+
new BlockMenuPreset(id, getInventoryTitle()) {
-
+
@Override
public void init() {
constructMenu(this);
}
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@@ -52,100 +46,39 @@ public abstract class AFarm extends SlimefunItem {
@Override
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.WITHDRAW)) return getOutputSlots();
+ if (flow == ItemTransportFlow.WITHDRAW) return getOutputSlots();
return new int[0];
}
};
-
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+
+ registerBlockHandler(id, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getOutputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- return true;
}
+ return true;
});
}
- public AFarm(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
- super(category, item, id, recipeType, recipe, recipeOutput);
-
- new BlockMenuPreset(id, getInventoryTitle()) {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.WITHDRAW)) return getOutputSlots();
- return new int[0];
- }
- };
-
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot: getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- }
- return true;
- }
- });
- }
-
private void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
+
for (int i : border_out) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
-
- preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
-
+
+ preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
+
for (int i : getOutputSlots()) {
preset.addMenuClickHandler(i, new AdvancedMenuClickHandler() {
-
+
@Override
public boolean onClick(Player p, int slot, ItemStack cursor, ClickAction action) {
return false;
@@ -158,13 +91,13 @@ public abstract class AFarm extends SlimefunItem {
});
}
}
-
+
public abstract String getInventoryTitle();
public abstract int getEnergyConsumption();
public abstract boolean canHarvest(Block b);
public abstract ItemStack harvest(Block b);
public abstract int getSize();
-
+
public int[] getOutputSlots() {
return new int[] {19, 20, 21, 22, 23, 24, 25};
}
@@ -173,64 +106,65 @@ public abstract class AFarm extends SlimefunItem {
if (ChargableBlock.isChargable(b)) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
int i = getSize() / 2;
- loop:
- for (int x = -i; x <= i; x++) {
- for (int z = -i; z <= i; z++) {
- Block block = new Location(b.getWorld(), b.getX() + x, b.getY() + 2, b.getZ() + z).getBlock();
- if (canHarvest(block)) {
- ItemStack item = harvest(block);
- if (!fits(block, new ItemStack[] {item})) break loop;
- pushItems(b, new ItemStack[] {item});
- ChargableBlock.addCharge(b, -getEnergyConsumption());
- break loop;
- }
- }
- }
+
+ for (int x = -i; x <= i; x++) {
+ for (int z = -i; z <= i; z++) {
+ Block block = new Location(b.getWorld(), b.getX() + (double) x, b.getY() + 2.0, b.getZ() + (double) z).getBlock();
+ if (canHarvest(block)) {
+ ItemStack item = harvest(block);
+
+ if (!fits(block, item)) {
+ return;
+ }
+
+ pushItems(b, item);
+ ChargableBlock.addCharge(b, -getEnergyConsumption());
+
+ return;
+ }
+ }
+ }
}
}
-
+
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
-
+
@Override
public void tick(Block b, SlimefunItem sf, Config data) {
AFarm.this.tick(b);
}
-
- @Override
- public void uniqueTick() {
- }
-
+
@Override
public boolean isSynchronized() {
return true;
}
});
-
- super.register(slimefun);
}
-
+
private Inventory inject(Block b) {
int size = BlockStorage.getInventory(b).toInventory().getSize();
Inventory inv = Bukkit.createInventory(null, size);
+
for (int i = 0; i < size; i++) {
inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
}
for (int slot: getOutputSlots()) {
inv.setItem(slot, BlockStorage.getInventory(b).getItemInSlot(slot));
}
+
return inv;
}
-
- protected boolean fits(Block b, ItemStack[] items) {
+
+ protected boolean fits(Block b, ItemStack... items) {
return inject(b).addItem(items).isEmpty();
}
-
- protected void pushItems(Block b, ItemStack[] items) {
+
+ protected void pushItems(Block b, ItemStack... items) {
Inventory inv = inject(b);
inv.addItem(items);
-
+
for (int slot: getOutputSlots()) {
BlockStorage.getInventory(b).replaceExistingItem(slot, inv.getItem(slot));
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java
index 00b13c4c8..9512702b9 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java
@@ -1,9 +1,7 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -15,8 +13,6 @@ import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.Damageable;
-import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
@@ -27,9 +23,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
@@ -40,10 +34,10 @@ import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
public abstract class AGenerator extends SlimefunItem {
- public static Map processing = new HashMap();
- public static Map progress = new HashMap();
+ public static Map processing = new HashMap<>();
+ public static Map progress = new HashMap<>();
- private Set recipes = new HashSet();
+ private Set recipes = new HashSet<>();
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 13, 31, 36, 37, 38, 39, 40, 41, 42, 43, 44};
private static final int[] border_in = {9, 10, 11, 12, 18, 21, 27, 28, 29, 30};
@@ -59,10 +53,6 @@ public abstract class AGenerator extends SlimefunItem {
constructMenu(this);
}
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
@Override
public boolean canOpen(Block b, Player p) {
return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
@@ -70,116 +60,51 @@ public abstract class AGenerator extends SlimefunItem {
@Override
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
+ if (flow == ItemTransportFlow.INSERT) return getInputSlots();
else return getOutputSlots();
}
};
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(id, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getInputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+ for (int slot : getOutputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- progress.remove(b.getLocation());
- processing.remove(b.getLocation());
- return true;
}
+ progress.remove(b.getLocation());
+ processing.remove(b.getLocation());
+ return true;
});
this.registerDefaultRecipes();
}
public AGenerator(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
- super(category, item, id, recipeType, recipe, recipeOutput);
-
- new BlockMenuPreset(id, getInventoryTitle()) {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
- else return getOutputSlots();
- }
- };
-
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- }
- progress.remove(b.getLocation());
- processing.remove(b.getLocation());
- return true;
- }
- });
-
- this.registerDefaultRecipes();
+ this(category, item, id, recipeType, recipe);
+ this.recipeOutput = recipeOutput;
}
private void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
+
for (int i : border_in) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),(p, slot, item, action) -> false);
}
+
for (int i: border_out) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
for (int i: getOutputSlots()) {
@@ -197,9 +122,7 @@ public abstract class AGenerator extends SlimefunItem {
});
}
- preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
public abstract String getInventoryTitle();
@@ -228,7 +151,7 @@ public abstract class AGenerator extends SlimefunItem {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new EnergyTicker() {
@Override
@@ -236,18 +159,7 @@ public abstract class AGenerator extends SlimefunItem {
if (isProcessing(l)) {
int timeleft = progress.get(l);
if (timeleft > 0) {
- ItemStack item = getProgressBar().clone();
- ItemMeta im = item.getItemMeta();
- ((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(l).getTicks()));
- im.setDisplayName(" ");
- List lore = new ArrayList();
- lore.add(MachineHelper.getProgress(timeleft, processing.get(l).getTicks()));
- lore.add("");
- lore.add(MachineHelper.getTimeLeft(timeleft / 2));
- im.setLore(lore);
- item.setItemMeta(im);
-
- BlockStorage.getInventory(l).replaceExistingItem(22, item);
+ MachineHelper.updateProgressbar(BlockStorage.getInventory(l), 22, timeleft, processing.get(l).getTicks(), getProgressBar());
if (ChargableBlock.isChargable(l)) {
if (ChargableBlock.getMaxCharge(l) - ChargableBlock.getCharge(l) >= getEnergyProduction()) {
@@ -267,7 +179,7 @@ public abstract class AGenerator extends SlimefunItem {
if (SlimefunManager.isItemSimiliar(fuel, new ItemStack(Material.LAVA_BUCKET), true)
|| SlimefunManager.isItemSimiliar(fuel, SlimefunItems.BUCKET_OF_FUEL, true)
|| SlimefunManager.isItemSimiliar(fuel, SlimefunItems.BUCKET_OF_OIL, true)) {
- pushItems(l, new ItemStack[] {new ItemStack(Material.BUCKET)});
+ pushItems(l, new ItemStack(Material.BUCKET));
}
BlockStorage.getInventory(l).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
@@ -277,25 +189,17 @@ public abstract class AGenerator extends SlimefunItem {
}
}
else {
- MachineFuel r = null;
- Map found = new HashMap();
- outer:
- for (MachineFuel recipe: recipes) {
- for (int slot: getInputSlots()) {
- if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(l).getItemInSlot(slot), recipe.getInput(), true)) {
- found.put(slot, recipe.getInput().getAmount());
- r = recipe;
- break outer;
- }
- }
- }
+ BlockMenu menu = BlockStorage.getInventory(l);
+ Map found = new HashMap<>();
+ MachineFuel fuel = findRecipe(menu, found);
- if (r != null) {
+ if (fuel != null) {
for (Map.Entry entry: found.entrySet()) {
- BlockStorage.getInventory(l).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(l).getItemInSlot(entry.getKey()), entry.getValue()));
+ menu.replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(menu.getItemInSlot(entry.getKey()), entry.getValue()));
}
- processing.put(l, r);
- progress.put(l, r.getTicks());
+
+ processing.put(l, fuel);
+ progress.put(l, fuel.getTicks());
}
return 0;
}
@@ -306,8 +210,19 @@ public abstract class AGenerator extends SlimefunItem {
return false;
}
});
-
- super.register(slimefun);
+ }
+
+ private MachineFuel findRecipe(BlockMenu menu, Map found) {
+ for (MachineFuel recipe: recipes) {
+ for (int slot: getInputSlots()) {
+ if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), recipe.getInput(), true)) {
+ found.put(slot, recipe.getInput().getAmount());
+ return recipe;
+ }
+ }
+ }
+
+ return null;
}
public Set getFuelTypes() {
@@ -326,7 +241,7 @@ public abstract class AGenerator extends SlimefunItem {
return inv;
}
- protected void pushItems(Location l, ItemStack[] items) {
+ protected void pushItems(Location l, ItemStack... items) {
Inventory inv = inject(l);
inv.addItem(items);
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java
index f6bb02d69..933360392 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java
@@ -1,12 +1,12 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Optional;
+import java.util.Random;
import java.util.Set;
+import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.Location;
@@ -16,23 +16,21 @@ import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
-import me.mrCookieSlime.Slimefun.SlimefunStartup;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.energy.EnergyTicker;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
@@ -63,7 +61,9 @@ public abstract class AReactor extends SlimefunItem {
private static final int[] border_1 = {9, 10, 11, 18, 20, 27, 29, 36, 38, 45, 46, 47};
private static final int[] border_2 = {15, 16, 17, 24, 26, 33, 35, 42, 44, 51, 52, 53};
private static final int[] border_3 = {30, 31, 32, 39, 41, 48, 50};
- private static final int[] border_4 = {25, 34, 43}; // No coolant border
+
+ // No coolant border
+ private static final int[] border_4 = {25, 34, 43};
private static final int infoSlot = 49;
public AReactor(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
@@ -82,6 +82,7 @@ public abstract class AReactor extends SlimefunItem {
if (BlockStorage.getLocationInfo(b.getLocation(), "reactor-mode") == null){
BlockStorage.addBlockInfo(b, "reactor-mode", "generator");
}
+
if (!BlockStorage.hasBlockInfo(b) || BlockStorage.getLocationInfo(b.getLocation(), "reactor-mode").equals("generator")) {
menu.replaceExistingItem(4, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTM0M2NlNThkYTU0Yzc5OTI0YTJjOTMzMWNmYzQxN2ZlOGNjYmJlYTliZTQ1YTdhYzg1ODYwYTZjNzMwIn19fQ=="), "&7Focus: &eElectricity", "", "&6Your Reactor will focus on Power Generation", "&6If your Energy Network doesn't need Power", "&6it will not produce any either", "", "&7> Click to change the Focus to &eProduction"));
menu.addMenuClickHandler(4, (p, slot, item, action) -> {
@@ -98,16 +99,18 @@ public abstract class AReactor extends SlimefunItem {
return false;
});
}
- BlockMenu ap = getAccessPort(b.getLocation());
- if(ap != null) {
+
+ BlockMenu port = getAccessPort(b.getLocation());
+ if (port != null) {
menu.replaceExistingItem(infoSlot, new CustomItem(new ItemStack(Material.GREEN_WOOL), "&7Access Port", "", "&6Detected", "", "&7> Click to view Access Port"));
menu.addMenuClickHandler(infoSlot, (p, slot, item, action) -> {
- ap.open(p);
+ port.open(p);
newInstance(menu, b);
return false;
});
- } else {
+ }
+ else {
menu.replaceExistingItem(infoSlot, new CustomItem(new ItemStack(Material.RED_WOOL), "&7Access Port", "", "&cNot detected", "", "&7Access Port must be", "&7placed 3 blocks above", "&7a reactor!"));
menu.addMenuClickHandler(infoSlot, (p, slot, item, action) -> {
newInstance(menu, b);
@@ -117,6 +120,7 @@ public abstract class AReactor extends SlimefunItem {
}
} catch(Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured when creating a Reactor Menu for Slimefun " + Slimefun.getVersion(), x);
}
}
@@ -132,40 +136,35 @@ public abstract class AReactor extends SlimefunItem {
}
};
- registerBlockHandler(id, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getFuelSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- for (int slot : getCoolantSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(id, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getFuelSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+
+ for (int slot : getCoolantSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+
+ for (int slot : getOutputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- progress.remove(b.getLocation());
- processing.remove(b.getLocation());
- ReactorHologram.remove(b.getLocation());
- return true;
}
+
+ progress.remove(b.getLocation());
+ processing.remove(b.getLocation());
+ ReactorHologram.remove(b.getLocation());
+ return true;
});
this.registerDefaultRecipes();
@@ -173,35 +172,23 @@ public abstract class AReactor extends SlimefunItem {
private void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
for (int i : border_1) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
for (int i : border_3) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.GREEN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.GREEN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
- preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
- preset.addItem(1, new CustomItem(SlimefunItems.URANIUM, "&7Fuel Slot", "", "&rThis Slot accepts radioactive Fuel such as:", "&2Uranium &ror &aNeptunium"),
- (p, slot, item, action) -> false
- );
+ preset.addItem(1, new CustomItem(SlimefunItems.URANIUM, "&7Fuel Slot", "", "&rThis Slot accepts radioactive Fuel such as:", "&2Uranium &ror &aNeptunium"), (p, slot, item, action) -> false);
for (int i : border_2) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
if (needsCooling()) {
@@ -211,9 +198,7 @@ public abstract class AReactor extends SlimefunItem {
preset.addItem(7, new CustomItem(new ItemStack(Material.BARRIER), "&bCoolant Slot", "", "&rThis Slot accepts Coolant Cells"));
for (int i : border_4) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.BARRIER), "&cNo Coolant Required"),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.BARRIER), "&cNo Coolant Required"), (p, slot, item, action) -> false);
}
}
}
@@ -261,10 +246,10 @@ public abstract class AReactor extends SlimefunItem {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new EnergyTicker() {
- Set explode = new HashSet();
+ private Set explode = new HashSet<>();
@Override
public double generateEnergy(final Location l, SlimefunItem sf, Config data) {
@@ -283,22 +268,11 @@ public abstract class AReactor extends SlimefunItem {
if (space >= produced || !BlockStorage.getLocationInfo(l, "reactor-mode").equals("generator")) {
progress.put(l, timeleft - 1);
- Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
- if (!l.getBlock().getRelative(cooling[CSCoreLib.randomizer().nextInt(cooling.length)]).isLiquid()) explode.add(l);
+ Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
+ if (!l.getBlock().getRelative(cooling[new Random().nextInt(cooling.length)]).isLiquid()) explode.add(l);
});
- ItemStack item = getProgressBar().clone();
- ItemMeta im = item.getItemMeta();
- im.setDisplayName(" ");
- List lore = new ArrayList();
- lore.add(MachineHelper.getProgress(timeleft, processing.get(l).getTicks()));
- lore.add(MachineHelper.getCoolant(timeleft, processing.get(l).getTicks()));
- lore.add("");
- lore.add(MachineHelper.getTimeLeft(timeleft / 2));
- im.setLore(lore);
- item.setItemMeta(im);
-
- BlockStorage.getInventory(l).replaceExistingItem(22, item);
+ MachineHelper.updateProgressbar(BlockStorage.getInventory(l), 22, timeleft, processing.get(l).getTicks(), getProgressBar());
if (needsCooling()) {
boolean coolant = (processing.get(l).getTicks() - timeleft) % 25 == 0;
@@ -352,40 +326,19 @@ public abstract class AReactor extends SlimefunItem {
}
}
else {
- MachineFuel r = null;
- Map found = new HashMap();
+ BlockMenu menu = BlockStorage.getInventory(l);
+ Map found = new HashMap<>();
+ MachineFuel fuel = findRecipe(menu, found);
- if (port != null) {
- refill:
- for (int slot: getFuelSlots()) {
- for (MachineFuel recipe: recipes) {
- if (SlimefunManager.isItemSimiliar(port.getItemInSlot(slot), recipe.getInput(), true)) {
- if (pushItems(l, new CustomItem(port.getItemInSlot(slot), 1), getFuelSlots()) == null) {
- port.replaceExistingItem(slot, InvUtils.decreaseItem(port.getItemInSlot(slot), 1));
- break refill;
- }
- }
- }
- }
- }
+ if (port != null) restockCoolant(l, port);
- outer:
- for (MachineFuel recipe: recipes) {
- for (int slot: getFuelSlots()) {
- if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(l).getItemInSlot(slot), recipe.getInput(), true)) {
- found.put(slot, recipe.getInput().getAmount());
- r = recipe;
- break outer;
- }
- }
- }
-
- if (r != null) {
+ if (fuel != null) {
for (Map.Entry entry: found.entrySet()) {
- BlockStorage.getInventory(l).replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(BlockStorage.getInventory(l).getItemInSlot(entry.getKey()), entry.getValue()));
+ menu.replaceExistingItem(entry.getKey(), InvUtils.decreaseItem(menu.getItemInSlot(entry.getKey()), entry.getValue()));
}
- processing.put(l, r);
- progress.put(l, r.getTicks());
+
+ processing.put(l, fuel);
+ progress.put(l, fuel.getTicks());
}
return 0;
}
@@ -397,9 +350,7 @@ public abstract class AReactor extends SlimefunItem {
if (explosion) {
BlockStorage.getInventory(l).close();
- Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> {
- ReactorHologram.remove(l);
- }, 0);
+ Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> ReactorHologram.remove(l), 0);
explode.remove(l);
processing.remove(l);
@@ -408,8 +359,30 @@ public abstract class AReactor extends SlimefunItem {
return explosion;
}
});
-
- super.register(slimefun);
+ }
+
+ private void restockCoolant(Location l, BlockMenu port) {
+ for (int slot: getFuelSlots()) {
+ for (MachineFuel recipe: recipes) {
+ if (SlimefunManager.isItemSimiliar(port.getItemInSlot(slot), recipe.getInput(), true) && pushItems(l, new CustomItem(port.getItemInSlot(slot), 1), getFuelSlots()) == null) {
+ port.replaceExistingItem(slot, InvUtils.decreaseItem(port.getItemInSlot(slot), 1));
+ return;
+ }
+ }
+ }
+ }
+
+ private MachineFuel findRecipe(BlockMenu menu, Map found) {
+ for (MachineFuel recipe: recipes) {
+ for (int slot: getInputSlots()) {
+ if (SlimefunManager.isItemSimiliar(menu.getItemInSlot(slot), recipe.getInput(), true)) {
+ found.put(slot, recipe.getInput().getAmount());
+ return recipe;
+ }
+ }
+ }
+
+ return null;
}
private Inventory inject(Location l) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineFuel.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineFuel.java
index cff6d77b3..ad14d4ff4 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineFuel.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineFuel.java
@@ -4,9 +4,9 @@ import org.bukkit.inventory.ItemStack;
public class MachineFuel {
- int seconds;
- ItemStack fuel;
- ItemStack output;
+ private int seconds;
+ private ItemStack fuel;
+ private ItemStack output;
public MachineFuel(int seconds, ItemStack fuel) {
this.seconds = seconds * 2;
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java
index aef06cf67..90c042baa 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineHelper.java
@@ -1,25 +1,33 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems;
+import java.util.ArrayList;
+import java.util.List;
+
import org.bukkit.ChatColor;
import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.Damageable;
+import org.bukkit.inventory.meta.ItemMeta;
-public class MachineHelper {
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
+
+public final class MachineHelper {
- public static String getTimeLeft(int l) {
+ private MachineHelper() {}
+
+ public static String getTimeLeft(int seconds) {
String timeleft = "";
- final int minutes = (int) (l / 60L);
+ final int minutes = (int) (seconds / 60L);
if (minutes > 0) {
timeleft = String.valueOf(timeleft) + minutes + "m ";
}
- l -= minutes * 60;
- final int seconds = (int)l;
+ seconds -= minutes * 60;
timeleft = String.valueOf(timeleft) + seconds + "s";
return ChatColor.translateAlternateColorCodes('&', "&7" + timeleft + " left");
}
public static String getProgress(int time, int total) {
StringBuilder progress = new StringBuilder();
- float percentage = Math.round(((((total - time) * 100.0f) / total) * 100.0f) / 100.0f);
+ float percentage = Math.round(((((total - time) * 100.0F) / total) * 100.0F) / 100.0F);
if (percentage < 16.0F) progress.append("&4");
else if (percentage < 32.0F) progress.append("&c");
@@ -47,7 +55,7 @@ public class MachineHelper {
public static String getCoolant(int time, int total) {
int passed = ((total - time) % 25);
StringBuilder progress = new StringBuilder();
- float percentage = Math.round(((((25 - passed) * 100.0f) / 25) * 100.0f) / 100.0f);
+ float percentage = Math.round(((((25 - passed) * 100.0F) / 25) * 100.0F) / 100.0F);
if (percentage < 33.0F) progress.append("&9");
else if (percentage < 66.0F) progress.append("&1");
@@ -71,11 +79,26 @@ public class MachineHelper {
public static float getPercentage(int time, int total) {
int passed = ((total - time) % 25);
- return Math.round(((((25 - passed) * 100.0f) / 25) * 100.0f) / 100.0f);
+ return Math.round(((((25 - passed) * 100.0F) / 25) * 100.0F) / 100.0F);
}
public static short getDurability(ItemStack item, int timeleft, int max) {
return (short) ((item.getType().getMaxDurability() / max) * timeleft);
}
+
+ public static void updateProgressbar(BlockMenu menu, int slot, int timeleft, int time, ItemStack indicator) {
+ ItemStack item = indicator.clone();
+ ItemMeta im = item.getItemMeta();
+ ((Damageable) im).setDamage(getDurability(item, timeleft, time));
+ im.setDisplayName(" ");
+ List lore = new ArrayList<>();
+ lore.add(getProgress(timeleft, time));
+ lore.add("");
+ lore.add(getTimeLeft(timeleft / 2));
+ im.setLore(lore);
+ item.setItemMeta(im);
+
+ menu.replaceExistingItem(slot, item);
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineRecipe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineRecipe.java
index 9f87a0386..8f8bc18f0 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineRecipe.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/MachineRecipe.java
@@ -4,9 +4,9 @@ import org.bukkit.inventory.ItemStack;
public class MachineRecipe {
- int ticks;
- ItemStack[] input;
- ItemStack[] output;
+ private int ticks;
+ private ItemStack[] input;
+ private ItemStack[] output;
public MachineRecipe(int seconds, ItemStack[] input, ItemStack[] output) {
this.ticks = seconds * 2;
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/Teleporter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/Teleporter.java
index 5fcc59332..62500edb2 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/Teleporter.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/Teleporter.java
@@ -30,6 +30,6 @@ public abstract class Teleporter extends SlimefunItem {
});
}
- public abstract void onInteract(Player p, Block b) throws Exception;
+ public abstract void onInteract(Player p, Block b);
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/AdvancedCargoOutputNode.java
similarity index 93%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/AdvancedCargoOutputNode.java
index 8f4ee7b96..6bef490d0 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/AdvancedCargoOutputNode.java
@@ -1,4 +1,6 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo;
+
+import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -19,6 +21,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
@@ -105,7 +108,7 @@ public class AdvancedCargoOutputNode extends SlimefunItem {
menu.addMenuClickHandler(41, (p, slot, item, action) -> {
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
if (channel < 0) {
- if (CargoNet.EXTRA_CHANNELS) channel = 16;
+ if (CargoNet.extraChannels) channel = 16;
else channel = 15;
}
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
@@ -132,7 +135,7 @@ public class AdvancedCargoOutputNode extends SlimefunItem {
menu.addMenuClickHandler(43, (p, slot, item, action) -> {
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
- if (CargoNet.EXTRA_CHANNELS) {
+ if (CargoNet.extraChannels) {
if (channeln > 16) channeln = 0;
}
else {
@@ -144,8 +147,8 @@ public class AdvancedCargoOutputNode extends SlimefunItem {
return false;
});
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating the Inventory of an Advanced Cargo Output Node for Slimefun " + Slimefun.getVersion(), x);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoInputNode.java
similarity index 93%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoInputNode.java
index d45135d47..1e7b0aae5 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoInputNode.java
@@ -1,6 +1,9 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo;
import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
+
+import java.util.logging.Level;
+
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
@@ -19,6 +22,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
@@ -63,6 +67,7 @@ public class CargoInputNode extends SlimefunItem {
Damageable dmg = (Damageable) is.getItemMeta();
dmg.setDamage(20);
is.setItemMeta((ItemMeta) dmg);
+
menu.replaceExistingItem(16, new CustomItem(is, "&7Include Sub-IDs/Durability: &4\u2718", "", "&e> Click to toggle whether the Durability has to match"));
menu.addMenuClickHandler(16, (p, slot, item, action) -> {
BlockStorage.addBlockInfo(b, "filter-durability", "true");
@@ -75,6 +80,7 @@ public class CargoInputNode extends SlimefunItem {
Damageable dmg = (Damageable) is.getItemMeta();
dmg.setDamage(20);
is.setItemMeta((ItemMeta) dmg);
+
menu.replaceExistingItem(16, new CustomItem(is, "&7Include Sub-IDs/Durability: &2\u2714", "", "&e> Click to toggle whether the Durability has to match"));
menu.addMenuClickHandler(16, (p, slot, item, action) -> {
BlockStorage.addBlockInfo(b, "filter-durability", "false");
@@ -121,7 +127,7 @@ public class CargoInputNode extends SlimefunItem {
menu.addMenuClickHandler(41, (p, slot, item, action) -> {
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
if (channel < 0) {
- if (CargoNet.EXTRA_CHANNELS) channel = 16;
+ if (CargoNet.extraChannels) channel = 16;
else channel = 15;
}
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
@@ -148,7 +154,7 @@ public class CargoInputNode extends SlimefunItem {
menu.addMenuClickHandler(43, (p, slot, item, action) -> {
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
- if (CargoNet.EXTRA_CHANNELS) {
+ if (CargoNet.extraChannels) {
if (channeln > 16) channeln = 0;
}
else {
@@ -160,8 +166,8 @@ public class CargoInputNode extends SlimefunItem {
return false;
});
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating a Cargo Input Node for Slimefun " + Slimefun.getVersion(), x);
}
}
@@ -196,6 +202,7 @@ public class CargoInputNode extends SlimefunItem {
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
BlockMenu inv = BlockStorage.getInventory(b);
+
if (inv != null) {
for (int slot : getInputSlots()) {
if (inv.getItemInSlot(slot) != null) {
@@ -211,14 +218,10 @@ public class CargoInputNode extends SlimefunItem {
protected void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
- preset.addItem(2, new CustomItem(new ItemStack(Material.PAPER), "&3Items", "", "&bPut in all Items you want to", "&bblacklist/whitelist"),
- (p, slot, item, action) -> false
- );
+ preset.addItem(2, new CustomItem(new ItemStack(Material.PAPER), "&3Items", "", "&bPut in all Items you want to", "&bblacklist/whitelist"), (p, slot, item, action) -> false);
}
public int[] getInputSlots() {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java
new file mode 100644
index 000000000..817715d95
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoManagerBlock.java
@@ -0,0 +1,66 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo;
+
+import org.bukkit.ChatColor;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
+import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
+import me.mrCookieSlime.Slimefun.holograms.CargoHologram;
+
+public class CargoManagerBlock extends SlimefunItem {
+
+ public CargoManagerBlock(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+
+ SlimefunItem.registerBlockHandler("CARGO_MANAGER", (p, b, tool, reason) -> {
+ CargoHologram.remove(b);
+ return true;
+ });
+ }
+
+ @Override
+ public void preRegister() {
+ addItemHandler(new BlockTicker() {
+
+ @Override
+ public void tick(Block b, SlimefunItem item, Config data) {
+ CargoNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b);
+ }
+
+ @Override
+ public boolean isSynchronized() {
+ return false;
+ }
+
+ }, new ItemInteractionHandler() {
+
+ @Override
+ public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) {
+ if (e.getClickedBlock() == null) return false;
+ String item = BlockStorage.checkID(e.getClickedBlock());
+ if (item == null || !item.equals(getID())) return false;
+ e.setCancelled(true);
+
+ if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "visualizer") == null) {
+ BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", "disabled");
+ p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&4\u2718"));
+ }
+ else {
+ BlockStorage.addBlockInfo(e.getClickedBlock(), "visualizer", null);
+ p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cCargo Net Visualizer: " + "&2\u2714"));
+ }
+ return true;
+ }
+ });
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoOutputNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoOutputNode.java
similarity index 91%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoOutputNode.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoOutputNode.java
index 60d0b24eb..bedb1bc78 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoOutputNode.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/cargo/CargoOutputNode.java
@@ -1,4 +1,6 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.cargo;
+
+import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -17,6 +19,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Setup.Messages;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet;
@@ -40,12 +43,11 @@ public class CargoOutputNode extends SlimefunItem {
@Override
public void newInstance(final BlockMenu menu, final Block b) {
try {
-
menu.replaceExistingItem(12, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjI1OTliZDk4NjY1OWI4Y2UyYzQ5ODg1MjVjOTRlMTlkZGQzOWZhZDA4YTM4Mjg0YTE5N2YxYjcwNjc1YWNjIn19fQ=="), "&bChannel", "", "&e> Click to decrease the Channel ID by 1"));
menu.addMenuClickHandler(12, (p, slot, item, action) -> {
int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
if (channel < 0) {
- if (CargoNet.EXTRA_CHANNELS) channel = 16;
+ if (CargoNet.extraChannels) channel = 16;
else channel = 15;
}
BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
@@ -72,7 +74,7 @@ public class CargoOutputNode extends SlimefunItem {
menu.addMenuClickHandler(14, (p, slot, item, action) -> {
int channeln = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
- if (CargoNet.EXTRA_CHANNELS) {
+ if (CargoNet.extraChannels) {
if (channeln > 16) channeln = 0;
}
else {
@@ -84,8 +86,8 @@ public class CargoOutputNode extends SlimefunItem {
return false;
});
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while creating a Cargo Output Node for Slimefun " + Slimefun.getVersion(), x);
}
}
@@ -121,9 +123,7 @@ public class CargoOutputNode extends SlimefunItem {
protected void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/AutonomousMachineHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/AutonomousMachineHandler.java
deleted file mode 100644
index 608729ff1..000000000
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/AutonomousMachineHandler.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
-
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-
-import org.bukkit.block.Block;
-import org.bukkit.block.Dispenser;
-import org.bukkit.event.block.BlockDispenseEvent;
-
-public abstract class AutonomousMachineHandler extends ItemHandler {
-
- @Override
- public String toCodename() {
- return "AutonomousMachineHandler";
- }
-
- public abstract boolean onBlockDispense(BlockDispenseEvent e, Block dispenser, Dispenser d, Block block, Block chest, SlimefunItem machine);
-
-}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/AutonomousToolHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/AutonomousToolHandler.java
deleted file mode 100644
index 8c42cecdd..000000000
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/AutonomousToolHandler.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
-
-import org.bukkit.block.Block;
-import org.bukkit.block.Dispenser;
-import org.bukkit.event.block.BlockDispenseEvent;
-
-public abstract class AutonomousToolHandler extends ItemHandler {
-
- @Override
- public String toCodename() {
- return "AutonomousToolHandler";
- }
-
- public abstract boolean onBlockDispense(BlockDispenseEvent e, Block dispenser, Dispenser d, Block block, Block chest, int i);
-
-}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockBreakHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockBreakHandler.java
index 89a79e011..223308deb 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockBreakHandler.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockBreakHandler.java
@@ -1,16 +1,6 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
-import java.util.List;
-
-import org.bukkit.event.block.BlockBreakEvent;
-import org.bukkit.inventory.ItemStack;
-
-public abstract class BlockBreakHandler extends ItemHandler {
+@Deprecated
+public abstract class BlockBreakHandler extends ItemHandler implements me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler {
- public abstract boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops);
-
- @Override
- public String toCodename() {
- return "BlockBreakHandler";
- }
-}
+}
\ No newline at end of file
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockPlaceHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockPlaceHandler.java
index 50505b6b4..9cde2fd85 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockPlaceHandler.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockPlaceHandler.java
@@ -1,14 +1,5 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
-import org.bukkit.event.block.BlockPlaceEvent;
-import org.bukkit.inventory.ItemStack;
-
-public abstract class BlockPlaceHandler extends ItemHandler {
-
- public abstract boolean onBlockPlace(BlockPlaceEvent e, ItemStack item);
-
- @Override
- public String toCodename() {
- return "BlockPlaceHandler";
- }
-}
+@Deprecated
+public abstract class BlockPlaceHandler extends ItemHandler implements me.mrCookieSlime.Slimefun.Objects.handlers.BlockPlaceHandler {
+}
\ No newline at end of file
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockTicker.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockTicker.java
index 2ebb5b937..88a293d2f 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockTicker.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BlockTicker.java
@@ -1,29 +1,5 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
-import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-
-import org.bukkit.block.Block;
-
-public abstract class BlockTicker extends ItemHandler {
-
- public boolean unique = true;
-
- public void update() {
- if (unique) {
- uniqueTick();
- unique = false;
- }
- }
-
-
- public abstract boolean isSynchronized();
- public abstract void uniqueTick();
- public abstract void tick(Block b, SlimefunItem item, Config data);
-
- @Override
- public String toCodename() {
- return "BlockTicker";
- }
-
+@Deprecated
+public abstract class BlockTicker extends me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker {
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BowShootHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BowShootHandler.java
deleted file mode 100644
index 2dc381ccf..000000000
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/BowShootHandler.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
-
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-
-public abstract class BowShootHandler extends ItemHandler {
-
- public abstract boolean onHit(EntityDamageByEntityEvent e, LivingEntity n);
-
- @Override
- public String toCodename() {
- return "BowShootHandler";
- }
-}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/ItemHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/ItemHandler.java
index ce3bcc077..8d9913f5b 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/ItemHandler.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/ItemHandler.java
@@ -1,6 +1,6 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
-public abstract class ItemHandler {
-
- public abstract String toCodename();
+@Deprecated
+public abstract class ItemHandler implements me.mrCookieSlime.Slimefun.Objects.handlers.ItemHandler {
+
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/ItemInteractionHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/ItemInteractionHandler.java
index 75fb6bb47..66c32c8c3 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/ItemInteractionHandler.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/ItemInteractionHandler.java
@@ -1,17 +1,5 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
-import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
-
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-
-public abstract class ItemInteractionHandler extends ItemHandler {
-
- public abstract boolean onRightClick(ItemUseEvent e, Player p, ItemStack item);
-
- @Override
- public String toCodename() {
- return "ItemInteractionHandler";
- }
-
-}
+@Deprecated
+public abstract class ItemInteractionHandler extends ItemHandler implements me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler {
+}
\ No newline at end of file
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/MultiBlockInteractionHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/MultiBlockInteractionHandler.java
index 2fdc01480..7bf5b9069 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/MultiBlockInteractionHandler.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/handlers/MultiBlockInteractionHandler.java
@@ -1,16 +1,5 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers;
-import me.mrCookieSlime.Slimefun.Objects.MultiBlock;
-
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-
-public abstract class MultiBlockInteractionHandler extends ItemHandler {
-
- public abstract boolean onInteract(Player p, MultiBlock mb, Block b);
-
- @Override
- public String toCodename() {
- return "MultiBlockInteractionHandler";
- }
-}
+@Deprecated
+public abstract class MultiBlockInteractionHandler extends ItemHandler implements me.mrCookieSlime.Slimefun.Objects.handlers.MultiBlockInteractionHandler {
+}
\ No newline at end of file
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/DamageableItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/DamageableItem.java
new file mode 100644
index 000000000..0c0ace468
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/DamageableItem.java
@@ -0,0 +1,34 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
+
+import org.bukkit.Material;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.Damageable;
+import org.bukkit.inventory.meta.ItemMeta;
+
+@FunctionalInterface
+public interface DamageableItem {
+
+ boolean isDamageable();
+
+ default void damageItem(Player p, ItemStack item) {
+ if (item != null && item.getType() != null && item.getType() != Material.AIR && item.getAmount() > 0 && isDamageable()) {
+ if (item.getEnchantments().containsKey(Enchantment.DURABILITY) && Math.random() * 100 <= (60 + Math.floorDiv(40, (item.getEnchantmentLevel(Enchantment.DURABILITY) + 1)))) {
+ return;
+ }
+
+ ItemMeta meta = item.getItemMeta();
+ Damageable damageable = (Damageable) meta;
+
+ if (damageable.getDamage() >= item.getType().getMaxDurability()) {
+ item.setAmount(0);
+ }
+ else {
+ damageable.setDamage(damageable.getDamage() + 1);
+ item.setItemMeta(meta);
+ }
+ }
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/InventoryBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/InventoryBlock.java
new file mode 100644
index 000000000..b6dddcef2
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/InventoryBlock.java
@@ -0,0 +1,77 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
+
+import java.util.function.Consumer;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Math.Calculator;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
+import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
+
+public interface InventoryBlock {
+
+ int[] getInputSlots();
+ int[] getOutputSlots();
+
+ default void createPreset(SlimefunItem item, String title, Consumer setup) {
+ new BlockMenuPreset(item.getID(), title) {
+
+ @Override
+ public void init() {
+ setup.accept(this);
+ }
+
+ @Override
+ public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
+ if (flow == ItemTransportFlow.INSERT) return getInputSlots();
+ else return getOutputSlots();
+ }
+
+ @Override
+ public boolean canOpen(Block b, Player p) {
+ return p.hasPermission("slimefun.inventory.bypass") || (SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), Action.ACCESS_INVENTORIES) && Slimefun.hasUnlocked(p, item, false));
+ }
+ };
+ }
+
+ default Inventory inject(Block b) {
+ int size = getOutputSlots().length;
+ Inventory inv = Bukkit.createInventory(null, Calculator.formToLine(size) * 9);
+
+ for (int i = 0; i < inv.getSize(); i++) {
+ if (i < size) {
+ inv.setItem(i, BlockStorage.getInventory(b).getItemInSlot(getOutputSlots()[i]));
+ }
+ else {
+ inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
+ }
+ }
+
+ return inv;
+ }
+
+ default boolean fits(Block b, ItemStack... items) {
+ return inject(b).addItem(items).isEmpty();
+ }
+
+ default void pushItems(Block b, ItemStack... items) {
+ Inventory inv = inject(b);
+ inv.addItem(items);
+
+ for (int i = 0; i < getOutputSlots().length; i++) {
+ BlockStorage.getInventory(b).replaceExistingItem(getOutputSlots()[i], inv.getItem(i));
+ }
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/NotPlaceable.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/NotPlaceable.java
new file mode 100644
index 000000000..e06465fac
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/NotPlaceable.java
@@ -0,0 +1,5 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
+
+public interface NotPlaceable {
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/RecipeDisplayItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/RecipeDisplayItem.java
new file mode 100644
index 000000000..a52363b7f
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/interfaces/RecipeDisplayItem.java
@@ -0,0 +1,12 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces;
+
+import java.util.List;
+
+import org.bukkit.inventory.ItemStack;
+
+@FunctionalInterface
+public interface RecipeDisplayItem {
+
+ List getDisplayRecipes();
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java
new file mode 100644
index 000000000..212b557ae
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/DietCookie.java
@@ -0,0 +1,36 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import org.bukkit.ChatColor;
+import org.bukkit.Sound;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.potion.PotionEffectType;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class DietCookie extends SimpleSlimefunItem {
+
+ public DietCookie(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public ItemConsumptionHandler getItemHandler() {
+ return (e, p, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ p.sendMessage(ChatColor.YELLOW + "You feel so light...");
+ p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1);
+
+ if (p.hasPotionEffect(PotionEffectType.LEVITATION)) p.removePotionEffect(PotionEffectType.LEVITATION);
+ p.addPotionEffect(PotionEffectType.LEVITATION.createEffect(60, 1));
+
+ return true;
+ }
+ return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java
new file mode 100644
index 000000000..9e3f8a116
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosivePickaxe.java
@@ -0,0 +1,105 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.List;
+
+import org.bukkit.Effect;
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
+
+import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.HandledBlock;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+
+public class ExplosivePickaxe extends SimpleSlimefunItem implements NotPlaceable, DamageableItem {
+
+ private String[] blacklist;
+ private boolean damageOnUse;
+
+ public ExplosivePickaxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
+ super(category, item, id, recipeType, recipe, keys, values);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(item, SlimefunItems.EXPLOSIVE_PICKAXE, true)) {
+ e.setCancelled(true);
+ e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F);
+ e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F);
+ for (int x = -1; x <= 1; x++) {
+ for (int y = -1; y <= 1; y++) {
+ for (int z = -1; z <= 1; z++) {
+ Block b = e.getBlock().getRelative(x, y, z);
+
+ if (b.getType() != Material.AIR && !b.isLiquid() && !StringUtils.equals(b.getType().toString(), blacklist) && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), Action.BREAK_BLOCK)) {
+ if (SlimefunPlugin.getHooks().isCoreProtectInstalled()) {
+ SlimefunPlugin.getHooks().getCoreProtectAPI().logRemoval(e.getPlayer().getName(), b.getLocation(), b.getType(), b.getBlockData());
+ }
+
+ b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
+ SlimefunItem sfItem = BlockStorage.check(b);
+ boolean allow = false;
+
+ if (sfItem != null && !(sfItem instanceof HandledBlock)) {
+ if (SlimefunPlugin.getUtilities().blockHandlers.containsKey(sfItem.getID())) {
+ allow = SlimefunPlugin.getUtilities().blockHandlers.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK);
+ }
+ if (allow) {
+ drops.add(BlockStorage.retrieve(e.getBlock()));
+ }
+ }
+ else if (b.getType() == Material.PLAYER_HEAD) {
+ b.breakNaturally();
+ }
+ else if (b.getType().name().endsWith("_SHULKER_BOX")) {
+ b.breakNaturally();
+ }
+ else {
+ for (ItemStack drop: b.getDrops()) {
+ b.getWorld().dropItemNaturally(b.getLocation(), (b.getType().toString().endsWith("_ORE") && b.getType() != Material.IRON_ORE && b.getType() != Material.GOLD_ORE) ? new CustomItem(drop, fortune): drop);
+ }
+ b.setType(Material.AIR);
+ }
+
+ damageItem(e.getPlayer(), item);
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+ else return false;
+ };
+ }
+
+ @Override
+ public void postRegister() {
+ damageOnUse = ((boolean) Slimefun.getItemValue(getID(), "damage-on-use"));
+
+ List> list = (List>) Slimefun.getItemValue(getID(), "unbreakable-blocks");
+ blacklist = list.toArray(new String[list.size()]);
+ }
+
+ @Override
+ public boolean isDamageable() {
+ return damageOnUse;
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java
new file mode 100644
index 000000000..69b2c432e
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/ExplosiveShovel.java
@@ -0,0 +1,84 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import org.bukkit.Effect;
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
+
+import io.github.thebusybiscuit.cscorelib2.materials.MaterialTools;
+import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+
+public class ExplosiveShovel extends SimpleSlimefunItem implements NotPlaceable, DamageableItem {
+
+ private boolean damageOnUse;
+
+ public ExplosiveShovel(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
+ super(category, item, id, recipeType, recipe, keys, values);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(item, SlimefunItems.EXPLOSIVE_SHOVEL, true)) {
+ e.setCancelled(true);
+ e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F);
+ e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 0.3F, 1F);
+
+ for (int x = -1; x <= 1; x++) {
+ for (int y = -1; y <= 1; y++) {
+ for (int z = -1; z <= 1; z++) {
+ Block b = e.getBlock().getRelative(x, y, z);
+ boolean correctType = false;
+
+ for (Material mat : MaterialTools.getShovelItems()) {
+ if (b.getType() == mat) {
+ correctType = true;
+ break;
+ }
+ }
+
+ if (correctType && SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b.getLocation(), Action.BREAK_BLOCK)) {
+ if (SlimefunPlugin.getHooks().isCoreProtectInstalled()) {
+ SlimefunPlugin.getHooks().getCoreProtectAPI().logRemoval(e.getPlayer().getName(), b.getLocation(), b.getType(), b.getBlockData());
+ }
+
+ b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
+ for (ItemStack drop: b.getDrops()) {
+ b.getWorld().dropItemNaturally(b.getLocation(), drop);
+ }
+ b.setType(Material.AIR);
+
+ damageItem(e.getPlayer(), item);
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+ else return false;
+ };
+ }
+
+ @Override
+ public void postRegister() {
+ damageOnUse = ((boolean) Slimefun.getItemValue(getID(), "damage-on-use"));
+ }
+
+ @Override
+ public boolean isDamageable() {
+ return damageOnUse;
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java
new file mode 100644
index 000000000..8577df750
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GoldPan.java
@@ -0,0 +1,61 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import org.bukkit.Effect;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
+import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+
+public class GoldPan extends SlimefunGadget {
+
+ private Random random = new Random();
+
+ public GoldPan(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes, String[] keys, Object[] values) {
+ super(category, item, id, recipeType, recipe, machineRecipes, keys, values);
+ }
+
+ @Override
+ public void register(boolean slimefun) {
+ addItemHandler(new ItemInteractionHandler() {
+
+ @Override
+ public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) {
+ if (SlimefunManager.isItemSimiliar(item, SlimefunItems.GOLD_PAN, true)) {
+ if (e.getClickedBlock() != null && e.getClickedBlock().getType() == Material.GRAVEL && CSCoreLib.getLib().getProtectionManager().canBuild(p.getUniqueId(), e.getClickedBlock(), true)) {
+ List drops = new ArrayList<>();
+
+ if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE")) drops.add(SlimefunItems.SIFTED_ORE);
+ else if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY")) drops.add(new ItemStack(Material.CLAY_BALL));
+ else if (random.nextInt(100) < (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.FLINT")) drops.add(new ItemStack(Material.FLINT));
+
+ e.getClickedBlock().getWorld().playEffect(e.getClickedBlock().getLocation(), Effect.STEP_SOUND, e.getClickedBlock().getType());
+ e.getClickedBlock().setType(Material.AIR);
+
+ for (ItemStack drop: drops) {
+ e.getClickedBlock().getWorld().dropItemNaturally(e.getClickedBlock().getLocation(), drop);
+ }
+ }
+ e.setCancelled(true);
+ return true;
+ }
+ else return false;
+ }
+ });
+
+ super.register(slimefun);
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GrapplingHook.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GrapplingHook.java
new file mode 100644
index 000000000..4db0d5357
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/GrapplingHook.java
@@ -0,0 +1,95 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.UUID;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.entity.Arrow;
+import org.bukkit.entity.Bat;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.EntityType;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.potion.PotionEffect;
+import org.bukkit.potion.PotionEffectType;
+import org.bukkit.util.Vector;
+
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+import me.mrCookieSlime.Slimefun.utils.Utilities;
+
+public class GrapplingHook extends SimpleSlimefunItem {
+
+ private long despawnTicks;
+
+ public GrapplingHook(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
+ super(category, item, id, recipeType, recipe, keys, values);
+ }
+
+ @Override
+ public ItemInteractionHandler getItemHandler() {
+ Utilities utilities = SlimefunPlugin.getUtilities();
+
+ return (e, p, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ UUID uuid = p.getUniqueId();
+
+ if (e.getClickedBlock() == null && !utilities.jumpState.containsKey(uuid)) {
+ e.setCancelled(true);
+
+ if (p.getInventory().getItemInOffHand().getType() == Material.BOW) {
+ // Cancel, to fix dupe #740
+ return false;
+ }
+ utilities.jumpState.put(uuid, p.getInventory().getItemInMainHand().getType() != Material.SHEARS);
+
+ if (item.getType() == Material.LEAD) {
+ item.setAmount(item.getAmount() - 1);
+ }
+
+ Vector direction = p.getEyeLocation().getDirection().multiply(2.0);
+ Arrow arrow = p.getWorld().spawn(p.getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), Arrow.class);
+ arrow.setShooter(p);
+ arrow.setVelocity(direction);
+
+ Bat b = (Bat) p.getWorld().spawnEntity(p.getLocation(), EntityType.BAT);
+ b.setCanPickupItems(false);
+ b.setAI(false);
+ b.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 100000, 100000));
+ b.setLeashHolder(arrow);
+
+ utilities.damage.add(uuid);
+ utilities.remove.put(uuid, new Entity[]{b, arrow});
+
+ // To fix issue #253
+ Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
+ if (utilities.jumpState.containsKey(uuid)) {
+ utilities.arrows.remove(uuid);
+
+ for (Entity n : utilities.remove.get(uuid)) {
+ if (n.isValid()) n.remove();
+ }
+
+ Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> {
+ utilities.damage.remove(uuid);
+ utilities.jumpState.remove(uuid);
+ utilities.remove.remove(uuid);
+ }, 20L);
+ }
+ }, despawnTicks);
+ }
+ return true;
+ }
+ else return false;
+ };
+ }
+
+ @Override
+ public void postRegister() {
+ despawnTicks = (int) Slimefun.getItemValue("GRAPPLING_HOOK", "despawn-seconds") * 20L;
+ }
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java
new file mode 100644
index 000000000..5d6bd4d7b
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HerculesPickaxe.java
@@ -0,0 +1,41 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class HerculesPickaxe extends SimpleSlimefunItem {
+
+ public HerculesPickaxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(item, SlimefunItems.HERCULES_PICKAXE, true) && e.getBlock().getType().toString().endsWith("_ORE")) {
+ if (e.getBlock().getType() == Material.IRON_ORE) {
+ drops.add(new CustomItem(SlimefunItems.IRON_DUST, 2));
+ }
+ else if (e.getBlock().getType() == Material.GOLD_ORE) {
+ drops.add(new CustomItem(SlimefunItems.GOLD_DUST, 2));
+ }
+ else {
+ for (ItemStack drop: e.getBlock().getDrops()) {
+ drops.add(new CustomItem(drop, drop.getAmount() * 2));
+ }
+ }
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java
new file mode 100644
index 000000000..0db06913d
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/HunterTalisman.java
@@ -0,0 +1,53 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.bukkit.Material;
+import org.bukkit.entity.ChestedHorse;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman;
+import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler;
+
+public class HunterTalisman extends Talisman {
+
+ public HunterTalisman(ItemStack item, String id, ItemStack[] recipe, boolean consumable, boolean cancelEvent, String messageSuffix, int chance) {
+ super(item, id, recipe, consumable, cancelEvent, messageSuffix, chance);
+ }
+
+ @Override
+ public void preRegister() {
+ addItemHandler(getItemHandler());
+ }
+
+ public EntityKillHandler getItemHandler() {
+ return (e, entity, killer, item) -> {
+ if (Talisman.checkFor(e, this) && !(e.getEntity() instanceof Player)) {
+ if (!e.getEntity().getCanPickupItems()) {
+ List extraDrops = new ArrayList<>(e.getDrops());
+
+ if (e.getEntity() instanceof ChestedHorse) {
+ for (ItemStack invItem : ((ChestedHorse) e.getEntity()).getInventory().getStorageContents()) {
+ extraDrops.remove(invItem);
+ }
+
+ //The chest is not included in getStorageContents()
+ extraDrops.remove(new ItemStack(Material.CHEST));
+ }
+
+ for (ItemStack drop: extraDrops) {
+ e.getDrops().add(drop);
+ }
+ }
+
+ return true;
+ }
+ else {
+ return false;
+ }
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/InfernalBonemeal.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/InfernalBonemeal.java
new file mode 100644
index 000000000..515e5b6be
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/InfernalBonemeal.java
@@ -0,0 +1,40 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import org.bukkit.Effect;
+import org.bukkit.Material;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class InfernalBonemeal extends SimpleSlimefunItem {
+
+ public InfernalBonemeal(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
+ super(category, item, id, recipeType, recipe, recipeOutput);
+ }
+
+ @Override
+ public ItemInteractionHandler getItemHandler() {
+ return (e, p, item) -> {
+ if (SlimefunManager.isItemSimiliar(e.getItem(), getItem(), true)) {
+ if (e.getClickedBlock() != null && e.getClickedBlock().getType() == Material.NETHER_WART) {
+ Ageable ageable = (Ageable)e.getClickedBlock().getBlockData();
+ if (ageable.getAge() < ageable.getMaximumAge()) {
+ ageable.setAge(ageable.getMaximumAge());
+ e.getClickedBlock().setBlockData(ageable);
+ e.getClickedBlock().getWorld().playEffect(e.getClickedBlock().getLocation(), Effect.STEP_SOUND, Material.REDSTONE_BLOCK);
+ PlayerInventory.consumeItemInHand(p);
+ }
+ }
+ return true;
+ }
+ return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeFlask.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeFlask.java
new file mode 100644
index 000000000..9935513e2
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeFlask.java
@@ -0,0 +1,40 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.block.Container;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class KnowledgeFlask extends SimpleSlimefunItem {
+
+ public KnowledgeFlask(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
+ super(category, item, id, recipeType, recipe, recipeOutput);
+ }
+
+ @Override
+ public ItemInteractionHandler getItemHandler() {
+ return (e, p, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true) && p.getLevel() >= 1) {
+ if (e.getClickedBlock() == null || !(e.getClickedBlock().getState() instanceof Container)) {
+ p.setLevel(p.getLevel() - 1);
+ e.setCancelled(true);
+ p.getInventory().addItem(new CustomItem(Material.EXPERIENCE_BOTTLE, "&aFlask of Knowledge"));
+
+ p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1F, 0.5F);
+
+ item.setAmount(item.getAmount() - 1);
+ }
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeTome.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeTome.java
new file mode 100644
index 000000000..833572872
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/KnowledgeTome.java
@@ -0,0 +1,53 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+import org.bukkit.ChatColor;
+import org.bukkit.Sound;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.Research;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.PlayerProfile;
+
+public class KnowledgeTome extends SimpleSlimefunItem {
+
+ public KnowledgeTome(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public ItemInteractionHandler getItemHandler() {
+ return (e, p, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ List lore = item.getItemMeta().getLore();
+ lore.set(0, ChatColor.translateAlternateColorCodes('&', "&7Owner: &b" + p.getName()));
+ lore.set(1, ChatColor.BLACK + "" + p.getUniqueId());
+ ItemMeta im = item.getItemMeta();
+ im.setLore(lore);
+ item.setItemMeta(im);
+ p.getEquipment().setItemInMainHand(item);
+ p.getWorld().playSound(p.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1F, 1F);
+ return true;
+ }
+ else if (SlimefunManager.isItemSimiliar(item, getItem(), false)) {
+ PlayerProfile profile = PlayerProfile.fromUUID(p.getUniqueId());
+ Set researches = PlayerProfile.fromUUID(UUID.fromString(ChatColor.stripColor(item.getItemMeta().getLore().get(1)))).getResearches();
+ researches.forEach(research -> profile.setResearched(research, true));
+
+ PlayerInventory.consumeItemInHand(p);
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java
new file mode 100644
index 000000000..67b763b92
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/LumberAxe.java
@@ -0,0 +1,55 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.bukkit.Effect;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
+import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Block.TreeCalculator;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class LumberAxe extends SimpleSlimefunItem implements NotPlaceable {
+
+ public LumberAxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), getItem(), true)) {
+ if (MaterialHelper.isLog( e.getBlock().getType())) {
+ List logs = new ArrayList<>();
+ TreeCalculator.getTree(e.getBlock().getLocation(), e.getBlock().getLocation(), logs);
+
+ if (logs.contains(e.getBlock().getLocation())) logs.remove(e.getBlock().getLocation());
+ for (Location b: logs) {
+ if (SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), b, Action.BREAK_BLOCK)) {
+ b.getWorld().playEffect(b, Effect.STEP_SOUND, b.getBlock().getType());
+
+ for (ItemStack drop: b.getBlock().getDrops()) {
+ b.getWorld().dropItemNaturally(b, drop);
+ }
+
+ b.getBlock().setType(Material.AIR);
+ }
+ }
+ }
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicSugar.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicSugar.java
new file mode 100644
index 000000000..87c6fb3be
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MagicSugar.java
@@ -0,0 +1,36 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import org.bukkit.Sound;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.potion.PotionEffect;
+import org.bukkit.potion.PotionEffectType;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+
+public class MagicSugar extends SimpleSlimefunItem {
+
+ public MagicSugar(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
+ super(category, item, id, recipeType, recipe, keys, values);
+ }
+
+ @Override
+ public ItemInteractionHandler getItemHandler() {
+ return (e, p, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, SlimefunItems.MAGIC_SUGAR, true)) {
+ PlayerInventory.consumeItemInHand(p);
+ p.getWorld().playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1);
+ p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, 600, (Integer) Slimefun.getItemValue("MAGIC_SUGAR", "effects.SPEED")));
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java
new file mode 100644
index 000000000..f47f47739
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/MonsterJerky.java
@@ -0,0 +1,39 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.potion.PotionEffect;
+import org.bukkit.potion.PotionEffectType;
+
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemConsumptionHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class MonsterJerky extends SimpleSlimefunItem {
+
+ public MonsterJerky(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public ItemConsumptionHandler getItemHandler() {
+ return (e, p, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ SlimefunPlugin.instance.getServer().getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
+ if (p.hasPotionEffect(PotionEffectType.HUNGER)) {
+ p.removePotionEffect(PotionEffectType.HUNGER);
+ }
+
+ p.addPotionEffect(new PotionEffect(PotionEffectType.SATURATION, 5, 0));
+ }, 1L);
+ return true;
+ }
+ else {
+ return false;
+ }
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java
new file mode 100644
index 000000000..13c235d4c
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfContainment.java
@@ -0,0 +1,61 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.List;
+
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.CreatureSpawner;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+
+public class PickaxeOfContainment extends SimpleSlimefunItem {
+
+ public PickaxeOfContainment(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ // Refactored it into this so we don't need to call e.getBlock() all the time.
+ Block b = e.getBlock();
+ if (b.getType() != Material.SPAWNER) return true;
+
+ // If the spawner's BlockStorage has BlockInfo, then it's not a vanilla spawner and shouldn't give a broken spawner.
+ ItemStack spawner = SlimefunItems.BROKEN_SPAWNER.clone();
+ if (BlockStorage.hasBlockInfo(b)) {
+ spawner = SlimefunItems.REPAIRED_SPAWNER.clone();
+ }
+
+ ItemMeta im = spawner.getItemMeta();
+ List lore = im.getLore();
+
+ for (int i = 0; i < lore.size(); i++) {
+ if (lore.get(i).contains("")) lore.set(i, lore.get(i).replace("", StringUtils.format(((CreatureSpawner) b.getState()).getSpawnedType().toString())));
+ }
+
+ im.setLore(lore);
+ spawner.setItemMeta(im);
+ b.getLocation().getWorld().dropItemNaturally(b.getLocation(), spawner);
+ e.setExpToDrop(0);
+ e.setDropItems(false);
+ return true;
+ }
+ else {
+ if (e.getBlock().getType() == Material.SPAWNER) e.setDropItems(false);
+ return false;
+ }
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java
new file mode 100644
index 000000000..39db089c7
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfTheSeeker.java
@@ -0,0 +1,69 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import org.bukkit.Location;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.Messages;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class PickaxeOfTheSeeker extends SimpleSlimefunItem implements DamageableItem {
+
+ public PickaxeOfTheSeeker(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public ItemInteractionHandler getItemHandler() {
+ return (e, p, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ Block closest = null;
+
+ for (int x = -4; x <= 4; x++) {
+ for (int y = -4; y <= 4; y++) {
+ for (int z = -4; z <= 4; z++) {
+ if (p.getLocation().getBlock().getRelative(x, y, z).getType().toString().endsWith("_ORE")) {
+ if (closest == null || p.getLocation().distance(closest.getLocation()) < p.getLocation().distance(p.getLocation().getBlock().getRelative(x, y, z).getLocation())) {
+ closest = p.getLocation().getBlock().getRelative(x, y, z);
+ }
+ }
+ }
+ }
+ }
+
+ if (closest == null) {
+ Messages.local.sendTranslation(p, "miner.no-ores", true);
+ }
+ else {
+ double l = closest.getX() + 0.5 - p.getLocation().getX();
+ double w = closest.getZ() + 0.5 - p.getLocation().getZ();
+ float yaw;
+ float pitch;
+ double c = Math.sqrt(l * l + w * w);
+ double alpha1 = -Math.asin(l / c) / Math.PI * 180;
+ double alpha2 = Math.acos(w / c) / Math.PI * 180;
+ if (alpha2 > 90) yaw = (float) (180 - alpha1);
+ else yaw = (float) alpha1;
+ pitch = (float) ((-Math.atan((closest.getY() - 0.5 - p.getLocation().getY()) / Math.sqrt(l * l + w * w))) * 180F / Math.PI);
+
+ p.teleport(new Location(p.getWorld(), p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ(), yaw, pitch));
+ }
+
+ damageItem(p, item);
+ return true;
+ }
+ else return false;
+ };
+ }
+
+ @Override
+ public boolean isDamageable() {
+ return true;
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java
new file mode 100644
index 000000000..58353ddb9
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/PickaxeOfVeinMining.java
@@ -0,0 +1,56 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.bukkit.Effect;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
+
+import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Block.Vein;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class PickaxeOfVeinMining extends SimpleSlimefunItem {
+
+ public PickaxeOfVeinMining(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ if (e.getBlock().getType().toString().endsWith("_ORE")) {
+ List blocks = new ArrayList<>();
+ Vein.calculate(e.getBlock().getLocation(), e.getBlock().getLocation(), blocks, 16);
+
+ for (Location block: blocks) {
+ if (SlimefunPlugin.getProtectionManager().hasPermission(e.getPlayer(), block, Action.BREAK_BLOCK)) {
+ Block b = block.getBlock();
+ b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType());
+
+ for (ItemStack drop: b.getDrops()) {
+ b.getWorld().dropItemNaturally(b.getLocation(), drop.getType().isBlock() ? drop: new CustomItem(drop, fortune));
+ }
+
+ b.setType(Material.AIR);
+ }
+ }
+ }
+
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java
new file mode 100644
index 000000000..9c1d5b67e
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SeismicAxe.java
@@ -0,0 +1,92 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.List;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Effect;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.FallingBlock;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.event.entity.EntityDamageByEntityEvent;
+import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.util.Vector;
+
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.DamageableItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.NotPlaceable;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class SeismicAxe extends SimpleSlimefunItem implements NotPlaceable, DamageableItem {
+
+ public SeismicAxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public ItemInteractionHandler getItemHandler() {
+ return (e, p, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, SlimefunItems.SEISMIC_AXE, true)) {
+ List blocks = p.getLineOfSight(null, 10);
+ for (int i = 0; i < blocks.size(); i++) {
+ Block b = blocks.get(i);
+ Location ground = b.getLocation();
+
+ if (b.getType() == null || b.getType() == Material.AIR) {
+ for (int y = ground.getBlockY(); y > 0; y--) {
+ if (b.getWorld().getBlockAt(b.getX(), y, b.getZ()) != null && b.getWorld().getBlockAt(b.getX(), y, b.getZ()).getType() != null && b.getWorld().getBlockAt(b.getX(), y, b.getZ()).getType() != Material.AIR) {
+ ground = new Location(b.getWorld(), b.getX(), y, b.getZ());
+ break;
+ }
+ }
+ }
+
+ b.getWorld().playEffect(ground, Effect.STEP_SOUND, ground.getBlock().getType());
+
+ if (ground.getBlock().getRelative(BlockFace.UP).getType() == null || ground.getBlock().getRelative(BlockFace.UP).getType() == Material.AIR) {
+ Location loc = ground.getBlock().getRelative(BlockFace.UP).getLocation().add(0.5, 0.0, 0.5);
+ FallingBlock block = ground.getWorld().spawnFallingBlock(loc, ground.getBlock().getBlockData());
+ block.setDropItem(false);
+ block.setVelocity(new Vector(0, 0.4 + i * 0.01, 0));
+ SlimefunPlugin.getUtilities().blocks.add(block.getUniqueId());
+ }
+ for (Entity n: ground.getChunk().getEntities()) {
+ if (n instanceof LivingEntity && n.getLocation().distance(ground) <= 2.0D && !n.getUniqueId().equals(p.getUniqueId())) {
+ Vector vector = n.getLocation().toVector().subtract(p.getLocation().toVector()).normalize().multiply(1.4);
+ vector.setY(0.9);
+ n.setVelocity(vector);
+
+ if (p.getWorld().getPVP()) {
+ EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(p, n, DamageCause.ENTITY_ATTACK, 6D);
+ Bukkit.getPluginManager().callEvent(event);
+ if (!event.isCancelled()) ((LivingEntity) n).damage(6D);
+ }
+ }
+ }
+ }
+
+ for (int i = 0; i < 4; i++) {
+ damageItem(p, item);
+ }
+
+ return true;
+ }
+ else return false;
+ };
+ }
+
+ @Override
+ public boolean isDamageable() {
+ return true;
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java
new file mode 100644
index 000000000..9309af0d4
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SmeltersPickaxe.java
@@ -0,0 +1,50 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.List;
+
+import org.bukkit.Effect;
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Recipe.RecipeCalculator;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockBreakHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+
+public class SmeltersPickaxe extends SimpleSlimefunItem {
+
+ public SmeltersPickaxe(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public BlockBreakHandler getItemHandler() {
+ return (e, item, fortune, drops) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ if (BlockStorage.hasBlockInfo(e.getBlock())) return true;
+ if (e.getBlock().getType() == Material.PLAYER_HEAD) return true;
+
+ int j = -1;
+ List dropsList = (List) e.getBlock().getDrops();
+ for (int i = 0; i < dropsList.size(); i++) {
+ if (dropsList.get(i) != null) {
+ j++;
+ drops.add(e.getBlock().getType().toString().endsWith("_ORE") ? new CustomItem(dropsList.get(i), fortune): dropsList.get(i));
+ if (RecipeCalculator.getSmeltedOutput(drops.get(i).getType()) != null) {
+ e.getBlock().getWorld().playEffect(e.getBlock().getLocation(), Effect.MOBSPAWNER_FLAMES, 1);
+ drops.set(j, new CustomItem(RecipeCalculator.getSmeltedOutput(drops.get(i).getType()), drops.get(i).getAmount()));
+ }
+ }
+ }
+
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java
new file mode 100644
index 000000000..f4f3226a3
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/StormStaff.java
@@ -0,0 +1,114 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.List;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.GameMode;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.event.entity.FoodLevelChangeEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.Messages;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class StormStaff extends SimpleSlimefunItem {
+
+ private static final int MAX_USES = 8;
+
+ public StormStaff(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe, getCraftedOutput());
+ }
+
+ private static ItemStack getCraftedOutput() {
+ ItemStack item = SlimefunItems.STAFF_STORM.clone();
+ ItemMeta im = item.getItemMeta();
+ List lore = im.getLore();
+
+ lore.set(4, ChatColor.translateAlternateColorCodes('&', "&e" + MAX_USES + " Uses &7left"));
+
+ im.setLore(lore);
+ item.setItemMeta(im);
+ return item;
+ }
+
+ @Override
+ public ItemInteractionHandler getItemHandler() {
+ return (e, p, item) -> {
+ //Not checking if lores equals because we need a special one for that.
+ if (SlimefunManager.isItemSimiliar(item, getItem(), false)) {
+
+ if (!item.hasItemMeta()) return false;
+ ItemMeta itemMeta = item.getItemMeta();
+ if (!itemMeta.hasLore()) return false;
+ List itemLore = itemMeta.getLore();
+
+ ItemStack sfItem = getItem();
+ ItemMeta sfItemMeta = sfItem.getItemMeta();
+ List sfItemLore = sfItemMeta.getLore();
+
+ if (itemLore.size() < 6) {
+ // Index 1 and 3 in SlimefunItems.STAFF_STORM has lores with words and stuff so we check for them.
+ if (itemLore.get(1).equals(sfItemLore.get(1)) && itemLore.get(3).equals(sfItemLore.get(3))) {
+ if (p.getFoodLevel() >= 4 || p.getGameMode() == GameMode.CREATIVE) {
+ // Get a target block with max. 30 blocks of distance
+ Location loc = p.getTargetBlock(null, 30).getLocation();
+
+ if (loc.getWorld() != null && loc.getChunk().isLoaded()) {
+ if (loc.getWorld().getPVP() && SlimefunPlugin.getProtectionManager().hasPermission(p, loc, ProtectionModule.Action.PVP)) {
+ loc.getWorld().strikeLightning(loc);
+
+ if (p.getInventory().getItemInMainHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) {
+ FoodLevelChangeEvent event = new FoodLevelChangeEvent(p, p.getFoodLevel() - 4);
+ Bukkit.getPluginManager().callEvent(event);
+ p.setFoodLevel(event.getFoodLevel());
+ }
+
+ for (int i = MAX_USES; i > 0; i--) {
+ if (i == 1 && ChatColor.translateAlternateColorCodes('&', "&e1 Use &7left").equals(itemLore.get(4))) {
+ e.setCancelled(true);
+ p.playSound(p.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1);
+ item.setAmount(0);
+ return true;
+ }
+ else if (ChatColor.translateAlternateColorCodes('&', "&e" + i + " Uses &7left").equals(itemLore.get(4))) {
+ itemLore.set(4, ChatColor.translateAlternateColorCodes('&', "&e" + (i - 1) + " " + (i > 2 ? "Uses": "Use") + " &7left"));
+ e.setCancelled(true);
+
+ // Saving the changes to lore and item.
+ itemMeta.setLore(itemLore);
+ item.setItemMeta(itemMeta);
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+ else {
+ Messages.local.sendTranslation(p, "messages.no-pvp", true);
+ }
+ }
+ }
+ else {
+ Messages.local.sendTranslation(p, "messages.hungry", true);
+ }
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java
new file mode 100644
index 000000000..dae0619fe
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/SwordOfBeheading.java
@@ -0,0 +1,83 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import java.util.Random;
+
+import org.bukkit.Material;
+import org.bukkit.entity.Creeper;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.Skeleton;
+import org.bukkit.entity.WitherSkeleton;
+import org.bukkit.entity.Zombie;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.inventory.meta.SkullMeta;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.EntityKillHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+
+public class SwordOfBeheading extends SimpleSlimefunItem {
+
+ private final Random random = new Random();
+
+ private int chanceZombie;
+ private int chanceSkeleton;
+ private int chanceCreeper;
+ private int chanceWitherSkeleton;
+ private int chancePlayer;
+
+ public SwordOfBeheading(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
+ super(category, item, id, recipeType, recipe, keys, values);
+ }
+
+ @Override
+ public EntityKillHandler getItemHandler() {
+ return (e, entity, killer, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, getItem(), true)) {
+ if (e.getEntity() instanceof Zombie) {
+ if (random.nextInt(100) < chanceZombie) {
+ e.getDrops().add(new ItemStack(Material.ZOMBIE_HEAD));
+ }
+ }
+ else if (e.getEntity() instanceof WitherSkeleton) {
+ if (random.nextInt(100) < chanceWitherSkeleton)
+ e.getDrops().add(new ItemStack(Material.WITHER_SKELETON_SKULL));
+ }
+ else if (e.getEntity() instanceof Skeleton) {
+ if (random.nextInt(100) < chanceSkeleton)
+ e.getDrops().add(new ItemStack(Material.SKELETON_SKULL));
+ }
+ else if (e.getEntity() instanceof Creeper) {
+ if (random.nextInt(100) < chanceCreeper) {
+ e.getDrops().add(new ItemStack(Material.CREEPER_HEAD));
+ }
+ }
+ else if (e.getEntity() instanceof Player) {
+ if (random.nextInt(100) < chancePlayer) {
+ ItemStack skull = new ItemStack(Material.PLAYER_HEAD);
+ ItemMeta meta = skull.getItemMeta();
+ ((SkullMeta) meta).setOwningPlayer((Player) e.getEntity());
+ skull.setItemMeta(meta);
+
+ e.getDrops().add(skull);
+ }
+ }
+ return true;
+ }
+ else return false;
+ };
+ }
+
+ @Override
+ public void postRegister() {
+ chanceZombie = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.ZOMBIE");
+ chanceSkeleton = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.SKELETON");
+ chanceCreeper = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.CREEPER");
+ chanceWitherSkeleton = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.WITHER_SKELETON");
+ chancePlayer = (int) Slimefun.getItemValue("SWORD_OF_BEHEADING", "chance.PLAYER");
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/TelepositionScroll.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/TelepositionScroll.java
new file mode 100644
index 000000000..96c161b74
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/items/TelepositionScroll.java
@@ -0,0 +1,40 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.items;
+
+import org.bukkit.Location;
+import org.bukkit.entity.ArmorStand;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.LivingEntity;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+
+public class TelepositionScroll extends SimpleSlimefunItem {
+
+ public TelepositionScroll(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public ItemInteractionHandler getItemHandler() {
+ return (e, p, item) -> {
+ if (SlimefunManager.isItemSimiliar(item, SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION, true)) {
+ for (Entity n: p.getNearbyEntities(10.0, 10.0, 10.0)) {
+ if (n instanceof LivingEntity && !(n instanceof ArmorStand) && !n.getUniqueId().equals(p.getUniqueId())) {
+ float yaw = n.getLocation().getYaw() + 180.0F;
+ if (yaw > 360.0F) yaw = yaw - 360.0F;
+
+ n.teleport(new Location(n.getWorld(), n.getLocation().getX(), n.getLocation().getY(), n.getLocation().getZ(), yaw, n.getLocation().getPitch()));
+ }
+ }
+ return true;
+ }
+ else return false;
+ };
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AncientPedestal.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AncientPedestal.java
new file mode 100644
index 000000000..6086c4a2c
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AncientPedestal.java
@@ -0,0 +1,27 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+
+import org.bukkit.entity.Item;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.ancient_altar.AncientAltarListener;
+
+public class AncientPedestal extends SlimefunItem {
+
+ public AncientPedestal(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
+ super(category, item, id, recipeType, recipe, recipeOutput);
+
+ SlimefunItem.registerBlockHandler(getID(), (p, b, tool, reason) -> {
+ Item stack = AncientAltarListener.findItem(b);
+ if (stack != null) {
+ stack.removeMetadata("item_placed", SlimefunPlugin.instance);
+ b.getWorld().dropItem(b.getLocation(), AncientAltarListener.fixItemStack(stack.getItemStack(), stack.getCustomName()));
+ stack.remove();
+ }
+ return true;
+ });
+ }
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/BlockPlacer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/BlockPlacer.java
new file mode 100644
index 000000000..5254a4493
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/BlockPlacer.java
@@ -0,0 +1,73 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+
+import java.util.List;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Effect;
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.AutonomousMachineHandler;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+
+public class BlockPlacer extends SimpleSlimefunItem {
+
+ private String[] blacklist;
+
+ public BlockPlacer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, String[] keys, Object[] values) {
+ super(category, item, id, recipeType, recipe, keys, values);
+ }
+
+ @Override
+ public AutonomousMachineHandler getItemHandler() {
+ return (e, dispenser, d, block, chest, machine) -> {
+ if (machine.getID().equalsIgnoreCase(getID())) {
+ e.setCancelled(true);
+
+ if ((block.getType() == null || block.getType() == Material.AIR) && e.getItem().getType().isBlock()) {
+ for (String blockType : blacklist) {
+ if (e.getItem().getType().toString().equals(blockType)) {
+ return false;
+ }
+ }
+
+ SlimefunItem sfItem = SlimefunItem.getByItem(e.getItem());
+ if (sfItem != null) {
+ if (!SlimefunPlugin.getUtilities().blockHandlers.containsKey(sfItem.getID())) {
+ block.setType(e.getItem().getType());
+ BlockStorage.store(block, sfItem.getID());
+ block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
+ if (d.getInventory().containsAtLeast(e.getItem(), 2)) d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
+ else {
+ Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> d.getInventory().removeItem(e.getItem()), 2L);
+ }
+ }
+ }
+ else {
+ block.setType(e.getItem().getType());
+ block.getWorld().playEffect(block.getLocation(), Effect.STEP_SOUND, e.getItem().getType());
+ if (d.getInventory().containsAtLeast(e.getItem(), 2)) d.getInventory().removeItem(new CustomItem(e.getItem(), 1));
+ else {
+ Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> d.getInventory().removeItem(e.getItem()), 2L);
+ }
+ }
+ }
+ return true;
+ }
+ else return false;
+ };
+ }
+
+ @Override
+ public void postRegister() {
+ List> list = (List>) Slimefun.getItemValue(getID(), "unplaceable-blocks");
+ blacklist = list.toArray(new String[list.size()]);
+ }
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java
deleted file mode 100644
index 596bf928a..000000000
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
-
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-
-import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
-import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
-import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull;
-import me.mrCookieSlime.Slimefun.Lists.RecipeType;
-import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
-import me.mrCookieSlime.Slimefun.Setup.Messages;
-import me.mrCookieSlime.Slimefun.api.BlockStorage;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
-
-public class CargoCraftingNode extends SlimefunItem {
-
- private static final int[] border = {0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 22, 23, 24, 25, 26, 27, 31, 32, 33, 34, 35, 36, 40, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53};
-
- public CargoCraftingNode(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
- super(category, item, name, recipeType, recipe);
-
- new BlockMenuPreset(name, "&3Input Node") {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public void newInstance(final BlockMenu menu, final Block b) {
- try {
- menu.replaceExistingItem(41, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjI1OTliZDk4NjY1OWI4Y2UyYzQ5ODg1MjVjOTRlMTlkZGQzOWZhZDA4YTM4Mjg0YTE5N2YxYjcwNjc1YWNjIn19fQ=="), "&bChannel", "", "&e> Click to decrease the Channel ID by 1"));
- menu.addMenuClickHandler(41, (p, slot, item, action) -> {
- int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) - 1;
- if (channel < 0) channel = 15;
- BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
- newInstance(menu, b);
- return false;
- });
-
- menu.replaceExistingItem(42, new CustomItem(new ItemStack(((!BlockStorage.hasBlockInfo(b) || BlockStorage.getLocationInfo(b.getLocation(), "frequency") == null) ? Material.WHITE_WOOL : MaterialHelper.WoolColours[(Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")))])), "&bChannel ID: &3" + (((!BlockStorage.hasBlockInfo(b) || BlockStorage.getLocationInfo(b.getLocation(), "frequency") == null) ? 0: (Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")))) + 1)));
- menu.addMenuClickHandler(42,
- (p, slot, item, action) -> false
- );
-
- menu.replaceExistingItem(43, new CustomItem(CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzJmOTEwYzQ3ZGEwNDJlNGFhMjhhZjZjYzgxY2Y0OGFjNmNhZjM3ZGFiMzVmODhkYjk5M2FjY2I5ZGZlNTE2In19fQ=="), "&bChannel", "", "&e> Click to increase the Channel ID by 1"));
- menu.addMenuClickHandler(43, (p, slot, item, action) -> {
- int channel = Integer.parseInt(BlockStorage.getLocationInfo(b.getLocation(), "frequency")) + 1;
- if (channel > 15) channel = 0;
- BlockStorage.addBlockInfo(b, "frequency", String.valueOf(channel));
- newInstance(menu, b);
- return false;
- });
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- boolean open = CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b) || p.hasPermission("slimefun.cargo.bypass");
- if (!open) {
- Messages.local.sendTranslation(p, "inventory.no-access", true);
- }
- return open;
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- return new int[0];
- }
- };
-
- registerBlockHandler(name, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString());
- BlockStorage.addBlockInfo(b, "frequency", "0");
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- }
- return true;
- }
- });
- }
-
- protected void constructMenu(BlockMenuPreset preset) {
- for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
- }
-
- preset.addItem(2, new CustomItem(new ItemStack(Material.CRAFTING_TABLE), "&eRecipe", "", "&bPut in the Recipe you want to craft"),
- (p, slot, item, action) -> false
- );
- }
-
- public int[] getInputSlots() {
- return new int[] {19, 20, 21, 28, 29, 30, 37, 38, 39};
- }
-
-}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java
new file mode 100644
index 000000000..f68893a66
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Composter.java
@@ -0,0 +1,78 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Effect;
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
+import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.Messages;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+
+public class Composter extends SlimefunGadget {
+
+ public Composter(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes) {
+ super(category, item, id, recipeType, recipe, machineRecipes);
+ }
+
+ @Override
+ public void preRegister() {
+ addItemHandler(new ItemInteractionHandler() {
+
+ @Override
+ public boolean onRightClick(ItemUseEvent e, final Player p, ItemStack item) {
+ if (e.getClickedBlock() != null) {
+ String id = BlockStorage.checkID(e.getClickedBlock());
+ if (id != null && id.equals(getID())) {
+ if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), e.getClickedBlock(), true)) {
+ final ItemStack input = p.getInventory().getItemInMainHand();
+ final Block b = e.getClickedBlock();
+ SlimefunItem machine = SlimefunItem.getByID(id);
+
+ for (ItemStack convert: RecipeType.getRecipeInputs(machine)) {
+ if (convert != null && SlimefunManager.isItemSimiliar(input, convert, true)) {
+ ItemStack removing = input.clone();
+ removing.setAmount(convert.getAmount());
+ p.getInventory().removeItem(removing);
+ final ItemStack adding = RecipeType.getRecipeOutput(machine, convert);
+
+ for (int i = 1; i < 12; i++) {
+ int j = i;
+ Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
+ if (j < 11) {
+ b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType().isBlock() ? input.getType() : Material.HAY_BLOCK);
+ }
+ else {
+ p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F);
+ b.getWorld().dropItemNaturally(b.getRelative(BlockFace.UP).getLocation(), adding);
+ }
+ }, i*30L);
+ }
+
+ return true;
+ }
+ }
+ Messages.local.sendTranslation(p, "machines.wrong-item", true);
+ return true;
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+ });
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java
deleted file mode 100644
index 6b8f42246..000000000
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.bukkit.Material;
-import org.bukkit.Particle;
-import org.bukkit.block.Block;
-import org.bukkit.block.data.Ageable;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
-
-import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
-import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
-import me.mrCookieSlime.Slimefun.Lists.RecipeType;
-import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
-import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
-import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
-import me.mrCookieSlime.Slimefun.api.BlockStorage;
-import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
-
-public abstract class CropGrowthAccelerator extends SlimefunItem {
-
- private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
-
- public static final Map crops = new HashMap();
-
- static {
- crops.put(Material.WHEAT, 7);
- crops.put(Material.POTATOES, 7);
- crops.put(Material.CARROTS, 7);
- crops.put(Material.NETHER_WART, 3);
- crops.put(Material.BEETROOTS, 3);
- crops.put(Material.COCOA, 8);
- }
-
- public CropGrowthAccelerator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
- super(category, item, name, recipeType, recipe);
-
- new BlockMenuPreset(name, "&bGrowth Accelerator") {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
- return new int[0];
- }
- };
-
- registerBlockHandler(name, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot: getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- }
- return true;
- }
- });
- }
-
- protected void constructMenu(BlockMenuPreset preset) {
- for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
- }
- }
-
- public abstract int getEnergyConsumption();
- public abstract int getRadius();
- public abstract int getSpeed();
-
- public int[] getInputSlots() {
- return new int[] {10, 11, 12, 13, 14, 15, 16};
- }
-
- @Override
- public void register(boolean slimefun) {
- addItemHandler(new BlockTicker() {
-
- @Override
- public void tick(Block b, SlimefunItem sf, Config data) {
- try {
- CropGrowthAccelerator.this.tick(b);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void uniqueTick() {
- }
-
- @Override
- public boolean isSynchronized() {
- return true;
- }
- });
-
- super.register(slimefun);
- }
-
- protected void tick(Block b) throws Exception {
- int work = 0;
- master:
- for (int x = -getRadius(); x <= getRadius(); x++) {
- for (int z = -getRadius(); z <= getRadius(); z++) {
- Block block = b.getRelative(x, 0, z);
- if (crops.containsKey(block.getType())) {
- if (((Ageable) block.getBlockData()).getAge() < crops.get(block.getType())) {
- for (int slot : getInputSlots()) {
- if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.FERTILIZER, false)) {
- if (work > (getSpeed() - 1)) break master;
- if (ChargableBlock.getCharge(b) < getEnergyConsumption()) break master;
- ChargableBlock.addCharge(b, -getEnergyConsumption());
-
- Ageable ageable = (Ageable) block.getBlockData();
- ageable.setAge(ageable.getAge() + 1);
- block.setBlockData(ageable);
-
- block.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, block.getLocation().add(0.5D, 0.5D, 0.5D), 4, 0.1F, 0.1F, 0.1F);
- work++;
- break;
- }
- }
- }
- }
- }
- }
-
- if (work > 0) {
- for (int slot : getInputSlots()) {
- if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.FERTILIZER, false)) {
- BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
- break;
- }
- }
- }
- }
-
-}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java
new file mode 100644
index 000000000..d349db5f0
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/Crucible.java
@@ -0,0 +1,86 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
+import org.bukkit.block.data.Levelled;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
+import me.mrCookieSlime.CSCoreLibPlugin.compatibility.MaterialHelper;
+import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.Setup.Messages;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+
+public class Crucible extends SlimefunGadget {
+
+ public Crucible(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack[] machineRecipes) {
+ super(category, item, id, recipeType, recipe, machineRecipes);
+ }
+
+ @Override
+ public void preRegister() {
+ addItemHandler(new ItemInteractionHandler() {
+
+ @Override
+ public boolean onRightClick(ItemUseEvent e, final Player p, ItemStack item) {
+ if (e.getClickedBlock() != null) {
+ String id = BlockStorage.checkID(e.getClickedBlock());
+ if (id != null && id.equals("CRUCIBLE")) {
+ if (CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), e.getClickedBlock(), true)) {
+ final ItemStack input = p.getInventory().getItemInMainHand();
+ final Block block = e.getClickedBlock().getRelative(BlockFace.UP);
+ SlimefunItem machine = SlimefunItem.getByID(id);
+
+ for (ItemStack convert: RecipeType.getRecipeInputs(machine)) {
+ if (input != null && SlimefunManager.isItemSimiliar(input, convert, true)) {
+ e.setCancelled(true);
+ ItemStack removing = input.clone();
+ removing.setAmount(convert.getAmount());
+ p.getInventory().removeItem(removing);
+
+ for (int i = 1; i < 9; i++) {
+ int j = 8 - i;
+ Bukkit.getScheduler().runTaskLater(SlimefunPlugin.instance, () -> {
+ if (input.getType() == Material.COBBLESTONE || input.getType() == Material.TERRACOTTA || MaterialHelper.isTerracotta(input.getType())) {
+ block.setType(Material.LAVA);
+ Levelled le = (Levelled) block.getBlockData();
+ le.setLevel(j);
+ block.setBlockData(le, false);
+ block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F);
+ }
+ else if (MaterialHelper.isLeavesBlock(input.getType())) {
+ block.setType(Material.WATER);
+ Levelled le = (Levelled) block.getBlockData();
+ le.setLevel(j);
+ block.setBlockData(le, false);
+ block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F);
+ }
+ }, i*50L);
+ }
+
+ return true;
+ }
+ }
+ Messages.local.sendTranslation(p, "machines.wrong-item", true);
+ return true;
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+ });
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java
new file mode 100644
index 000000000..5b7f2aaa4
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java
@@ -0,0 +1,60 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
+import me.mrCookieSlime.Slimefun.Objects.handlers.ItemInteractionHandler;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.holograms.HologramProjectorHologram;
+
+public class HologramProjector extends SimpleSlimefunItem {
+
+ public HologramProjector(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe, ItemStack recipeOutput) {
+ super(category, item, id, recipeType, recipe, recipeOutput);
+
+ SlimefunItem.registerBlockHandler(getID(), new SlimefunBlockHandler() {
+
+ @Override
+ public void onPlace(Player p, Block b, SlimefunItem item) {
+ BlockStorage.addBlockInfo(b, "text", "&bHi, I am a Hologram, &3configure me using the Projector");
+ BlockStorage.addBlockInfo(b, "offset", "-0.5");
+ BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString());
+
+ HologramProjectorHologram.getArmorStand(b, true);
+ }
+
+ @Override
+ public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
+ HologramProjectorHologram.remove(b);
+ return true;
+ }
+ });
+ }
+
+ @Override
+ public ItemInteractionHandler getItemHandler() {
+ return (e, p, item) -> {
+ if (e.getClickedBlock() == null) return false;
+
+ String id = BlockStorage.checkID(e.getClickedBlock());
+ if (id != null && id.equals(getID())) {
+ e.setCancelled(true);
+
+ if (BlockStorage.getLocationInfo(e.getClickedBlock().getLocation(), "owner").equals(p.getUniqueId().toString())) {
+ HologramProjectorHologram.openEditor(p, e.getClickedBlock());
+ }
+
+ return true;
+ }
+
+ return false;
+ };
+ }
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java
new file mode 100644
index 000000000..3e9374ae0
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/InfusedHopper.java
@@ -0,0 +1,78 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.block.Block;
+import org.bukkit.entity.ArmorStand;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.Item;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.util.Vector;
+
+import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SimpleSlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.holograms.InfusedHopperHologram;
+
+public class InfusedHopper extends SimpleSlimefunItem {
+
+ public InfusedHopper(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+
+ SlimefunItem.registerBlockHandler(getID(), new SlimefunBlockHandler() {
+
+ @Override
+ public void onPlace(Player p, Block b, SlimefunItem item) {
+ InfusedHopperHologram.getArmorStand(b, true);
+ }
+
+ @Override
+ public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
+ InfusedHopperHologram.remove(b);
+ return true;
+ }
+ });
+ }
+
+ @Override
+ public BlockTicker getItemHandler() {
+ return new BlockTicker() {
+
+ @Override
+ public void tick(Block b, SlimefunItem item, Config data) {
+ if (b.getType() != Material.HOPPER) {
+ // we're no longer a hopper, we were probably destroyed. skipping this tick.
+ BlockStorage.clearBlockInfo(b);
+ return;
+ }
+
+ ArmorStand hologram = InfusedHopperHologram.getArmorStand(b, true);
+ boolean sound = false;
+
+ for (Entity n: hologram.getNearbyEntities(3.5D, 3.5D, 3.5D)) {
+ if (n instanceof Item && !n.hasMetadata("no_pickup") && n.getLocation().distance(hologram.getLocation()) > 0.4D) {
+ n.setVelocity(new Vector(0, 0.1, 0));
+ n.teleport(hologram);
+ sound = true;
+ }
+ }
+
+ if (sound) {
+ b.getWorld().playSound(b.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 5F, 2F);
+ }
+ }
+
+ @Override
+ public boolean isSynchronized() {
+ return true;
+ }
+ };
+ }
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java
index 9158a2c1a..fe8432bb9 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java
@@ -10,14 +10,13 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
-import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
+import io.github.thebusybiscuit.cscorelib2.protection.ProtectionModule.Action;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
@@ -42,26 +41,26 @@ public class ReactorAccessPort extends SlimefunItem {
constructMenu(this);
}
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
@Override
public boolean canOpen(Block b, Player p) {
- if(p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(),b,true)) {
-
-
+ if(p.hasPermission("slimefun.inventory.bypass") || SlimefunPlugin.getProtectionManager().hasPermission(p, b.getLocation(), Action.ACCESS_INVENTORIES)) {
AReactor reactor = getReactor(b.getLocation());
- if(reactor != null) {
+ if (reactor != null) {
boolean empty = true;
BlockMenu bm = getReactorMenu(b.getLocation());
- if(bm != null) {
- for(int slot:reactor.getCoolantSlots())
- if(bm.getItemInSlot(slot) != null)
+
+ if (bm != null) {
+ for (int slot: reactor.getCoolantSlots()) {
+ if (bm.getItemInSlot(slot) != null) {
empty = false;
- for(int slot:reactor.getFuelSlots())
- if(bm.getItemInSlot(slot) != null)
+ }
+ }
+
+ for (int slot: reactor.getFuelSlots()) {
+ if (bm.getItemInSlot(slot) != null) {
empty = false;
+ }
+ }
if(!empty || !p.isSneaking()) {
//reactor is not empty, lets view it's inventory instead.
@@ -81,13 +80,13 @@ public class ReactorAccessPort extends SlimefunItem {
@Override
public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
+ if (flow == ItemTransportFlow.INSERT) return getInputSlots();
else return getOutputSlots();
}
@Override
public int[] getSlotsAccessedByItemTransport(BlockMenu menu, ItemTransportFlow flow, ItemStack item) {
- if (flow.equals(ItemTransportFlow.INSERT)) {
+ if (flow == ItemTransportFlow.INSERT) {
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REACTOR_COOLANT_CELL, true)) return getCoolantSlots();
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.NETHER_ICE_COOLANT_CELL, true)) return getCoolantSlots();
else return getFuelSlots();
@@ -96,80 +95,55 @@ public class ReactorAccessPort extends SlimefunItem {
}
};
- registerBlockHandler(name, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getFuelSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- for (int slot : getCoolantSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
- }
- for (int slot : getOutputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(name, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+
+ if (inv != null) {
+ for (int slot : getFuelSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+
+ for (int slot : getCoolantSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+
+ for (int slot : getOutputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- return true;
}
+ return true;
});
}
private void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
for (int i : border_1) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.LIME_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
for (int i : border_2) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
for (int i : border_3) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.GREEN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.GREEN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
- preset.addItem(1, new CustomItem(SlimefunItems.URANIUM, "&7Fuel Slot", "", "&rThis Slot accepts radioactive Fuel such as:", "&2Uranium &ror &aNeptunium"),
- (p, slot, item, action) -> false
- );
-
- preset.addItem(22, new CustomItem(SlimefunItems.PLUTONIUM, "&7Byproduct Slot", "", "&rThis Slot contains the Reactor's Byproduct", "&rsuch as &aNeptunium &ror &7Plutonium"),
- (p, slot, item, action) -> false
- );
-
- preset.addItem(7, new CustomItem(SlimefunItems.REACTOR_COOLANT_CELL, "&bCoolant Slot", "", "&rThis Slot accepts Coolant Cells", "&4Without any Coolant Cells, your Reactor", "&4will explode"),
- (p, slot, item, action) -> false
- );
-
- preset.addItem(7, new CustomItem(SlimefunItems.REACTOR_COOLANT_CELL, "&bCoolant Slot", "", "&rThis Slot accepts Coolant Cells", "&4Without any Coolant Cells, your Reactor", "&4will explode"),
- (p, slot, item, action) -> false
- );
+ preset.addItem(1, new CustomItem(SlimefunItems.URANIUM, "&7Fuel Slot", "", "&rThis Slot accepts radioactive Fuel such as:", "&2Uranium &ror &aNeptunium"), (p, slot, item, action) -> false);
+ preset.addItem(22, new CustomItem(SlimefunItems.PLUTONIUM, "&7Byproduct Slot", "", "&rThis Slot contains the Reactor's Byproduct", "&rsuch as &aNeptunium &ror &7Plutonium"), (p, slot, item, action) -> false);
+ preset.addItem(7, new CustomItem(SlimefunItems.REACTOR_COOLANT_CELL, "&bCoolant Slot", "", "&rThis Slot accepts Coolant Cells", "&4Without any Coolant Cells, your Reactor", "&4will explode"),(p, slot, item, action) -> false);
}
public String getInventoryTitle() {
@@ -196,8 +170,7 @@ public class ReactorAccessPort extends SlimefunItem {
Location reactorL = new Location(l.getWorld(), l.getX(), l.getY() - 3, l.getZ());
SlimefunItem item = BlockStorage.check(reactorL.getBlock());
- if(item instanceof AReactor)
- return (AReactor) item;
+ if (item instanceof AReactor) return (AReactor) item;
return null;
}
@@ -205,10 +178,8 @@ public class ReactorAccessPort extends SlimefunItem {
public BlockMenu getReactorMenu(Location l) {
Location reactorL = new Location(l.getWorld(), l.getX(), l.getY() - 3, l.getZ());
- String id = BlockStorage.checkID(reactorL);
-
- if(id.equals("NUCLEAR_REACTOR") || id.equals("NETHERSTAR_REACTOR"))
- return BlockStorage.getInventory(reactorL);
+ SlimefunItem item = BlockStorage.check(reactorL.getBlock());
+ if (item instanceof AReactor) return BlockStorage.getInventory(l);
return null;
}
@@ -216,12 +187,15 @@ public class ReactorAccessPort extends SlimefunItem {
private static Inventory inject(Location l) {
int size = BlockStorage.getInventory(l).toInventory().getSize();
Inventory inv = Bukkit.createInventory(null, size);
+
for (int i = 0; i < size; i++) {
inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
}
+
for (int slot : getOutputSlots()) {
inv.setItem(slot, BlockStorage.getInventory(l).getItemInSlot(slot));
}
+
return inv;
}
@@ -232,11 +206,8 @@ public class ReactorAccessPort extends SlimefunItem {
for (int slot: getOutputSlots()) {
BlockStorage.getInventory(l).replaceExistingItem(slot, inv.getItem(slot));
}
-
- for (Map.Entry entry: map.entrySet()) {
- return entry.getValue();
- }
- return null;
+
+ return map.values().stream().findAny().orElse(null);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java
index cdde1b4d8..25721f1f9 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/TrashCan.java
@@ -2,7 +2,6 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
import org.bukkit.Material;
import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
@@ -10,41 +9,19 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
-public class TrashCan extends SlimefunItem {
+public class TrashCan extends SlimefunItem implements InventoryBlock {
private static final int[] border = {0, 1, 2, 3, 5, 4, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
public TrashCan(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
-
- new BlockMenuPreset(name, getInventoryTitle()) {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public void newInstance(final BlockMenu menu, final Block b) {
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return true;
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
- return new int[0];
- }
- };
+ createPreset(this, "&4Trash Can", this::constructMenu);
}
private void constructMenu(BlockMenuPreset preset) {
@@ -54,23 +31,21 @@ public class TrashCan extends SlimefunItem {
);
}
}
-
- public String getInventoryTitle() {
- return "&4Trash Can";
- }
+ @Override
public int[] getInputSlots() {
return new int[] {10, 11, 12, 13, 14, 15, 16};
}
+
+ @Override
+ public int[] getOutputSlots() {
+ return new int[0];
+ }
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
- @Override
- public void uniqueTick() {
- }
-
@Override
public void tick(Block b, SlimefunItem item, Config data) {
BlockMenu menu = BlockStorage.getInventory(b);
@@ -84,8 +59,6 @@ public class TrashCan extends SlimefunItem {
return false;
}
});
-
- super.register(slimefun);
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java
index adff7cc08..183faa3b9 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java
@@ -1,17 +1,15 @@
package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
import java.util.Iterator;
+import java.util.logging.Level;
-import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.ExperienceOrb;
import org.bukkit.entity.Player;
-import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
-import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
@@ -19,42 +17,22 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
+import me.mrCookieSlime.Slimefun.holograms.XPCollectorHologram;
-public class XPCollector extends SlimefunItem {
+public class XPCollector extends SlimefunItem implements InventoryBlock {
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
public XPCollector(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
-
- new BlockMenuPreset(name, "&aEXP Collector") {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.WITHDRAW)) return getOutputSlots();
- return new int[0];
- }
- };
+ createPreset(this, "&aEXP Collector", this::constructMenu);
registerBlockHandler(name, new SlimefunBlockHandler() {
@@ -65,7 +43,7 @@ public class XPCollector extends SlimefunItem {
@Override
public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- me.mrCookieSlime.Slimefun.holograms.XPCollector.getArmorStand(b).remove();
+ XPCollectorHologram.remove(b);
BlockMenu inv = BlockStorage.getInventory(b);
if (inv != null) {
for (int slot: getOutputSlots()) {
@@ -79,32 +57,13 @@ public class XPCollector extends SlimefunItem {
}
});
}
-
- private Inventory inject(Block b) {
- int size = BlockStorage.getInventory(b).toInventory().getSize();
- Inventory inv = Bukkit.createInventory(null, size);
- for (int i = 0; i < size; i++) {
- inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
- }
- for (int slot : getOutputSlots()) {
- inv.setItem(slot, BlockStorage.getInventory(b).getItemInSlot(slot));
- }
- return inv;
- }
-
- protected boolean fits(Block b, ItemStack... items) {
- return inject(b).addItem(items).isEmpty();
- }
-
- protected void pushItems(Block b, ItemStack... items) {
- Inventory inv = inject(b);
- inv.addItem(items);
-
- for (int slot : getOutputSlots()) {
- BlockStorage.getInventory(b).replaceExistingItem(slot, inv.getItem(slot));
- }
+
+ @Override
+ public int[] getInputSlots() {
+ return new int[0];
}
+ @Override
public int[] getOutputSlots() {
return new int[] {12, 13, 14};
}
@@ -122,33 +81,27 @@ public class XPCollector extends SlimefunItem {
}
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
public void tick(Block b, SlimefunItem sf, Config data) {
try {
XPCollector.this.tick(b);
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while ticking an Exp Collector for Slimefun " + Slimefun.getVersion(), x);
}
}
- @Override
- public void uniqueTick() {
- }
-
@Override
public boolean isSynchronized() {
return true;
}
});
-
- super.register(slimefun);
}
- protected void tick(Block b) throws Exception {
- Iterator iterator = me.mrCookieSlime.Slimefun.holograms.XPCollector.getArmorStand(b).getNearbyEntities(4D, 4D, 4D).iterator();
+ protected void tick(Block b) {
+ Iterator iterator = XPCollectorHologram.getArmorStand(b, true).getNearbyEntities(4D, 4D, 4D).iterator();
while (iterator.hasNext()) {
Entity n = iterator.next();
if (n instanceof ExperienceOrb) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java
similarity index 53%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java
index 87d5378ae..e0d2774d4 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AnimalGrowthAccelerator.java
@@ -1,22 +1,6 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
-import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
-import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
-import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
-import me.mrCookieSlime.Slimefun.Lists.RecipeType;
-import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
-import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
-import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
-import me.mrCookieSlime.Slimefun.api.BlockStorage;
-import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
+import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.Particle;
@@ -24,68 +8,51 @@ import org.bukkit.block.Block;
import org.bukkit.entity.Ageable;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
-public class AnimalGrowthAccelerator extends SlimefunItem {
+import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
+import me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAcceleratorHologram;
+
+public class AnimalGrowthAccelerator extends SlimefunItem implements InventoryBlock {
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
public AnimalGrowthAccelerator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
+ createPreset(this, "&bGrowth Accelerator", this::constructMenu);
- new BlockMenuPreset(name, "&bGrowth Accelerator") {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
- return new int[0];
- }
- };
-
- registerBlockHandler(name, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
-
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAccelerator.getArmorStand(b).remove();
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(name, (p, b, tool, reason) -> {
+ AnimalGrowthAcceleratorHologram.remove(b);
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getInputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- return true;
}
+ return true;
});
}
- protected void constructMenu(BlockMenuPreset preset) {
+ private void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
}
@@ -93,38 +60,38 @@ public class AnimalGrowthAccelerator extends SlimefunItem {
return 14;
}
+ @Override
public int[] getInputSlots() {
return new int[] {10, 11, 12, 13, 14, 15, 16};
}
@Override
- public void register(boolean slimefun) {
+ public int[] getOutputSlots() {
+ return new int[0];
+ }
+
+ @Override
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
public void tick(Block b, SlimefunItem sf, Config data) {
try {
AnimalGrowthAccelerator.this.tick(b);
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while ticking an Animal Growth Accelerator for Slimefun " + Slimefun.getVersion(), x);
}
}
- @Override
- public void uniqueTick() {
- }
-
@Override
public boolean isSynchronized() {
return true;
}
});
-
- super.register(slimefun);
}
- protected void tick(Block b) throws Exception {
- for (Entity n : me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAccelerator.getArmorStand(b).getNearbyEntities(3D, 3D, 3D)) {
+ protected void tick(Block b) {
+ for (Entity n : AnimalGrowthAcceleratorHologram.getArmorStand(b, true).getNearbyEntities(3D, 3D, 3D)) {
if (n instanceof Ageable && !((Ageable) n).isAdult()) {
for (int slot: getInputSlots()) {
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoAnvil.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoAnvil.java
similarity index 54%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoAnvil.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoAnvil.java
index 44ac5ecba..c1e18d108 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoAnvil.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoAnvil.java
@@ -1,7 +1,10 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
-import java.util.ArrayList;
-import java.util.List;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.Damageable;
+import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
@@ -14,12 +17,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecip
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
-
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.Damageable;
-import org.bukkit.inventory.meta.ItemMeta;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
public abstract class AutoAnvil extends AContainer {
@@ -36,9 +34,6 @@ public abstract class AutoAnvil extends AContainer {
public ItemStack getProgressBar() {
return new ItemStack(Material.IRON_PICKAXE);
}
-
- @Override
- public void registerDefaultRecipes() {}
@Override
public int getSpeed() {
@@ -57,18 +52,7 @@ public abstract class AutoAnvil extends AContainer {
if (isProcessing(b)) {
int timeleft = progress.get(b);
if (timeleft > 0) {
- ItemStack item = getProgressBar().clone();
- ItemMeta im = item.getItemMeta();
- ((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(b).getTicks()));
- im.setDisplayName(" ");
- List lore = new ArrayList();
- lore.add(MachineHelper.getProgress(timeleft, processing.get(b).getTicks()));
- lore.add("");
- lore.add(MachineHelper.getTimeLeft(timeleft / 2));
- im.setLore(lore);
- item.setItemMeta(im);
-
- BlockStorage.getInventory(b).replaceExistingItem(22, item);
+ MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
if (ChargableBlock.isChargable(b)) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
@@ -86,34 +70,35 @@ public abstract class AutoAnvil extends AContainer {
}
}
else {
- MachineRecipe r = null;
- slots:
+ BlockMenu menu = BlockStorage.getInventory(b);
+ MachineRecipe recipe = null;
+
for (int slot: getInputSlots()) {
- ItemStack target = BlockStorage.getInventory(b).getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
- ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
- if (item != null) {
- if (item.getType().getMaxDurability() > 0 && ((Damageable) item.getItemMeta()).getDamage() > 0) {
- if (SlimefunManager.isItemSimiliar(target, SlimefunItems.DUCT_TAPE, true)) {
- ItemStack newItem = item.clone();
- short durability = (short) (((Damageable) newItem.getItemMeta()).getDamage() - (item.getType().getMaxDurability() / getRepairFactor()));
- if (durability < 0) durability = 0;
- ItemMeta meta = newItem.getItemMeta();
- ((Damageable) meta).setDamage(durability);
- newItem.setItemMeta(meta);
- r = new MachineRecipe(30, new ItemStack[] {target, item}, new ItemStack[] {newItem});
- }
- break slots;
+ ItemStack target = menu.getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
+ ItemStack item = menu.getItemInSlot(slot);
+
+ if (item != null && item.getType().getMaxDurability() > 0 && ((Damageable) item.getItemMeta()).getDamage() > 0) {
+ if (SlimefunManager.isItemSimiliar(target, SlimefunItems.DUCT_TAPE, true)) {
+ ItemStack newItem = item.clone();
+ short durability = (short) (((Damageable) newItem.getItemMeta()).getDamage() - (item.getType().getMaxDurability() / getRepairFactor()));
+ if (durability < 0) durability = 0;
+ ItemMeta meta = newItem.getItemMeta();
+ ((Damageable) meta).setDamage(durability);
+ newItem.setItemMeta(meta);
+ recipe = new MachineRecipe(30, new ItemStack[] {target, item}, new ItemStack[] {newItem});
}
+ break;
}
}
- if (r != null) {
- if (!fits(b, r.getOutput())) return;
+ if (recipe != null) {
+ if (!fits(b, recipe.getOutput())) return;
+
for (int slot: getInputSlots()) {
- BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
+ menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1));
}
- processing.put(b, r);
- progress.put(b, r.getTicks());
+ processing.put(b, recipe);
+ progress.put(b, recipe.getTicks());
}
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java
similarity index 55%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java
index 4e14ec93e..9f334880b 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoBreeder.java
@@ -1,14 +1,14 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
+
+import java.util.logging.Level;
import org.bukkit.Material;
import org.bukkit.Particle;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
-import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
@@ -16,75 +16,43 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.World.Animals;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
+import me.mrCookieSlime.Slimefun.holograms.AutoBreederHologram;
-public class AutoBreeder extends SlimefunItem {
+public class AutoBreeder extends SlimefunItem implements InventoryBlock {
private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
public AutoBreeder(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
+ createPreset(this, "&6Auto Breeder", this::constructMenu);
- new BlockMenuPreset(name, "&6Auto Breeder") {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
- return new int[0];
- }
- };
-
- registerBlockHandler(name, new SlimefunBlockHandler() {
-
- @Override
- public void onPlace(Player p, Block b, SlimefunItem item) {
- }
-
- @Override
- public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) {
- me.mrCookieSlime.Slimefun.holograms.AutoBreeder.getArmorStand(b).remove();
- BlockMenu inv = BlockStorage.getInventory(b);
- if (inv != null) {
- for (int slot : getInputSlots()) {
- if (inv.getItemInSlot(slot) != null) {
- b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
- inv.replaceExistingItem(slot, null);
- }
+ registerBlockHandler(name, (p, b, tool, reason) -> {
+ AutoBreederHologram.remove(b);
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot : getInputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
}
}
- return true;
}
+ return true;
});
}
protected void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
}
@@ -92,38 +60,38 @@ public class AutoBreeder extends SlimefunItem {
return 60;
}
+ @Override
public int[] getInputSlots() {
return new int[] {10, 11, 12, 13, 14, 15, 16};
}
@Override
- public void register(boolean slimefun) {
+ public int[] getOutputSlots() {
+ return new int[0];
+ }
+
+ @Override
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
public void tick(Block b, SlimefunItem sf, Config data) {
try {
AutoBreeder.this.tick(b);
- } catch (Exception e) {
- e.printStackTrace();
+ } catch (Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while ticking an Auto Breeder for Slimefun " + Slimefun.getVersion(), x);
}
}
- @Override
- public void uniqueTick() {
- }
-
@Override
public boolean isSynchronized() {
return true;
}
});
-
- super.register(slimefun);
}
protected void tick(Block b) throws Exception {
- for (Entity n : me.mrCookieSlime.Slimefun.holograms.AutoBreeder.getArmorStand(b).getNearbyEntities(4D, 2D, 4D)) {
+ for (Entity n : AutoBreederHologram.getArmorStand(b, true).getNearbyEntities(4D, 2D, 4D)) {
if (Animals.isFeedable(n)) {
for (int slot : getInputSlots()) {
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.ORGANIC_FOOD, false)) {
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java
similarity index 66%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java
index f23221ec0..4a4b937a8 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDisenchanter.java
@@ -1,9 +1,7 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -11,14 +9,13 @@ import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.Damageable;
import org.bukkit.inventory.meta.EnchantmentStorageMeta;
-import org.bukkit.inventory.meta.ItemMeta;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants;
import me.mrCookieSlime.EmeraldEnchants.ItemEnchantment;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
@@ -26,8 +23,8 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
-import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
public class AutoDisenchanter extends AContainer {
@@ -45,9 +42,6 @@ public class AutoDisenchanter extends AContainer {
return new ItemStack(Material.DIAMOND_CHESTPLATE);
}
- @Override
- public void registerDefaultRecipes() {}
-
@Override
public int getEnergyConsumption() {
return 9;
@@ -58,18 +52,7 @@ public class AutoDisenchanter extends AContainer {
if (isProcessing(b)) {
int timeleft = progress.get(b);
if (timeleft > 0) {
- ItemStack item = getProgressBar().clone();
- ItemMeta im = item.getItemMeta();
- ((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(b).getTicks()));
- im.setDisplayName(" ");
- List lore = new ArrayList();
- lore.add(MachineHelper.getProgress(timeleft, processing.get(b).getTicks()));
- lore.add("");
- lore.add(MachineHelper.getTimeLeft(timeleft / 2));
- im.setLore(lore);
- item.setItemMeta(im);
-
- BlockStorage.getInventory(b).replaceExistingItem(22, item);
+ MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
if (ChargableBlock.isChargable(b)) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
@@ -87,22 +70,27 @@ public class AutoDisenchanter extends AContainer {
}
}
else {
- MachineRecipe r = null;
- Map enchantments = new HashMap();
- Set enchantments2 = new HashSet();
- slots:
+ BlockMenu menu = BlockStorage.getInventory(b);
+ MachineRecipe recipe = null;
+ Map enchantments = new HashMap<>();
+ Set enchantments2 = new HashSet<>();
+
for (int slot: getInputSlots()) {
- ItemStack target = BlockStorage.getInventory(b).getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
- ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
+ ItemStack target = menu.getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
+ ItemStack item = menu.getItemInSlot(slot);
// Check if disenchantable
SlimefunItem sfItem = null;
- if ((item != null) && (item.getType() != Material.BOOK)) { // stops endless checks of getByItem for empty book stacks.
+
+ // stops endless checks of getByItem for empty book stacks.
+ if ((item != null) && (item.getType() != Material.BOOK)) {
sfItem = SlimefunItem.getByItem(item);
}
- if (sfItem != null && !sfItem.isDisenchantable()) return;
+ if (sfItem != null && !sfItem.isDisenchantable()) {
+ return;
+ }
- // Disenchant
+ // Disenchanting
if (item != null && target != null && target.getType() == Material.BOOK) {
int amount = 0;
@@ -110,7 +98,7 @@ public class AutoDisenchanter extends AContainer {
enchantments.put(e.getKey(), e.getValue());
amount++;
}
- if (Slimefun.isEmeraldEnchantsInstalled()) {
+ if (SlimefunPlugin.getHooks().isEmeraldEnchantsInstalled()) {
for (ItemEnchantment enchantment: EmeraldEnchants.getInstance().getRegistry().getEnchantments(item)) {
amount++;
enchantments2.add(enchantment);
@@ -123,6 +111,7 @@ public class AutoDisenchanter extends AContainer {
book.setAmount(1);
book.setType(Material.ENCHANTED_BOOK);
EnchantmentStorageMeta meta = (EnchantmentStorageMeta) book.getItemMeta();
+
for (Map.Entry e: enchantments.entrySet()) {
newItem.removeEnchantment(e.getKey());
meta.addStoredEnchant(e.getKey(), e.getValue(), true);
@@ -133,19 +122,22 @@ public class AutoDisenchanter extends AContainer {
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(book, e.getEnchantment(), e.getLevel());
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(newItem, e.getEnchantment(), 0);
}
- r = new MachineRecipe(100 * amount, new ItemStack[] {target, item}, new ItemStack[] {newItem, book});
- break slots;
+
+ recipe = new MachineRecipe(100 * amount, new ItemStack[] {target, item}, new ItemStack[] {newItem, book});
+ break;
}
}
}
- if (r != null) {
- if (!fits(b, r.getOutput())) return;
+ if (recipe != null) {
+ if (!fits(b, recipe.getOutput())) return;
+
for (int slot: getInputSlots()) {
- BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
+ menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1));
}
- processing.put(b, r);
- progress.put(b, r.getTicks());
+
+ processing.put(b, recipe);
+ progress.put(b, recipe.getTicks());
}
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java
new file mode 100644
index 000000000..43e08855d
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoDrier.java
@@ -0,0 +1,151 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.bukkit.Material;
+import org.bukkit.Tag;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
+
+public class AutoDrier extends AContainer implements RecipeDisplayItem {
+
+ private final List recipeList = new ArrayList<>();
+
+ public AutoDrier(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+
+ recipeList.add(new ItemStack(Material.ROTTEN_FLESH));
+ recipeList.add(new ItemStack(Material.LEATHER));
+
+ recipeList.add(new ItemStack(Material.WET_SPONGE));
+ recipeList.add(new ItemStack(Material.SPONGE));
+
+ recipeList.add(new ItemStack(Material.KELP));
+ recipeList.add(new ItemStack(Material.DRIED_KELP));
+
+ recipeList.add(new ItemStack(Material.COOKED_BEEF));
+ recipeList.add(SlimefunItems.BEEF_JERKY);
+
+ recipeList.add(new ItemStack(Material.POTION));
+ recipeList.add(new ItemStack(Material.GLASS_BOTTLE));
+
+ recipeList.add(new ItemStack(Material.OAK_SAPLING));
+ recipeList.add(new ItemStack(Material.STICK, 2));
+
+ recipeList.add(new ItemStack(Material.OAK_LEAVES));
+ recipeList.add(new ItemStack(Material.STICK));
+
+ recipeList.add(new ItemStack(Material.WATER_BUCKET));
+ recipeList.add(new ItemStack(Material.BUCKET));
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&eAuto Drier";
+ }
+
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.FLINT_AND_STEEL);
+ }
+
+ @Override
+ public List getDisplayRecipes() {
+ return recipeList;
+ }
+
+ @Override
+ protected void tick(Block b) {
+ if (isProcessing(b)) {
+ int timeleft = progress.get(b);
+ if (timeleft > 0) {
+ MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
+
+ if (ChargableBlock.isChargable(b)) {
+ if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
+ ChargableBlock.addCharge(b, -getEnergyConsumption());
+ progress.put(b, timeleft - 1);
+ }
+ else progress.put(b, timeleft - 1);
+ }
+ else {
+ BlockStorage.getInventory(b).replaceExistingItem(22, new CustomItem(new ItemStack(Material.BLACK_STAINED_GLASS_PANE), " "));
+ pushItems(b, processing.get(b).getOutput());
+
+ progress.remove(b);
+ processing.remove(b);
+ }
+ }
+ else {
+ MachineRecipe r = null;
+ int inputSlot = -1;
+
+ for (int slot: getInputSlots()) {
+ ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
+ if (item != null) {
+ Material mat = item.getType();
+ ItemStack output = null;
+
+ for (int i = 0; i < recipeList.size(); i += 2) {
+ if (SlimefunManager.isItemSimiliar(item, recipeList.get(i), true)) {
+ output = recipeList.get(i + 1);
+ }
+ }
+
+ if (Tag.SAPLINGS.isTagged(mat)) {
+ output = new ItemStack(Material.STICK, 2);
+ }
+ else if (Tag.LEAVES.isTagged(mat)) {
+ output = new ItemStack(Material.STICK, 1);
+ }
+ else if (mat == Material.SPLASH_POTION || mat == Material.LINGERING_POTION) {
+ output = new ItemStack(Material.GLASS_BOTTLE);
+ }
+
+ if (output != null) {
+ r = new MachineRecipe(6, new ItemStack[] {item}, new ItemStack[] {output.clone()});
+ inputSlot = slot;
+ break;
+ }
+ }
+ }
+
+ if (r != null) {
+ if (inputSlot == -1) return;
+ if (!fits(b, r.getOutput())) return;
+ BlockStorage.getInventory(b).replaceExistingItem(inputSlot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(inputSlot), 1));
+ processing.put(b, r);
+ progress.put(b, r.getTicks());
+ }
+ }
+ }
+
+ @Override
+ public int getEnergyConsumption() {
+ return 5;
+ }
+
+ @Override
+ public int getSpeed() {
+ return 1;
+ }
+
+ @Override
+ public String getMachineIdentifier() {
+ return "AUTO_DRIER";
+ }
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoEnchanter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoEnchanter.java
similarity index 65%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoEnchanter.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoEnchanter.java
index 6febd2a0f..e1250db32 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoEnchanter.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutoEnchanter.java
@@ -1,16 +1,21 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.enchantments.Enchantment;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.EnchantmentStorageMeta;
+
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.EmeraldEnchants.EmeraldEnchants;
import me.mrCookieSlime.EmeraldEnchants.ItemEnchantment;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
@@ -18,21 +23,11 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
-import me.mrCookieSlime.Slimefun.api.Slimefun;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
-
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.enchantments.Enchantment;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.Damageable;
-import org.bukkit.inventory.meta.EnchantmentStorageMeta;
-import org.bukkit.inventory.meta.ItemMeta;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
public class AutoEnchanter extends AContainer {
- public static int max_emerald_enchantments = 2;
-
public AutoEnchanter(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
}
@@ -47,9 +42,6 @@ public class AutoEnchanter extends AContainer {
return new ItemStack(Material.GOLDEN_CHESTPLATE);
}
- @Override
- public void registerDefaultRecipes() {}
-
@Override
public int getEnergyConsumption() {
return 9;
@@ -60,19 +52,8 @@ public class AutoEnchanter extends AContainer {
if (isProcessing(b)) {
int timeleft = progress.get(b);
if (timeleft > 0) {
- ItemStack item = getProgressBar().clone();
- ItemMeta im = item.getItemMeta();
- ((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(b).getTicks()));
- im.setDisplayName(" ");
- List lore = new ArrayList();
- lore.add(MachineHelper.getProgress(timeleft, processing.get(b).getTicks()));
- lore.add("");
- lore.add(MachineHelper.getTimeLeft(timeleft / 2));
- im.setLore(lore);
- item.setItemMeta(im);
-
- BlockStorage.getInventory(b).replaceExistingItem(22, item);
-
+ MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
+
if (ChargableBlock.isChargable(b)) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
ChargableBlock.addCharge(b, -getEnergyConsumption());
@@ -89,60 +70,68 @@ public class AutoEnchanter extends AContainer {
}
}
else {
- MachineRecipe r = null;
- slots:
+ BlockMenu menu = BlockStorage.getInventory(b.getLocation());
+ MachineRecipe recipe = null;
+
for (int slot: getInputSlots()) {
- ItemStack target = BlockStorage.getInventory(b).getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
+ ItemStack target = menu.getItemInSlot(slot == getInputSlots()[0] ? getInputSlots()[1]: getInputSlots()[0]);
// Check if enchantable
SlimefunItem sfTarget = SlimefunItem.getByItem(target);
if(sfTarget != null && !sfTarget.isEnchantable()) return;
- ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot);
+ ItemStack item = menu.getItemInSlot(slot);
// Enchant
if (item != null && item.getType() == Material.ENCHANTED_BOOK && target != null) {
- Map enchantments = new HashMap();
- Set enchantments2 = new HashSet();
+ Map enchantments = new HashMap<>();
+ Set enchantments2 = new HashSet<>();
int amount = 0;
- int special_amount = 0;
+ int specialAmount = 0;
EnchantmentStorageMeta meta = (EnchantmentStorageMeta) item.getItemMeta();
+
for (Map.Entry e: meta.getStoredEnchants().entrySet()) {
if (e.getKey().canEnchantItem(target)) {
amount++;
enchantments.put(e.getKey(), e.getValue());
}
}
- if (Slimefun.isEmeraldEnchantsInstalled()) {
+
+ if (SlimefunPlugin.getHooks().isEmeraldEnchantsInstalled()) {
for (ItemEnchantment enchantment: EmeraldEnchants.getInstance().getRegistry().getEnchantments(item)) {
if (EmeraldEnchants.getInstance().getRegistry().isApplicable(target, enchantment.getEnchantment()) && EmeraldEnchants.getInstance().getRegistry().getEnchantmentLevel(target, enchantment.getEnchantment().getName()) < enchantment.getLevel()) {
amount++;
- special_amount++;
+ specialAmount++;
enchantments2.add(enchantment);
}
}
- special_amount += EmeraldEnchants.getInstance().getRegistry().getEnchantments(target).size();
+ specialAmount += EmeraldEnchants.getInstance().getRegistry().getEnchantments(target).size();
}
- if (amount > 0 && special_amount <= max_emerald_enchantments) {
+
+ if (amount > 0 && specialAmount <= SlimefunPlugin.getSettings().emeraldEnchantsLimit) {
ItemStack newItem = target.clone();
for (Map.Entry e: enchantments.entrySet()) {
newItem.addUnsafeEnchantment(e.getKey(), e.getValue());
}
+
for (ItemEnchantment e: enchantments2) {
EmeraldEnchants.getInstance().getRegistry().applyEnchantment(newItem, e.getEnchantment(), e.getLevel());
}
- r = new MachineRecipe(75 * amount, new ItemStack[] {target, item}, new ItemStack[] {newItem, new ItemStack(Material.BOOK)});
+
+ recipe = new MachineRecipe(75 * amount, new ItemStack[] {target, item}, new ItemStack[] {newItem, new ItemStack(Material.BOOK)});
}
- break slots;
+ break;
}
}
- if (r != null) {
- if (!fits(b, r.getOutput())) return;
+ if (recipe != null) {
+ if (!fits(b, recipe.getOutput())) return;
+
for (int slot: getInputSlots()) {
- BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
+ menu.replaceExistingItem(slot, InvUtils.decreaseItem(menu.getItemInSlot(slot), 1));
}
- processing.put(b, r);
- progress.put(b, r.getTicks());
+
+ processing.put(b, recipe);
+ progress.put(b, recipe.getTicks());
}
}
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java
similarity index 79%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java
index a3f19ea75..8ac0a250f 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/AutomatedCraftingChamber.java
@@ -1,17 +1,13 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryClickEvent;
-import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
@@ -22,12 +18,14 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItemSerializer;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItemSerializer.ItemFlag;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
@@ -35,13 +33,11 @@ import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
import me.mrCookieSlime.Slimefun.api.item_transport.RecipeSorter;
-public abstract class AutomatedCraftingChamber extends SlimefunItem {
+public abstract class AutomatedCraftingChamber extends SlimefunItem implements InventoryBlock {
private static final int[] border = {0, 1, 3, 4, 5, 7, 8, 13, 14, 15, 16, 17, 50, 51, 52, 53};
private static final int[] border_in = {9, 10, 11, 12, 13, 18, 22, 27, 31, 36, 40, 45, 46, 47, 48, 49};
private static final int[] border_out = {23, 24, 25, 26, 32, 35, 41, 42, 43, 44};
-
- public static Map recipes = new HashMap();
public AutomatedCraftingChamber(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
@@ -85,9 +81,9 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem {
@Override
public int[] getSlotsAccessedByItemTransport(BlockMenu menu, ItemTransportFlow flow, ItemStack item) {
- if (flow.equals(ItemTransportFlow.WITHDRAW)) return getOutputSlots();
+ if (flow == ItemTransportFlow.WITHDRAW) return getOutputSlots();
- List slots = new ArrayList();
+ List slots = new ArrayList<>();
for (int slot : getInputSlots()) {
if (menu.getItemInSlot(slot) != null) slots.add(slot);
}
@@ -134,19 +130,15 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem {
protected void constructMenu(BlockMenuPreset preset) {
for (int i : border) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.GRAY_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
+
for (int i : border_in) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.BLUE_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.BLUE_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
+
for (int i : border_out) {
- preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "),
- (p, slot, item, action) -> false
- );
+ preset.addItem(i, new CustomItem(new ItemStack(Material.ORANGE_STAINED_GLASS_PANE), " "), (p, slot, item, action) -> false);
}
for (int i : getOutputSlots()) {
@@ -164,48 +156,23 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem {
});
}
- preset.addItem(2, new CustomItem(new ItemStack(Material.CRAFTING_TABLE), "&eRecipe", "", "&bPut in the Recipe you want to craft", "&4Enhanced Crafting Table Recipes ONLY"),
- (p, slot, item, action) -> false
- );
+ preset.addItem(2, new CustomItem(new ItemStack(Material.CRAFTING_TABLE), "&eRecipe", "", "&bPut in the Recipe you want to craft", "&4Enhanced Crafting Table Recipes ONLY"), (p, slot, item, action) -> false);
}
public abstract int getEnergyConsumption();
-
+
+ @Override
public int[] getInputSlots() {
return new int[] {19, 20, 21, 28, 29, 30, 37, 38, 39};
}
+ @Override
public int[] getOutputSlots() {
return new int[] {33, 34};
}
- private Inventory inject(Block b) {
- int size = BlockStorage.getInventory(b).toInventory().getSize();
- Inventory inv = Bukkit.createInventory(null, size);
- for (int i = 0; i < size; i++) {
- inv.setItem(i, new CustomItem(Material.COMMAND_BLOCK, " &4ALL YOUR PLACEHOLDERS ARE BELONG TO US"));
- }
- for (int slot : getOutputSlots()) {
- inv.setItem(slot, BlockStorage.getInventory(b).getItemInSlot(slot));
- }
- return inv;
- }
-
- protected boolean fits(Block b, ItemStack[] items) {
- return inject(b).addItem(items).isEmpty();
- }
-
- protected void pushItems(Block b, ItemStack[] items) {
- Inventory inv = inject(b);
- inv.addItem(items);
-
- for (int slot : getOutputSlots()) {
- BlockStorage.getInventory(b).replaceExistingItem(slot, inv.getItem(slot));
- }
- }
-
@Override
- public void register(boolean slimefun) {
+ public void preRegister() {
addItemHandler(new BlockTicker() {
@Override
@@ -213,17 +180,11 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem {
AutomatedCraftingChamber.this.tick(b);
}
- @Override
- public void uniqueTick() {
- }
-
@Override
public boolean isSynchronized() {
return false;
}
});
-
- super.register(slimefun);
}
protected void tick(Block b) {
@@ -240,9 +201,7 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem {
}
ItemStack item = menu.getItemInSlot(getInputSlots()[j]);
-
if (item != null && item.getAmount() == 1) return;
-
builder.append(CustomItemSerializer.serialize(item, ItemFlag.MATERIAL, ItemFlag.ITEMMETA_DISPLAY_NAME, ItemFlag.ITEMMETA_LORE));
i++;
@@ -250,11 +209,11 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem {
String input = builder.toString();
- if (recipes.containsKey(input)) {
- ItemStack output = recipes.get(input).clone();
+ if (SlimefunPlugin.getUtilities().automatedCraftingChamberRecipes.containsKey(input)) {
+ ItemStack output = SlimefunPlugin.getUtilities().automatedCraftingChamberRecipes.get(input).clone();
- if (fits(b, new ItemStack[] {output})) {
- pushItems(b, new ItemStack[] {output});
+ if (fits(b, output)) {
+ pushItems(b, output);
ChargableBlock.addCharge(b, -getEnergyConsumption());
for (int j = 0; j < 9; j++) {
if (menu.getItemInSlot(getInputSlots()[j]) != null) menu.replaceExistingItem(getInputSlots()[j], InvUtils.decreaseItem(menu.getItemInSlot(getInputSlots()[j]), 1));
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CarbonPress.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java
similarity index 77%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CarbonPress.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java
index b49e7cdd8..831200b03 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CarbonPress.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CarbonPress.java
@@ -1,4 +1,4 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
@@ -8,8 +8,9 @@ import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
-public abstract class CarbonPress extends AContainer {
+public abstract class CarbonPress extends AContainer implements RecipeDisplayItem {
public CarbonPress(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
@@ -30,6 +31,14 @@ public abstract class CarbonPress extends AContainer {
return "CARBON_PRESS";
}
-
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.DIAMOND_PICKAXE);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&cCarbon Press";
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ChargingBench.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ChargingBench.java
similarity index 68%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ChargingBench.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ChargingBench.java
index 7098faf85..a58137ac9 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ChargingBench.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ChargingBench.java
@@ -1,48 +1,20 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
+
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
-import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
import me.mrCookieSlime.Slimefun.api.energy.ItemEnergy;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
-import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
-import me.mrCookieSlime.Slimefun.api.item_transport.ItemTransportFlow;
-
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.ItemStack;
public class ChargingBench extends AContainer {
public ChargingBench(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
-
- new BlockMenuPreset(name, getInventoryTitle()) {
-
- @Override
- public void init() {
- constructMenu(this);
- }
-
- @Override
- public void newInstance(BlockMenu menu, Block b) {
- }
-
- @Override
- public boolean canOpen(Block b, Player p) {
- return p.hasPermission("slimefun.inventory.bypass") || CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true);
- }
-
- @Override
- public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) {
- if (flow.equals(ItemTransportFlow.INSERT)) return getInputSlots();
- else return getOutputSlots();
- }
- };
}
@Override
@@ -61,8 +33,6 @@ public class ChargingBench extends AContainer {
}
@Override
- public void registerDefaultRecipes() {}
-
protected void tick(Block b) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java
new file mode 100644
index 000000000..493b2805b
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/CropGrowthAccelerator.java
@@ -0,0 +1,143 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
+
+import java.util.EnumMap;
+import java.util.Map;
+import java.util.logging.Level;
+
+import org.bukkit.Material;
+import org.bukkit.Particle;
+import org.bukkit.block.Block;
+import org.bukkit.block.data.Ageable;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
+import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.InventoryBlock;
+import me.mrCookieSlime.Slimefun.Objects.handlers.BlockTicker;
+import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
+import me.mrCookieSlime.Slimefun.api.BlockStorage;
+import me.mrCookieSlime.Slimefun.api.Slimefun;
+import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
+import me.mrCookieSlime.Slimefun.api.inventory.BlockMenuPreset;
+
+public abstract class CropGrowthAccelerator extends SlimefunItem implements InventoryBlock {
+
+ private static final int[] border = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
+ private static final Map crops = new EnumMap<>(Material.class);
+
+ static {
+ crops.put(Material.WHEAT, 7);
+ crops.put(Material.POTATOES, 7);
+ crops.put(Material.CARROTS, 7);
+ crops.put(Material.NETHER_WART, 3);
+ crops.put(Material.BEETROOTS, 3);
+ crops.put(Material.COCOA, 8);
+ crops.put(Material.SWEET_BERRY_BUSH, 3);
+ }
+
+ public CropGrowthAccelerator(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, name, recipeType, recipe);
+ createPreset(this, "&bGrowth Accelerator", this::constructMenu);
+
+ registerBlockHandler(name, (p, b, tool, reason) -> {
+ BlockMenu inv = BlockStorage.getInventory(b);
+ if (inv != null) {
+ for (int slot: getInputSlots()) {
+ if (inv.getItemInSlot(slot) != null) {
+ b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot));
+ inv.replaceExistingItem(slot, null);
+ }
+ }
+ }
+ return true;
+ });
+ }
+
+ protected void constructMenu(BlockMenuPreset preset) {
+ for (int i : border) {
+ preset.addItem(i, new CustomItem(new ItemStack(Material.CYAN_STAINED_GLASS_PANE), " "),
+ (p, slot, item, action) -> false
+ );
+ }
+ }
+
+ public abstract int getEnergyConsumption();
+ public abstract int getRadius();
+ public abstract int getSpeed();
+
+ @Override
+ public int[] getInputSlots() {
+ return new int[] {10, 11, 12, 13, 14, 15, 16};
+ }
+
+ @Override
+ public int[] getOutputSlots() {
+ return new int[0];
+ }
+
+ @Override
+ public void preRegister() {
+ addItemHandler(new BlockTicker() {
+
+ @Override
+ public void tick(Block b, SlimefunItem sf, Config data) {
+ try {
+ CropGrowthAccelerator.this.tick(b);
+ } catch (Exception x) {
+ Slimefun.getLogger().log(Level.SEVERE, "An Error occured while ticking a Crop Growth Accelerator for Slimefun " + Slimefun.getVersion(), x);
+ }
+ }
+
+ @Override
+ public boolean isSynchronized() {
+ return true;
+ }
+ });
+ }
+
+ protected void tick(Block b) {
+ if (work(b) > 0) {
+ for (int slot : getInputSlots()) {
+ if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.FERTILIZER, false)) {
+ BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
+ break;
+ }
+ }
+ }
+ }
+
+ private int work(Block b) {
+ int work = 0;
+
+ for (int x = -getRadius(); x <= getRadius(); x++) {
+ for (int z = -getRadius(); z <= getRadius(); z++) {
+ Block block = b.getRelative(x, 0, z);
+ if (crops.containsKey(block.getType()) && ((Ageable) block.getBlockData()).getAge() < crops.get(block.getType())) {
+ for (int slot : getInputSlots()) {
+ if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.FERTILIZER, false)) {
+ if (work > (getSpeed() - 1) || ChargableBlock.getCharge(b) < getEnergyConsumption()) return work;
+ ChargableBlock.addCharge(b, -getEnergyConsumption());
+
+ Ageable ageable = (Ageable) block.getBlockData();
+ ageable.setAge(ageable.getAge() + 1);
+ block.setBlockData(ageable);
+
+ block.getWorld().spawnParticle(Particle.VILLAGER_HAPPY, block.getLocation().add(0.5D, 0.5D, 0.5D), 4, 0.1F, 0.1F, 0.1F);
+ work++;
+ return work;
+ }
+ }
+ }
+ }
+ }
+
+ return work;
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricDustWasher.java
similarity index 65%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricDustWasher.java
index f16e1169b..cf12b836c 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricDustWasher.java
@@ -1,29 +1,27 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Random;
+
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
-import me.mrCookieSlime.Slimefun.SlimefunStartup;
+import me.mrCookieSlime.Slimefun.SlimefunPlugin;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks.OreWasher;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.Damageable;
-import org.bukkit.inventory.meta.ItemMeta;
-
public abstract class ElectricDustWasher extends AContainer {
-
+
public ElectricDustWasher(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
}
@@ -37,29 +35,15 @@ public abstract class ElectricDustWasher extends AContainer {
public ItemStack getProgressBar() {
return new ItemStack(Material.GOLDEN_SHOVEL);
}
-
- @Override
- public void registerDefaultRecipes() {}
public abstract int getSpeed();
- public static boolean legacy_dust_washer = false;
-
+
+ @Override
protected void tick(Block b) {
if (isProcessing(b)) {
int timeleft = progress.get(b);
if (timeleft > 0 && getSpeed() < 10) {
- ItemStack item = getProgressBar().clone();
- ItemMeta im = item.getItemMeta();
- ((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(b).getTicks()));
- im.setDisplayName(" ");
- List lore = new ArrayList();
- lore.add(MachineHelper.getProgress(timeleft, processing.get(b).getTicks()));
- lore.add("");
- lore.add(MachineHelper.getTimeLeft(timeleft / 2));
- im.setLore(lore);
- item.setItemMeta(im);
-
- BlockStorage.getInventory(b).replaceExistingItem(22, item);
+ MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
if (ChargableBlock.isChargable(b)) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
@@ -82,29 +66,21 @@ public abstract class ElectricDustWasher extends AContainer {
else {
for (int slot: getInputSlots()) {
if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.SIFTED_ORE, true)) {
- if (!legacy_dust_washer) {
- boolean empty_slot = false;
+ if (!SlimefunPlugin.getSettings().legacyDustWasher) {
+ boolean emptySlot = false;
+
for (int output_slot: getOutputSlots()) {
if (BlockStorage.getInventory(b).getItemInSlot(output_slot) == null) {
- empty_slot = true;
+ emptySlot = true;
break;
}
}
- if (!empty_slot) return;
+ if (!emptySlot) return;
}
-
- ItemStack adding = SlimefunItems.IRON_DUST;
- if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.GOLD_DUST;
- else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.ALUMINUM_DUST;
- else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.COPPER_DUST;
- else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.ZINC_DUST;
- else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.TIN_DUST;
- else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.MAGNESIUM_DUST;
- else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.LEAD_DUST;
- else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.SILVER_DUST;
+ ItemStack adding = OreWasher.items[new Random().nextInt(OreWasher.items.length)];
MachineRecipe r = new MachineRecipe(4 / getSpeed(), new ItemStack[0], new ItemStack[] {adding});
- if (legacy_dust_washer && !fits(b, r.getOutput())) return;
+ if (SlimefunPlugin.getSettings().legacyDustWasher && !fits(b, r.getOutput())) return;
BlockStorage.getInventory(b).replaceExistingItem(slot, InvUtils.decreaseItem(BlockStorage.getInventory(b).getItemInSlot(slot), 1));
processing.put(b, r);
progress.put(b, r.getTicks());
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricFurnace.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricFurnace.java
similarity index 88%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricFurnace.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricFurnace.java
index 12b736ab1..906d9578c 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricFurnace.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricFurnace.java
@@ -1,4 +1,4 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.Iterator;
@@ -30,8 +30,9 @@ public abstract class ElectricFurnace extends AContainer {
}
//Bukkit Recipe Iterator does not seem to include _LOG's of any type for charcoal... Manually adding them all.
- for(Material mat:Tag.LOGS.getValues())
+ for (Material mat:Tag.LOGS.getValues()) {
registerRecipe(4, new ItemStack[] {new ItemStack(mat,1)}, new ItemStack[] {new ItemStack(Material.CHARCOAL, 1)});
+ }
}
@Override
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricGoldPan.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java
similarity index 78%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricGoldPan.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java
index 3da5401f5..6da65a837 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricGoldPan.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricGoldPan.java
@@ -1,8 +1,12 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
+
import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
@@ -12,18 +16,24 @@ import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineHelper;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.energy.ChargableBlock;
-import org.bukkit.Material;
-import org.bukkit.block.Block;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.Damageable;
-import org.bukkit.inventory.meta.ItemMeta;
-
-public abstract class ElectricGoldPan extends AContainer {
+public abstract class ElectricGoldPan extends AContainer implements RecipeDisplayItem {
+ private final List displayRecipes = Arrays.asList(
+ new ItemStack(Material.GRAVEL),
+ SlimefunItems.SIFTED_ORE,
+
+ new ItemStack(Material.GRAVEL),
+ new ItemStack(Material.FLINT),
+
+ new ItemStack(Material.GRAVEL),
+ new ItemStack(Material.CLAY_BALL)
+ );
+
public ElectricGoldPan(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
}
@@ -37,28 +47,15 @@ public abstract class ElectricGoldPan extends AContainer {
public ItemStack getProgressBar() {
return new ItemStack(Material.DIAMOND_SHOVEL);
}
-
- @Override
- public void registerDefaultRecipes() {}
public abstract int getSpeed();
-
+
+ @Override
protected void tick(Block b) {
if (isProcessing(b)) {
int timeleft = progress.get(b);
if (timeleft > 0 && getSpeed() < 10) {
- ItemStack item = getProgressBar().clone();
- ItemMeta im = item.getItemMeta();
- ((Damageable) im).setDamage(MachineHelper.getDurability(item, timeleft, processing.get(b).getTicks()));
- im.setDisplayName(" ");
- List lore = new ArrayList();
- lore.add(MachineHelper.getProgress(timeleft, processing.get(b).getTicks()));
- lore.add("");
- lore.add(MachineHelper.getTimeLeft(timeleft / 2));
- im.setLore(lore);
- item.setItemMeta(im);
-
- BlockStorage.getInventory(b).replaceExistingItem(22, item);
+ MachineHelper.updateProgressbar(BlockStorage.getInventory(b), 22, timeleft, processing.get(b).getTicks(), getProgressBar());
if (ChargableBlock.isChargable(b)) {
if (ChargableBlock.getCharge(b) < getEnergyConsumption()) return;
@@ -100,5 +97,10 @@ public abstract class ElectricGoldPan extends AContainer {
public String getMachineIdentifier() {
return "ELECTRIC_GOLD_PAN";
}
+
+ @Override
+ public List getDisplayRecipes() {
+ return displayRecipes;
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricIngotFactory.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java
similarity index 81%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricIngotFactory.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java
index e5cf51356..ee0c76b9c 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricIngotFactory.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotFactory.java
@@ -1,15 +1,16 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
+
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
import me.mrCookieSlime.Slimefun.Objects.Category;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
-import org.bukkit.Material;
-import org.bukkit.inventory.ItemStack;
-
-public abstract class ElectricIngotFactory extends AContainer {
+public abstract class ElectricIngotFactory extends AContainer implements RecipeDisplayItem {
public ElectricIngotFactory(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
super(category, item, name, recipeType, recipe);
@@ -32,5 +33,15 @@ public abstract class ElectricIngotFactory extends AContainer {
public String getMachineIdentifier() {
return "ELECTRIC_INGOT_FACTORY";
}
+
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.FLINT_AND_STEEL);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&cElectric Ingot Factory";
+ }
}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java
new file mode 100644
index 000000000..319f53474
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricIngotPulverizer.java
@@ -0,0 +1,72 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Lists.SlimefunItems;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
+
+public class ElectricIngotPulverizer extends AContainer implements RecipeDisplayItem {
+
+ public ElectricIngotPulverizer(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, id, recipeType, recipe);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&bElectric Ingot Pulverizer";
+ }
+
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.IRON_PICKAXE);
+ }
+
+ @Override
+ public void registerDefaultRecipes() {
+ registerRecipe(3, new ItemStack[]{SlimefunItems.ALUMINUM_INGOT}, new ItemStack[]{SlimefunItems.ALUMINUM_DUST});
+ registerRecipe(3, new ItemStack[]{SlimefunItems.COPPER_INGOT}, new ItemStack[]{SlimefunItems.COPPER_DUST});
+ registerRecipe(3, new ItemStack[]{SlimefunItems.GOLD_4K}, new ItemStack[]{SlimefunItems.GOLD_DUST});
+ registerRecipe(3, new ItemStack[]{new ItemStack(Material.IRON_INGOT)}, new ItemStack[]{SlimefunItems.IRON_DUST});
+ registerRecipe(3, new ItemStack[]{SlimefunItems.LEAD_INGOT}, new ItemStack[]{SlimefunItems.LEAD_DUST});
+ registerRecipe(3, new ItemStack[]{SlimefunItems.MAGNESIUM_INGOT}, new ItemStack[]{SlimefunItems.MAGNESIUM_DUST});
+ registerRecipe(3, new ItemStack[]{SlimefunItems.SILVER_INGOT}, new ItemStack[]{SlimefunItems.SILVER_DUST});
+ registerRecipe(3, new ItemStack[]{SlimefunItems.TIN_INGOT}, new ItemStack[]{SlimefunItems.TIN_DUST});
+ registerRecipe(3, new ItemStack[]{SlimefunItems.ZINC_INGOT}, new ItemStack[]{SlimefunItems.ZINC_DUST});
+ }
+
+ @Override
+ public List getDisplayRecipes() {
+ List displayRecipes = new ArrayList<>(recipes.size() * 2);
+
+ for (MachineRecipe recipe: recipes) {
+ displayRecipes.add(recipe.getInput()[0]);
+ displayRecipes.add(recipe.getOutput()[0]);
+ }
+
+ return displayRecipes;
+ }
+
+ @Override
+ public int getEnergyConsumption() {
+ return 7;
+ }
+
+ @Override
+ public int getSpeed() {
+ return 1;
+ }
+
+ @Override
+ public String getMachineIdentifier() {
+ return "ELECTRIC_INGOT_PULVERIZER";
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java
new file mode 100644
index 000000000..f2439dcd4
--- /dev/null
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricOreGrinder.java
@@ -0,0 +1,32 @@
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
+
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+
+import me.mrCookieSlime.Slimefun.Lists.RecipeType;
+import me.mrCookieSlime.Slimefun.Objects.Category;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
+import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.interfaces.RecipeDisplayItem;
+
+public abstract class ElectricOreGrinder extends AContainer implements RecipeDisplayItem {
+
+ public ElectricOreGrinder(Category category, ItemStack item, String name, RecipeType recipeType, ItemStack[] recipe) {
+ super(category, item, name, recipeType, recipe);
+ }
+
+ @Override
+ public String getMachineIdentifier() {
+ return "ELECTRIC_ORE_GRINDER";
+ }
+
+ @Override
+ public ItemStack getProgressBar() {
+ return new ItemStack(Material.IRON_PICKAXE);
+ }
+
+ @Override
+ public String getInventoryTitle() {
+ return "&bElectric Ore Grinder";
+ }
+
+}
diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricSmeltery.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricSmeltery.java
similarity index 72%
rename from src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricSmeltery.java
rename to src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricSmeltery.java
index 8d0a6cbea..9e8c888f6 100644
--- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricSmeltery.java
+++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElectricSmeltery.java
@@ -1,10 +1,8 @@
-package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines;
+package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.electric;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -18,11 +16,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ClickAction;
import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem;
import me.mrCookieSlime.Slimefun.Lists.RecipeType;
import me.mrCookieSlime.Slimefun.Objects.Category;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer;
-import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineRecipe;
import me.mrCookieSlime.Slimefun.Setup.SlimefunManager;
import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu;
@@ -32,11 +26,6 @@ import me.mrCookieSlime.Slimefun.api.item_transport.RecipeSorter;
public abstract class ElectricSmeltery extends AContainer {
- public static Map