From 16899eb96a3e5779dd1f788349f6bbc119f7c476 Mon Sep 17 00:00:00 2001 From: Dylan Xaldin Date: Wed, 7 Feb 2018 19:06:06 -0600 Subject: [PATCH 01/85] Fix Reinforced Spawners being a Pig Spawner when placed. --- src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 42f6afdb5..4569e8a16 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -2749,8 +2749,9 @@ public class SlimefunSetup { if (ChatColor.stripColor(line).startsWith("Type: ")) type = EntityType.valueOf(ChatColor.stripColor(line).replace("Type: ", "").replace(" ", "_").toUpperCase()); } if (type != null) { - ((CreatureSpawner) e.getBlock().getState()).setSpawnedType(type); - e.getBlock().getState().update(true, false); + CreatureSpawner spawner = (CreatureSpawner) e.getBlock().getState(); + spawner.setSpawnedType(type); + spawner.update(true, false); } return true; } From e7e195a43e96d249f4b8e1d62597fb60047f7a3a Mon Sep 17 00:00:00 2001 From: Meta-Win <33970831+Meta-Win@users.noreply.github.com> Date: Thu, 15 Feb 2018 14:24:27 -0200 Subject: [PATCH 02/85] Fix Conflict Names --- .../Slimefun/Setup/SlimefunSetup.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 4569e8a16..04560c602 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -2783,8 +2783,8 @@ public class SlimefunSetup { new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.APPLE), new ItemStack(Material.MELON), new ItemStack(Material.SUGAR), null, null, null, null, null}, new CustomItem(SlimefunItems.FRUIT_CAKE, 4)) .register(true); - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.APPLE_PIE, "APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.APPLE_PIE, 2)) + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_APPLE_PIE, "CHRISTMAS_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) .register(true); new EnhancedFurnace(1, 1, 1, SlimefunItems.ENHANCED_FURNACE, "ENHANCED_FURNACE", @@ -2909,8 +2909,8 @@ public class SlimefunSetup { } }); - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.HOT_CHOCOLATE, "HOT_CHOCOLATE", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.CHOCOLATE_MILK, null, null, null, null, null, null, null, null}, SlimefunItems.HOT_CHOCOLATE) + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE, "CHRISTMAS_HOT_CHOCOLATE", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.CHOCOLATE_MILK, null, null, null, null, null, null, null, null}, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CAKE, "CHRISTMAS_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, @@ -3051,8 +3051,8 @@ public class SlimefunSetup { new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.CARROT_ITEM), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CARROT_PIE, 2)) .register(true); - new SlimefunItem(Categories.EASTER, SlimefunItems.APPLE_PIE, "APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.APPLE_PIE, 2)) + new SlimefunItem(Categories.EASTER, SlimefunItems.CHRISTMAS_APPLE_PIE, "APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) .register(true); new SlimefunItem(Categories.EASTER, SlimefunItems.EASTER_EGG, "EASTER_EGG", RecipeType.ENHANCED_CRAFTING_TABLE, @@ -3069,7 +3069,7 @@ public class SlimefunSetup { List gifts = new ArrayList(); for (int i = 0; i < 2; i++) { gifts.add(new CustomItem(SlimefunItems.CARROT_PIE, 4)); - gifts.add(new CustomItem(SlimefunItems.APPLE_PIE, 4)); + gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 4)); gifts.add(new CustomItem(SlimefunItems.CARROT_JUICE, 1)); } From 79cd64361a7c2155512854292581319ca1d4b76f Mon Sep 17 00:00:00 2001 From: Meta-Win <33970831+Meta-Win@users.noreply.github.com> Date: Thu, 15 Feb 2018 14:25:14 -0200 Subject: [PATCH 03/85] Fix Conflict Names --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 0c8be8b5e..4f7341366 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -108,8 +108,8 @@ public class SlimefunItems { public static ItemStack APPLE_CIDER = new CustomPotion("&cApple Cider", 8197, new String[0], new PotionEffect(PotionEffectType.SATURATION, 14, 0)); public static ItemStack CHRISTMAS_COOKIE = new CustomItem(Material.COOKIE, Christmas.color("Christmas Cookie"), 0); public static ItemStack FRUIT_CAKE = new CustomItem(Material.PUMPKIN_PIE, Christmas.color("Fruit Cake"), 0); - public static ItemStack APPLE_PIE = new CustomItem(Material.PUMPKIN_PIE, "&rApple Pie", 0); - public static ItemStack HOT_CHOCOLATE = new CustomPotion("&6Hot Chocolate", 8201, new String[0], new PotionEffect(PotionEffectType.SATURATION, 14, 0)); + public static ItemStack CHRISTMAS_APPLE_PIE = new CustomItem(Material.PUMPKIN_PIE, "&rApple Pie", 0); + public static ItemStack CHRISTMAS_HOT_CHOCOLATE = new CustomPotion("&6Hot Chocolate", 8201, new String[0], new PotionEffect(PotionEffectType.SATURATION, 14, 0)); public static ItemStack CHRISTMAS_CAKE = new CustomItem(Material.PUMPKIN_PIE, Christmas.color("Christmas Cake"), 0); public static ItemStack CARAMEL = new CustomItem(Material.CLAY_BRICK, "&6Caramel", 0); public static ItemStack CARAMEL_APPLE = new CustomItem(Material.APPLE, "&6Caramel Apple", 0); From 948c6a650b154fa978f75958892425e97629254f Mon Sep 17 00:00:00 2001 From: Meta-Win <33970831+Meta-Win@users.noreply.github.com> Date: Thu, 15 Feb 2018 14:25:55 -0200 Subject: [PATCH 04/85] Fix Conflict Names --- src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java index 6bb521bdf..a41d01d52 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java @@ -106,7 +106,7 @@ public class ToolListener implements Listener { FireworkShow.launchRandom(e.getPlayer(), 3); List gifts = new ArrayList(); for (int i = 0; i < 2; i++) { - gifts.add(new CustomItem(SlimefunItems.HOT_CHOCOLATE, 1)); + gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_HOT_CHOCOLATE, 1)); gifts.add(new CustomItem(SlimefunItems.CHOCOLATE_APPLE, 4)); gifts.add(new CustomItem(SlimefunItems.CARAMEL_APPLE, 4)); gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_CAKE, 4)); @@ -116,7 +116,7 @@ public class ToolListener implements Listener { gifts.add(new CustomItem(SlimefunItems.MILK, 1)); gifts.add(new CustomItem(SlimefunItems.APPLE_CIDER, 1)); gifts.add(new CustomItem(SlimefunItems.FRUIT_CAKE, 4)); - gifts.add(new CustomItem(SlimefunItems.APPLE_PIE, 4)); + gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 4)); } gifts.add(new SkullItem("mrCookieSlime")); gifts.add(new SkullItem("timtower")); From 2bec58d361a134013a55df755b1a19a2a0083b3c Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Tue, 20 Feb 2018 14:14:56 -0800 Subject: [PATCH 05/85] Fix for #532 - Limited disenchanter dupe glitch --- .../Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java index 61664362b..ed6e52c35 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java @@ -116,6 +116,7 @@ public class AutoDisenchanter extends AContainer { } if (amount > 0) { ItemStack newItem = item.clone(); + newItem.setAmount(1); ItemStack book = target.clone(); book.setAmount(1); book.setType(Material.ENCHANTED_BOOK); From 1e5d7e0d2d448faef01693fd056b8736298231a6 Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Wed, 21 Feb 2018 09:50:59 -0800 Subject: [PATCH 06/85] Fix discrepancies between block storage data and server events 1) Stop falling blocks from falling into a spot where an SF machine was just mined. Typically the blockstorage does not update fast enough, causing machine duplication. The event is cancelled, and the falling entities drop as items instead of disappearing. 2) Nearly the same as above, but with pistons pushing solid blocks into air blocks which had a slimefun machine in it a moment prior. Typically the blockstorage does not update fast enough, causing machine duplication. --- .../Slimefun/listeners/BlockListener.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java b/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java index 79f277bc3..3d61ad586 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/BlockListener.java @@ -16,14 +16,17 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; +import org.bukkit.entity.FallingBlock; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockPistonExtendEvent; import org.bukkit.event.block.BlockPistonRetractEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; public class BlockListener implements Listener { @@ -31,6 +34,19 @@ public class BlockListener implements Listener { plugin.getServer().getPluginManager().registerEvents(this, plugin); } + @EventHandler + public void onBlockFall(EntityChangeBlockEvent event) { + if (event.getEntity() instanceof FallingBlock) { + if (BlockStorage.hasBlockInfo(event.getBlock())) { + event.setCancelled(true); + FallingBlock fb = (FallingBlock) event.getEntity(); + if (fb.getDropItem()) { + fb.getWorld().dropItemNaturally(fb.getLocation(), new ItemStack(fb.getMaterial(), 1, fb.getBlockData())); + } + } + } + } + @EventHandler public void onPistonExtend(BlockPistonExtendEvent e) { for (Block b : e.getBlocks()) { @@ -38,6 +54,10 @@ public class BlockListener implements Listener { e.setCancelled(true); return; } + else if(b.getRelative(e.getDirection()) == null && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) { + e.setCancelled(true); + return; + } } } @@ -49,6 +69,10 @@ public class BlockListener implements Listener { e.setCancelled(true); return; } + else if(b.getRelative(e.getDirection()) == null && BlockStorage.hasBlockInfo(b.getRelative(e.getDirection()))) { + e.setCancelled(true); + return; + } } } } From 63e5245b2c1c84e85db6fe3f3f4da6a57929aa39 Mon Sep 17 00:00:00 2001 From: Oliver Wright Date: Fri, 2 Mar 2018 19:40:45 +0000 Subject: [PATCH 07/85] Simplify the RitualAnimation --- .../AncientAltar/RitualAnimation.java | 213 +----------------- 1 file changed, 11 insertions(+), 202 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java index 5454bbb1a..ce0b6e711 100644 --- a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java +++ b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java @@ -28,6 +28,7 @@ public class RitualAnimation implements Runnable { List particles; boolean running; + int stage; public RitualAnimation(List altars, Block altar, Location drop, ItemStack output, List pedestals, List items) { this.l = drop; @@ -39,209 +40,21 @@ public class RitualAnimation implements Runnable { this.particles = new ArrayList(); this.running = true; + this.stage = 0; } @Override public void run() { idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - checkPedestal(pedestals.get(0)); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - checkPedestal(pedestals.get(1)); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - checkPedestal(pedestals.get(2)); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - checkPedestal(pedestals.get(3)); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - checkPedestal(pedestals.get(4)); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - checkPedestal(pedestals.get(5)); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - checkPedestal(pedestals.get(6)); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - checkPedestal(pedestals.get(7)); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - schedule(new Runnable() { - - @Override - public void run() { - idle(); - finish(); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); - } - }); + if(this.stage == 36) { + finish(); + return; + } + if(this.stage > 0 && this.stage % 4 == 0) { + checkPedestal(pedestals.get(this.stage / 4 - 1)); + } + this.stage += 1; + SlimefunStartup.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, this, 8); } private void idle() { @@ -257,10 +70,6 @@ public class RitualAnimation implements Runnable { } } - private void schedule(Runnable runnable) { - if (running) SlimefunStartup.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, runnable, 8); - } - private void checkPedestal(Block pedestal) { Item item = AncientAltarListener.findItem(pedestal); if (item == null) abort(); From 273499a23069d64b0658fdf0b8e42e62cdcecdf4 Mon Sep 17 00:00:00 2001 From: Oliver Wright Date: Fri, 2 Mar 2018 20:03:11 +0000 Subject: [PATCH 08/85] Simplify error file name generation --- .../Slimefun/api/TickerTask.java | 30 +++---------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java index 8dc7cfbb2..fd5a1d3b3 100644 --- a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java +++ b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java @@ -99,33 +99,11 @@ public class TickerTask implements Runnable { errors++; if (errors == 1) { + int try_count = 1; File file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + ".err"); - if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(2).err"); - if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(3).err"); - if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(4).err"); - if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(5).err"); - if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(6).err"); - if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(7).err"); - if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(8).err"); - if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(9).err"); - if (file.exists()) { - file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(10).err"); - } - } - } - } - } - } - } - } + while (file.exists()) { + try_count += 1; + file = new File("plugins/Slimefun/error-reports/" + Clock.getFormattedTime() + "(" + try_count + ").err"); } try { PrintStream stream = new PrintStream(file); From 7278f80c6fad46058cb976966f022603a9773f3e Mon Sep 17 00:00:00 2001 From: Oliver Wright Date: Fri, 2 Mar 2018 20:17:44 +0000 Subject: [PATCH 09/85] Fix #617: Electric Dust Washer - Dust Choice. --- .../SlimefunItem/machines/ElectricDustWasher.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java index fdc573884..23ca3c005 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java @@ -82,7 +82,14 @@ public abstract class ElectricDustWasher extends AContainer { else { for (int slot: getInputSlots()) { if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.SIFTED_ORE, true)) { - + boolean empty_slot = false; + for (int output_slot: getOutputSlots()) { + if (BlockStorage.getInventory(b).getItemInSlot(output_slot) == null) { + empty_slot = true; + break; + } + } + if (!empty_slot) 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; @@ -94,7 +101,6 @@ public abstract class ElectricDustWasher extends AContainer { else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.SILVER_DUST; MachineRecipe r = new MachineRecipe(4 / getSpeed(), new ItemStack[0], new ItemStack[] {adding}); - if (!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()); From fb07f1bb32b45d3758c7cdb13b29d76843e9d667 Mon Sep 17 00:00:00 2001 From: AtomicScience Date: Sat, 3 Mar 2018 18:47:54 +0300 Subject: [PATCH 10/85] Fixed incompatibility with KeepInventory --- src/me/mrCookieSlime/Slimefun/api/Soul.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/api/Soul.java b/src/me/mrCookieSlime/Slimefun/api/Soul.java index 9d373afc1..764d92624 100644 --- a/src/me/mrCookieSlime/Slimefun/api/Soul.java +++ b/src/me/mrCookieSlime/Slimefun/api/Soul.java @@ -21,7 +21,9 @@ public class Soul { public static void retrieveItems(Player p) { if (Variables.soulbound.containsKey(p.getUniqueId())) { for (ItemStack item: Variables.soulbound.get(p.getUniqueId())) { - p.getInventory().addItem(item); + if(!p.getInventory().contains(item)) { + p.getInventory().addItem(item); + } } Variables.soulbound.remove(p.getUniqueId()); } From 5aef1c1a2564aa3810b643d09dbad0fd05231b0c Mon Sep 17 00:00:00 2001 From: Oliver Wright Date: Mon, 5 Mar 2018 19:15:38 +0000 Subject: [PATCH 11/85] Prevent Talisman of the Hunter from duping armour/heads --- src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java index 38c182ac2..29ec4fdff 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java @@ -112,7 +112,7 @@ public class DamageListener implements Listener { } } - if (Talisman.checkFor(e, SlimefunItem.getByName("HUNTER_TALISMAN")) && !(e.getEntity() instanceof Player)) { + if (!e.getEntity().getCanPickupItems() && Talisman.checkFor(e, SlimefunItem.getByName("HUNTER_TALISMAN")) && !(e.getEntity() instanceof Player)) { List newDrops = new ArrayList(); for (ItemStack drop : e.getDrops()) { newDrops.add(drop); From 195ebe7735c11fb10c49f67e2f380a67dd31d243 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 5 Mar 2018 21:25:16 +0100 Subject: [PATCH 12/85] Updated to Version: 4.1.14 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 69ddc9565..f64cd1cf8 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.mrCookieSlime Slimefun - 4.1.13 + 4.1.14 1.8 From 2c0dc15e4ccf29b7c5f59e8dfa8233c8e49eec9e Mon Sep 17 00:00:00 2001 From: Oliver Wright Date: Fri, 9 Mar 2018 23:29:22 +0000 Subject: [PATCH 13/85] Create a Network class to manage networks in a stateful way --- .../Slimefun/Setup/SlimefunSetup.java | 4 +- .../Slimefun/SlimefunStartup.java | 1 + .../Slimefun/api/energy/EnergyNet.java | 202 +++----- .../Slimefun/api/item_transport/CargoNet.java | 480 +++++++----------- .../Slimefun/api/network/Network.java | 174 +++++++ .../Slimefun/listeners/NetworkListener.java | 26 + 6 files changed, 479 insertions(+), 408 deletions(-) create mode 100644 src/me/mrCookieSlime/Slimefun/api/network/Network.java create mode 100644 src/me/mrCookieSlime/Slimefun/listeners/NetworkListener.java diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 04560c602..ee8bb85cd 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -3149,7 +3149,7 @@ public class SlimefunSetup { @Override public void tick(Block b, SlimefunItem item, Config data) { - EnergyNet.tick(b); + EnergyNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b); } }); @@ -5155,7 +5155,7 @@ public class SlimefunSetup { @Override public void tick(Block b, SlimefunItem item, Config data) { - CargoNet.tick(b); + CargoNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b); } @Override diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java index 469d2ff6d..b8c6039e6 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java @@ -202,6 +202,7 @@ public class SlimefunStartup extends JavaPlugin { new FurnaceListener(this); new TeleporterListener(this); new AndroidKillingListener(this); + new NetworkListener(this); if (currentVersion.startsWith("v1_12_")) new ItemPickupListener_1_12(this); else new ItemPickupListener(this); diff --git a/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java b/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java index ef9ae8d5e..922a99e30 100644 --- a/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java +++ b/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java @@ -5,11 +5,13 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; +import me.mrCookieSlime.Slimefun.api.network.Network; import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler; import me.mrCookieSlime.Slimefun.SlimefunStartup; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.TickerTask; +import me.mrCookieSlime.Slimefun.api.network.Network; import me.mrCookieSlime.Slimefun.holograms.EnergyHologram; import org.bukkit.Bukkit; @@ -17,48 +19,33 @@ import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; -public class EnergyNet { - - public enum Axis { - - X_POSITIVE, - X_NEGATIVE, - Y_POSITIVE, - Y_NEGATIVE, - Z_POSITIVE, - Z_NEGATIVE, - UNKNOWN; - - } - +public class EnergyNet extends Network { public enum NetworkComponent { - SOURCE, DISTRIBUTOR, CONSUMER, NONE; - } - + private static final int RANGE = 6; - + public static Set machines_input = new HashSet(); public static Set machines_storage = new HashSet(); public static Set machines_output = new HashSet(); - + public static Map listeners = new HashMap(); - + public static NetworkComponent getComponent(Block b) { return getComponent(b.getLocation()); } - + public static NetworkComponent getComponent(String id) { if (machines_input.contains(id)) return NetworkComponent.SOURCE; if (machines_storage.contains(id)) return NetworkComponent.DISTRIBUTOR; if (machines_output.contains(id)) return NetworkComponent.CONSUMER; return NetworkComponent.NONE; } - + public static NetworkComponent getComponent(Location l) { if (!BlockStorage.hasBlockInfo(l)) return NetworkComponent.NONE; String id = BlockStorage.checkID(l); @@ -67,7 +54,7 @@ public class EnergyNet { if (machines_output.contains(id)) return NetworkComponent.CONSUMER; return NetworkComponent.NONE; } - + public static void registerComponent(String id, NetworkComponent component) { switch (component) { case CONSUMER: @@ -83,16 +70,73 @@ public class EnergyNet { break; } } - - public static void tick(Block b) { - Set input = new HashSet(); - Set storage = new HashSet(); - Set output = new HashSet(); - + + public static EnergyNet getNetworkFromLocation(Location l) { + return getNetworkFromLocation(l, EnergyNet.class); + } + + public static EnergyNet getNetworkFromLocationOrCreate(Location l) { + EnergyNet energy_network = getNetworkFromLocation(l); + if(energy_network == null) { + energy_network = new EnergyNet(l); + registerNetwork(energy_network); + } + return energy_network; + } + + private Set input = new HashSet(); + private Set storage = new HashSet(); + private Set output = new HashSet(); + + protected EnergyNet(Location l) { + super(l); + } + + public int getRange() { + return RANGE; + } + + public Network.Component classifyLocation(Location l) { + if(regulator.equals(l)) return Network.Component.REGULATOR; + switch(getComponent(l)) { + case DISTRIBUTOR: + return Network.Component.CONNECTOR; + case CONSUMER: + case SOURCE: + return Network.Component.TERMINUS; + default: + return null; + } + } + + public void locationClassificationChange(Location l, Network.Component from, Network.Component to) { + if(from == Network.Component.TERMINUS) { + input.remove(l); + output.remove(l); + } + switch(getComponent(l)) { + case DISTRIBUTOR: + if (ChargableBlock.isCapacitor(l)) storage.add(l); + break; + case CONSUMER: + output.add(l); + break; + case SOURCE: + input.add(l); + break; + } + } + + public void tick(Block b) { + if(!regulator.equals(b.getLocation())) { + EnergyHologram.update(b, "&4Multiple Energy Regulators connected"); + return; + } + super.tick(); double supply = 0.0D; double demand = 0.0D; - - if (scan(b.getLocation(), Axis.UNKNOWN, new HashSet(), input, storage, output, supply, demand).isEmpty()) { + + if (connectorNodes.isEmpty() && terminusNodes.isEmpty()) { EnergyHologram.update(b, "&4No Energy Network found"); } else { @@ -100,11 +144,11 @@ public class EnergyNet { long timestamp = System.currentTimeMillis(); SlimefunItem item = BlockStorage.check(source); double energy = item.getEnergyTicker().generateEnergy(source, item, BlockStorage.getBlockInfo(source)); - + if (item.getEnergyTicker().explode(source)) { BlockStorage.clearBlockInfo(source); Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { - + @Override public void run() { source.getBlock().setType(Material.LAVA); @@ -120,13 +164,13 @@ public class EnergyNet { } TickerTask.block_timings.put(source, System.currentTimeMillis() - timestamp); } - + for (Location battery: storage) { supply = supply + ChargableBlock.getCharge(battery); } int available = (int) DoubleHandler.fixDouble(supply); - + for (Location destination: output) { int capacity = ChargableBlock.getMaxCharge(destination); int charge = ChargableBlock.getCharge(destination); @@ -145,11 +189,11 @@ public class EnergyNet { } } } - + for (Location battery: storage) { if (available > 0) { int capacity = ChargableBlock.getMaxCharge(battery); - + if (available > capacity) { ChargableBlock.setUnsafeCharge(battery, capacity, true); available = available - capacity; @@ -161,12 +205,12 @@ public class EnergyNet { } else ChargableBlock.setUnsafeCharge(battery, 0, true); } - + for (Location source: input) { if (ChargableBlock.isChargable(source)) { if (available > 0) { int capacity = ChargableBlock.getMaxCharge(source); - + if (available > capacity) { ChargableBlock.setUnsafeCharge(source, capacity, false); available = available - capacity; @@ -183,84 +227,4 @@ public class EnergyNet { EnergyHologram.update(b, supply, demand); } } - - public static Set scan(Location source, Axis exclude, Set sources, Set input, Set storage, Set output, double supply, double demand) { - sources.add(source); - Set blocks = new HashSet(); - - blocks.add(source); - - if (!exclude.equals(Axis.X_POSITIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX() + i + 1, source.getY(), source.getZ()); - if (!continueScan(l, Axis.X_NEGATIVE, blocks, sources, input, storage, output, supply, demand)) return new HashSet(); - } - } - if (!exclude.equals(Axis.X_NEGATIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX() - i - 1, source.getY(), source.getZ()); - if (!continueScan(l, Axis.X_POSITIVE, blocks, sources, input, storage, output, supply, demand)) return new HashSet(); - } - } - - if (!exclude.equals(Axis.Y_POSITIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY() + i + 1, source.getZ()); - if (!continueScan(l, Axis.Y_NEGATIVE, blocks, sources, input, storage, output, supply, demand)) return new HashSet(); - } - } - if (!exclude.equals(Axis.Y_NEGATIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY() - i - 1, source.getZ()); - if (!continueScan(l, Axis.Y_POSITIVE, blocks, sources, input, storage, output, supply, demand)) return new HashSet(); - } - } - - if (!exclude.equals(Axis.Z_POSITIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY(), source.getZ() + i + 1); - if (!continueScan(l, Axis.Z_NEGATIVE, blocks, sources, input, storage, output, supply, demand)) return new HashSet(); - } - } - if (!exclude.equals(Axis.Z_NEGATIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY(), source.getZ() - i - 1); - if (!continueScan(l, Axis.Z_POSITIVE, blocks, sources, input, storage, output, supply, demand)) return new HashSet(); - } - } - - return blocks; - } - - private static boolean continueScan(Location l, Axis axis, Set blocks, Set sources, Set input, Set storage, Set output, double supply, double demand) { - if (!sources.contains(l)) { - if (BlockStorage.check(l, "ENERGY_REGULATOR")) return false; - switch (getComponent(l)) { - case CONSUMER: { - blocks.add(l); - output.add(l); - break; - } - case DISTRIBUTOR: { - blocks.add(l); - if (ChargableBlock.isCapacitor(l)) storage.add(l); - Set nextBlocks = scan(l, axis, sources, input, storage, output, supply, demand); - if (nextBlocks.isEmpty()) return false; - for (Location sink: nextBlocks) { - blocks.add(sink); - } - break; - } - case SOURCE: { - blocks.add(l); - input.add(l); - break; - } - default: - break; - } - } - return true; - } - } diff --git a/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java b/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java index bcafb9cb4..a75c9a5db 100644 --- a/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java +++ b/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java @@ -33,27 +33,17 @@ import me.mrCookieSlime.Slimefun.Setup.SlimefunManager.DataType; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.inventory.BlockMenu; import me.mrCookieSlime.Slimefun.api.inventory.UniversalBlockMenu; +import me.mrCookieSlime.Slimefun.api.network.Network; import me.mrCookieSlime.Slimefun.holograms.CargoHologram; -public class CargoNet { - - public enum Axis { - X_POSITIVE, - X_NEGATIVE, - Y_POSITIVE, - Y_NEGATIVE, - Z_POSITIVE, - Z_NEGATIVE, - UNKNOWN; - } - +public class CargoNet extends Network { public static boolean EXTRA_CHANNELS = false; - + private static final int RANGE = 5; public static List faces = Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST); public static Map round_robin = new HashMap(); public static Set requests = new HashSet(); - + private static int[] slots = new int[] {19, 20, 21, 28, 29, 30, 37, 38, 39}; //Chest Terminal Stuff @@ -61,67 +51,167 @@ public class CargoNet { public static final int[] terminal_slots = new int[] {0, 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13, 14, 15, 18, 19, 20, 21, 22, 23, 24, 27, 28, 29, 30, 31, 32, 33, 36, 37, 38, 39, 40, 41, 42}; private static final ItemStack terminal_noitem_item = new CustomItem(new MaterialData(Material.BARRIER), "&4No Item cached"); private static final MenuClickHandler terminal_noitem_handler = new MenuClickHandler() { - + @Override public boolean onClick(Player p, int slot, ItemStack stack, ClickAction action) { return false; } }; - public static void tick(final Block b) { - /* - Input/Output Nodes can be found here after a scan. - Input Nodes: - Location = The location of the node. - Integer = The frequency of the node. - Output Nodes: - Integer = The frequency of the node. - List = The locations of the corresponding input nodes - */ - final Map input = new HashMap(); - final Map> output = new HashMap>(); - //Chest Terminal Stuff - final Set providers = new HashSet(); - final Set terminals = new HashSet(); - final Set imports = new HashSet(); - final Set exports = new HashSet(); - final Set destinations = new HashSet(); - - final Set blocks = new HashSet(); - blocks.add(b.getLocation()); - - final List visualizer1 = new ArrayList(); - final List visualizer2 = new ArrayList(); - - if (scan(b.getLocation(), blocks, visualizer1, visualizer2, Axis.UNKNOWN, input, output, terminals, providers, destinations, imports, exports).isEmpty()) { + public static CargoNet getNetworkFromLocation(Location l) { + return getNetworkFromLocation(l, CargoNet.class); + } + + public static CargoNet getNetworkFromLocationOrCreate(Location l) { + CargoNet cargo_network = getNetworkFromLocation(l); + if(cargo_network == null) { + cargo_network = new CargoNet(l); + registerNetwork(cargo_network); + } + return cargo_network; + } + + @Deprecated + public static boolean isConnected(Block b) { + return getNetworkFromLocation(b.getLocation()) != null; + } + + private Set inputNodes = new HashSet(); + private Set outputNodes = new HashSet(); + private Set advancedOutputNodes = new HashSet(); + + + //Chest Terminal Stuff + final Set terminals = new HashSet(); + final Set imports = new HashSet(); + final Set exports = new HashSet(); + + protected CargoNet(Location l) { + super(l); + } + + public int getRange() { + return RANGE; + } + + public Network.Component classifyLocation(Location l) { + String id = BlockStorage.checkID(l); + if(id == null) return null; + switch(id) { + case "CARGO_MANAGER": + return Component.REGULATOR; + case "CARGO_NODE": + return Component.CONNECTOR; + case "CARGO_NODE_INPUT": + case "CARGO_NODE_OUTPUT": + case "CARGO_NODE_OUTPUT_ADVANCED": + case "CT_IMPORT_BUS": + case "CT_EXPORT_BUS": + case "CHEST_TERMINAL": + return Component.TERMINUS; + default: + return null; + } + } + + public void locationClassificationChange(Location l, Component from, Component to) { + if(from == Component.TERMINUS) { + inputNodes.remove(l); + outputNodes.remove(l); + advancedOutputNodes.remove(l); + terminals.remove(l); + imports.remove(l); + exports.remove(l); + } + if(to == Component.TERMINUS) { + switch(BlockStorage.checkID(l)) { + case "CARGO_NODE_INPUT": + inputNodes.add(l); + break; + case "CARGO_NODE_OUTPUT": + outputNodes.add(l); + break; + case "CARGO_NODE_OUTPUT_ADVANCED": + advancedOutputNodes.add(l); + break; + case "CHEST_TERMINAL": + terminals.add(l); + break; + case "CT_IMPORT_BUS": + imports.add(l); + break; + case "CT_EXPORT_BUS": + exports.add(l); + break; + } + } + } + + public void tick(final Block b) { + if(!regulator.equals(b.getLocation())) { + CargoHologram.update(b, "&4Multiple Cargo Regulators connected"); + return; + } + super.tick(); + if (connectorNodes.isEmpty() && terminusNodes.isEmpty()) { CargoHologram.update(b, "&7Status: &4&lOFFLINE"); + return; } else { + CargoHologram.update(b, "&7Status: &a&lONLINE"); + + + final Map> output = new HashMap>(); + + + for(Location outputNode: outputNodes) { + Integer frequency = getFrequency(outputNode); + if(!output.containsKey(frequency)) { + output.put(frequency, new ArrayList()); + } + output.get(frequency).add(outputNode); + } + for(Location outputNode: advancedOutputNodes) { + Integer frequency = getFrequency(outputNode); + if(!output.containsKey(frequency)) { + output.put(frequency, new ArrayList()); + } + output.get(frequency).add(outputNode); + } + + //Chest Terminal Stuff + final Set providers = new HashSet(); + final Set destinations; + if(output.containsKey(16)) { + destinations = new HashSet(output.get(16)); + } else { + destinations = new HashSet(); + } + for(Location inputNode: inputNodes) { + int frequency = getFrequency(inputNode); + if(frequency == 16) { + providers.add(inputNode); + } + } + + CargoNet self = this; final BlockStorage storage = BlockStorage.getStorage(b.getWorld()); SlimefunStartup.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { - + @Override public void run() { if (BlockStorage.getBlockInfo(b, "visualizer") == null) { - for (int i = 0; i < visualizer1.size(); i++) { - Location l1 = visualizer1.get(i); - Location l2 = visualizer2.get(i); - try { - ParticleEffect.REDSTONE.drawLine(new Location(l1.getWorld(), l1.getBlockX() + 0.5D, l1.getBlockY() + 0.5D, l1.getBlockZ() + 0.5D), new Location(l2.getWorld(), l2.getBlockX() + 0.5D, l2.getBlockY() + 0.5D, l2.getBlockZ() + 0.5D)); - } catch (Exception e) { - e.printStackTrace(); - } - } + self.display(); } //Chest Terminal Code if (EXTRA_CHANNELS) { for (Location bus: imports) { BlockMenu menu = BlockStorage.getInventory(bus); - + if (menu.getItemInSlot(17) == null) { Block target = getAttachedBlock(bus.getBlock()); ItemSlot stack = CargoManager.withdraw(bus.getBlock(), storage, target, -1); - + if (stack != null) { menu.replaceExistingItem(17, stack.getItem()); } @@ -131,42 +221,42 @@ public class CargoNet { requests.add(new ItemRequest(bus, 17, menu.getItemInSlot(17), ItemTransportFlow.INSERT)); } } - + for (Location bus: exports) { BlockMenu menu = BlockStorage.getInventory(bus); - + if (menu.getItemInSlot(17) != null) { Block target = getAttachedBlock(bus.getBlock()); - + menu.replaceExistingItem(17, CargoManager.insert(bus.getBlock(), storage, target, menu.getItemInSlot(17), -1)); } - + if (menu.getItemInSlot(17) == null) { List items = new ArrayList(); for (int slot: slots) { ItemStack template = menu.getItemInSlot(slot); if (template != null) items.add(new CustomItem(template, 1)); } - + if (!items.isEmpty()) { int index = Integer.parseInt(BlockStorage.getBlockInfo(bus, "index")); - + index++; if (index > (items.size() - 1)) index = 0; - + BlockStorage.addBlockInfo(bus, "index", String.valueOf(index)); - + requests.add(new ItemRequest(bus, 17, items.get(index), ItemTransportFlow.WITHDRAW)); } } } - + Iterator iterator = requests.iterator(); while (iterator.hasNext()) { ItemRequest request = iterator.next(); if (terminals.contains(request.getTerminal()) || imports.contains(request.getTerminal()) || exports.contains(request.getTerminal())) { BlockMenu menu = BlockStorage.getInventory(request.getTerminal()); - + switch (request.getDirection()) { case INSERT: { ItemStack stack = request.getItem(); @@ -179,11 +269,11 @@ public class CargoNet { break nodes; } } - + if (stack != null) { menu.replaceExistingItem(request.getSlot(), stack); } - + iterator.remove(); break; } @@ -194,7 +284,7 @@ public class CargoNet { iterator.remove(); break; } - + ItemStack stack = null; ItemStack requested = request.getItem(); nodes: @@ -208,7 +298,7 @@ public class CargoNet { else { stack = new CustomItem(stack, stack.getAmount() + is.getAmount()); } - + if (is.getAmount() == requested.getAmount()) { break nodes; } @@ -217,14 +307,14 @@ public class CargoNet { } } } - + if (stack != null) { ItemStack prev = menu.getItemInSlot(slot); - + if (prev == null) menu.replaceExistingItem(slot, stack); else menu.replaceExistingItem(slot, new CustomItem(stack, stack.getAmount() + prev.getAmount())); } - + iterator.remove(); break; } @@ -236,31 +326,35 @@ public class CargoNet { } } //All operations happen here: Everything gets iterated from the Input Nodes. (Apart from ChestTerminal Buses) - for (Map.Entry entry: input.entrySet()) { - Block inputTarget = getAttachedBlock(entry.getKey().getBlock()); + for (Location input: inputNodes) { + Integer frequency = getFrequency(input); + if(frequency < 0 || frequency > 15) { + continue; + } + Block inputTarget = getAttachedBlock(input.getBlock()); ItemStack stack = null; int previousSlot = -1; - boolean roundrobin = BlockStorage.getBlockInfo(entry.getKey(), "round-robin").equals("true"); - + boolean roundrobin = BlockStorage.getBlockInfo(input, "round-robin").equals("true"); + if (inputTarget != null) { - ItemSlot slot = CargoManager.withdraw(entry.getKey().getBlock(), storage, inputTarget, Integer.parseInt(BlockStorage.getBlockInfo(entry.getKey(), "index"))); + ItemSlot slot = CargoManager.withdraw(input.getBlock(), storage, inputTarget, Integer.parseInt(BlockStorage.getBlockInfo(input, "index"))); if (slot != null) { stack = slot.getItem(); previousSlot = slot.getSlot(); } } - if (stack != null && output.containsKey(entry.getValue())) { - List outputlist = new ArrayList(output.get(entry.getValue())); - + if (stack != null && output.containsKey(frequency)) { + List outputlist = new ArrayList(output.get(frequency)); + if (roundrobin) { - if (!round_robin.containsKey(entry.getKey())) { - round_robin.put(entry.getKey(), 0); + if (!round_robin.containsKey(input)) { + round_robin.put(input, 0); } - - int c_index = round_robin.get(entry.getKey()); - + + int c_index = round_robin.get(input); + if (c_index < outputlist.size()) { for (int i = 0; i < c_index; i++) { final Location temp = outputlist.get(0); @@ -270,10 +364,10 @@ public class CargoNet { c_index++; } else c_index = 1; - - round_robin.put(entry.getKey(), c_index); + + round_robin.put(input, c_index); } - + destinations: for (Location out: outputlist) { Block target = getAttachedBlock(out.getBlock()); @@ -283,7 +377,7 @@ public class CargoNet { } } } - + if (stack != null && previousSlot > -1) { if (storage.hasUniversalInventory(inputTarget)) { UniversalBlockMenu menu = storage.getUniversalInventory(inputTarget); @@ -316,7 +410,7 @@ public class CargoNet { item.add(is.getAmount()); } } - + if (add) { items.add(new StoredItem(new CustomItem(is, 1), is.getAmount())); } @@ -337,7 +431,7 @@ public class CargoNet { item.add(is.getAmount() + stored); } } - + if (add) { items.add(new StoredItem(new CustomItem(is, 1), is.getAmount() + stored)); } @@ -355,7 +449,7 @@ public class CargoNet { item.add(is.getAmount()); } } - + if (add) { items.add(new StoredItem(new CustomItem(is, 1), is.getAmount())); } @@ -374,7 +468,7 @@ public class CargoNet { item.add(is.getAmount()); } } - + if (add) { items.add(new StoredItem(new CustomItem(is, 1), is.getAmount())); } @@ -382,9 +476,9 @@ public class CargoNet { } } } - + Collections.sort(items, sorter); - + for (final Location l: terminals) { BlockMenu menu = BlockStorage.getInventory(l); int page = Integer.parseInt(BlockStorage.getBlockInfo(l, "page")); @@ -392,12 +486,12 @@ public class CargoNet { page = 1; BlockStorage.addBlockInfo(l, "page", String.valueOf(1)); } - + for (int i = 0; i < terminal_slots.length; i++) { int slot = terminal_slots[i]; if (items.size() > i + (terminal_slots.length * (page - 1))) { final StoredItem item = items.get(i + (terminal_slots.length * (page - 1))); - + ItemStack stack = item.getItem().clone(); ItemMeta im = stack.getItemMeta(); List lore = new ArrayList(); @@ -415,21 +509,21 @@ public class CargoNet { stack.setItemMeta(im); menu.replaceExistingItem(slot, stack); menu.addMenuClickHandler(slot, new MenuClickHandler() { - + @Override public boolean onClick(Player p, int slot, ItemStack is, ClickAction action) { requests.add(new ItemRequest(l, 44, new CustomItem(item.getItem(), action.isRightClicked() ? (item.getAmount() > item.getItem().getMaxStackSize() ? item.getItem().getMaxStackSize(): item.getAmount()): 1), ItemTransportFlow.WITHDRAW)); return false; } }); - + } else { menu.replaceExistingItem(slot, terminal_noitem_item); menu.addMenuClickHandler(slot, terminal_noitem_handler); } } - + ItemStack sent_item = menu.getItemInSlot(17); if (sent_item != null) { requests.add(new ItemRequest(l, 17, sent_item, ItemTransportFlow.INSERT)); @@ -437,12 +531,11 @@ public class CargoNet { } } - CargoHologram.update(b, "&7Status: &a&lONLINE"); } }); } } - + @SuppressWarnings("deprecation") private static Block getAttachedBlock(Block block) { @@ -468,191 +561,4 @@ public class CargoNet { } catch (Exception e) {} return freq; } - - public static Set scan(Location source, Set blocks, List l1, List l2, Axis exclude, Map input, Map> output, Set terminals, Set providers, Set destinations, Set imports, Set exports) { - - if (!exclude.equals(Axis.X_POSITIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX() + i + 1, source.getY(), source.getZ()); - if (!continueScan(source, l, l1, l2, Axis.X_NEGATIVE, blocks, input, output, terminals, providers, destinations, imports, exports)) return new HashSet(); - } - } - if (!exclude.equals(Axis.X_NEGATIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX() - i - 1, source.getY(), source.getZ()); - if (!continueScan(source, l, l1, l2, Axis.X_POSITIVE, blocks, input, output, terminals, providers, destinations, imports, exports)) return new HashSet(); - } - } - - if (!exclude.equals(Axis.Y_POSITIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY() + i + 1, source.getZ()); - if (!continueScan(source, l, l1, l2, Axis.Y_NEGATIVE, blocks, input, output, terminals, providers, destinations, imports, exports)) return new HashSet(); - } - } - if (!exclude.equals(Axis.Y_NEGATIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY() - i - 1, source.getZ()); - if (!continueScan(source, l, l1, l2, Axis.Y_POSITIVE, blocks, input, output, terminals, providers, destinations, imports, exports)) return new HashSet(); - } - } - - if (!exclude.equals(Axis.Z_POSITIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY(), source.getZ() + i + 1); - if (!continueScan(source, l, l1, l2, Axis.Z_NEGATIVE, blocks, input, output, terminals, providers, destinations, imports, exports)) return new HashSet(); - } - } - if (!exclude.equals(Axis.Z_NEGATIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY(), source.getZ() - i - 1); - if (!continueScan(source, l, l1, l2, Axis.Z_POSITIVE, blocks, input, output, terminals, providers, destinations, imports, exports)) return new HashSet(); - } - } - - return blocks; - } - - private static boolean continueScan(Location source, Location l, List l1, List l2, Axis axis, Set blocks, Map input, Map> output, Set terminals, Set providers, Set destinations, Set imports, Set exports) { - if (!blocks.contains(l)) { - String id = BlockStorage.checkID(l); - if (id == null) return true; - else if (id.equals("CARGO_MANAGER")) return false; - else if (id.equals("CARGO_NODE")) { - blocks.add(l); - l1.add(source); - l2.add(l); - scan(l, blocks, l1, l2, axis, input, output, terminals, providers, destinations, imports, exports); - if (blocks.isEmpty()) return false; - } - else if (id.equals("CARGO_NODE_INPUT")) { - blocks.add(l); - l1.add(source); - l2.add(l); - int freq = getFrequency(l); - if (freq == 16) providers.add(l); - else input.put(l, freq); - } - else if (id.equals("CHEST_TERMINAL")) { - blocks.add(l); - l1.add(source); - l2.add(l); - terminals.add(l); - } - else if (id.equals("CT_IMPORT_BUS")) { - blocks.add(l); - l1.add(source); - l2.add(l); - imports.add(l); - } - else if (id.equals("CT_EXPORT_BUS")) { - blocks.add(l); - l1.add(source); - l2.add(l); - exports.add(l); - } - else if (id.equals("CARGO_NODE_OUTPUT")) { - blocks.add(l); - l1.add(source); - l2.add(l); - int freq = getFrequency(l); - - if (freq == 16) destinations.add(l); - else { - List list = output.containsKey(freq) ? output.get(freq): new ArrayList(); - list.add(l); - output.put(freq, list); - } - } - else if (id.equals("CARGO_NODE_OUTPUT_ADVANCED")) { - blocks.add(l); - l1.add(source); - l2.add(l); - int freq = getFrequency(l); - - if (freq == 16) destinations.add(l); - else { - List list = output.containsKey(freq) ? output.get(freq): new ArrayList(); - list.add(l); - output.put(freq, list); - } - } - } - return true; - } - - public static boolean isConnected(Block b) { - return passiveScan(b.getLocation(), Axis.UNKNOWN, new HashSet()); - } - - private static boolean passiveScan(Location source, Axis exclude, Set sources) { - sources.add(source); - Set blocks = new HashSet(); - - blocks.add(source); - - if (!exclude.equals(Axis.X_POSITIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX() + i + 1, source.getY(), source.getZ()); - if (continuePassiveScan(l, Axis.X_NEGATIVE, sources)) { - return true; - } - } - } - if (!exclude.equals(Axis.X_NEGATIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX() - i - 1, source.getY(), source.getZ()); - if (continuePassiveScan(l, Axis.X_POSITIVE, sources)) { - return true; - } - } - } - - if (!exclude.equals(Axis.Y_POSITIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY() + i + 1, source.getZ()); - if (continuePassiveScan(l, Axis.Y_NEGATIVE, sources)) { - return true; - } - } - } - if (!exclude.equals(Axis.Y_NEGATIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY() - i - 1, source.getZ()); - if (continuePassiveScan(l, Axis.Y_POSITIVE, sources)) { - return true; - } - } - } - - if (!exclude.equals(Axis.Z_POSITIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY(), source.getZ() + i + 1); - if (continuePassiveScan(l, Axis.Z_NEGATIVE, sources)) { - return true; - } - } - } - if (!exclude.equals(Axis.Z_NEGATIVE)) { - for (int i = 0; i <= RANGE; i++) { - Location l = new Location(source.getWorld(), source.getX(), source.getY(), source.getZ() - i - 1); - if (continuePassiveScan(l, Axis.Z_POSITIVE, sources)) { - return true; - } - } - } - - return false; - } - - private static boolean continuePassiveScan(Location l, Axis axis, Set sources) { - if (!sources.contains(l)) { - String id = BlockStorage.checkID(l); - if (id == null) return false; - else if (id.equals("CARGO_MANAGER")) return true; - else if (id.equals("CARGO_NODE")) return passiveScan(l, axis, sources); - } - return false; - } - } diff --git a/src/me/mrCookieSlime/Slimefun/api/network/Network.java b/src/me/mrCookieSlime/Slimefun/api/network/Network.java new file mode 100644 index 000000000..aed9e82b6 --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/api/network/Network.java @@ -0,0 +1,174 @@ +package me.mrCookieSlime.Slimefun.api.network; + +import java.util.Set; +import java.util.List; +import java.util.Queue; +import java.util.HashSet; +import java.util.ArrayDeque; +import java.util.ArrayList; + +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.Location; + +import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.MC_1_8.ParticleEffect; +import me.mrCookieSlime.Slimefun.SlimefunStartup; + +public abstract class Network { + private static List NETWORK_LIST = new ArrayList(); + public static T getNetworkFromLocation(Location l, Class type) { + for(Network n: NETWORK_LIST) { + if(type.isInstance(n) && n.connectsTo(l)) { + return type.cast(n); + } + } + return null; + } + + public static List getNetworksFromLocation(Location l, Class type) { + List ret = new ArrayList(); + for(Network n: NETWORK_LIST) { + if(type.isInstance(n) && n.connectsTo(l)) { + ret.add(type.cast(n)); + } + } + return ret; + } + + public static void registerNetwork(Network n) { + NETWORK_LIST.add(n); + } + + public static void unregisterNetwork(Network n) { + NETWORK_LIST.remove(n); + } + + public static void handleAllNetworkLocationUpdate(Location l) { + for(Network n: getNetworksFromLocation(l, Network.class)) { + n.handleLocationUpdate(l); + } + } + + public static enum Component { + CONNECTOR, + REGULATOR, + TERMINUS; + } + + + public abstract int getRange(); + public abstract Component classifyLocation(Location l); + public abstract void locationClassificationChange(Location l, Component from, Component to); + + protected Location regulator; + private Queue nodeQueue = new ArrayDeque(); + + protected Set connectedLocations = new HashSet(); + protected Set regulatorNodes = new HashSet(); + protected Set connectorNodes = new HashSet(); + protected Set terminusNodes = new HashSet(); + + protected Network(Location regulator) { + this.regulator = regulator; + connectedLocations.add(regulator); + nodeQueue.add(regulator.clone()); + } + + protected void addLocationToNetwork(Location l) { + if(connectedLocations.contains(l)) { + return; + } + connectedLocations.add(l.clone()); + handleLocationUpdate(l); + } + + public void handleLocationUpdate(Location l) { + if(regulator.equals(l)) { + unregisterNetwork(this); + return; + } + nodeQueue.add(l.clone()); + } + + public boolean connectsTo(Location l) { + return connectedLocations.contains(l); + } + + private Component getCurrentClassification(Location l) { + if(regulatorNodes.contains(l)) { + return Component.REGULATOR; + } else if(connectorNodes.contains(l)) { + return Component.CONNECTOR; + } else if(terminusNodes.contains(l)) { + return Component.TERMINUS; + } + return null; + } + + private void discoverStep() { + int steps = 0; + while(nodeQueue.peek() != null) { + Location l = nodeQueue.poll(); + Component currentAssignment = getCurrentClassification(l); + Component classification = classifyLocation(l); + if(classification != currentAssignment) { + if(currentAssignment == Component.REGULATOR || currentAssignment == Component.CONNECTOR) { + // Requires a complete rebuild of the network, so we just throw the current one away. + unregisterNetwork(this); + return; + } else if(currentAssignment == Component.TERMINUS) { + terminusNodes.remove(l); + } + if(classification == Component.REGULATOR) { + regulatorNodes.add(l); + discoverNeighbors(l); + } else if(classification == Component.CONNECTOR) { + connectorNodes.add(l); + discoverNeighbors(l); + } else if(classification == Component.TERMINUS) { + terminusNodes.add(l); + } + locationClassificationChange(l, currentAssignment, classification); + } + steps += 1; + // TODO: Consider making this a configuration option so that it can be increased for servers + // that can deal with the load. + if(steps == 500) break; + } + } + + private void discoverNeighbors(Location l, int xDiff, int yDiff, int zDiff) { + for(int i = getRange() + 1; i > 0; i --) { + Location new_location = l.clone().add(i * xDiff, i * yDiff, i * zDiff); + addLocationToNetwork(new_location); + } + } + + private void discoverNeighbors(Location l) { + discoverNeighbors(l, 1, 0, 0); + discoverNeighbors(l, -1, 0, 0); + discoverNeighbors(l, 0, 1, 0); + discoverNeighbors(l, 0, -1, 0); + discoverNeighbors(l, 0, 0, 1); + discoverNeighbors(l, 0, 0, -1); + } + + public void display() { + SlimefunStartup.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { + @Override + public void run() { + for(Location l: connectedLocations) { + try { + ParticleEffect.REDSTONE.display(l.clone().add(0.5, 0.5, 0.5), 0, 0, 0, 0, 1); + } catch(Exception e) { + + } + } + } + }); + } + + public void tick() { + discoverStep(); + } +} diff --git a/src/me/mrCookieSlime/Slimefun/listeners/NetworkListener.java b/src/me/mrCookieSlime/Slimefun/listeners/NetworkListener.java new file mode 100644 index 000000000..292a6fabe --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/listeners/NetworkListener.java @@ -0,0 +1,26 @@ +package me.mrCookieSlime.Slimefun.listeners; + +import me.mrCookieSlime.Slimefun.SlimefunStartup; +import me.mrCookieSlime.Slimefun.api.network.Network; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; + +public class NetworkListener implements Listener { + + public NetworkListener(SlimefunStartup plugin) { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onBlockBreak(BlockBreakEvent e) { + Network.handleAllNetworkLocationUpdate(e.getBlock().getLocation()); + } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlaceBreak(BlockPlaceEvent e) { + Network.handleAllNetworkLocationUpdate(e.getBlock().getLocation()); + } +} From d21f93239be180dcac78bcd4401c25cbc169ce15 Mon Sep 17 00:00:00 2001 From: Oliver Wright Date: Sat, 10 Mar 2018 15:26:49 +0000 Subject: [PATCH 14/85] AReactor fix & a fix for chargable energy sources --- .../Objects/SlimefunItem/abstractItems/AReactor.java | 5 +++-- src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java | 3 --- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java index fb4271f82..da03cac9f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java @@ -299,10 +299,11 @@ public abstract class AReactor extends SlimefunItem { extraTick(l); int timeleft = progress.get(l); if (timeleft > 0) { - if (ChargableBlock.getMaxCharge(l) - ChargableBlock.getCharge(l) >= getEnergyProduction()) { + boolean should_charge = ChargableBlock.getMaxCharge(l) - ChargableBlock.getCharge(l) >= getEnergyProduction(); + if (should_charge) { ChargableBlock.addCharge(l, getEnergyProduction()); } - if (ChargableBlock.getMaxCharge(l) - ChargableBlock.getCharge(l) >= getEnergyProduction() || !BlockStorage.getBlockInfo(l, "reactor-mode").equals("generator")) { + if (should_charge || !BlockStorage.getBlockInfo(l, "reactor-mode").equals("generator")) { progress.put(l, timeleft - 1); Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new Runnable() { diff --git a/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java b/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java index ef9ae8d5e..bcf17ff26 100644 --- a/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java +++ b/src/me/mrCookieSlime/Slimefun/api/energy/EnergyNet.java @@ -114,9 +114,6 @@ public class EnergyNet { } else { supply = supply + energy; - if (ChargableBlock.isChargable(source)) { - supply = DoubleHandler.fixDouble(supply + ChargableBlock.getCharge(source)); - } } TickerTask.block_timings.put(source, System.currentTimeMillis() - timestamp); } From f30c61fcfc5505d20e0373d0c4fd44c5be11a039 Mon Sep 17 00:00:00 2001 From: Oliver Wright Date: Sat, 10 Mar 2018 16:51:46 +0000 Subject: [PATCH 15/85] Check if the chunk is loaded instead of relying on exceptions --- .../Slimefun/Setup/SlimefunSetup.java | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 04560c602..344fa9c5c 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -3196,11 +3196,7 @@ public class SlimefunSetup { @Override public double generateEnergy(Location l, SlimefunItem item, Config data) { - try { - if (l.getBlock().getLightFromSky() != 15) return 0D; - } catch(IllegalStateException x) { - return 0D; - } + if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 2D; return 0D; } @@ -3217,11 +3213,7 @@ public class SlimefunSetup { @Override public double generateEnergy(Location l, SlimefunItem item, Config data) { - try { - if (l.getBlock().getLightFromSky() != 15) return 0D; - } catch(IllegalStateException x) { - return 0D; - } + if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 8; return 0D; } @@ -3238,11 +3230,7 @@ public class SlimefunSetup { @Override public double generateEnergy(Location l, SlimefunItem item, Config data) { - try { - if (l.getBlock().getLightFromSky() != 15) return 0D; - } catch(IllegalStateException x) { - return 0D; - } + if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 32; return 0D; } @@ -3259,11 +3247,7 @@ public class SlimefunSetup { @Override public double generateEnergy(Location l, SlimefunItem item, Config data) { - try { - if (l.getBlock().getLightFromSky() != 15) return 0D; - } catch(IllegalStateException x) { - return 0D; - } + if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 128; return 64D; } From eaa93df83e5fd95d230b83f2a3f5583e2c234fdb Mon Sep 17 00:00:00 2001 From: Oliver Wright Date: Sat, 10 Mar 2018 19:22:12 +0000 Subject: [PATCH 16/85] Move Block storage to be based on Locations. --- .../Slimefun/api/BlockStorage.java | 129 ++++++++++++------ .../Slimefun/api/TickerTask.java | 14 +- .../Slimefun/api/inventory/BlockMenu.java | 13 +- 3 files changed, 101 insertions(+), 55 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java b/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java index 9439a5af8..0f609a41e 100644 --- a/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java +++ b/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java @@ -34,7 +34,7 @@ public class BlockStorage { private static final String path_chunks = "data-storage/Slimefun/stored-chunks/"; public static Map worlds = new HashMap(); - public static Map> ticking_chunks = new HashMap>(); + public static Map> ticking_chunks = new HashMap>(); public static Set loaded_tickers = new HashSet(); private World world; @@ -64,6 +64,10 @@ public class BlockStorage { private static String serializeChunk(Chunk chunk) { return chunk.getWorld().getName() + ";Chunk;" + chunk.getX() + ";" + chunk.getZ(); } + + private static String locationToChunkString(Location l) { + return l.getWorld().getName() + ";Chunk;" + (l.getBlockX() >> 4) + ";" + (l.getBlockZ() >> 4); + } private static Location deserializeLocation(String l) { try { @@ -95,15 +99,17 @@ public class BlockStorage { FileConfiguration cfg = YamlConfiguration.loadConfiguration(file); for (String key: cfg.getKeys(false)) { + Location l = deserializeLocation(key); + String chunk_string = locationToChunkString(l); try { totalBlocks++; - storage.put(deserializeLocation(key), cfg.getString(key)); + storage.put(l, cfg.getString(key)); if (SlimefunItem.isTicking(file.getName().replace(".sfb", ""))) { - Set blocks = ticking_chunks.containsKey(deserializeLocation(key).getChunk().toString()) ? ticking_chunks.get(deserializeLocation(key).getChunk().toString()): new HashSet(); - blocks.add(deserializeLocation(key).getBlock()); - ticking_chunks.put(deserializeLocation(key).getChunk().toString(), blocks); - if (!loaded_tickers.contains(deserializeLocation(key).getChunk().toString())) loaded_tickers.add(deserializeLocation(key).getChunk().toString()); + Set locations = ticking_chunks.containsKey(chunk_string) ? ticking_chunks.get(chunk_string): new HashSet(); + locations.add(l); + ticking_chunks.put(chunk_string, locations); + if (!loaded_tickers.contains(chunk_string)) loaded_tickers.add(chunk_string); } } catch(Exception x) { System.err.println("[Slimefun] Failed to load " + file.getName() + "(ERR: " + key + ")"); @@ -265,11 +271,17 @@ public class BlockStorage { } } + @Deprecated public static Config getBlockInfo(Block block) { - return getBlockInfo(block.getLocation()); + return getLocationInfo(block.getLocation()); } + @Deprecated public static Config getBlockInfo(Location l) { + return getLocationInfo(l); + } + + public static Config getLocationInfo(Location l) { try { BlockStorage storage = getStorage(l.getWorld()); Config cfg = new Config("data-storage/Slimefun/temp.yml"); @@ -325,11 +337,17 @@ public class BlockStorage { return map_chunks.get(serializeChunk(chunk)); } + @Deprecated public static String getBlockInfo(Block block, String key) { return getBlockInfo(block.getLocation(), key); } + @Deprecated public static String getBlockInfo(Location l, String key) { + return getLocationInfo(l, key); + } + + public static String getLocationInfo(Location l, String key) { return parseJSON(getJSONData(l)).get(key); } @@ -428,52 +446,61 @@ public class BlockStorage { storage.getUniversalInventory(l).close(); storage.getUniversalInventory(l).save(); } - if (ticking_chunks.containsKey(l.getChunk().toString())) { - Set blocks = ticking_chunks.get(l.getChunk().toString()); - blocks.remove(l.getBlock()); - if (blocks.isEmpty()) { - ticking_chunks.remove(l.getChunk().toString()); - loaded_tickers.remove(l.getChunk().toString()); + String chunk_string = locationToChunkString(l); + if (ticking_chunks.containsKey(chunk_string)) { + Set locations = ticking_chunks.get(chunk_string); + locations.remove(l); + if (locations.isEmpty()) { + ticking_chunks.remove(chunk_string); + loaded_tickers.remove(chunk_string); } - else ticking_chunks.put(l.getChunk().toString(), blocks); + else ticking_chunks.put(chunk_string, locations); } } } + @Deprecated public static void moveBlockInfo(Block block, Block newBlock) { - SlimefunStartup.ticker.move.put(block, newBlock); + moveBlockInfo(block.getLocation(), newBlock.getLocation()); } + public static void moveBlockInfo(Location from, Location to) { + SlimefunStartup.ticker.move.put(from, to); + } + + @Deprecated public static void _integrated_moveBlockInfo(Block block, Block newBlock) { - if (!hasBlockInfo(block)) return; - BlockStorage storage = getStorage(block.getWorld()); + _integrated_moveLocationInfo(block.getLocation(), newBlock.getLocation()); + } + + public static void _integrated_moveLocationInfo(Location from, Location to) { + if (!hasBlockInfo(from)) return; + BlockStorage storage = getStorage(from.getWorld()); - setBlockInfo(newBlock, getBlockInfo(block), true); - if (storage.inventories.containsKey(block.getLocation())) { - BlockMenu menu = storage.inventories.get(block.getLocation()); - storage.inventories.put(newBlock.getLocation(), menu); - storage.clearInventory(block.getLocation()); - menu.move(newBlock); + setBlockInfo(to, getBlockInfo(from), true); + if (storage.inventories.containsKey(from)) { + BlockMenu menu = storage.inventories.get(from); + storage.inventories.put(to, menu); + storage.clearInventory(from); + menu.move(to); } - refreshCache(storage, block, getBlockInfo(block).getString("id"), null, true); - storage.storage.remove(block.getLocation()); - - try { - if (ticking_chunks.containsKey(block.getChunk().toString())) { - Set blocks = ticking_chunks.get(block.getChunk().toString()); - blocks.remove(block); - if (blocks.isEmpty()) { - ticking_chunks.remove(block.getChunk().toString()); - loaded_tickers.remove(block.getChunk().toString()); - } - else ticking_chunks.put(block.getChunk().toString(), blocks); + refreshCache(storage, from, getBlockInfo(from).getString("id"), null, true); + storage.storage.remove(from); + + String chunk_string = locationToChunkString(from); + if (ticking_chunks.containsKey(chunk_string)) { + Set locations = ticking_chunks.get(chunk_string); + locations.remove(from); + if (locations.isEmpty()) { + ticking_chunks.remove(chunk_string); + loaded_tickers.remove(chunk_string); } - } - catch(IllegalStateException x) { + else ticking_chunks.put(chunk_string, locations); } } + @Deprecated private static void refreshCache(BlockStorage storage, Block b, String key, String value, boolean updateTicker) { refreshCache(storage, b.getLocation(), key, value, updateTicker); } @@ -486,12 +513,12 @@ public class BlockStorage { if (updateTicker) { SlimefunItem item = SlimefunItem.getByID(key); if (item != null && item.isTicking()) { - Chunk chunk = l.getChunk(); + String chunk_string = locationToChunkString(l); if (value != null) { - Set blocks = ticking_chunks.containsKey(chunk.toString()) ? ticking_chunks.get(chunk.toString()): new HashSet(); - blocks.add(l.getBlock()); - ticking_chunks.put(chunk.toString(), blocks); - if (!loaded_tickers.contains(chunk.toString())) loaded_tickers.add(chunk.toString()); + Set locations = ticking_chunks.containsKey(chunk_string) ? ticking_chunks.get(chunk_string): new HashSet(); + locations.add(l); + ticking_chunks.put(chunk_string, locations); + if (!loaded_tickers.contains(chunk_string)) loaded_tickers.add(chunk_string); } } } @@ -537,13 +564,27 @@ public class BlockStorage { public static Set getTickingChunks() { return new HashSet(loaded_tickers); } - + + @Deprecated public static Set getTickingBlocks(Chunk chunk) { return getTickingBlocks(chunk.toString()); } + public static Set getTickingLocations(Chunk chunk) { + return getTickingLocations(chunk.toString()); + } + + @Deprecated public static Set getTickingBlocks(String chunk) { - return new HashSet(ticking_chunks.get(chunk)); + Set ret = new HashSet(); + for(Location l: getTickingLocations(chunk)) { + ret.add(l.getBlock()); + } + return ret; + } + + public static Set getTickingLocations(String chunk) { + return new HashSet(ticking_chunks.get(chunk)); } public BlockMenu loadInventory(Location l, BlockMenuPreset preset) { diff --git a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java index fd5a1d3b3..4a99de0c0 100644 --- a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java +++ b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java @@ -23,7 +23,7 @@ public class TickerTask implements Runnable { public boolean HALTED = false; - public Map move = new HashMap(); + public Map move = new HashMap(); public Map delete = new HashMap(); private Set tickers = new HashSet(); @@ -72,9 +72,9 @@ public class TickerTask implements Runnable { chunks++; blocks: - for (final Block b: BlockStorage.getTickingBlocks(c)) { - if (b.getChunk().isLoaded()) { - final Location l = b.getLocation(); + for (final Location l: BlockStorage.getTickingLocations(c)) { + if (l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4)) { + final Block b = l.getBlock(); final SlimefunItem item = BlockStorage.check(l); if (item != null) { machines++; @@ -311,7 +311,7 @@ public class TickerTask implements Runnable { else skipped++; } else { - skipped += BlockStorage.getTickingBlocks(c).size(); + skipped += BlockStorage.getTickingLocations(c).size(); skipped_chunks.add(c); chunks--; break blocks; @@ -322,8 +322,8 @@ public class TickerTask implements Runnable { } } - for (Map.Entry entry: move.entrySet()) { - BlockStorage._integrated_moveBlockInfo(entry.getKey(), entry.getValue()); + for (Map.Entry entry: move.entrySet()) { + BlockStorage._integrated_moveLocationInfo(entry.getKey(), entry.getValue()); } move.clear(); diff --git a/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java b/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java index 02c6d6000..e3ad752f7 100644 --- a/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java +++ b/src/me/mrCookieSlime/Slimefun/api/inventory/BlockMenu.java @@ -76,12 +76,17 @@ public class BlockMenu extends ChestMenu { changes = 0; } - + + @Deprecated public void move(Block b) { + move(b.getLocation()); + } + + public void move(Location l) { this.delete(this.l); - this.l = b.getLocation(); - this.preset.newInstance(this, b); - this.save(b.getLocation()); + this.l = l; + this.preset.newInstance(this, l); + this.save(l); } public Block getBlock() { From 410a901bfddd046ef2c6f4a6e60a788a74212df3 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Tue, 10 Apr 2018 01:51:06 +0300 Subject: [PATCH 17/85] Fixed mistake --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 4f7341366..c67db00cd 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -99,7 +99,7 @@ public class SlimefunItems { public static ItemStack MELON_JUICE = new CustomPotion("&cMelon Juice", 8197, new String[0], new PotionEffect(PotionEffectType.SATURATION, 10, 0)); public static ItemStack CARROT_JUICE = new CustomPotion("&6Carrot Juice", 8195, new String[0], new PotionEffect(PotionEffectType.SATURATION, 10, 0)); public static ItemStack PUMPKIN_JUICE = new CustomPotion("&6Pumpkin Juice", 8195, new String[0], new PotionEffect(PotionEffectType.SATURATION, 10, 0)); - public static ItemStack GOLDE_APPLE_JUICE = new CustomPotion("&bGolden Apple Juice", 8195, new String[0], new PotionEffect(PotionEffectType.ABSORPTION, 20 * 20, 0)); + public static ItemStack GOLDEN_APPLE_JUICE = new CustomPotion("&bGolden Apple Juice", 8195, new String[0], new PotionEffect(PotionEffectType.ABSORPTION, 20 * 20, 0)); /* Christmas */ public static ItemStack MILK = new CustomPotion("&6Glass of Milk", 8194, new String[0], new PotionEffect(PotionEffectType.SATURATION, 5, 0)); From 5267cdb82babcc91a2dc66712394ef04494ffc60 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Tue, 10 Apr 2018 01:52:24 +0300 Subject: [PATCH 18/85] Fixed mistake --- src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index 9ec3b3ce1..0ae6a72e5 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -144,7 +144,7 @@ public class ResearchSetup { Slimefun.registerResearch(new Research(145, "XP Storage", 13), SlimefunItems.FLASK_OF_KNOWLEDGE); Slimefun.registerResearch(new Research(146, "Withstanding Explosions", 15), SlimefunItems.REINFORCED_PLATE, SlimefunItems.HARDENED_GLASS); Slimefun.registerResearch(new Research(148, "Happy Easter", 1)); - Slimefun.registerResearch(new Research(149, "Golden potion", 24), SlimefunItems.GOLDE_APPLE_JUICE); + Slimefun.registerResearch(new Research(149, "Golden potion", 24), SlimefunItems.GOLDEN_APPLE_JUICE); Slimefun.registerResearch(new Research(150, "Portable Beverages", 24), SlimefunItems.COOLING_UNIT, SlimefunItems.COOLER); Slimefun.registerResearch(new Research(151, "Ancient Altar", 15), SlimefunItems.ANCIENT_PEDESTAL, SlimefunItems.ANCIENT_ALTAR); Slimefun.registerResearch(new Research(152, "Wither-Proof Obsidian", 21), SlimefunItems.WITHER_PROOF_OBSIDIAN); From 9b6480446127eba931d533a4767652eadb868171 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Tue, 10 Apr 2018 01:53:16 +0300 Subject: [PATCH 19/85] Update SlimefunSetup.java --- src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index b0d48d0ca..1ba24ea9f 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -2729,7 +2729,7 @@ public class SlimefunSetup { new ItemStack[] {null, null, null, null, new ItemStack(Material.PUMPKIN), null, null, null, null}) .register(true); - new Juice(Categories.FOOD, SlimefunItems.GOLDE_APPLE_JUICE, "GOLDE_APPLE_JUICE", RecipeType.JUICER, + new Juice(Categories.FOOD, SlimefunItems.GOLDEN_APPLE_JUICE, "GOLDEN_APPLE_JUICE", RecipeType.JUICER, new ItemStack[] {new ItemStack(Material.GOLDEN_APPLE), null, null, null, null, null, null, null, null}) .register(true); From f32830094186c8fbd390be177f3ccf3f920242f7 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Tue, 10 Apr 2018 01:57:35 +0300 Subject: [PATCH 20/85] Food Fix For Creative Mode --- src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 1ba24ea9f..db91d7b8c 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1235,7 +1235,7 @@ public class SlimefunSetup { public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { if (SlimefunManager.isItemSimiliar(item, SlimefunItems.STAFF_WIND, true)) { if (p.getFoodLevel() >= 2) { - if (p.getItemInHand().getType() != Material.SHEARS) { + if (p.getItemInHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) { FoodLevelChangeEvent event = new FoodLevelChangeEvent(p, p.getFoodLevel() - 2); Bukkit.getPluginManager().callEvent(event); p.setFoodLevel(event.getFoodLevel()); From 9f2d91a20c0e7caf8390510249be2098bb50dbdd Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Tue, 10 Apr 2018 02:04:43 +0300 Subject: [PATCH 21/85] Allow using different log types --- .../mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index db91d7b8c..6278dad45 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1802,7 +1802,7 @@ public class SlimefunSetup { @Override public boolean onInteract(Player p, MultiBlock mb, Block b) { - if (mb.isMultiBlock(SlimefunItem.getByName("SAW_MILL"))) { + if (mb.isMultiBlock(SlimefunItem.getByID("SAW_MILL"))) { if (Slimefun.hasUnlocked(p, SlimefunItems.SAW_MILL, true)) { if (b.getRelative(BlockFace.UP).getType() == Material.LOG) BlockBreaker.breakBlock(p, b.getRelative(BlockFace.UP), Arrays.asList(new ItemStack[] {new CustomItem(Material.WOOD, b.getRelative(BlockFace.UP).getData() % 4, 8)}), true); else if (b.getRelative(BlockFace.UP).getType() == Material.LOG_2) BlockBreaker.breakBlock(p, b.getRelative(BlockFace.UP), Arrays.asList(new ItemStack[] {new CustomItem(Material.WOOD, (b.getRelative(BlockFace.UP).getData() % 2) + 4, 8)}), true); @@ -1818,6 +1818,16 @@ public class SlimefunSetup { new ItemStack[] {}, Material.WORKBENCH, true) .register(true); + new SlimefunMachine(Categories.MACHINES_1, new CustomItem(Material.FIRE, "&4Phantom Item", 0), "SAW_MILL3", + new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG_2)}, + new ItemStack[] {}, Material.WORKBENCH, true) + .register(true); + + new SlimefunMachine(Categories.MACHINES_1, new CustomItem(Material.FIRE, "&4Phantom Item", 0), "SAW_MILL4", + new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG_2)}, + new ItemStack[] {}, Material.WORKBENCH, true) + .register(true); + new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_HELMET_STEEL, "SLIME_STEEL_HELMET", RecipeType.ARMOR_FORGE, new ItemStack[] {new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), null, null, null}) .register(true); From 42ae9103e595495d283475c79a60a748e51ee2b2 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Tue, 10 Apr 2018 02:12:25 +0300 Subject: [PATCH 22/85] Replace deprecated method --- .../Slimefun/Setup/SlimefunSetup.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 6278dad45..b669832eb 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -193,7 +193,7 @@ public class SlimefunSetup { @Override public boolean onInteract(Player p, MultiBlock mb, Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByName("ENHANCED_CRAFTING_TABLE"); + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ENHANCED_CRAFTING_TABLE"); if (mb.isMultiBlock(machine)) { if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { @@ -339,7 +339,7 @@ public class SlimefunSetup { @Override public boolean onInteract(Player p, MultiBlock mb, Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByName("GRIND_STONE"); + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("GRIND_STONE"); if (mb.isMultiBlock(machine)) { if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { @@ -378,7 +378,7 @@ public class SlimefunSetup { @Override public boolean onInteract(final Player p, MultiBlock mb, Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByName("ARMOR_FORGE"); + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ARMOR_FORGE"); if (mb.isMultiBlock(machine)) { if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { @@ -448,7 +448,7 @@ public class SlimefunSetup { @Override public boolean onInteract(Player p, MultiBlock mb, Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByName("ORE_CRUSHER"); + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ORE_CRUSHER"); if (mb.isMultiBlock(machine)) { if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { @@ -487,7 +487,7 @@ public class SlimefunSetup { @Override public boolean onInteract(final Player p, MultiBlock mb, Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByName("COMPRESSOR"); + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("COMPRESSOR"); if (mb.isMultiBlock(machine)) { if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { @@ -715,7 +715,7 @@ public class SlimefunSetup { @Override public boolean onInteract(Player p, MultiBlock mb, Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByName("SMELTERY"); + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("SMELTERY"); if (mb.isMultiBlock(machine)) { if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { @@ -805,7 +805,7 @@ public class SlimefunSetup { @Override public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByName("PRESSURE_CHAMBER"); + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("PRESSURE_CHAMBER"); if (mb.isMultiBlock(machine)) { if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { @@ -1139,7 +1139,7 @@ public class SlimefunSetup { @Override public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByName("MAGIC_WORKBENCH"); + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("MAGIC_WORKBENCH"); if (mb.isMultiBlock(machine)) { if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { @@ -1313,7 +1313,7 @@ public class SlimefunSetup { @Override public boolean onInteract(Player p, MultiBlock mb, Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByName("ORE_WASHER"); + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ORE_WASHER"); if (mb.isMultiBlock(machine)) { if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { @@ -1857,7 +1857,7 @@ public class SlimefunSetup { @Override public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - if (mb.isMultiBlock(SlimefunItem.getByName("DIGITAL_MINER"))) { + if (mb.isMultiBlock(SlimefunItem.getByID("DIGITAL_MINER"))) { if (Slimefun.hasUnlocked(p, SlimefunItems.DIGITAL_MINER, true)) { Chest chest = (Chest) b.getRelative(BlockFace.UP).getState(); final Inventory inv = chest.getInventory(); @@ -1933,7 +1933,7 @@ public class SlimefunSetup { @Override public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - if (mb.isMultiBlock(SlimefunItem.getByName("ADVANCED_DIGITAL_MINER"))) { + if (mb.isMultiBlock(SlimefunItem.getByID("ADVANCED_DIGITAL_MINER"))) { if (Slimefun.hasUnlocked(p, SlimefunItems.ADVANCED_DIGITAL_MINER, true)) { Chest chest = (Chest) b.getRelative(BlockFace.UP).getState(); final Inventory inv = chest.getInventory(); @@ -2196,7 +2196,7 @@ public class SlimefunSetup { @Override public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - if (mb.isMultiBlock(SlimefunItem.getByName("AUTOMATED_PANNING_MACHINE"))) { + if (mb.isMultiBlock(SlimefunItem.getByID("AUTOMATED_PANNING_MACHINE"))) { final ItemStack input = p.getItemInHand(); ItemStack output = null; if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE"))) output = SlimefunItems.SIFTED_ORE; @@ -2692,7 +2692,7 @@ public class SlimefunSetup { @Override public boolean onInteract(Player p, MultiBlock mb, Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByName("JUICER"); + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("JUICER"); if (mb.isMultiBlock(machine)) { if (Slimefun.hasUnlocked(p, SlimefunItems.JUICER, true)) { From eabd074f05682a864aeadfb19f3b19aba27d8d3e Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Sun, 15 Apr 2018 19:18:43 +0300 Subject: [PATCH 23/85] Fixed & in title messages --- .../Slimefun/GPS/TeleportationSequence.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java b/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java index 7b076bd17..916cf5eb5 100644 --- a/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java +++ b/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java @@ -10,6 +10,7 @@ import me.mrCookieSlime.CSCoreLibPlugin.general.World.TitleBuilder.TitleType; import me.mrCookieSlime.Slimefun.SlimefunStartup; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -52,8 +53,8 @@ public class TeleportationSequence { players.remove(uuid); if (p != null) { try { - TitleBuilder title = (TitleBuilder) new TitleBuilder(20, 60, 20).addText("&4Teleportation cancelled"); - TitleBuilder subtitle = (TitleBuilder) new TitleBuilder(20, 60, 20).addText("&40%"); + TitleBuilder title = (TitleBuilder) new TitleBuilder(20, 60, 20).addText(ChatColor.translateAlternateColorCodes('&', "&4Teleportation cancelled")); + TitleBuilder subtitle = (TitleBuilder) new TitleBuilder(20, 60, 20).addText(ChatColor.translateAlternateColorCodes('&', "&40%")); title.send(TitleType.TITLE, p); subtitle.send(TitleType.SUBTITLE, p); @@ -68,8 +69,8 @@ public class TeleportationSequence { if (isValid(p, source)) { try { if (progress > 99) { - TitleBuilder title = (TitleBuilder) new TitleBuilder(20, 60, 20).addText("&3Teleported!"); - TitleBuilder subtitle = (TitleBuilder) new TitleBuilder(20, 60, 20).addText("&b100%"); + TitleBuilder title = (TitleBuilder) new TitleBuilder(20, 60, 20).addText(ChatColor.translateAlternateColorCodes('&', "&3Teleported!")); + TitleBuilder subtitle = (TitleBuilder) new TitleBuilder(20, 60, 20).addText(ChatColor.translateAlternateColorCodes('&', "&b100%")); title.send(TitleType.TITLE, p); subtitle.send(TitleType.SUBTITLE, p); @@ -78,7 +79,7 @@ public class TeleportationSequence { if (resistance) { p.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 600, 20)); - p.sendMessage("&b&lYou have been given 30 Seconds of Invulnerability!"); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&b&lYou have been given 30 Seconds of Invulnerability!")); } ParticleEffect.PORTAL.display(new Location(destination.getWorld(), destination.getX(), destination.getY() + 1, destination.getZ()), 0.2F, 0.8F, 0.2F, 1, progress * 2); @@ -86,8 +87,8 @@ public class TeleportationSequence { players.remove(uuid); } else { - TitleBuilder title = (TitleBuilder) new TitleBuilder(0, 60, 0).addText("&3Teleporting..."); - TitleBuilder subtitle = (TitleBuilder) new TitleBuilder(0, 60, 0).addText("&b" + progress + "%"); + TitleBuilder title = (TitleBuilder) new TitleBuilder(0, 60, 0).addText(ChatColor.translateAlternateColorCodes('&', "&3Teleporting...")); + TitleBuilder subtitle = (TitleBuilder) new TitleBuilder(0, 60, 0).addText(ChatColor.translateAlternateColorCodes('&', "&b" + progress + "%")); title.send(TitleType.TITLE, p); subtitle.send(TitleType.SUBTITLE, p); From 86429da311b93e598e5728f0dc03bba003b4b4c7 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Sun, 15 Apr 2018 19:23:23 +0300 Subject: [PATCH 24/85] Oops... Forgot about the import. --- src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index b669832eb..772e1caa6 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -10,6 +10,7 @@ import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Effect; +import org.bukkit.GameMode; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.Sound; From 1482218f84898088325e20413cc67634424c11c1 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Sun, 15 Apr 2018 19:29:03 +0300 Subject: [PATCH 25/85] Added holidays prefixes --- .../Slimefun/Lists/SlimefunItems.java | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index c67db00cd..849570de0 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -102,23 +102,23 @@ public class SlimefunItems { public static ItemStack GOLDEN_APPLE_JUICE = new CustomPotion("&bGolden Apple Juice", 8195, new String[0], new PotionEffect(PotionEffectType.ABSORPTION, 20 * 20, 0)); /* Christmas */ - public static ItemStack MILK = new CustomPotion("&6Glass of Milk", 8194, new String[0], new PotionEffect(PotionEffectType.SATURATION, 5, 0)); - public static ItemStack CHOCOLATE_MILK = new CustomPotion("&6Chocolate Milk", 8201, new String[0], new PotionEffect(PotionEffectType.SATURATION, 12, 0)); - public static ItemStack EGG_NOG = new CustomPotion("&aEgg Nog", 8194, new String[0], new PotionEffect(PotionEffectType.SATURATION, 7, 0)); - public static ItemStack APPLE_CIDER = new CustomPotion("&cApple Cider", 8197, new String[0], new PotionEffect(PotionEffectType.SATURATION, 14, 0)); + public static ItemStack CHRISTMAS_MILK = new CustomPotion("&6Glass of Milk", 8194, new String[0], new PotionEffect(PotionEffectType.SATURATION, 5, 0)); + public static ItemStack CHRISTMAS_CHOCOLATE_MILK = new CustomPotion("&6Chocolate Milk", 8201, new String[0], new PotionEffect(PotionEffectType.SATURATION, 12, 0)); + public static ItemStack CHRISTMAS_EGG_NOG = new CustomPotion("&aEgg Nog", 8194, new String[0], new PotionEffect(PotionEffectType.SATURATION, 7, 0)); + public static ItemStack CHRISTMAS_APPLE_CIDER = new CustomPotion("&cApple Cider", 8197, new String[0], new PotionEffect(PotionEffectType.SATURATION, 14, 0)); public static ItemStack CHRISTMAS_COOKIE = new CustomItem(Material.COOKIE, Christmas.color("Christmas Cookie"), 0); - public static ItemStack FRUIT_CAKE = new CustomItem(Material.PUMPKIN_PIE, Christmas.color("Fruit Cake"), 0); + public static ItemStack CHRISTMAS_FRUIT_CAKE = new CustomItem(Material.PUMPKIN_PIE, Christmas.color("Fruit Cake"), 0); public static ItemStack CHRISTMAS_APPLE_PIE = new CustomItem(Material.PUMPKIN_PIE, "&rApple Pie", 0); public static ItemStack CHRISTMAS_HOT_CHOCOLATE = new CustomPotion("&6Hot Chocolate", 8201, new String[0], new PotionEffect(PotionEffectType.SATURATION, 14, 0)); public static ItemStack CHRISTMAS_CAKE = new CustomItem(Material.PUMPKIN_PIE, Christmas.color("Christmas Cake"), 0); - public static ItemStack CARAMEL = new CustomItem(Material.CLAY_BRICK, "&6Caramel", 0); - public static ItemStack CARAMEL_APPLE = new CustomItem(Material.APPLE, "&6Caramel Apple", 0); - public static ItemStack CHOCOLATE_APPLE = new CustomItem(Material.APPLE, "&6Chocolate Apple", 0); - public static ItemStack PRESENT = new CustomItem(Material.CHEST, Christmas.color("Christmas Present"), 0, new String[] {"&7From: &emrCookieSlime", "&7To: &eYou", "", "&eRight Click&7 to open"}); + public static ItemStack CHRISTMAS_CARAMEL = new CustomItem(Material.CLAY_BRICK, "&6Caramel", 0); + public static ItemStack CHRISTMAS_CARAMEL_APPLE = new CustomItem(Material.APPLE, "&6Caramel Apple", 0); + public static ItemStack CHRISTMAS_CHOCOLATE_APPLE = new CustomItem(Material.APPLE, "&6Chocolate Apple", 0); + public static ItemStack CHRISTMAS_PRESENT = new CustomItem(Material.CHEST, Christmas.color("Christmas Present"), 0, new String[] {"&7From: &emrCookieSlime", "&7To: &eYou", "", "&eRight Click&7 to open"}); /* Easter */ public static ItemStack EASTER_EGG = new CustomItem(Material.EGG, "&rEaster Egg", 0, new String[] {"&bSurprise! Surprise!"}); - public static ItemStack CARROT_PIE = new CustomItem(Material.PUMPKIN_PIE, "&6Carrot Pie", 0); + public static ItemStack EASTER_CARROT_PIE = new CustomItem(Material.PUMPKIN_PIE, "&6Carrot Pie", 0); /* Weapons */ public static ItemStack GRANDMAS_WALKING_STICK = new CustomItem(Material.STICK, "&7Grandmas Walking Stick", 0, new String[0], new String[] {"KNOCKBACK-2"}); @@ -234,25 +234,25 @@ public class SlimefunItems { public static ItemStack WITHER_PROOF_GLASS = new CustomItem(new MaterialData(Material.STAINED_GLASS, (byte) 15), "&5Wither-Proof Glass", "", "&rWithstands Explosions", "&rWithstands Wither Bosses"); public static ItemStack REINFORCED_PLATE = new CustomItem(Material.PAPER, "&7Reinforced Plate", 0); public static ItemStack ANCIENT_PEDESTAL = new CustomItem(Material.DISPENSER, "&dAncient Pedestal", 0, new String[] {"", "&5Part of the Ancient Altar"}); - public static ItemStack ANCIENT_ALTAR = new CustomItem(Material.ENCHANTMENT_TABLE, "&dAncient Altar", 0, new String[] {"", "&5Multi-Block Altar for", "&5magical Crafting Processes"}); + public static ItemStack ANCIENT_ALTAR = new CustomItem(Material.ENCHANTMENT_TABLE, "&dAncient Altar", 0, new String[] {"", "&5Multi-Block Altar for", "&5magical Crafting Processes"}); public static ItemStack DUCT_TAPE = null; - public static ItemStack RAINBOW_WOOL = new CustomItem(new MaterialData(Material.WOOL), "&5Rainbow Wool", "", "&dCycles through all Colors of the Rainbow!"); - public static ItemStack RAINBOW_GLASS = new CustomItem(new MaterialData(Material.STAINED_GLASS), "&5Rainbow Glass", "", "&dCycles through all Colors of the Rainbow!"); - public static ItemStack RAINBOW_CLAY = new CustomItem(new MaterialData(Material.STAINED_CLAY), "&5Rainbow Clay", "", "&dCycles through all Colors of the Rainbow!"); - public static ItemStack RAINBOW_GLASS_PANE = new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE), "&5Rainbow Glass Pane", "", "&dCycles through all Colors of the Rainbow!"); + public static ItemStack RAINBOW_WOOL = new CustomItem(new MaterialData(Material.WOOL), "&5Rainbow Wool", "", "&dCycles through all Colors of the Rainbow!"); + public static ItemStack RAINBOW_GLASS = new CustomItem(new MaterialData(Material.STAINED_GLASS), "&5Rainbow Glass", "", "&dCycles through all Colors of the Rainbow!"); + public static ItemStack RAINBOW_CLAY = new CustomItem(new MaterialData(Material.STAINED_CLAY), "&5Rainbow Clay", "", "&dCycles through all Colors of the Rainbow!"); + public static ItemStack RAINBOW_GLASS_PANE = new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE), "&5Rainbow Glass Pane", "", "&dCycles through all Colors of the Rainbow!"); + + public static ItemStack RAINBOW_WOOL_XMAS = new CustomItem(new MaterialData(Material.WOOL), "&5Rainbow Wool &7(Christmas)", "", Christmas.color("< Christmas Edition >")); + public static ItemStack RAINBOW_GLASS_XMAS = new CustomItem(new MaterialData(Material.STAINED_GLASS), "&5Rainbow Glass &7(Christmas)", "", Christmas.color("< Christmas Edition >")); + public static ItemStack RAINBOW_CLAY_XMAS = new CustomItem(new MaterialData(Material.STAINED_CLAY), "&5Rainbow Clay &7(Christmas)", "", Christmas.color("< Christmas Edition >")); + public static ItemStack RAINBOW_GLASS_PANE_XMAS = new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE), "&5Rainbow Glass Pane &7(Christmas)", "", Christmas.color("< Christmas Edition >")); + + public static ItemStack RAINBOW_WOOL_VALENTINE = new CustomItem(new MaterialData(Material.WOOL), "&5Rainbow Wool &7(Valentine's Day)", "", "&d< Valentine's Day Edition >"); + public static ItemStack RAINBOW_GLASS_VALENTINE = new CustomItem(new MaterialData(Material.STAINED_GLASS), "&5Rainbow Glass &7(Valentine's Day)", "", "&d< Valentine's Day Edition >"); + public static ItemStack RAINBOW_CLAY_VALENTINE = new CustomItem(new MaterialData(Material.STAINED_CLAY), "&5Rainbow Clay &7(Valentine's Day)", "", "&d< Valentine's Day Edition >"); + public static ItemStack RAINBOW_GLASS_PANE_VALENTINE = new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE), "&5Rainbow Glass Pane &7(Valentine's Day)", "", "&d< Valentine's Day Edition >"); - public static ItemStack RAINBOW_WOOL_XMAS = new CustomItem(new MaterialData(Material.WOOL), "&5Rainbow Wool &7(Christmas)", "", Christmas.color("< Christmas Edition >")); - public static ItemStack RAINBOW_GLASS_XMAS = new CustomItem(new MaterialData(Material.STAINED_GLASS), "&5Rainbow Glass &7(Christmas)", "", Christmas.color("< Christmas Edition >")); - public static ItemStack RAINBOW_CLAY_XMAS = new CustomItem(new MaterialData(Material.STAINED_CLAY), "&5Rainbow Clay &7(Christmas)", "", Christmas.color("< Christmas Edition >")); - public static ItemStack RAINBOW_GLASS_PANE_XMAS = new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE), "&5Rainbow Glass Pane &7(Christmas)", "", Christmas.color("< Christmas Edition >")); - - public static ItemStack RAINBOW_WOOL_VALENTINE = new CustomItem(new MaterialData(Material.WOOL), "&5Rainbow Wool &7(Valentine's Day)", "", "&d< Valentine's Day Edition >"); - public static ItemStack RAINBOW_GLASS_VALENTINE = new CustomItem(new MaterialData(Material.STAINED_GLASS), "&5Rainbow Glass &7(Valentine's Day)", "", "&d< Valentine's Day Edition >"); - public static ItemStack RAINBOW_CLAY_VALENTINE = new CustomItem(new MaterialData(Material.STAINED_CLAY), "&5Rainbow Clay &7(Valentine's Day)", "", "&d< Valentine's Day Edition >"); - public static ItemStack RAINBOW_GLASS_PANE_VALENTINE = new CustomItem(new MaterialData(Material.STAINED_GLASS_PANE), "&5Rainbow Glass Pane &7(Valentine's Day)", "", "&d< Valentine's Day Edition >"); - - /* Ingots */ + /* Ingots */ public static ItemStack COPPER_INGOT = new CustomItem(Material.CLAY_BRICK, "&bCopper Ingot", 0, new String[0]); public static ItemStack TIN_INGOT = new CustomItem(Material.IRON_INGOT, "&bTin Ingot", 0, new String[0]); public static ItemStack SILVER_INGOT = new CustomItem(Material.IRON_INGOT, "&bSilver Ingot", 0, new String[0]); @@ -704,7 +704,7 @@ public class SlimefunItems { 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_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"); From 5a3978691fe7e0a9ef1302b8bd0d58447f39c975 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Sun, 15 Apr 2018 19:53:11 +0300 Subject: [PATCH 26/85] Added holidays prefixes --- .../Slimefun/Setup/SlimefunSetup.java | 134 +++++++++--------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 772e1caa6..a61396f39 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -2770,34 +2770,6 @@ public class SlimefunSetup { } }); - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.MILK, "MILK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.MILK_BUCKET), new ItemStack(Material.GLASS_BOTTLE), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.MILK, 4)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHOCOLATE_MILK, "CHOCOLATE_MILK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.MILK, new MaterialData(Material.INK_SACK, (byte) 3).toItemStack(1), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHOCOLATE_MILK, 2)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.EGG_NOG, "EGG_NOG", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.MILK, new ItemStack(Material.EGG), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.EGG_NOG, 2)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.APPLE_CIDER, "APPLE_CIDER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.APPLE_JUICE, new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.APPLE_CIDER, 2)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_COOKIE, "CHRISTMAS_COOKIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.COOKIE), new ItemStack(Material.SUGAR), new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_COOKIE, 16)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.FRUIT_CAKE, "FRUIT_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.APPLE), new ItemStack(Material.MELON), new ItemStack(Material.SUGAR), null, null, null, null, null}, new CustomItem(SlimefunItems.FRUIT_CAKE, 4)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_APPLE_PIE, "CHRISTMAS_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) - .register(true); - new EnhancedFurnace(1, 1, 1, SlimefunItems.ENHANCED_FURNACE, "ENHANCED_FURNACE", new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); @@ -2920,14 +2892,6 @@ public class SlimefunSetup { } }); - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE, "CHRISTMAS_HOT_CHOCOLATE", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.CHOCOLATE_MILK, null, null, null, null, null, null, null, null}, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CAKE, "CHRISTMAS_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.SUGAR), SlimefunItems.WHEAT_FLOUR, new ItemStack(Material.MILK_BUCKET), null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CAKE, 4)) - .register(true); - new SlimefunItem(Categories.MAGIC, SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION, "SCROLL_OF_DIMENSIONAL_TELEPOSITION", RecipeType.MAGIC_WORKBENCH, new ItemStack[] {null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null}) .register(true, new ItemInteractionHandler() { @@ -2948,22 +2912,6 @@ public class SlimefunSetup { } }); - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CARAMEL, "CARAMEL", RecipeType.SMELTERY, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CARAMEL, 4)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CARAMEL_APPLE, "CARAMEL_APPLE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.SUGAR), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CARAMEL_APPLE, 2)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHOCOLATE_APPLE, "CHOCOLATE_APPLE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new CustomItem(Material.INK_SACK, 3), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CARAMEL_APPLE, 2)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.PRESENT, "PRESENT", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new ItemStack(Material.NAME_TAG), null, new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1)}) - .register(true); - new SlimefunBow(SlimefunItems.EXPLOSIVE_BOW, "EXPLOSIVE_BOW", new ItemStack[] {null, new ItemStack(Material.STICK), new ItemStack(Material.SULPHUR), SlimefunItems.STAFF_FIRE, null, SlimefunItems.SULFATE, null, new ItemStack(Material.STICK), new ItemStack(Material.SULPHUR)}) .register(true, new BowShootHandler() { @@ -3045,24 +2993,67 @@ public class SlimefunSetup { } }); - new SlimefunItem(Categories.MISC, SlimefunItems.REINFORCED_PLATE, "REINFORCED_PLATE", RecipeType.COMPRESSOR, - new ItemStack[] {new CustomItem(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), null, null, null, null, null, null, null, null}) + new SlimefunItem(Categories.BIRTHDAY, new CustomItem(new MaterialData(Material.CAKE), "&bBirthday Cake"), "BIRTHDAY_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.TORCH), null, new ItemStack(Material.SUGAR), new ItemStack(Material.CAKE), new ItemStack(Material.SUGAR), null, null, null}) .register(true); - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.HARDENED_GLASS, "HARDENED_GLASS", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), SlimefunItems.REINFORCED_PLATE, new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS)}, - new CustomItem(SlimefunItems.HARDENED_GLASS, 16)) + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_MILK, "CHRISTMAS_MILK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.MILK_BUCKET), new ItemStack(Material.GLASS_BOTTLE), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_MILK, 4)) .register(true); - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.SOLAR_ARRAY, "SOLAR_ARRAY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS}) + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, "CHRISTMAS_CHOCOLATE_MILK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CHRISTMAS_MILK, new MaterialData(Material.INK_SACK, (byte) 3).toItemStack(1), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, 2)) .register(true); - new SlimefunItem(Categories.EASTER, SlimefunItems.CARROT_PIE, "CARROT_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.CARROT_ITEM), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CARROT_PIE, 2)) + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_EGG_NOG, "CHRISTMAS_EGG_NOG", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CHRISTMAS_MILK, new ItemStack(Material.EGG), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_EGG_NOG, 2)) .register(true); - new SlimefunItem(Categories.EASTER, SlimefunItems.CHRISTMAS_APPLE_PIE, "APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_APPLE_CIDER, "CHRISTMAS_APPLE_CIDER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.APPLE_JUICE, new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_CIDER, 2)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_COOKIE, "CHRISTMAS_COOKIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.COOKIE), new ItemStack(Material.SUGAR), new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_COOKIE, 16)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_FRUIT_CAKE, "CHRISTMAS_FRUIT_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.APPLE), new ItemStack(Material.MELON), new ItemStack(Material.SUGAR), null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_FRUIT_CAKE, 4)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_APPLE_PIE, "CHRISTMAS_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE, "CHRISTMAS_HOT_CHOCOLATE", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, null, null, null, null, null, null, null, null}, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CAKE, "CHRISTMAS_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.SUGAR), SlimefunItems.WHEAT_FLOUR, new ItemStack(Material.MILK_BUCKET), null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CAKE, 4)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CARAMEL, "CHRISTMAS_CARAMEL", RecipeType.SMELTERY, + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL, 4)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CARAMEL_APPLE, "CHRISTMAS_CARAMEL_APPLE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.SUGAR), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 2)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CHOCOLATE_APPLE, "CHRISTMAS_CHOCOLATE_APPLE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new CustomItem(Material.INK_SACK, 3), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 2)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_PRESENT, "CHRISTMAS_PRESENT", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {null, new ItemStack(Material.NAME_TAG), null, new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1)}) + .register(true); + + new SlimefunItem(Categories.EASTER, SlimefunItems.EASTER_CARROT_PIE, "EASTER_CARROT_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.CARROT_ITEM), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.EASTER_CARROT_PIE, 2)) + .register(true); + + new SlimefunItem(Categories.EASTER, SlimefunItems.CHRISTMAS_APPLE_PIE, "CHRISTMAS_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) .register(true); @@ -3079,7 +3070,7 @@ public class SlimefunSetup { List gifts = new ArrayList(); for (int i = 0; i < 2; i++) { - gifts.add(new CustomItem(SlimefunItems.CARROT_PIE, 4)); + gifts.add(new CustomItem(SlimefunItems.EASTER_CARROT_PIE, 4)); gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 4)); gifts.add(new CustomItem(SlimefunItems.CARROT_JUICE, 1)); } @@ -3100,6 +3091,19 @@ public class SlimefunSetup { } }); + new SlimefunItem(Categories.MISC, SlimefunItems.REINFORCED_PLATE, "REINFORCED_PLATE", RecipeType.COMPRESSOR, + new ItemStack[] {new CustomItem(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.HARDENED_GLASS, "HARDENED_GLASS", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), SlimefunItems.REINFORCED_PLATE, new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS)}, + new CustomItem(SlimefunItems.HARDENED_GLASS, 16)) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.SOLAR_ARRAY, "SOLAR_ARRAY", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS}) + .register(true); + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.COOLING_UNIT, "COOLING_UNIT", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.ICE), new ItemStack(Material.ICE), new ItemStack(Material.ICE), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.ICE), new ItemStack(Material.ICE), new ItemStack(Material.ICE)}) .register(true); @@ -3139,10 +3143,6 @@ public class SlimefunSetup { new ItemStack[] {null, new ItemStack(Material.ENCHANTMENT_TABLE), null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}) .register(true); - new SlimefunItem(Categories.BIRTHDAY, new CustomItem(new MaterialData(Material.CAKE), "&bBirthday Cake"), "BIRTHDAY_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.TORCH), null, new ItemStack(Material.SUGAR), new ItemStack(Material.CAKE), new ItemStack(Material.SUGAR), null, null, null}) - .register(true); - // Slimefun 4 new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.ENERGY_REGULATOR, "ENERGY_REGULATOR", RecipeType.ENHANCED_CRAFTING_TABLE, From 44e696c19c0e0bf5420a46855c5830b773262e7c Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Sun, 15 Apr 2018 19:55:18 +0300 Subject: [PATCH 27/85] Added holidays prefixes --- .../Slimefun/listeners/ToolListener.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java index a41d01d52..f715a18f2 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java @@ -100,22 +100,22 @@ public class ToolListener implements Listener { e.setCancelled(true); Slimefun.getGPSNetwork().addWaypoint(e.getPlayer(), e.getBlock().getLocation()); } - else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PRESENT, false)) { + else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.CHRISTMAS_PRESENT, false)) { e.setCancelled(true); PlayerInventory.consumeItemInHand(e.getPlayer()); FireworkShow.launchRandom(e.getPlayer(), 3); List gifts = new ArrayList(); for (int i = 0; i < 2; i++) { gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_HOT_CHOCOLATE, 1)); - gifts.add(new CustomItem(SlimefunItems.CHOCOLATE_APPLE, 4)); - gifts.add(new CustomItem(SlimefunItems.CARAMEL_APPLE, 4)); + gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_CHOCOLATE_APPLE, 4)); + gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 4)); gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_CAKE, 4)); gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_COOKIE, 8)); - gifts.add(new CustomItem(SlimefunItems.PRESENT, 1)); - gifts.add(new CustomItem(SlimefunItems.EGG_NOG, 1)); - gifts.add(new CustomItem(SlimefunItems.MILK, 1)); - gifts.add(new CustomItem(SlimefunItems.APPLE_CIDER, 1)); - gifts.add(new CustomItem(SlimefunItems.FRUIT_CAKE, 4)); + gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_PRESENT, 1)); + gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_EGG_NOG, 1)); + gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_MILK, 1)); + gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_CIDER, 1)); + gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_FRUIT_CAKE, 4)); gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 4)); } gifts.add(new SkullItem("mrCookieSlime")); From 41b6cd389d54a359845ccc66777261722d769d7b Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Mon, 16 Apr 2018 19:11:50 +0300 Subject: [PATCH 28/85] Added holidays prefixes --- src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index a61396f39..cf78c4ec3 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -3053,7 +3053,7 @@ public class SlimefunSetup { new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.CARROT_ITEM), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.EASTER_CARROT_PIE, 2)) .register(true); - new SlimefunItem(Categories.EASTER, SlimefunItems.CHRISTMAS_APPLE_PIE, "CHRISTMAS_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new SlimefunItem(Categories.EASTER, SlimefunItems.CHRISTMAS_APPLE_PIE, "EASTER_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) .register(true); From 2f7d4b619b6425f68e12297d789e3b0aa62f3e76 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Mon, 16 Apr 2018 19:41:50 +0300 Subject: [PATCH 29/85] Replaced deprecated method --- .../Slimefun/Commands/SlimefunCommand.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java b/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java index 82c480427..6caa55e89 100644 --- a/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java +++ b/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java @@ -201,9 +201,9 @@ public class SlimefunCommand implements CommandExecutor, Listener { if (args.length == 3) { if (Players.isOnline(args[1])) { if (Slimefun.listIDs().contains(args[2].toUpperCase())) { - Messages.local.sendTranslation(Bukkit.getPlayer(args[1]), "messages.given-item", true, new Variable("%item%", SlimefunItem.getByName(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()), new Variable("%amount%", "1")); - Bukkit.getPlayer(args[1]).getInventory().addItem(SlimefunItem.getByName(args[2].toUpperCase()).getItem()); - Messages.local.sendTranslation(sender, "messages.give-item", true, new Variable("%player%", args[1]), new Variable("%item%", SlimefunItem.getByName(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()), new Variable("%amount%", "1")); + Messages.local.sendTranslation(Bukkit.getPlayer(args[1]), "messages.given-item", true, new Variable("%item%", SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()), new Variable("%amount%", "1")); + Bukkit.getPlayer(args[1]).getInventory().addItem(SlimefunItem.getByID(args[2].toUpperCase()).getItem()); + Messages.local.sendTranslation(sender, "messages.give-item", true, new Variable("%player%", args[1]), new Variable("%item%", SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()), new Variable("%amount%", "1")); } else Messages.local.sendTranslation(sender, "messages.not-valid-item", true, new Variable("%item%", args[2])); } @@ -216,9 +216,9 @@ public class SlimefunCommand implements CommandExecutor, Listener { int amount = Integer.parseInt(args[3]); if (amount > 0) { - Messages.local.sendTranslation(Bukkit.getPlayer(args[1]), "messages.given-item", true, new Variable("%item%", SlimefunItem.getByName(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()), new Variable("%amount%", String.valueOf(amount))); - Bukkit.getPlayer(args[1]).getInventory().addItem(new CustomItem(SlimefunItem.getByName(args[2].toUpperCase()).getItem(), amount)); - Messages.local.sendTranslation(sender, "messages.give-item", true, new Variable("%player%", args[1]), new Variable("%item%", SlimefunItem.getByName(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()), new Variable("%amount%", String.valueOf(amount))); + Messages.local.sendTranslation(Bukkit.getPlayer(args[1]), "messages.given-item", true, new Variable("%item%", SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()), new Variable("%amount%", String.valueOf(amount))); + Bukkit.getPlayer(args[1]).getInventory().addItem(new CustomItem(SlimefunItem.getByID(args[2].toUpperCase()).getItem(), amount)); + Messages.local.sendTranslation(sender, "messages.give-item", true, new Variable("%player%", args[1]), new Variable("%item%", SlimefunItem.getByID(args[2].toUpperCase()).getItem().getItemMeta().getDisplayName()), new Variable("%amount%", String.valueOf(amount))); } else Messages.local.sendTranslation(sender, "messages.not-valid-amount", true, new Variable("%amount%", String.valueOf(amount))); } catch (NumberFormatException e){ From eb7388c613e670c526c0a51a0182ac5f0ce2a343 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Mon, 16 Apr 2018 19:43:03 +0300 Subject: [PATCH 30/85] Replaced deprecated method --- src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java index 29ec4fdff..271f888bb 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java @@ -112,7 +112,7 @@ public class DamageListener implements Listener { } } - if (!e.getEntity().getCanPickupItems() && Talisman.checkFor(e, SlimefunItem.getByName("HUNTER_TALISMAN")) && !(e.getEntity() instanceof Player)) { + if (!e.getEntity().getCanPickupItems() && Talisman.checkFor(e, SlimefunItem.getByID("HUNTER_TALISMAN")) && !(e.getEntity() instanceof Player)) { List newDrops = new ArrayList(); for (ItemStack drop : e.getDrops()) { newDrops.add(drop); From 111424bae47c358fa166e644baea56b89537694c Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Mon, 16 Apr 2018 19:45:09 +0300 Subject: [PATCH 31/85] Replaced deprecated method --- src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 742d9d8aa..3950c39eb 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -216,7 +216,7 @@ public class ItemListener implements Listener { float cost = 0.3F; if (charge >= cost) { p.setItemInHand(ItemEnergy.chargeItem(item, -cost)); - Bukkit.getPluginManager().callEvent(new ItemUseEvent(e.getParentEvent(), SlimefunItem.getByName((String) Slimefun.getItemValue(SlimefunItem.getByItem(tool).getName(), "mode." + modes.get(index) + ".item")).getItem(), e.getClickedBlock())); + Bukkit.getPluginManager().callEvent(new ItemUseEvent(e.getParentEvent(), SlimefunItem.getByID((String) Slimefun.getItemValue(SlimefunItem.getByItem(tool).getID(), "mode." + modes.get(index) + ".item")).getItem(), e.getClickedBlock())); } } else { From b423c9bd87f76da8ee2c7605b54a05ea584b6ce2 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Mon, 16 Apr 2018 19:46:18 +0300 Subject: [PATCH 32/85] Replaced deprecated method --- src/me/mrCookieSlime/Slimefun/SlimefunStartup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java index b8c6039e6..f93c01af5 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java @@ -274,7 +274,7 @@ public class SlimefunStartup extends JavaPlugin { new BlockStorage(world); } - if (SlimefunItem.getByName("ANCIENT_ALTAR") != null) new AncientAltarListener((SlimefunStartup) instance); + if (SlimefunItem.getByID("ANCIENT_ALTAR") != null) new AncientAltarListener((SlimefunStartup) instance); } }, 0); From 3edba533c9ae863cb9f4a92ebca2badf2d042a11 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Mon, 16 Apr 2018 23:39:06 +0300 Subject: [PATCH 33/85] Added a new Category for ExoticGarden --- src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java b/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java index 7ce86b88c..f35649a81 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java @@ -31,6 +31,8 @@ public class RecipeType { public static final RecipeType ANCIENT_ALTAR = new RecipeType(new CustomItem(Material.ENCHANTMENT_TABLE, "&4Ancient Altar", 0, new String[] {"", "&dYou will need to craft this Item", "&dby performing an Ancient Altar Ritual"})); public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType(new CustomItem(Material.STAINED_GLASS, "&cHeated Pressure Chamber", 8, new String[] {"", "&a&oCraft this Item in a", "&a&oHeated Pressure Chamber"}), "HEATED_PRESSURE_CHAMBER"); + public static final RecipeType KITCHEN = new RecipeType(new CustomItem(Material.CAULDRON_ITEM, "&eKitchen", 0, new String[] {"", "&a&oThis item should be made", "&a&oin the Kitchen"}), "KITCHEN"); + public static final RecipeType SHAPED_RECIPE = new RecipeType(new CustomItem(Material.WORKBENCH, "&eShaped Recipe", 0, new String[] {"", "&a&oJust a standard Recipe in the Workbench..."})); public static final RecipeType SHAPELESS_RECIPE = new RecipeType(new CustomItem(Material.WORKBENCH, "&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"})); From c8ab30a4858ba9b18f079889d49cc041aef47881 Mon Sep 17 00:00:00 2001 From: SoSeDiK Date: Tue, 17 Apr 2018 00:47:05 +0300 Subject: [PATCH 34/85] Removed changes Move RecipeType to the ExoticGarden --- src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java b/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java index f35649a81..7ce86b88c 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/RecipeType.java @@ -31,8 +31,6 @@ public class RecipeType { public static final RecipeType ANCIENT_ALTAR = new RecipeType(new CustomItem(Material.ENCHANTMENT_TABLE, "&4Ancient Altar", 0, new String[] {"", "&dYou will need to craft this Item", "&dby performing an Ancient Altar Ritual"})); public static final RecipeType HEATED_PRESSURE_CHAMBER = new RecipeType(new CustomItem(Material.STAINED_GLASS, "&cHeated Pressure Chamber", 8, new String[] {"", "&a&oCraft this Item in a", "&a&oHeated Pressure Chamber"}), "HEATED_PRESSURE_CHAMBER"); - public static final RecipeType KITCHEN = new RecipeType(new CustomItem(Material.CAULDRON_ITEM, "&eKitchen", 0, new String[] {"", "&a&oThis item should be made", "&a&oin the Kitchen"}), "KITCHEN"); - public static final RecipeType SHAPED_RECIPE = new RecipeType(new CustomItem(Material.WORKBENCH, "&eShaped Recipe", 0, new String[] {"", "&a&oJust a standard Recipe in the Workbench..."})); public static final RecipeType SHAPELESS_RECIPE = new RecipeType(new CustomItem(Material.WORKBENCH, "&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"})); From 5b51953423d84bffdc4bc2af0d2715c131bf3ba6 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Tue, 17 Apr 2018 13:47:55 +0200 Subject: [PATCH 35/85] Localized Clearlag repo --- lib/Clearlag.jar | Bin 0 -> 115473 bytes pom.xml | 8 +++----- 2 files changed, 3 insertions(+), 5 deletions(-) create mode 100644 lib/Clearlag.jar diff --git a/lib/Clearlag.jar b/lib/Clearlag.jar new file mode 100644 index 0000000000000000000000000000000000000000..477a31b2f67cdf28acc9813d4dea49ca950cb0a7 GIT binary patch literal 115473 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 jO+JI;k%mA7| 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 DqitU& literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index f64cd1cf8..6ea6ff8b8 100644 --- a/pom.xml +++ b/pom.xml @@ -31,10 +31,6 @@ jitpack.io https://jitpack.io - - clearlag-repo - http://minebuilders.me:8080/job/Clearlag/lastSuccessfulBuild/maven-repository/repository/ - robomwm-repo https://dl.bintray.com/robomwm/maven @@ -86,7 +82,9 @@ me.minebuilders clearlag-core - 2.9.0-SNAPSHOT + 2.9.7 + system + ${project.basedir}/lib/Clearlag.jar net.coreprotect From 19f4666235d579eedc6ef73a495170cd50cbda18 Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Tue, 17 Apr 2018 23:35:33 -0700 Subject: [PATCH 36/85] Slimefun book GUI dupe fix Adds a player to a List when they have the guide open and cancels all inventory clicks until the menu is closed. --- src/me/mrCookieSlime/Slimefun/SlimefunGuide.java | 5 +++++ src/me/mrCookieSlime/Slimefun/Variables.java | 1 + .../Slimefun/listeners/ItemListener.java | 15 +++++++++++++++ 3 files changed, 21 insertions(+) diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index b89350d66..475e85bc1 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -236,6 +236,7 @@ public class SlimefunGuide { } }); + Variables.usingGuide.add(p.getUniqueId()); menu.open(p); } @@ -328,6 +329,7 @@ public class SlimefunGuide { }); } + Variables.usingGuide.add(p.getUniqueId()); menu.open(p); } @@ -646,6 +648,7 @@ public class SlimefunGuide { } }); + Variables.usingGuide.add(p.getUniqueId()); menu.open(p); } } @@ -925,6 +928,7 @@ public class SlimefunGuide { } } + Variables.usingGuide.add(p.getUniqueId()); menu.open(p); } @@ -1317,6 +1321,7 @@ public class SlimefunGuide { } } + Variables.usingGuide.add(p.getUniqueId()); menu.build().open(p); } diff --git a/src/me/mrCookieSlime/Slimefun/Variables.java b/src/me/mrCookieSlime/Slimefun/Variables.java index 2d5ef8306..39088468e 100644 --- a/src/me/mrCookieSlime/Slimefun/Variables.java +++ b/src/me/mrCookieSlime/Slimefun/Variables.java @@ -23,5 +23,6 @@ public class Variables { public static List blocks = new ArrayList(); public static List cancelPlace = new ArrayList(); public static Map arrows = new HashMap(); + public static List usingGuide = new ArrayList(); } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 3950c39eb..d215ddea1 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -20,6 +20,7 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerInteractEvent; @@ -386,4 +387,18 @@ public class ItemListener implements Listener { } } } + + @EventHandler + public void onClose(InventoryCloseEvent e) { + if (Variables.usingGuide.contains(e.getPlayer().getUniqueId())) { + Variables.usingGuide.remove(e.getPlayer().getUniqueId()); + } + } + + @EventHandler + public void inventoryClickEvent(final InventoryClickEvent e) { + if (Variables.usingGuide.contains(e.getWhoClicked().getUniqueId())) { + e.setCancelled(true); + } + } } From f595cb06a8ca90d9a1a39dc4c648d1dd6f4e8b43 Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Thu, 19 Apr 2018 14:11:23 -0700 Subject: [PATCH 37/85] Fix for players getting stuck in elevator books/teleporter guis --- src/me/mrCookieSlime/Slimefun/Variables.java | 1 + .../Slimefun/listeners/TeleporterListener.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Variables.java b/src/me/mrCookieSlime/Slimefun/Variables.java index 39088468e..da8771212 100644 --- a/src/me/mrCookieSlime/Slimefun/Variables.java +++ b/src/me/mrCookieSlime/Slimefun/Variables.java @@ -24,5 +24,6 @@ public class Variables { public static List cancelPlace = new ArrayList(); public static Map arrows = new HashMap(); public static List usingGuide = new ArrayList(); + public static Map dialogueCooldown = new HashMap(); } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java b/src/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java index df886f5e7..c96af16f6 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java @@ -1,6 +1,7 @@ package me.mrCookieSlime.Slimefun.listeners; import me.mrCookieSlime.Slimefun.SlimefunStartup; +import me.mrCookieSlime.Slimefun.Variables; import me.mrCookieSlime.Slimefun.GPS.Elevator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.Teleporter; @@ -12,6 +13,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.event.player.PlayerMoveEvent; public class TeleporterListener implements Listener { @@ -38,6 +40,8 @@ public class TeleporterListener implements Listener { } try { + if(Variables.dialogueCooldown.containsKey(e.getPlayer().getUniqueId())) return; + else Variables.dialogueCooldown.put(e.getPlayer().getUniqueId(), e.getClickedBlock().getLocation().toString()); ((Teleporter) teleporter).onInteract(e.getPlayer(), e.getClickedBlock().getRelative(BlockFace.DOWN)); } catch (Exception x) { x.printStackTrace(); @@ -54,6 +58,8 @@ public class TeleporterListener implements Listener { } try { + if(Variables.dialogueCooldown.containsKey(e.getPlayer().getUniqueId())) return; + else Variables.dialogueCooldown.put(e.getPlayer().getUniqueId(), e.getClickedBlock().getLocation().toString()); ((Teleporter) teleporter).onInteract(e.getPlayer(), e.getClickedBlock().getRelative(BlockFace.DOWN)); } catch (Exception x) { x.printStackTrace(); @@ -63,8 +69,18 @@ public class TeleporterListener implements Listener { else e.setCancelled(true); } else if (item.getID().equals("ELEVATOR_PLATE")) { + if(Variables.dialogueCooldown.containsKey(e.getPlayer().getUniqueId())) return; + else Variables.dialogueCooldown.put(e.getPlayer().getUniqueId(), e.getClickedBlock().getLocation().toString()); Elevator.openDialogue(e.getPlayer(), e.getClickedBlock()); } } - + + @EventHandler + public void onPlayerMove(PlayerMoveEvent e) { + if(Variables.dialogueCooldown.containsKey(e.getPlayer().getUniqueId())) { + if(!e.getPlayer().getLocation().toString().equals(Variables.dialogueCooldown.get(e.getPlayer().getUniqueId()))) { + Variables.dialogueCooldown.remove(e.getPlayer().getUniqueId()); + } + } + } } From 6e1376cfb2b9b6821f3fd77117b6bbe991e7e10f Mon Sep 17 00:00:00 2001 From: Rick Date: Fri, 20 Apr 2018 17:43:57 -0400 Subject: [PATCH 38/85] Fix for the Anvil being able to rename Broken and Reinforced Spawners resulting in becoming vanilla pig spawners. Problem with isDisabled... called isItem... which doesn't return an affirmative unless the lore matches exactly... however... lore would nearly never match exactly: backpacks have different ids or no ids, no item ever matches to "" or "" which should result in a great number of slimefun items being identified as NOT SlimeFun items. --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index b39506aee..0ce3a0c61 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -334,7 +334,7 @@ public class SlimefunItem { 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; + else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; } return null; } @@ -344,7 +344,7 @@ public class SlimefunItem { if (this instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; - else return SlimefunManager.isItemSimiliar(item, this.item, true); + else return SlimefunManager.isItemSimiliar(item, this.item, false); } public void load() { From 44e9a3cc43abbf3c5c196fb9efb51b0f9cb96a1e Mon Sep 17 00:00:00 2001 From: Rick Date: Fri, 20 Apr 2018 17:47:41 -0400 Subject: [PATCH 39/85] Copies entirety of logic from the Enhanced Crafting table to the Magic Workbench for the crafting of Soulbound Backpacks. On further investigation, I discovered this did not "delete" the ID of the backpack being used for crafting, but instead recycles that ID for use in the final crafted pack and simply adjusts the size for that ID so that it matches. By taking that approach, I was forced to include all of this even though this will make it exponentially more difficult to make ID-less packs for sale in other plugins like ChestShop. --- .../Slimefun/Setup/SlimefunSetup.java | 68 ++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index cf78c4ec3..39f759903 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1158,8 +1158,16 @@ public class SlimefunSetup { boolean craft = true; for (int j = 0; j < inv.getContents().length; j++) { if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { - craft = false; - break; + if (SlimefunItem.getByItem(inputs.get(i)[j]) instanceof SlimefunBackpack) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], false)) { + craft = false; + break; + } + } + else { + craft = false; + break; + } } } @@ -1171,6 +1179,62 @@ public class SlimefunSetup { inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); } if (InvUtils.fits(inv2, adding)) { + SlimefunItem sfItem = SlimefunItem.getByItem(adding); + + if (sfItem instanceof SlimefunBackpack) { + ItemStack backpack = null; + + for (int j = 0; j < 9; j++) { + if (inv.getContents()[j] != null) { + if (inv.getContents()[j].getType() != Material.AIR) { + if (SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) { + backpack = inv.getContents()[j]; + break; + } + } + } + } + String id = ""; + int size = ((SlimefunBackpack) sfItem).size; + + if (backpack != null) { + for (String line: backpack.getItemMeta().getLore()) { + if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { + id = line.replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); + Config cfg = new Config(new File("data-storage/Slimefun/Players/" + id.split("#")[0] + ".yml")); + cfg.setValue("backpacks." + id.split("#")[1] + ".size", size); + cfg.save(); + break; + } + } + } + + if (id.equals("")) { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + else { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", id)); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + } + for (int j = 0; j < 9; j++) { if (inv.getContents()[j] != null) { if (inv.getContents()[j].getType() != Material.AIR) { From 785cbea08f0dde4983bd869fc30e16b946cfb562 Mon Sep 17 00:00:00 2001 From: Rick Date: Fri, 20 Apr 2018 17:53:36 -0400 Subject: [PATCH 40/85] I could not use "breaK" as advised as that would completely break the loop and cease checking for duplicates among the remaining items. However, we are only checking against 5 additional slots here, so I've stated them each and made them return if a match is a bit better than setting a variable and all that, this is also more clear about what is going on here. I will state that the previous patch does introduce a limitation: identical soulbound items would be lost. Having exactly duplicated soulbound items prior to a death is a rather extreme situation, but during my testing I actually was using some I duplicated in creative mode and noticed that I would only retrieve one of each, and not the copies. It might be desireable to integrate an option here to only use this logic IF keep inventory regions will be in use somewhere, although not entirely necessary. --- src/me/mrCookieSlime/Slimefun/api/Soul.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/me/mrCookieSlime/Slimefun/api/Soul.java b/src/me/mrCookieSlime/Slimefun/api/Soul.java index 764d92624..3f8db67cb 100644 --- a/src/me/mrCookieSlime/Slimefun/api/Soul.java +++ b/src/me/mrCookieSlime/Slimefun/api/Soul.java @@ -21,6 +21,12 @@ public class Soul { public static void retrieveItems(Player p) { if (Variables.soulbound.containsKey(p.getUniqueId())) { for (ItemStack item: Variables.soulbound.get(p.getUniqueId())) { + if (item.equals(p.getInventory().getHelmet())) return; + if (item.equals(p.getInventory().getChestplate())) return; + if (item.equals(p.getInventory().getLeggings())) return; + if (item.equals(p.getInventory().getBoots())) return; + if (item.equals(p.getInventory().getItemInOffHand())) return; + if(!p.getInventory().contains(item)) { p.getInventory().addItem(item); } From 201fb33eb4da9cd797becb1f8ac04159ac367985 Mon Sep 17 00:00:00 2001 From: Rick Date: Sat, 21 Apr 2018 17:20:43 -0400 Subject: [PATCH 41/85] Closes #631... player no longer needs to be "owner" of the item to break these two blocks. This makes sense to me since most Slimefun blocks do not check for this either except maybe those which have inventories, which neither of these do. --- .../mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 39f759903..e51f8f131 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -4689,7 +4689,7 @@ public class SlimefunSetup { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - return BlockStorage.getBlockInfo(b, "owner").equals(p.getUniqueId().toString()); + return true; } }); @@ -4724,12 +4724,9 @@ public class SlimefunSetup { } @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - if (BlockStorage.getBlockInfo(b, "owner").equals(p.getUniqueId().toString())) { - Projector.getArmorStand(b).remove(); - return true; - } - else return false; + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + Projector.getArmorStand(b).remove(); + return true; } }); From fd9ed5155ae12526e41edc24cf9d56121a12d12e Mon Sep 17 00:00:00 2001 From: Rick Date: Sat, 21 Apr 2018 17:28:43 -0400 Subject: [PATCH 42/85] cleaned up some whitespace that showed up in last commit. --- src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index e51f8f131..70be04745 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -4724,7 +4724,7 @@ public class SlimefunSetup { } @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { Projector.getArmorStand(b).remove(); return true; } From 83e55c255df6e49d07040c77a8efe038e3652b62 Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 10:19:57 -0400 Subject: [PATCH 43/85] Changed to special cases only for solving issue with Broken/Repaired spawner renaming ability. There may still be other items these routines don't define as "SlimeFun items" without identical lore to the example, but hopefully this covers everything. --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 0ce3a0c61..36cc7e35f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -11,6 +11,7 @@ import java.util.Set; import me.mrCookieSlime.Slimefun.SlimefunStartup; import me.mrCookieSlime.Slimefun.AncientAltar.AltarRecipe; 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; @@ -334,7 +335,8 @@ public class SlimefunItem { 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(), false)) return sfi; + else if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false))) return sfi; + else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), true)) return sfi; } return null; } @@ -344,7 +346,8 @@ public class SlimefunItem { if (this instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; - else return SlimefunManager.isItemSimiliar(item, this.item, false); + else if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false))) return true; + else return SlimefunManager.isItemSimiliar(item, this.item, true); } public void load() { From fda8f56f8a5bb4219fb512d1bf7c3298787d26ac Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 10:25:44 -0400 Subject: [PATCH 44/85] Switched to "continue" as stated. Although... pondering as to why this would have seemed to have worked anyway... the way I did it, in the case of a match, the whole thing quits... which is actually fine if the user just died in a keep-inventory region. If there was a better way of determining the existence of a keep-inventory region from all plugins that might produce one, really, that's what we'd rather be checking for here anyway. This is a fine alternative, but actually identical items will result in only one being kept when dying in a non-keep-inventory situation. --- src/me/mrCookieSlime/Slimefun/api/Soul.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/api/Soul.java b/src/me/mrCookieSlime/Slimefun/api/Soul.java index 3f8db67cb..ee5beb279 100644 --- a/src/me/mrCookieSlime/Slimefun/api/Soul.java +++ b/src/me/mrCookieSlime/Slimefun/api/Soul.java @@ -21,11 +21,11 @@ public class Soul { public static void retrieveItems(Player p) { if (Variables.soulbound.containsKey(p.getUniqueId())) { for (ItemStack item: Variables.soulbound.get(p.getUniqueId())) { - if (item.equals(p.getInventory().getHelmet())) return; - if (item.equals(p.getInventory().getChestplate())) return; - if (item.equals(p.getInventory().getLeggings())) return; - if (item.equals(p.getInventory().getBoots())) return; - if (item.equals(p.getInventory().getItemInOffHand())) return; + if (item.equals(p.getInventory().getHelmet())) continue; + if (item.equals(p.getInventory().getChestplate())) continue; + if (item.equals(p.getInventory().getLeggings())) continue; + if (item.equals(p.getInventory().getBoots())) continue; + if (item.equals(p.getInventory().getItemInOffHand())) continue; if(!p.getInventory().contains(item)) { p.getInventory().addItem(item); From 34150791bca1e5a046c92ce3a792bb4df17073a4 Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 10:58:36 -0400 Subject: [PATCH 45/85] Commit 2 of 2 for ticket #643 -- eliminates Altar dupe bug by disallowing all interactions while altar is in use. --- .../listeners/AncientAltarListener.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java index 6b01452db..c630ea8e5 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java @@ -37,6 +37,8 @@ import org.bukkit.util.Vector; public class AncientAltarListener implements Listener { + public static boolean altarinuse = false; + public AncientAltarListener(SlimefunStartup plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); } @@ -46,6 +48,10 @@ public class AncientAltarListener implements Listener { @EventHandler(priority=EventPriority.HIGH, ignoreCancelled = true) public void onInteract(PlayerInteractEvent e) { + if (this.altarinuse) { + e.setCancelled(true); + return; + } if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; Block b = e.getClickedBlock(); SlimefunItem item = BlockStorage.check(b); @@ -62,6 +68,7 @@ public class AncientAltarListener implements Listener { insertItem(e.getPlayer(), b); } else if (!removed_items.contains(stack.getUniqueId())) { + this.altarinuse = true; final UUID uuid = stack.getUniqueId(); removed_items.add(uuid); @@ -80,6 +87,10 @@ public class AncientAltarListener implements Listener { } } else if (item.getID().equals("ANCIENT_ALTAR")) { + if (this.altarinuse) { + e.setCancelled(true); + return; + } e.setCancelled(true); ItemStack catalyst = new CustomItem(e.getPlayer().getInventory().getItemInMainHand(), 1); @@ -94,14 +105,13 @@ public class AncientAltarListener implements Listener { Item stack = findItem(pedestal); if (stack != null) input.add(fixItemStack(stack.getItemStack(), stack.getCustomName())); } - ItemStack result = Pedestals.getRecipeOutput(catalyst, input); if (result != null) { + this.altarinuse = true; List consumed = new ArrayList(); consumed.add(catalyst); PlayerInventory.consumeItemInHand(e.getPlayer()); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L); - } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L); } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-recipe", true); @@ -136,6 +146,15 @@ public class AncientAltarListener implements Listener { return stack; } + public void setNotInUse() { + this.altarinuse = false; + } + + public boolean setAltarinuse(boolean inuse) { + this.altarinuse = inuse; + return true; + } + public static Item findItem(Block b) { for (Entity n: b.getChunk().getEntities()) { if (n instanceof Item) { @@ -158,7 +177,7 @@ public class AncientAltarListener implements Listener { p.playSound(b.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.3F, 0.3F); } } - + @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent e) { Block b = e.getBlockPlaced().getRelative(0, -1, 0); From 2b9e24b45b99c2d2bed40920dbc6f0af21cb5eae Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 10:58:57 -0400 Subject: [PATCH 46/85] Commit 1 of 2 for ticket #643 -- eliminates Altar dupe bug by disallowing all interactions while altar is in use. --- .../Slimefun/AncientAltar/RitualAnimation.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java index ce0b6e711..3ad6f6013 100644 --- a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java +++ b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java @@ -28,7 +28,7 @@ public class RitualAnimation implements Runnable { List particles; boolean running; - int stage; + int stage; public RitualAnimation(List altars, Block altar, Location drop, ItemStack output, List pedestals, List items) { this.l = drop; @@ -48,6 +48,7 @@ public class RitualAnimation implements Runnable { idle(); if(this.stage == 36) { finish(); + AncientAltarListener.altarinuse = false; return; } if(this.stage > 0 && this.stage % 4 == 0) { @@ -72,7 +73,10 @@ public class RitualAnimation implements Runnable { private void checkPedestal(Block pedestal) { Item item = AncientAltarListener.findItem(pedestal); - if (item == null) abort(); + if (item == null) { + abort(); + AncientAltarListener.altarinuse = false; + } else { particles.add(pedestal.getLocation().add(0.5, 1.5, 0.5)); items.add(AncientAltarListener.fixItemStack(item.getItemStack(), item.getCustomName())); @@ -95,7 +99,7 @@ public class RitualAnimation implements Runnable { for (ItemStack stack: items) { l.getWorld().dropItemNaturally(l, stack); } - l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F); + l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F); altars.remove(altar); } From c65d8cf49b92bb53ae34d66239788e83021b4ec6 Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 11:59:36 -0400 Subject: [PATCH 47/85] Redoing this to fix a thing. --- .../listeners/AncientAltarListener.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java index c630ea8e5..05aef13a7 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java @@ -48,7 +48,7 @@ public class AncientAltarListener implements Listener { @EventHandler(priority=EventPriority.HIGH, ignoreCancelled = true) public void onInteract(PlayerInteractEvent e) { - if (this.altarinuse) { + if (altarinuse) { e.setCancelled(true); return; } @@ -63,12 +63,12 @@ public class AncientAltarListener implements Listener { if(e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.AIR)) return; if(b.getRelative(0, 1, 0).getType() != Material.AIR) { Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_PEDESTAL.obstructed", true); + altarinuse = false; return; } insertItem(e.getPlayer(), b); } else if (!removed_items.contains(stack.getUniqueId())) { - this.altarinuse = true; final UUID uuid = stack.getUniqueId(); removed_items.add(uuid); @@ -87,7 +87,7 @@ public class AncientAltarListener implements Listener { } } else if (item.getID().equals("ANCIENT_ALTAR")) { - if (this.altarinuse) { + if (altarinuse) { e.setCancelled(true); return; } @@ -107,7 +107,6 @@ public class AncientAltarListener implements Listener { } ItemStack result = Pedestals.getRecipeOutput(catalyst, input); if (result != null) { - this.altarinuse = true; List consumed = new ArrayList(); consumed.add(catalyst); PlayerInventory.consumeItemInHand(e.getPlayer()); @@ -115,16 +114,19 @@ public class AncientAltarListener implements Listener { else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-recipe", true); + altarinuse = false; } } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-catalyst", true); + altarinuse = false; } } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.not-enough-pedestals", true, new Variable("%pedestals%", String.valueOf(pedestals.size()))); + altarinuse = false; } } } @@ -146,15 +148,6 @@ public class AncientAltarListener implements Listener { return stack; } - public void setNotInUse() { - this.altarinuse = false; - } - - public boolean setAltarinuse(boolean inuse) { - this.altarinuse = inuse; - return true; - } - public static Item findItem(Block b) { for (Entity n: b.getChunk().getEntities()) { if (n instanceof Item) { From 8e3d2e332bfa511c36664f9963c6fd7852f00e8f Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 11:59:53 -0400 Subject: [PATCH 48/85] redoing this to fix a thing. --- .../Slimefun/AncientAltar/RitualAnimation.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java index 3ad6f6013..2ea07ab9d 100644 --- a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java +++ b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java @@ -45,6 +45,7 @@ public class RitualAnimation implements Runnable { @Override public void run() { + AncientAltarListener.altarinuse = true; idle(); if(this.stage == 36) { finish(); @@ -73,11 +74,9 @@ public class RitualAnimation implements Runnable { private void checkPedestal(Block pedestal) { Item item = AncientAltarListener.findItem(pedestal); - if (item == null) { - abort(); - AncientAltarListener.altarinuse = false; - } + if (item == null) abort(); else { + AncientAltarListener.altarinuse = true; particles.add(pedestal.getLocation().add(0.5, 1.5, 0.5)); items.add(AncientAltarListener.fixItemStack(item.getItemStack(), item.getCustomName())); pedestal.getWorld().playSound(pedestal.getLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 5F, 2F); @@ -99,7 +98,8 @@ public class RitualAnimation implements Runnable { for (ItemStack stack: items) { l.getWorld().dropItemNaturally(l, stack); } - l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F); + l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F); + AncientAltarListener.altarinuse = false; altars.remove(altar); } @@ -107,6 +107,7 @@ public class RitualAnimation implements Runnable { l.getWorld().playSound(l, Sound.ENTITY_ZOMBIE_VILLAGER_CURE, 1F, 1F); l.getWorld().playEffect(l, Effect.STEP_SOUND, Material.EMERALD_BLOCK); l.getWorld().dropItemNaturally(l.add(0, 1, 0), output); + AncientAltarListener.altarinuse = false; altars.remove(altar); } From 3b5669dbafe70dd8b3e3a5a857e62aef349038fe Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:00:23 -0400 Subject: [PATCH 49/85] Fixing some character issue from prior pull requests. --- src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java b/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java index 26007e050..c707fb156 100644 --- a/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java +++ b/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java @@ -38,7 +38,7 @@ public class ItemHash { StringBuilder builder = new StringBuilder(LENGTH * 2); for (char c: item.getHash().toCharArray()) { - builder.append('§'); + builder.append('§'); builder.append(c); } @@ -47,7 +47,7 @@ public class ItemHash { public static SlimefunItem fromString(String input) { if (input == null || input.length() != LENGTH * 2) return null; - String hex = input.replaceAll("§", ""); + String hex = input.replaceAll("§", ""); if (hex.length() != LENGTH || !map.containsKey(hex)) return null; From e6199e3d462725ae56a86e4e36bb12ccf43c934b Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:11:51 -0400 Subject: [PATCH 50/85] Moves special case out of loop --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 36cc7e35f..62a1d3797 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -330,12 +330,12 @@ public class SlimefunItem { public static SlimefunItem getByItem(ItemStack item) { if (item == null) return null; + if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false))) return item; 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, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, 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; } return null; From 47d95af0a0536dee6d7c7f01e451d126aec73477 Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:12:52 -0400 Subject: [PATCH 51/85] Fix whitespace issue. --- .../mrCookieSlime/Slimefun/listeners/AncientAltarListener.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java index 05aef13a7..1ffbcd41e 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java @@ -110,7 +110,8 @@ public class AncientAltarListener implements Listener { List consumed = new ArrayList(); consumed.add(catalyst); PlayerInventory.consumeItemInHand(e.getPlayer()); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L); } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L); + } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-recipe", true); From 91587048c3c37d066324bda22b19d31ab98751aa Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:47:22 -0400 Subject: [PATCH 52/85] removes case for getbyitem... since i can't check items in the loop here, I can't check the actual item, so this just throws an error and doesn't work anyway. --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 62a1d3797..6c6149690 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -329,8 +329,7 @@ public class SlimefunItem { } public static SlimefunItem getByItem(ItemStack item) { - if (item == null) return null; - if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false))) return 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; From 444cb1538e9205718994d3900f0630b877f8fc15 Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:48:00 -0400 Subject: [PATCH 53/85] Removing all changes. --- .../listeners/AncientAltarListener.java | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java index 1ffbcd41e..6b01452db 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java @@ -37,8 +37,6 @@ import org.bukkit.util.Vector; public class AncientAltarListener implements Listener { - public static boolean altarinuse = false; - public AncientAltarListener(SlimefunStartup plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); } @@ -48,10 +46,6 @@ public class AncientAltarListener implements Listener { @EventHandler(priority=EventPriority.HIGH, ignoreCancelled = true) public void onInteract(PlayerInteractEvent e) { - if (altarinuse) { - e.setCancelled(true); - return; - } if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; Block b = e.getClickedBlock(); SlimefunItem item = BlockStorage.check(b); @@ -63,7 +57,6 @@ public class AncientAltarListener implements Listener { if(e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.AIR)) return; if(b.getRelative(0, 1, 0).getType() != Material.AIR) { Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_PEDESTAL.obstructed", true); - altarinuse = false; return; } insertItem(e.getPlayer(), b); @@ -87,10 +80,6 @@ public class AncientAltarListener implements Listener { } } else if (item.getID().equals("ANCIENT_ALTAR")) { - if (altarinuse) { - e.setCancelled(true); - return; - } e.setCancelled(true); ItemStack catalyst = new CustomItem(e.getPlayer().getInventory().getItemInMainHand(), 1); @@ -105,6 +94,7 @@ public class AncientAltarListener implements Listener { Item stack = findItem(pedestal); if (stack != null) input.add(fixItemStack(stack.getItemStack(), stack.getCustomName())); } + ItemStack result = Pedestals.getRecipeOutput(catalyst, input); if (result != null) { List consumed = new ArrayList(); @@ -115,19 +105,16 @@ public class AncientAltarListener implements Listener { else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-recipe", true); - altarinuse = false; } } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-catalyst", true); - altarinuse = false; } } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.not-enough-pedestals", true, new Variable("%pedestals%", String.valueOf(pedestals.size()))); - altarinuse = false; } } } @@ -171,7 +158,7 @@ public class AncientAltarListener implements Listener { p.playSound(b.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.3F, 0.3F); } } - + @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent e) { Block b = e.getBlockPlaced().getRelative(0, -1, 0); From 1f88557e4cda62f4bfd9aa3c397419f66de48bda Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:48:19 -0400 Subject: [PATCH 54/85] Removing all changes. --- .../Slimefun/AncientAltar/RitualAnimation.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java index 2ea07ab9d..ce0b6e711 100644 --- a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java +++ b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java @@ -28,7 +28,7 @@ public class RitualAnimation implements Runnable { List particles; boolean running; - int stage; + int stage; public RitualAnimation(List altars, Block altar, Location drop, ItemStack output, List pedestals, List items) { this.l = drop; @@ -45,11 +45,9 @@ public class RitualAnimation implements Runnable { @Override public void run() { - AncientAltarListener.altarinuse = true; idle(); if(this.stage == 36) { finish(); - AncientAltarListener.altarinuse = false; return; } if(this.stage > 0 && this.stage % 4 == 0) { @@ -76,7 +74,6 @@ public class RitualAnimation implements Runnable { Item item = AncientAltarListener.findItem(pedestal); if (item == null) abort(); else { - AncientAltarListener.altarinuse = true; particles.add(pedestal.getLocation().add(0.5, 1.5, 0.5)); items.add(AncientAltarListener.fixItemStack(item.getItemStack(), item.getCustomName())); pedestal.getWorld().playSound(pedestal.getLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 5F, 2F); @@ -99,7 +96,6 @@ public class RitualAnimation implements Runnable { l.getWorld().dropItemNaturally(l, stack); } l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F); - AncientAltarListener.altarinuse = false; altars.remove(altar); } @@ -107,7 +103,6 @@ public class RitualAnimation implements Runnable { l.getWorld().playSound(l, Sound.ENTITY_ZOMBIE_VILLAGER_CURE, 1F, 1F); l.getWorld().playEffect(l, Effect.STEP_SOUND, Material.EMERALD_BLOCK); l.getWorld().dropItemNaturally(l.add(0, 1, 0), output); - AncientAltarListener.altarinuse = false; altars.remove(altar); } From e2342c38eb5ac57bf28928ec21ab0a99eb8409e7 Mon Sep 17 00:00:00 2001 From: Kyle Einstein Date: Mon, 23 Apr 2018 08:33:29 -0400 Subject: [PATCH 55/85] Fix Two Player Duplication Bug --- .../Objects/SlimefunItem/abstractItems/AContainer.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index 76475f53a..7dbf3116b 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -84,10 +84,16 @@ public abstract class AContainer extends SlimefunItem { 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)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.toInventory().clear(slot); + } } for (int slot: getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.toInventory().clear(slot); + } } } progress.remove(b); From 0e7597e06f13a957a7ad32963931d41aea7aae67 Mon Sep 17 00:00:00 2001 From: Redemption <25185835+Redemption198@users.noreply.github.com> Date: Mon, 23 Apr 2018 22:33:08 +0200 Subject: [PATCH 56/85] Added CS-CoreLib permission check for Slimefun Machines Added CS-CoreLib permission check for Slimefun Machines. Updated some deprecated methods. --- .../Slimefun/Setup/SlimefunSetup.java | 2826 +++++++++-------- 1 file changed, 1431 insertions(+), 1395 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index cf78c4ec3..a6fb92324 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -160,15 +160,15 @@ public class SlimefunSetup { public static void setupItems() throws Exception { new SlimefunItem(Categories.WEAPONS, SlimefunItems.GRANDMAS_WALKING_STICK, "GRANDMAS_WALKING_STICK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null}) + new ItemStack[] {null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null}) .register(true); new SlimefunItem(Categories.WEAPONS, SlimefunItems.GRANDPAS_WALKING_STICK, "GRANDPAS_WALKING_STICK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.LEATHER), new ItemStack(Material.LOG), new ItemStack(Material.LEATHER), null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null}) + new ItemStack[] {new ItemStack(Material.LEATHER), new ItemStack(Material.LOG), new ItemStack(Material.LEATHER), null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null}) .register(true); new SlimefunItem(Categories.PORTABLE, SlimefunItems.PORTABLE_CRAFTER, "PORTABLE_CRAFTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.BOOK), new ItemStack(Material.WORKBENCH), null, null, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.BOOK), new ItemStack(Material.WORKBENCH), null, null, null, null, null, null, null}) .register(true, new ItemInteractionHandler() { @Override @@ -183,12 +183,12 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.FOOD, SlimefunItems.FORTUNE_COOKIE, "FORTUNE_COOKIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.COOKIE), new ItemStack(Material.PAPER), null, null, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.COOKIE), new ItemStack(Material.PAPER), null, null, null, null, null, null, null}) .register(true); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ENHANCED_CRAFTING_TABLE, "ENHANCED_CRAFTING_TABLE", - new ItemStack[] {null, null, null, null, new ItemStack(Material.WORKBENCH), null, null, new ItemStack(Material.DISPENSER), null}, - new ItemStack[0], Material.WORKBENCH) + new ItemStack[] {null, null, null, null, new ItemStack(Material.WORKBENCH), null, null, new ItemStack(Material.DISPENSER), null}, + new ItemStack[0], Material.WORKBENCH) .register(true, new MultiBlockInteractionHandler() { @Override @@ -197,113 +197,115 @@ public class SlimefunSetup { SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ENHANCED_CRAFTING_TABLE"); if (mb.isMultiBlock(machine)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - final Inventory inv = disp.getInventory(); - List inputs = RecipeType.getRecipeInputList(machine); + final Inventory inv = disp.getInventory(); + List inputs = RecipeType.getRecipeInputList(machine); - for (int i = 0; i < inputs.size(); i++) { - boolean craft = true; - for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { - if (SlimefunItem.getByItem(inputs.get(i)[j]) instanceof SlimefunBackpack) { - if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], false)) { + for (int i = 0; i < inputs.size(); i++) { + boolean craft = true; + for (int j = 0; j < inv.getContents().length; j++) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { + if (SlimefunItem.getByItem(inputs.get(i)[j]) instanceof SlimefunBackpack) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], false)) { + craft = false; + break; + } + } + else { craft = false; break; } } - else { - craft = false; - break; - } } - } - - if (craft) { - final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)).clone(); - if (Slimefun.hasUnlocked(p, adding, true)) { - Inventory inv2 = Bukkit.createInventory(null, 9, "test"); - for (int j = 0; j < inv.getContents().length; j++) { - inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); - } - if (InvUtils.fits(inv2, adding)) { - SlimefunItem sfItem = SlimefunItem.getByItem(adding); - - if (sfItem instanceof SlimefunBackpack) { - ItemStack backpack = null; - - for (int j = 0; j < 9; j++) { - if (inv.getContents()[j] != null) { - if (inv.getContents()[j].getType() != Material.AIR) { - if (SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) { - backpack = inv.getContents()[j]; + + if (craft) { + final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)).clone(); + if (Slimefun.hasUnlocked(p, adding, true)) { + Inventory inv2 = Bukkit.createInventory(null, 9, "test"); + for (int j = 0; j < inv.getContents().length; j++) { + inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); + } + if (InvUtils.fits(inv2, adding)) { + SlimefunItem sfItem = SlimefunItem.getByItem(adding); + + if (sfItem instanceof SlimefunBackpack) { + ItemStack backpack = null; + + for (int j = 0; j < 9; j++) { + if (inv.getContents()[j] != null) { + if (inv.getContents()[j].getType() != Material.AIR) { + if (SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) { + backpack = inv.getContents()[j]; + break; + } + } + } + } + String id = ""; + int size = ((SlimefunBackpack) sfItem).size; + + if (backpack != null) { + for (String line: backpack.getItemMeta().getLore()) { + if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { + id = line.replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); + Config cfg = new Config(new File("data-storage/Slimefun/Players/" + id.split("#")[0] + ".yml")); + cfg.setValue("backpacks." + id.split("#")[1] + ".size", size); + cfg.save(); + break; + } + } + } + + if (id.equals("")) { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + else { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", id)); + im.setLore(lore); + adding.setItemMeta(im); break; } } } } - String id = ""; - int size = ((SlimefunBackpack) sfItem).size; - - if (backpack != null) { - for (String line: backpack.getItemMeta().getLore()) { - if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { - id = line.replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); - Config cfg = new Config(new File("data-storage/Slimefun/Players/" + id.split("#")[0] + ".yml")); - cfg.setValue("backpacks." + id.split("#")[1] + ".size", size); - cfg.save(); - break; - } - } - } - if (id.equals("")) { - for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { - if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = adding.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); - im.setLore(lore); - adding.setItemMeta(im); - break; - } - } - } - else { - for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { - if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = adding.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", id)); - im.setLore(lore); - adding.setItemMeta(im); - break; - } - } - } - } - - for (int j = 0; j < 9; j++) { - if (inv.getContents()[j] != null) { - if (inv.getContents()[j].getType() != Material.AIR) { - if (inv.getContents()[j].getType().toString().endsWith("_BUCKET")) inv.setItem(j, new ItemStack(Material.BUCKET)); - else if (inv.getContents()[j].getAmount() > 1) inv.setItem(j, new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1)); - else inv.setItem(j, null); + for (int j = 0; j < 9; j++) { + if (inv.getContents()[j] != null) { + if (inv.getContents()[j].getType() != Material.AIR) { + if (inv.getContents()[j].getType().toString().endsWith("_BUCKET")) inv.setItem(j, new ItemStack(Material.BUCKET)); + else if (inv.getContents()[j].getAmount() > 1) inv.setItem(j, new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1)); + else inv.setItem(j, null); + } } } + p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + + inv.addItem(adding); } - p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); - - inv.addItem(adding); + else Messages.local.sendTranslation(p, "machines.full-inventory", true); } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; } - return true; } + Messages.local.sendTranslation(p, "machines.pattern-not-found", true); } - Messages.local.sendTranslation(p, "machines.pattern-not-found", true); } return true; } @@ -312,7 +314,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.PORTABLE, SlimefunItems.PORTABLE_DUSTBIN, "PORTABLE_DUSTBIN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT)}) + new ItemStack[] {new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT)}) .register(true, new ItemInteractionHandler() { @Override @@ -328,13 +330,13 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.FOOD, SlimefunItems.BEEF_JERKY, "BEEF_JERKY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.COOKED_BEEF), null, null, null, null, null, null, null}, new String[] {"Saturation"}, new Integer[] {20}) + new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.COOKED_BEEF), null, null, null, null, null, null, null}, new String[] {"Saturation"}, new Integer[] {20}) .register(true); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.GRIND_STONE, "GRIND_STONE", - new ItemStack[] {null, null, null, null, new ItemStack(Material.FENCE), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, - new ItemStack[] {new ItemStack(Material.BLAZE_ROD), new ItemStack(Material.BLAZE_POWDER, 4), new ItemStack(Material.BONE), new CustomItem(Material.INK_SACK, 15, 4), new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.NETHER_STALK), new CustomItem(SlimefunItems.MAGIC_LUMP_1, 2), new ItemStack(Material.EYE_OF_ENDER), new CustomItem(SlimefunItems.ENDER_LUMP_1, 2), new ItemStack(Material.COBBLESTONE), new ItemStack(Material.GRAVEL), new ItemStack(Material.WHEAT), SlimefunItems.WHEAT_FLOUR, new ItemStack(Material.DIRT), SlimefunItems.STONE_CHUNK}, - Material.FENCE) + new ItemStack[] {null, null, null, null, new ItemStack(Material.FENCE), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, + new ItemStack[] {new ItemStack(Material.BLAZE_ROD), new ItemStack(Material.BLAZE_POWDER, 4), new ItemStack(Material.BONE), new CustomItem(Material.INK_SACK, 15, 4), new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.NETHER_STALK), new CustomItem(SlimefunItems.MAGIC_LUMP_1, 2), new ItemStack(Material.EYE_OF_ENDER), new CustomItem(SlimefunItems.ENDER_LUMP_1, 2), new ItemStack(Material.COBBLESTONE), new ItemStack(Material.GRAVEL), new ItemStack(Material.WHEAT), SlimefunItems.WHEAT_FLOUR, new ItemStack(Material.DIRT), SlimefunItems.STONE_CHUNK}, + Material.FENCE) .register(true, new MultiBlockInteractionHandler() { @Override @@ -343,26 +345,28 @@ public class SlimefunSetup { SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("GRIND_STONE"); if (mb.isMultiBlock(machine)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { - ItemStack output = RecipeType.getRecipeOutput(machine, convert); - if (InvUtils.fits(inv, output)) { - ItemStack removing = current.clone(); - removing.setAmount(1); - inv.removeItem(removing); - inv.addItem(output); - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { + ItemStack output = RecipeType.getRecipeOutput(machine, convert); + if (InvUtils.fits(inv, output)) { + ItemStack removing = current.clone(); + removing.setAmount(1); + inv.removeItem(removing); + inv.addItem(output); + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; } } + Messages.local.sendTranslation(p, "machines.unknown-material", true); } - Messages.local.sendTranslation(p, "machines.unknown-material", true); } return true; } @@ -371,9 +375,9 @@ public class SlimefunSetup { }); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ARMOR_FORGE, "ARMOR_FORGE", - new ItemStack[] {null, null, null, null, new ItemStack(Material.ANVIL), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, - new ItemStack[] {}, - Material.ANVIL) + new ItemStack[] {null, null, null, null, new ItemStack(Material.ANVIL), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, + new ItemStack[] {}, + Material.ANVIL) .register(true, new MultiBlockInteractionHandler() { @Override @@ -382,57 +386,59 @@ public class SlimefunSetup { SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ARMOR_FORGE"); if (mb.isMultiBlock(machine)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - final Inventory inv = disp.getInventory(); - List inputs = RecipeType.getRecipeInputList(machine); + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + final Inventory inv = disp.getInventory(); + List inputs = RecipeType.getRecipeInputList(machine); - for (int i = 0; i < inputs.size(); i++) { - boolean craft = true; - for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { - craft = false; - break; - } - } - - if (craft) { - final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); - if (Slimefun.hasUnlocked(p, adding, true)) { - if (InvUtils.fits(inv, adding)) { - for (ItemStack removing: inputs.get(i)) { - if (removing != null) inv.removeItem(removing); - } - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1, 1); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1F, 2F); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1F, 2F); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); + for (int i = 0; i < inputs.size(); i++) { + boolean craft = true; + for (int j = 0; j < inv.getContents().length; j++) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { + craft = false; + break; } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); } - return true; + + if (craft) { + final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); + if (Slimefun.hasUnlocked(p, adding, true)) { + if (InvUtils.fits(inv, adding)) { + for (ItemStack removing: inputs.get(i)) { + if (removing != null) inv.removeItem(removing); + } + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1, 1); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1F, 2F); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1F, 2F); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + } + return true; + } } + Messages.local.sendTranslation(p, "machines.pattern-not-found", true); } - Messages.local.sendTranslation(p, "machines.pattern-not-found", true); } return true; } @@ -441,9 +447,9 @@ public class SlimefunSetup { }); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ORE_CRUSHER, "ORE_CRUSHER", - new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.IRON_FENCE), new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), new ItemStack(Material.IRON_FENCE)}, - new ItemStack[] {new ItemStack(Material.IRON_ORE), new CustomItem(SlimefunItems.IRON_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1), new ItemStack(Material.GOLD_ORE), new CustomItem(SlimefunItems.GOLD_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1), new ItemStack(Material.NETHERRACK, 16), SlimefunItems.SULFATE, SlimefunItems.SIFTED_ORE, SlimefunItems.CRUSHED_ORE, SlimefunItems.CRUSHED_ORE, SlimefunItems.PULVERIZED_ORE, SlimefunItems.PURE_ORE_CLUSTER, SlimefunItems.TINY_URANIUM, new ItemStack(Material.COBBLESTONE, 8), new ItemStack(Material.SAND, 1), new ItemStack(Material.GOLD_INGOT), SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_4K, SlimefunItems.GOLD_DUST}, - Material.NETHER_FENCE) + new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.IRON_FENCE), new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), new ItemStack(Material.IRON_FENCE)}, + new ItemStack[] {new ItemStack(Material.IRON_ORE), new CustomItem(SlimefunItems.IRON_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1), new ItemStack(Material.GOLD_ORE), new CustomItem(SlimefunItems.GOLD_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1), new ItemStack(Material.NETHERRACK, 16), SlimefunItems.SULFATE, SlimefunItems.SIFTED_ORE, SlimefunItems.CRUSHED_ORE, SlimefunItems.CRUSHED_ORE, SlimefunItems.PULVERIZED_ORE, SlimefunItems.PURE_ORE_CLUSTER, SlimefunItems.TINY_URANIUM, new ItemStack(Material.COBBLESTONE, 8), new ItemStack(Material.SAND, 1), new ItemStack(Material.GOLD_INGOT), SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_4K, SlimefunItems.GOLD_DUST}, + Material.NETHER_FENCE) .register(true, new MultiBlockInteractionHandler() { @Override @@ -452,26 +458,28 @@ public class SlimefunSetup { SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ORE_CRUSHER"); if (mb.isMultiBlock(machine)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { - ItemStack adding = RecipeType.getRecipeOutput(machine, convert); - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(convert.getAmount()); - inv.removeItem(removing); - inv.addItem(adding); - p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, 1);; + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { + ItemStack adding = RecipeType.getRecipeOutput(machine, convert); + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(convert.getAmount()); + inv.removeItem(removing); + inv.addItem(adding); + p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, 1);; + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; } } + Messages.local.sendTranslation(p, "machines.unknown-material", true); } - Messages.local.sendTranslation(p, "machines.unknown-material", true); } return true; } @@ -480,9 +488,9 @@ public class SlimefunSetup { }); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.COMPRESSOR, "COMPRESSOR", - new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.PISTON_BASE), new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), new ItemStack(Material.PISTON_BASE)}, - new ItemStack[] {new ItemStack(Material.COAL, 8), SlimefunItems.CARBON, new CustomItem(SlimefunItems.STEEL_INGOT, 8), SlimefunItems.STEEL_PLATE, new CustomItem(SlimefunItems.CARBON, 4), SlimefunItems.COMPRESSED_CARBON, new CustomItem(SlimefunItems.STONE_CHUNK, 4), new ItemStack(Material.COBBLESTONE), new CustomItem(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), SlimefunItems.REINFORCED_PLATE}, - Material.NETHER_FENCE) + new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.PISTON_BASE), new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), new ItemStack(Material.PISTON_BASE)}, + new ItemStack[] {new ItemStack(Material.COAL, 8), SlimefunItems.CARBON, new CustomItem(SlimefunItems.STEEL_INGOT, 8), SlimefunItems.STEEL_PLATE, new CustomItem(SlimefunItems.CARBON, 4), SlimefunItems.COMPRESSED_CARBON, new CustomItem(SlimefunItems.STONE_CHUNK, 4), new ItemStack(Material.COBBLESTONE), new CustomItem(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), SlimefunItems.REINFORCED_PLATE}, + Material.NETHER_FENCE) .register(true, new MultiBlockInteractionHandler() { @Override @@ -491,47 +499,49 @@ public class SlimefunSetup { SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("COMPRESSOR"); if (mb.isMultiBlock(machine)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - final Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { - final ItemStack adding = RecipeType.getRecipeOutput(machine, convert); - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(convert.getAmount()); - inv.removeItem(removing); - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_EXTEND, 1, 1); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + final Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { + final ItemStack adding = RecipeType.getRecipeOutput(machine, convert); + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(convert.getAmount()); + inv.removeItem(removing); + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_EXTEND, 1, 1); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_CONTRACT, 1F, 2F); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_CONTRACT, 1F, 2F); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_EXTEND, 1F, 2F); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_EXTEND, 1F, 2F); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; } } + Messages.local.sendTranslation(p, "machines.unknown-material", true); } - Messages.local.sendTranslation(p, "machines.unknown-material", true); } return true; } @@ -540,31 +550,31 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGIC_LUMP_1, "MAGIC_LUMP_1", RecipeType.GRIND_STONE, - new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_STALK), null, null, null, null}, new CustomItem(SlimefunItems.MAGIC_LUMP_1, 2)) + new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_STALK), null, null, null, null}, new CustomItem(SlimefunItems.MAGIC_LUMP_1, 2)) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGIC_LUMP_2, "MAGIC_LUMP_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_1, null, SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_1, null, null, null, null}) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_1, null, SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_1, null, null, null, null}) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGIC_LUMP_3, "MAGIC_LUMP_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_2, null, null, null, null}) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_2, null, null, null, null}) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ENDER_LUMP_1, "ENDER_LUMP_1", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, null, new ItemStack(Material.EYE_OF_ENDER), null, null, null, null}, new CustomItem(SlimefunItems.ENDER_LUMP_1, 2)) + new ItemStack[] {null, null, null, null, new ItemStack(Material.EYE_OF_ENDER), null, null, null, null}, new CustomItem(SlimefunItems.ENDER_LUMP_1, 2)) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ENDER_LUMP_2, "ENDER_LUMP_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_1, null, null, null, null}) + new ItemStack[] {SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_1, null, null, null, null}) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ENDER_LUMP_3, "ENDER_LUMP_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_2, null, null, null, null}) + new ItemStack[] {SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_2, null, null, null, null}) .register(true); new SlimefunItem(Categories.PORTABLE, SlimefunItems.ENDER_BACKPACK, "ENDER_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), new ItemStack(Material.CHEST), new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2}) + new ItemStack[] {SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), new ItemStack(Material.CHEST), new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2}) .register(true, new ItemInteractionHandler() { @Override @@ -580,23 +590,23 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_HELMET, "ENDER_HELMET", RecipeType.ARMOR_FORGE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN), null, null, null}) + new ItemStack[] {SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN), null, null, null}) .register(true); new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_CHESTPLATE, "ENDER_CHESTPLATE", RecipeType.ARMOR_FORGE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), new ItemStack(Material.EYE_OF_ENDER), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN)}) + new ItemStack[] {SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), new ItemStack(Material.EYE_OF_ENDER), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN)}) .register(true); new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_LEGGINGS, "ENDER_LEGGINGS", RecipeType.ARMOR_FORGE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN)}) + new ItemStack[] {SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN)}) .register(true); new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_BOOTS, "ENDER_BOOTS", RecipeType.ARMOR_FORGE, - new ItemStack[] {null, null, null, SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN)}) + new ItemStack[] {null, null, null, SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN)}) .register(true); new SlimefunItem(Categories.MAGIC, SlimefunItems.MAGIC_EYE_OF_ENDER, "MAGIC_EYE_OF_ENDER", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), new ItemStack(Material.EYE_OF_ENDER), new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2}) + new ItemStack[] {SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), new ItemStack(Material.EYE_OF_ENDER), new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2}) .register(true, new ItemInteractionHandler() { @Override @@ -619,7 +629,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.FOOD, SlimefunItems.MAGIC_SUGAR, "MAGIC_SUGAR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.REDSTONE), new ItemStack(Material.GLOWSTONE_DUST), null, null, null, null, null, null}, new String[] {"effects.SPEED"}, new Integer[] {4}) + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.REDSTONE), new ItemStack(Material.GLOWSTONE_DUST), null, null, null, null, null, null}, new String[] {"effects.SPEED"}, new Integer[] {4}) .register(true, new ItemInteractionHandler() { @Override @@ -635,60 +645,61 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.FOOD, SlimefunItems.MONSTER_JERKY, "MONSTER_JERKY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.ROTTEN_FLESH), null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.ROTTEN_FLESH), null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_HELMET, "SLIME_HELMET", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), null, null, null}) + new ItemStack[] {new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), null, null, null}) .register(true); new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_CHESTPLATE, "SLIME_CHESTPLATE", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT)}) + new ItemStack[] {new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT)}) .register(true); new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_LEGGINGS, "SLIME_LEGGINGS", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.SPEED, 300, 2)}) + new ItemStack[] {new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.SPEED, 300, 2)}) .register(true); new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_BOOTS, "SLIME_BOOTS", RecipeType.ARMOR_FORGE, - new ItemStack[] {null, null, null, new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.JUMP, 300, 5)}) + new ItemStack[] {null, null, null, new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.JUMP, 300, 5)}) .register(true); new SlimefunItem(Categories.WEAPONS, SlimefunItems.SWORD_OF_BEHEADING, "SWORD_OF_BEHEADING", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.EMERALD), SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.BLAZE_ROD), null}, new String[] {"chance.PLAYER", "chance.SKELETON", "chance.WITHER_SKELETON", "chance.ZOMBIE", "chance.CREEPER"}, new Integer[] {70, 40, 25, 40, 40}) + new ItemStack[] {null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.EMERALD), SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.BLAZE_ROD), null}, new String[] {"chance.PLAYER", "chance.SKELETON", "chance.WITHER_SKELETON", "chance.ZOMBIE", "chance.CREEPER"}, new Integer[] {70, 40, 25, 40, 40}) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGICAL_BOOK_COVER, "MAGICAL_BOOK_COVER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.BOOK), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, null}) + new ItemStack[] {null, SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.BOOK), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, null}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.BASIC_CIRCUIT_BOARD, "BASIC_CIRCUIT_BOARD", RecipeType.MOB_DROP, - new ItemStack[] {null, null, null, null, new CustomItem(Material.MONSTER_EGG, "&a&oIron Golem", 99), null, null, null, null}) + new ItemStack[] {null, null, null, null, new CustomItem(Material.MONSTER_EGG, "&a&oIron Golem", 99), null, null, null, null}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.ADVANCED_CIRCUIT_BOARD, "ADVANCED_CIRCUIT_BOARD", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.REDSTONE_BLOCK), SlimefunItems.BASIC_CIRCUIT_BOARD, new ItemStack(Material.REDSTONE_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK)}) + new ItemStack[] {new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.REDSTONE_BLOCK), SlimefunItems.BASIC_CIRCUIT_BOARD, new ItemStack(Material.REDSTONE_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK)}) .register(true); new SlimefunGadget(Categories.TOOLS, SlimefunItems.GOLD_PAN, "GOLD_PAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.STONE), new ItemStack(Material.BOWL), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE)}, - new ItemStack[] {new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.GRAVEL), new ItemStack(Material.CLAY_BALL), new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE}, - new String[] {"chance.FLINT", "chance.CLAY", "chance.SIFTED_ORE"}, new Integer[] {47, 28, 15}) + new ItemStack[] {null, null, null, new ItemStack(Material.STONE), new ItemStack(Material.BOWL), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE)}, + new ItemStack[] {new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.GRAVEL), new ItemStack(Material.CLAY_BALL), new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE}, + new String[] {"chance.FLINT", "chance.CLAY", "chance.SIFTED_ORE"}, new Integer[] {47, 28, 15}) .register(true, 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) { - List drops = new ArrayList(); - if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE"))) drops.add(SlimefunItems.SIFTED_ORE); - else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY"))) drops.add(new ItemStack(Material.CLAY_BALL)); - else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.FLINT"))) drops.add(new ItemStack(Material.FLINT)); + if(CSCoreLib.getLib().getProtectionManager().canBuild(p.getUniqueId(), e.getClickedBlock(), true)) { + List drops = new ArrayList(); + if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE"))) drops.add(SlimefunItems.SIFTED_ORE); + else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY"))) drops.add(new ItemStack(Material.CLAY_BALL)); + else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.FLINT"))) drops.add(new ItemStack(Material.FLINT)); + - if (CSCoreLib.getLib().getProtectionManager().canBuild(p.getUniqueId(), e.getClickedBlock(), true)) { e.getClickedBlock().getWorld().playEffect(e.getClickedBlock().getLocation(), Effect.STEP_SOUND, e.getClickedBlock().getType()); e.getClickedBlock().setType(Material.AIR); for (ItemStack drop: drops) { @@ -704,103 +715,105 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MISC, SlimefunItems.SIFTED_ORE, "SIFTED_ORE", RecipeType.GOLD_PAN, - new ItemStack[] {new ItemStack(Material.GRAVEL), null, null, null, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.GRAVEL), null, null, null, null, null, null, null, null}) .register(true); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.SMELTERY, "SMELTERY", - new ItemStack[] {null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.NETHER_BRICK), new CustomItem(Material.DISPENSER, "Dispencer (Faced up)", 0), new ItemStack(Material.NETHER_BRICK), null, new ItemStack(Material.FLINT_AND_STEEL), null}, - new ItemStack[] {SlimefunItems.IRON_DUST, new ItemStack(Material.IRON_INGOT)}, Material.NETHER_FENCE, - new String[] {"chance.fireBreak"}, new Integer[] {34}) + new ItemStack[] {null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.NETHER_BRICK), new CustomItem(Material.DISPENSER, "Dispencer (Faced up)", 0), new ItemStack(Material.NETHER_BRICK), null, new ItemStack(Material.FLINT_AND_STEEL), null}, + new ItemStack[] {SlimefunItems.IRON_DUST, new ItemStack(Material.IRON_INGOT)}, Material.NETHER_FENCE, + new String[] {"chance.fireBreak"}, new Integer[] {34}) .register(true, new MultiBlockInteractionHandler() { - @Override - public boolean onInteract(Player p, MultiBlock mb, Block b) { + @Override + public boolean onInteract(Player p, MultiBlock mb, Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("SMELTERY"); + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("SMELTERY"); - if (mb.isMultiBlock(machine)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - Inventory inv = disp.getInventory(); - List inputs = RecipeType.getRecipeInputList(machine); + if (mb.isMultiBlock(machine)) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + Inventory inv = disp.getInventory(); + List inputs = RecipeType.getRecipeInputList(machine); - for (int i = 0; i < inputs.size(); i++) { - boolean craft = true; - for (ItemStack converting: inputs.get(i)) { - if (converting != null) { - for (int j = 0; j < inv.getContents().length; j++) { - if (j == (inv.getContents().length - 1) && !SlimefunManager.isItemSimiliar(converting, inv.getContents()[j], true, SlimefunManager.DataType.ALWAYS)) { - craft = false; - break; - } - else if (SlimefunManager.isItemSimiliar(inv.getContents()[j], converting, true, SlimefunManager.DataType.ALWAYS)) break; + for (int i = 0; i < inputs.size(); i++) { + boolean craft = true; + for (ItemStack converting: inputs.get(i)) { + if (converting != null) { + for (int j = 0; j < inv.getContents().length; j++) { + if (j == (inv.getContents().length - 1) && !SlimefunManager.isItemSimiliar(converting, inv.getContents()[j], true, SlimefunManager.DataType.ALWAYS)) { + craft = false; + break; } + else if (SlimefunManager.isItemSimiliar(inv.getContents()[j], converting, true, SlimefunManager.DataType.ALWAYS)) break; } } - - if (craft) { - ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); - if (Slimefun.hasUnlocked(p, adding, true)) { - if (InvUtils.fits(inv, adding)) { - for (ItemStack removing: inputs.get(i)) { - if (removing != null) inv.removeItem(removing); - } - inv.addItem(adding); - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_LAVA_POP, 1, 1); - p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - Block raw_disp = b.getRelative(BlockFace.DOWN); - Hopper chamber = null; - if(BlockStorage.check(raw_disp.getRelative(BlockFace.EAST).getState().getBlock(), "IGNITION_CHAMBER")) { - chamber = (Hopper) raw_disp.getRelative(BlockFace.EAST).getState(); - } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.WEST).getState().getBlock(), "IGNITION_CHAMBER")) { - chamber = (Hopper) raw_disp.getRelative(BlockFace.WEST).getState(); - } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.NORTH).getState().getBlock(), "IGNITION_CHAMBER")) { - chamber = (Hopper) raw_disp.getRelative(BlockFace.NORTH).getState(); - } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.SOUTH).getState().getBlock(), "IGNITION_CHAMBER")){ - chamber = (Hopper) raw_disp.getRelative(BlockFace.SOUTH).getState(); - } - - if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("SMELTERY", "chance.fireBreak"))) { - if(chamber != null) { - if(chamber.getInventory().contains(Material.FLINT_AND_STEEL)) { - ItemStack item = chamber.getInventory().getItem(chamber.getInventory().first(Material.FLINT_AND_STEEL)); - item.setDurability((short) (item.getDurability() + 1)); - if(item.getDurability() >= item.getType().getMaxDurability()) { - item.setAmount(0); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); - } - p.getWorld().playSound(p.getLocation(), Sound.ITEM_FLINTANDSTEEL_USE, 1, 1); - } else { - Messages.local.sendTranslation(p, "machines.ignition-chamber-no-flint", true); - BlockBreaker.nullify(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN)); - } - } else { - BlockBreaker.nullify(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN)); - } - } - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - } - return true; - } } - Messages.local.sendTranslation(p, "machines.pattern-not-found", true); + + if (craft) { + ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); + if (Slimefun.hasUnlocked(p, adding, true)) { + if (InvUtils.fits(inv, adding)) { + for (ItemStack removing: inputs.get(i)) { + if (removing != null) inv.removeItem(removing); + } + inv.addItem(adding); + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_LAVA_POP, 1, 1); + p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + Block raw_disp = b.getRelative(BlockFace.DOWN); + Hopper chamber = null; + if(BlockStorage.check(raw_disp.getRelative(BlockFace.EAST).getState().getBlock(), "IGNITION_CHAMBER")) { + chamber = (Hopper) raw_disp.getRelative(BlockFace.EAST).getState(); + } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.WEST).getState().getBlock(), "IGNITION_CHAMBER")) { + chamber = (Hopper) raw_disp.getRelative(BlockFace.WEST).getState(); + } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.NORTH).getState().getBlock(), "IGNITION_CHAMBER")) { + chamber = (Hopper) raw_disp.getRelative(BlockFace.NORTH).getState(); + } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.SOUTH).getState().getBlock(), "IGNITION_CHAMBER")){ + chamber = (Hopper) raw_disp.getRelative(BlockFace.SOUTH).getState(); + } + + if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("SMELTERY", "chance.fireBreak"))) { + if(chamber != null) { + if(chamber.getInventory().contains(Material.FLINT_AND_STEEL)) { + ItemStack item = chamber.getInventory().getItem(chamber.getInventory().first(Material.FLINT_AND_STEEL)); + item.setDurability((short) (item.getDurability() + 1)); + if(item.getDurability() >= item.getType().getMaxDurability()) { + item.setAmount(0); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); + } + p.getWorld().playSound(p.getLocation(), Sound.ITEM_FLINTANDSTEEL_USE, 1, 1); + } else { + Messages.local.sendTranslation(p, "machines.ignition-chamber-no-flint", true); + BlockBreaker.nullify(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN)); + } + } else { + BlockBreaker.nullify(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN)); + } + } + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + } + return true; + } } - return true; + Messages.local.sendTranslation(p, "machines.pattern-not-found", true); } - else return false; } - }); - - + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.MACHINES_1, SlimefunItems.IGNITION_CHAMBER, "IGNITION_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.STEEL_PLATE, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.STEEL_PLATE, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_PLATE, SlimefunItems.ELECTRIC_MOTOR, null, new ItemStack(Material.HOPPER), null}) + new ItemStack[] {SlimefunItems.STEEL_PLATE, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.STEEL_PLATE, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_PLATE, SlimefunItems.ELECTRIC_MOTOR, null, new ItemStack(Material.HOPPER), null}) .register(true); - + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.PRESSURE_CHAMBER, "PRESSURE_CHAMBER", - new ItemStack[] {new ItemStack(Material.STEP), new CustomItem(Material.DISPENSER, "Dispenser (Facing down)", 0), new ItemStack(Material.STEP), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.GLASS), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.CAULDRON_ITEM), new ItemStack(Material.PISTON_BASE)}, - new ItemStack[] {SlimefunItems.CARBON_CHUNK, SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.RAW_CARBONADO, SlimefunItems.CARBONADO}, - Material.CAULDRON) + new ItemStack[] {new ItemStack(Material.STEP), new CustomItem(Material.DISPENSER, "Dispenser (Facing down)", 0), new ItemStack(Material.STEP), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.GLASS), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.CAULDRON_ITEM), new ItemStack(Material.PISTON_BASE)}, + new ItemStack[] {SlimefunItems.CARBON_CHUNK, SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.RAW_CARBONADO, SlimefunItems.CARBONADO}, + Material.CAULDRON) .register(true, new MultiBlockInteractionHandler() { @Override @@ -809,59 +822,61 @@ public class SlimefunSetup { SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("PRESSURE_CHAMBER"); if (mb.isMultiBlock(machine)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.UP).getRelative(BlockFace.UP).getState(); - final Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { - final ItemStack adding = RecipeType.getRecipeOutput(machine, convert); - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(convert.getAmount()); - inv.removeItem(removing); - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.UP).getRelative(BlockFace.UP).getState(); + final Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { + final ItemStack adding = RecipeType.getRecipeOutput(machine, convert); + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(convert.getAmount()); + inv.removeItem(removing); + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); + @Override + public void run() { + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; } } + Messages.local.sendTranslation(p, "machines.unknown-material", true); } - Messages.local.sendTranslation(p, "machines.unknown-material", true); } return true; } @@ -870,11 +885,11 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.BATTERY, "BATTERY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] { null, new ItemStack(Material.REDSTONE), null, SlimefunItems.ZINC_INGOT, SlimefunItems.SULFATE, SlimefunItems.COPPER_INGOT, SlimefunItems.ZINC_INGOT, SlimefunItems.SULFATE, SlimefunItems.COPPER_INGOT }) + new ItemStack[] { null, new ItemStack(Material.REDSTONE), null, SlimefunItems.ZINC_INGOT, SlimefunItems.SULFATE, SlimefunItems.COPPER_INGOT, SlimefunItems.ZINC_INGOT, SlimefunItems.SULFATE, SlimefunItems.COPPER_INGOT }) .register(true); SlimefunManager.registerArmorSet(new ItemStack(Material.GLOWSTONE), new ItemStack[] {SlimefunItems.GLOWSTONE_HELMET, SlimefunItems.GLOWSTONE_CHESTPLATE, SlimefunItems.GLOWSTONE_LEGGINGS, SlimefunItems.GLOWSTONE_BOOTS}, "GLOWSTONE", - new PotionEffect[][] {new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}}, true, true); + new PotionEffect[][] {new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}}, true, true); SlimefunManager.registerArmorSet(SlimefunItems.DAMASCUS_STEEL_INGOT, new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_HELMET, SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, SlimefunItems.DAMASCUS_STEEL_LEGGINGS, SlimefunItems.DAMASCUS_STEEL_BOOTS}, "DAMASCUS_STEEL", true, false); @@ -883,247 +898,247 @@ public class SlimefunSetup { SlimefunManager.registerArmorSet(new ItemStack(Material.CACTUS), new ItemStack[] {SlimefunItems.CACTUS_HELMET, SlimefunItems.CACTUS_CHESTPLATE, SlimefunItems.CACTUS_LEGGINGS, SlimefunItems.CACTUS_BOOTS}, "CACTUS", true, false); new Alloy(SlimefunItems.REINFORCED_ALLOY_INGOT, "REINFORCED_ALLOY_INGOT", - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.GOLD_24K, null, null, null}) + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.GOLD_24K, null, null, null}) .register(true); new Alloy(SlimefunItems.HARDENED_METAL_INGOT, "HARDENED_METAL_INGOT", - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.ALUMINUM_BRONZE_INGOT, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.ALUMINUM_BRONZE_INGOT, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.DAMASCUS_STEEL_INGOT, "DAMASCUS_STEEL_INGOT", - new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.IRON_DUST, SlimefunItems.CARBON, new ItemStack(Material.IRON_INGOT), null, null, null, null, null}) + new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.IRON_DUST, SlimefunItems.CARBON, new ItemStack(Material.IRON_INGOT), null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.STEEL_INGOT, "STEEL_INGOT", - new ItemStack[] {SlimefunItems.IRON_DUST, SlimefunItems.CARBON, new ItemStack(Material.IRON_INGOT), null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.IRON_DUST, SlimefunItems.CARBON, new ItemStack(Material.IRON_INGOT), null, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.BRONZE_INGOT, "BRONZE_INGOT", - new ItemStack[] {SlimefunItems.COPPER_DUST, SlimefunItems.TIN_DUST, SlimefunItems.COPPER_INGOT, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.COPPER_DUST, SlimefunItems.TIN_DUST, SlimefunItems.COPPER_INGOT, null, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.DURALUMIN_INGOT, "DURALUMIN_INGOT", - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.BILLON_INGOT, "BILLON_INGOT", - new ItemStack[] {SlimefunItems.SILVER_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.SILVER_INGOT, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SILVER_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.SILVER_INGOT, null, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.BRASS_INGOT, "BRASS_INGOT", - new ItemStack[] {SlimefunItems.COPPER_DUST, SlimefunItems.ZINC_DUST, SlimefunItems.COPPER_INGOT, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.COPPER_DUST, SlimefunItems.ZINC_DUST, SlimefunItems.COPPER_INGOT, null, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.ALUMINUM_BRASS_INGOT, "ALUMINUM_BRASS_INGOT", - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.BRASS_INGOT, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.BRASS_INGOT, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.ALUMINUM_BRONZE_INGOT, "ALUMINUM_BRONZE_INGOT", - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.BRONZE_INGOT, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.BRONZE_INGOT, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.CORINTHIAN_BRONZE_INGOT, "CORINTHIAN_BRONZE_INGOT", - new ItemStack[] {SlimefunItems.SILVER_DUST, SlimefunItems.GOLD_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.BRONZE_INGOT, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SILVER_DUST, SlimefunItems.GOLD_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.BRONZE_INGOT, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.SOLDER_INGOT, "SOLDER_INGOT", - new ItemStack[] {SlimefunItems.LEAD_DUST, SlimefunItems.TIN_DUST, SlimefunItems.LEAD_INGOT, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.LEAD_DUST, SlimefunItems.TIN_DUST, SlimefunItems.LEAD_INGOT, null, null, null, null, null, null}) .register(true); new ReplacingAlloy(SlimefunItems.SYNTHETIC_SAPPHIRE, "SYNTHETIC_SAPPHIRE", - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, new ItemStack(Material.GLASS), new ItemStack(Material.THIN_GLASS), SlimefunItems.ALUMINUM_INGOT, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), null, null, null, null}) + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, new ItemStack(Material.GLASS), new ItemStack(Material.THIN_GLASS), SlimefunItems.ALUMINUM_INGOT, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), null, null, null, null}) .register(true); new ReplacingItem(Categories.RESOURCES, SlimefunItems.SYNTHETIC_DIAMOND, "SYNTHETIC_DIAMOND", RecipeType.PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.CARBON_CHUNK, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.CARBON_CHUNK, null, null, null, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.RAW_CARBONADO, "RAW_CARBONADO", - new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.CARBON_CHUNK, new ItemStack(Material.THIN_GLASS), null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.CARBON_CHUNK, new ItemStack(Material.THIN_GLASS), null, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.NICKEL_INGOT, "NICKEL_INGOT", - new ItemStack[] {SlimefunItems.IRON_DUST, new ItemStack(Material.IRON_INGOT), SlimefunItems.COPPER_DUST, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.IRON_DUST, new ItemStack(Material.IRON_INGOT), SlimefunItems.COPPER_DUST, null, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.COBALT_INGOT, "COBALT_INGOT", - new ItemStack[] {SlimefunItems.IRON_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.NICKEL_INGOT, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.IRON_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.NICKEL_INGOT, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.CARBONADO, "CARBONADO", RecipeType.PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.RAW_CARBONADO, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.RAW_CARBONADO, null, null, null, null, null, null, null, null}) .register(true); new Alloy(SlimefunItems.FERROSILICON, "FERROSILICON", - new ItemStack[] {new ItemStack(Material.IRON_INGOT), SlimefunItems.IRON_DUST, SlimefunItems.SILICON, null, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.IRON_INGOT), SlimefunItems.IRON_DUST, SlimefunItems.SILICON, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.IRON_DUST, "IRON_DUST", RecipeType.ORE_CRUSHER, - new ItemStack[] {new ItemStack(Material.IRON_ORE), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.IRON_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1)) + new ItemStack[] {new ItemStack(Material.IRON_ORE), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.IRON_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1)) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_DUST, "GOLD_DUST", RecipeType.ORE_CRUSHER, - new ItemStack[] {new ItemStack(Material.GOLD_ORE), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.GOLD_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1)) + new ItemStack[] {new ItemStack(Material.GOLD_ORE), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.GOLD_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1)) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.COPPER_DUST, "COPPER_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.TIN_DUST, "TIN_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.LEAD_DUST, "LEAD_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(true); - + new SlimefunItem(Categories.RESOURCES, SlimefunItems.SILVER_DUST, "SILVER_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.ALUMINUM_DUST, "ALUMINUM_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.ZINC_DUST, "ZINC_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.MAGNESIUM_DUST, "MAGNESIUM_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.COPPER_INGOT, "COPPER_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.COPPER_DUST, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.COPPER_DUST, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.TIN_INGOT, "TIN_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.TIN_DUST, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.TIN_DUST, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.SILVER_INGOT, "SILVER_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.SILVER_DUST, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SILVER_DUST, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.LEAD_INGOT, "LEAD_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.LEAD_DUST, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.LEAD_DUST, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.ALUMINUM_INGOT, "ALUMINUM_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.ZINC_INGOT, "ZINC_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.ZINC_DUST, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ZINC_DUST, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.MAGNESIUM_INGOT, "MAGNESIUM_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.MAGNESIUM_DUST, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.MAGNESIUM_DUST, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.SULFATE, "SULFATE", RecipeType.ORE_CRUSHER, - new ItemStack[] {new ItemStack(Material.NETHERRACK, 16), null, null, null, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.NETHERRACK, 16), null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.CARBON, "CARBON", RecipeType.COMPRESSOR, - new ItemStack[] {new ItemStack(Material.COAL, 8), null, null, null, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.COAL, 8), null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.WHEAT_FLOUR, "WHEAT_FLOUR", RecipeType.GRIND_STONE, - new ItemStack[] {null, null, null, null, new ItemStack(Material.WHEAT), null, null, null, null}) + new ItemStack[] {null, null, null, null, new ItemStack(Material.WHEAT), null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.STEEL_PLATE, "STEEL_PLATE", RecipeType.COMPRESSOR, - new ItemStack[] {new CustomItem(SlimefunItems.STEEL_INGOT, 8), null, null, null, null, null, null, null, null}) + new ItemStack[] {new CustomItem(SlimefunItems.STEEL_INGOT, 8), null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.COMPRESSED_CARBON, "COMPRESSED_CARBON", RecipeType.COMPRESSOR, - new ItemStack[] {new CustomItem(SlimefunItems.CARBON, 4), null, null, null, null, null, null, null, null}) + new ItemStack[] {new CustomItem(SlimefunItems.CARBON, 4), null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.CARBON_CHUNK, "CARBON_CHUNK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, new ItemStack(Material.FLINT), SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON}) + new ItemStack[] {SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, new ItemStack(Material.FLINT), SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.STEEL_THRUSTER, "STEEL_THRUSTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.REDSTONE), null, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.STEEL_PLATE, new ItemStack(Material.FIREBALL), SlimefunItems.STEEL_PLATE}) + new ItemStack[] {null, new ItemStack(Material.REDSTONE), null, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.STEEL_PLATE, new ItemStack(Material.FIREBALL), SlimefunItems.STEEL_PLATE}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.POWER_CRYSTAL, "POWER_CRYSTAL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE)}) + new ItemStack[] {new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE)}) .register(true); new Jetpack(SlimefunItems.DURALUMIN_JETPACK, "DURALUMIN_JETPACK", - new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.35) + new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.35) .register(true); new Jetpack(SlimefunItems.SOLDER_JETPACK, "SOLDER_JETPACK", - new ItemStack[] {SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.SOLDER_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.4) + new ItemStack[] {SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.SOLDER_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.4) .register(true); new Jetpack(SlimefunItems.BILLON_JETPACK, "BILLON_JETPACK", - new ItemStack[] {SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.45) + new ItemStack[] {SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.45) .register(true); new Jetpack(SlimefunItems.STEEL_JETPACK, "STEEL_JETPACK", - new ItemStack[] {SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.5) + new ItemStack[] {SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.5) .register(true); new Jetpack(SlimefunItems.DAMASCUS_STEEL_JETPACK, "DAMASCUS_STEEL_JETPACK", - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.55) + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.55) .register(true); new Jetpack(SlimefunItems.REINFORCED_ALLOY_JETPACK, "REINFORCED_ALLOY_JETPACK", - new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.6) + new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.6) .register(true); new Jetpack(SlimefunItems.CARBONADO_JETPACK, "CARBONADO_JETPACK", - new ItemStack[] {SlimefunItems.CARBON_CHUNK, null, SlimefunItems.CARBON_CHUNK, SlimefunItems.CARBONADO, SlimefunItems.POWER_CRYSTAL, SlimefunItems.CARBONADO, SlimefunItems.STEEL_THRUSTER, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.7) + new ItemStack[] {SlimefunItems.CARBON_CHUNK, null, SlimefunItems.CARBON_CHUNK, SlimefunItems.CARBONADO, SlimefunItems.POWER_CRYSTAL, SlimefunItems.CARBONADO, SlimefunItems.STEEL_THRUSTER, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.7) .register(true); new SlimefunItem(Categories.TECH, SlimefunItems.PARACHUTE, "PARACHUTE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CHAIN, null, SlimefunItems.CHAIN, null, null, null}) + new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CHAIN, null, SlimefunItems.CHAIN, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.CHAIN, "CHAIN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, null}, new CustomItem(SlimefunItems.CHAIN, 8)) + new ItemStack[] {null, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, null}, new CustomItem(SlimefunItems.CHAIN, 8)) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.HOOK, "HOOK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, null, null}) + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, null, null}) .register(true); new SlimefunItem(Categories.TOOLS, SlimefunItems.GRAPPLING_HOOK, "GRAPPLING_HOOK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.HOOK, SlimefunItems.HOOK, null, SlimefunItems.CHAIN, SlimefunItems.HOOK, SlimefunItems.CHAIN, null, null}) + new ItemStack[] {null, SlimefunItems.HOOK, SlimefunItems.HOOK, null, SlimefunItems.CHAIN, SlimefunItems.HOOK, SlimefunItems.CHAIN, null, null}) .register(true, new ItemInteractionHandler() { @Override public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { if (SlimefunManager.isItemSimiliar(item, SlimefunItems.GRAPPLING_HOOK, true)) { if (e.getClickedBlock() == null && !Variables.jump.containsKey(p.getUniqueId())) { - Variables.jump.put(p.getUniqueId(), p.getItemInHand().getType() != Material.SHEARS); + Variables.jump.put(p.getUniqueId(), p.getInventory().getItemInMainHand().getType() != Material.SHEARS); e.setCancelled(true); - if (p.getItemInHand().getType() == Material.LEASH) PlayerInventory.consumeItemInHand(p); + if (p.getInventory().getItemInMainHand().getType() == Material.LEASH) PlayerInventory.consumeItemInHand(p); Vector direction = p.getEyeLocation().getDirection().multiply(2.0); - Projectile projectile = p.getWorld().spawn(p.getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), Arrow.class); - projectile.setShooter(p); - projectile.setVelocity(direction); - Arrow arrow = (Arrow) projectile; - Bat b = (Bat) p.getWorld().spawnEntity(p.getLocation(), EntityType.BAT); - b.setCanPickupItems(false); - b.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 100000, 100000)); - b.setLeashHolder(arrow); + Projectile projectile = p.getWorld().spawn(p.getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), Arrow.class); + projectile.setShooter(p); + projectile.setVelocity(direction); + Arrow arrow = (Arrow) projectile; + Bat b = (Bat) p.getWorld().spawnEntity(p.getLocation(), EntityType.BAT); + b.setCanPickupItems(false); + b.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 100000, 100000)); + b.setLeashHolder(arrow); - Variables.damage.put(p.getUniqueId(), true); + Variables.damage.put(p.getUniqueId(), true); Variables.remove.put(p.getUniqueId(), new Entity[] {b, arrow}); } return true; @@ -1133,8 +1148,8 @@ public class SlimefunSetup { }); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.MAGIC_WORKBENCH, "MAGIC_WORKBENCH", - new ItemStack[] {null, null, null, null, null, null, new ItemStack(Material.BOOKSHELF), new ItemStack(Material.WORKBENCH), new ItemStack(Material.DISPENSER)}, - new ItemStack[0], Material.WORKBENCH) + new ItemStack[] {null, null, null, null, null, null, new ItemStack(Material.BOOKSHELF), new ItemStack(Material.WORKBENCH), new ItemStack(Material.DISPENSER)}, + new ItemStack[0], Material.WORKBENCH) .register(true, new MultiBlockInteractionHandler() { @Override @@ -1143,80 +1158,82 @@ public class SlimefunSetup { SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("MAGIC_WORKBENCH"); if (mb.isMultiBlock(machine)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = null; + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = null; - if (b.getRelative(1, 0, 0).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(1, 0, 0).getState(); - else if (b.getRelative(0, 0, 1).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(0, 0, 1).getState(); - else if (b.getRelative(-1, 0, 0).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(-1, 0, 0).getState(); - else if (b.getRelative(0, 0, -1).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(0, 0, -1).getState(); + if (b.getRelative(1, 0, 0).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(1, 0, 0).getState(); + else if (b.getRelative(0, 0, 1).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(0, 0, 1).getState(); + else if (b.getRelative(-1, 0, 0).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(-1, 0, 0).getState(); + else if (b.getRelative(0, 0, -1).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(0, 0, -1).getState(); - final Inventory inv = disp.getInventory(); - List inputs = RecipeType.getRecipeInputList(machine); + final Inventory inv = disp.getInventory(); + List inputs = RecipeType.getRecipeInputList(machine); - for (int i = 0; i < inputs.size(); i++) { - boolean craft = true; - for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { - craft = false; - break; - } - } - - if (craft) { - final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); - if (Slimefun.hasUnlocked(p, adding, true)) { - Inventory inv2 = Bukkit.createInventory(null, 9, "test"); - for (int j = 0; j < inv.getContents().length; j++) { - inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); + for (int i = 0; i < inputs.size(); i++) { + boolean craft = true; + for (int j = 0; j < inv.getContents().length; j++) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { + craft = false; + break; } - if (InvUtils.fits(inv2, adding)) { - for (int j = 0; j < 9; j++) { - if (inv.getContents()[j] != null) { - if (inv.getContents()[j].getType() != Material.AIR) { - if (inv.getContents()[j].getAmount() > 1) inv.setItem(j, new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1)); - else inv.setItem(j, null); + } + + if (craft) { + final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); + if (Slimefun.hasUnlocked(p, adding, true)) { + Inventory inv2 = Bukkit.createInventory(null, 9, "test"); + for (int j = 0; j < inv.getContents().length; j++) { + inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); + } + if (InvUtils.fits(inv2, adding)) { + for (int j = 0; j < 9; j++) { + if (inv.getContents()[j] != null) { + if (inv.getContents()[j].getType() != Material.AIR) { + if (inv.getContents()[j].getAmount() > 1) inv.setItem(j, new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1)); + else inv.setItem(j, null); + } } } + p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); } - p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); - p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); - p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); - p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); + else Messages.local.sendTranslation(p, "machines.full-inventory", true); } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; } - return true; } + Messages.local.sendTranslation(p, "machines.pattern-not-found", true); } - Messages.local.sendTranslation(p, "machines.pattern-not-found", true); } return true; } @@ -1225,18 +1242,18 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_ELEMENTAL, "STAFF_ELEMENTAL", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.MAGIC_LUMP_3, null, new ItemStack(Material.STICK), SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.MAGIC_LUMP_3, null, null}) + new ItemStack[] {null, SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.MAGIC_LUMP_3, null, new ItemStack(Material.STICK), SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.MAGIC_LUMP_3, null, null}) .register(true); new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_WIND, "STAFF_ELEMENTAL_WIND", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new ItemStack(Material.FEATHER), SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.STAFF_ELEMENTAL, new ItemStack(Material.FEATHER), SlimefunItems.STAFF_ELEMENTAL, null, null}) + new ItemStack[] {null, new ItemStack(Material.FEATHER), SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.STAFF_ELEMENTAL, new ItemStack(Material.FEATHER), SlimefunItems.STAFF_ELEMENTAL, null, null}) .register(true, new ItemInteractionHandler() { @Override public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { if (SlimefunManager.isItemSimiliar(item, SlimefunItems.STAFF_WIND, true)) { if (p.getFoodLevel() >= 2) { - if (p.getItemInHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) { + if (p.getInventory().getItemInMainHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) { FoodLevelChangeEvent event = new FoodLevelChangeEvent(p, p.getFoodLevel() - 2); Bukkit.getPluginManager().callEvent(event); p.setFoodLevel(event.getFoodLevel()); @@ -1256,7 +1273,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_WATER, "STAFF_ELEMENTAL_WATER", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new ItemStack(Material.WATER_LILY), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.STAFF_ELEMENTAL, new ItemStack(Material.WATER_LILY), SlimefunItems.STAFF_ELEMENTAL, null, null}) + new ItemStack[] {null, new ItemStack(Material.WATER_LILY), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.STAFF_ELEMENTAL, new ItemStack(Material.WATER_LILY), SlimefunItems.STAFF_ELEMENTAL, null, null}) .register(true, new ItemInteractionHandler() { @Override @@ -1271,44 +1288,44 @@ public class SlimefunSetup { }); new MultiTool(SlimefunItems.DURALUMIN_MULTI_TOOL, "DURALUMIN_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) .register(true); new MultiTool(SlimefunItems.SOLDER_MULTI_TOOL, "SOLDER_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + new ItemStack[] {SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) .register(true); new MultiTool(SlimefunItems.BILLON_MULTI_TOOL, "BILLON_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + new ItemStack[] {SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) .register(true); new MultiTool(SlimefunItems.STEEL_MULTI_TOOL, "STEEL_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + new ItemStack[] {SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) .register(true); new MultiTool(SlimefunItems.DAMASCUS_STEEL_MULTI_TOOL, "DAMASCUS_STEEL_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) .register(true); new MultiTool(SlimefunItems.REINFORCED_ALLOY_MULTI_TOOL, "REINFORCED_ALLOY_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) .register(true); new MultiTool(SlimefunItems.CARBONADO_MULTI_TOOL, "CARBONADO_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CARBONADO, null, SlimefunItems.CARBONADO, SlimefunItems.CARBONADO, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.CARBONADO, null, SlimefunItems.CARBONADO, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item", "mode.4.enabled", "mode.4.name", "mode.4.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK", true, "Gold Pan", "GOLD_PAN"}) + new ItemStack[] {SlimefunItems.CARBONADO, null, SlimefunItems.CARBONADO, SlimefunItems.CARBONADO, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.CARBONADO, null, SlimefunItems.CARBONADO, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item", "mode.4.enabled", "mode.4.name", "mode.4.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK", true, "Gold Pan", "GOLD_PAN"}) .register(true); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ORE_WASHER, "ORE_WASHER", - new ItemStack[] {null, new ItemStack(Material.DISPENSER), null, null, new ItemStack(Material.FENCE), null, null, new ItemStack(Material.CAULDRON_ITEM), null}, - new ItemStack[] {SlimefunItems.SIFTED_ORE, SlimefunItems.IRON_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.GOLD_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.COPPER_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.TIN_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.ZINC_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGNESIUM_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.LEAD_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.SILVER_DUST}, - Material.FENCE) + new ItemStack[] {null, new ItemStack(Material.DISPENSER), null, null, new ItemStack(Material.FENCE), null, null, new ItemStack(Material.CAULDRON_ITEM), null}, + new ItemStack[] {SlimefunItems.SIFTED_ORE, SlimefunItems.IRON_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.GOLD_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.COPPER_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.TIN_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.ZINC_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGNESIUM_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.LEAD_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.SILVER_DUST}, + Material.FENCE) .register(true, new MultiBlockInteractionHandler() { @Override @@ -1317,63 +1334,65 @@ public class SlimefunSetup { SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ORE_WASHER"); if (mb.isMultiBlock(machine)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.UP).getState(); - Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - if (current != null) { - if (SlimefunManager.isItemSimiliar(current, SlimefunItems.SIFTED_ORE, true)) { - 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; + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.UP).getState(); + Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + if (current != null) { + if (SlimefunManager.isItemSimiliar(current, SlimefunItems.SIFTED_ORE, true)) { + 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; - if (inv.firstEmpty() != -1) { - ItemStack removing = current.clone(); - removing.setAmount(1); - inv.removeItem(removing); - inv.addItem(adding); - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); - p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); - if (InvUtils.fits(inv, SlimefunItems.STONE_CHUNK)) inv.addItem(SlimefunItems.STONE_CHUNK); + if (inv.firstEmpty() != -1) { + ItemStack removing = current.clone(); + removing.setAmount(1); + inv.removeItem(removing); + inv.addItem(adding); + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); + p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); + if (InvUtils.fits(inv, SlimefunItems.STONE_CHUNK)) inv.addItem(SlimefunItems.STONE_CHUNK); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; - } - else if (SlimefunManager.isItemSimiliar(current, new ItemStack(Material.SAND, 4), false)) { - ItemStack adding = SlimefunItems.SALT; - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(4); - inv.removeItem(removing); - inv.addItem(adding); - p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); + else if (SlimefunManager.isItemSimiliar(current, new ItemStack(Material.SAND, 4), false)) { + ItemStack adding = SlimefunItems.SALT; + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(4); + inv.removeItem(removing); + inv.addItem(adding); + p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; - } - else if (SlimefunManager.isItemSimiliar(current, SlimefunItems.PULVERIZED_ORE, true)) { - ItemStack adding = SlimefunItems.PURE_ORE_CLUSTER; - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(1); - inv.removeItem(removing); - inv.addItem(adding); - p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); + else if (SlimefunManager.isItemSimiliar(current, SlimefunItems.PULVERIZED_ORE, true)) { + ItemStack adding = SlimefunItems.PURE_ORE_CLUSTER; + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(1); + inv.removeItem(removing); + inv.addItem(adding); + p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; } } + Messages.local.sendTranslation(p, "machines.unknown-material", true); } - Messages.local.sendTranslation(p, "machines.unknown-material", true); } return true; } @@ -1382,76 +1401,76 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_24K, "GOLD_24K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_22K, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_22K, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_22K, "GOLD_22K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_20K, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_20K, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_20K, "GOLD_20K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_18K, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_18K, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_18K, "GOLD_18K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_16K, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_16K, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_16K, "GOLD_16K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_14K, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_14K, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_14K, "GOLD_14K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_12K, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_12K, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_12K, "GOLD_12K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_10K, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_10K, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_10K, "GOLD_10K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_8K, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_8K, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_8K, "GOLD_8K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_6K, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_6K, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_6K, "GOLD_6K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_4K, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_4K, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_4K, "GOLD_4K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_DUST, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.STONE_CHUNK, "STONE_CHUNK", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.SILICON, "SILICON", RecipeType.SMELTERY, - new ItemStack[] {new ItemStack(Material.QUARTZ_BLOCK), null, null, null, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.QUARTZ_BLOCK), null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.SOLAR_PANEL, "SOLAR_PANEL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), SlimefunItems.SILICON, SlimefunItems.SILICON, SlimefunItems.SILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON}) + new ItemStack[] {new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), SlimefunItems.SILICON, SlimefunItems.SILICON, SlimefunItems.SILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON}) .register(true); new SolarHelmet(Categories.TECH, SlimefunItems.SOLAR_HELMET, "SOLAR_HELMET", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.SOLAR_PANEL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MEDIUM_CAPACITOR, null, SlimefunItems.MEDIUM_CAPACITOR}, - new String[] {"charge-amount"}, new Double[] {0.1}) + new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.SOLAR_PANEL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MEDIUM_CAPACITOR, null, SlimefunItems.MEDIUM_CAPACITOR}, + new String[] {"charge-amount"}, new Double[] {0.1}) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.LAVA_CRYSTAL, "LAVA_CRYSTAL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.RUNE_FIRE, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1}) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.RUNE_FIRE, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1}) .register(true); new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_FIRE, "STAFF_ELEMENTAL_FIRE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, null, SlimefunItems.LAVA_CRYSTAL, null, SlimefunItems.STAFF_ELEMENTAL, null, SlimefunItems.STAFF_ELEMENTAL, null, null}) + new ItemStack[] {null, null, SlimefunItems.LAVA_CRYSTAL, null, SlimefunItems.STAFF_ELEMENTAL, null, SlimefunItems.STAFF_ELEMENTAL, null, null}) .register(true); new SlimefunItem(Categories.TOOLS, SlimefunItems.AUTO_SMELT_PICKAXE, "SMELTERS_PICKAXE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) + new ItemStack[] {SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) .register(true, new BlockBreakHandler() { @Override @@ -1479,48 +1498,48 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.TALISMAN, "COMMON_TALISMAN", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2}, - new String[] {"recipe-requires-nether-stars"}, new Boolean[] {false}) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2}, + new String[] {"recipe-requires-nether-stars"}, new Boolean[] {false}) .register(true); new Talisman(SlimefunItems.TALISMAN_ANVIL, "ANVIL_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.ANVIL), SlimefunItems.TALISMAN, new ItemStack(Material.ANVIL), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - true, false, "anvil", new PotionEffect[0]) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.ANVIL), SlimefunItems.TALISMAN, new ItemStack(Material.ANVIL), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + true, false, "anvil", new PotionEffect[0]) .register(true); new Talisman(SlimefunItems.TALISMAN_MINER, "MINER_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - false, false, "miner", 20, new PotionEffect[0]) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + false, false, "miner", 20, new PotionEffect[0]) .register(true); new Talisman(SlimefunItems.TALISMAN_HUNTER, "HUNTER_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.MONSTER_JERKY, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - false, false, "hunter", 20, new PotionEffect[0]) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.MONSTER_JERKY, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + false, false, "hunter", 20, new PotionEffect[0]) .register(true); new Talisman(SlimefunItems.TALISMAN_LAVA, "LAVA_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.TALISMAN, new ItemStack(Material.LAVA_BUCKET), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - true, true, "lava", new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 3600, 4)) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.TALISMAN, new ItemStack(Material.LAVA_BUCKET), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + true, true, "lava", new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 3600, 4)) .register(true); new Talisman(SlimefunItems.TALISMAN_WATER, "WATER_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.WATER_BUCKET), SlimefunItems.TALISMAN, new ItemStack(Material.FISHING_ROD), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - true, true, "water", new PotionEffect(PotionEffectType.WATER_BREATHING, 3600, 4)) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.WATER_BUCKET), SlimefunItems.TALISMAN, new ItemStack(Material.FISHING_ROD), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + true, true, "water", new PotionEffect(PotionEffectType.WATER_BREATHING, 3600, 4)) .register(true); new Talisman(SlimefunItems.TALISMAN_ANGEL, "ANGEL_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.FEATHER), SlimefunItems.TALISMAN, new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - false, true, "angel", 75, new PotionEffect[0]) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.FEATHER), SlimefunItems.TALISMAN, new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + false, true, "angel", 75, new PotionEffect[0]) .register(true); new Talisman(SlimefunItems.TALISMAN_FIRE, "FIRE_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.TALISMAN, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - true, true, "fire", new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 3600, 4)) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.TALISMAN, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + true, true, "fire", new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 3600, 4)) .register(true); new Talisman(SlimefunItems.TALISMAN_MAGICIAN, "MAGICIAN_TALISMAN", - new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENCHANTMENT_TABLE), SlimefunItems.TALISMAN, new ItemStack(Material.ENCHANTMENT_TABLE), SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3}, - false, false, "magician", 80, new PotionEffect[0]) + new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENCHANTMENT_TABLE), SlimefunItems.TALISMAN, new ItemStack(Material.ENCHANTMENT_TABLE), SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3}, + false, false, "magician", 80, new PotionEffect[0]) .register(true); for (Enchantment e: Enchantment.values()) { @@ -1530,47 +1549,47 @@ public class SlimefunSetup { } new Talisman(SlimefunItems.TALISMAN_TRAVELLER, "TRAVELLER_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.STAFF_WIND, SlimefunItems.TALISMAN_ANGEL, SlimefunItems.STAFF_WIND, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - false, false, "traveller", 60, new PotionEffect(PotionEffectType.SPEED, 3600, 2)) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.STAFF_WIND, SlimefunItems.TALISMAN_ANGEL, SlimefunItems.STAFF_WIND, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + false, false, "traveller", 60, new PotionEffect(PotionEffectType.SPEED, 3600, 2)) .register(true); new Talisman(SlimefunItems.TALISMAN_WARRIOR, "WARRIOR_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.TALISMAN, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - true, true, "warrior", new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 3600, 2)) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.TALISMAN, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + true, true, "warrior", new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 3600, 2)) .register(true); new Talisman(SlimefunItems.TALISMAN_KNIGHT, "KNIGHT_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.GILDED_IRON, SlimefunItems.TALISMAN_WARRIOR, SlimefunItems.GILDED_IRON, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - "knight", 30, new PotionEffect(PotionEffectType.REGENERATION, 100, 3)) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.GILDED_IRON, SlimefunItems.TALISMAN_WARRIOR, SlimefunItems.GILDED_IRON, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + "knight", 30, new PotionEffect(PotionEffectType.REGENERATION, 100, 3)) .register(true); new Alloy(SlimefunItems.GILDED_IRON, "GILDED_IRON", - new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.IRON_DUST, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.IRON_DUST, null, null, null, null, null, null, null}) .register(true); new ReplacingAlloy(SlimefunItems.SYNTHETIC_EMERALD, "SYNTHETIC_EMERALD", - new ItemStack[] {SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.THIN_GLASS), null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.THIN_GLASS), null, null, null, null, null}) .register(true); SlimefunManager.registerArmorSet(SlimefunItems.CHAIN, new ItemStack[] {new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)}, "CHAIN", true, true); new Talisman(SlimefunItems.TALISMAN_WHIRLWIND, "WHIRLWIND_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.STAFF_WIND, SlimefunItems.TALISMAN_TRAVELLER, SlimefunItems.STAFF_WIND, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3} + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.STAFF_WIND, SlimefunItems.TALISMAN_TRAVELLER, SlimefunItems.STAFF_WIND, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3} , false, true, "whirlwind", 60, new PotionEffect[0]) .register(true); new Talisman(SlimefunItems.TALISMAN_WIZARD, "WIZARD_TALISMAN", - new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.TALISMAN_MAGICIAN, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3}, - false, false, "wizard", 60, new PotionEffect[0]) + new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.TALISMAN_MAGICIAN, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3}, + false, false, "wizard", 60, new PotionEffect[0]) .register(true); new SlimefunItem(Categories.TOOLS, SlimefunItems.LUMBER_AXE, "LUMBER_AXE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.SYNTHETIC_DIAMOND, null, SlimefunItems.SYNTHETIC_EMERALD, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) + new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.SYNTHETIC_DIAMOND, null, SlimefunItems.SYNTHETIC_EMERALD, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) .register(true, new BlockBreakHandler() { @Override public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getItemInHand(), SlimefunItems.LUMBER_AXE, true)) { + if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.LUMBER_AXE, true)) { if (e.getBlock().getType() == Material.LOG || e.getBlock().getType() == Material.LOG_2) { List logs = new ArrayList(); TreeCalculator.getTree(e.getBlock().getLocation(), e.getBlock().getLocation(), logs); @@ -1593,77 +1612,77 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MISC, SlimefunItems.SALT, "SALT", RecipeType.ORE_WASHER, - new ItemStack[] {null, null, null, null, new ItemStack(Material.SAND, 4), null, null, null, null}) + new ItemStack[] {null, null, null, null, new ItemStack(Material.SAND, 4), null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.HEAVY_CREAM, "HEAVY_CREAM", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.MILK_BUCKET), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.HEAVY_CREAM, 2)) + new ItemStack[] {new ItemStack(Material.MILK_BUCKET), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.HEAVY_CREAM, 2)) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.CHEESE, "CHEESE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.MILK_BUCKET), SlimefunItems.SALT, null, null, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.MILK_BUCKET), SlimefunItems.SALT, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.BUTTER, "BUTTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HEAVY_CREAM, SlimefunItems.SALT, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.HEAVY_CREAM, SlimefunItems.SALT, null, null, null, null, null, null, null}) .register(true); SlimefunManager.registerArmorSet(SlimefunItems.GILDED_IRON, new ItemStack[] {SlimefunItems.GILDED_IRON_HELMET, SlimefunItems.GILDED_IRON_CHESTPLATE, SlimefunItems.GILDED_IRON_LEGGINGS, SlimefunItems.GILDED_IRON_BOOTS}, "GILDED_IRON", true, false); new SlimefunArmorPiece(Categories.ARMOR, SlimefunItems.SCUBA_HELMET, "SCUBA_HELMET", RecipeType.ARMOR_FORGE, - new ItemStack[] {new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new ItemStack(Material.THIN_GLASS), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, null, null}, - new PotionEffect[] {new PotionEffect(PotionEffectType.WATER_BREATHING, 300, 1)}) + new ItemStack[] {new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new ItemStack(Material.THIN_GLASS), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, null, null}, + new PotionEffect[] {new PotionEffect(PotionEffectType.WATER_BREATHING, 300, 1)}) .register(true); new SlimefunArmorPiece(Categories.ARMOR, SlimefunItems.HAZMATSUIT_CHESTPLATE, "HAZMAT_CHESTPLATE", RecipeType.ARMOR_FORGE, - new ItemStack[] {new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 300, 1)}) + new ItemStack[] {new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 300, 1)}) .register(true); new SlimefunItem(Categories.ARMOR, SlimefunItems.HAZMATSUIT_LEGGINGS, "HAZMAT_LEGGINGS", RecipeType.ARMOR_FORGE, - new ItemStack [] {new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1)}) + new ItemStack [] {new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1)}) .register(true); new SlimefunItem(Categories.ARMOR, SlimefunItems.RUBBER_BOOTS, "RUBBER_BOOTS", RecipeType.ARMOR_FORGE, - new ItemStack [] {null, null, null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1)}) + new ItemStack [] {null, null, null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1)}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.CRUSHED_ORE, "CRUSHED_ORE", RecipeType.ORE_CRUSHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.PULVERIZED_ORE, "PULVERIZED_ORE", RecipeType.ORE_CRUSHER, - new ItemStack[] {SlimefunItems.CRUSHED_ORE, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.CRUSHED_ORE, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.PURE_ORE_CLUSTER, "PURE_ORE_CLUSTER", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.PULVERIZED_ORE, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.PULVERIZED_ORE, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.TINY_URANIUM, "TINY_URANIUM", RecipeType.ORE_CRUSHER, - new ItemStack[] {SlimefunItems.PURE_ORE_CLUSTER, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.PURE_ORE_CLUSTER, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.SMALL_URANIUM, "SMALL_URANIUM", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM}) + new ItemStack[] {SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.URANIUM, "URANIUM", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SMALL_URANIUM, SlimefunItems.SMALL_URANIUM, null, SlimefunItems.SMALL_URANIUM, SlimefunItems.SMALL_URANIUM, null, null, null, null}) + new ItemStack[] {SlimefunItems.SMALL_URANIUM, SlimefunItems.SMALL_URANIUM, null, SlimefunItems.SMALL_URANIUM, SlimefunItems.SMALL_URANIUM, null, null, null, null}) .register(true); new Alloy(SlimefunItems.REDSTONE_ALLOY, "REDSTONE_ALLOY", - new ItemStack[] {new ItemStack(Material.REDSTONE), new ItemStack(Material.REDSTONE_BLOCK), SlimefunItems.FERROSILICON, SlimefunItems.HARDENED_METAL_INGOT, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.REDSTONE), new ItemStack(Material.REDSTONE_BLOCK), SlimefunItems.FERROSILICON, SlimefunItems.HARDENED_METAL_INGOT, null, null, null, null, null}) .register(true); SlimefunManager.registerArmorSet(SlimefunItems.GOLD_12K, new ItemStack[] {SlimefunItems.GOLD_HELMET, SlimefunItems.GOLD_CHESTPLATE, SlimefunItems.GOLD_LEGGINGS, SlimefunItems.GOLD_BOOTS}, "GOLD_12K", true, false); new SlimefunItem(Categories.MISC, SlimefunItems.CLOTH, "CLOTH", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.WOOL), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CLOTH, 8)) + new ItemStack[] {new ItemStack(Material.WOOL), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CLOTH, 8)) .register(true); new SlimefunItem(Categories.PORTABLE, SlimefunItems.RAG, "RAG", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, new ItemStack(Material.STRING), null, new ItemStack(Material.STRING), SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH}) + new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, new ItemStack(Material.STRING), null, new ItemStack(Material.STRING), SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH}) .register(true, new ItemInteractionHandler() { @Override @@ -1680,8 +1699,8 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.PORTABLE, SlimefunItems.BANDAGE, "BANDAGE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.RAG, new ItemStack(Material.STRING), SlimefunItems.RAG, null, null, null, null, null, null}, - new CustomItem(SlimefunItems.BANDAGE, 4), new String[] {"enable-bleeding"}, new Boolean[] {true}) + new ItemStack[] {SlimefunItems.RAG, new ItemStack(Material.STRING), SlimefunItems.RAG, null, null, null, null, null, null}, + new CustomItem(SlimefunItems.BANDAGE, 4), new String[] {"enable-bleeding"}, new Boolean[] {true}) .register(true, new ItemInteractionHandler() { @Override @@ -1698,8 +1717,8 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.PORTABLE, SlimefunItems.SPLINT, "SPLINT", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.STICK), new ItemStack(Material.STICK), new ItemStack(Material.STICK), null, new ItemStack(Material.IRON_INGOT), null}, - new CustomItem(SlimefunItems.SPLINT, 4), new String[] {"enable-broken-legs"}, new Boolean[] {true}) + new ItemStack[] {null, new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.STICK), new ItemStack(Material.STICK), new ItemStack(Material.STICK), null, new ItemStack(Material.IRON_INGOT), null}, + new CustomItem(SlimefunItems.SPLINT, 4), new String[] {"enable-broken-legs"}, new Boolean[] {true}) .register(true, new ItemInteractionHandler() { @Override @@ -1715,11 +1734,11 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MISC, SlimefunItems.CAN, "TIN_CAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, null, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT}, new CustomItem(SlimefunItems.CAN, 4)) + new ItemStack[] {SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, null, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT}, new CustomItem(SlimefunItems.CAN, 4)) .register(true); new SlimefunItem(Categories.PORTABLE, SlimefunItems.VITAMINS, "VITAMINS", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.APPLE), new ItemStack(Material.RED_MUSHROOM), new ItemStack(Material.SUGAR), null, null, null, null, null}) + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.APPLE), new ItemStack(Material.RED_MUSHROOM), new ItemStack(Material.SUGAR), null, null, null, null, null}) .register(true, new ItemInteractionHandler() { @Override @@ -1744,21 +1763,21 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.PORTABLE, SlimefunItems.MEDICINE, "MEDICINE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.VITAMINS, new ItemStack(Material.GLASS_BOTTLE), SlimefunItems.HEAVY_CREAM, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.VITAMINS, new ItemStack(Material.GLASS_BOTTLE), SlimefunItems.HEAVY_CREAM, null, null, null, null, null, null}) .register(true); new SlimefunArmorPiece(Categories.TECH, SlimefunItems.NIGHT_VISION_GOGGLES, "NIGHT_VISION_GOGGLES", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.COAL_BLOCK), new MaterialData(Material.STAINED_GLASS_PANE, (byte) 5).toItemStack(1), new ItemStack(Material.COAL_BLOCK), new MaterialData(Material.STAINED_GLASS_PANE, (byte) 5).toItemStack(1), new ItemStack(Material.COAL_BLOCK), null, new ItemStack(Material.COAL_BLOCK)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 20)}) + new ItemStack[] {new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.COAL_BLOCK), new MaterialData(Material.STAINED_GLASS_PANE, (byte) 5).toItemStack(1), new ItemStack(Material.COAL_BLOCK), new MaterialData(Material.STAINED_GLASS_PANE, (byte) 5).toItemStack(1), new ItemStack(Material.COAL_BLOCK), null, new ItemStack(Material.COAL_BLOCK)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 20)}) .register(true); new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_CONTAINMENT, "PICKAXE_OF_CONTAINMENT", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) + new ItemStack[] {SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) .register(true, new BlockBreakHandler() { @Override public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getItemInHand(), SlimefunItems.PICKAXE_OF_CONTAINMENT, true)) { + if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.PICKAXE_OF_CONTAINMENT, true)) { if (e.getBlock().getType() != Material.MOB_SPAWNER) return true; ItemStack spawner = SlimefunItems.BROKEN_SPAWNER.clone(); ItemMeta im = spawner.getItemMeta(); @@ -1777,12 +1796,12 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.TOOLS, SlimefunItems.HERCULES_PICKAXE, "HERCULES_PICKAXE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) + new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) .register(true, new BlockBreakHandler() { @Override public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getItemInHand(), SlimefunItems.HERCULES_PICKAXE, true) && e.getBlock().getType().toString().endsWith("_ORE")) { + if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), 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 { @@ -1797,17 +1816,19 @@ public class SlimefunSetup { }); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.SAW_MILL, "SAW_MILL", - new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG)}, - new ItemStack[] {}, Material.WORKBENCH) + new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG)}, + new ItemStack[] {}, Material.WORKBENCH) .register(true, new MultiBlockInteractionHandler() { @Override public boolean onInteract(Player p, MultiBlock mb, Block b) { if (mb.isMultiBlock(SlimefunItem.getByID("SAW_MILL"))) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { if (Slimefun.hasUnlocked(p, SlimefunItems.SAW_MILL, true)) { if (b.getRelative(BlockFace.UP).getType() == Material.LOG) BlockBreaker.breakBlock(p, b.getRelative(BlockFace.UP), Arrays.asList(new ItemStack[] {new CustomItem(Material.WOOD, b.getRelative(BlockFace.UP).getData() % 4, 8)}), true); else if (b.getRelative(BlockFace.UP).getType() == Material.LOG_2) BlockBreaker.breakBlock(p, b.getRelative(BlockFace.UP), Arrays.asList(new ItemStack[] {new CustomItem(Material.WOOD, (b.getRelative(BlockFace.UP).getData() % 2) + 4, 8)}), true); } + } return true; } else return false; @@ -1815,111 +1836,113 @@ public class SlimefunSetup { }); new SlimefunMachine(Categories.MACHINES_1, new CustomItem(Material.FIRE, "&4Phantom Item", 0), "SAW_MILL2", - new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG)}, - new ItemStack[] {}, Material.WORKBENCH, true) + new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG)}, + new ItemStack[] {}, Material.WORKBENCH, true) .register(true); new SlimefunMachine(Categories.MACHINES_1, new CustomItem(Material.FIRE, "&4Phantom Item", 0), "SAW_MILL3", - new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG_2)}, - new ItemStack[] {}, Material.WORKBENCH, true) + new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG_2)}, + new ItemStack[] {}, Material.WORKBENCH, true) .register(true); new SlimefunMachine(Categories.MACHINES_1, new CustomItem(Material.FIRE, "&4Phantom Item", 0), "SAW_MILL4", - new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG_2)}, - new ItemStack[] {}, Material.WORKBENCH, true) + new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG_2)}, + new ItemStack[] {}, Material.WORKBENCH, true) .register(true); new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_HELMET_STEEL, "SLIME_STEEL_HELMET", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), null, null, null}) + new ItemStack[] {new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), null, null, null}) .register(true); new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_CHESTPLATE_STEEL, "SLIME_STEEL_CHESTPLATE", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL)}) + new ItemStack[] {new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL)}) .register(true); new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_LEGGINGS_STEEL, "SLIME_STEEL_LEGGINGS", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.SPEED, 300, 2)}) + new ItemStack[] {new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.SPEED, 300, 2)}) .register(true); new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_BOOTS_STEEL, "SLIME_STEEL_BOOTS", RecipeType.ARMOR_FORGE, - new ItemStack[] {null, null, null, new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.JUMP, 300, 5)}) + new ItemStack[] {null, null, null, new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.JUMP, 300, 5)}) .register(true); new SlimefunItem(Categories.WEAPONS, SlimefunItems.BLADE_OF_VAMPIRES, "BLADE_OF_VAMPIRES", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, null, new ItemStack(Material.BLAZE_ROD), null}) + new ItemStack[] {null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, null, new ItemStack(Material.BLAZE_ROD), null}) .register(true); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.DIGITAL_MINER, "DIGITAL_MINER", - new ItemStack[] {SlimefunItems.SOLAR_PANEL, new ItemStack(Material.CHEST), SlimefunItems.SOLAR_PANEL, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.DISPENSER), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.HOPPER), new ItemStack(Material.IRON_BLOCK)}, - new ItemStack[0], Material.DISPENSER) + new ItemStack[] {SlimefunItems.SOLAR_PANEL, new ItemStack(Material.CHEST), SlimefunItems.SOLAR_PANEL, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.DISPENSER), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.HOPPER), new ItemStack(Material.IRON_BLOCK)}, + new ItemStack[0], Material.DISPENSER) .register(true, new MultiBlockInteractionHandler() { @Override public boolean onInteract(final Player p, MultiBlock mb, final Block b) { if (mb.isMultiBlock(SlimefunItem.getByID("DIGITAL_MINER"))) { - if (Slimefun.hasUnlocked(p, SlimefunItems.DIGITAL_MINER, true)) { - Chest chest = (Chest) b.getRelative(BlockFace.UP).getState(); - final Inventory inv = chest.getInventory(); - List ores = new ArrayList(); - for (int x = b.getX() - 4; x < b.getX() + 4; x++) { - for (int z = b.getZ() - 4; z < b.getZ() + 4; z++) { - for (int y = b.getY(); y > 0; y--) { - if (b.getWorld().getBlockAt(x, y, z).getType().toString().endsWith("_ORE")) { - ores.add(b.getWorld().getBlockAt(x, y, z).getLocation()); + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, SlimefunItems.DIGITAL_MINER, true)) { + Chest chest = (Chest) b.getRelative(BlockFace.UP).getState(); + final Inventory inv = chest.getInventory(); + List ores = new ArrayList(); + for (int x = b.getX() - 4; x < b.getX() + 4; x++) { + for (int z = b.getZ() - 4; z < b.getZ() + 4; z++) { + for (int y = b.getY(); y > 0; y--) { + if (b.getWorld().getBlockAt(x, y, z).getType().toString().endsWith("_ORE")) { + ores.add(b.getWorld().getBlockAt(x, y, z).getLocation()); + } } } } - } - if (!ores.isEmpty()) { - final Material ore = ores.get(0).getBlock().getType(); - final ItemStack adding = new ItemStack(ore); - ores.get(0).getBlock().setType(Material.AIR); - ores.clear(); - if (InvUtils.fits(inv, adding)) { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + if (!ores.isEmpty()) { + final Material ore = ores.get(0).getBlock().getType(); + final ItemStack adding = new ItemStack(ore); + ores.get(0).getBlock().setType(Material.AIR); + ores.clear(); + if (InvUtils.fits(inv, adding)) { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); - } - }, 20L); - } - }, 20L); + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); + else Messages.local.sendTranslation(p, "miner.no-ores", true); } - else Messages.local.sendTranslation(p, "miner.no-ores", true); } return true; } @@ -1928,79 +1951,81 @@ public class SlimefunSetup { }); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ADVANCED_DIGITAL_MINER, "ADVANCED_DIGITAL_MINER", - new ItemStack[] {SlimefunItems.SOLAR_PANEL, new ItemStack(Material.CHEST), SlimefunItems.SOLAR_PANEL, SlimefunItems.GOLD_24K_BLOCK, new ItemStack(Material.DISPENSER), SlimefunItems.GOLD_24K_BLOCK, SlimefunItems.GOLD_24K_BLOCK, new ItemStack(Material.HOPPER), SlimefunItems.GOLD_24K_BLOCK}, - new ItemStack[0], Material.DISPENSER) + new ItemStack[] {SlimefunItems.SOLAR_PANEL, new ItemStack(Material.CHEST), SlimefunItems.SOLAR_PANEL, SlimefunItems.GOLD_24K_BLOCK, new ItemStack(Material.DISPENSER), SlimefunItems.GOLD_24K_BLOCK, SlimefunItems.GOLD_24K_BLOCK, new ItemStack(Material.HOPPER), SlimefunItems.GOLD_24K_BLOCK}, + new ItemStack[0], Material.DISPENSER) .register(true, new MultiBlockInteractionHandler() { @Override public boolean onInteract(final Player p, MultiBlock mb, final Block b) { if (mb.isMultiBlock(SlimefunItem.getByID("ADVANCED_DIGITAL_MINER"))) { - if (Slimefun.hasUnlocked(p, SlimefunItems.ADVANCED_DIGITAL_MINER, true)) { - Chest chest = (Chest) b.getRelative(BlockFace.UP).getState(); - final Inventory inv = chest.getInventory(); - List ores = new ArrayList(); - for (int x = b.getX() - 6; x < b.getX() + 6; x++) { - for (int z = b.getZ() - 6; z < b.getZ() + 6; z++) { - for (int y = b.getY(); y > 0; y--) { - if (b.getWorld().getBlockAt(x, y, z).getType().toString().endsWith("_ORE")) { - ores.add(b.getWorld().getBlockAt(x, y, z).getLocation()); + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, SlimefunItems.ADVANCED_DIGITAL_MINER, true)) { + Chest chest = (Chest) b.getRelative(BlockFace.UP).getState(); + final Inventory inv = chest.getInventory(); + List ores = new ArrayList(); + for (int x = b.getX() - 6; x < b.getX() + 6; x++) { + for (int z = b.getZ() - 6; z < b.getZ() + 6; z++) { + for (int y = b.getY(); y > 0; y--) { + if (b.getWorld().getBlockAt(x, y, z).getType().toString().endsWith("_ORE")) { + ores.add(b.getWorld().getBlockAt(x, y, z).getLocation()); + } } } } - } - if (!ores.isEmpty()) { - final Material ore = ores.get(0).getBlock().getType(); - ItemStack drop = new ItemStack(ore); - if (ore == Material.COAL_ORE) drop = new CustomItem(new ItemStack(Material.COAL), 4); - else if (ore == Material.IRON_ORE) drop = new CustomItem(SlimefunItems.IRON_DUST, 2); - else if (ore == Material.GOLD_ORE) drop = new CustomItem(SlimefunItems.GOLD_DUST, 2); - else if (ore == Material.REDSTONE_ORE) drop = new CustomItem(new ItemStack(Material.REDSTONE), 8); - else if (ore == Material.QUARTZ_ORE) drop = new CustomItem(new ItemStack(Material.QUARTZ), 4); - else if (ore == Material.LAPIS_ORE) drop = new CustomItem(new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), 12); - else { - for (ItemStack drops: ores.get(0).getBlock().getDrops()) { - if (!drops.getType().isBlock()) drop = new CustomItem(drops, 2); - } - } - final ItemStack adding = drop; - ores.get(0).getBlock().setType(Material.AIR); - ores.clear(); - if (InvUtils.fits(inv, adding)) { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); + if (!ores.isEmpty()) { + final Material ore = ores.get(0).getBlock().getType(); + ItemStack drop = new ItemStack(ore); + if (ore == Material.COAL_ORE) drop = new CustomItem(new ItemStack(Material.COAL), 4); + else if (ore == Material.IRON_ORE) drop = new CustomItem(SlimefunItems.IRON_DUST, 2); + else if (ore == Material.GOLD_ORE) drop = new CustomItem(SlimefunItems.GOLD_DUST, 2); + else if (ore == Material.REDSTONE_ORE) drop = new CustomItem(new ItemStack(Material.REDSTONE), 8); + else if (ore == Material.QUARTZ_ORE) drop = new CustomItem(new ItemStack(Material.QUARTZ), 4); + else if (ore == Material.LAPIS_ORE) drop = new CustomItem(new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), 12); + else { + for (ItemStack drops: ores.get(0).getBlock().getDrops()) { + if (!drops.getType().isBlock()) drop = new CustomItem(drops, 2); } - }, 20L); + } + final ItemStack adding = drop; + ores.get(0).getBlock().setType(Material.AIR); + ores.clear(); + if (InvUtils.fits(inv, adding)) { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); + else Messages.local.sendTranslation(p, "miner.no-ores", true); } - else Messages.local.sendTranslation(p, "miner.no-ores", true); } return true; } @@ -2009,122 +2034,125 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MISC, SlimefunItems.GOLD_24K_BLOCK, "GOLD_24K_BLOCK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K}) + new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K}) .register(true); new SlimefunGadget(Categories.MACHINES_1, SlimefunItems.COMPOSTER, "COMPOSTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.WOOD_STEP), null, new ItemStack(Material.WOOD_STEP), new ItemStack(Material.WOOD_STEP), null, new ItemStack(Material.WOOD_STEP), new ItemStack(Material.WOOD_STEP), new ItemStack(Material.CAULDRON_ITEM), new ItemStack(Material.WOOD_STEP)}, - new ItemStack[] {new CustomItem(Material.LEAVES, 0, 8), new ItemStack(Material.DIRT), new CustomItem(Material.LEAVES_2, 0, 8), new ItemStack(Material.DIRT), new CustomItem(Material.SAPLING, 0, 8), new ItemStack(Material.DIRT), new ItemStack(Material.STONE, 4), new ItemStack(Material.NETHERRACK), new ItemStack(Material.SAND, 2), new ItemStack(Material.SOUL_SAND), new ItemStack(Material.WHEAT, 4), new ItemStack(Material.NETHER_STALK)}) + new ItemStack[] {new ItemStack(Material.WOOD_STEP), null, new ItemStack(Material.WOOD_STEP), new ItemStack(Material.WOOD_STEP), null, new ItemStack(Material.WOOD_STEP), new ItemStack(Material.WOOD_STEP), new ItemStack(Material.CAULDRON_ITEM), new ItemStack(Material.WOOD_STEP)}, + new ItemStack[] {new CustomItem(Material.LEAVES, 0, 8), new ItemStack(Material.DIRT), new CustomItem(Material.LEAVES_2, 0, 8), new ItemStack(Material.DIRT), new CustomItem(Material.SAPLING, 0, 8), new ItemStack(Material.DIRT), new ItemStack(Material.STONE, 4), new ItemStack(Material.NETHERRACK), new ItemStack(Material.SAND, 2), new ItemStack(Material.SOUL_SAND), new ItemStack(Material.WHEAT, 4), new ItemStack(Material.NETHER_STALK)}) .register(true, new ItemInteractionHandler() { @Override public boolean onRightClick(ItemUseEvent e, final Player p, ItemStack item) { if (e.getClickedBlock() != null) { SlimefunItem machine = BlockStorage.check(e.getClickedBlock()); - if (machine != null && machine.getName().equals("COMPOSTER")) { - final ItemStack input = p.getItemInHand(); - final Block b = e.getClickedBlock(); - 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); + if (machine != null && machine.getID().equals("COMPOSTER")) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), e.getClickedBlock(), true)) { + final ItemStack input = p.getInventory().getItemInMainHand(); + final Block b = e.getClickedBlock(); + 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); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - b.getWorld().dropItemNaturally(b.getRelative(BlockFace.UP).getLocation(), adding); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - return true; + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + b.getWorld().dropItemNaturally(b.getRelative(BlockFace.UP).getLocation(), adding); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + return true; + } } + Messages.local.sendTranslation(p, "machines.wrong-item", true); + return true; } - Messages.local.sendTranslation(p, "machines.wrong-item", true); return true; } } @@ -2133,15 +2161,15 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.FARMER_SHOES, "FARMER_SHOES", RecipeType.ARMOR_FORGE, - new ItemStack[] {null, null, null, new ItemStack(Material.HAY_BLOCK), null, new ItemStack(Material.HAY_BLOCK), new ItemStack(Material.HAY_BLOCK), null, new ItemStack(Material.HAY_BLOCK)}) + new ItemStack[] {null, null, null, new ItemStack(Material.HAY_BLOCK), null, new ItemStack(Material.HAY_BLOCK), new ItemStack(Material.HAY_BLOCK), null, new ItemStack(Material.HAY_BLOCK)}) .register(true); @SuppressWarnings("unchecked") final String[] explosiveblacklist = Slimefun.getItemValue("EXPLOSIVE_PICKAXE", "unbreakable-blocks") != null ? ((List) Slimefun.getItemValue("EXPLOSIVE_PICKAXE", "unbreakable-blocks")).toArray(new String[((List) Slimefun.getItemValue("EXPLOSIVE_PICKAXE", "unbreakable-blocks")).size()]): new String[] {"BEDROCK", "BARRIER", "COMMAND", "COMMAND_CHAIN", "COMMAND_REPEATING"}; new SlimefunItem(Categories.TOOLS, SlimefunItems.EXPLOSIVE_PICKAXE, "EXPLOSIVE_PICKAXE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {new ItemStack(Material.TNT), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.TNT), null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}, - new String[] {"unbreakable-blocks"}, new Object[] {Arrays.asList("BEDROCK", "BARRIER", "COMMAND", "COMMAND_CHAIN", "COMMAND_REPEATING")}) + new ItemStack[] {new ItemStack(Material.TNT), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.TNT), null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}, + new String[] {"unbreakable-blocks"}, new Object[] {Arrays.asList("BEDROCK", "BARRIER", "COMMAND", "COMMAND_CHAIN", "COMMAND_REPEATING")}) .register(true, new BlockBreakHandler() { @Override @@ -2160,8 +2188,8 @@ public class SlimefunSetup { SlimefunItem sfItem = BlockStorage.check(b); boolean allow = true; if (sfItem != null && !(sfItem instanceof HandledBlock)) { - if (SlimefunItem.blockhandler.containsKey(sfItem.getName())) { - allow = SlimefunItem.blockhandler.get(sfItem.getName()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK); + if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) { + allow = SlimefunItem.blockhandler.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK); } if (allow) { drops.add(BlockStorage.retrieve(e.getBlock())); @@ -2191,70 +2219,73 @@ public class SlimefunSetup { }); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.AUTOMATED_PANNING_MACHINE, "AUTOMATED_PANNING_MACHINE", - new ItemStack[] {null, null, null, null, new ItemStack(Material.TRAP_DOOR), null, null, new ItemStack(Material.CAULDRON_ITEM), null}, - new ItemStack[] {new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.GRAVEL), new ItemStack(Material.CLAY_BALL), new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE}, Material.TRAP_DOOR) + new ItemStack[] {null, null, null, null, new ItemStack(Material.TRAP_DOOR), null, null, new ItemStack(Material.CAULDRON_ITEM), null}, + new ItemStack[] {new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.GRAVEL), new ItemStack(Material.CLAY_BALL), new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE}, Material.TRAP_DOOR) .register(true, new MultiBlockInteractionHandler() { @Override public boolean onInteract(final Player p, MultiBlock mb, final Block b) { if (mb.isMultiBlock(SlimefunItem.getByID("AUTOMATED_PANNING_MACHINE"))) { - final ItemStack input = p.getItemInHand(); - ItemStack output = null; - if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE"))) output = SlimefunItems.SIFTED_ORE; - else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY"))) output = new ItemStack(Material.CLAY_BALL); - else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.FLINT"))) output = new ItemStack(Material.FLINT); - final ItemStack drop = output; - if (input != null) { - if (input.getType() == Material.GRAVEL) { - PlayerInventory.consumeItemInHand(p); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + final ItemStack input = p.getInventory().getItemInMainHand(); + ItemStack output = null; + if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE"))) output = SlimefunItems.SIFTED_ORE; + else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY"))) output = new ItemStack(Material.CLAY_BALL); + else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.FLINT"))) output = new ItemStack(Material.FLINT); + final ItemStack drop = output; + if (input != null) { + if (input.getType() == Material.GRAVEL) { + PlayerInventory.consumeItemInHand(p); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - if (drop != null) b.getWorld().dropItemNaturally(b.getLocation(), drop); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - return true; + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + if (drop != null) b.getWorld().dropItemNaturally(b.getLocation(), drop); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + return true; + } } + Messages.local.sendTranslation(p, "machines.wrong-item", true); + return true; } - Messages.local.sendTranslation(p, "machines.wrong-item", true); return true; } else return false; @@ -2262,11 +2293,11 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.BOOTS_OF_THE_STOMPER, "BOOTS_OF_THE_STOMPER", RecipeType.ARMOR_FORGE, - new ItemStack[] {null, null, null, new ItemStack(Material.WOOL), null, new ItemStack(Material.WOOL), new ItemStack(Material.PISTON_BASE), null, new ItemStack(Material.PISTON_BASE)}) + new ItemStack[] {null, null, null, new ItemStack(Material.WOOL), null, new ItemStack(Material.WOOL), new ItemStack(Material.PISTON_BASE), null, new ItemStack(Material.PISTON_BASE)}) .register(true); new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_THE_SEEKER, "PICKAXE_OF_THE_SEEKER", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {new ItemStack(Material.COMPASS), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.COMPASS), null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) + new ItemStack[] {new ItemStack(Material.COMPASS), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.COMPASS), null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) .register(true, new ItemInteractionHandler() { @Override @@ -2300,8 +2331,8 @@ public class SlimefunSetup { p.teleport(new Location(p.getWorld(), p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ(), yaw, pitch)); } - if (e.getPlayer().getItemInHand().getEnchantments().containsKey(Enchantment.DURABILITY)) { - if (SlimefunStartup.randomize(100) <= (60 + 40 / (e.getPlayer().getItemInHand().getEnchantmentLevel(Enchantment.DURABILITY) + 1))) PlayerInventory.damageItemInHand(e.getPlayer()); + if (e.getPlayer().getInventory().getItemInMainHand().getEnchantments().containsKey(Enchantment.DURABILITY)) { + if (SlimefunStartup.randomize(100) <= (60 + 40 / (e.getPlayer().getInventory().getItemInMainHand().getEnchantmentLevel(Enchantment.DURABILITY) + 1))) PlayerInventory.damageItemInHand(e.getPlayer()); } else PlayerInventory.damageItemInHand(e.getPlayer()); @@ -2313,174 +2344,177 @@ public class SlimefunSetup { }); new SlimefunBackpack(9, Categories.PORTABLE, SlimefunItems.BACKPACK_SMALL, "SMALL_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_6K, new ItemStack(Material.CHEST), SlimefunItems.GOLD_6K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) + new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_6K, new ItemStack(Material.CHEST), SlimefunItems.GOLD_6K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) .register(true); new SlimefunBackpack(18, Categories.PORTABLE, SlimefunItems.BACKPACK_MEDIUM, "MEDIUM_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_10K, SlimefunItems.BACKPACK_SMALL, SlimefunItems.GOLD_10K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) + new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_10K, SlimefunItems.BACKPACK_SMALL, SlimefunItems.GOLD_10K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) .register(true); new SlimefunBackpack(27, Categories.PORTABLE, SlimefunItems.BACKPACK_LARGE, "LARGE_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_14K, SlimefunItems.BACKPACK_MEDIUM, SlimefunItems.GOLD_14K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) + new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_14K, SlimefunItems.BACKPACK_MEDIUM, SlimefunItems.GOLD_14K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) .register(true); new SlimefunBackpack(36, Categories.PORTABLE, SlimefunItems.WOVEN_BACKPACK, "WOVEN_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CLOTH, null, SlimefunItems.CLOTH, SlimefunItems.GOLD_16K, SlimefunItems.BACKPACK_LARGE, SlimefunItems.GOLD_16K, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH}) + new ItemStack[] {SlimefunItems.CLOTH, null, SlimefunItems.CLOTH, SlimefunItems.GOLD_16K, SlimefunItems.BACKPACK_LARGE, SlimefunItems.GOLD_16K, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH}) .register(true); new SlimefunGadget(Categories.MACHINES_1, SlimefunItems.CRUCIBLE, "CRUCIBLE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack [] {new ItemStack(Material.HARD_CLAY), null, new ItemStack(Material.HARD_CLAY), new ItemStack(Material.HARD_CLAY), null, new ItemStack(Material.HARD_CLAY), new ItemStack(Material.HARD_CLAY), new ItemStack(Material.FLINT_AND_STEEL), new ItemStack(Material.HARD_CLAY)}, - new ItemStack [] {new ItemStack(Material.COBBLESTONE, 16), new ItemStack(Material.LAVA_BUCKET), new ItemStack(Material.LEAVES, 16), new ItemStack(Material.WATER_BUCKET), new ItemStack(Material.HARD_CLAY, 12), new ItemStack(Material.LAVA_BUCKET)}) + new ItemStack [] {new ItemStack(Material.HARD_CLAY), null, new ItemStack(Material.HARD_CLAY), new ItemStack(Material.HARD_CLAY), null, new ItemStack(Material.HARD_CLAY), new ItemStack(Material.HARD_CLAY), new ItemStack(Material.FLINT_AND_STEEL), new ItemStack(Material.HARD_CLAY)}, + new ItemStack [] {new ItemStack(Material.COBBLESTONE, 16), new ItemStack(Material.LAVA_BUCKET), new ItemStack(Material.LEAVES, 16), new ItemStack(Material.WATER_BUCKET), new ItemStack(Material.HARD_CLAY, 12), new ItemStack(Material.LAVA_BUCKET)}) .register(true, new ItemInteractionHandler() { @Override public boolean onRightClick(ItemUseEvent e, final Player p, ItemStack item) { if (e.getClickedBlock() != null) { SlimefunItem machine = BlockStorage.check(e.getClickedBlock()); - if (machine != null && machine.getName().equals("CRUCIBLE")) { - final ItemStack input = p.getItemInHand(); - final Block block = e.getClickedBlock().getRelative(BlockFace.UP); - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (input != null) { - if (SlimefunManager.isItemSimiliar(input, convert, true)) { - e.setCancelled(true); - ItemStack removing = input.clone(); - removing.setAmount(convert.getAmount()); - p.getInventory().removeItem(removing); + if (machine != null && machine.getID().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); + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (input != null) { + if (SlimefunManager.isItemSimiliar(input, convert, true)) { + e.setCancelled(true); + ItemStack removing = input.clone(); + removing.setAmount(convert.getAmount()); + p.getInventory().removeItem(removing); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 7); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 7); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 6); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 6); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 5); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 5); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 4); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 4); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 3); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 3); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 2); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 2); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 1); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 1); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.STATIONARY_LAVA); - block.setData((byte) 0); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 0); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - } - }, 50L); - } - }, 50L); - } - }, 50L); - } - }, 50L); - } - }, 50L); - } - }, 50L); + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 7); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); } - }, 50L); - } - }, 50L); - return true; + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 7); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 6); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 6); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 5); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 5); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 4); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 4); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 3); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 3); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 2); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 2); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 1); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 1); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.STATIONARY_LAVA); + block.setData((byte) 0); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 0); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + } + }, 50L); + } + }, 50L); + } + }, 50L); + } + }, 50L); + } + }, 50L); + } + }, 50L); + } + }, 50L); + } + }, 50L); + return true; + } } } + Messages.local.sendTranslation(p, "machines.wrong-item", true); + return true; } - Messages.local.sendTranslation(p, "machines.wrong-item", true); return true; } } @@ -2489,75 +2523,75 @@ public class SlimefunSetup { }); new SlimefunBackpack(45, Categories.PORTABLE, SlimefunItems.GILDED_BACKPACK, "GILDED_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K, new ItemStack(Material.LEATHER), SlimefunItems.WOVEN_BACKPACK, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K}) + new ItemStack[] {SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K, new ItemStack(Material.LEATHER), SlimefunItems.WOVEN_BACKPACK, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K}) .register(true); new Alloy(Categories.TECH_MISC, SlimefunItems.MAGNET, "MAGNET", - new ItemStack[] {SlimefunItems.NICKEL_INGOT, SlimefunItems.ALUMINUM_DUST, SlimefunItems.IRON_DUST, SlimefunItems.COBALT_INGOT, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.NICKEL_INGOT, SlimefunItems.ALUMINUM_DUST, SlimefunItems.IRON_DUST, SlimefunItems.COBALT_INGOT, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MAGIC, SlimefunItems.INFUSED_MAGNET, "INFUSED_MAGNET", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_2, SlimefunItems.MAGNET, SlimefunItems.ENDER_LUMP_2, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_2, SlimefunItems.MAGNET, SlimefunItems.ENDER_LUMP_2, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}) .register(true); new SlimefunItem(Categories.TOOLS, SlimefunItems.COBALT_PICKAXE, "COBALT_PICKAXE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.COBALT_INGOT, SlimefunItems.COBALT_INGOT, SlimefunItems.COBALT_INGOT, null, SlimefunItems.NICKEL_INGOT, null, null, SlimefunItems.NICKEL_INGOT, null}) + new ItemStack[] {SlimefunItems.COBALT_INGOT, SlimefunItems.COBALT_INGOT, SlimefunItems.COBALT_INGOT, null, SlimefunItems.NICKEL_INGOT, null, null, SlimefunItems.NICKEL_INGOT, null}) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.NECROTIC_SKULL, "NECROTIC_SKULL", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}) + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ESSENCE_OF_AFTERLIFE, "ESSENCE_OF_AFTERLIFE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_EARTH, SlimefunItems.NECROTIC_SKULL, SlimefunItems.RUNE_FIRE, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_WATER, SlimefunItems.ENDER_LUMP_3}) + new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_EARTH, SlimefunItems.NECROTIC_SKULL, SlimefunItems.RUNE_FIRE, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_WATER, SlimefunItems.ENDER_LUMP_3}) .register(true); new SoulboundBackpack(36, Categories.PORTABLE, SlimefunItems.BOUND_BACKPACK, "BOUND_BACKPACK", - new ItemStack[] {SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.GILDED_BACKPACK, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2}) + new ItemStack[] {SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.GILDED_BACKPACK, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2}) .register(true); new JetBoots(SlimefunItems.DURALUMIN_JETBOOTS, "DURALUMIN_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.35) + new ItemStack[] {null, null, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.35) .register(true); new JetBoots(SlimefunItems.SOLDER_JETBOOTS, "SOLDER_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.SOLDER_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.4) + new ItemStack[] {null, null, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.SOLDER_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.4) .register(true); new JetBoots(SlimefunItems.BILLON_JETBOOTS, "BILLON_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.BILLON_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.45) + new ItemStack[] {null, null, null, SlimefunItems.BILLON_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.45) .register(true); new JetBoots(SlimefunItems.STEEL_JETBOOTS, "STEEL_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.5) + new ItemStack[] {null, null, null, SlimefunItems.STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.5) .register(true); new JetBoots(SlimefunItems.DAMASCUS_STEEL_JETBOOTS, "DAMASCUS_STEEL_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.55) + new ItemStack[] {null, null, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.55) .register(true); new JetBoots(SlimefunItems.REINFORCED_ALLOY_JETBOOTS, "REINFORCED_ALLOY_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.6) + new ItemStack[] {null, null, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.6) .register(true); new JetBoots(SlimefunItems.CARBONADO_JETBOOTS, "CARBONADO_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.CARBONADO, SlimefunItems.POWER_CRYSTAL, SlimefunItems.CARBONADO, SlimefunItems.STEEL_THRUSTER, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.7) + new ItemStack[] {null, null, null, SlimefunItems.CARBONADO, SlimefunItems.POWER_CRYSTAL, SlimefunItems.CARBONADO, SlimefunItems.STEEL_THRUSTER, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.7) .register(true); new JetBoots(SlimefunItems.ARMORED_JETBOOTS, "ARMORED_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.STEEL_PLATE, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_PLATE, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.45) + new ItemStack[] {null, null, null, SlimefunItems.STEEL_PLATE, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_PLATE, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.45) .register(true); new SlimefunItem(Categories.WEAPONS, SlimefunItems.SEISMIC_AXE, "SEISMIC_AXE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.STAFF_ELEMENTAL, null, null, SlimefunItems.STAFF_ELEMENTAL, null}) + new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.STAFF_ELEMENTAL, null, null, SlimefunItems.STAFF_ELEMENTAL, null}) .register(true, new ItemInteractionHandler() { @Override @@ -2603,9 +2637,9 @@ public class SlimefunSetup { } for (int i = 0; i < 4; i++) { - if (e.getPlayer().getItemInHand() != null) { - if (e.getPlayer().getItemInHand().getEnchantments().containsKey(Enchantment.DURABILITY)) { - if (SlimefunStartup.randomize(100) <= (60 + 40 / (e.getPlayer().getItemInHand().getEnchantmentLevel(Enchantment.DURABILITY) + 1))) PlayerInventory.damageItemInHand(e.getPlayer()); + if (e.getPlayer().getInventory().getItemInMainHand() != null) { + if (e.getPlayer().getInventory().getItemInMainHand().getEnchantments().containsKey(Enchantment.DURABILITY)) { + if (SlimefunStartup.randomize(100) <= (60 + 40 / (e.getPlayer().getInventory().getItemInMainHand().getEnchantmentLevel(Enchantment.DURABILITY) + 1))) PlayerInventory.damageItemInHand(e.getPlayer()); } else PlayerInventory.damageItemInHand(e.getPlayer()); } @@ -2617,12 +2651,12 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_VEIN_MINING, "PICKAXE_OF_VEIN_MINING", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {new ItemStack(Material.EMERALD_ORE), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.EMERALD_ORE), null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) + new ItemStack[] {new ItemStack(Material.EMERALD_ORE), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.EMERALD_ORE), null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) .register(true, new BlockBreakHandler() { @Override public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getItemInHand(), SlimefunItems.PICKAXE_OF_VEIN_MINING, true)) { + if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.PICKAXE_OF_VEIN_MINING, true)) { if (e.getBlock().getType().toString().endsWith("_ORE")) { List blocks = new ArrayList(); Vein.calculate(e.getBlock().getLocation(), e.getBlock().getLocation(), blocks, 16); @@ -2642,53 +2676,53 @@ public class SlimefunSetup { }); new SoulboundItem(Categories.WEAPONS, SlimefunItems.SOULBOUND_SWORD, "SOULBOUND_SWORD", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_SWORD), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_SWORD), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); new SoulboundItem(Categories.WEAPONS, SlimefunItems.SOULBOUND_BOW, "SOULBOUND_BOW", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.BOW), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.BOW), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); new SoulboundItem(Categories.TOOLS, SlimefunItems.SOULBOUND_PICKAXE, "SOULBOUND_PICKAXE", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_PICKAXE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_PICKAXE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); new SoulboundItem(Categories.TOOLS, SlimefunItems.SOULBOUND_AXE, "SOULBOUND_AXE", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_AXE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_AXE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); new ExcludedSoulboundTool(Categories.TOOLS, SlimefunItems.SOULBOUND_SHOVEL, "SOULBOUND_SHOVEL", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_SPADE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_SPADE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); new ExcludedSoulboundTool(Categories.TOOLS, SlimefunItems.SOULBOUND_HOE, "SOULBOUND_HOE", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_HOE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_HOE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_HELMET, "SOULBOUND_HELMET", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_HELMET), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_HELMET), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_CHESTPLATE, "SOULBOUND_CHESTPLATE", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_CHESTPLATE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_CHESTPLATE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_LEGGINGS, "SOULBOUND_LEGGINGS", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_LEGGINGS), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_LEGGINGS), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_BOOTS, "SOULBOUND_BOOTS", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_BOOTS), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_BOOTS), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.JUICER, "JUICER", - new ItemStack[] {null, new ItemStack(Material.GLASS), null, null, new ItemStack(Material.NETHER_FENCE), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, - new ItemStack[] { - new ItemStack(Material.APPLE), SlimefunItems.APPLE_JUICE, - new ItemStack(Material.MELON), SlimefunItems.MELON_JUICE, - new ItemStack(Material.CARROT_ITEM), SlimefunItems.CARROT_JUICE, - new ItemStack(Material.PUMPKIN), SlimefunItems.PUMPKIN_JUICE}, - Material.NETHER_FENCE) + new ItemStack[] {null, new ItemStack(Material.GLASS), null, null, new ItemStack(Material.NETHER_FENCE), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, + new ItemStack[] { + new ItemStack(Material.APPLE), SlimefunItems.APPLE_JUICE, + new ItemStack(Material.MELON), SlimefunItems.MELON_JUICE, + new ItemStack(Material.CARROT_ITEM), SlimefunItems.CARROT_JUICE, + new ItemStack(Material.PUMPKIN), SlimefunItems.PUMPKIN_JUICE}, + Material.NETHER_FENCE) .register(true, new MultiBlockInteractionHandler() { @Override @@ -2696,27 +2730,29 @@ public class SlimefunSetup { SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("JUICER"); if (mb.isMultiBlock(machine)) { - if (Slimefun.hasUnlocked(p, SlimefunItems.JUICER, true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { - ItemStack adding = RecipeType.getRecipeOutput(machine, convert); - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(1); - inv.removeItem(removing); - inv.addItem(adding); - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, SlimefunItems.JUICER, true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { + ItemStack adding = RecipeType.getRecipeOutput(machine, convert); + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(1); + inv.removeItem(removing); + inv.addItem(adding); + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; } } + Messages.local.sendTranslation(p, "machines.unknown-material", true); } - Messages.local.sendTranslation(p, "machines.unknown-material", true); } return true; } @@ -2725,31 +2761,31 @@ public class SlimefunSetup { }); new Juice(Categories.FOOD, SlimefunItems.APPLE_JUICE, "APPLE_JUICE", RecipeType.JUICER, - new ItemStack[] {null, null, null, null, new ItemStack(Material.APPLE), null, null, null, null}) + new ItemStack[] {null, null, null, null, new ItemStack(Material.APPLE), null, null, null, null}) .register(true); new Juice(Categories.FOOD, SlimefunItems.CARROT_JUICE, "CARROT_JUICE", RecipeType.JUICER, - new ItemStack[] {null, null, null, null, new ItemStack(Material.CARROT_ITEM), null, null, null, null}) + new ItemStack[] {null, null, null, null, new ItemStack(Material.CARROT_ITEM), null, null, null, null}) .register(true); new Juice(Categories.FOOD, SlimefunItems.MELON_JUICE, "MELON_JUICE", RecipeType.JUICER, - new ItemStack[] {null, null, null, null, new ItemStack(Material.MELON), null, null, null, null}) + new ItemStack[] {null, null, null, null, new ItemStack(Material.MELON), null, null, null, null}) .register(true); new Juice(Categories.FOOD, SlimefunItems.PUMPKIN_JUICE, "PUMPKIN_JUICE", RecipeType.JUICER, - new ItemStack[] {null, null, null, null, new ItemStack(Material.PUMPKIN), null, null, null, null}) + new ItemStack[] {null, null, null, null, new ItemStack(Material.PUMPKIN), null, null, null, null}) .register(true); new Juice(Categories.FOOD, SlimefunItems.GOLDEN_APPLE_JUICE, "GOLDEN_APPLE_JUICE", RecipeType.JUICER, - new ItemStack[] {new ItemStack(Material.GOLDEN_APPLE), null, null, null, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.GOLDEN_APPLE), null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.BROKEN_SPAWNER, "BROKEN_SPAWNER", new RecipeType(SlimefunItems.PICKAXE_OF_CONTAINMENT), - new ItemStack[] {null, null, null, null, new ItemStack(Material.MOB_SPAWNER), null, null, null, null}) + new ItemStack[] {null, null, null, null, new ItemStack(Material.MOB_SPAWNER), null, null, null, null}) .register(true); new SlimefunItem(Categories.MAGIC, SlimefunItems.REPAIRED_SPAWNER, "REINFORCED_SPAWNER", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.RUNE_ENDER, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.BROKEN_SPAWNER, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.RUNE_ENDER}) + new ItemStack[] {SlimefunItems.RUNE_ENDER, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.BROKEN_SPAWNER, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.RUNE_ENDER}) .register(true, new BlockPlaceHandler() { @Override @@ -2771,80 +2807,80 @@ public class SlimefunSetup { }); new EnhancedFurnace(1, 1, 1, SlimefunItems.ENHANCED_FURNACE, "ENHANCED_FURNACE", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(2, 1, 1, SlimefunItems.ENHANCED_FURNACE_2, "ENHANCED_FURNACE_2", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(2, 2, 1, SlimefunItems.ENHANCED_FURNACE_3, "ENHANCED_FURNACE_3", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_2, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_2, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(3, 2, 1, SlimefunItems.ENHANCED_FURNACE_4, "ENHANCED_FURNACE_4", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(3, 2, 2, SlimefunItems.ENHANCED_FURNACE_5, "ENHANCED_FURNACE_5", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(3, 3, 2, SlimefunItems.ENHANCED_FURNACE_6, "ENHANCED_FURNACE_6", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(4, 3, 2, SlimefunItems.ENHANCED_FURNACE_7, "ENHANCED_FURNACE_7", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(4, 4, 2, SlimefunItems.ENHANCED_FURNACE_8, "ENHANCED_FURNACE_8", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_7, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_7, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(5, 4, 2, SlimefunItems.ENHANCED_FURNACE_9, "ENHANCED_FURNACE_9", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(5, 5, 2, SlimefunItems.ENHANCED_FURNACE_10, "ENHANCED_FURNACE_10", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(5, 5, 3, SlimefunItems.ENHANCED_FURNACE_11, "ENHANCED_FURNACE_11", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new EnhancedFurnace(10, 10, 3, SlimefunItems.REINFORCED_FURNACE, "REINFORCED_FURNACE", - new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_11, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT}) + new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_11, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT}) .register(true); new EnhancedFurnace(20, 10, 3, SlimefunItems.CARBONADO_EDGED_FURNACE, "CARBONADO_EDGED_FURNACE", - new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.CARBONADO, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_FURNACE, SlimefunItems.HEATING_COIL, SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO}) + new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.CARBONADO, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_FURNACE, SlimefunItems.HEATING_COIL, SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.ELECTRO_MAGNET, "ELECTRO_MAGNET", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.NICKEL_INGOT, SlimefunItems.MAGNET, SlimefunItems.COBALT_INGOT, null, SlimefunItems.BATTERY, null, null, null, null}) + new ItemStack[] {SlimefunItems.NICKEL_INGOT, SlimefunItems.MAGNET, SlimefunItems.COBALT_INGOT, null, SlimefunItems.BATTERY, null, null, null, null}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.ELECTRIC_MOTOR, "ELECTRIC_MOTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) + new ItemStack[] {SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.HEATING_COIL, "HEATING_COIL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) + new ItemStack[] {SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) .register(true); - + @SuppressWarnings("unchecked") final String[] blockPlacerBlacklist = Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks") != null ? ((List) Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks")).toArray(new String[((List) Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks")).size()]): new String[] {"STRUCTURE_BLOCK"}; new SlimefunItem(Categories.MACHINES_1, SlimefunItems.BLOCK_PLACER, "BLOCK_PLACER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GOLD_4K, new ItemStack(Material.PISTON_BASE), SlimefunItems.GOLD_4K, new ItemStack(Material.IRON_INGOT), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.IRON_INGOT), SlimefunItems.GOLD_4K, new ItemStack(Material.PISTON_BASE), SlimefunItems.GOLD_4K}, - new String[] {"unplaceable-blocks"}, new Object[] {Arrays.asList("STRUCTURE_BLOCK")}) + new ItemStack[] {SlimefunItems.GOLD_4K, new ItemStack(Material.PISTON_BASE), SlimefunItems.GOLD_4K, new ItemStack(Material.IRON_INGOT), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.IRON_INGOT), SlimefunItems.GOLD_4K, new ItemStack(Material.PISTON_BASE), SlimefunItems.GOLD_4K}, + new String[] {"unplaceable-blocks"}, new Object[] {Arrays.asList("STRUCTURE_BLOCK")}) .register(true, new AutonomousMachineHandler() { @Override public boolean onBlockDispense(final BlockDispenseEvent e, Block dispenser, final Dispenser d, Block block, Block chest, SlimefunItem machine) { - if (machine.getName().equalsIgnoreCase("BLOCK_PLACER")) { + if (machine.getID().equalsIgnoreCase("BLOCK_PLACER")) { e.setCancelled(true); if ((block.getType() == null || block.getType() == Material.AIR) && e.getItem().getType().isBlock()) { for(String blockType : blockPlacerBlacklist) { @@ -2852,13 +2888,13 @@ public class SlimefunSetup { return false; } } - + SlimefunItem sfItem = SlimefunItem.getByItem(e.getItem()); if (sfItem != null) { - if (!SlimefunItem.blockhandler.containsKey(sfItem.getName())) { + if (!SlimefunItem.blockhandler.containsKey(sfItem.getID())) { block.setType(e.getItem().getType()); block.setData(e.getItem().getData().getData()); - BlockStorage.store(block, sfItem.getName()); + 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 { @@ -2893,7 +2929,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MAGIC, SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION, "SCROLL_OF_DIMENSIONAL_TELEPOSITION", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null}) + new ItemStack[] {null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null}) .register(true, new ItemInteractionHandler() { @Override @@ -2913,7 +2949,7 @@ public class SlimefunSetup { }); new SlimefunBow(SlimefunItems.EXPLOSIVE_BOW, "EXPLOSIVE_BOW", - new ItemStack[] {null, new ItemStack(Material.STICK), new ItemStack(Material.SULPHUR), SlimefunItems.STAFF_FIRE, null, SlimefunItems.SULFATE, null, new ItemStack(Material.STICK), new ItemStack(Material.SULPHUR)}) + new ItemStack[] {null, new ItemStack(Material.STICK), new ItemStack(Material.SULPHUR), SlimefunItems.STAFF_FIRE, null, SlimefunItems.SULFATE, null, new ItemStack(Material.STICK), new ItemStack(Material.SULPHUR)}) .register(true, new BowShootHandler() { @Override @@ -2931,7 +2967,7 @@ public class SlimefunSetup { }); new SlimefunBow(SlimefunItems.ICY_BOW, "ICY_BOW", - new ItemStack[] {null, new ItemStack(Material.STICK), new ItemStack(Material.ICE), SlimefunItems.STAFF_WATER, null, new ItemStack(Material.PACKED_ICE), null, new ItemStack(Material.STICK), new ItemStack(Material.ICE)}) + new ItemStack[] {null, new ItemStack(Material.STICK), new ItemStack(Material.ICE), SlimefunItems.STAFF_WATER, null, new ItemStack(Material.PACKED_ICE), null, new ItemStack(Material.STICK), new ItemStack(Material.ICE)}) .register(true, new BowShootHandler() { @Override @@ -2948,7 +2984,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MAGIC, SlimefunItems.TOME_OF_KNOWLEDGE_SHARING, "TOME_OF_KNOWLEDGE_SHARING", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new ItemStack(Material.FEATHER), null, new ItemStack(Material.INK_SACK), SlimefunItems.MAGICAL_BOOK_COVER, new ItemStack(Material.GLASS_BOTTLE), null, new ItemStack(Material.BOOK_AND_QUILL), null}) + new ItemStack[] {null, new ItemStack(Material.FEATHER), null, new ItemStack(Material.INK_SACK), SlimefunItems.MAGICAL_BOOK_COVER, new ItemStack(Material.GLASS_BOTTLE), null, new ItemStack(Material.BOOK_AND_QUILL), null}) .register(true, new ItemInteractionHandler() { @Override @@ -2977,7 +3013,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MAGIC, SlimefunItems.FLASK_OF_KNOWLEDGE, "FLASK_OF_KNOWLEDGE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, null, null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.THIN_GLASS), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, null}, new CustomItem(SlimefunItems.FLASK_OF_KNOWLEDGE, 8)) + new ItemStack[] {null, null, null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.THIN_GLASS), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, null}, new CustomItem(SlimefunItems.FLASK_OF_KNOWLEDGE, 8)) .register(true, new ItemInteractionHandler() { @Override @@ -2994,71 +3030,71 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.BIRTHDAY, new CustomItem(new MaterialData(Material.CAKE), "&bBirthday Cake"), "BIRTHDAY_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.TORCH), null, new ItemStack(Material.SUGAR), new ItemStack(Material.CAKE), new ItemStack(Material.SUGAR), null, null, null}) + new ItemStack[] {null, new ItemStack(Material.TORCH), null, new ItemStack(Material.SUGAR), new ItemStack(Material.CAKE), new ItemStack(Material.SUGAR), null, null, null}) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_MILK, "CHRISTMAS_MILK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.MILK_BUCKET), new ItemStack(Material.GLASS_BOTTLE), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_MILK, 4)) + new ItemStack[] {new ItemStack(Material.MILK_BUCKET), new ItemStack(Material.GLASS_BOTTLE), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_MILK, 4)) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, "CHRISTMAS_CHOCOLATE_MILK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CHRISTMAS_MILK, new MaterialData(Material.INK_SACK, (byte) 3).toItemStack(1), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, 2)) + new ItemStack[] {SlimefunItems.CHRISTMAS_MILK, new MaterialData(Material.INK_SACK, (byte) 3).toItemStack(1), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, 2)) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_EGG_NOG, "CHRISTMAS_EGG_NOG", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CHRISTMAS_MILK, new ItemStack(Material.EGG), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_EGG_NOG, 2)) + new ItemStack[] {SlimefunItems.CHRISTMAS_MILK, new ItemStack(Material.EGG), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_EGG_NOG, 2)) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_APPLE_CIDER, "CHRISTMAS_APPLE_CIDER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.APPLE_JUICE, new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_CIDER, 2)) + new ItemStack[] {SlimefunItems.APPLE_JUICE, new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_CIDER, 2)) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_COOKIE, "CHRISTMAS_COOKIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.COOKIE), new ItemStack(Material.SUGAR), new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_COOKIE, 16)) + new ItemStack[] {new ItemStack(Material.COOKIE), new ItemStack(Material.SUGAR), new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_COOKIE, 16)) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_FRUIT_CAKE, "CHRISTMAS_FRUIT_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.APPLE), new ItemStack(Material.MELON), new ItemStack(Material.SUGAR), null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_FRUIT_CAKE, 4)) + new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.APPLE), new ItemStack(Material.MELON), new ItemStack(Material.SUGAR), null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_FRUIT_CAKE, 4)) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_APPLE_PIE, "CHRISTMAS_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE, "CHRISTMAS_HOT_CHOCOLATE", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, null, null, null, null, null, null, null, null}, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE) + new ItemStack[] {SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, null, null, null, null, null, null, null, null}, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CAKE, "CHRISTMAS_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.SUGAR), SlimefunItems.WHEAT_FLOUR, new ItemStack(Material.MILK_BUCKET), null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CAKE, 4)) + new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.SUGAR), SlimefunItems.WHEAT_FLOUR, new ItemStack(Material.MILK_BUCKET), null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CAKE, 4)) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CARAMEL, "CHRISTMAS_CARAMEL", RecipeType.SMELTERY, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL, 4)) + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL, 4)) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CARAMEL_APPLE, "CHRISTMAS_CARAMEL_APPLE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.SUGAR), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 2)) + new ItemStack[] {null, new ItemStack(Material.SUGAR), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 2)) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CHOCOLATE_APPLE, "CHRISTMAS_CHOCOLATE_APPLE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new CustomItem(Material.INK_SACK, 3), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 2)) + new ItemStack[] {null, new CustomItem(Material.INK_SACK, 3), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 2)) .register(true); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_PRESENT, "CHRISTMAS_PRESENT", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new ItemStack(Material.NAME_TAG), null, new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1)}) + new ItemStack[] {null, new ItemStack(Material.NAME_TAG), null, new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1)}) .register(true); new SlimefunItem(Categories.EASTER, SlimefunItems.EASTER_CARROT_PIE, "EASTER_CARROT_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.CARROT_ITEM), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.EASTER_CARROT_PIE, 2)) + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.CARROT_ITEM), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.EASTER_CARROT_PIE, 2)) .register(true); new SlimefunItem(Categories.EASTER, SlimefunItems.CHRISTMAS_APPLE_PIE, "EASTER_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) .register(true); new SlimefunItem(Categories.EASTER, SlimefunItems.EASTER_EGG, "EASTER_EGG", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1), new ItemStack(Material.EGG), new MaterialData(Material.INK_SACK, (byte) 13).toItemStack(1), null, null, null}, new CustomItem(SlimefunItems.EASTER_EGG, 2)) + new ItemStack[] {null, null, null, new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1), new ItemStack(Material.EGG), new MaterialData(Material.INK_SACK, (byte) 13).toItemStack(1), null, null, null}, new CustomItem(SlimefunItems.EASTER_EGG, 2)) .register(true, new ItemInteractionHandler() { @Override @@ -3092,33 +3128,33 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MISC, SlimefunItems.REINFORCED_PLATE, "REINFORCED_PLATE", RecipeType.COMPRESSOR, - new ItemStack[] {new CustomItem(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), null, null, null, null, null, null, null, null}) + new ItemStack[] {new CustomItem(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.HARDENED_GLASS, "HARDENED_GLASS", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), SlimefunItems.REINFORCED_PLATE, new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS)}, - new CustomItem(SlimefunItems.HARDENED_GLASS, 16)) + new ItemStack[] {new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), SlimefunItems.REINFORCED_PLATE, new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS)}, + new CustomItem(SlimefunItems.HARDENED_GLASS, 16)) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.SOLAR_ARRAY, "SOLAR_ARRAY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS}) + new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.COOLING_UNIT, "COOLING_UNIT", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.ICE), new ItemStack(Material.ICE), new ItemStack(Material.ICE), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.ICE), new ItemStack(Material.ICE), new ItemStack(Material.ICE)}) + new ItemStack[] {new ItemStack(Material.ICE), new ItemStack(Material.ICE), new ItemStack(Material.ICE), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.ICE), new ItemStack(Material.ICE), new ItemStack(Material.ICE)}) .register(true); new SlimefunBackpack(27, Categories.PORTABLE, SlimefunItems.COOLER, "COOLER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.COOLING_UNIT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT}) + new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.COOLING_UNIT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.WITHER_PROOF_OBSIDIAN, "WITHER_PROOF_OBSIDIAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.HARDENED_GLASS, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT}, - new CustomItem(SlimefunItems.WITHER_PROOF_OBSIDIAN, 4)) + new ItemStack[] {SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.HARDENED_GLASS, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT}, + new CustomItem(SlimefunItems.WITHER_PROOF_OBSIDIAN, 4)) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ANCIENT_PEDESTAL, "ANCIENT_PEDESTAL", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.STONE), null, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}, new CustomItem(SlimefunItems.ANCIENT_PEDESTAL, 4)) + new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.STONE), null, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}, new CustomItem(SlimefunItems.ANCIENT_PEDESTAL, 4)) .register(true); SlimefunItem.registerBlockHandler("ANCIENT_PEDESTAL", new SlimefunBlockHandler() { @@ -3140,13 +3176,13 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MAGIC, SlimefunItems.ANCIENT_ALTAR, "ANCIENT_ALTAR", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new ItemStack(Material.ENCHANTMENT_TABLE), null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}) + new ItemStack[] {null, new ItemStack(Material.ENCHANTMENT_TABLE), null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}) .register(true); // Slimefun 4 new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.ENERGY_REGULATOR, "ENERGY_REGULATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT}) + new ItemStack[] {SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT}) .register(true, new BlockTicker() { @Override @@ -3178,31 +3214,31 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MISC, SlimefunItems.DUCT_TAPE, "DUCT_TAPE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_DUST, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.WOOL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.PAPER), new ItemStack(Material.PAPER), new ItemStack(Material.PAPER)}, new CustomItem(SlimefunItems.DUCT_TAPE, 2)) + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_DUST, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.WOOL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.PAPER), new ItemStack(Material.PAPER), new ItemStack(Material.PAPER)}, new CustomItem(SlimefunItems.DUCT_TAPE, 2)) .register(true); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SMALL_CAPACITOR, "SMALL_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.DURALUMIN_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.SULFATE, new ItemStack(Material.REDSTONE), SlimefunItems.DURALUMIN_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.DURALUMIN_INGOT}) + new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.DURALUMIN_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.SULFATE, new ItemStack(Material.REDSTONE), SlimefunItems.DURALUMIN_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.DURALUMIN_INGOT}) .registerDistibutingCapacitor(true, 128); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.MEDIUM_CAPACITOR, "MEDIUM_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BILLON_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.BILLON_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.SMALL_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.BILLON_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.BILLON_INGOT}) + new ItemStack[] {SlimefunItems.BILLON_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.BILLON_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.SMALL_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.BILLON_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.BILLON_INGOT}) .registerDistibutingCapacitor(true, 512); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.BIG_CAPACITOR, "BIG_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.STEEL_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.MEDIUM_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.STEEL_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.STEEL_INGOT}) + new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.STEEL_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.MEDIUM_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.STEEL_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.STEEL_INGOT}) .registerDistibutingCapacitor(true, 1024); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.LARGE_CAPACITOR, "LARGE_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.BIG_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.REINFORCED_ALLOY_INGOT}) + new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.BIG_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.REINFORCED_ALLOY_INGOT}) .registerDistibutingCapacitor(true, 8192); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.CARBONADO_EDGED_CAPACITOR, "CARBONADO_EDGED_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.CARBONADO, new ItemStack(Material.REDSTONE), SlimefunItems.LARGE_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.CARBONADO, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.CARBONADO}) + new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.CARBONADO, new ItemStack(Material.REDSTONE), SlimefunItems.LARGE_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.CARBONADO, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.CARBONADO}) .registerDistibutingCapacitor(true, 65536); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR, "SOLAR_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_INGOT, null, SlimefunItems.ALUMINUM_INGOT, null}) + new ItemStack[] {SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_INGOT, null, SlimefunItems.ALUMINUM_INGOT, null}) .register(true, new EnergyTicker() { @Override @@ -3219,7 +3255,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR_2, "SOLAR_GENERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR}) + new ItemStack[] {SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR}) .register(true, new EnergyTicker() { @Override @@ -3236,7 +3272,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR_3, "SOLAR_GENERATOR_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.CARBONADO, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2}) + new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.CARBONADO, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2}) .register(true, new EnergyTicker() { @Override @@ -3253,7 +3289,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR_4, "SOLAR_GENERATOR_4", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3}) + new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3}) .register(true, new EnergyTicker() { @Override @@ -3270,11 +3306,11 @@ public class SlimefunSetup { }); new ChargingBench(Categories.ELECTRICITY, SlimefunItems.CHARGING_BENCH, "CHARGING_BENCH", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.BATTERY, new ItemStack(Material.WORKBENCH), SlimefunItems.BATTERY, null, SlimefunItems.SMALL_CAPACITOR, null}) + new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.BATTERY, new ItemStack(Material.WORKBENCH), SlimefunItems.BATTERY, null, SlimefunItems.SMALL_CAPACITOR, null}) .registerChargeableBlock(true, 128); new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE, "ELECTRIC_FURNACE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.FURNACE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { + new ItemStack[] {null, new ItemStack(Material.FURNACE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { @Override public ItemStack getProgressBar() { @@ -3299,7 +3335,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 64); new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE_2, "ELECTRIC_FURNACE_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_FURNACE, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON}) { + new ItemStack[] {null, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_FURNACE, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON}) { @Override public ItemStack getProgressBar() { @@ -3324,7 +3360,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 128); new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE_3, "ELECTRIC_FURNACE_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_FURNACE_2, SlimefunItems.STEEL_INGOT, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON}) { + new ItemStack[] {null, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_FURNACE_2, SlimefunItems.STEEL_INGOT, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON}) { @Override public ItemStack getProgressBar() { @@ -3349,7 +3385,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 128); new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN, "ELECTRIC_GOLD_PAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, new ItemStack(Material.FLINT), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.FLINT), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT}) { + new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, new ItemStack(Material.FLINT), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.FLINT), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT}) { @Override public int getEnergyConsumption() { @@ -3363,7 +3399,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 128); new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN_2, "ELECTRIC_GOLD_PAN_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, new ItemStack(Material.IRON_INGOT), SlimefunItems.ELECTRIC_GOLD_PAN, new ItemStack(Material.IRON_INGOT), SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT}) { + new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, new ItemStack(Material.IRON_INGOT), SlimefunItems.ELECTRIC_GOLD_PAN, new ItemStack(Material.IRON_INGOT), SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT}) { @Override public int getEnergyConsumption() { @@ -3377,7 +3413,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 128); new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN_3, "ELECTRIC_GOLD_PAN_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRIC_GOLD_PAN_2, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COBALT_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.COBALT_INGOT}) { + new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRIC_GOLD_PAN_2, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COBALT_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.COBALT_INGOT}) { @Override public int getEnergyConsumption() { @@ -3391,7 +3427,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 512); new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER, "ELECTRIC_DUST_WASHER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_GOLD_PAN, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) { + new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_GOLD_PAN, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) { @Override public int getEnergyConsumption() { @@ -3405,7 +3441,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 128); new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER_2, "ELECTRIC_DUST_WASHER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT}) { + new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT}) { @Override public int getEnergyConsumption() { @@ -3419,7 +3455,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 128); new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER_3, "ELECTRIC_DUST_WASHER_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_DUST_WASHER_2, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CORINTHIAN_BRONZE_INGOT}) { + new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_DUST_WASHER_2, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CORINTHIAN_BRONZE_INGOT}) { @Override public int getEnergyConsumption() { @@ -3433,7 +3469,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 512); new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY, "ELECTRIC_INGOT_FACTORY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.FLINT_AND_STEEL), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT}) { + new ItemStack[] {null, new ItemStack(Material.FLINT_AND_STEEL), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT}) { @Override public ItemStack getProgressBar() { @@ -3458,7 +3494,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, "ELECTRIC_INGOT_FACTORY_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.BRASS_INGOT}) { + new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.BRASS_INGOT}) { @Override public ItemStack getProgressBar() { @@ -3483,7 +3519,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_3, "ELECTRIC_INGOT_FACTORY_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.BRASS_INGOT}) { + new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.BRASS_INGOT}) { @Override public ItemStack getProgressBar() { @@ -3508,7 +3544,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 512); new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE, "ELECTRIFIED_CRUCIBLE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.CRUCIBLE, SlimefunItems.LEAD_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.LEAD_INGOT}) { + new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.CRUCIBLE, SlimefunItems.LEAD_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.LEAD_INGOT}) { @Override public int getEnergyConsumption() { @@ -3523,7 +3559,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 1024); new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE_2, "ELECTRIFIED_CRUCIBLE_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.ELECTRIFIED_CRUCIBLE, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) { + new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.ELECTRIFIED_CRUCIBLE, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) { @Override public int getEnergyConsumption() { @@ -3538,7 +3574,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 1024); new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE_3, "ELECTRIFIED_CRUCIBLE_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.ELECTRIFIED_CRUCIBLE_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.STEEL_PLATE, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT}) { + new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.ELECTRIFIED_CRUCIBLE_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.STEEL_PLATE, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT}) { @Override public int getEnergyConsumption() { @@ -3553,7 +3589,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 1024); new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER, "ELECTRIC_ORE_GRINDER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { + new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { @Override public void registerDefaultRecipes() { @@ -3587,7 +3623,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 128); new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER_2, "ELECTRIC_ORE_GRINDER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_ORE_GRINDER, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GILDED_IRON}) { + new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_ORE_GRINDER, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GILDED_IRON}) { @Override public void registerDefaultRecipes() { @@ -3621,7 +3657,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 512); new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER, "HEATED_PRESSURE_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, new ItemStack(Material.GLASS), SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) { + new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, new ItemStack(Material.GLASS), SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) { @Override public ItemStack getProgressBar() { @@ -3641,7 +3677,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 128); new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER_2, "HEATED_PRESSURE_CHAMBER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_ALLOY_INGOT}) { + new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_ALLOY_INGOT}) { @Override public ItemStack getProgressBar() { @@ -3661,7 +3697,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_PULVERIZER, "ELECTRIC_INGOT_PULVERIZER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.ELECTRIC_ORE_GRINDER, null, SlimefunItems.LEAD_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}){ + new ItemStack[] {null, SlimefunItems.ELECTRIC_ORE_GRINDER, null, SlimefunItems.LEAD_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}){ @Override public String getInventoryTitle() { return "&bElectric Ingot Pulverizer"; @@ -3704,7 +3740,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 512); new AGenerator(Categories.ELECTRICITY, SlimefunItems.COAL_GENERATOR, "COAL_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, SlimefunItems.NICKEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.NICKEL_INGOT, null, SlimefunItems.NICKEL_INGOT, null}) { + new ItemStack[] {SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, SlimefunItems.NICKEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.NICKEL_INGOT, null, SlimefunItems.NICKEL_INGOT, null}) { @Override public void registerDefaultRecipes() { @@ -3748,7 +3784,7 @@ public class SlimefunSetup { }.registerUnrechargeableBlock(true, 64); new AGenerator(Categories.ELECTRICITY, SlimefunItems.BIO_REACTOR, "BIO_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HEATING_COIL, SlimefunItems.COMPOSTER, SlimefunItems.HEATING_COIL, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}) { + new ItemStack[] {SlimefunItems.HEATING_COIL, SlimefunItems.COMPOSTER, SlimefunItems.HEATING_COIL, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}) { @Override public void registerDefaultRecipes() { @@ -3810,15 +3846,15 @@ public class SlimefunSetup { }.registerUnrechargeableBlock(true, 128); new AutoEnchanter(Categories.ELECTRICITY, SlimefunItems.AUTO_ENCHANTER, "AUTO_ENCHANTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.ENCHANTMENT_TABLE), null, SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN}) + new ItemStack[] {null, new ItemStack(Material.ENCHANTMENT_TABLE), null, SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN}) .registerChargeableBlock(true, 128); new AutoDisenchanter(Categories.ELECTRICITY, SlimefunItems.AUTO_DISENCHANTER, "AUTO_DISENCHANTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.REDSTONE), new ItemStack(Material.ANVIL), new ItemStack(Material.REDSTONE), SlimefunItems.CARBONADO, SlimefunItems.AUTO_ENCHANTER, SlimefunItems.CARBONADO, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN}) + new ItemStack[] {new ItemStack(Material.REDSTONE), new ItemStack(Material.ANVIL), new ItemStack(Material.REDSTONE), SlimefunItems.CARBONADO, SlimefunItems.AUTO_ENCHANTER, SlimefunItems.CARBONADO, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN}) .registerChargeableBlock(true, 128); new AutoAnvil(Categories.ELECTRICITY, SlimefunItems.AUTO_ANVIL, "AUTO_ANVIL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.ANVIL), null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK)}) { + new ItemStack[] {null, new ItemStack(Material.ANVIL), null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK)}) { @Override public int getRepairFactor() { @@ -3833,7 +3869,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 128); new AutoAnvil(Categories.ELECTRICITY, SlimefunItems.AUTO_ANVIL_2, "AUTO_ANVIL_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.AUTO_ANVIL, null, SlimefunItems.STEEL_PLATE, SlimefunItems.HEATING_COIL, SlimefunItems.STEEL_PLATE, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK)}) { + new ItemStack[] {null, SlimefunItems.AUTO_ANVIL, null, SlimefunItems.STEEL_PLATE, SlimefunItems.HEATING_COIL, SlimefunItems.STEEL_PLATE, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK)}) { @Override public int getRepairFactor() { @@ -3848,7 +3884,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.MULTIMETER, "MULTIMETER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.COPPER_INGOT, null, SlimefunItems.COPPER_INGOT, null, SlimefunItems.REDSTONE_ALLOY, null, null, SlimefunItems.GOLD_6K, null}) + new ItemStack[] {SlimefunItems.COPPER_INGOT, null, SlimefunItems.COPPER_INGOT, null, SlimefunItems.REDSTONE_ALLOY, null, null, SlimefunItems.GOLD_6K, null}) .register(true, new ItemInteractionHandler() { @Override @@ -3868,15 +3904,15 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MISC, SlimefunItems.PLASTIC_SHEET, "PLASTIC_SHEET", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[] {null, null, null, null, SlimefunItems.BUCKET_OF_OIL, null, null, null, null}) + new ItemStack[] {null, null, null, null, SlimefunItems.BUCKET_OF_OIL, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.ANDROID_MEMORY_CORE, "ANDROID_MEMORY_CORE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BRASS_INGOT, new MaterialData(Material.STAINED_GLASS, (byte) 1).toItemStack(1), SlimefunItems.BRASS_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.TIN_DUST, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BRASS_INGOT, new MaterialData(Material.STAINED_GLASS, (byte) 1).toItemStack(1), SlimefunItems.BRASS_INGOT}) + new ItemStack[] {SlimefunItems.BRASS_INGOT, new MaterialData(Material.STAINED_GLASS, (byte) 1).toItemStack(1), SlimefunItems.BRASS_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.TIN_DUST, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BRASS_INGOT, new MaterialData(Material.STAINED_GLASS, (byte) 1).toItemStack(1), SlimefunItems.BRASS_INGOT}) .register(true); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER, "GPS_TRANSMITTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.STEEL_INGOT, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT}) + new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.STEEL_INGOT, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT}) .registerChargeableBlock(true, 16, new BlockTicker() { @Override @@ -3914,7 +3950,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_2, "GPS_TRANSMITTER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.CARBON, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER}) + new ItemStack[] {SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.CARBON, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER}) .registerChargeableBlock(true, 64, new BlockTicker() { @Override @@ -3954,7 +3990,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_3, "GPS_TRANSMITTER_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.CARBONADO, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2}) + new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.CARBONADO, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2}) .registerChargeableBlock(true, 256, new BlockTicker() { @Override @@ -3994,7 +4030,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_4, "GPS_TRANSMITTER_4", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.NICKEL_INGOT, SlimefunItems.CARBONADO, SlimefunItems.NICKEL_INGOT, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3}) + new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.NICKEL_INGOT, SlimefunItems.CARBONADO, SlimefunItems.NICKEL_INGOT, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3}) .registerChargeableBlock(true, 1024, new BlockTicker() { @Override @@ -4034,14 +4070,14 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_CONTROL_PANEL, "GPS_CONTROL_PANEL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COBALT_INGOT, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.COBALT_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT}) + new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COBALT_INGOT, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.COBALT_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT}) .register(true, new ItemInteractionHandler() { @Override public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { if (e.getClickedBlock() == null) return false; SlimefunItem item = BlockStorage.check(e.getClickedBlock()); - if (item == null || !item.getName().equals("GPS_CONTROL_PANEL")) return false; + if (item == null || !item.getID().equals("GPS_CONTROL_PANEL")) return false; e.setCancelled(true); try { Slimefun.getGPSNetwork().openTransmitterControlPanel(p); @@ -4053,15 +4089,15 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_MARKER_TOOL, "GPS_MARKER_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), SlimefunItems.BASIC_CIRCUIT_BOARD, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), new ItemStack(Material.REDSTONE), SlimefunItems.REDSTONE_ALLOY, new ItemStack(Material.REDSTONE)}) + new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), SlimefunItems.BASIC_CIRCUIT_BOARD, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), new ItemStack(Material.REDSTONE), SlimefunItems.REDSTONE_ALLOY, new ItemStack(Material.REDSTONE)}) .register(true); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_EMERGENCY_TRANSMITTER, "GPS_EMERGENCY_TRANSMITTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, null, SlimefunItems.GPS_TRANSMITTER, null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, null, SlimefunItems.GPS_TRANSMITTER, null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID, "PROGRAMMABLE_ANDROID", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COAL_GENERATOR, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) { + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COAL_GENERATOR, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) { @Override public AndroidType getAndroidType() { @@ -4082,7 +4118,7 @@ public class SlimefunSetup { .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_MINER, "PROGRAMMABLE_ANDROID_MINER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_PICKAXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_PICKAXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public AndroidType getAndroidType() { @@ -4103,7 +4139,7 @@ public class SlimefunSetup { .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, "PROGRAMMABLE_ANDROID_FARMER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public AndroidType getAndroidType() { @@ -4124,7 +4160,7 @@ public class SlimefunSetup { .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER, "PROGRAMMABLE_ANDROID_WOODCUTTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_AXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_AXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_AXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_AXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public AndroidType getAndroidType() { @@ -4145,7 +4181,7 @@ public class SlimefunSetup { .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, "PROGRAMMABLE_ANDROID_FISHERMAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public AndroidType getAndroidType() { @@ -4166,7 +4202,7 @@ public class SlimefunSetup { .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, "PROGRAMMABLE_ANDROID_BUTCHER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public AndroidType getAndroidType() { @@ -4187,16 +4223,16 @@ public class SlimefunSetup { .register(true); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.ANDROID_INTERFACE_ITEMS, "ANDROID_INTERFACE_ITEMS", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.BASIC_CIRCUIT_BOARD, new MaterialData(Material.STAINED_GLASS, (byte) 11).toItemStack(1), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.BASIC_CIRCUIT_BOARD, new MaterialData(Material.STAINED_GLASS, (byte) 11).toItemStack(1), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) .register(true); new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.ANDROID_INTERFACE_FUEL, "ANDROID_INTERFACE_FUEL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, new MaterialData(Material.STAINED_GLASS, (byte) 14).toItemStack(1), SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, new MaterialData(Material.STAINED_GLASS, (byte) 14).toItemStack(1), SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2, "PROGRAMMABLE_ANDROID_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COMBUSTION_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.POWER_CRYSTAL, SlimefunItems.PLASTIC_SHEET}) { + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COMBUSTION_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.POWER_CRYSTAL, SlimefunItems.PLASTIC_SHEET}) { @Override public AndroidType getAndroidType() { @@ -4217,7 +4253,7 @@ public class SlimefunSetup { .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN, "PROGRAMMABLE_ANDROID_2_FISHERMAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public AndroidType getAndroidType() { @@ -4238,7 +4274,7 @@ public class SlimefunSetup { .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER, "PROGRAMMABLE_ANDROID_2_BUTCHER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public AndroidType getAndroidType() { @@ -4259,7 +4295,7 @@ public class SlimefunSetup { .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER, "PROGRAMMABLE_ANDROID_2_FARMER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public AndroidType getAndroidType() { @@ -4281,7 +4317,7 @@ public class SlimefunSetup { new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_3, "PROGRAMMABLE_ANDROID_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.NUCLEAR_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.CHEST), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BLISTERING_INGOT_3}) { + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.NUCLEAR_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.CHEST), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BLISTERING_INGOT_3}) { @Override public AndroidType getAndroidType() { @@ -4302,7 +4338,7 @@ public class SlimefunSetup { .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN, "PROGRAMMABLE_ANDROID_3_FISHERMAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public AndroidType getAndroidType() { @@ -4323,7 +4359,7 @@ public class SlimefunSetup { .register(true); new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER, "PROGRAMMABLE_ANDROID_3_BUTCHER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER_3, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER_3, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public AndroidType getAndroidType() { @@ -4344,35 +4380,35 @@ public class SlimefunSetup { .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.BLANK_RUNE, "BLANK_RUNE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.OBSIDIAN), SlimefunItems.MAGIC_LUMP_1,new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE)}) + new ItemStack[] {new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.OBSIDIAN), SlimefunItems.MAGIC_LUMP_1,new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE)}) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_AIR, "ANCIENT_RUNE_AIR", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.FEATHER), new ItemStack(Material.GHAST_TEAR), SlimefunItems.BLANK_RUNE, new ItemStack(Material.GHAST_TEAR) ,new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.FEATHER)}, new CustomItem(SlimefunItems.RUNE_AIR, 4)) + new ItemStack[] {new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.FEATHER), new ItemStack(Material.GHAST_TEAR), SlimefunItems.BLANK_RUNE, new ItemStack(Material.GHAST_TEAR) ,new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.FEATHER)}, new CustomItem(SlimefunItems.RUNE_AIR, 4)) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_EARTH, "ANCIENT_RUNE_EARTH", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.DIRT), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE), new ItemStack(Material.OBSIDIAN), SlimefunItems.BLANK_RUNE, new ItemStack(Material.OBSIDIAN) ,new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.DIRT)}, new CustomItem(SlimefunItems.RUNE_EARTH, 4)) + new ItemStack[] {new ItemStack(Material.DIRT), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE), new ItemStack(Material.OBSIDIAN), SlimefunItems.BLANK_RUNE, new ItemStack(Material.OBSIDIAN) ,new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.DIRT)}, new CustomItem(SlimefunItems.RUNE_EARTH, 4)) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_FIRE, "ANCIENT_RUNE_FIRE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.FIREBALL), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.FIREBALL), new ItemStack(Material.BLAZE_POWDER), SlimefunItems.RUNE_EARTH, new ItemStack(Material.FLINT_AND_STEEL) ,new ItemStack(Material.FIREBALL), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.FIREBALL)}, new CustomItem(SlimefunItems.RUNE_FIRE, 4)) + new ItemStack[] {new ItemStack(Material.FIREBALL), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.FIREBALL), new ItemStack(Material.BLAZE_POWDER), SlimefunItems.RUNE_EARTH, new ItemStack(Material.FLINT_AND_STEEL) ,new ItemStack(Material.FIREBALL), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.FIREBALL)}, new CustomItem(SlimefunItems.RUNE_FIRE, 4)) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_WATER, "ANCIENT_RUNE_WATER", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.RAW_FISH), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.WATER_BUCKET), new ItemStack(Material.SAND), SlimefunItems.BLANK_RUNE, new ItemStack(Material.SAND) ,new ItemStack(Material.WATER_BUCKET), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.RAW_FISH)}, new CustomItem(SlimefunItems.RUNE_WATER, 4)) + new ItemStack[] {new ItemStack(Material.RAW_FISH), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.WATER_BUCKET), new ItemStack(Material.SAND), SlimefunItems.BLANK_RUNE, new ItemStack(Material.SAND) ,new ItemStack(Material.WATER_BUCKET), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.RAW_FISH)}, new CustomItem(SlimefunItems.RUNE_WATER, 4)) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_ENDER, "ANCIENT_RUNE_ENDER", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENDER_PEARL), new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.BLANK_RUNE, new ItemStack(Material.EYE_OF_ENDER) ,new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENDER_PEARL)}, new CustomItem(SlimefunItems.RUNE_ENDER, 6)) + new ItemStack[] {new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENDER_PEARL), new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.BLANK_RUNE, new ItemStack(Material.EYE_OF_ENDER) ,new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENDER_PEARL)}, new CustomItem(SlimefunItems.RUNE_ENDER, 6)) .register(true); new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_RAINBOW, "ANCIENT_RUNE_RAINBOW", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.MAGIC_LUMP_3, new MaterialData(Material.INK_SACK, (byte) 9).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_ENDER, new ItemStack(Material.WOOL) , new MaterialData(Material.INK_SACK, (byte) 11).toItemStack(1), SlimefunItems.ENDER_LUMP_3, new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1)}) + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.MAGIC_LUMP_3, new MaterialData(Material.INK_SACK, (byte) 9).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_ENDER, new ItemStack(Material.WOOL) , new MaterialData(Material.INK_SACK, (byte) 11).toItemStack(1), SlimefunItems.ENDER_LUMP_3, new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1)}) .register(true); new SlimefunItem(Categories.MAGIC, SlimefunItems.INFERNAL_BONEMEAL, "INFERNAL_BONEMEAL", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.NETHER_STALK), SlimefunItems.RUNE_EARTH, new ItemStack(Material.NETHER_STALK), SlimefunItems.MAGIC_LUMP_2, new MaterialData(Material.INK_SACK, (byte) 15).toItemStack(1), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.NETHER_STALK), new ItemStack(Material.BLAZE_POWDER), new ItemStack(Material.NETHER_STALK)}, new CustomItem(SlimefunItems.INFERNAL_BONEMEAL, 8)) + new ItemStack[] {new ItemStack(Material.NETHER_STALK), SlimefunItems.RUNE_EARTH, new ItemStack(Material.NETHER_STALK), SlimefunItems.MAGIC_LUMP_2, new MaterialData(Material.INK_SACK, (byte) 15).toItemStack(1), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.NETHER_STALK), new ItemStack(Material.BLAZE_POWDER), new ItemStack(Material.NETHER_STALK)}, new CustomItem(SlimefunItems.INFERNAL_BONEMEAL, 8)) .register(true, new ItemInteractionHandler() { @Override @@ -4392,90 +4428,90 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MAGIC, SlimefunItems.ELYTRA_SCALE, "ELYTRA_SCALE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_ENDER, new ItemStack(Material.FEATHER), SlimefunItems.RUNE_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3}) + new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_ENDER, new ItemStack(Material.FEATHER), SlimefunItems.RUNE_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3}) .register(true); new VanillaItem(Categories.MAGIC, SlimefunItems.ELYTRA, "ELYTRA", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, new ItemStack(Material.LEATHER_CHESTPLATE), SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE}) + new ItemStack[] {SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, new ItemStack(Material.LEATHER_CHESTPLATE), SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE}) .register(true); new SlimefunItem(Categories.MAGIC, SlimefunItems.INFUSED_ELYTRA, "INFUSED_ELYTRA", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE}) + new ItemStack[] {SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE}) .register(true); new SoulboundItem(Categories.MAGIC, SlimefunItems.SOULBOUND_ELYTRA, "SOULBOUND_ELYTRA", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.ELYTRA, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.FLASK_OF_KNOWLEDGE}) + new ItemStack[] {SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.ELYTRA, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.FLASK_OF_KNOWLEDGE}) .register(true); RainbowTicker rainbow = new RainbowTicker(); new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_WOOL, "RAINBOW_WOOL", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL)}, new CustomItem(SlimefunItems.RAINBOW_WOOL, 8)) + new ItemStack[] {new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL)}, new CustomItem(SlimefunItems.RAINBOW_WOOL, 8)) .register(true, rainbow); new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_GLASS, "RAINBOW_GLASS", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS)}, new CustomItem(SlimefunItems.RAINBOW_GLASS, 8)) + new ItemStack[] {new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS)}, new CustomItem(SlimefunItems.RAINBOW_GLASS, 8)) .register(true, rainbow); new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_GLASS_PANE, "RAINBOW_GLASS_PANE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE, 8)) + new ItemStack[] {new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE, 8)) .register(true, rainbow); new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_CLAY, "RAINBOW_CLAY", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY)}, new CustomItem(SlimefunItems.RAINBOW_CLAY, 8)) + new ItemStack[] {new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY)}, new CustomItem(SlimefunItems.RAINBOW_CLAY, 8)) .register(true, rainbow); RainbowTicker xmas = new RainbowTicker(13, 14); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_WOOL_XMAS, "RAINBOW_WOOL_XMAS", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_WOOL_XMAS, 2)) + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_WOOL_XMAS, 2)) .register(true, xmas); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_GLASS_XMAS, "RAINBOW_GLASS_XMAS", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_XMAS, 2)) + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_XMAS, 2)) .register(true, xmas); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_GLASS_PANE_XMAS, "RAINBOW_GLASS_PANE_XMAS", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE_XMAS, 2)) + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE_XMAS, 2)) .register(true, xmas); new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_CLAY_XMAS, "RAINBOW_CLAY_XMAS", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_CLAY_XMAS, 2)) + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_CLAY_XMAS, 2)) .register(true, xmas); RainbowTicker valentine = new RainbowTicker(2, 6, 10); new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_WOOL_VALENTINE, "RAINBOW_WOOL_VALENTINE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_WOOL_VALENTINE, 2)) + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_WOOL_VALENTINE, 2)) .register(true, valentine); new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_GLASS_VALENTINE, "RAINBOW_GLASS_VALENTINE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_VALENTINE, 2)) + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_VALENTINE, 2)) .register(true, valentine); new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_GLASS_PANE_VALENTINE, "RAINBOW_GLASS_PANE_VALENTINE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE_VALENTINE, 2)) + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE_VALENTINE, 2)) .register(true, valentine); new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_CLAY_VALENTINE, "RAINBOW_CLAY_VALENTINE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_CLAY_VALENTINE, 2)) + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_CLAY_VALENTINE, 2)) .register(true, valentine); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.WITHER_PROOF_GLASS, "WITHER_PROOF_GLASS", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.HARDENED_GLASS, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT}, - new CustomItem(SlimefunItems.WITHER_PROOF_GLASS, 4)) + new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.HARDENED_GLASS, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT}, + new CustomItem(SlimefunItems.WITHER_PROOF_GLASS, 4)) .register(true); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_GEO_SCANNER, "GPS_GEO_SCANNER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET}) + new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET}) .register(true, new ItemInteractionHandler() { @Override public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { if (e.getClickedBlock() == null) return false; SlimefunItem item = BlockStorage.check(e.getClickedBlock()); - if (item == null || !item.getName().equals("GPS_GEO_SCANNER")) return false; + if (item == null || !item.getID().equals("GPS_GEO_SCANNER")) return false; e.setCancelled(true); try { Slimefun.getGPSNetwork().scanChunk(p, e.getClickedBlock().getChunk()); @@ -4487,7 +4523,7 @@ public class SlimefunSetup { }); new OilPump(Categories.GPS, SlimefunItems.OIL_PUMP, "OIL_PUMP", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, null, new ItemStack(Material.BUCKET), null}) { + new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, null, new ItemStack(Material.BUCKET), null}) { @Override public int getEnergyConsumption() { @@ -4502,7 +4538,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 200); new NetherDrill(Categories.GPS, SlimefunItems.NETHER_DRILL, "NETHER_DRILL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[]{SlimefunItems.LEAD_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.OIL_PUMP, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.BIG_CAPACITOR, SlimefunItems.LEAD_INGOT}){ + new ItemStack[]{SlimefunItems.LEAD_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.OIL_PUMP, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.BIG_CAPACITOR, SlimefunItems.LEAD_INGOT}){ @Override public int getSpeed() { return 1; @@ -4515,19 +4551,19 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 1024); new SlimefunItem(Categories.RESOURCES, SlimefunItems.BUCKET_OF_OIL, "BUCKET_OF_OIL", new RecipeType(SlimefunItems.OIL_PUMP), - new ItemStack[] {null, null, null, null, new ItemStack(Material.BUCKET), null, null, null, null}) + new ItemStack[] {null, null, null, null, new ItemStack(Material.BUCKET), null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.BUCKET_OF_FUEL, "BUCKET_OF_FUEL", new RecipeType(SlimefunItems.REFINERY), - new ItemStack[] {null, null, null, null, SlimefunItems.BUCKET_OF_OIL, null, null, null, null}) + new ItemStack[] {null, null, null, null, SlimefunItems.BUCKET_OF_OIL, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.NETHER_ICE, "NETHER_ICE", new RecipeType(SlimefunItems.NETHER_DRILL), - new ItemStack[] {null, null, null, null, null, null, null, null}) + new ItemStack[] {null, null, null, null, null, null, null, null}) .register(true); new Refinery(Categories.ELECTRICITY, SlimefunItems.REFINERY, "REFINERY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.HARDENED_GLASS, new ItemStack(Material.PISTON_BASE), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PISTON_BASE)}) { + new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.HARDENED_GLASS, new ItemStack(Material.PISTON_BASE), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PISTON_BASE)}) { @Override public int getEnergyConsumption() { @@ -4542,7 +4578,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new AGenerator(Categories.ELECTRICITY, SlimefunItems.LAVA_GENERATOR, "LAVA_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GOLD_16K, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL}) { + new ItemStack[] {null, SlimefunItems.GOLD_16K, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL}) { @Override public void registerDefaultRecipes() { @@ -4567,7 +4603,7 @@ public class SlimefunSetup { }.registerUnrechargeableBlock(true, 512); new AGenerator(Categories.ELECTRICITY, SlimefunItems.COMBUSTION_REACTOR, "COMBUSTION_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL}) { + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL}) { @Override public void registerDefaultRecipes() { @@ -4593,11 +4629,11 @@ public class SlimefunSetup { }.registerUnrechargeableBlock(true, 256); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TELEPORTER_PYLON, "GPS_TELEPORTER_PYLON", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.HEATING_COIL, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT}, new CustomItem(SlimefunItems.GPS_TELEPORTER_PYLON, 8)) + new ItemStack[] {SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.HEATING_COIL, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT}, new CustomItem(SlimefunItems.GPS_TELEPORTER_PYLON, 8)) .register(true, new RainbowTicker(9, 10)); new Teleporter(Categories.GPS, SlimefunItems.GPS_TELEPORTATION_MATRIX, "GPS_TELEPORTATION_MATRIX", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.GPS_CONTROL_PANEL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.GPS_TELEPORTER_PYLON}) { + new ItemStack[] {SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.GPS_CONTROL_PANEL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.GPS_TELEPORTER_PYLON}) { @Override @@ -4609,11 +4645,11 @@ public class SlimefunSetup { .register(true); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED, "GPS_ACTIVATION_DEVICE_SHARED", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.STONE_PLATE), null, new ItemStack(Material.REDSTONE), SlimefunItems.GPS_TRANSMITTER, new ItemStack(Material.REDSTONE), SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT}) + new ItemStack[] {null, new ItemStack(Material.STONE_PLATE), null, new ItemStack(Material.REDSTONE), SlimefunItems.GPS_TRANSMITTER, new ItemStack(Material.REDSTONE), SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT}) .register(true); new SlimefunItem(Categories.GPS, SlimefunItems.GPS_ACTIVATION_DEVICE_PERSONAL, "GPS_ACTIVATION_DEVICE_PERSONAL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.LEAD_INGOT, null, SlimefunItems.COBALT_INGOT, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED, SlimefunItems.COBALT_INGOT, null, SlimefunItems.LEAD_INGOT, null}) + new ItemStack[] {null, SlimefunItems.LEAD_INGOT, null, SlimefunItems.COBALT_INGOT, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED, SlimefunItems.COBALT_INGOT, null, SlimefunItems.LEAD_INGOT, null}) .register(true); SlimefunItem.registerBlockHandler("GPS_ACTIVATION_DEVICE_PERSONAL", new SlimefunBlockHandler() { @@ -4630,14 +4666,14 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.TECH, SlimefunItems.HOLOGRAM_PROJECTOR, "HOLOGRAM_PROJECTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.POWER_CRYSTAL, null, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}, new CustomItem(SlimefunItems.HOLOGRAM_PROJECTOR, 3)) + new ItemStack[] {null, SlimefunItems.POWER_CRYSTAL, null, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}, new CustomItem(SlimefunItems.HOLOGRAM_PROJECTOR, 3)) .register(true, new ItemInteractionHandler() { @Override public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { if (e.getClickedBlock() == null) return false; SlimefunItem item = BlockStorage.check(e.getClickedBlock()); - if (item == null || !item.getName().equals("HOLOGRAM_PROJECTOR")) return false; + if (item == null || !item.getID().equals("HOLOGRAM_PROJECTOR")) return false; e.setCancelled(true); if (BlockStorage.getBlockInfo(e.getClickedBlock(), "owner").equals(p.getUniqueId().toString())) { @@ -4670,7 +4706,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.MAGIC, SlimefunItems.INFUSED_HOPPER, "INFUSED_HOPPER", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.RUNE_EARTH, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_ENDER, SlimefunItems.INFUSED_MAGNET, SlimefunItems.RUNE_ENDER, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_EARTH, new ItemStack(Material.OBSIDIAN)}) + new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.RUNE_EARTH, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_ENDER, SlimefunItems.INFUSED_MAGNET, SlimefunItems.RUNE_ENDER, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_EARTH, new ItemStack(Material.OBSIDIAN)}) .register(true, new BlockTicker() { @Override @@ -4719,24 +4755,24 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT, "BLISTERING_INGOT", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.URANIUM, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.URANIUM, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT_2, "BLISTERING_INGOT_2", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.BLISTERING_INGOT, SlimefunItems.CARBONADO, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.BLISTERING_INGOT, SlimefunItems.CARBONADO, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT_3, "BLISTERING_INGOT_3", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.BLISTERING_INGOT_2,new ItemStack(Material.NETHER_STAR), null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.BLISTERING_INGOT_2,new ItemStack(Material.NETHER_STAR), null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.ENRICHED_NETHER_ICE, "ENRICHED_NETHER_ICE", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[]{SlimefunItems.NETHER_ICE, SlimefunItems.PLUTONIUM, null, null, null, null, null, null, null}) + new ItemStack[]{SlimefunItems.NETHER_ICE, SlimefunItems.PLUTONIUM, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.GPS, SlimefunItems.ELEVATOR, "ELEVATOR_PLATE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.STONE_PLATE), null, new ItemStack(Material.PISTON_BASE), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PISTON_BASE), SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT}, - new CustomItem(SlimefunItems.ELEVATOR, 2)) + new ItemStack[] {null, new ItemStack(Material.STONE_PLATE), null, new ItemStack(Material.PISTON_BASE), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PISTON_BASE), SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT}, + new CustomItem(SlimefunItems.ELEVATOR, 2)) .register(true, new ItemInteractionHandler() { @Override @@ -4744,7 +4780,7 @@ public class SlimefunSetup { if (e.getClickedBlock() == null) return false; SlimefunItem item = BlockStorage.check(e.getClickedBlock()); if (item == null) return false; - if (!item.getName().equals("ELEVATOR_PLATE")) return false; + if (!item.getID().equals("ELEVATOR_PLATE")) return false; if (BlockStorage.getBlockInfo(e.getClickedBlock(), "owner").equals(p.getUniqueId().toString())) Elevator.openEditor(p, e.getClickedBlock()); return true; @@ -4766,7 +4802,7 @@ public class SlimefunSetup { }); new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR, "FOOD_FABRICATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BILLON_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.CAN, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {SlimefunItems.BILLON_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.CAN, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public ItemStack getProgressBar() { @@ -4791,7 +4827,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR_2, "FOOD_FABRICATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) { + new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) { @Override public ItemStack getProgressBar() { @@ -4816,47 +4852,47 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 512); new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD2, "ORGANIC_FOOD_WHEAT", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.WHEAT), null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.WHEAT), null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD3, "ORGANIC_FOOD_CARROT", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.CARROT_ITEM), null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.CARROT_ITEM), null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD4, "ORGANIC_FOOD_POTATO", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.POTATO_ITEM), null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.POTATO_ITEM), null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD5, "ORGANIC_FOOD_SEEDS", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.SEEDS), null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.SEEDS), null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD6, "ORGANIC_FOOD_BEETROOT", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.BEETROOT), null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.BEETROOT), null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD7, "ORGANIC_FOOD_MELON", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.MELON), null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.MELON), null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD8, "ORGANIC_FOOD_APPLE", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.APPLE), null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.APPLE), null, null, null, null, null, null, null}) .register(true); new AutoBreeder(Categories.ELECTRICITY, SlimefunItems.AUTO_BREEDER, "AUTO_BREEDER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GOLD_18K, SlimefunItems.CAN, SlimefunItems.GOLD_18K, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.HAY_BLOCK), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.LEAD_INGOT}) + new ItemStack[] {SlimefunItems.GOLD_18K, SlimefunItems.CAN, SlimefunItems.GOLD_18K, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.HAY_BLOCK), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.LEAD_INGOT}) .registerChargeableBlock(true, 1024); new AnimalGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, "ANIMAL_GROWTH_ACCELERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ORGANIC_FOOD2, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.AUTO_BREEDER, SlimefunItems.REINFORCED_ALLOY_INGOT}) + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ORGANIC_FOOD2, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.AUTO_BREEDER, SlimefunItems.REINFORCED_ALLOY_INGOT}) .registerChargeableBlock(true, 1024); new XPCollector(Categories.ELECTRICITY, SlimefunItems.XP_COLLECTOR, "XP_COLLECTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.AUTO_ENCHANTER, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRONZE_INGOT}) + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.AUTO_ENCHANTER, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRONZE_INGOT}) .registerChargeableBlock(true, 1024); new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER, "FOOD_COMPOSTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.CAN, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.CAN, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public ItemStack getProgressBar() { @@ -4881,7 +4917,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER_2, "FOOD_COMPOSTER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_COMPOSTER, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) { + new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_COMPOSTER, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) { @Override public ItemStack getProgressBar() { @@ -4906,35 +4942,35 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER2, "FERTILIZER_WHEAT", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD2, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ORGANIC_FOOD2, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER3, "FERTILIZER_CARROT", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD3, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ORGANIC_FOOD3, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER4, "FERTILIZER_POTATO", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD4, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ORGANIC_FOOD4, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER5, "FERTILIZER_SEEDS", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD5, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ORGANIC_FOOD5, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER6, "FERTILIZER_BEETROOT", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD6, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ORGANIC_FOOD6, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER7, "FERTILIZER_MELON", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD7, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ORGANIC_FOOD7, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER8, "FERTILIZER_APPLE", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD8, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.ORGANIC_FOOD8, null, null, null, null, null, null, null, null}) .register(true); new CropGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.CROP_GROWTH_ACCELERATOR, "CROP_GROWTH_ACCELERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, SlimefunItems.ELECTRO_MAGNET}) + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, SlimefunItems.ELECTRO_MAGNET}) { @Override @@ -4955,7 +4991,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 1024); new CropGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.CROP_GROWTH_ACCELERATOR_2, "CROP_GROWTH_ACCELERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CROP_GROWTH_ACCELERATOR, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.ELECTRO_MAGNET}) + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CROP_GROWTH_ACCELERATOR, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.ELECTRO_MAGNET}) { @Override @@ -4976,7 +5012,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 1024); new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER, "FREEZER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PACKED_ICE), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COOLING_UNIT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.COOLING_UNIT}) { + new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PACKED_ICE), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COOLING_UNIT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.COOLING_UNIT}) { @Override public ItemStack getProgressBar() { @@ -5001,7 +5037,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER_2, "FREEZER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.FREEZER, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COOLING_UNIT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.COOLING_UNIT}) { + new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.FREEZER, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COOLING_UNIT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.COOLING_UNIT}) { @Override public ItemStack getProgressBar() { @@ -5026,35 +5062,35 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.REACTOR_COOLANT_CELL, "REACTOR_COOLANT_CELL", new RecipeType(SlimefunItems.FREEZER), - new ItemStack[] {new ItemStack(Material.PACKED_ICE), null, null, null, null, null, null, null, null}) + new ItemStack[] {new ItemStack(Material.PACKED_ICE), null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.TECH_MISC, SlimefunItems.NETHER_ICE_COOLANT_CELL, "NETHER_ICE_COOLANT_CELL", new RecipeType(SlimefunItems.HEATED_PRESSURE_CHAMBER), - new ItemStack[]{SlimefunItems.ENRICHED_NETHER_ICE, null, null, null, null, null, null, null, null}) + new ItemStack[]{SlimefunItems.ENRICHED_NETHER_ICE, null, null, null, null, null, null, null, null}) .register(true); new SlimefunItem(Categories.RESOURCES, SlimefunItems.NEPTUNIUM, "NEPTUNIUM", new RecipeType(SlimefunItems.NUCLEAR_REACTOR), - new ItemStack[] {SlimefunItems.URANIUM, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.URANIUM, null, null, null, null, null, null, null, null}) .register(true); SlimefunItem.setRadioactive(SlimefunItems.NEPTUNIUM); new SlimefunItem(Categories.RESOURCES, SlimefunItems.PLUTONIUM, "PLUTONIUM", new RecipeType(SlimefunItems.NUCLEAR_REACTOR), - new ItemStack[] {SlimefunItems.NEPTUNIUM, null, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.NEPTUNIUM, null, null, null, null, null, null, null, null}) .register(true); SlimefunItem.setRadioactive(SlimefunItems.PLUTONIUM); new SlimefunItem(Categories.RESOURCES, SlimefunItems.BOOSTED_URANIUM, "BOOSTED_URANIUM", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.PLUTONIUM, SlimefunItems.URANIUM, null, null, null, null, null, null, null}) + new ItemStack[] {SlimefunItems.PLUTONIUM, SlimefunItems.URANIUM, null, null, null, null, null, null, null}) .register(true); SlimefunItem.setRadioactive(SlimefunItems.BOOSTED_URANIUM); new AReactor(Categories.ELECTRICITY, SlimefunItems.NUCLEAR_REACTOR, "NUCLEAR_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CARBONADO_EDGED_CAPACITOR, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.REINFORCED_PLATE, SlimefunItems.COOLING_UNIT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT}){ + new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CARBONADO_EDGED_CAPACITOR, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.REINFORCED_PLATE, SlimefunItems.COOLING_UNIT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT}){ - @Override + @Override public String getInventoryTitle() { return "&2Nuclear Reactor"; } @@ -5085,15 +5121,15 @@ public class SlimefunSetup { } } - @Override - public ItemStack getCoolant() { - return SlimefunItems.REACTOR_COOLANT_CELL; - } + @Override + public ItemStack getCoolant() { + return SlimefunItems.REACTOR_COOLANT_CELL; + } } .registerChargeableBlock(true, 16384); new AReactor(Categories.ELECTRICITY, SlimefunItems.NETHERSTAR_REACTOR, "NETHERSTAR_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[]{SlimefunItems.BOOSTED_URANIUM, SlimefunItems.CARBONADO_EDGED_CAPACITOR, SlimefunItems.BOOSTED_URANIUM, SlimefunItems.REINFORCED_PLATE, new ItemStack(Material.NETHER_STAR), SlimefunItems.REINFORCED_PLATE, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CORINTHIAN_BRONZE_INGOT}){ + new ItemStack[]{SlimefunItems.BOOSTED_URANIUM, SlimefunItems.CARBONADO_EDGED_CAPACITOR, SlimefunItems.BOOSTED_URANIUM, SlimefunItems.REINFORCED_PLATE, new ItemStack(Material.NETHER_STAR), SlimefunItems.REINFORCED_PLATE, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CORINTHIAN_BRONZE_INGOT}){ @Override public String getInventoryTitle() { @@ -5124,12 +5160,12 @@ public class SlimefunSetup { }, 0); } - @Override - public ItemStack getCoolant() { - return SlimefunItems.NETHER_ICE_COOLANT_CELL; - } + @Override + public ItemStack getCoolant() { + return SlimefunItems.NETHER_ICE_COOLANT_CELL; + } - @Override + @Override public ItemStack getProgressBar() { return new ItemStack(Material.NETHER_STAR); } @@ -5137,11 +5173,11 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 32768); new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_MOTOR, "CARGO_MOTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS, SlimefunItems.SILVER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS}, new CustomItem(SlimefunItems.CARGO_MOTOR, 4)) + new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS, SlimefunItems.SILVER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS}, new CustomItem(SlimefunItems.CARGO_MOTOR, 4)) .register(true); new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_MANAGER, "CARGO_MANAGER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.HOLOGRAM_PROJECTOR, null, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CARGO_MOTOR, SlimefunItems.REINFORCED_PLATE, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.ALUMINUM_BRONZE_INGOT}) + new ItemStack[] {null, SlimefunItems.HOLOGRAM_PROJECTOR, null, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CARGO_MOTOR, SlimefunItems.REINFORCED_PLATE, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.ALUMINUM_BRONZE_INGOT}) .register(true, new BlockTicker() { @Override @@ -5163,7 +5199,7 @@ public class SlimefunSetup { public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { if (e.getClickedBlock() == null) return false; SlimefunItem item = BlockStorage.check(e.getClickedBlock()); - if (item == null || !item.getName().equals("CARGO_MANAGER")) return false; + if (item == null || !item.getID().equals("CARGO_MANAGER")) return false; e.setCancelled(true); if (BlockStorage.getBlockInfo(e.getClickedBlock(), "visualizer") == null) { @@ -5192,7 +5228,7 @@ public class SlimefunSetup { }); new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_NODE, "CARGO_NODE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT}, new CustomItem(SlimefunItems.CARGO_NODE, 4)) + new ItemStack[] {SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT}, new CustomItem(SlimefunItems.CARGO_NODE, 4)) .register(true, new ItemInteractionHandler() { @Override @@ -5200,7 +5236,7 @@ public class SlimefunSetup { if (e.getClickedBlock() == null) return false; SlimefunItem item = BlockStorage.check(e.getClickedBlock()); if (item == null) return false; - if (!item.getName().equals("CARGO_NODE")) return false; + if (!item.getID().equals("CARGO_NODE")) return false; if (CargoNet.isConnected(e.getClickedBlock())) { p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7Connected: " + "&2\u2714")); @@ -5213,19 +5249,19 @@ public class SlimefunSetup { }); new CargoInputNode(Categories.CARGO, SlimefunItems.CARGO_INPUT, "CARGO_NODE_INPUT", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.HOPPER), null, SlimefunItems.BILLON_INGOT, SlimefunItems.CARGO_NODE, SlimefunItems.BILLON_INGOT, null, new ItemStack(Material.HOPPER), null}, new CustomItem(SlimefunItems.CARGO_INPUT, 2)) + new ItemStack[] {null, new ItemStack(Material.HOPPER), null, SlimefunItems.BILLON_INGOT, SlimefunItems.CARGO_NODE, SlimefunItems.BILLON_INGOT, null, new ItemStack(Material.HOPPER), null}, new CustomItem(SlimefunItems.CARGO_INPUT, 2)) .register(true); new CargoOutputNode(Categories.CARGO, SlimefunItems.CARGO_OUTPUT, "CARGO_NODE_OUTPUT", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.HOPPER), null, SlimefunItems.BRASS_INGOT, SlimefunItems.CARGO_NODE, SlimefunItems.BRASS_INGOT, null, new ItemStack(Material.HOPPER), null}, new CustomItem(SlimefunItems.CARGO_OUTPUT, 2)) + new ItemStack[] {null, new ItemStack(Material.HOPPER), null, SlimefunItems.BRASS_INGOT, SlimefunItems.CARGO_NODE, SlimefunItems.BRASS_INGOT, null, new ItemStack(Material.HOPPER), null}, new CustomItem(SlimefunItems.CARGO_OUTPUT, 2)) .register(true); new AdvancedCargoOutputNode(Categories.CARGO, SlimefunItems.CARGO_OUTPUT_ADVANCED, "CARGO_NODE_OUTPUT_ADVANCED", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.CARGO_MOTOR, null, SlimefunItems.COBALT_INGOT, SlimefunItems.CARGO_OUTPUT, SlimefunItems.COBALT_INGOT, null, SlimefunItems.CARGO_MOTOR, null}, new CustomItem(SlimefunItems.CARGO_OUTPUT_ADVANCED)) + new ItemStack[] {null, SlimefunItems.CARGO_MOTOR, null, SlimefunItems.COBALT_INGOT, SlimefunItems.CARGO_OUTPUT, SlimefunItems.COBALT_INGOT, null, SlimefunItems.CARGO_MOTOR, null}, new CustomItem(SlimefunItems.CARGO_OUTPUT_ADVANCED)) .register(true); new AutomatedCraftingChamber(Categories.ELECTRICITY, SlimefunItems.AUTOMATED_CRAFTING_CHAMBER, "AUTOMATED_CRAFTING_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.WORKBENCH), null, SlimefunItems.CARGO_MOTOR, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CARGO_MOTOR, null, SlimefunItems.ELECTRIC_MOTOR, null}) { + new ItemStack[] {null, new ItemStack(Material.WORKBENCH), null, SlimefunItems.CARGO_MOTOR, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CARGO_MOTOR, null, SlimefunItems.ELECTRIC_MOTOR, null}) { @Override public int getEnergyConsumption() { @@ -5234,20 +5270,20 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new ReactorAccessPort(Categories.ELECTRICITY, SlimefunItems.REACTOR_ACCESS_PORT, "REACTOR_ACCESS_PORT", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.LEAD_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.LEAD_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, null}) + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.LEAD_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.LEAD_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, null}) .register(true); new FluidPump(Categories.ELECTRICITY, SlimefunItems.FLUID_PUMP, "FLUID_PUMP", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.MEDIUM_CAPACITOR, null, new ItemStack(Material.BUCKET), SlimefunItems.CARGO_MOTOR, new ItemStack(Material.BUCKET), null, SlimefunItems.OIL_PUMP, null}) + new ItemStack[] {null, SlimefunItems.MEDIUM_CAPACITOR, null, new ItemStack(Material.BUCKET), SlimefunItems.CARGO_MOTOR, new ItemStack(Material.BUCKET), null, SlimefunItems.OIL_PUMP, null}) .registerChargeableBlock(true, 512); new TrashCan(Categories.CARGO, SlimefunItems.TRASH_CAN, "TRASH_CAN_BLOCK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.PORTABLE_DUSTBIN, null, SlimefunItems.LEAD_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT}) + new ItemStack[] {null, SlimefunItems.PORTABLE_DUSTBIN, null, SlimefunItems.LEAD_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT}) .register(true); new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS, "CARBON_PRESS", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CARBON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBON, SlimefunItems.CARBON, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.CARBONADO, SlimefunItems.HEATING_COIL}) { + new ItemStack[] {SlimefunItems.CARBON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBON, SlimefunItems.CARBON, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.CARBONADO, SlimefunItems.HEATING_COIL}) { @Override public ItemStack getProgressBar() { @@ -5272,7 +5308,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 256); new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS_2, "CARBON_PRESS_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.CARBON, SlimefunItems.CARBON_PRESS, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) { + new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.CARBON, SlimefunItems.CARBON_PRESS, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) { @Override public ItemStack getProgressBar() { @@ -5297,7 +5333,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 512); new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS_3, "CARBON_PRESS_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBON_PRESS_2, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) { + new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBON_PRESS_2, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) { @Override public ItemStack getProgressBar() { @@ -5322,7 +5358,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 512); new ElectricSmeltery(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_SMELTERY, "ELECTRIC_SMELTERY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.NETHER_BRICK_ITEM), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.NETHER_BRICK_ITEM), SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { + new ItemStack[] {new ItemStack(Material.NETHER_BRICK_ITEM), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.NETHER_BRICK_ITEM), SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { @Override public void registerDefaultRecipes() { @@ -5341,7 +5377,7 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 512); new ElectricSmeltery(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_SMELTERY_2, "ELECTRIC_SMELTERY_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_SMELTERY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_SMELTERY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { @Override public void registerDefaultRecipes() { @@ -5360,11 +5396,11 @@ public class SlimefunSetup { }.registerChargeableBlock(true, 1024); new WitherAssembler(Categories.ELECTRICITY, SlimefunItems.WITHER_ASSEMBLER, "WITHER_ASSEMBLER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3, new ItemStack(Material.NETHER_STAR), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBONADO_EDGED_CAPACITOR}) + new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3, new ItemStack(Material.NETHER_STAR), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBONADO_EDGED_CAPACITOR}) .registerChargeableBlock(true, 4096); } - + public static void registerPostHandler(PostSlimefunLoadingHandler handler) { MiscSetup.post_handlers.add(handler); } From 4acd3645dd3dc20af960c2b368bf10fc8809b2bc Mon Sep 17 00:00:00 2001 From: Rick Date: Mon, 23 Apr 2018 20:34:53 -0400 Subject: [PATCH 57/85] Reverts change to isItem, makes changes instead to getByItem --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 6c6149690..d8ad926dd 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -330,6 +330,8 @@ public class SlimefunItem { public static SlimefunItem getByItem(ItemStack item) { if (item == null) return null; + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) return getByID("BROKEN_SPAWNER"); + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REPAIRED_SPAWNER"); 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; @@ -345,8 +347,7 @@ public class SlimefunItem { if (this instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; - else if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false))) return true; - else return SlimefunManager.isItemSimiliar(item, this.item, true); + else return SlimefunManager.isItemSimiliar(item, this.item, true); } public void load() { From 846d0b41d356691f0481e0e7537a317daa9e9cbb Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Tue, 24 Apr 2018 20:43:24 -0700 Subject: [PATCH 58/85] Revert "Slimefun book GUI dupe fix" This reverts commit 19f4666235d579eedc6ef73a495170cd50cbda18. --- src/me/mrCookieSlime/Slimefun/SlimefunGuide.java | 5 ----- src/me/mrCookieSlime/Slimefun/Variables.java | 1 - .../Slimefun/listeners/ItemListener.java | 15 --------------- 3 files changed, 21 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 475e85bc1..b89350d66 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -236,7 +236,6 @@ public class SlimefunGuide { } }); - Variables.usingGuide.add(p.getUniqueId()); menu.open(p); } @@ -329,7 +328,6 @@ public class SlimefunGuide { }); } - Variables.usingGuide.add(p.getUniqueId()); menu.open(p); } @@ -648,7 +646,6 @@ public class SlimefunGuide { } }); - Variables.usingGuide.add(p.getUniqueId()); menu.open(p); } } @@ -928,7 +925,6 @@ public class SlimefunGuide { } } - Variables.usingGuide.add(p.getUniqueId()); menu.open(p); } @@ -1321,7 +1317,6 @@ public class SlimefunGuide { } } - Variables.usingGuide.add(p.getUniqueId()); menu.build().open(p); } diff --git a/src/me/mrCookieSlime/Slimefun/Variables.java b/src/me/mrCookieSlime/Slimefun/Variables.java index da8771212..c2034c254 100644 --- a/src/me/mrCookieSlime/Slimefun/Variables.java +++ b/src/me/mrCookieSlime/Slimefun/Variables.java @@ -23,7 +23,6 @@ public class Variables { public static List blocks = new ArrayList(); public static List cancelPlace = new ArrayList(); public static Map arrows = new HashMap(); - public static List usingGuide = new ArrayList(); public static Map dialogueCooldown = new HashMap(); } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index d215ddea1..3950c39eb 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -20,7 +20,6 @@ import org.bukkit.event.block.Action; import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerInteractEvent; @@ -387,18 +386,4 @@ public class ItemListener implements Listener { } } } - - @EventHandler - public void onClose(InventoryCloseEvent e) { - if (Variables.usingGuide.contains(e.getPlayer().getUniqueId())) { - Variables.usingGuide.remove(e.getPlayer().getUniqueId()); - } - } - - @EventHandler - public void inventoryClickEvent(final InventoryClickEvent e) { - if (Variables.usingGuide.contains(e.getWhoClicked().getUniqueId())) { - e.setCancelled(true); - } - } } From f91c319c49e3b99e4b6dd98e0c0b109aaa0bf187 Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Tue, 24 Apr 2018 21:30:41 -0700 Subject: [PATCH 59/85] Fixes SF Guide dupe glitch and accidental item loss bug This patch makes the menu slots unclickable in all Guide menus. --- src/me/mrCookieSlime/Slimefun/SlimefunGuide.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index b89350d66..9acaddc47 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -111,6 +111,7 @@ public class SlimefunGuide { public static void openSettings(Player p, final ItemStack guide) { final ChestMenu menu = new ChestMenu("Settings / Info"); + menu.setEmptySlotsClickable(false); menu.addMenuOpeningHandler(new MenuOpeningHandler() { @Override @@ -243,6 +244,7 @@ public class SlimefunGuide { public static void openCredits(Player p, final ItemStack guide) { final ChestMenu menu = new ChestMenu("Credits"); + menu.setEmptySlotsClickable(false); menu.addMenuOpeningHandler(new MenuOpeningHandler() { @Override @@ -493,6 +495,7 @@ public class SlimefunGuide { else { final ChestMenu menu = new ChestMenu("Slimefun Guide"); + menu.setEmptySlotsClickable(false); menu.addMenuOpeningHandler(new MenuOpeningHandler() { @Override @@ -776,6 +779,7 @@ public class SlimefunGuide { else { final ChestMenu menu = new ChestMenu("Slimefun Guide"); + menu.setEmptySlotsClickable(false); menu.addMenuOpeningHandler(new MenuOpeningHandler() { @Override @@ -968,6 +972,7 @@ public class SlimefunGuide { ChestMenu menu = new ChestMenu("Slimefun Guide"); + menu.setEmptySlotsClickable(false); menu.addMenuOpeningHandler(new MenuOpeningHandler() { @Override From 3a0d73ae9c5c022073323b35ac1616205fe2a5af Mon Sep 17 00:00:00 2001 From: Redemption <25185835+Redemption198@users.noreply.github.com> Date: Wed, 25 Apr 2018 11:18:49 +0200 Subject: [PATCH 60/85] Added CS-CoreLib permission check for Slimefun Machines Removed the horrible whitespaces and updated the code to the last commit. --- .../Slimefun/Setup/SlimefunSetup.java | 10971 ++++++++-------- 1 file changed, 5469 insertions(+), 5502 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 4a5704463..a3c69ee1f 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1,5502 +1,5469 @@ -package me.mrCookieSlime.Slimefun.Setup; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.UUID; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Effect; -import org.bukkit.GameMode; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; -import org.bukkit.block.Chest; -import org.bukkit.block.CreatureSpawner; -import org.bukkit.block.Dispenser; -import org.bukkit.block.Hopper; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.ArmorStand; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Bat; -import org.bukkit.entity.EnderPearl; -import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.FallingBlock; -import org.bukkit.entity.Item; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockDispenseEvent; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.event.entity.EntityDamageEvent.DamageCause; -import org.bukkit.event.entity.FoodLevelChangeEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.material.MaterialData; -import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - -import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; -import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; -import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; -import me.mrCookieSlime.CSCoreLibPlugin.general.Block.BlockBreaker; -import me.mrCookieSlime.CSCoreLibPlugin.general.Block.TreeCalculator; -import me.mrCookieSlime.CSCoreLibPlugin.general.Block.Vein; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; -import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.SkullItem; -import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler; -import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.FireworkShow; -import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory; -import me.mrCookieSlime.CSCoreLibPlugin.general.Recipe.RecipeCalculator; -import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils; -import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; -import me.mrCookieSlime.Slimefun.SlimefunStartup; -import me.mrCookieSlime.Slimefun.Variables; -import me.mrCookieSlime.Slimefun.Android.AndroidType; -import me.mrCookieSlime.Slimefun.Android.ProgrammableAndroid; -import me.mrCookieSlime.Slimefun.GPS.Elevator; -import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; -import me.mrCookieSlime.Slimefun.GPS.NetworkStatus; -import me.mrCookieSlime.Slimefun.Lists.Categories; -import me.mrCookieSlime.Slimefun.Lists.RecipeType; -import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; -import me.mrCookieSlime.Slimefun.Misc.PostSlimefunLoadingHandler; -import me.mrCookieSlime.Slimefun.Objects.MultiBlock; -import me.mrCookieSlime.Slimefun.Objects.Research; -import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Alloy; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.EnhancedFurnace; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ExcludedSoulboundTool; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.HandledBlock; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.JetBoots; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Jetpack; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.MultiTool; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingAlloy; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBackpack; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBow; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SolarHelmet; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundBackpack; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.Teleporter; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.AutonomousMachineHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockBreakHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockPlaceHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BowShootHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemInteractionHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.MultiBlockInteractionHandler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AdvancedCargoOutputNode; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AnimalGrowthAccelerator; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoAnvil; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoBreeder; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoDisenchanter; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutomatedCraftingChamber; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CarbonPress; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoInputNode; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoOutputNode; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ChargingBench; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CropGrowthAccelerator; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricDustWasher; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricFurnace; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricGoldPan; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricIngotFactory; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricSmeltery; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectrifiedCrucible; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FluidPump; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodComposter; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodFabricator; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Freezer; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.HeatedPressureChamber; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.NetherDrill; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.OilPump; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Refinery; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.TrashCan; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.WitherAssembler; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.XPCollector; -import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker; -import me.mrCookieSlime.Slimefun.api.Backpacks; -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.EnergyTicker; -import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; -import me.mrCookieSlime.Slimefun.holograms.CargoHologram; -import me.mrCookieSlime.Slimefun.holograms.EnergyHologram; -import me.mrCookieSlime.Slimefun.holograms.InfusedHopper; -import me.mrCookieSlime.Slimefun.holograms.Projector; -import me.mrCookieSlime.Slimefun.holograms.ReactorHologram; -import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener; - -@SuppressWarnings("deprecation") -public class SlimefunSetup { - - public static void setupItems() throws Exception { - new SlimefunItem(Categories.WEAPONS, SlimefunItems.GRANDMAS_WALKING_STICK, "GRANDMAS_WALKING_STICK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null}) - .register(true); - - new SlimefunItem(Categories.WEAPONS, SlimefunItems.GRANDPAS_WALKING_STICK, "GRANDPAS_WALKING_STICK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.LEATHER), new ItemStack(Material.LOG), new ItemStack(Material.LEATHER), null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null}) - .register(true); - - new SlimefunItem(Categories.PORTABLE, SlimefunItems.PORTABLE_CRAFTER, "PORTABLE_CRAFTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.BOOK), new ItemStack(Material.WORKBENCH), null, null, null, null, null, null, null}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PORTABLE_CRAFTER, true)) { - p.openWorkbench(p.getLocation(), true); - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.FOOD, SlimefunItems.FORTUNE_COOKIE, "FORTUNE_COOKIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.COOKIE), new ItemStack(Material.PAPER), null, null, null, null, null, null, null}) - .register(true); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ENHANCED_CRAFTING_TABLE, "ENHANCED_CRAFTING_TABLE", - new ItemStack[] {null, null, null, null, new ItemStack(Material.WORKBENCH), null, null, new ItemStack(Material.DISPENSER), null}, - new ItemStack[0], Material.WORKBENCH) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(Player p, MultiBlock mb, Block b) { - - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ENHANCED_CRAFTING_TABLE"); - - if (mb.isMultiBlock(machine)) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - - final Inventory inv = disp.getInventory(); - List inputs = RecipeType.getRecipeInputList(machine); - - for (int i = 0; i < inputs.size(); i++) { - boolean craft = true; - for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { - if (SlimefunItem.getByItem(inputs.get(i)[j]) instanceof SlimefunBackpack) { - if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], false)) { - craft = false; - break; - } - } - else { - craft = false; - break; - } - } - } - - if (craft) { - final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)).clone(); - if (Slimefun.hasUnlocked(p, adding, true)) { - Inventory inv2 = Bukkit.createInventory(null, 9, "test"); - for (int j = 0; j < inv.getContents().length; j++) { - inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); - } - if (InvUtils.fits(inv2, adding)) { - SlimefunItem sfItem = SlimefunItem.getByItem(adding); - - if (sfItem instanceof SlimefunBackpack) { - ItemStack backpack = null; - - for (int j = 0; j < 9; j++) { - if (inv.getContents()[j] != null) { - if (inv.getContents()[j].getType() != Material.AIR) { - if (SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) { - backpack = inv.getContents()[j]; - break; - } - } - } - } - String id = ""; - int size = ((SlimefunBackpack) sfItem).size; - - if (backpack != null) { - for (String line: backpack.getItemMeta().getLore()) { - if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { - id = line.replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); - Config cfg = new Config(new File("data-storage/Slimefun/Players/" + id.split("#")[0] + ".yml")); - cfg.setValue("backpacks." + id.split("#")[1] + ".size", size); - cfg.save(); - break; - } - } - } - - if (id.equals("")) { - for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { - if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = adding.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); - im.setLore(lore); - adding.setItemMeta(im); - break; - } - } - } - else { - for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { - if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = adding.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", id)); - im.setLore(lore); - adding.setItemMeta(im); - break; - } - } - } - } - - - for (int j = 0; j < 9; j++) { - if (inv.getContents()[j] != null) { - if (inv.getContents()[j].getType() != Material.AIR) { - if (inv.getContents()[j].getType().toString().endsWith("_BUCKET")) inv.setItem(j, new ItemStack(Material.BUCKET)); - else if (inv.getContents()[j].getAmount() > 1) inv.setItem(j, new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1)); - else inv.setItem(j, null); - } - } - } - p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); - - inv.addItem(adding); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - } - return true; - } - } - Messages.local.sendTranslation(p, "machines.pattern-not-found", true); - } - } - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.PORTABLE, SlimefunItems.PORTABLE_DUSTBIN, "PORTABLE_DUSTBIN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT)}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PORTABLE_DUSTBIN, true)) { - e.setCancelled(true); - p.openInventory(Bukkit.createInventory(null, 9 * 3, ChatColor.DARK_RED + "Delete Items")); - p.playSound(p.getLocation(), Sound.BLOCK_ANVIL_LAND, 1, 1); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.FOOD, SlimefunItems.BEEF_JERKY, "BEEF_JERKY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.COOKED_BEEF), null, null, null, null, null, null, null}, new String[] {"Saturation"}, new Integer[] {20}) - .register(true); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.GRIND_STONE, "GRIND_STONE", - new ItemStack[] {null, null, null, null, new ItemStack(Material.FENCE), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, - new ItemStack[] {new ItemStack(Material.BLAZE_ROD), new ItemStack(Material.BLAZE_POWDER, 4), new ItemStack(Material.BONE), new CustomItem(Material.INK_SACK, 15, 4), new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.NETHER_STALK), new CustomItem(SlimefunItems.MAGIC_LUMP_1, 2), new ItemStack(Material.EYE_OF_ENDER), new CustomItem(SlimefunItems.ENDER_LUMP_1, 2), new ItemStack(Material.COBBLESTONE), new ItemStack(Material.GRAVEL), new ItemStack(Material.WHEAT), SlimefunItems.WHEAT_FLOUR, new ItemStack(Material.DIRT), SlimefunItems.STONE_CHUNK}, - Material.FENCE) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(Player p, MultiBlock mb, Block b) { - - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("GRIND_STONE"); - - if (mb.isMultiBlock(machine)) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { - ItemStack output = RecipeType.getRecipeOutput(machine, convert); - if (InvUtils.fits(inv, output)) { - ItemStack removing = current.clone(); - removing.setAmount(1); - inv.removeItem(removing); - inv.addItem(output); - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; - } - } - } - Messages.local.sendTranslation(p, "machines.unknown-material", true); - } - } - return true; - } - else return false; - } - }); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ARMOR_FORGE, "ARMOR_FORGE", - new ItemStack[] {null, null, null, null, new ItemStack(Material.ANVIL), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, - new ItemStack[] {}, - Material.ANVIL) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(final Player p, MultiBlock mb, Block b) { - - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ARMOR_FORGE"); - - if (mb.isMultiBlock(machine)) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - final Inventory inv = disp.getInventory(); - List inputs = RecipeType.getRecipeInputList(machine); - - for (int i = 0; i < inputs.size(); i++) { - boolean craft = true; - for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { - craft = false; - break; - } - } - - if (craft) { - final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); - if (Slimefun.hasUnlocked(p, adding, true)) { - if (InvUtils.fits(inv, adding)) { - for (ItemStack removing: inputs.get(i)) { - if (removing != null) inv.removeItem(removing); - } - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1, 1); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1F, 2F); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1F, 2F); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - } - return true; - } - } - Messages.local.sendTranslation(p, "machines.pattern-not-found", true); - } - } - return true; - } - else return false; - } - }); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ORE_CRUSHER, "ORE_CRUSHER", - new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.IRON_FENCE), new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), new ItemStack(Material.IRON_FENCE)}, - new ItemStack[] {new ItemStack(Material.IRON_ORE), new CustomItem(SlimefunItems.IRON_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1), new ItemStack(Material.GOLD_ORE), new CustomItem(SlimefunItems.GOLD_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1), new ItemStack(Material.NETHERRACK, 16), SlimefunItems.SULFATE, SlimefunItems.SIFTED_ORE, SlimefunItems.CRUSHED_ORE, SlimefunItems.CRUSHED_ORE, SlimefunItems.PULVERIZED_ORE, SlimefunItems.PURE_ORE_CLUSTER, SlimefunItems.TINY_URANIUM, new ItemStack(Material.COBBLESTONE, 8), new ItemStack(Material.SAND, 1), new ItemStack(Material.GOLD_INGOT), SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_4K, SlimefunItems.GOLD_DUST}, - Material.NETHER_FENCE) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(Player p, MultiBlock mb, Block b) { - - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ORE_CRUSHER"); - - if (mb.isMultiBlock(machine)) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { - ItemStack adding = RecipeType.getRecipeOutput(machine, convert); - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(convert.getAmount()); - inv.removeItem(removing); - inv.addItem(adding); - p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, 1);; - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; - } - } - } - Messages.local.sendTranslation(p, "machines.unknown-material", true); - } - } - return true; - } - else return false; - } - }); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.COMPRESSOR, "COMPRESSOR", - new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.PISTON_BASE), new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), new ItemStack(Material.PISTON_BASE)}, - new ItemStack[] {new ItemStack(Material.COAL, 8), SlimefunItems.CARBON, new CustomItem(SlimefunItems.STEEL_INGOT, 8), SlimefunItems.STEEL_PLATE, new CustomItem(SlimefunItems.CARBON, 4), SlimefunItems.COMPRESSED_CARBON, new CustomItem(SlimefunItems.STONE_CHUNK, 4), new ItemStack(Material.COBBLESTONE), new CustomItem(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), SlimefunItems.REINFORCED_PLATE}, - Material.NETHER_FENCE) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(final Player p, MultiBlock mb, Block b) { - - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("COMPRESSOR"); - - if (mb.isMultiBlock(machine)) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - final Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { - final ItemStack adding = RecipeType.getRecipeOutput(machine, convert); - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(convert.getAmount()); - inv.removeItem(removing); - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_EXTEND, 1, 1); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_CONTRACT, 1F, 2F); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_EXTEND, 1F, 2F); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; - } - } - } - Messages.local.sendTranslation(p, "machines.unknown-material", true); - } - } - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGIC_LUMP_1, "MAGIC_LUMP_1", RecipeType.GRIND_STONE, - new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_STALK), null, null, null, null}, new CustomItem(SlimefunItems.MAGIC_LUMP_1, 2)) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGIC_LUMP_2, "MAGIC_LUMP_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_1, null, SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_1, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGIC_LUMP_3, "MAGIC_LUMP_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_2, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ENDER_LUMP_1, "ENDER_LUMP_1", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, null, new ItemStack(Material.EYE_OF_ENDER), null, null, null, null}, new CustomItem(SlimefunItems.ENDER_LUMP_1, 2)) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ENDER_LUMP_2, "ENDER_LUMP_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_1, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ENDER_LUMP_3, "ENDER_LUMP_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_2, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.PORTABLE, SlimefunItems.ENDER_BACKPACK, "ENDER_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), new ItemStack(Material.CHEST), new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.ENDER_BACKPACK, true)) { - e.setCancelled(true); - p.openInventory(p.getEnderChest()); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 1, 1); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_HELMET, "ENDER_HELMET", RecipeType.ARMOR_FORGE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN), null, null, null}) - .register(true); - - new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_CHESTPLATE, "ENDER_CHESTPLATE", RecipeType.ARMOR_FORGE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), new ItemStack(Material.EYE_OF_ENDER), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN)}) - .register(true); - - new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_LEGGINGS, "ENDER_LEGGINGS", RecipeType.ARMOR_FORGE, - new ItemStack[] {SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN)}) - .register(true); - - new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_BOOTS, "ENDER_BOOTS", RecipeType.ARMOR_FORGE, - new ItemStack[] {null, null, null, SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN)}) - .register(true); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.MAGIC_EYE_OF_ENDER, "MAGIC_EYE_OF_ENDER", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), new ItemStack(Material.EYE_OF_ENDER), new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.MAGIC_EYE_OF_ENDER, true)) { - //It don't works - //e.setCanceled(true); - e.getParentEvent().setCancelled(true); - PlayerInventory.update(p); - if (p.getInventory().getHelmet() != null && p.getInventory().getChestplate() != null && p.getInventory().getLeggings() != null && p.getInventory().getBoots() != null) { - if (SlimefunManager.isItemSimiliar(p.getInventory().getHelmet(), SlimefunItems.ENDER_HELMET, true) && SlimefunManager.isItemSimiliar(p.getInventory().getChestplate(), SlimefunItems.ENDER_CHESTPLATE, true) && SlimefunManager.isItemSimiliar(p.getInventory().getLeggings(), SlimefunItems.ENDER_LEGGINGS, true) && SlimefunManager.isItemSimiliar(p.getInventory().getBoots(), SlimefunItems.ENDER_BOOTS, true)) { - p.launchProjectile(EnderPearl.class); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 1, 1); - } - } - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.FOOD, SlimefunItems.MAGIC_SUGAR, "MAGIC_SUGAR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.REDSTONE), new ItemStack(Material.GLOWSTONE_DUST), null, null, null, null, null, null}, new String[] {"effects.SPEED"}, new Integer[] {4}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack 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; - } - }); - - new SlimefunItem(Categories.FOOD, SlimefunItems.MONSTER_JERKY, "MONSTER_JERKY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.ROTTEN_FLESH), null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_HELMET, "SLIME_HELMET", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), null, null, null}) - .register(true); - - new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_CHESTPLATE, "SLIME_CHESTPLATE", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT)}) - .register(true); - - new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_LEGGINGS, "SLIME_LEGGINGS", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.SPEED, 300, 2)}) - .register(true); - - new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_BOOTS, "SLIME_BOOTS", RecipeType.ARMOR_FORGE, - new ItemStack[] {null, null, null, new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.JUMP, 300, 5)}) - .register(true); - - new SlimefunItem(Categories.WEAPONS, SlimefunItems.SWORD_OF_BEHEADING, "SWORD_OF_BEHEADING", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.EMERALD), SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.BLAZE_ROD), null}, new String[] {"chance.PLAYER", "chance.SKELETON", "chance.WITHER_SKELETON", "chance.ZOMBIE", "chance.CREEPER"}, new Integer[] {70, 40, 25, 40, 40}) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGICAL_BOOK_COVER, "MAGICAL_BOOK_COVER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.BOOK), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, null}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.BASIC_CIRCUIT_BOARD, "BASIC_CIRCUIT_BOARD", RecipeType.MOB_DROP, - new ItemStack[] {null, null, null, null, new CustomItem(Material.MONSTER_EGG, "&a&oIron Golem", 99), null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.ADVANCED_CIRCUIT_BOARD, "ADVANCED_CIRCUIT_BOARD", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.REDSTONE_BLOCK), SlimefunItems.BASIC_CIRCUIT_BOARD, new ItemStack(Material.REDSTONE_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK)}) - .register(true); - - new SlimefunGadget(Categories.TOOLS, SlimefunItems.GOLD_PAN, "GOLD_PAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.STONE), new ItemStack(Material.BOWL), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE)}, - new ItemStack[] {new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.GRAVEL), new ItemStack(Material.CLAY_BALL), new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE}, - new String[] {"chance.FLINT", "chance.CLAY", "chance.SIFTED_ORE"}, new Integer[] {47, 28, 15}) - .register(true, 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) { - if(CSCoreLib.getLib().getProtectionManager().canBuild(p.getUniqueId(), e.getClickedBlock(), true)) { - List drops = new ArrayList(); - if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE"))) drops.add(SlimefunItems.SIFTED_ORE); - else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY"))) drops.add(new ItemStack(Material.CLAY_BALL)); - else if (SlimefunStartup.chance(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; - } - }); - - new SlimefunItem(Categories.MISC, SlimefunItems.SIFTED_ORE, "SIFTED_ORE", RecipeType.GOLD_PAN, - new ItemStack[] {new ItemStack(Material.GRAVEL), null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.SMELTERY, "SMELTERY", - new ItemStack[] {null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.NETHER_BRICK), new CustomItem(Material.DISPENSER, "Dispencer (Faced up)", 0), new ItemStack(Material.NETHER_BRICK), null, new ItemStack(Material.FLINT_AND_STEEL), null}, - new ItemStack[] {SlimefunItems.IRON_DUST, new ItemStack(Material.IRON_INGOT)}, Material.NETHER_FENCE, - new String[] {"chance.fireBreak"}, new Integer[] {34}) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(Player p, MultiBlock mb, Block b) { - - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("SMELTERY"); - - if (mb.isMultiBlock(machine)) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - Inventory inv = disp.getInventory(); - List inputs = RecipeType.getRecipeInputList(machine); - - for (int i = 0; i < inputs.size(); i++) { - boolean craft = true; - for (ItemStack converting: inputs.get(i)) { - if (converting != null) { - for (int j = 0; j < inv.getContents().length; j++) { - if (j == (inv.getContents().length - 1) && !SlimefunManager.isItemSimiliar(converting, inv.getContents()[j], true, SlimefunManager.DataType.ALWAYS)) { - craft = false; - break; - } - else if (SlimefunManager.isItemSimiliar(inv.getContents()[j], converting, true, SlimefunManager.DataType.ALWAYS)) break; - } - } - } - - if (craft) { - ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); - if (Slimefun.hasUnlocked(p, adding, true)) { - if (InvUtils.fits(inv, adding)) { - for (ItemStack removing: inputs.get(i)) { - if (removing != null) inv.removeItem(removing); - } - inv.addItem(adding); - p.getWorld().playSound(p.getLocation(), Sound.BLOCK_LAVA_POP, 1, 1); - p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - Block raw_disp = b.getRelative(BlockFace.DOWN); - Hopper chamber = null; - if(BlockStorage.check(raw_disp.getRelative(BlockFace.EAST).getState().getBlock(), "IGNITION_CHAMBER")) { - chamber = (Hopper) raw_disp.getRelative(BlockFace.EAST).getState(); - } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.WEST).getState().getBlock(), "IGNITION_CHAMBER")) { - chamber = (Hopper) raw_disp.getRelative(BlockFace.WEST).getState(); - } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.NORTH).getState().getBlock(), "IGNITION_CHAMBER")) { - chamber = (Hopper) raw_disp.getRelative(BlockFace.NORTH).getState(); - } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.SOUTH).getState().getBlock(), "IGNITION_CHAMBER")){ - chamber = (Hopper) raw_disp.getRelative(BlockFace.SOUTH).getState(); - } - - if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("SMELTERY", "chance.fireBreak"))) { - if(chamber != null) { - if(chamber.getInventory().contains(Material.FLINT_AND_STEEL)) { - ItemStack item = chamber.getInventory().getItem(chamber.getInventory().first(Material.FLINT_AND_STEEL)); - item.setDurability((short) (item.getDurability() + 1)); - if(item.getDurability() >= item.getType().getMaxDurability()) { - item.setAmount(0); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); - } - p.getWorld().playSound(p.getLocation(), Sound.ITEM_FLINTANDSTEEL_USE, 1, 1); - } else { - Messages.local.sendTranslation(p, "machines.ignition-chamber-no-flint", true); - BlockBreaker.nullify(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN)); - } - } else { - BlockBreaker.nullify(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN)); - } - } - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - } - return true; - } - } - Messages.local.sendTranslation(p, "machines.pattern-not-found", true); - } - } - return true; - } - else return false; - } - }); - - - new SlimefunItem(Categories.MACHINES_1, SlimefunItems.IGNITION_CHAMBER, "IGNITION_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.STEEL_PLATE, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.STEEL_PLATE, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_PLATE, SlimefunItems.ELECTRIC_MOTOR, null, new ItemStack(Material.HOPPER), null}) - .register(true); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.PRESSURE_CHAMBER, "PRESSURE_CHAMBER", - new ItemStack[] {new ItemStack(Material.STEP), new CustomItem(Material.DISPENSER, "Dispenser (Facing down)", 0), new ItemStack(Material.STEP), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.GLASS), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.CAULDRON_ITEM), new ItemStack(Material.PISTON_BASE)}, - new ItemStack[] {SlimefunItems.CARBON_CHUNK, SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.RAW_CARBONADO, SlimefunItems.CARBONADO}, - Material.CAULDRON) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("PRESSURE_CHAMBER"); - - if (mb.isMultiBlock(machine)) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.UP).getRelative(BlockFace.UP).getState(); - final Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { - final ItemStack adding = RecipeType.getRecipeOutput(machine, convert); - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(convert.getAmount()); - inv.removeItem(removing); - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; - } - } - } - Messages.local.sendTranslation(p, "machines.unknown-material", true); - } - } - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.BATTERY, "BATTERY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] { null, new ItemStack(Material.REDSTONE), null, SlimefunItems.ZINC_INGOT, SlimefunItems.SULFATE, SlimefunItems.COPPER_INGOT, SlimefunItems.ZINC_INGOT, SlimefunItems.SULFATE, SlimefunItems.COPPER_INGOT }) - .register(true); - - SlimefunManager.registerArmorSet(new ItemStack(Material.GLOWSTONE), new ItemStack[] {SlimefunItems.GLOWSTONE_HELMET, SlimefunItems.GLOWSTONE_CHESTPLATE, SlimefunItems.GLOWSTONE_LEGGINGS, SlimefunItems.GLOWSTONE_BOOTS}, "GLOWSTONE", - new PotionEffect[][] {new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}}, true, true); - - SlimefunManager.registerArmorSet(SlimefunItems.DAMASCUS_STEEL_INGOT, new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_HELMET, SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, SlimefunItems.DAMASCUS_STEEL_LEGGINGS, SlimefunItems.DAMASCUS_STEEL_BOOTS}, "DAMASCUS_STEEL", true, false); - - SlimefunManager.registerArmorSet(SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_HELMET, SlimefunItems.REINFORCED_ALLOY_CHESTPLATE, SlimefunItems.REINFORCED_ALLOY_LEGGINGS, SlimefunItems.REINFORCED_ALLOY_BOOTS}, "REINFORCED_ALLOY", true, false); - - SlimefunManager.registerArmorSet(new ItemStack(Material.CACTUS), new ItemStack[] {SlimefunItems.CACTUS_HELMET, SlimefunItems.CACTUS_CHESTPLATE, SlimefunItems.CACTUS_LEGGINGS, SlimefunItems.CACTUS_BOOTS}, "CACTUS", true, false); - - new Alloy(SlimefunItems.REINFORCED_ALLOY_INGOT, "REINFORCED_ALLOY_INGOT", - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.GOLD_24K, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.HARDENED_METAL_INGOT, "HARDENED_METAL_INGOT", - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.ALUMINUM_BRONZE_INGOT, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.DAMASCUS_STEEL_INGOT, "DAMASCUS_STEEL_INGOT", - new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.IRON_DUST, SlimefunItems.CARBON, new ItemStack(Material.IRON_INGOT), null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.STEEL_INGOT, "STEEL_INGOT", - new ItemStack[] {SlimefunItems.IRON_DUST, SlimefunItems.CARBON, new ItemStack(Material.IRON_INGOT), null, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.BRONZE_INGOT, "BRONZE_INGOT", - new ItemStack[] {SlimefunItems.COPPER_DUST, SlimefunItems.TIN_DUST, SlimefunItems.COPPER_INGOT, null, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.DURALUMIN_INGOT, "DURALUMIN_INGOT", - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.BILLON_INGOT, "BILLON_INGOT", - new ItemStack[] {SlimefunItems.SILVER_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.SILVER_INGOT, null, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.BRASS_INGOT, "BRASS_INGOT", - new ItemStack[] {SlimefunItems.COPPER_DUST, SlimefunItems.ZINC_DUST, SlimefunItems.COPPER_INGOT, null, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.ALUMINUM_BRASS_INGOT, "ALUMINUM_BRASS_INGOT", - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.BRASS_INGOT, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.ALUMINUM_BRONZE_INGOT, "ALUMINUM_BRONZE_INGOT", - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.BRONZE_INGOT, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.CORINTHIAN_BRONZE_INGOT, "CORINTHIAN_BRONZE_INGOT", - new ItemStack[] {SlimefunItems.SILVER_DUST, SlimefunItems.GOLD_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.BRONZE_INGOT, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.SOLDER_INGOT, "SOLDER_INGOT", - new ItemStack[] {SlimefunItems.LEAD_DUST, SlimefunItems.TIN_DUST, SlimefunItems.LEAD_INGOT, null, null, null, null, null, null}) - .register(true); - - new ReplacingAlloy(SlimefunItems.SYNTHETIC_SAPPHIRE, "SYNTHETIC_SAPPHIRE", - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, new ItemStack(Material.GLASS), new ItemStack(Material.THIN_GLASS), SlimefunItems.ALUMINUM_INGOT, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), null, null, null, null}) - .register(true); - - new ReplacingItem(Categories.RESOURCES, SlimefunItems.SYNTHETIC_DIAMOND, "SYNTHETIC_DIAMOND", RecipeType.PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.CARBON_CHUNK, null, null, null, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.RAW_CARBONADO, "RAW_CARBONADO", - new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.CARBON_CHUNK, new ItemStack(Material.THIN_GLASS), null, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.NICKEL_INGOT, "NICKEL_INGOT", - new ItemStack[] {SlimefunItems.IRON_DUST, new ItemStack(Material.IRON_INGOT), SlimefunItems.COPPER_DUST, null, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.COBALT_INGOT, "COBALT_INGOT", - new ItemStack[] {SlimefunItems.IRON_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.NICKEL_INGOT, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.CARBONADO, "CARBONADO", RecipeType.PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.RAW_CARBONADO, null, null, null, null, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.FERROSILICON, "FERROSILICON", - new ItemStack[] {new ItemStack(Material.IRON_INGOT), SlimefunItems.IRON_DUST, SlimefunItems.SILICON, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.IRON_DUST, "IRON_DUST", RecipeType.ORE_CRUSHER, - new ItemStack[] {new ItemStack(Material.IRON_ORE), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.IRON_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1)) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_DUST, "GOLD_DUST", RecipeType.ORE_CRUSHER, - new ItemStack[] {new ItemStack(Material.GOLD_ORE), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.GOLD_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1)) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.COPPER_DUST, "COPPER_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.TIN_DUST, "TIN_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.LEAD_DUST, "LEAD_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.SILVER_DUST, "SILVER_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.ALUMINUM_DUST, "ALUMINUM_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.ZINC_DUST, "ZINC_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.MAGNESIUM_DUST, "MAGNESIUM_DUST", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.COPPER_INGOT, "COPPER_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.COPPER_DUST, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.TIN_INGOT, "TIN_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.TIN_DUST, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.SILVER_INGOT, "SILVER_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.SILVER_DUST, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.LEAD_INGOT, "LEAD_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.LEAD_DUST, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.ALUMINUM_INGOT, "ALUMINUM_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.ZINC_INGOT, "ZINC_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.ZINC_DUST, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.MAGNESIUM_INGOT, "MAGNESIUM_INGOT", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.MAGNESIUM_DUST, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.SULFATE, "SULFATE", RecipeType.ORE_CRUSHER, - new ItemStack[] {new ItemStack(Material.NETHERRACK, 16), null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.CARBON, "CARBON", RecipeType.COMPRESSOR, - new ItemStack[] {new ItemStack(Material.COAL, 8), null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.WHEAT_FLOUR, "WHEAT_FLOUR", RecipeType.GRIND_STONE, - new ItemStack[] {null, null, null, null, new ItemStack(Material.WHEAT), null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.STEEL_PLATE, "STEEL_PLATE", RecipeType.COMPRESSOR, - new ItemStack[] {new CustomItem(SlimefunItems.STEEL_INGOT, 8), null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.COMPRESSED_CARBON, "COMPRESSED_CARBON", RecipeType.COMPRESSOR, - new ItemStack[] {new CustomItem(SlimefunItems.CARBON, 4), null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.CARBON_CHUNK, "CARBON_CHUNK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, new ItemStack(Material.FLINT), SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.STEEL_THRUSTER, "STEEL_THRUSTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.REDSTONE), null, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.STEEL_PLATE, new ItemStack(Material.FIREBALL), SlimefunItems.STEEL_PLATE}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.POWER_CRYSTAL, "POWER_CRYSTAL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE)}) - .register(true); - - new Jetpack(SlimefunItems.DURALUMIN_JETPACK, "DURALUMIN_JETPACK", - new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.35) - .register(true); - - new Jetpack(SlimefunItems.SOLDER_JETPACK, "SOLDER_JETPACK", - new ItemStack[] {SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.SOLDER_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.4) - .register(true); - - new Jetpack(SlimefunItems.BILLON_JETPACK, "BILLON_JETPACK", - new ItemStack[] {SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.45) - .register(true); - - new Jetpack(SlimefunItems.STEEL_JETPACK, "STEEL_JETPACK", - new ItemStack[] {SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.5) - .register(true); - - new Jetpack(SlimefunItems.DAMASCUS_STEEL_JETPACK, "DAMASCUS_STEEL_JETPACK", - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.55) - .register(true); - - new Jetpack(SlimefunItems.REINFORCED_ALLOY_JETPACK, "REINFORCED_ALLOY_JETPACK", - new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.6) - .register(true); - - new Jetpack(SlimefunItems.CARBONADO_JETPACK, "CARBONADO_JETPACK", - new ItemStack[] {SlimefunItems.CARBON_CHUNK, null, SlimefunItems.CARBON_CHUNK, SlimefunItems.CARBONADO, SlimefunItems.POWER_CRYSTAL, SlimefunItems.CARBONADO, SlimefunItems.STEEL_THRUSTER, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.7) - .register(true); - - new SlimefunItem(Categories.TECH, SlimefunItems.PARACHUTE, "PARACHUTE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CHAIN, null, SlimefunItems.CHAIN, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.CHAIN, "CHAIN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, null}, new CustomItem(SlimefunItems.CHAIN, 8)) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.HOOK, "HOOK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, null, null}) - .register(true); - - new SlimefunItem(Categories.TOOLS, SlimefunItems.GRAPPLING_HOOK, "GRAPPLING_HOOK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.HOOK, SlimefunItems.HOOK, null, SlimefunItems.CHAIN, SlimefunItems.HOOK, SlimefunItems.CHAIN, null, null}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.GRAPPLING_HOOK, true)) { - if (e.getClickedBlock() == null && !Variables.jump.containsKey(p.getUniqueId())) { - Variables.jump.put(p.getUniqueId(), p.getInventory().getItemInMainHand().getType() != Material.SHEARS); - e.setCancelled(true); - if (p.getInventory().getItemInMainHand().getType() == Material.LEASH) PlayerInventory.consumeItemInHand(p); - - Vector direction = p.getEyeLocation().getDirection().multiply(2.0); - Projectile projectile = p.getWorld().spawn(p.getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), Arrow.class); - projectile.setShooter(p); - projectile.setVelocity(direction); - Arrow arrow = (Arrow) projectile; - Bat b = (Bat) p.getWorld().spawnEntity(p.getLocation(), EntityType.BAT); - b.setCanPickupItems(false); - b.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 100000, 100000)); - b.setLeashHolder(arrow); - - Variables.damage.put(p.getUniqueId(), true); - Variables.remove.put(p.getUniqueId(), new Entity[] {b, arrow}); - } - return true; - } - else return false; - } - }); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.MAGIC_WORKBENCH, "MAGIC_WORKBENCH", - new ItemStack[] {null, null, null, null, null, null, new ItemStack(Material.BOOKSHELF), new ItemStack(Material.WORKBENCH), new ItemStack(Material.DISPENSER)}, - new ItemStack[0], Material.WORKBENCH) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("MAGIC_WORKBENCH"); - - if (mb.isMultiBlock(machine)) { - - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = null; - - if (b.getRelative(1, 0, 0).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(1, 0, 0).getState(); - else if (b.getRelative(0, 0, 1).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(0, 0, 1).getState(); - else if (b.getRelative(-1, 0, 0).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(-1, 0, 0).getState(); - else if (b.getRelative(0, 0, -1).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(0, 0, -1).getState(); - - final Inventory inv = disp.getInventory(); - List inputs = RecipeType.getRecipeInputList(machine); - - for (int i = 0; i < inputs.size(); i++) { - boolean craft = true; - for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { - - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = null; - - if (b.getRelative(1, 0, 0).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(1, 0, 0).getState(); - else if (b.getRelative(0, 0, 1).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(0, 0, 1).getState(); - else if (b.getRelative(-1, 0, 0).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(-1, 0, 0).getState(); - else if (b.getRelative(0, 0, -1).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(0, 0, -1).getState(); - - final Inventory inv = disp.getInventory(); - List inputs = RecipeType.getRecipeInputList(machine); - - for (int i = 0; i < inputs.size(); i++) { - boolean craft = true; - for (int j = 0; j < inv.getContents().length; j++) { - if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { - if (SlimefunItem.getByItem(inputs.get(i)[j]) instanceof SlimefunBackpack) { - if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], false)) { - craft = false; - break; - } - } - else { - - craft = false; - break; - } - } - - - if (craft) { - final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); - if (Slimefun.hasUnlocked(p, adding, true)) { - Inventory inv2 = Bukkit.createInventory(null, 9, "test"); - for (int j = 0; j < inv.getContents().length; j++) { - inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); - } - if (InvUtils.fits(inv2, adding)) { - for (int j = 0; j < 9; j++) { - if (inv.getContents()[j] != null) { - if (inv.getContents()[j].getType() != Material.AIR) { - if (inv.getContents()[j].getAmount() > 1) inv.setItem(j, new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1)); - else inv.setItem(j, null); - } - - if (craft) { - final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); - if (Slimefun.hasUnlocked(p, adding, true)) { - Inventory inv2 = Bukkit.createInventory(null, 9, "test"); - for (int j = 0; j < inv.getContents().length; j++) { - inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); - } - if (InvUtils.fits(inv2, adding)) { - SlimefunItem sfItem = SlimefunItem.getByItem(adding); - - if (sfItem instanceof SlimefunBackpack) { - ItemStack backpack = null; - - for (int j = 0; j < 9; j++) { - if (inv.getContents()[j] != null) { - if (inv.getContents()[j].getType() != Material.AIR) { - if (SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) { - backpack = inv.getContents()[j]; - break; - } - } - } - } - String id = ""; - int size = ((SlimefunBackpack) sfItem).size; - - if (backpack != null) { - for (String line: backpack.getItemMeta().getLore()) { - if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { - id = line.replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); - Config cfg = new Config(new File("data-storage/Slimefun/Players/" + id.split("#")[0] + ".yml")); - cfg.setValue("backpacks." + id.split("#")[1] + ".size", size); - cfg.save(); - break; - } - } - } - - if (id.equals("")) { - for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { - if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = adding.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); - im.setLore(lore); - adding.setItemMeta(im); - break; - } - } - } - else { - for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { - if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = adding.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", id)); - im.setLore(lore); - adding.setItemMeta(im); - break; - } - } - } - } - - for (int j = 0; j < 9; j++) { - if (inv.getContents()[j] != null) { - if (inv.getContents()[j].getType() != Material.AIR) { - if (inv.getContents()[j].getAmount() > 1) inv.setItem(j, new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1)); - else inv.setItem(j, null); - - } - } - p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); - p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); - p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); - p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); - p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - } - return true; - } - } - Messages.local.sendTranslation(p, "machines.pattern-not-found", true); - } - } - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_ELEMENTAL, "STAFF_ELEMENTAL", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.MAGIC_LUMP_3, null, new ItemStack(Material.STICK), SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.MAGIC_LUMP_3, null, null}) - .register(true); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_WIND, "STAFF_ELEMENTAL_WIND", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new ItemStack(Material.FEATHER), SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.STAFF_ELEMENTAL, new ItemStack(Material.FEATHER), SlimefunItems.STAFF_ELEMENTAL, null, null}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.STAFF_WIND, true)) { - if (p.getFoodLevel() >= 2) { - if (p.getInventory().getItemInMainHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) { - FoodLevelChangeEvent event = new FoodLevelChangeEvent(p, p.getFoodLevel() - 2); - Bukkit.getPluginManager().callEvent(event); - p.setFoodLevel(event.getFoodLevel()); - } - p.setVelocity(p.getEyeLocation().getDirection().multiply(4)); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); - p.getWorld().playEffect(p.getLocation(), Effect.SMOKE, 1); - p.setFallDistance(0.0f); - } - else { - Messages.local.sendTranslation(p, "messages.hungry", true); - } - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_WATER, "STAFF_ELEMENTAL_WATER", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new ItemStack(Material.WATER_LILY), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.STAFF_ELEMENTAL, new ItemStack(Material.WATER_LILY), SlimefunItems.STAFF_ELEMENTAL, null, null}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.STAFF_WATER, true)) { - p.setFireTicks(0); - Messages.local.sendTranslation(p, "messages.fire-extinguish", true); - return true; - } - else return false; - } - }); - - new MultiTool(SlimefunItems.DURALUMIN_MULTI_TOOL, "DURALUMIN_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) - .register(true); - - new MultiTool(SlimefunItems.SOLDER_MULTI_TOOL, "SOLDER_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) - .register(true); - - new MultiTool(SlimefunItems.BILLON_MULTI_TOOL, "BILLON_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) - .register(true); - - new MultiTool(SlimefunItems.STEEL_MULTI_TOOL, "STEEL_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) - .register(true); - - new MultiTool(SlimefunItems.DAMASCUS_STEEL_MULTI_TOOL, "DAMASCUS_STEEL_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) - .register(true); - - new MultiTool(SlimefunItems.REINFORCED_ALLOY_MULTI_TOOL, "REINFORCED_ALLOY_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) - .register(true); - - new MultiTool(SlimefunItems.CARBONADO_MULTI_TOOL, "CARBONADO_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CARBONADO, null, SlimefunItems.CARBONADO, SlimefunItems.CARBONADO, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.CARBONADO, null, SlimefunItems.CARBONADO, null}, - new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item", "mode.4.enabled", "mode.4.name", "mode.4.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK", true, "Gold Pan", "GOLD_PAN"}) - .register(true); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ORE_WASHER, "ORE_WASHER", - new ItemStack[] {null, new ItemStack(Material.DISPENSER), null, null, new ItemStack(Material.FENCE), null, null, new ItemStack(Material.CAULDRON_ITEM), null}, - new ItemStack[] {SlimefunItems.SIFTED_ORE, SlimefunItems.IRON_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.GOLD_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.COPPER_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.TIN_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.ZINC_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGNESIUM_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.LEAD_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.SILVER_DUST}, - Material.FENCE) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(Player p, MultiBlock mb, Block b) { - - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ORE_WASHER"); - - if (mb.isMultiBlock(machine)) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.UP).getState(); - Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - if (current != null) { - if (SlimefunManager.isItemSimiliar(current, SlimefunItems.SIFTED_ORE, true)) { - 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; - - if (inv.firstEmpty() != -1) { - ItemStack removing = current.clone(); - removing.setAmount(1); - inv.removeItem(removing); - inv.addItem(adding); - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); - p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); - if (InvUtils.fits(inv, SlimefunItems.STONE_CHUNK)) inv.addItem(SlimefunItems.STONE_CHUNK); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; - } - else if (SlimefunManager.isItemSimiliar(current, new ItemStack(Material.SAND, 4), false)) { - ItemStack adding = SlimefunItems.SALT; - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(4); - inv.removeItem(removing); - inv.addItem(adding); - p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; - } - else if (SlimefunManager.isItemSimiliar(current, SlimefunItems.PULVERIZED_ORE, true)) { - ItemStack adding = SlimefunItems.PURE_ORE_CLUSTER; - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(1); - inv.removeItem(removing); - inv.addItem(adding); - p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; - } - } - } - Messages.local.sendTranslation(p, "machines.unknown-material", true); - } - } - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_24K, "GOLD_24K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_22K, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_22K, "GOLD_22K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_20K, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_20K, "GOLD_20K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_18K, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_18K, "GOLD_18K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_16K, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_16K, "GOLD_16K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_14K, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_14K, "GOLD_14K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_12K, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_12K, "GOLD_12K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_10K, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_10K, "GOLD_10K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_8K, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_8K, "GOLD_8K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_6K, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_6K, "GOLD_6K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_4K, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_4K, "GOLD_4K", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.GOLD_DUST, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.STONE_CHUNK, "STONE_CHUNK", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.SILICON, "SILICON", RecipeType.SMELTERY, - new ItemStack[] {new ItemStack(Material.QUARTZ_BLOCK), null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.SOLAR_PANEL, "SOLAR_PANEL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), SlimefunItems.SILICON, SlimefunItems.SILICON, SlimefunItems.SILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON}) - .register(true); - - new SolarHelmet(Categories.TECH, SlimefunItems.SOLAR_HELMET, "SOLAR_HELMET", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.SOLAR_PANEL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MEDIUM_CAPACITOR, null, SlimefunItems.MEDIUM_CAPACITOR}, - new String[] {"charge-amount"}, new Double[] {0.1}) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.LAVA_CRYSTAL, "LAVA_CRYSTAL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.RUNE_FIRE, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1}) - .register(true); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_FIRE, "STAFF_ELEMENTAL_FIRE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, null, SlimefunItems.LAVA_CRYSTAL, null, SlimefunItems.STAFF_ELEMENTAL, null, SlimefunItems.STAFF_ELEMENTAL, null, null}) - .register(true); - - new SlimefunItem(Categories.TOOLS, SlimefunItems.AUTO_SMELT_PICKAXE, "SMELTERS_PICKAXE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) - .register(true, new BlockBreakHandler() { - - @Override - public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.AUTO_SMELT_PICKAXE, true)) { - if (e.getBlock().getType().equals(Material.SKULL)) 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; - } - }); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.TALISMAN, "COMMON_TALISMAN", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2}, - new String[] {"recipe-requires-nether-stars"}, new Boolean[] {false}) - .register(true); - - new Talisman(SlimefunItems.TALISMAN_ANVIL, "ANVIL_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.ANVIL), SlimefunItems.TALISMAN, new ItemStack(Material.ANVIL), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - true, false, "anvil", new PotionEffect[0]) - .register(true); - - new Talisman(SlimefunItems.TALISMAN_MINER, "MINER_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - false, false, "miner", 20, new PotionEffect[0]) - .register(true); - - new Talisman(SlimefunItems.TALISMAN_HUNTER, "HUNTER_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.MONSTER_JERKY, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - false, false, "hunter", 20, new PotionEffect[0]) - .register(true); - - new Talisman(SlimefunItems.TALISMAN_LAVA, "LAVA_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.TALISMAN, new ItemStack(Material.LAVA_BUCKET), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - true, true, "lava", new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 3600, 4)) - .register(true); - - new Talisman(SlimefunItems.TALISMAN_WATER, "WATER_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.WATER_BUCKET), SlimefunItems.TALISMAN, new ItemStack(Material.FISHING_ROD), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - true, true, "water", new PotionEffect(PotionEffectType.WATER_BREATHING, 3600, 4)) - .register(true); - - new Talisman(SlimefunItems.TALISMAN_ANGEL, "ANGEL_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.FEATHER), SlimefunItems.TALISMAN, new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - false, true, "angel", 75, new PotionEffect[0]) - .register(true); - - new Talisman(SlimefunItems.TALISMAN_FIRE, "FIRE_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.TALISMAN, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - true, true, "fire", new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 3600, 4)) - .register(true); - - new Talisman(SlimefunItems.TALISMAN_MAGICIAN, "MAGICIAN_TALISMAN", - new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENCHANTMENT_TABLE), SlimefunItems.TALISMAN, new ItemStack(Material.ENCHANTMENT_TABLE), SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3}, - false, false, "magician", 80, new PotionEffect[0]) - .register(true); - - for (Enchantment e: Enchantment.values()) { - for (int i = 1; i <= e.getMaxLevel(); i++) { - Slimefun.setItemVariable("MAGICIAN_TALISMAN", "allow-enchantments." + e.getName() + ".level." + i, true); - } - } - - new Talisman(SlimefunItems.TALISMAN_TRAVELLER, "TRAVELLER_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.STAFF_WIND, SlimefunItems.TALISMAN_ANGEL, SlimefunItems.STAFF_WIND, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - false, false, "traveller", 60, new PotionEffect(PotionEffectType.SPEED, 3600, 2)) - .register(true); - - new Talisman(SlimefunItems.TALISMAN_WARRIOR, "WARRIOR_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.TALISMAN, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - true, true, "warrior", new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 3600, 2)) - .register(true); - - new Talisman(SlimefunItems.TALISMAN_KNIGHT, "KNIGHT_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.GILDED_IRON, SlimefunItems.TALISMAN_WARRIOR, SlimefunItems.GILDED_IRON, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, - "knight", 30, new PotionEffect(PotionEffectType.REGENERATION, 100, 3)) - .register(true); - - new Alloy(SlimefunItems.GILDED_IRON, "GILDED_IRON", - new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.IRON_DUST, null, null, null, null, null, null, null}) - .register(true); - - new ReplacingAlloy(SlimefunItems.SYNTHETIC_EMERALD, "SYNTHETIC_EMERALD", - new ItemStack[] {SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.THIN_GLASS), null, null, null, null, null}) - .register(true); - - SlimefunManager.registerArmorSet(SlimefunItems.CHAIN, new ItemStack[] {new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)}, "CHAIN", true, true); - - new Talisman(SlimefunItems.TALISMAN_WHIRLWIND, "WHIRLWIND_TALISMAN", - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.STAFF_WIND, SlimefunItems.TALISMAN_TRAVELLER, SlimefunItems.STAFF_WIND, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3} - , false, true, "whirlwind", 60, new PotionEffect[0]) - .register(true); - - new Talisman(SlimefunItems.TALISMAN_WIZARD, "WIZARD_TALISMAN", - new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.TALISMAN_MAGICIAN, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3}, - false, false, "wizard", 60, new PotionEffect[0]) - .register(true); - - new SlimefunItem(Categories.TOOLS, SlimefunItems.LUMBER_AXE, "LUMBER_AXE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.SYNTHETIC_DIAMOND, null, SlimefunItems.SYNTHETIC_EMERALD, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) - .register(true, new BlockBreakHandler() { - - @Override - public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.LUMBER_AXE, true)) { - if (e.getBlock().getType() == Material.LOG || e.getBlock().getType() == Material.LOG_2) { - List logs = new ArrayList(); - TreeCalculator.getTree(e.getBlock().getLocation(), e.getBlock().getLocation(), logs); - - if (logs.contains(e.getBlock())) logs.remove(e.getBlock()); - for (Location b: logs) { - if (CSCoreLib.getLib().getProtectionManager().canBuild(e.getPlayer().getUniqueId(), b.getBlock())) { - 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; - } - }); - - new SlimefunItem(Categories.MISC, SlimefunItems.SALT, "SALT", RecipeType.ORE_WASHER, - new ItemStack[] {null, null, null, null, new ItemStack(Material.SAND, 4), null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.HEAVY_CREAM, "HEAVY_CREAM", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.MILK_BUCKET), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.HEAVY_CREAM, 2)) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.CHEESE, "CHEESE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.MILK_BUCKET), SlimefunItems.SALT, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.BUTTER, "BUTTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HEAVY_CREAM, SlimefunItems.SALT, null, null, null, null, null, null, null}) - .register(true); - - SlimefunManager.registerArmorSet(SlimefunItems.GILDED_IRON, new ItemStack[] {SlimefunItems.GILDED_IRON_HELMET, SlimefunItems.GILDED_IRON_CHESTPLATE, SlimefunItems.GILDED_IRON_LEGGINGS, SlimefunItems.GILDED_IRON_BOOTS}, "GILDED_IRON", true, false); - - new SlimefunArmorPiece(Categories.ARMOR, SlimefunItems.SCUBA_HELMET, "SCUBA_HELMET", RecipeType.ARMOR_FORGE, - new ItemStack[] {new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new ItemStack(Material.THIN_GLASS), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, null, null}, - new PotionEffect[] {new PotionEffect(PotionEffectType.WATER_BREATHING, 300, 1)}) - .register(true); - - new SlimefunArmorPiece(Categories.ARMOR, SlimefunItems.HAZMATSUIT_CHESTPLATE, "HAZMAT_CHESTPLATE", RecipeType.ARMOR_FORGE, - new ItemStack[] {new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 300, 1)}) - .register(true); - - new SlimefunItem(Categories.ARMOR, SlimefunItems.HAZMATSUIT_LEGGINGS, "HAZMAT_LEGGINGS", RecipeType.ARMOR_FORGE, - new ItemStack [] {new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1)}) - .register(true); - - new SlimefunItem(Categories.ARMOR, SlimefunItems.RUBBER_BOOTS, "RUBBER_BOOTS", RecipeType.ARMOR_FORGE, - new ItemStack [] {null, null, null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1)}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.CRUSHED_ORE, "CRUSHED_ORE", RecipeType.ORE_CRUSHER, - new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.PULVERIZED_ORE, "PULVERIZED_ORE", RecipeType.ORE_CRUSHER, - new ItemStack[] {SlimefunItems.CRUSHED_ORE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.PURE_ORE_CLUSTER, "PURE_ORE_CLUSTER", RecipeType.ORE_WASHER, - new ItemStack[] {SlimefunItems.PULVERIZED_ORE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.TINY_URANIUM, "TINY_URANIUM", RecipeType.ORE_CRUSHER, - new ItemStack[] {SlimefunItems.PURE_ORE_CLUSTER, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.SMALL_URANIUM, "SMALL_URANIUM", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.URANIUM, "URANIUM", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SMALL_URANIUM, SlimefunItems.SMALL_URANIUM, null, SlimefunItems.SMALL_URANIUM, SlimefunItems.SMALL_URANIUM, null, null, null, null}) - .register(true); - - new Alloy(SlimefunItems.REDSTONE_ALLOY, "REDSTONE_ALLOY", - new ItemStack[] {new ItemStack(Material.REDSTONE), new ItemStack(Material.REDSTONE_BLOCK), SlimefunItems.FERROSILICON, SlimefunItems.HARDENED_METAL_INGOT, null, null, null, null, null}) - .register(true); - - SlimefunManager.registerArmorSet(SlimefunItems.GOLD_12K, new ItemStack[] {SlimefunItems.GOLD_HELMET, SlimefunItems.GOLD_CHESTPLATE, SlimefunItems.GOLD_LEGGINGS, SlimefunItems.GOLD_BOOTS}, "GOLD_12K", true, false); - - new SlimefunItem(Categories.MISC, SlimefunItems.CLOTH, "CLOTH", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.WOOL), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CLOTH, 8)) - .register(true); - - new SlimefunItem(Categories.PORTABLE, SlimefunItems.RAG, "RAG", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, new ItemStack(Material.STRING), null, new ItemStack(Material.STRING), SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RAG, true)) { - PlayerInventory.consumeItemInHand(p); - p.getWorld().playEffect(p.getLocation(), Effect.STEP_SOUND, Material.WOOL); - p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 0)); - p.setFireTicks(0); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.PORTABLE, SlimefunItems.BANDAGE, "BANDAGE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.RAG, new ItemStack(Material.STRING), SlimefunItems.RAG, null, null, null, null, null, null}, - new CustomItem(SlimefunItems.BANDAGE, 4), new String[] {"enable-bleeding"}, new Boolean[] {true}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BANDAGE, true)) { - PlayerInventory.consumeItemInHand(p); - p.getWorld().playEffect(p.getLocation(), Effect.STEP_SOUND, Material.WOOL); - p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 1)); - p.setFireTicks(0); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.PORTABLE, SlimefunItems.SPLINT, "SPLINT", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.STICK), new ItemStack(Material.STICK), new ItemStack(Material.STICK), null, new ItemStack(Material.IRON_INGOT), null}, - new CustomItem(SlimefunItems.SPLINT, 4), new String[] {"enable-broken-legs"}, new Boolean[] {true}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.SPLINT, true)) { - PlayerInventory.consumeItemInHand(p); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_SKELETON_HURT, 1, 1); - p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 0)); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.MISC, SlimefunItems.CAN, "TIN_CAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, null, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT}, new CustomItem(SlimefunItems.CAN, 4)) - .register(true); - - new SlimefunItem(Categories.PORTABLE, SlimefunItems.VITAMINS, "VITAMINS", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.APPLE), new ItemStack(Material.RED_MUSHROOM), new ItemStack(Material.SUGAR), null, null, null, null, null}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.VITAMINS, true)) { - PlayerInventory.consumeItemInHand(p); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); - if (p.hasPotionEffect(PotionEffectType.POISON)) p.removePotionEffect(PotionEffectType.POISON); - if (p.hasPotionEffect(PotionEffectType.WITHER)) p.removePotionEffect(PotionEffectType.WITHER); - if (p.hasPotionEffect(PotionEffectType.SLOW)) p.removePotionEffect(PotionEffectType.SLOW); - if (p.hasPotionEffect(PotionEffectType.SLOW_DIGGING)) p.removePotionEffect(PotionEffectType.SLOW_DIGGING); - if (p.hasPotionEffect(PotionEffectType.WEAKNESS)) p.removePotionEffect(PotionEffectType.WEAKNESS); - if (p.hasPotionEffect(PotionEffectType.CONFUSION)) p.removePotionEffect(PotionEffectType.CONFUSION); - if (p.hasPotionEffect(PotionEffectType.BLINDNESS)) p.removePotionEffect(PotionEffectType.BLINDNESS); - p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 2)); - p.setFireTicks(0); - e.setCancelled(true); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.PORTABLE, SlimefunItems.MEDICINE, "MEDICINE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.VITAMINS, new ItemStack(Material.GLASS_BOTTLE), SlimefunItems.HEAVY_CREAM, null, null, null, null, null, null}) - .register(true); - - new SlimefunArmorPiece(Categories.TECH, SlimefunItems.NIGHT_VISION_GOGGLES, "NIGHT_VISION_GOGGLES", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.COAL_BLOCK), new MaterialData(Material.STAINED_GLASS_PANE, (byte) 5).toItemStack(1), new ItemStack(Material.COAL_BLOCK), new MaterialData(Material.STAINED_GLASS_PANE, (byte) 5).toItemStack(1), new ItemStack(Material.COAL_BLOCK), null, new ItemStack(Material.COAL_BLOCK)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 20)}) - .register(true); - - new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_CONTAINMENT, "PICKAXE_OF_CONTAINMENT", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) - .register(true, new BlockBreakHandler() { - - @Override - public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.PICKAXE_OF_CONTAINMENT, true)) { - if (e.getBlock().getType() != Material.MOB_SPAWNER) return true; - ItemStack spawner = SlimefunItems.BROKEN_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) e.getBlock().getState()).getSpawnedType().toString()))); - } - im.setLore(lore); - spawner.setItemMeta(im); - e.getBlock().getLocation().getWorld().dropItemNaturally(e.getBlock().getLocation(), spawner); - e.setExpToDrop(0); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.TOOLS, SlimefunItems.HERCULES_PICKAXE, "HERCULES_PICKAXE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) - .register(true, new BlockBreakHandler() { - - @Override - public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), 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, 2)); - } - } - return true; - } - else return false; - } - }); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.SAW_MILL, "SAW_MILL", - new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG)}, - new ItemStack[] {}, Material.WORKBENCH) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(Player p, MultiBlock mb, Block b) { - if (mb.isMultiBlock(SlimefunItem.getByID("SAW_MILL"))) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, SlimefunItems.SAW_MILL, true)) { - if (b.getRelative(BlockFace.UP).getType() == Material.LOG) BlockBreaker.breakBlock(p, b.getRelative(BlockFace.UP), Arrays.asList(new ItemStack[] {new CustomItem(Material.WOOD, b.getRelative(BlockFace.UP).getData() % 4, 8)}), true); - else if (b.getRelative(BlockFace.UP).getType() == Material.LOG_2) BlockBreaker.breakBlock(p, b.getRelative(BlockFace.UP), Arrays.asList(new ItemStack[] {new CustomItem(Material.WOOD, (b.getRelative(BlockFace.UP).getData() % 2) + 4, 8)}), true); - } - } - return true; - } - else return false; - } - }); - - new SlimefunMachine(Categories.MACHINES_1, new CustomItem(Material.FIRE, "&4Phantom Item", 0), "SAW_MILL2", - new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG)}, - new ItemStack[] {}, Material.WORKBENCH, true) - .register(true); - - new SlimefunMachine(Categories.MACHINES_1, new CustomItem(Material.FIRE, "&4Phantom Item", 0), "SAW_MILL3", - new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG_2)}, - new ItemStack[] {}, Material.WORKBENCH, true) - .register(true); - - new SlimefunMachine(Categories.MACHINES_1, new CustomItem(Material.FIRE, "&4Phantom Item", 0), "SAW_MILL4", - new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG_2)}, - new ItemStack[] {}, Material.WORKBENCH, true) - .register(true); - - new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_HELMET_STEEL, "SLIME_STEEL_HELMET", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), null, null, null}) - .register(true); - - new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_CHESTPLATE_STEEL, "SLIME_STEEL_CHESTPLATE", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL)}) - .register(true); - - new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_LEGGINGS_STEEL, "SLIME_STEEL_LEGGINGS", RecipeType.ARMOR_FORGE, - new ItemStack[] {new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.SPEED, 300, 2)}) - .register(true); - - new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_BOOTS_STEEL, "SLIME_STEEL_BOOTS", RecipeType.ARMOR_FORGE, - new ItemStack[] {null, null, null, new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL)}, - new PotionEffect[] {new PotionEffect(PotionEffectType.JUMP, 300, 5)}) - .register(true); - - new SlimefunItem(Categories.WEAPONS, SlimefunItems.BLADE_OF_VAMPIRES, "BLADE_OF_VAMPIRES", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, null, new ItemStack(Material.BLAZE_ROD), null}) - .register(true); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.DIGITAL_MINER, "DIGITAL_MINER", - new ItemStack[] {SlimefunItems.SOLAR_PANEL, new ItemStack(Material.CHEST), SlimefunItems.SOLAR_PANEL, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.DISPENSER), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.HOPPER), new ItemStack(Material.IRON_BLOCK)}, - new ItemStack[0], Material.DISPENSER) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - if (mb.isMultiBlock(SlimefunItem.getByID("DIGITAL_MINER"))) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, SlimefunItems.DIGITAL_MINER, true)) { - Chest chest = (Chest) b.getRelative(BlockFace.UP).getState(); - final Inventory inv = chest.getInventory(); - List ores = new ArrayList(); - for (int x = b.getX() - 4; x < b.getX() + 4; x++) { - for (int z = b.getZ() - 4; z < b.getZ() + 4; z++) { - for (int y = b.getY(); y > 0; y--) { - if (b.getWorld().getBlockAt(x, y, z).getType().toString().endsWith("_ORE")) { - ores.add(b.getWorld().getBlockAt(x, y, z).getLocation()); - } - } - } - } - if (!ores.isEmpty()) { - final Material ore = ores.get(0).getBlock().getType(); - final ItemStack adding = new ItemStack(ore); - ores.get(0).getBlock().setType(Material.AIR); - ores.clear(); - if (InvUtils.fits(inv, adding)) { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); - } - }, 20L); - } - }, 20L); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - } - else Messages.local.sendTranslation(p, "miner.no-ores", true); - } - } - return true; - } - else return false; - } - }); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ADVANCED_DIGITAL_MINER, "ADVANCED_DIGITAL_MINER", - new ItemStack[] {SlimefunItems.SOLAR_PANEL, new ItemStack(Material.CHEST), SlimefunItems.SOLAR_PANEL, SlimefunItems.GOLD_24K_BLOCK, new ItemStack(Material.DISPENSER), SlimefunItems.GOLD_24K_BLOCK, SlimefunItems.GOLD_24K_BLOCK, new ItemStack(Material.HOPPER), SlimefunItems.GOLD_24K_BLOCK}, - new ItemStack[0], Material.DISPENSER) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - if (mb.isMultiBlock(SlimefunItem.getByID("ADVANCED_DIGITAL_MINER"))) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, SlimefunItems.ADVANCED_DIGITAL_MINER, true)) { - Chest chest = (Chest) b.getRelative(BlockFace.UP).getState(); - final Inventory inv = chest.getInventory(); - List ores = new ArrayList(); - for (int x = b.getX() - 6; x < b.getX() + 6; x++) { - for (int z = b.getZ() - 6; z < b.getZ() + 6; z++) { - for (int y = b.getY(); y > 0; y--) { - if (b.getWorld().getBlockAt(x, y, z).getType().toString().endsWith("_ORE")) { - ores.add(b.getWorld().getBlockAt(x, y, z).getLocation()); - } - } - } - } - if (!ores.isEmpty()) { - final Material ore = ores.get(0).getBlock().getType(); - ItemStack drop = new ItemStack(ore); - if (ore == Material.COAL_ORE) drop = new CustomItem(new ItemStack(Material.COAL), 4); - else if (ore == Material.IRON_ORE) drop = new CustomItem(SlimefunItems.IRON_DUST, 2); - else if (ore == Material.GOLD_ORE) drop = new CustomItem(SlimefunItems.GOLD_DUST, 2); - else if (ore == Material.REDSTONE_ORE) drop = new CustomItem(new ItemStack(Material.REDSTONE), 8); - else if (ore == Material.QUARTZ_ORE) drop = new CustomItem(new ItemStack(Material.QUARTZ), 4); - else if (ore == Material.LAPIS_ORE) drop = new CustomItem(new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), 12); - else { - for (ItemStack drops: ores.get(0).getBlock().getDrops()) { - if (!drops.getType().isBlock()) drop = new CustomItem(drops, 2); - } - } - final ItemStack adding = drop; - ores.get(0).getBlock().setType(Material.AIR); - ores.clear(); - if (InvUtils.fits(inv, adding)) { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - inv.addItem(adding); - } - }, 20L); - } - }, 20L); - } - }, 20L); - } - }, 20L); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - } - else Messages.local.sendTranslation(p, "miner.no-ores", true); - } - } - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.MISC, SlimefunItems.GOLD_24K_BLOCK, "GOLD_24K_BLOCK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K}) - .register(true); - - new SlimefunGadget(Categories.MACHINES_1, SlimefunItems.COMPOSTER, "COMPOSTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.WOOD_STEP), null, new ItemStack(Material.WOOD_STEP), new ItemStack(Material.WOOD_STEP), null, new ItemStack(Material.WOOD_STEP), new ItemStack(Material.WOOD_STEP), new ItemStack(Material.CAULDRON_ITEM), new ItemStack(Material.WOOD_STEP)}, - new ItemStack[] {new CustomItem(Material.LEAVES, 0, 8), new ItemStack(Material.DIRT), new CustomItem(Material.LEAVES_2, 0, 8), new ItemStack(Material.DIRT), new CustomItem(Material.SAPLING, 0, 8), new ItemStack(Material.DIRT), new ItemStack(Material.STONE, 4), new ItemStack(Material.NETHERRACK), new ItemStack(Material.SAND, 2), new ItemStack(Material.SOUL_SAND), new ItemStack(Material.WHEAT, 4), new ItemStack(Material.NETHER_STALK)}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, final Player p, ItemStack item) { - if (e.getClickedBlock() != null) { - SlimefunItem machine = BlockStorage.check(e.getClickedBlock()); - if (machine != null && machine.getID().equals("COMPOSTER")) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), e.getClickedBlock(), true)) { - final ItemStack input = p.getInventory().getItemInMainHand(); - final Block b = e.getClickedBlock(); - 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); - - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); - else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - b.getWorld().dropItemNaturally(b.getRelative(BlockFace.UP).getLocation(), adding); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - return true; - } - } - Messages.local.sendTranslation(p, "machines.wrong-item", true); - return true; - } - return true; - } - } - return false; - } - }); - - new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.FARMER_SHOES, "FARMER_SHOES", RecipeType.ARMOR_FORGE, - new ItemStack[] {null, null, null, new ItemStack(Material.HAY_BLOCK), null, new ItemStack(Material.HAY_BLOCK), new ItemStack(Material.HAY_BLOCK), null, new ItemStack(Material.HAY_BLOCK)}) - .register(true); - - @SuppressWarnings("unchecked") - final String[] explosiveblacklist = Slimefun.getItemValue("EXPLOSIVE_PICKAXE", "unbreakable-blocks") != null ? ((List) Slimefun.getItemValue("EXPLOSIVE_PICKAXE", "unbreakable-blocks")).toArray(new String[((List) Slimefun.getItemValue("EXPLOSIVE_PICKAXE", "unbreakable-blocks")).size()]): new String[] {"BEDROCK", "BARRIER", "COMMAND", "COMMAND_CHAIN", "COMMAND_REPEATING"}; - - new SlimefunItem(Categories.TOOLS, SlimefunItems.EXPLOSIVE_PICKAXE, "EXPLOSIVE_PICKAXE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {new ItemStack(Material.TNT), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.TNT), null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}, - new String[] {"unbreakable-blocks"}, new Object[] {Arrays.asList("BEDROCK", "BARRIER", "COMMAND", "COMMAND_CHAIN", "COMMAND_REPEATING")}) - .register(true, new BlockBreakHandler() { - - @Override - public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.EXPLOSIVE_PICKAXE, true)) { - e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F); - e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1F, 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 && !StringUtils.equals(b.getType().toString(), explosiveblacklist)) { - if (CSCoreLib.getLib().getProtectionManager().canBuild(e.getPlayer().getUniqueId(), b)) { - if (SlimefunStartup.instance.isCoreProtectInstalled()) SlimefunStartup.instance.getCoreProtectAPI().logRemoval(e.getPlayer().getName(), b.getLocation(), b.getType(), b.getData()); - b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); - SlimefunItem sfItem = BlockStorage.check(b); - boolean allow = true; - if (sfItem != null && !(sfItem instanceof HandledBlock)) { - if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) { - allow = SlimefunItem.blockhandler.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK); - } - if (allow) { - drops.add(BlockStorage.retrieve(e.getBlock())); - } - } - else if (b.getType().equals(Material.SKULL)) { - 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().equals(Material.IRON_ORE) && !b.getType().equals(Material.GOLD_ORE)) ? new CustomItem(drop, fortune): drop); - } - b.setType(Material.AIR); - } - } - } - } - } - } - return true; - } - else return false; - } - }); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.AUTOMATED_PANNING_MACHINE, "AUTOMATED_PANNING_MACHINE", - new ItemStack[] {null, null, null, null, new ItemStack(Material.TRAP_DOOR), null, null, new ItemStack(Material.CAULDRON_ITEM), null}, - new ItemStack[] {new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.GRAVEL), new ItemStack(Material.CLAY_BALL), new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE}, Material.TRAP_DOOR) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(final Player p, MultiBlock mb, final Block b) { - if (mb.isMultiBlock(SlimefunItem.getByID("AUTOMATED_PANNING_MACHINE"))) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - final ItemStack input = p.getInventory().getItemInMainHand(); - ItemStack output = null; - if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE"))) output = SlimefunItems.SIFTED_ORE; - else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY"))) output = new ItemStack(Material.CLAY_BALL); - else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.FLINT"))) output = new ItemStack(Material.FLINT); - final ItemStack drop = output; - if (input != null) { - if (input.getType() == Material.GRAVEL) { - PlayerInventory.consumeItemInHand(p); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); - if (drop != null) b.getWorld().dropItemNaturally(b.getLocation(), drop); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - } - }, 30L); - return true; - } - } - Messages.local.sendTranslation(p, "machines.wrong-item", true); - return true; - } - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.BOOTS_OF_THE_STOMPER, "BOOTS_OF_THE_STOMPER", RecipeType.ARMOR_FORGE, - new ItemStack[] {null, null, null, new ItemStack(Material.WOOL), null, new ItemStack(Material.WOOL), new ItemStack(Material.PISTON_BASE), null, new ItemStack(Material.PISTON_BASE)}) - .register(true); - - new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_THE_SEEKER, "PICKAXE_OF_THE_SEEKER", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {new ItemStack(Material.COMPASS), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.COMPASS), null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PICKAXE_OF_THE_SEEKER, 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) closest = p.getLocation().getBlock().getRelative(x, y, z); - else if (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, 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)); - } - - if (e.getPlayer().getInventory().getItemInMainHand().getEnchantments().containsKey(Enchantment.DURABILITY)) { - if (SlimefunStartup.randomize(100) <= (60 + 40 / (e.getPlayer().getInventory().getItemInMainHand().getEnchantmentLevel(Enchantment.DURABILITY) + 1))) PlayerInventory.damageItemInHand(e.getPlayer()); - } - else PlayerInventory.damageItemInHand(e.getPlayer()); - - PlayerInventory.update(e.getPlayer()); - return true; - } - else return false; - } - }); - - new SlimefunBackpack(9, Categories.PORTABLE, SlimefunItems.BACKPACK_SMALL, "SMALL_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_6K, new ItemStack(Material.CHEST), SlimefunItems.GOLD_6K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) - .register(true); - - new SlimefunBackpack(18, Categories.PORTABLE, SlimefunItems.BACKPACK_MEDIUM, "MEDIUM_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_10K, SlimefunItems.BACKPACK_SMALL, SlimefunItems.GOLD_10K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) - .register(true); - - new SlimefunBackpack(27, Categories.PORTABLE, SlimefunItems.BACKPACK_LARGE, "LARGE_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_14K, SlimefunItems.BACKPACK_MEDIUM, SlimefunItems.GOLD_14K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) - .register(true); - - new SlimefunBackpack(36, Categories.PORTABLE, SlimefunItems.WOVEN_BACKPACK, "WOVEN_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CLOTH, null, SlimefunItems.CLOTH, SlimefunItems.GOLD_16K, SlimefunItems.BACKPACK_LARGE, SlimefunItems.GOLD_16K, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH}) - .register(true); - - new SlimefunGadget(Categories.MACHINES_1, SlimefunItems.CRUCIBLE, "CRUCIBLE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack [] {new ItemStack(Material.HARD_CLAY), null, new ItemStack(Material.HARD_CLAY), new ItemStack(Material.HARD_CLAY), null, new ItemStack(Material.HARD_CLAY), new ItemStack(Material.HARD_CLAY), new ItemStack(Material.FLINT_AND_STEEL), new ItemStack(Material.HARD_CLAY)}, - new ItemStack [] {new ItemStack(Material.COBBLESTONE, 16), new ItemStack(Material.LAVA_BUCKET), new ItemStack(Material.LEAVES, 16), new ItemStack(Material.WATER_BUCKET), new ItemStack(Material.HARD_CLAY, 12), new ItemStack(Material.LAVA_BUCKET)}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, final Player p, ItemStack item) { - if (e.getClickedBlock() != null) { - SlimefunItem machine = BlockStorage.check(e.getClickedBlock()); - if (machine != null && machine.getID().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); - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (input != null) { - if (SlimefunManager.isItemSimiliar(input, convert, true)) { - e.setCancelled(true); - ItemStack removing = input.clone(); - removing.setAmount(convert.getAmount()); - p.getInventory().removeItem(removing); - - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 7); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 7); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 6); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 6); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 5); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 5); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 4); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 4); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 3); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 3); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 2); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 2); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.LAVA); - block.setData((byte) 1); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 1); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - - @Override - public void run() { - if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { - block.setType(Material.STATIONARY_LAVA); - block.setData((byte) 0); - block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); - } - else if (input.getType() == Material.LEAVES) { - block.setType(Material.WATER); - block.setData((byte) 0); - block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - } - } - }, 50L); - } - }, 50L); - } - }, 50L); - } - }, 50L); - } - }, 50L); - } - }, 50L); - } - }, 50L); - } - }, 50L); - return true; - } - } - } - Messages.local.sendTranslation(p, "machines.wrong-item", true); - return true; - } - return true; - } - } - return false; - } - }); - - new SlimefunBackpack(45, Categories.PORTABLE, SlimefunItems.GILDED_BACKPACK, "GILDED_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K, new ItemStack(Material.LEATHER), SlimefunItems.WOVEN_BACKPACK, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K}) - .register(true); - - new Alloy(Categories.TECH_MISC, SlimefunItems.MAGNET, "MAGNET", - new ItemStack[] {SlimefunItems.NICKEL_INGOT, SlimefunItems.ALUMINUM_DUST, SlimefunItems.IRON_DUST, SlimefunItems.COBALT_INGOT, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.INFUSED_MAGNET, "INFUSED_MAGNET", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_2, SlimefunItems.MAGNET, SlimefunItems.ENDER_LUMP_2, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}) - .register(true); - - new SlimefunItem(Categories.TOOLS, SlimefunItems.COBALT_PICKAXE, "COBALT_PICKAXE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.COBALT_INGOT, SlimefunItems.COBALT_INGOT, SlimefunItems.COBALT_INGOT, null, SlimefunItems.NICKEL_INGOT, null, null, SlimefunItems.NICKEL_INGOT, null}) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.NECROTIC_SKULL, "NECROTIC_SKULL", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ESSENCE_OF_AFTERLIFE, "ESSENCE_OF_AFTERLIFE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_EARTH, SlimefunItems.NECROTIC_SKULL, SlimefunItems.RUNE_FIRE, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_WATER, SlimefunItems.ENDER_LUMP_3}) - .register(true); - - new SoulboundBackpack(36, Categories.PORTABLE, SlimefunItems.BOUND_BACKPACK, "BOUND_BACKPACK", - new ItemStack[] {SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.GILDED_BACKPACK, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2}) - .register(true); - - new JetBoots(SlimefunItems.DURALUMIN_JETBOOTS, "DURALUMIN_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.35) - .register(true); - - new JetBoots(SlimefunItems.SOLDER_JETBOOTS, "SOLDER_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.SOLDER_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.4) - .register(true); - - new JetBoots(SlimefunItems.BILLON_JETBOOTS, "BILLON_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.BILLON_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.45) - .register(true); - - new JetBoots(SlimefunItems.STEEL_JETBOOTS, "STEEL_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.5) - .register(true); - - new JetBoots(SlimefunItems.DAMASCUS_STEEL_JETBOOTS, "DAMASCUS_STEEL_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.55) - .register(true); - - new JetBoots(SlimefunItems.REINFORCED_ALLOY_JETBOOTS, "REINFORCED_ALLOY_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.6) - .register(true); - - new JetBoots(SlimefunItems.CARBONADO_JETBOOTS, "CARBONADO_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.CARBONADO, SlimefunItems.POWER_CRYSTAL, SlimefunItems.CARBONADO, SlimefunItems.STEEL_THRUSTER, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.7) - .register(true); - - new JetBoots(SlimefunItems.ARMORED_JETBOOTS, "ARMORED_JETBOOTS", - new ItemStack[] {null, null, null, SlimefunItems.STEEL_PLATE, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_PLATE, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, - 0.45) - .register(true); - - new SlimefunItem(Categories.WEAPONS, SlimefunItems.SEISMIC_AXE, "SEISMIC_AXE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.STAFF_ELEMENTAL, null, null, SlimefunItems.STAFF_ELEMENTAL, null}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.SEISMIC_AXE, true)) { - List blocks = p.getLineOfSight((HashSet) 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) { - if (b.getWorld().getBlockAt(b.getX(), y, b.getZ()).getType() != null) { - if (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) { - FallingBlock block = ground.getWorld().spawnFallingBlock(ground.getBlock().getRelative(BlockFace.UP).getLocation(), ground.getBlock().getType(), ground.getBlock().getData()); - block.setDropItem(false); - block.setVelocity(new Vector(0, 0.4 + i * 0.01, 0)); - Variables.blocks.add(block.getUniqueId()); - } - for (Entity n: ground.getChunk().getEntities()) { - if (n instanceof LivingEntity) { - if (n.getLocation().distance(ground) <= 2.0D && n.getUniqueId() != 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++) { - if (e.getPlayer().getInventory().getItemInMainHand() != null) { - if (e.getPlayer().getInventory().getItemInMainHand().getEnchantments().containsKey(Enchantment.DURABILITY)) { - if (SlimefunStartup.randomize(100) <= (60 + 40 / (e.getPlayer().getInventory().getItemInMainHand().getEnchantmentLevel(Enchantment.DURABILITY) + 1))) PlayerInventory.damageItemInHand(e.getPlayer()); - } - else PlayerInventory.damageItemInHand(e.getPlayer()); - } - } - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_VEIN_MINING, "PICKAXE_OF_VEIN_MINING", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {new ItemStack(Material.EMERALD_ORE), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.EMERALD_ORE), null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) - .register(true, new BlockBreakHandler() { - - @Override - public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.PICKAXE_OF_VEIN_MINING, 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) { - 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; - } - }); - - new SoulboundItem(Categories.WEAPONS, SlimefunItems.SOULBOUND_SWORD, "SOULBOUND_SWORD", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_SWORD), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) - .register(true); - - new SoulboundItem(Categories.WEAPONS, SlimefunItems.SOULBOUND_BOW, "SOULBOUND_BOW", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.BOW), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) - .register(true); - - new SoulboundItem(Categories.TOOLS, SlimefunItems.SOULBOUND_PICKAXE, "SOULBOUND_PICKAXE", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_PICKAXE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) - .register(true); - - new SoulboundItem(Categories.TOOLS, SlimefunItems.SOULBOUND_AXE, "SOULBOUND_AXE", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_AXE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) - .register(true); - - new ExcludedSoulboundTool(Categories.TOOLS, SlimefunItems.SOULBOUND_SHOVEL, "SOULBOUND_SHOVEL", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_SPADE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) - .register(true); - - new ExcludedSoulboundTool(Categories.TOOLS, SlimefunItems.SOULBOUND_HOE, "SOULBOUND_HOE", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_HOE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) - .register(true); - - new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_HELMET, "SOULBOUND_HELMET", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_HELMET), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) - .register(true); - - new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_CHESTPLATE, "SOULBOUND_CHESTPLATE", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_CHESTPLATE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) - .register(true); - - new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_LEGGINGS, "SOULBOUND_LEGGINGS", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_LEGGINGS), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) - .register(true); - - new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_BOOTS, "SOULBOUND_BOOTS", - new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_BOOTS), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) - .register(true); - - new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.JUICER, "JUICER", - new ItemStack[] {null, new ItemStack(Material.GLASS), null, null, new ItemStack(Material.NETHER_FENCE), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, - new ItemStack[] { - new ItemStack(Material.APPLE), SlimefunItems.APPLE_JUICE, - new ItemStack(Material.MELON), SlimefunItems.MELON_JUICE, - new ItemStack(Material.CARROT_ITEM), SlimefunItems.CARROT_JUICE, - new ItemStack(Material.PUMPKIN), SlimefunItems.PUMPKIN_JUICE}, - Material.NETHER_FENCE) - .register(true, new MultiBlockInteractionHandler() { - - @Override - public boolean onInteract(Player p, MultiBlock mb, Block b) { - SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("JUICER"); - - if (mb.isMultiBlock(machine)) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { - if (Slimefun.hasUnlocked(p, SlimefunItems.JUICER, true)) { - Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); - Inventory inv = disp.getInventory(); - for (ItemStack current: inv.getContents()) { - for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { - if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { - ItemStack adding = RecipeType.getRecipeOutput(machine, convert); - if (InvUtils.fits(inv, adding)) { - ItemStack removing = current.clone(); - removing.setAmount(1); - inv.removeItem(removing); - inv.addItem(adding); - p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); - p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); - } - else Messages.local.sendTranslation(p, "machines.full-inventory", true); - return true; - } - } - } - Messages.local.sendTranslation(p, "machines.unknown-material", true); - } - } - return true; - } - else return false; - } - }); - - new Juice(Categories.FOOD, SlimefunItems.APPLE_JUICE, "APPLE_JUICE", RecipeType.JUICER, - new ItemStack[] {null, null, null, null, new ItemStack(Material.APPLE), null, null, null, null}) - .register(true); - - new Juice(Categories.FOOD, SlimefunItems.CARROT_JUICE, "CARROT_JUICE", RecipeType.JUICER, - new ItemStack[] {null, null, null, null, new ItemStack(Material.CARROT_ITEM), null, null, null, null}) - .register(true); - - new Juice(Categories.FOOD, SlimefunItems.MELON_JUICE, "MELON_JUICE", RecipeType.JUICER, - new ItemStack[] {null, null, null, null, new ItemStack(Material.MELON), null, null, null, null}) - .register(true); - - new Juice(Categories.FOOD, SlimefunItems.PUMPKIN_JUICE, "PUMPKIN_JUICE", RecipeType.JUICER, - new ItemStack[] {null, null, null, null, new ItemStack(Material.PUMPKIN), null, null, null, null}) - .register(true); - - new Juice(Categories.FOOD, SlimefunItems.GOLDEN_APPLE_JUICE, "GOLDEN_APPLE_JUICE", RecipeType.JUICER, - new ItemStack[] {new ItemStack(Material.GOLDEN_APPLE), null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.BROKEN_SPAWNER, "BROKEN_SPAWNER", new RecipeType(SlimefunItems.PICKAXE_OF_CONTAINMENT), - new ItemStack[] {null, null, null, null, new ItemStack(Material.MOB_SPAWNER), null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.REPAIRED_SPAWNER, "REINFORCED_SPAWNER", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.RUNE_ENDER, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.BROKEN_SPAWNER, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.RUNE_ENDER}) - .register(true, new BlockPlaceHandler() { - - @Override - public boolean onBlockPlace(BlockPlaceEvent e, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) { - EntityType type = null; - for (String line: item.getItemMeta().getLore()) { - if (ChatColor.stripColor(line).startsWith("Type: ")) type = EntityType.valueOf(ChatColor.stripColor(line).replace("Type: ", "").replace(" ", "_").toUpperCase()); - } - if (type != null) { - CreatureSpawner spawner = (CreatureSpawner) e.getBlock().getState(); - spawner.setSpawnedType(type); - spawner.update(true, false); - } - return true; - } - else return false; - } - }); - - new EnhancedFurnace(1, 1, 1, SlimefunItems.ENHANCED_FURNACE, "ENHANCED_FURNACE", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new EnhancedFurnace(2, 1, 1, SlimefunItems.ENHANCED_FURNACE_2, "ENHANCED_FURNACE_2", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new EnhancedFurnace(2, 2, 1, SlimefunItems.ENHANCED_FURNACE_3, "ENHANCED_FURNACE_3", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_2, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new EnhancedFurnace(3, 2, 1, SlimefunItems.ENHANCED_FURNACE_4, "ENHANCED_FURNACE_4", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new EnhancedFurnace(3, 2, 2, SlimefunItems.ENHANCED_FURNACE_5, "ENHANCED_FURNACE_5", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new EnhancedFurnace(3, 3, 2, SlimefunItems.ENHANCED_FURNACE_6, "ENHANCED_FURNACE_6", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new EnhancedFurnace(4, 3, 2, SlimefunItems.ENHANCED_FURNACE_7, "ENHANCED_FURNACE_7", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new EnhancedFurnace(4, 4, 2, SlimefunItems.ENHANCED_FURNACE_8, "ENHANCED_FURNACE_8", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_7, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new EnhancedFurnace(5, 4, 2, SlimefunItems.ENHANCED_FURNACE_9, "ENHANCED_FURNACE_9", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new EnhancedFurnace(5, 5, 2, SlimefunItems.ENHANCED_FURNACE_10, "ENHANCED_FURNACE_10", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new EnhancedFurnace(5, 5, 3, SlimefunItems.ENHANCED_FURNACE_11, "ENHANCED_FURNACE_11", - new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new EnhancedFurnace(10, 10, 3, SlimefunItems.REINFORCED_FURNACE, "REINFORCED_FURNACE", - new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_11, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT}) - .register(true); - - new EnhancedFurnace(20, 10, 3, SlimefunItems.CARBONADO_EDGED_FURNACE, "CARBONADO_EDGED_FURNACE", - new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.CARBONADO, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_FURNACE, SlimefunItems.HEATING_COIL, SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.ELECTRO_MAGNET, "ELECTRO_MAGNET", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.NICKEL_INGOT, SlimefunItems.MAGNET, SlimefunItems.COBALT_INGOT, null, SlimefunItems.BATTERY, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.ELECTRIC_MOTOR, "ELECTRIC_MOTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.HEATING_COIL, "HEATING_COIL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) - .register(true); - - @SuppressWarnings("unchecked") - final String[] blockPlacerBlacklist = Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks") != null ? ((List) Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks")).toArray(new String[((List) Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks")).size()]): new String[] {"STRUCTURE_BLOCK"}; - - new SlimefunItem(Categories.MACHINES_1, SlimefunItems.BLOCK_PLACER, "BLOCK_PLACER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GOLD_4K, new ItemStack(Material.PISTON_BASE), SlimefunItems.GOLD_4K, new ItemStack(Material.IRON_INGOT), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.IRON_INGOT), SlimefunItems.GOLD_4K, new ItemStack(Material.PISTON_BASE), SlimefunItems.GOLD_4K}, - new String[] {"unplaceable-blocks"}, new Object[] {Arrays.asList("STRUCTURE_BLOCK")}) - .register(true, new AutonomousMachineHandler() { - - @Override - public boolean onBlockDispense(final BlockDispenseEvent e, Block dispenser, final Dispenser d, Block block, Block chest, SlimefunItem machine) { - if (machine.getID().equalsIgnoreCase("BLOCK_PLACER")) { - e.setCancelled(true); - if ((block.getType() == null || block.getType() == Material.AIR) && e.getItem().getType().isBlock()) { - for(String blockType : blockPlacerBlacklist) { - if (e.getItem().getType().toString().equals(blockType)) { - return false; - } - } - - SlimefunItem sfItem = SlimefunItem.getByItem(e.getItem()); - if (sfItem != null) { - if (!SlimefunItem.blockhandler.containsKey(sfItem.getID())) { - block.setType(e.getItem().getType()); - block.setData(e.getItem().getData().getData()); - 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().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - d.getInventory().removeItem(e.getItem()); - } - }, 2L); - } - } - } - else { - block.setType(e.getItem().getType()); - block.setData(e.getItem().getData().getData()); - 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().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - d.getInventory().removeItem(e.getItem()); - } - }, 2L); - } - } - } - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION, "SCROLL_OF_DIMENSIONAL_TELEPOSITION", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack 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() != 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; - } - }); - - new SlimefunBow(SlimefunItems.EXPLOSIVE_BOW, "EXPLOSIVE_BOW", - new ItemStack[] {null, new ItemStack(Material.STICK), new ItemStack(Material.SULPHUR), SlimefunItems.STAFF_FIRE, null, SlimefunItems.SULFATE, null, new ItemStack(Material.STICK), new ItemStack(Material.SULPHUR)}) - .register(true, new BowShootHandler() { - - @Override - public boolean onHit(EntityDamageByEntityEvent e, LivingEntity n) { - if (SlimefunManager.isItemSimiliar(Variables.arrows.get(e.getDamager().getUniqueId()), SlimefunItems.EXPLOSIVE_BOW, true)) { - Vector vector = n.getVelocity(); - vector.setY(0.6); - n.setVelocity(vector); - n.getWorld().createExplosion(n.getLocation(), 0F); - n.getWorld().playSound(n.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1F, 1F); - return true; - } - else return false; - } - }); - - new SlimefunBow(SlimefunItems.ICY_BOW, "ICY_BOW", - new ItemStack[] {null, new ItemStack(Material.STICK), new ItemStack(Material.ICE), SlimefunItems.STAFF_WATER, null, new ItemStack(Material.PACKED_ICE), null, new ItemStack(Material.STICK), new ItemStack(Material.ICE)}) - .register(true, new BowShootHandler() { - - @Override - public boolean onHit(EntityDamageByEntityEvent e, LivingEntity n) { - if (SlimefunManager.isItemSimiliar(Variables.arrows.get(e.getDamager().getUniqueId()), SlimefunItems.ICY_BOW, true)) { - n.getWorld().playEffect(n.getLocation(), Effect.STEP_SOUND, Material.ICE); - n.getWorld().playEffect(n.getEyeLocation(), Effect.STEP_SOUND, Material.ICE); - n.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20 * 2, 10)); - n.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 20 * 2, -10)); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.TOME_OF_KNOWLEDGE_SHARING, "TOME_OF_KNOWLEDGE_SHARING", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new ItemStack(Material.FEATHER), null, new ItemStack(Material.INK_SACK), SlimefunItems.MAGICAL_BOOK_COVER, new ItemStack(Material.GLASS_BOTTLE), null, new ItemStack(Material.BOOK_AND_QUILL), null}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.TOME_OF_KNOWLEDGE_SHARING, 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.setItemInHand(item); - p.getWorld().playSound(p.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1F, 1F); - return true; - } - else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.TOME_OF_KNOWLEDGE_SHARING, false)) { - List researches = Research.getResearches(ChatColor.stripColor(item.getItemMeta().getLore().get(1))); - for (Research research: researches) { - research.unlock(p, true); - } - PlayerInventory.consumeItemInHand(p); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.FLASK_OF_KNOWLEDGE, "FLASK_OF_KNOWLEDGE", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, null, null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.THIN_GLASS), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, null}, new CustomItem(SlimefunItems.FLASK_OF_KNOWLEDGE, 8)) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.FLASK_OF_KNOWLEDGE, true) && p.getLevel() >= 1) { - p.setLevel(p.getLevel() - 1); - p.getInventory().addItem(new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0)); - PlayerInventory.consumeItemInHand(p); - PlayerInventory.update(p); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.BIRTHDAY, new CustomItem(new MaterialData(Material.CAKE), "&bBirthday Cake"), "BIRTHDAY_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.TORCH), null, new ItemStack(Material.SUGAR), new ItemStack(Material.CAKE), new ItemStack(Material.SUGAR), null, null, null}) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_MILK, "CHRISTMAS_MILK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.MILK_BUCKET), new ItemStack(Material.GLASS_BOTTLE), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_MILK, 4)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, "CHRISTMAS_CHOCOLATE_MILK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CHRISTMAS_MILK, new MaterialData(Material.INK_SACK, (byte) 3).toItemStack(1), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, 2)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_EGG_NOG, "CHRISTMAS_EGG_NOG", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CHRISTMAS_MILK, new ItemStack(Material.EGG), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_EGG_NOG, 2)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_APPLE_CIDER, "CHRISTMAS_APPLE_CIDER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.APPLE_JUICE, new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_CIDER, 2)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_COOKIE, "CHRISTMAS_COOKIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.COOKIE), new ItemStack(Material.SUGAR), new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_COOKIE, 16)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_FRUIT_CAKE, "CHRISTMAS_FRUIT_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.APPLE), new ItemStack(Material.MELON), new ItemStack(Material.SUGAR), null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_FRUIT_CAKE, 4)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_APPLE_PIE, "CHRISTMAS_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE, "CHRISTMAS_HOT_CHOCOLATE", RecipeType.SMELTERY, - new ItemStack[] {SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, null, null, null, null, null, null, null, null}, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CAKE, "CHRISTMAS_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.SUGAR), SlimefunItems.WHEAT_FLOUR, new ItemStack(Material.MILK_BUCKET), null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CAKE, 4)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CARAMEL, "CHRISTMAS_CARAMEL", RecipeType.SMELTERY, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL, 4)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CARAMEL_APPLE, "CHRISTMAS_CARAMEL_APPLE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.SUGAR), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 2)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CHOCOLATE_APPLE, "CHRISTMAS_CHOCOLATE_APPLE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new CustomItem(Material.INK_SACK, 3), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 2)) - .register(true); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_PRESENT, "CHRISTMAS_PRESENT", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new ItemStack(Material.NAME_TAG), null, new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1)}) - .register(true); - - new SlimefunItem(Categories.EASTER, SlimefunItems.EASTER_CARROT_PIE, "EASTER_CARROT_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.CARROT_ITEM), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.EASTER_CARROT_PIE, 2)) - .register(true); - - new SlimefunItem(Categories.EASTER, SlimefunItems.CHRISTMAS_APPLE_PIE, "EASTER_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) - .register(true); - - new SlimefunItem(Categories.EASTER, SlimefunItems.EASTER_EGG, "EASTER_EGG", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1), new ItemStack(Material.EGG), new MaterialData(Material.INK_SACK, (byte) 13).toItemStack(1), null, null, null}, new CustomItem(SlimefunItems.EASTER_EGG, 2)) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.EASTER_EGG, true)) { - e.setCancelled(true); - PlayerInventory.consumeItemInHand(e.getPlayer()); - FireworkShow.launchRandom(e.getPlayer(), 2); - - List gifts = new ArrayList(); - for (int i = 0; i < 2; i++) { - gifts.add(new CustomItem(SlimefunItems.EASTER_CARROT_PIE, 4)); - gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 4)); - gifts.add(new CustomItem(SlimefunItems.CARROT_JUICE, 1)); - } - - gifts.add(new SkullItem("mrCookieSlime")); - gifts.add(new SkullItem("timtower")); - gifts.add(new SkullItem("bwfcwalshy")); - gifts.add(new SkullItem("jadedcat")); - gifts.add(new SkullItem("ZeldoKavira")); - gifts.add(new SkullItem("eyamaz")); - gifts.add(new SkullItem("Kaelten")); - gifts.add(new SkullItem("Myrathi")); - - p.getWorld().dropItemNaturally(p.getLocation(), gifts.get(SlimefunStartup.randomize(gifts.size()))); - return true; - } - else return false; - } - }); - - new SlimefunItem(Categories.MISC, SlimefunItems.REINFORCED_PLATE, "REINFORCED_PLATE", RecipeType.COMPRESSOR, - new ItemStack[] {new CustomItem(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.HARDENED_GLASS, "HARDENED_GLASS", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), SlimefunItems.REINFORCED_PLATE, new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS)}, - new CustomItem(SlimefunItems.HARDENED_GLASS, 16)) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.SOLAR_ARRAY, "SOLAR_ARRAY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.COOLING_UNIT, "COOLING_UNIT", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.ICE), new ItemStack(Material.ICE), new ItemStack(Material.ICE), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.ICE), new ItemStack(Material.ICE), new ItemStack(Material.ICE)}) - .register(true); - - new SlimefunBackpack(27, Categories.PORTABLE, SlimefunItems.COOLER, "COOLER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.COOLING_UNIT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.WITHER_PROOF_OBSIDIAN, "WITHER_PROOF_OBSIDIAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.HARDENED_GLASS, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT}, - new CustomItem(SlimefunItems.WITHER_PROOF_OBSIDIAN, 4)) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ANCIENT_PEDESTAL, "ANCIENT_PEDESTAL", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.STONE), null, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}, new CustomItem(SlimefunItems.ANCIENT_PEDESTAL, 4)) - .register(true); - - SlimefunItem.registerBlockHandler("ANCIENT_PEDESTAL", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - Item stack = AncientAltarListener.findItem(b); - if (stack != null) { - stack.removeMetadata("item_placed", SlimefunStartup.instance); - b.getWorld().dropItem(b.getLocation(), AncientAltarListener.fixItemStack(stack.getItemStack(), stack.getCustomName())); - stack.remove(); - } - return true; - } - }); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.ANCIENT_ALTAR, "ANCIENT_ALTAR", RecipeType.MAGIC_WORKBENCH, - new ItemStack[] {null, new ItemStack(Material.ENCHANTMENT_TABLE), null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}) - .register(true); - - // Slimefun 4 - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.ENERGY_REGULATOR, "ENERGY_REGULATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT}) - .register(true, new BlockTicker() { - - @Override - public boolean isSynchronized() { - return false; - } - - @Override - public void uniqueTick() { - } - - @Override - public void tick(Block b, SlimefunItem item, Config data) { - EnergyNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b); - } - }); - - SlimefunItem.registerBlockHandler("ENERGY_REGULATOR", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - EnergyHologram.remove(b); - return true; - } - }); - - new SlimefunItem(Categories.MISC, SlimefunItems.DUCT_TAPE, "DUCT_TAPE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_DUST, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.WOOL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.PAPER), new ItemStack(Material.PAPER), new ItemStack(Material.PAPER)}, new CustomItem(SlimefunItems.DUCT_TAPE, 2)) - .register(true); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SMALL_CAPACITOR, "SMALL_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.DURALUMIN_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.SULFATE, new ItemStack(Material.REDSTONE), SlimefunItems.DURALUMIN_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.DURALUMIN_INGOT}) - .registerDistibutingCapacitor(true, 128); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.MEDIUM_CAPACITOR, "MEDIUM_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BILLON_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.BILLON_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.SMALL_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.BILLON_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.BILLON_INGOT}) - .registerDistibutingCapacitor(true, 512); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.BIG_CAPACITOR, "BIG_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.STEEL_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.MEDIUM_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.STEEL_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.STEEL_INGOT}) - .registerDistibutingCapacitor(true, 1024); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.LARGE_CAPACITOR, "LARGE_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.BIG_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.REINFORCED_ALLOY_INGOT}) - .registerDistibutingCapacitor(true, 8192); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.CARBONADO_EDGED_CAPACITOR, "CARBONADO_EDGED_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.CARBONADO, new ItemStack(Material.REDSTONE), SlimefunItems.LARGE_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.CARBONADO, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.CARBONADO}) - .registerDistibutingCapacitor(true, 65536); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR, "SOLAR_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_INGOT, null, SlimefunItems.ALUMINUM_INGOT, null}) - .register(true, new EnergyTicker() { - - @Override - public double generateEnergy(Location l, SlimefunItem item, Config data) { - if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; - if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 2D; - return 0D; - } - - @Override - public boolean explode(Location l) { - return false; - } - }); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR_2, "SOLAR_GENERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR}) - .register(true, new EnergyTicker() { - - @Override - public double generateEnergy(Location l, SlimefunItem item, Config data) { - if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; - if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 8; - return 0D; - } - - @Override - public boolean explode(Location l) { - return false; - } - }); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR_3, "SOLAR_GENERATOR_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.CARBONADO, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2}) - .register(true, new EnergyTicker() { - - @Override - public double generateEnergy(Location l, SlimefunItem item, Config data) { - if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; - if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 32; - return 0D; - } - - @Override - public boolean explode(Location l) { - return false; - } - }); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR_4, "SOLAR_GENERATOR_4", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3}) - .register(true, new EnergyTicker() { - - @Override - public double generateEnergy(Location l, SlimefunItem item, Config data) { - if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; - if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 128; - return 64D; - } - - @Override - public boolean explode(Location l) { - return false; - } - }); - - new ChargingBench(Categories.ELECTRICITY, SlimefunItems.CHARGING_BENCH, "CHARGING_BENCH", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.BATTERY, new ItemStack(Material.WORKBENCH), SlimefunItems.BATTERY, null, SlimefunItems.SMALL_CAPACITOR, null}) - .registerChargeableBlock(true, 128); - - new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE, "ELECTRIC_FURNACE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.FURNACE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&bElectric Furnace"; - } - - @Override - public int getEnergyConsumption() { - return 2; - } - - @Override - public int getSpeed() { - return 1; - } - - }.registerChargeableBlock(true, 64); - - new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE_2, "ELECTRIC_FURNACE_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_FURNACE, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&bElectric Furnace"; - } - - @Override - public int getEnergyConsumption() { - return 3; - } - - @Override - public int getSpeed() { - return 2; - } - - }.registerChargeableBlock(true, 128); - - new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE_3, "ELECTRIC_FURNACE_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_FURNACE_2, SlimefunItems.STEEL_INGOT, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&bElectric Furnace"; - } - - @Override - public int getEnergyConsumption() { - return 5; - } - - @Override - public int getSpeed() { - return 4; - } - - }.registerChargeableBlock(true, 128); - - new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN, "ELECTRIC_GOLD_PAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, new ItemStack(Material.FLINT), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.FLINT), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT}) { - - @Override - public int getEnergyConsumption() { - return 1; - } - - @Override - public int getSpeed() { - return 1; - } - }.registerChargeableBlock(true, 128); - - new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN_2, "ELECTRIC_GOLD_PAN_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, new ItemStack(Material.IRON_INGOT), SlimefunItems.ELECTRIC_GOLD_PAN, new ItemStack(Material.IRON_INGOT), SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT}) { - - @Override - public int getEnergyConsumption() { - return 2; - } - - @Override - public int getSpeed() { - return 3; - } - }.registerChargeableBlock(true, 128); - - new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN_3, "ELECTRIC_GOLD_PAN_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRIC_GOLD_PAN_2, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COBALT_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.COBALT_INGOT}) { - - @Override - public int getEnergyConsumption() { - return 7; - } - - @Override - public int getSpeed() { - return 10; - } - }.registerChargeableBlock(true, 512); - - new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER, "ELECTRIC_DUST_WASHER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_GOLD_PAN, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) { - - @Override - public int getEnergyConsumption() { - return 3; - } - - @Override - public int getSpeed() { - return 1; - } - }.registerChargeableBlock(true, 128); - - new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER_2, "ELECTRIC_DUST_WASHER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT}) { - - @Override - public int getEnergyConsumption() { - return 5; - } - - @Override - public int getSpeed() { - return 2; - } - }.registerChargeableBlock(true, 128); - - new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER_3, "ELECTRIC_DUST_WASHER_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_DUST_WASHER_2, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CORINTHIAN_BRONZE_INGOT}) { - - @Override - public int getEnergyConsumption() { - return 15; - } - - @Override - public int getSpeed() { - return 10; - } - }.registerChargeableBlock(true, 512); - - new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY, "ELECTRIC_INGOT_FACTORY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.FLINT_AND_STEEL), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&cElectric Ingot Factory"; - } - - @Override - public int getEnergyConsumption() { - return 4; - } - - @Override - public int getSpeed() { - return 1; - } - - }.registerChargeableBlock(true, 256); - - new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, "ELECTRIC_INGOT_FACTORY_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.BRASS_INGOT}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&cElectric Ingot Factory"; - } - - @Override - public int getEnergyConsumption() { - return 7; - } - - @Override - public int getSpeed() { - return 2; - } - - }.registerChargeableBlock(true, 256); - - new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_3, "ELECTRIC_INGOT_FACTORY_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.BRASS_INGOT}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&cElectric Ingot Factory"; - } - - @Override - public int getEnergyConsumption() { - return 20; - } - - @Override - public int getSpeed() { - return 8; - } - - }.registerChargeableBlock(true, 512); - - new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE, "ELECTRIFIED_CRUCIBLE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.CRUCIBLE, SlimefunItems.LEAD_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.LEAD_INGOT}) { - - @Override - public int getEnergyConsumption() { - return 24; - } - - @Override - public int getSpeed() { - return 1; - } - - }.registerChargeableBlock(true, 1024); - - new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE_2, "ELECTRIFIED_CRUCIBLE_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.ELECTRIFIED_CRUCIBLE, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) { - - @Override - public int getEnergyConsumption() { - return 40; - } - - @Override - public int getSpeed() { - return 2; - } - - }.registerChargeableBlock(true, 1024); - - new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE_3, "ELECTRIFIED_CRUCIBLE_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.ELECTRIFIED_CRUCIBLE_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.STEEL_PLATE, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT}) { - - @Override - public int getEnergyConsumption() { - return 60; - } - - @Override - public int getSpeed() { - return 4; - } - - }.registerChargeableBlock(true, 1024); - - new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER, "ELECTRIC_ORE_GRINDER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { - - @Override - public void registerDefaultRecipes() { - } - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.STONE_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&bElectric Ore Grinder"; - } - - @Override - public int getEnergyConsumption() { - return 6; - } - - @Override - public int getSpeed() { - return 1; - } - - @Override - public String getMachineIdentifier() { - return "ELECTRIC_ORE_GRINDER"; - } - - }.registerChargeableBlock(true, 128); - - new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER_2, "ELECTRIC_ORE_GRINDER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_ORE_GRINDER, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GILDED_IRON}) { - - @Override - public void registerDefaultRecipes() { - } - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&bElectric Ore Grinder"; - } - - @Override - public int getEnergyConsumption() { - return 15; - } - - @Override - public int getSpeed() { - return 4; - } - - @Override - public String getMachineIdentifier() { - return "ELECTRIC_ORE_GRINDER"; - } - - }.registerChargeableBlock(true, 512); - - new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER, "HEATED_PRESSURE_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, new ItemStack(Material.GLASS), SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public int getEnergyConsumption() { - return 5; - } - - @Override - public int getSpeed() { - return 1; - } - - }.registerChargeableBlock(true, 128); - - new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER_2, "HEATED_PRESSURE_CHAMBER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_ALLOY_INGOT}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public int getEnergyConsumption() { - return 22; - } - - @Override - public int getSpeed() { - return 5; - } - - }.registerChargeableBlock(true, 256); - - new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_PULVERIZER, "ELECTRIC_INGOT_PULVERIZER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.ELECTRIC_ORE_GRINDER, null, SlimefunItems.LEAD_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}){ - @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 int getEnergyConsumption() { - return 7; - } - - @Override - public int getSpeed() { - return 1; - } - - @Override - public String getMachineIdentifier() { - return "ELECTRIC_INGOT_PULVERIZER"; - } - }.registerChargeableBlock(true, 512); - - new AGenerator(Categories.ELECTRICITY, SlimefunItems.COAL_GENERATOR, "COAL_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, SlimefunItems.NICKEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.NICKEL_INGOT, null, SlimefunItems.NICKEL_INGOT, null}) { - - @Override - public void registerDefaultRecipes() { - registerFuel(new MachineFuel(8, new MaterialData(Material.COAL, (byte) 0).toItemStack(1))); - registerFuel(new MachineFuel(8, new MaterialData(Material.COAL, (byte) 1).toItemStack(1))); - registerFuel(new MachineFuel(80, new ItemStack(Material.COAL_BLOCK))); - registerFuel(new MachineFuel(12, new ItemStack(Material.BLAZE_ROD))); - - // Logs - registerFuel(new MachineFuel(1, new MaterialData(Material.LOG, (byte) 0).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.LOG, (byte) 1).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.LOG, (byte) 2).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.LOG, (byte) 3).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.LOG_2, (byte) 0).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.LOG_2, (byte) 1).toItemStack(1))); - - // Wooden Planks - registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 0).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 1).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 2).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 3).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 4).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 5).toItemStack(1))); - } - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&cCoal Generator"; - } - - @Override - public int getEnergyProduction() { - return 8; - } - - }.registerUnrechargeableBlock(true, 64); - - new AGenerator(Categories.ELECTRICITY, SlimefunItems.BIO_REACTOR, "BIO_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HEATING_COIL, SlimefunItems.COMPOSTER, SlimefunItems.HEATING_COIL, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}) { - - @Override - public void registerDefaultRecipes() { - registerFuel(new MachineFuel(2, new ItemStack(Material.ROTTEN_FLESH))); - registerFuel(new MachineFuel(2, new ItemStack(Material.SPIDER_EYE))); - registerFuel(new MachineFuel(2, new ItemStack(Material.BONE))); - registerFuel(new MachineFuel(3, new ItemStack(Material.APPLE))); - registerFuel(new MachineFuel(3, new ItemStack(Material.MELON))); - registerFuel(new MachineFuel(27, new ItemStack(Material.MELON_BLOCK))); - registerFuel(new MachineFuel(3, new ItemStack(Material.PUMPKIN))); - registerFuel(new MachineFuel(3, new ItemStack(Material.PUMPKIN_SEEDS))); - registerFuel(new MachineFuel(3, new ItemStack(Material.MELON_SEEDS))); - registerFuel(new MachineFuel(3, new ItemStack(Material.WHEAT))); - registerFuel(new MachineFuel(3, new ItemStack(Material.SEEDS))); - registerFuel(new MachineFuel(3, new ItemStack(Material.CARROT_ITEM))); - registerFuel(new MachineFuel(3, new ItemStack(Material.POTATO_ITEM))); - registerFuel(new MachineFuel(3, new ItemStack(Material.SUGAR_CANE))); - registerFuel(new MachineFuel(3, new ItemStack(Material.NETHER_STALK))); - registerFuel(new MachineFuel(2, new ItemStack(Material.YELLOW_FLOWER))); - registerFuel(new MachineFuel(2, new ItemStack(Material.RED_ROSE))); - registerFuel(new MachineFuel(2, new ItemStack(Material.RED_MUSHROOM))); - registerFuel(new MachineFuel(2, new ItemStack(Material.BROWN_MUSHROOM))); - registerFuel(new MachineFuel(2, new ItemStack(Material.VINE))); - registerFuel(new MachineFuel(2, new ItemStack(Material.CACTUS))); - registerFuel(new MachineFuel(2, new ItemStack(Material.WATER_LILY))); - - // Leaves - registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES, (byte) 0).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES, (byte) 1).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES, (byte) 2).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES, (byte) 3).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES_2, (byte) 0).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES_2, (byte) 1).toItemStack(1))); - - // Saplings - registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 0).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 1).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 2).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 3).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 4).toItemStack(1))); - registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 5).toItemStack(1))); - } - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.GOLD_HOE); - } - - @Override - public String getInventoryTitle() { - return "&2Bio Reactor"; - } - - @Override - public int getEnergyProduction() { - return 4; - } - - }.registerUnrechargeableBlock(true, 128); - - new AutoEnchanter(Categories.ELECTRICITY, SlimefunItems.AUTO_ENCHANTER, "AUTO_ENCHANTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.ENCHANTMENT_TABLE), null, SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN}) - .registerChargeableBlock(true, 128); - - new AutoDisenchanter(Categories.ELECTRICITY, SlimefunItems.AUTO_DISENCHANTER, "AUTO_DISENCHANTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.REDSTONE), new ItemStack(Material.ANVIL), new ItemStack(Material.REDSTONE), SlimefunItems.CARBONADO, SlimefunItems.AUTO_ENCHANTER, SlimefunItems.CARBONADO, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN}) - .registerChargeableBlock(true, 128); - - new AutoAnvil(Categories.ELECTRICITY, SlimefunItems.AUTO_ANVIL, "AUTO_ANVIL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.ANVIL), null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK)}) { - - @Override - public int getRepairFactor() { - return 10; - } - - @Override - public int getEnergyConsumption() { - return 12; - } - - }.registerChargeableBlock(true, 128); - - new AutoAnvil(Categories.ELECTRICITY, SlimefunItems.AUTO_ANVIL_2, "AUTO_ANVIL_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.AUTO_ANVIL, null, SlimefunItems.STEEL_PLATE, SlimefunItems.HEATING_COIL, SlimefunItems.STEEL_PLATE, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK)}) { - - @Override - public int getRepairFactor() { - return 4; - } - - @Override - public int getEnergyConsumption() { - return 16; - } - - }.registerChargeableBlock(true, 256); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.MULTIMETER, "MULTIMETER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.COPPER_INGOT, null, SlimefunItems.COPPER_INGOT, null, SlimefunItems.REDSTONE_ALLOY, null, null, SlimefunItems.GOLD_6K, null}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(e.getItem(), SlimefunItems.MULTIMETER, true)) { - if (e.getClickedBlock() != null && ChargableBlock.isChargable(e.getClickedBlock())) { - e.setCancelled(true); - p.sendMessage(""); - p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bStored Energy: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getCharge(e.getClickedBlock())) + " J")); - p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bCapacity: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getMaxCharge(e.getClickedBlock())) + " J")); - p.sendMessage(""); - } - return true; - } - return false; - } - }); - - new SlimefunItem(Categories.MISC, SlimefunItems.PLASTIC_SHEET, "PLASTIC_SHEET", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[] {null, null, null, null, SlimefunItems.BUCKET_OF_OIL, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.ANDROID_MEMORY_CORE, "ANDROID_MEMORY_CORE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BRASS_INGOT, new MaterialData(Material.STAINED_GLASS, (byte) 1).toItemStack(1), SlimefunItems.BRASS_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.TIN_DUST, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BRASS_INGOT, new MaterialData(Material.STAINED_GLASS, (byte) 1).toItemStack(1), SlimefunItems.BRASS_INGOT}) - .register(true); - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER, "GPS_TRANSMITTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.STEEL_INGOT, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT}) - .registerChargeableBlock(true, 16, new BlockTicker() { - - @Override - public void tick(Block b, SlimefunItem item, Config data) { - int charge = ChargableBlock.getCharge(b); - if (charge > 0) { - Slimefun.getGPSNetwork().updateTransmitter(b, UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.ONLINE); - ChargableBlock.setCharge(b, charge - 1); - } - else Slimefun.getGPSNetwork().updateTransmitter(b, UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); - } - - @Override - public void uniqueTick() { - } - - @Override - public boolean isSynchronized() { - return false; - } - }); - - SlimefunItem.registerBlockHandler("GPS_TRANSMITTER", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - Slimefun.getGPSNetwork().updateTransmitter(b, UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); - return true; - } - }); - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_2, "GPS_TRANSMITTER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.CARBON, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER}) - .registerChargeableBlock(true, 64, new BlockTicker() { - - @Override - public void tick(Block b, SlimefunItem item, Config data) { - int charge = ChargableBlock.getCharge(b); - if (charge > 2) { - Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 4 + 100, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.ONLINE); - ChargableBlock.setCharge(b, charge - 3); - } - else { - Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 4 + 100, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); - } - } - - @Override - public void uniqueTick() { - } - - @Override - public boolean isSynchronized() { - return false; - } - }); - - SlimefunItem.registerBlockHandler("GPS_TRANSMITTER_2", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 4 + 100, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); - return true; - } - }); - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_3, "GPS_TRANSMITTER_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.CARBONADO, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2}) - .registerChargeableBlock(true, 256, new BlockTicker() { - - @Override - public void tick(Block b, SlimefunItem item, Config data) { - int charge = ChargableBlock.getCharge(b); - if (charge > 10) { - Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 16 + 500, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.ONLINE); - ChargableBlock.setCharge(b, charge - 11); - } - else { - Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 16 + 500, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); - } - } - - @Override - public void uniqueTick() { - } - - @Override - public boolean isSynchronized() { - return false; - } - }); - - SlimefunItem.registerBlockHandler("GPS_TRANSMITTER_3", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 16 + 500, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); - return true; - } - }); - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_4, "GPS_TRANSMITTER_4", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.NICKEL_INGOT, SlimefunItems.CARBONADO, SlimefunItems.NICKEL_INGOT, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3}) - .registerChargeableBlock(true, 1024, new BlockTicker() { - - @Override - public void tick(Block b, SlimefunItem item, Config data) { - int charge = ChargableBlock.getCharge(b); - if (charge > 45) { - Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 64 + 800, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.ONLINE); - ChargableBlock.setCharge(b, charge - 46); - } - else { - Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 64 + 800, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); - } - } - - @Override - public void uniqueTick() { - } - - @Override - public boolean isSynchronized() { - return false; - } - }); - - SlimefunItem.registerBlockHandler("GPS_TRANSMITTER_4", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 64 + 800, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); - return true; - } - }); - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_CONTROL_PANEL, "GPS_CONTROL_PANEL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COBALT_INGOT, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.COBALT_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { - if (e.getClickedBlock() == null) return false; - SlimefunItem item = BlockStorage.check(e.getClickedBlock()); - if (item == null || !item.getID().equals("GPS_CONTROL_PANEL")) return false; - e.setCancelled(true); - try { - Slimefun.getGPSNetwork().openTransmitterControlPanel(p); - } catch (Exception e1) { - e1.printStackTrace(); - } - return true; - } - }); - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_MARKER_TOOL, "GPS_MARKER_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), SlimefunItems.BASIC_CIRCUIT_BOARD, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), new ItemStack(Material.REDSTONE), SlimefunItems.REDSTONE_ALLOY, new ItemStack(Material.REDSTONE)}) - .register(true); - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_EMERGENCY_TRANSMITTER, "GPS_EMERGENCY_TRANSMITTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, null, SlimefunItems.GPS_TRANSMITTER, null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) - .register(true); - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID, "PROGRAMMABLE_ANDROID", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COAL_GENERATOR, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.NONE; - } - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } - .register(true); - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_MINER, "PROGRAMMABLE_ANDROID_MINER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_PICKAXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.MINER; - } - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } - .register(true); - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, "PROGRAMMABLE_ANDROID_FARMER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.FARMER; - } - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } - .register(true); - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER, "PROGRAMMABLE_ANDROID_WOODCUTTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_AXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_AXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.WOODCUTTER; - } - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } - .register(true); - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, "PROGRAMMABLE_ANDROID_FISHERMAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.FISHERMAN; - } - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } - .register(true); - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, "PROGRAMMABLE_ANDROID_BUTCHER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.FIGHTER; - } - - @Override - public float getFuelEfficiency() { - return 1; - } - - @Override - public int getTier() { - return 1; - } - - } - .register(true); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.ANDROID_INTERFACE_ITEMS, "ANDROID_INTERFACE_ITEMS", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.BASIC_CIRCUIT_BOARD, new MaterialData(Material.STAINED_GLASS, (byte) 11).toItemStack(1), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) - .register(true); - - new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.ANDROID_INTERFACE_FUEL, "ANDROID_INTERFACE_FUEL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, new MaterialData(Material.STAINED_GLASS, (byte) 14).toItemStack(1), SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) - .register(true); - - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2, "PROGRAMMABLE_ANDROID_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COMBUSTION_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.POWER_CRYSTAL, SlimefunItems.PLASTIC_SHEET}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.NONE; - } - - @Override - public float getFuelEfficiency() { - return 1.5F; - } - - @Override - public int getTier() { - return 2; - } - - } - .register(true); - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN, "PROGRAMMABLE_ANDROID_2_FISHERMAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.FISHERMAN; - } - - @Override - public float getFuelEfficiency() { - return 1.5F; - } - - @Override - public int getTier() { - return 2; - } - - } - .register(true); - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER, "PROGRAMMABLE_ANDROID_2_BUTCHER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.FIGHTER; - } - - @Override - public float getFuelEfficiency() { - return 1.5F; - } - - @Override - public int getTier() { - return 2; - } - - } - .register(true); - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER, "PROGRAMMABLE_ANDROID_2_FARMER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.ADVANCED_FARMER; - } - - @Override - public float getFuelEfficiency() { - return 1.5F; - } - - @Override - public int getTier() { - return 2; - } - - } - .register(true); - - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_3, "PROGRAMMABLE_ANDROID_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.NUCLEAR_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.CHEST), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BLISTERING_INGOT_3}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.NONE; - } - - @Override - public float getFuelEfficiency() { - return 1F; - } - - @Override - public int getTier() { - return 3; - } - - } - .register(true); - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN, "PROGRAMMABLE_ANDROID_3_FISHERMAN", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.FISHERMAN; - } - - @Override - public float getFuelEfficiency() { - return 1F; - } - - @Override - public int getTier() { - return 3; - } - - } - .register(true); - - new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER, "PROGRAMMABLE_ANDROID_3_BUTCHER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER_3, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public AndroidType getAndroidType() { - return AndroidType.FIGHTER; - } - - @Override - public float getFuelEfficiency() { - return 1F; - } - - @Override - public int getTier() { - return 3; - } - - } - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.BLANK_RUNE, "BLANK_RUNE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.OBSIDIAN), SlimefunItems.MAGIC_LUMP_1,new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE)}) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_AIR, "ANCIENT_RUNE_AIR", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.FEATHER), new ItemStack(Material.GHAST_TEAR), SlimefunItems.BLANK_RUNE, new ItemStack(Material.GHAST_TEAR) ,new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.FEATHER)}, new CustomItem(SlimefunItems.RUNE_AIR, 4)) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_EARTH, "ANCIENT_RUNE_EARTH", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.DIRT), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE), new ItemStack(Material.OBSIDIAN), SlimefunItems.BLANK_RUNE, new ItemStack(Material.OBSIDIAN) ,new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.DIRT)}, new CustomItem(SlimefunItems.RUNE_EARTH, 4)) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_FIRE, "ANCIENT_RUNE_FIRE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.FIREBALL), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.FIREBALL), new ItemStack(Material.BLAZE_POWDER), SlimefunItems.RUNE_EARTH, new ItemStack(Material.FLINT_AND_STEEL) ,new ItemStack(Material.FIREBALL), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.FIREBALL)}, new CustomItem(SlimefunItems.RUNE_FIRE, 4)) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_WATER, "ANCIENT_RUNE_WATER", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.RAW_FISH), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.WATER_BUCKET), new ItemStack(Material.SAND), SlimefunItems.BLANK_RUNE, new ItemStack(Material.SAND) ,new ItemStack(Material.WATER_BUCKET), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.RAW_FISH)}, new CustomItem(SlimefunItems.RUNE_WATER, 4)) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_ENDER, "ANCIENT_RUNE_ENDER", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENDER_PEARL), new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.BLANK_RUNE, new ItemStack(Material.EYE_OF_ENDER) ,new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENDER_PEARL)}, new CustomItem(SlimefunItems.RUNE_ENDER, 6)) - .register(true); - - new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_RAINBOW, "ANCIENT_RUNE_RAINBOW", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.MAGIC_LUMP_3, new MaterialData(Material.INK_SACK, (byte) 9).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_ENDER, new ItemStack(Material.WOOL) , new MaterialData(Material.INK_SACK, (byte) 11).toItemStack(1), SlimefunItems.ENDER_LUMP_3, new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1)}) - .register(true); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.INFERNAL_BONEMEAL, "INFERNAL_BONEMEAL", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.NETHER_STALK), SlimefunItems.RUNE_EARTH, new ItemStack(Material.NETHER_STALK), SlimefunItems.MAGIC_LUMP_2, new MaterialData(Material.INK_SACK, (byte) 15).toItemStack(1), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.NETHER_STALK), new ItemStack(Material.BLAZE_POWDER), new ItemStack(Material.NETHER_STALK)}, new CustomItem(SlimefunItems.INFERNAL_BONEMEAL, 8)) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { - if (SlimefunManager.isItemSimiliar(e.getItem(), SlimefunItems.INFERNAL_BONEMEAL, true)) { - if (e.getClickedBlock() != null && e.getClickedBlock().getType().equals(Material.NETHER_WARTS)) { - if (e.getClickedBlock().getData() < 3) { - e.getClickedBlock().setData((byte) (e.getClickedBlock().getData() + 1)); - e.getClickedBlock().getWorld().playEffect(e.getClickedBlock().getLocation(), Effect.STEP_SOUND, Material.REDSTONE_BLOCK); - PlayerInventory.consumeItemInHand(p); - } - } - return true; - } - return false; - } - }); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.ELYTRA_SCALE, "ELYTRA_SCALE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_ENDER, new ItemStack(Material.FEATHER), SlimefunItems.RUNE_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3}) - .register(true); - - new VanillaItem(Categories.MAGIC, SlimefunItems.ELYTRA, "ELYTRA", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, new ItemStack(Material.LEATHER_CHESTPLATE), SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE}) - .register(true); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.INFUSED_ELYTRA, "INFUSED_ELYTRA", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE}) - .register(true); - - new SoulboundItem(Categories.MAGIC, SlimefunItems.SOULBOUND_ELYTRA, "SOULBOUND_ELYTRA", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.ELYTRA, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.FLASK_OF_KNOWLEDGE}) - .register(true); - - RainbowTicker rainbow = new RainbowTicker(); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_WOOL, "RAINBOW_WOOL", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL)}, new CustomItem(SlimefunItems.RAINBOW_WOOL, 8)) - .register(true, rainbow); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_GLASS, "RAINBOW_GLASS", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS)}, new CustomItem(SlimefunItems.RAINBOW_GLASS, 8)) - .register(true, rainbow); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_GLASS_PANE, "RAINBOW_GLASS_PANE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE, 8)) - .register(true, rainbow); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_CLAY, "RAINBOW_CLAY", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY)}, new CustomItem(SlimefunItems.RAINBOW_CLAY, 8)) - .register(true, rainbow); - - RainbowTicker xmas = new RainbowTicker(13, 14); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_WOOL_XMAS, "RAINBOW_WOOL_XMAS", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_WOOL_XMAS, 2)) - .register(true, xmas); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_GLASS_XMAS, "RAINBOW_GLASS_XMAS", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_XMAS, 2)) - .register(true, xmas); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_GLASS_PANE_XMAS, "RAINBOW_GLASS_PANE_XMAS", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE_XMAS, 2)) - .register(true, xmas); - - new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_CLAY_XMAS, "RAINBOW_CLAY_XMAS", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_CLAY_XMAS, 2)) - .register(true, xmas); - - RainbowTicker valentine = new RainbowTicker(2, 6, 10); - - new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_WOOL_VALENTINE, "RAINBOW_WOOL_VALENTINE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_WOOL_VALENTINE, 2)) - .register(true, valentine); - - new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_GLASS_VALENTINE, "RAINBOW_GLASS_VALENTINE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_VALENTINE, 2)) - .register(true, valentine); - - new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_GLASS_PANE_VALENTINE, "RAINBOW_GLASS_PANE_VALENTINE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE_VALENTINE, 2)) - .register(true, valentine); - - new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_CLAY_VALENTINE, "RAINBOW_CLAY_VALENTINE", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_CLAY_VALENTINE, 2)) - .register(true, valentine); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.WITHER_PROOF_GLASS, "WITHER_PROOF_GLASS", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.HARDENED_GLASS, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT}, - new CustomItem(SlimefunItems.WITHER_PROOF_GLASS, 4)) - .register(true); - - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_GEO_SCANNER, "GPS_GEO_SCANNER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET}) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { - if (e.getClickedBlock() == null) return false; - SlimefunItem item = BlockStorage.check(e.getClickedBlock()); - if (item == null || !item.getID().equals("GPS_GEO_SCANNER")) return false; - e.setCancelled(true); - try { - Slimefun.getGPSNetwork().scanChunk(p, e.getClickedBlock().getChunk()); - } catch (Exception e1) { - e1.printStackTrace(); - } - return true; - } - }); - - new OilPump(Categories.GPS, SlimefunItems.OIL_PUMP, "OIL_PUMP", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, null, new ItemStack(Material.BUCKET), null}) { - - @Override - public int getEnergyConsumption() { - return 14; - } - - @Override - public int getSpeed() { - return 1; - }; - - }.registerChargeableBlock(true, 200); - - new NetherDrill(Categories.GPS, SlimefunItems.NETHER_DRILL, "NETHER_DRILL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[]{SlimefunItems.LEAD_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.OIL_PUMP, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.BIG_CAPACITOR, SlimefunItems.LEAD_INGOT}){ - @Override - public int getSpeed() { - return 1; - } - - @Override - public int getEnergyConsumption() { - return 51; - } - }.registerChargeableBlock(true, 1024); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BUCKET_OF_OIL, "BUCKET_OF_OIL", new RecipeType(SlimefunItems.OIL_PUMP), - new ItemStack[] {null, null, null, null, new ItemStack(Material.BUCKET), null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BUCKET_OF_FUEL, "BUCKET_OF_FUEL", new RecipeType(SlimefunItems.REFINERY), - new ItemStack[] {null, null, null, null, SlimefunItems.BUCKET_OF_OIL, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.NETHER_ICE, "NETHER_ICE", new RecipeType(SlimefunItems.NETHER_DRILL), - new ItemStack[] {null, null, null, null, null, null, null, null}) - .register(true); - - new Refinery(Categories.ELECTRICITY, SlimefunItems.REFINERY, "REFINERY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.HARDENED_GLASS, new ItemStack(Material.PISTON_BASE), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PISTON_BASE)}) { - - @Override - public int getEnergyConsumption() { - return 16; - } - - @Override - public int getSpeed() { - return 1; - }; - - }.registerChargeableBlock(true, 256); - - new AGenerator(Categories.ELECTRICITY, SlimefunItems.LAVA_GENERATOR, "LAVA_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.GOLD_16K, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL}) { - - @Override - public void registerDefaultRecipes() { - registerFuel(new MachineFuel(40, new ItemStack(Material.LAVA_BUCKET))); - } - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&4Lava Generator"; - } - - @Override - public int getEnergyProduction() { - return 10; - } - - }.registerUnrechargeableBlock(true, 512); - - new AGenerator(Categories.ELECTRICITY, SlimefunItems.COMBUSTION_REACTOR, "COMBUSTION_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL}) { - - @Override - public void registerDefaultRecipes() { - registerFuel(new MachineFuel(30, SlimefunItems.BUCKET_OF_OIL)); - registerFuel(new MachineFuel(90, SlimefunItems.BUCKET_OF_FUEL)); - } - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.FLINT_AND_STEEL); - } - - @Override - public String getInventoryTitle() { - return "&cCombustion Reactor"; - } - - @Override - public int getEnergyProduction() { - return 12; - } - - }.registerUnrechargeableBlock(true, 256); - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TELEPORTER_PYLON, "GPS_TELEPORTER_PYLON", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.HEATING_COIL, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT}, new CustomItem(SlimefunItems.GPS_TELEPORTER_PYLON, 8)) - .register(true, new RainbowTicker(9, 10)); - - new Teleporter(Categories.GPS, SlimefunItems.GPS_TELEPORTATION_MATRIX, "GPS_TELEPORTATION_MATRIX", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.GPS_CONTROL_PANEL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.GPS_TELEPORTER_PYLON}) { - - - @Override - public void onInteract(final Player p, final Block b) throws Exception { - GPSNetwork.openTeleporterGUI(p, UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), b, Slimefun.getGPSNetwork().getNetworkComplexity(UUID.fromString(BlockStorage.getBlockInfo(b, "owner")))); - } - - } - .register(true); - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED, "GPS_ACTIVATION_DEVICE_SHARED", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.STONE_PLATE), null, new ItemStack(Material.REDSTONE), SlimefunItems.GPS_TRANSMITTER, new ItemStack(Material.REDSTONE), SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT}) - .register(true); - - new SlimefunItem(Categories.GPS, SlimefunItems.GPS_ACTIVATION_DEVICE_PERSONAL, "GPS_ACTIVATION_DEVICE_PERSONAL", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.LEAD_INGOT, null, SlimefunItems.COBALT_INGOT, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED, SlimefunItems.COBALT_INGOT, null, SlimefunItems.LEAD_INGOT, null}) - .register(true); - - SlimefunItem.registerBlockHandler("GPS_ACTIVATION_DEVICE_PERSONAL", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - return true; - } - }); - - new SlimefunItem(Categories.TECH, SlimefunItems.HOLOGRAM_PROJECTOR, "HOLOGRAM_PROJECTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.POWER_CRYSTAL, null, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}, new CustomItem(SlimefunItems.HOLOGRAM_PROJECTOR, 3)) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { - if (e.getClickedBlock() == null) return false; - SlimefunItem item = BlockStorage.check(e.getClickedBlock()); - if (item == null || !item.getID().equals("HOLOGRAM_PROJECTOR")) return false; - e.setCancelled(true); - - if (BlockStorage.getBlockInfo(e.getClickedBlock(), "owner").equals(p.getUniqueId().toString())) { - Projector.openEditor(p, e.getClickedBlock()); - } - - return true; - } - }); - - SlimefunItem.registerBlockHandler("HOLOGRAM_PROJECTOR", 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()); - - Projector.getArmorStand(b); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - Projector.getArmorStand(b).remove(); - return true; - } - }); - - new SlimefunItem(Categories.MAGIC, SlimefunItems.INFUSED_HOPPER, "INFUSED_HOPPER", RecipeType.ANCIENT_ALTAR, - new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.RUNE_EARTH, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_ENDER, SlimefunItems.INFUSED_MAGNET, SlimefunItems.RUNE_ENDER, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_EARTH, new ItemStack(Material.OBSIDIAN)}) - .register(true, new BlockTicker() { - - @Override - public void uniqueTick() { - } - - @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. - return; - } - ArmorStand hologram = InfusedHopper.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_ENDERMEN_TELEPORT, 5F, 2F); - } - - @Override - public boolean isSynchronized() { - return true; - } - }); - - SlimefunItem.registerBlockHandler("INFUSED_HOPPER", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - InfusedHopper.getArmorStand(b, true); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - final ArmorStand hologram = InfusedHopper.getArmorStand(b, false); - if (hologram != null) { - hologram.remove(); - } - return true; - } - }); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT, "BLISTERING_INGOT", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.URANIUM, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT_2, "BLISTERING_INGOT_2", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.BLISTERING_INGOT, SlimefunItems.CARBONADO, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT_3, "BLISTERING_INGOT_3", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.BLISTERING_INGOT_2,new ItemStack(Material.NETHER_STAR), null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.ENRICHED_NETHER_ICE, "ENRICHED_NETHER_ICE", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[]{SlimefunItems.NETHER_ICE, SlimefunItems.PLUTONIUM, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.GPS, SlimefunItems.ELEVATOR, "ELEVATOR_PLATE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.STONE_PLATE), null, new ItemStack(Material.PISTON_BASE), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PISTON_BASE), SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT}, - new CustomItem(SlimefunItems.ELEVATOR, 2)) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(final ItemUseEvent e, Player p, ItemStack stack) { - if (e.getClickedBlock() == null) return false; - SlimefunItem item = BlockStorage.check(e.getClickedBlock()); - if (item == null) return false; - if (!item.getID().equals("ELEVATOR_PLATE")) return false; - - if (BlockStorage.getBlockInfo(e.getClickedBlock(), "owner").equals(p.getUniqueId().toString())) Elevator.openEditor(p, e.getClickedBlock()); - return true; - } - }); - - SlimefunItem.registerBlockHandler("ELEVATOR_PLATE", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - BlockStorage.addBlockInfo(b, "floor", "&rFloor #0"); - BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - return true; - } - }); - - new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR, "FOOD_FABRICATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BILLON_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.CAN, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.GOLD_HOE); - } - - @Override - public String getInventoryTitle() { - return "&cFood Fabricator"; - } - - @Override - public int getEnergyConsumption() { - return 7; - } - - @Override - public int getSpeed() { - return 1; - }; - - }.registerChargeableBlock(true, 256); - - new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR_2, "FOOD_FABRICATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_HOE); - } - - @Override - public String getInventoryTitle() { - return "&cFood Fabricator"; - } - - @Override - public int getEnergyConsumption() { - return 24; - } - - @Override - public int getSpeed() { - return 6; - }; - - }.registerChargeableBlock(true, 512); - - new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD2, "ORGANIC_FOOD_WHEAT", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.WHEAT), null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD3, "ORGANIC_FOOD_CARROT", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.CARROT_ITEM), null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD4, "ORGANIC_FOOD_POTATO", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.POTATO_ITEM), null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD5, "ORGANIC_FOOD_SEEDS", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.SEEDS), null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD6, "ORGANIC_FOOD_BEETROOT", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.BEETROOT), null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD7, "ORGANIC_FOOD_MELON", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.MELON), null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD8, "ORGANIC_FOOD_APPLE", new RecipeType(SlimefunItems.FOOD_FABRICATOR), - new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.APPLE), null, null, null, null, null, null, null}) - .register(true); - - new AutoBreeder(Categories.ELECTRICITY, SlimefunItems.AUTO_BREEDER, "AUTO_BREEDER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.GOLD_18K, SlimefunItems.CAN, SlimefunItems.GOLD_18K, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.HAY_BLOCK), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.LEAD_INGOT}) - .registerChargeableBlock(true, 1024); - - new AnimalGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, "ANIMAL_GROWTH_ACCELERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ORGANIC_FOOD2, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.AUTO_BREEDER, SlimefunItems.REINFORCED_ALLOY_INGOT}) - .registerChargeableBlock(true, 1024); - - new XPCollector(Categories.ELECTRICITY, SlimefunItems.XP_COLLECTOR, "XP_COLLECTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.AUTO_ENCHANTER, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRONZE_INGOT}) - .registerChargeableBlock(true, 1024); - - new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER, "FOOD_COMPOSTER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.CAN, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.GOLD_HOE); - } - - @Override - public String getInventoryTitle() { - return "&cFood Composter"; - } - - @Override - public int getEnergyConsumption() { - return 8; - } - - @Override - public int getSpeed() { - return 1; - } - - }.registerChargeableBlock(true, 256); - - new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER_2, "FOOD_COMPOSTER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_COMPOSTER, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_HOE); - } - - @Override - public String getInventoryTitle() { - return "&cFood Composter"; - } - - @Override - public int getEnergyConsumption() { - return 26; - } - - @Override - public int getSpeed() { - return 10; - } - - }.registerChargeableBlock(true, 256); - - new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER2, "FERTILIZER_WHEAT", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD2, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER3, "FERTILIZER_CARROT", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD3, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER4, "FERTILIZER_POTATO", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD4, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER5, "FERTILIZER_SEEDS", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD5, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER6, "FERTILIZER_BEETROOT", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD6, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER7, "FERTILIZER_MELON", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD7, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER8, "FERTILIZER_APPLE", new RecipeType(SlimefunItems.FOOD_COMPOSTER), - new ItemStack[] {SlimefunItems.ORGANIC_FOOD8, null, null, null, null, null, null, null, null}) - .register(true); - - new CropGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.CROP_GROWTH_ACCELERATOR, "CROP_GROWTH_ACCELERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, SlimefunItems.ELECTRO_MAGNET}) - { - - @Override - public int getEnergyConsumption() { - return 25; - } - - @Override - public int getRadius() { - return 3; - } - - @Override - public int getSpeed() { - return 3; - } - - }.registerChargeableBlock(true, 1024); - - new CropGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.CROP_GROWTH_ACCELERATOR_2, "CROP_GROWTH_ACCELERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CROP_GROWTH_ACCELERATOR, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.ELECTRO_MAGNET}) - { - - @Override - public int getEnergyConsumption() { - return 30; - } - - @Override - public int getRadius() { - return 4; - } - - @Override - public int getSpeed() { - return 4; - } - - }.registerChargeableBlock(true, 1024); - - new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER, "FREEZER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PACKED_ICE), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COOLING_UNIT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.COOLING_UNIT}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.GOLD_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&bFreezer"; - } - - @Override - public int getEnergyConsumption() { - return 9; - } - - @Override - public int getSpeed() { - return 1; - } - - }.registerChargeableBlock(true, 256); - - new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER_2, "FREEZER_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.FREEZER, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COOLING_UNIT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.COOLING_UNIT}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&bFreezer"; - } - - @Override - public int getEnergyConsumption() { - return 15; - } - - @Override - public int getSpeed() { - return 2; - } - - }.registerChargeableBlock(true, 256); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.REACTOR_COOLANT_CELL, "REACTOR_COOLANT_CELL", new RecipeType(SlimefunItems.FREEZER), - new ItemStack[] {new ItemStack(Material.PACKED_ICE), null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.TECH_MISC, SlimefunItems.NETHER_ICE_COOLANT_CELL, "NETHER_ICE_COOLANT_CELL", new RecipeType(SlimefunItems.HEATED_PRESSURE_CHAMBER), - new ItemStack[]{SlimefunItems.ENRICHED_NETHER_ICE, null, null, null, null, null, null, null, null}) - .register(true); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.NEPTUNIUM, "NEPTUNIUM", new RecipeType(SlimefunItems.NUCLEAR_REACTOR), - new ItemStack[] {SlimefunItems.URANIUM, null, null, null, null, null, null, null, null}) - .register(true); - - SlimefunItem.setRadioactive(SlimefunItems.NEPTUNIUM); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.PLUTONIUM, "PLUTONIUM", new RecipeType(SlimefunItems.NUCLEAR_REACTOR), - new ItemStack[] {SlimefunItems.NEPTUNIUM, null, null, null, null, null, null, null, null}) - .register(true); - - SlimefunItem.setRadioactive(SlimefunItems.PLUTONIUM); - - new SlimefunItem(Categories.RESOURCES, SlimefunItems.BOOSTED_URANIUM, "BOOSTED_URANIUM", RecipeType.HEATED_PRESSURE_CHAMBER, - new ItemStack[] {SlimefunItems.PLUTONIUM, SlimefunItems.URANIUM, null, null, null, null, null, null, null}) - .register(true); - - SlimefunItem.setRadioactive(SlimefunItems.BOOSTED_URANIUM); - - new AReactor(Categories.ELECTRICITY, SlimefunItems.NUCLEAR_REACTOR, "NUCLEAR_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CARBONADO_EDGED_CAPACITOR, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.REINFORCED_PLATE, SlimefunItems.COOLING_UNIT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT}){ - - @Override - public String getInventoryTitle() { - return "&2Nuclear Reactor"; - } - - @Override - public void registerDefaultRecipes() { - registerFuel(new MachineFuel(1200, SlimefunItems.URANIUM, SlimefunItems.NEPTUNIUM)); - registerFuel(new MachineFuel(600, SlimefunItems.NEPTUNIUM, SlimefunItems.PLUTONIUM)); - registerFuel(new MachineFuel(1500, SlimefunItems.BOOSTED_URANIUM, null)); - } - - @Override - public int getEnergyProduction() { - return 250; - } - - @Override - public void extraTick(Location l) { - - } - - @Override - public ItemStack getProgressBar() { - try { - return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTNhZDhlZTg0OWVkZjA0ZWQ5YTI2Y2EzMzQxZjYwMzNiZDc2ZGNjNDIzMWVkMWVhNjNiNzU2NTc1MWIyN2FjIn19fQ=="); - } catch (Exception e) { - return new ItemStack(Material.BLAZE_POWDER); - } - } - - @Override - public ItemStack getCoolant() { - return SlimefunItems.REACTOR_COOLANT_CELL; - } - } - .registerChargeableBlock(true, 16384); - - new AReactor(Categories.ELECTRICITY, SlimefunItems.NETHERSTAR_REACTOR, "NETHERSTAR_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[]{SlimefunItems.BOOSTED_URANIUM, SlimefunItems.CARBONADO_EDGED_CAPACITOR, SlimefunItems.BOOSTED_URANIUM, SlimefunItems.REINFORCED_PLATE, new ItemStack(Material.NETHER_STAR), SlimefunItems.REINFORCED_PLATE, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CORINTHIAN_BRONZE_INGOT}){ - - @Override - public String getInventoryTitle() { - return "&fNether Star Reactor"; - } - - @Override - public void registerDefaultRecipes() { - registerFuel(new MachineFuel(1800, new ItemStack(Material.NETHER_STAR))); - } - - @Override - public int getEnergyProduction() { - return 512; - } - - @Override - public void extraTick(final Location l) { - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { - @Override - public void run() { - for (Entity entity : ReactorHologram.getArmorStand(l).getNearbyEntities(5, 5, 5)) { - if (entity instanceof LivingEntity) { - ((LivingEntity) entity).addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 60, 1)); - } - } - } - }, 0); - } - - @Override - public ItemStack getCoolant() { - return SlimefunItems.NETHER_ICE_COOLANT_CELL; - } - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.NETHER_STAR); - } - - }.registerChargeableBlock(true, 32768); - - new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_MOTOR, "CARGO_MOTOR", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS, SlimefunItems.SILVER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS}, new CustomItem(SlimefunItems.CARGO_MOTOR, 4)) - .register(true); - - new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_MANAGER, "CARGO_MANAGER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.HOLOGRAM_PROJECTOR, null, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CARGO_MOTOR, SlimefunItems.REINFORCED_PLATE, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.ALUMINUM_BRONZE_INGOT}) - .register(true, new BlockTicker() { - - @Override - public void uniqueTick() { - } - - @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; - SlimefunItem item = BlockStorage.check(e.getClickedBlock()); - if (item == null || !item.getID().equals("CARGO_MANAGER")) return false; - e.setCancelled(true); - - if (BlockStorage.getBlockInfo(e.getClickedBlock(), "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; - } - }); - - SlimefunItem.registerBlockHandler("CARGO_MANAGER", new SlimefunBlockHandler() { - - @Override - public void onPlace(Player p, Block b, SlimefunItem item) { - } - - @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - CargoHologram.remove(b); - return true; - } - }); - - new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_NODE, "CARGO_NODE", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT}, new CustomItem(SlimefunItems.CARGO_NODE, 4)) - .register(true, new ItemInteractionHandler() { - - @Override - public boolean onRightClick(final ItemUseEvent e, Player p, ItemStack stack) { - if (e.getClickedBlock() == null) return false; - SlimefunItem item = BlockStorage.check(e.getClickedBlock()); - if (item == null) return false; - if (!item.getID().equals("CARGO_NODE")) return false; - - if (CargoNet.isConnected(e.getClickedBlock())) { - p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7Connected: " + "&2\u2714")); - } - else { - p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7Connected: " + "&4\u2718")); - } - return true; - } - }); - - new CargoInputNode(Categories.CARGO, SlimefunItems.CARGO_INPUT, "CARGO_NODE_INPUT", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.HOPPER), null, SlimefunItems.BILLON_INGOT, SlimefunItems.CARGO_NODE, SlimefunItems.BILLON_INGOT, null, new ItemStack(Material.HOPPER), null}, new CustomItem(SlimefunItems.CARGO_INPUT, 2)) - .register(true); - - new CargoOutputNode(Categories.CARGO, SlimefunItems.CARGO_OUTPUT, "CARGO_NODE_OUTPUT", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.HOPPER), null, SlimefunItems.BRASS_INGOT, SlimefunItems.CARGO_NODE, SlimefunItems.BRASS_INGOT, null, new ItemStack(Material.HOPPER), null}, new CustomItem(SlimefunItems.CARGO_OUTPUT, 2)) - .register(true); - - new AdvancedCargoOutputNode(Categories.CARGO, SlimefunItems.CARGO_OUTPUT_ADVANCED, "CARGO_NODE_OUTPUT_ADVANCED", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.CARGO_MOTOR, null, SlimefunItems.COBALT_INGOT, SlimefunItems.CARGO_OUTPUT, SlimefunItems.COBALT_INGOT, null, SlimefunItems.CARGO_MOTOR, null}, new CustomItem(SlimefunItems.CARGO_OUTPUT_ADVANCED)) - .register(true); - - new AutomatedCraftingChamber(Categories.ELECTRICITY, SlimefunItems.AUTOMATED_CRAFTING_CHAMBER, "AUTOMATED_CRAFTING_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, new ItemStack(Material.WORKBENCH), null, SlimefunItems.CARGO_MOTOR, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CARGO_MOTOR, null, SlimefunItems.ELECTRIC_MOTOR, null}) { - - @Override - public int getEnergyConsumption() { - return 10; - } - }.registerChargeableBlock(true, 256); - - new ReactorAccessPort(Categories.ELECTRICITY, SlimefunItems.REACTOR_ACCESS_PORT, "REACTOR_ACCESS_PORT", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.LEAD_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.LEAD_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, null}) - .register(true); - - new FluidPump(Categories.ELECTRICITY, SlimefunItems.FLUID_PUMP, "FLUID_PUMP", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.MEDIUM_CAPACITOR, null, new ItemStack(Material.BUCKET), SlimefunItems.CARGO_MOTOR, new ItemStack(Material.BUCKET), null, SlimefunItems.OIL_PUMP, null}) - .registerChargeableBlock(true, 512); - - - new TrashCan(Categories.CARGO, SlimefunItems.TRASH_CAN, "TRASH_CAN_BLOCK", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {null, SlimefunItems.PORTABLE_DUSTBIN, null, SlimefunItems.LEAD_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT}) - .register(true); - - new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS, "CARBON_PRESS", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CARBON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBON, SlimefunItems.CARBON, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.CARBONADO, SlimefunItems.HEATING_COIL}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&cCarbon Press"; - } - - @Override - public int getEnergyConsumption() { - return 10; - } - - @Override - public int getSpeed() { - return 1; - } - - }.registerChargeableBlock(true, 256); - - new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS_2, "CARBON_PRESS_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.CARBON, SlimefunItems.CARBON_PRESS, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&cCarbon Press"; - } - - @Override - public int getEnergyConsumption() { - return 25; - } - - @Override - public int getSpeed() { - return 3; - } - - }.registerChargeableBlock(true, 512); - - new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS_3, "CARBON_PRESS_3", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBON_PRESS_2, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) { - - @Override - public ItemStack getProgressBar() { - return new ItemStack(Material.DIAMOND_PICKAXE); - } - - @Override - public String getInventoryTitle() { - return "&cCarbon Press"; - } - - @Override - public int getEnergyConsumption() { - return 90; - } - - @Override - public int getSpeed() { - return 15; - } - - }.registerChargeableBlock(true, 512); - - new ElectricSmeltery(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_SMELTERY, "ELECTRIC_SMELTERY", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {new ItemStack(Material.NETHER_BRICK_ITEM), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.NETHER_BRICK_ITEM), SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { - - @Override - public void registerDefaultRecipes() { - } - - @Override - public int getEnergyConsumption() { - return 10; - } - - @Override - public int getSpeed() { - return 1; - } - - }.registerChargeableBlock(true, 512); - - new ElectricSmeltery(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_SMELTERY_2, "ELECTRIC_SMELTERY_2", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_SMELTERY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { - - @Override - public void registerDefaultRecipes() { - } - - @Override - public int getEnergyConsumption() { - return 20; - } - - @Override - public int getSpeed() { - return 3; - } - - }.registerChargeableBlock(true, 1024); - - new WitherAssembler(Categories.ELECTRICITY, SlimefunItems.WITHER_ASSEMBLER, "WITHER_ASSEMBLER", RecipeType.ENHANCED_CRAFTING_TABLE, - new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3, new ItemStack(Material.NETHER_STAR), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBONADO_EDGED_CAPACITOR}) - .registerChargeableBlock(true, 4096); - - } - - public static void registerPostHandler(PostSlimefunLoadingHandler handler) { - MiscSetup.post_handlers.add(handler); - } - -} +package me.mrCookieSlime.Slimefun.Setup; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.UUID; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Effect; +import org.bukkit.GameMode; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.block.Chest; +import org.bukkit.block.CreatureSpawner; +import org.bukkit.block.Dispenser; +import org.bukkit.block.Hopper; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.ArmorStand; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Bat; +import org.bukkit.entity.EnderPearl; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.FallingBlock; +import org.bukkit.entity.Item; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockDispenseEvent; +import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.material.MaterialData; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; +import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; +import me.mrCookieSlime.CSCoreLibPlugin.events.ItemUseEvent; +import me.mrCookieSlime.CSCoreLibPlugin.general.Block.BlockBreaker; +import me.mrCookieSlime.CSCoreLibPlugin.general.Block.TreeCalculator; +import me.mrCookieSlime.CSCoreLibPlugin.general.Block.Vein; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.InvUtils; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.CustomItem; +import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.Item.SkullItem; +import me.mrCookieSlime.CSCoreLibPlugin.general.Math.DoubleHandler; +import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.FireworkShow; +import me.mrCookieSlime.CSCoreLibPlugin.general.Player.PlayerInventory; +import me.mrCookieSlime.CSCoreLibPlugin.general.Recipe.RecipeCalculator; +import me.mrCookieSlime.CSCoreLibPlugin.general.String.StringUtils; +import me.mrCookieSlime.CSCoreLibPlugin.general.World.CustomSkull; +import me.mrCookieSlime.Slimefun.SlimefunStartup; +import me.mrCookieSlime.Slimefun.Variables; +import me.mrCookieSlime.Slimefun.Android.AndroidType; +import me.mrCookieSlime.Slimefun.Android.ProgrammableAndroid; +import me.mrCookieSlime.Slimefun.GPS.Elevator; +import me.mrCookieSlime.Slimefun.GPS.GPSNetwork; +import me.mrCookieSlime.Slimefun.GPS.NetworkStatus; +import me.mrCookieSlime.Slimefun.Lists.Categories; +import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; +import me.mrCookieSlime.Slimefun.Misc.PostSlimefunLoadingHandler; +import me.mrCookieSlime.Slimefun.Objects.MultiBlock; +import me.mrCookieSlime.Slimefun.Objects.Research; +import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Alloy; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.EnhancedFurnace; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ExcludedSoulboundTool; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.HandledBlock; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.JetBoots; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Jetpack; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.MultiTool; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingAlloy; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.ReplacingItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBackpack; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBow; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunGadget; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunMachine; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SolarHelmet; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundBackpack; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SoulboundItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Talisman; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.UnregisterReason; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AGenerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AReactor; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.Teleporter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.AutonomousMachineHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockBreakHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockPlaceHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BlockTicker; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.BowShootHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.ItemInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.handlers.MultiBlockInteractionHandler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AdvancedCargoOutputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AnimalGrowthAccelerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoAnvil; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoBreeder; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoDisenchanter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutomatedCraftingChamber; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CarbonPress; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoInputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CargoOutputNode; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ChargingBench; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.CropGrowthAccelerator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricDustWasher; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricFurnace; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricGoldPan; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricIngotFactory; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricSmeltery; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectrifiedCrucible; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FluidPump; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodComposter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.FoodFabricator; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Freezer; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.HeatedPressureChamber; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.NetherDrill; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.OilPump; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ReactorAccessPort; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.Refinery; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.TrashCan; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.WitherAssembler; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.XPCollector; +import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker; +import me.mrCookieSlime.Slimefun.api.Backpacks; +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.EnergyTicker; +import me.mrCookieSlime.Slimefun.api.item_transport.CargoNet; +import me.mrCookieSlime.Slimefun.holograms.CargoHologram; +import me.mrCookieSlime.Slimefun.holograms.EnergyHologram; +import me.mrCookieSlime.Slimefun.holograms.InfusedHopper; +import me.mrCookieSlime.Slimefun.holograms.Projector; +import me.mrCookieSlime.Slimefun.holograms.ReactorHologram; +import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener; + +@SuppressWarnings("deprecation") +public class SlimefunSetup { + + public static void setupItems() throws Exception { + new SlimefunItem(Categories.WEAPONS, SlimefunItems.GRANDMAS_WALKING_STICK, "GRANDMAS_WALKING_STICK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null}) + .register(true); + + new SlimefunItem(Categories.WEAPONS, SlimefunItems.GRANDPAS_WALKING_STICK, "GRANDPAS_WALKING_STICK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.LEATHER), new ItemStack(Material.LOG), new ItemStack(Material.LEATHER), null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null}) + .register(true); + + new SlimefunItem(Categories.PORTABLE, SlimefunItems.PORTABLE_CRAFTER, "PORTABLE_CRAFTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.BOOK), new ItemStack(Material.WORKBENCH), null, null, null, null, null, null, null}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PORTABLE_CRAFTER, true)) { + p.openWorkbench(p.getLocation(), true); + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.FOOD, SlimefunItems.FORTUNE_COOKIE, "FORTUNE_COOKIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.COOKIE), new ItemStack(Material.PAPER), null, null, null, null, null, null, null}) + .register(true); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ENHANCED_CRAFTING_TABLE, "ENHANCED_CRAFTING_TABLE", + new ItemStack[] {null, null, null, null, new ItemStack(Material.WORKBENCH), null, null, new ItemStack(Material.DISPENSER), null}, + new ItemStack[0], Material.WORKBENCH) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(Player p, MultiBlock mb, Block b) { + + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ENHANCED_CRAFTING_TABLE"); + + if (mb.isMultiBlock(machine)) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + + final Inventory inv = disp.getInventory(); + List inputs = RecipeType.getRecipeInputList(machine); + + for (int i = 0; i < inputs.size(); i++) { + boolean craft = true; + for (int j = 0; j < inv.getContents().length; j++) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { + if (SlimefunItem.getByItem(inputs.get(i)[j]) instanceof SlimefunBackpack) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], false)) { + craft = false; + break; + } + } + else { + craft = false; + break; + } + } + } + + if (craft) { + final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)).clone(); + if (Slimefun.hasUnlocked(p, adding, true)) { + Inventory inv2 = Bukkit.createInventory(null, 9, "test"); + for (int j = 0; j < inv.getContents().length; j++) { + inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); + } + if (InvUtils.fits(inv2, adding)) { + SlimefunItem sfItem = SlimefunItem.getByItem(adding); + + if (sfItem instanceof SlimefunBackpack) { + ItemStack backpack = null; + + for (int j = 0; j < 9; j++) { + if (inv.getContents()[j] != null) { + if (inv.getContents()[j].getType() != Material.AIR) { + if (SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) { + backpack = inv.getContents()[j]; + break; + } + } + } + } + String id = ""; + int size = ((SlimefunBackpack) sfItem).size; + + if (backpack != null) { + for (String line: backpack.getItemMeta().getLore()) { + if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { + id = line.replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); + Config cfg = new Config(new File("data-storage/Slimefun/Players/" + id.split("#")[0] + ".yml")); + cfg.setValue("backpacks." + id.split("#")[1] + ".size", size); + cfg.save(); + break; + } + } + } + + if (id.equals("")) { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + else { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", id)); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + } + + + for (int j = 0; j < 9; j++) { + if (inv.getContents()[j] != null) { + if (inv.getContents()[j].getType() != Material.AIR) { + if (inv.getContents()[j].getType().toString().endsWith("_BUCKET")) inv.setItem(j, new ItemStack(Material.BUCKET)); + else if (inv.getContents()[j].getAmount() > 1) inv.setItem(j, new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1)); + else inv.setItem(j, null); + } + } + } + p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + + inv.addItem(adding); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + } + return true; + } + } + Messages.local.sendTranslation(p, "machines.pattern-not-found", true); + } + } + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.PORTABLE, SlimefunItems.PORTABLE_DUSTBIN, "PORTABLE_DUSTBIN", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT)}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PORTABLE_DUSTBIN, true)) { + e.setCancelled(true); + p.openInventory(Bukkit.createInventory(null, 9 * 3, ChatColor.DARK_RED + "Delete Items")); + p.playSound(p.getLocation(), Sound.BLOCK_ANVIL_LAND, 1, 1); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.FOOD, SlimefunItems.BEEF_JERKY, "BEEF_JERKY", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.COOKED_BEEF), null, null, null, null, null, null, null}, new String[] {"Saturation"}, new Integer[] {20}) + .register(true); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.GRIND_STONE, "GRIND_STONE", + new ItemStack[] {null, null, null, null, new ItemStack(Material.FENCE), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, + new ItemStack[] {new ItemStack(Material.BLAZE_ROD), new ItemStack(Material.BLAZE_POWDER, 4), new ItemStack(Material.BONE), new CustomItem(Material.INK_SACK, 15, 4), new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.NETHER_STALK), new CustomItem(SlimefunItems.MAGIC_LUMP_1, 2), new ItemStack(Material.EYE_OF_ENDER), new CustomItem(SlimefunItems.ENDER_LUMP_1, 2), new ItemStack(Material.COBBLESTONE), new ItemStack(Material.GRAVEL), new ItemStack(Material.WHEAT), SlimefunItems.WHEAT_FLOUR, new ItemStack(Material.DIRT), SlimefunItems.STONE_CHUNK}, + Material.FENCE) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(Player p, MultiBlock mb, Block b) { + + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("GRIND_STONE"); + + if (mb.isMultiBlock(machine)) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { + ItemStack output = RecipeType.getRecipeOutput(machine, convert); + if (InvUtils.fits(inv, output)) { + ItemStack removing = current.clone(); + removing.setAmount(1); + inv.removeItem(removing); + inv.addItem(output); + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; + } + } + } + Messages.local.sendTranslation(p, "machines.unknown-material", true); + } + } + return true; + } + else return false; + } + }); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ARMOR_FORGE, "ARMOR_FORGE", + new ItemStack[] {null, null, null, null, new ItemStack(Material.ANVIL), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, + new ItemStack[] {}, + Material.ANVIL) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(final Player p, MultiBlock mb, Block b) { + + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ARMOR_FORGE"); + + if (mb.isMultiBlock(machine)) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + final Inventory inv = disp.getInventory(); + List inputs = RecipeType.getRecipeInputList(machine); + + for (int i = 0; i < inputs.size(); i++) { + boolean craft = true; + for (int j = 0; j < inv.getContents().length; j++) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { + craft = false; + break; + } + } + + if (craft) { + final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); + if (Slimefun.hasUnlocked(p, adding, true)) { + if (InvUtils.fits(inv, adding)) { + for (ItemStack removing: inputs.get(i)) { + if (removing != null) inv.removeItem(removing); + } + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1, 1); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1F, 2F); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_ANVIL_USE, 1F, 2F); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + } + return true; + } + } + Messages.local.sendTranslation(p, "machines.pattern-not-found", true); + } + } + return true; + } + else return false; + } + }); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ORE_CRUSHER, "ORE_CRUSHER", + new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.IRON_FENCE), new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), new ItemStack(Material.IRON_FENCE)}, + new ItemStack[] {new ItemStack(Material.IRON_ORE), new CustomItem(SlimefunItems.IRON_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1), new ItemStack(Material.GOLD_ORE), new CustomItem(SlimefunItems.GOLD_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1), new ItemStack(Material.NETHERRACK, 16), SlimefunItems.SULFATE, SlimefunItems.SIFTED_ORE, SlimefunItems.CRUSHED_ORE, SlimefunItems.CRUSHED_ORE, SlimefunItems.PULVERIZED_ORE, SlimefunItems.PURE_ORE_CLUSTER, SlimefunItems.TINY_URANIUM, new ItemStack(Material.COBBLESTONE, 8), new ItemStack(Material.SAND, 1), new ItemStack(Material.GOLD_INGOT), SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_4K, SlimefunItems.GOLD_DUST}, + Material.NETHER_FENCE) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(Player p, MultiBlock mb, Block b) { + + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ORE_CRUSHER"); + + if (mb.isMultiBlock(machine)) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { + ItemStack adding = RecipeType.getRecipeOutput(machine, convert); + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(convert.getAmount()); + inv.removeItem(removing); + inv.addItem(adding); + p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, 1);; + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; + } + } + } + Messages.local.sendTranslation(p, "machines.unknown-material", true); + } + } + return true; + } + else return false; + } + }); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.COMPRESSOR, "COMPRESSOR", + new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.PISTON_BASE), new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), new ItemStack(Material.PISTON_BASE)}, + new ItemStack[] {new ItemStack(Material.COAL, 8), SlimefunItems.CARBON, new CustomItem(SlimefunItems.STEEL_INGOT, 8), SlimefunItems.STEEL_PLATE, new CustomItem(SlimefunItems.CARBON, 4), SlimefunItems.COMPRESSED_CARBON, new CustomItem(SlimefunItems.STONE_CHUNK, 4), new ItemStack(Material.COBBLESTONE), new CustomItem(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), SlimefunItems.REINFORCED_PLATE}, + Material.NETHER_FENCE) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(final Player p, MultiBlock mb, Block b) { + + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("COMPRESSOR"); + + if (mb.isMultiBlock(machine)) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + final Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { + final ItemStack adding = RecipeType.getRecipeOutput(machine, convert); + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(convert.getAmount()); + inv.removeItem(removing); + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_EXTEND, 1, 1); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_CONTRACT, 1F, 2F); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_PISTON_EXTEND, 1F, 2F); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; + } + } + } + Messages.local.sendTranslation(p, "machines.unknown-material", true); + } + } + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGIC_LUMP_1, "MAGIC_LUMP_1", RecipeType.GRIND_STONE, + new ItemStack[] {null, null, null, null, new ItemStack(Material.NETHER_STALK), null, null, null, null}, new CustomItem(SlimefunItems.MAGIC_LUMP_1, 2)) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGIC_LUMP_2, "MAGIC_LUMP_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_1, null, SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_1, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGIC_LUMP_3, "MAGIC_LUMP_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_2, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ENDER_LUMP_1, "ENDER_LUMP_1", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, null, new ItemStack(Material.EYE_OF_ENDER), null, null, null, null}, new CustomItem(SlimefunItems.ENDER_LUMP_1, 2)) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ENDER_LUMP_2, "ENDER_LUMP_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_1, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ENDER_LUMP_3, "ENDER_LUMP_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_2, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.PORTABLE, SlimefunItems.ENDER_BACKPACK, "ENDER_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), new ItemStack(Material.CHEST), new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.LEATHER), SlimefunItems.ENDER_LUMP_2}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.ENDER_BACKPACK, true)) { + e.setCancelled(true); + p.openInventory(p.getEnderChest()); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 1, 1); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_HELMET, "ENDER_HELMET", RecipeType.ARMOR_FORGE, + new ItemStack[] {SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN), null, null, null}) + .register(true); + + new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_CHESTPLATE, "ENDER_CHESTPLATE", RecipeType.ARMOR_FORGE, + new ItemStack[] {SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), new ItemStack(Material.EYE_OF_ENDER), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN)}) + .register(true); + + new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_LEGGINGS, "ENDER_LEGGINGS", RecipeType.ARMOR_FORGE, + new ItemStack[] {SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN), new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN)}) + .register(true); + + new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.ENDER_BOOTS, "ENDER_BOOTS", RecipeType.ARMOR_FORGE, + new ItemStack[] {null, null, null, SlimefunItems.ENDER_LUMP_1, null, SlimefunItems.ENDER_LUMP_1, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.OBSIDIAN)}) + .register(true); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.MAGIC_EYE_OF_ENDER, "MAGIC_EYE_OF_ENDER", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), new ItemStack(Material.EYE_OF_ENDER), new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2, new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_2}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.MAGIC_EYE_OF_ENDER, true)) { + //It don't works + //e.setCanceled(true); + e.getParentEvent().setCancelled(true); + PlayerInventory.update(p); + if (p.getInventory().getHelmet() != null && p.getInventory().getChestplate() != null && p.getInventory().getLeggings() != null && p.getInventory().getBoots() != null) { + if (SlimefunManager.isItemSimiliar(p.getInventory().getHelmet(), SlimefunItems.ENDER_HELMET, true) && SlimefunManager.isItemSimiliar(p.getInventory().getChestplate(), SlimefunItems.ENDER_CHESTPLATE, true) && SlimefunManager.isItemSimiliar(p.getInventory().getLeggings(), SlimefunItems.ENDER_LEGGINGS, true) && SlimefunManager.isItemSimiliar(p.getInventory().getBoots(), SlimefunItems.ENDER_BOOTS, true)) { + p.launchProjectile(EnderPearl.class); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 1, 1); + } + } + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.FOOD, SlimefunItems.MAGIC_SUGAR, "MAGIC_SUGAR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.REDSTONE), new ItemStack(Material.GLOWSTONE_DUST), null, null, null, null, null, null}, new String[] {"effects.SPEED"}, new Integer[] {4}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack 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; + } + }); + + new SlimefunItem(Categories.FOOD, SlimefunItems.MONSTER_JERKY, "MONSTER_JERKY", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SALT, new ItemStack(Material.ROTTEN_FLESH), null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_HELMET, "SLIME_HELMET", RecipeType.ARMOR_FORGE, + new ItemStack[] {new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), null, null, null}) + .register(true); + + new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_CHESTPLATE, "SLIME_CHESTPLATE", RecipeType.ARMOR_FORGE, + new ItemStack[] {new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT)}) + .register(true); + + new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_LEGGINGS, "SLIME_LEGGINGS", RecipeType.ARMOR_FORGE, + new ItemStack[] {new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.SPEED, 300, 2)}) + .register(true); + + new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_BOOTS, "SLIME_BOOTS", RecipeType.ARMOR_FORGE, + new ItemStack[] {null, null, null, new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.IRON_INGOT)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.JUMP, 300, 5)}) + .register(true); + + new SlimefunItem(Categories.WEAPONS, SlimefunItems.SWORD_OF_BEHEADING, "SWORD_OF_BEHEADING", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.EMERALD), SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.BLAZE_ROD), null}, new String[] {"chance.PLAYER", "chance.SKELETON", "chance.WITHER_SKELETON", "chance.ZOMBIE", "chance.CREEPER"}, new Integer[] {70, 40, 25, 40, 40}) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.MAGICAL_BOOK_COVER, "MAGICAL_BOOK_COVER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.BOOK), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, null}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.BASIC_CIRCUIT_BOARD, "BASIC_CIRCUIT_BOARD", RecipeType.MOB_DROP, + new ItemStack[] {null, null, null, null, new CustomItem(Material.MONSTER_EGG, "&a&oIron Golem", 99), null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.ADVANCED_CIRCUIT_BOARD, "ADVANCED_CIRCUIT_BOARD", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.REDSTONE_BLOCK), SlimefunItems.BASIC_CIRCUIT_BOARD, new ItemStack(Material.REDSTONE_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK), new ItemStack(Material.LAPIS_BLOCK)}) + .register(true); + + new SlimefunGadget(Categories.TOOLS, SlimefunItems.GOLD_PAN, "GOLD_PAN", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.STONE), new ItemStack(Material.BOWL), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE), new ItemStack(Material.STONE)}, + new ItemStack[] {new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.GRAVEL), new ItemStack(Material.CLAY_BALL), new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE}, + new String[] {"chance.FLINT", "chance.CLAY", "chance.SIFTED_ORE"}, new Integer[] {47, 28, 15}) + .register(true, 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) { + if (CSCoreLib.getLib().getProtectionManager().canBuild(p.getUniqueId(), e.getClickedBlock(), true)) { + List drops = new ArrayList(); + if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE"))) drops.add(SlimefunItems.SIFTED_ORE); + else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY"))) drops.add(new ItemStack(Material.CLAY_BALL)); + else if (SlimefunStartup.chance(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; + } + }); + + new SlimefunItem(Categories.MISC, SlimefunItems.SIFTED_ORE, "SIFTED_ORE", RecipeType.GOLD_PAN, + new ItemStack[] {new ItemStack(Material.GRAVEL), null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.SMELTERY, "SMELTERY", + new ItemStack[] {null, new ItemStack(Material.NETHER_FENCE), null, new ItemStack(Material.NETHER_BRICK), new CustomItem(Material.DISPENSER, "Dispencer (Faced up)", 0), new ItemStack(Material.NETHER_BRICK), null, new ItemStack(Material.FLINT_AND_STEEL), null}, + new ItemStack[] {SlimefunItems.IRON_DUST, new ItemStack(Material.IRON_INGOT)}, Material.NETHER_FENCE, + new String[] {"chance.fireBreak"}, new Integer[] {34}) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(Player p, MultiBlock mb, Block b) { + + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("SMELTERY"); + + if (mb.isMultiBlock(machine)) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + Inventory inv = disp.getInventory(); + List inputs = RecipeType.getRecipeInputList(machine); + + for (int i = 0; i < inputs.size(); i++) { + boolean craft = true; + for (ItemStack converting: inputs.get(i)) { + if (converting != null) { + for (int j = 0; j < inv.getContents().length; j++) { + if (j == (inv.getContents().length - 1) && !SlimefunManager.isItemSimiliar(converting, inv.getContents()[j], true, SlimefunManager.DataType.ALWAYS)) { + craft = false; + break; + } + else if (SlimefunManager.isItemSimiliar(inv.getContents()[j], converting, true, SlimefunManager.DataType.ALWAYS)) break; + } + } + } + + if (craft) { + ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); + if (Slimefun.hasUnlocked(p, adding, true)) { + if (InvUtils.fits(inv, adding)) { + for (ItemStack removing: inputs.get(i)) { + if (removing != null) inv.removeItem(removing); + } + inv.addItem(adding); + p.getWorld().playSound(p.getLocation(), Sound.BLOCK_LAVA_POP, 1, 1); + p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + Block raw_disp = b.getRelative(BlockFace.DOWN); + Hopper chamber = null; + if(BlockStorage.check(raw_disp.getRelative(BlockFace.EAST).getState().getBlock(), "IGNITION_CHAMBER")) { + chamber = (Hopper) raw_disp.getRelative(BlockFace.EAST).getState(); + } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.WEST).getState().getBlock(), "IGNITION_CHAMBER")) { + chamber = (Hopper) raw_disp.getRelative(BlockFace.WEST).getState(); + } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.NORTH).getState().getBlock(), "IGNITION_CHAMBER")) { + chamber = (Hopper) raw_disp.getRelative(BlockFace.NORTH).getState(); + } else if (BlockStorage.check(raw_disp.getRelative(BlockFace.SOUTH).getState().getBlock(), "IGNITION_CHAMBER")){ + chamber = (Hopper) raw_disp.getRelative(BlockFace.SOUTH).getState(); + } + + if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("SMELTERY", "chance.fireBreak"))) { + if(chamber != null) { + if(chamber.getInventory().contains(Material.FLINT_AND_STEEL)) { + ItemStack item = chamber.getInventory().getItem(chamber.getInventory().first(Material.FLINT_AND_STEEL)); + item.setDurability((short) (item.getDurability() + 1)); + if(item.getDurability() >= item.getType().getMaxDurability()) { + item.setAmount(0); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ITEM_BREAK, 1, 1); + } + p.getWorld().playSound(p.getLocation(), Sound.ITEM_FLINTANDSTEEL_USE, 1, 1); + } else { + Messages.local.sendTranslation(p, "machines.ignition-chamber-no-flint", true); + BlockBreaker.nullify(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN)); + } + } else { + BlockBreaker.nullify(b.getRelative(BlockFace.DOWN).getRelative(BlockFace.DOWN)); + } + } + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + } + return true; + } + } + Messages.local.sendTranslation(p, "machines.pattern-not-found", true); + } + } + return true; + } + else return false; + } + }); + + + new SlimefunItem(Categories.MACHINES_1, SlimefunItems.IGNITION_CHAMBER, "IGNITION_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.STEEL_PLATE, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.STEEL_PLATE, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_PLATE, SlimefunItems.ELECTRIC_MOTOR, null, new ItemStack(Material.HOPPER), null}) + .register(true); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.PRESSURE_CHAMBER, "PRESSURE_CHAMBER", + new ItemStack[] {new ItemStack(Material.STEP), new CustomItem(Material.DISPENSER, "Dispenser (Facing down)", 0), new ItemStack(Material.STEP), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.GLASS), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.PISTON_BASE), new ItemStack(Material.CAULDRON_ITEM), new ItemStack(Material.PISTON_BASE)}, + new ItemStack[] {SlimefunItems.CARBON_CHUNK, SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.RAW_CARBONADO, SlimefunItems.CARBONADO}, + Material.CAULDRON) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(final Player p, MultiBlock mb, final Block b) { + + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("PRESSURE_CHAMBER"); + + if (mb.isMultiBlock(machine)) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.UP).getRelative(BlockFace.UP).getState(); + final Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { + final ItemStack adding = RecipeType.getRecipeOutput(machine, convert); + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(convert.getAmount()); + inv.removeItem(removing); + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playEffect(b.getRelative(BlockFace.UP).getLocation(), Effect.SMOKE, 4); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; + } + } + } + Messages.local.sendTranslation(p, "machines.unknown-material", true); + } + } + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.BATTERY, "BATTERY", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] { null, new ItemStack(Material.REDSTONE), null, SlimefunItems.ZINC_INGOT, SlimefunItems.SULFATE, SlimefunItems.COPPER_INGOT, SlimefunItems.ZINC_INGOT, SlimefunItems.SULFATE, SlimefunItems.COPPER_INGOT }) + .register(true); + + SlimefunManager.registerArmorSet(new ItemStack(Material.GLOWSTONE), new ItemStack[] {SlimefunItems.GLOWSTONE_HELMET, SlimefunItems.GLOWSTONE_CHESTPLATE, SlimefunItems.GLOWSTONE_LEGGINGS, SlimefunItems.GLOWSTONE_BOOTS}, "GLOWSTONE", + new PotionEffect[][] {new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}, new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 0)}}, true, true); + + SlimefunManager.registerArmorSet(SlimefunItems.DAMASCUS_STEEL_INGOT, new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_HELMET, SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, SlimefunItems.DAMASCUS_STEEL_LEGGINGS, SlimefunItems.DAMASCUS_STEEL_BOOTS}, "DAMASCUS_STEEL", true, false); + + SlimefunManager.registerArmorSet(SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_HELMET, SlimefunItems.REINFORCED_ALLOY_CHESTPLATE, SlimefunItems.REINFORCED_ALLOY_LEGGINGS, SlimefunItems.REINFORCED_ALLOY_BOOTS}, "REINFORCED_ALLOY", true, false); + + SlimefunManager.registerArmorSet(new ItemStack(Material.CACTUS), new ItemStack[] {SlimefunItems.CACTUS_HELMET, SlimefunItems.CACTUS_CHESTPLATE, SlimefunItems.CACTUS_LEGGINGS, SlimefunItems.CACTUS_BOOTS}, "CACTUS", true, false); + + new Alloy(SlimefunItems.REINFORCED_ALLOY_INGOT, "REINFORCED_ALLOY_INGOT", + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.GOLD_24K, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.HARDENED_METAL_INGOT, "HARDENED_METAL_INGOT", + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.ALUMINUM_BRONZE_INGOT, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.DAMASCUS_STEEL_INGOT, "DAMASCUS_STEEL_INGOT", + new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.IRON_DUST, SlimefunItems.CARBON, new ItemStack(Material.IRON_INGOT), null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.STEEL_INGOT, "STEEL_INGOT", + new ItemStack[] {SlimefunItems.IRON_DUST, SlimefunItems.CARBON, new ItemStack(Material.IRON_INGOT), null, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.BRONZE_INGOT, "BRONZE_INGOT", + new ItemStack[] {SlimefunItems.COPPER_DUST, SlimefunItems.TIN_DUST, SlimefunItems.COPPER_INGOT, null, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.DURALUMIN_INGOT, "DURALUMIN_INGOT", + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.BILLON_INGOT, "BILLON_INGOT", + new ItemStack[] {SlimefunItems.SILVER_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.SILVER_INGOT, null, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.BRASS_INGOT, "BRASS_INGOT", + new ItemStack[] {SlimefunItems.COPPER_DUST, SlimefunItems.ZINC_DUST, SlimefunItems.COPPER_INGOT, null, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.ALUMINUM_BRASS_INGOT, "ALUMINUM_BRASS_INGOT", + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.BRASS_INGOT, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.ALUMINUM_BRONZE_INGOT, "ALUMINUM_BRONZE_INGOT", + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.BRONZE_INGOT, SlimefunItems.ALUMINUM_INGOT, null, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.CORINTHIAN_BRONZE_INGOT, "CORINTHIAN_BRONZE_INGOT", + new ItemStack[] {SlimefunItems.SILVER_DUST, SlimefunItems.GOLD_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.BRONZE_INGOT, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.SOLDER_INGOT, "SOLDER_INGOT", + new ItemStack[] {SlimefunItems.LEAD_DUST, SlimefunItems.TIN_DUST, SlimefunItems.LEAD_INGOT, null, null, null, null, null, null}) + .register(true); + + new ReplacingAlloy(SlimefunItems.SYNTHETIC_SAPPHIRE, "SYNTHETIC_SAPPHIRE", + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, new ItemStack(Material.GLASS), new ItemStack(Material.THIN_GLASS), SlimefunItems.ALUMINUM_INGOT, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), null, null, null, null}) + .register(true); + + new ReplacingItem(Categories.RESOURCES, SlimefunItems.SYNTHETIC_DIAMOND, "SYNTHETIC_DIAMOND", RecipeType.PRESSURE_CHAMBER, + new ItemStack[] {SlimefunItems.CARBON_CHUNK, null, null, null, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.RAW_CARBONADO, "RAW_CARBONADO", + new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.CARBON_CHUNK, new ItemStack(Material.THIN_GLASS), null, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.NICKEL_INGOT, "NICKEL_INGOT", + new ItemStack[] {SlimefunItems.IRON_DUST, new ItemStack(Material.IRON_INGOT), SlimefunItems.COPPER_DUST, null, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.COBALT_INGOT, "COBALT_INGOT", + new ItemStack[] {SlimefunItems.IRON_DUST, SlimefunItems.COPPER_DUST, SlimefunItems.NICKEL_INGOT, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.CARBONADO, "CARBONADO", RecipeType.PRESSURE_CHAMBER, + new ItemStack[] {SlimefunItems.RAW_CARBONADO, null, null, null, null, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.FERROSILICON, "FERROSILICON", + new ItemStack[] {new ItemStack(Material.IRON_INGOT), SlimefunItems.IRON_DUST, SlimefunItems.SILICON, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.IRON_DUST, "IRON_DUST", RecipeType.ORE_CRUSHER, + new ItemStack[] {new ItemStack(Material.IRON_ORE), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.IRON_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1)) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_DUST, "GOLD_DUST", RecipeType.ORE_CRUSHER, + new ItemStack[] {new ItemStack(Material.GOLD_ORE), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.GOLD_DUST, (Boolean) Slimefun.getItemValue("ORE_CRUSHER", "double-ores") ? 2: 1)) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.COPPER_DUST, "COPPER_DUST", RecipeType.ORE_WASHER, + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.TIN_DUST, "TIN_DUST", RecipeType.ORE_WASHER, + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.LEAD_DUST, "LEAD_DUST", RecipeType.ORE_WASHER, + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.SILVER_DUST, "SILVER_DUST", RecipeType.ORE_WASHER, + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.ALUMINUM_DUST, "ALUMINUM_DUST", RecipeType.ORE_WASHER, + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.ZINC_DUST, "ZINC_DUST", RecipeType.ORE_WASHER, + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.MAGNESIUM_DUST, "MAGNESIUM_DUST", RecipeType.ORE_WASHER, + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.COPPER_INGOT, "COPPER_INGOT", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.COPPER_DUST, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.TIN_INGOT, "TIN_INGOT", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.TIN_DUST, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.SILVER_INGOT, "SILVER_INGOT", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.SILVER_DUST, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.LEAD_INGOT, "LEAD_INGOT", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.LEAD_DUST, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.ALUMINUM_INGOT, "ALUMINUM_INGOT", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.ZINC_INGOT, "ZINC_INGOT", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.ZINC_DUST, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.MAGNESIUM_INGOT, "MAGNESIUM_INGOT", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.MAGNESIUM_DUST, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.SULFATE, "SULFATE", RecipeType.ORE_CRUSHER, + new ItemStack[] {new ItemStack(Material.NETHERRACK, 16), null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.CARBON, "CARBON", RecipeType.COMPRESSOR, + new ItemStack[] {new ItemStack(Material.COAL, 8), null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.WHEAT_FLOUR, "WHEAT_FLOUR", RecipeType.GRIND_STONE, + new ItemStack[] {null, null, null, null, new ItemStack(Material.WHEAT), null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.STEEL_PLATE, "STEEL_PLATE", RecipeType.COMPRESSOR, + new ItemStack[] {new CustomItem(SlimefunItems.STEEL_INGOT, 8), null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.COMPRESSED_CARBON, "COMPRESSED_CARBON", RecipeType.COMPRESSOR, + new ItemStack[] {new CustomItem(SlimefunItems.CARBON, 4), null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.CARBON_CHUNK, "CARBON_CHUNK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, new ItemStack(Material.FLINT), SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON, SlimefunItems.COMPRESSED_CARBON}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.STEEL_THRUSTER, "STEEL_THRUSTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.REDSTONE), null, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.STEEL_PLATE, new ItemStack(Material.FIREBALL), SlimefunItems.STEEL_PLATE}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.POWER_CRYSTAL, "POWER_CRYSTAL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE), SlimefunItems.SYNTHETIC_SAPPHIRE, new ItemStack(Material.REDSTONE)}) + .register(true); + + new Jetpack(SlimefunItems.DURALUMIN_JETPACK, "DURALUMIN_JETPACK", + new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.35) + .register(true); + + new Jetpack(SlimefunItems.SOLDER_JETPACK, "SOLDER_JETPACK", + new ItemStack[] {SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.SOLDER_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.4) + .register(true); + + new Jetpack(SlimefunItems.BILLON_JETPACK, "BILLON_JETPACK", + new ItemStack[] {SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.45) + .register(true); + + new Jetpack(SlimefunItems.STEEL_JETPACK, "STEEL_JETPACK", + new ItemStack[] {SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.5) + .register(true); + + new Jetpack(SlimefunItems.DAMASCUS_STEEL_JETPACK, "DAMASCUS_STEEL_JETPACK", + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.55) + .register(true); + + new Jetpack(SlimefunItems.REINFORCED_ALLOY_JETPACK, "REINFORCED_ALLOY_JETPACK", + new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.6) + .register(true); + + new Jetpack(SlimefunItems.CARBONADO_JETPACK, "CARBONADO_JETPACK", + new ItemStack[] {SlimefunItems.CARBON_CHUNK, null, SlimefunItems.CARBON_CHUNK, SlimefunItems.CARBONADO, SlimefunItems.POWER_CRYSTAL, SlimefunItems.CARBONADO, SlimefunItems.STEEL_THRUSTER, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.7) + .register(true); + + new SlimefunItem(Categories.TECH, SlimefunItems.PARACHUTE, "PARACHUTE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CHAIN, null, SlimefunItems.CHAIN, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.CHAIN, "CHAIN", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, null}, new CustomItem(SlimefunItems.CHAIN, 8)) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.HOOK, "HOOK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null, null, null}) + .register(true); + + new SlimefunItem(Categories.TOOLS, SlimefunItems.GRAPPLING_HOOK, "GRAPPLING_HOOK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.HOOK, SlimefunItems.HOOK, null, SlimefunItems.CHAIN, SlimefunItems.HOOK, SlimefunItems.CHAIN, null, null}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.GRAPPLING_HOOK, true)) { + if (e.getClickedBlock() == null && !Variables.jump.containsKey(p.getUniqueId())) { + Variables.jump.put(p.getUniqueId(), p.getInventory().getItemInMainHand().getType() != Material.SHEARS); + e.setCancelled(true); + if (p.getInventory().getItemInMainHand().getType() == Material.LEASH) PlayerInventory.consumeItemInHand(p); + + Vector direction = p.getEyeLocation().getDirection().multiply(2.0); + Projectile projectile = p.getWorld().spawn(p.getEyeLocation().add(direction.getX(), direction.getY(), direction.getZ()), Arrow.class); + projectile.setShooter(p); + projectile.setVelocity(direction); + Arrow arrow = (Arrow) projectile; + Bat b = (Bat) p.getWorld().spawnEntity(p.getLocation(), EntityType.BAT); + b.setCanPickupItems(false); + b.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 100000, 100000)); + b.setLeashHolder(arrow); + + Variables.damage.put(p.getUniqueId(), true); + Variables.remove.put(p.getUniqueId(), new Entity[] {b, arrow}); + } + return true; + } + else return false; + } + }); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.MAGIC_WORKBENCH, "MAGIC_WORKBENCH", + new ItemStack[] {null, null, null, null, null, null, new ItemStack(Material.BOOKSHELF), new ItemStack(Material.WORKBENCH), new ItemStack(Material.DISPENSER)}, + new ItemStack[0], Material.WORKBENCH) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(final Player p, MultiBlock mb, final Block b) { + + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("MAGIC_WORKBENCH"); + + if (mb.isMultiBlock(machine)) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = null; + + if (b.getRelative(1, 0, 0).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(1, 0, 0).getState(); + else if (b.getRelative(0, 0, 1).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(0, 0, 1).getState(); + else if (b.getRelative(-1, 0, 0).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(-1, 0, 0).getState(); + else if (b.getRelative(0, 0, -1).getType() == Material.DISPENSER) disp = (Dispenser) b.getRelative(0, 0, -1).getState(); + + final Inventory inv = disp.getInventory(); + List inputs = RecipeType.getRecipeInputList(machine); + + for (int i = 0; i < inputs.size(); i++) { + boolean craft = true; + for (int j = 0; j < inv.getContents().length; j++) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { + if (SlimefunItem.getByItem(inputs.get(i)[j]) instanceof SlimefunBackpack) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], false)) { + craft = false; + break; + } + } + else { + craft = false; + break; + } + } + } + + if (craft) { + final ItemStack adding = RecipeType.getRecipeOutputList(machine, inputs.get(i)); + if (Slimefun.hasUnlocked(p, adding, true)) { + Inventory inv2 = Bukkit.createInventory(null, 9, "test"); + for (int j = 0; j < inv.getContents().length; j++) { + inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); + } + if (InvUtils.fits(inv2, adding)) { + SlimefunItem sfItem = SlimefunItem.getByItem(adding); + + if (sfItem instanceof SlimefunBackpack) { + ItemStack backpack = null; + + for (int j = 0; j < 9; j++) { + if (inv.getContents()[j] != null) { + if (inv.getContents()[j].getType() != Material.AIR) { + if (SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) { + backpack = inv.getContents()[j]; + break; + } + } + } + } + String id = ""; + int size = ((SlimefunBackpack) sfItem).size; + + if (backpack != null) { + for (String line: backpack.getItemMeta().getLore()) { + if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { + id = line.replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); + Config cfg = new Config(new File("data-storage/Slimefun/Players/" + id.split("#")[0] + ".yml")); + cfg.setValue("backpacks." + id.split("#")[1] + ".size", size); + cfg.save(); + break; + } + } + } + + if (id.equals("")) { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + else { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", id)); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + } + + for (int j = 0; j < 9; j++) { + if (inv.getContents()[j] != null) { + if (inv.getContents()[j].getType() != Material.AIR) { + if (inv.getContents()[j].getAmount() > 1) inv.setItem(j, new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1)); + else inv.setItem(j, null); + } + } + } + p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playSound(b.getLocation(), Sound.BLOCK_WOOD_BUTTON_CLICK_ON, 1, 1); + p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + p.getWorld().playEffect(b.getLocation(), Effect.MOBSPAWNER_FLAMES, 1); + p.getWorld().playEffect(b.getLocation(), Effect.ENDER_SIGNAL, 1); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + } + return true; + } + } + Messages.local.sendTranslation(p, "machines.pattern-not-found", true); + } + } + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_ELEMENTAL, "STAFF_ELEMENTAL", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {null, SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.MAGIC_LUMP_3, null, new ItemStack(Material.STICK), SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.MAGIC_LUMP_3, null, null}) + .register(true); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_WIND, "STAFF_ELEMENTAL_WIND", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {null, new ItemStack(Material.FEATHER), SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.STAFF_ELEMENTAL, new ItemStack(Material.FEATHER), SlimefunItems.STAFF_ELEMENTAL, null, null}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.STAFF_WIND, true)) { + if (p.getFoodLevel() >= 2) { + if (p.getInventory().getItemInMainHand().getType() != Material.SHEARS && p.getGameMode() != GameMode.CREATIVE) { + FoodLevelChangeEvent event = new FoodLevelChangeEvent(p, p.getFoodLevel() - 2); + Bukkit.getPluginManager().callEvent(event); + p.setFoodLevel(event.getFoodLevel()); + } + p.setVelocity(p.getEyeLocation().getDirection().multiply(4)); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_TNT_PRIMED, 1, 1); + p.getWorld().playEffect(p.getLocation(), Effect.SMOKE, 1); + p.setFallDistance(0.0f); + } + else { + Messages.local.sendTranslation(p, "messages.hungry", true); + } + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_WATER, "STAFF_ELEMENTAL_WATER", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {null, new ItemStack(Material.WATER_LILY), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.STAFF_ELEMENTAL, new ItemStack(Material.WATER_LILY), SlimefunItems.STAFF_ELEMENTAL, null, null}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.STAFF_WATER, true)) { + p.setFireTicks(0); + Messages.local.sendTranslation(p, "messages.fire-extinguish", true); + return true; + } + else return false; + } + }); + + new MultiTool(SlimefunItems.DURALUMIN_MULTI_TOOL, "DURALUMIN_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.DURALUMIN_INGOT, null, SlimefunItems.DURALUMIN_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + .register(true); + + new MultiTool(SlimefunItems.SOLDER_MULTI_TOOL, "SOLDER_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.SOLDER_INGOT, null, SlimefunItems.SOLDER_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + .register(true); + + new MultiTool(SlimefunItems.BILLON_MULTI_TOOL, "BILLON_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.BILLON_INGOT, null, SlimefunItems.BILLON_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + .register(true); + + new MultiTool(SlimefunItems.STEEL_MULTI_TOOL, "STEEL_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + .register(true); + + new MultiTool(SlimefunItems.DAMASCUS_STEEL_MULTI_TOOL, "DAMASCUS_STEEL_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.DAMASCUS_STEEL_INGOT, null, SlimefunItems.DAMASCUS_STEEL_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + .register(true); + + new MultiTool(SlimefunItems.REINFORCED_ALLOY_MULTI_TOOL, "REINFORCED_ALLOY_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK"}) + .register(true); + + new MultiTool(SlimefunItems.CARBONADO_MULTI_TOOL, "CARBONADO_MULTI_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CARBONADO, null, SlimefunItems.CARBONADO, SlimefunItems.CARBONADO, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.CARBONADO, null, SlimefunItems.CARBONADO, null}, + new String[] {"mode.0.enabled", "mode.0.name", "mode.0.item", "mode.1.enabled", "mode.1.name", "mode.1.item", "mode.2.enabled", "mode.2.name", "mode.2.item", "mode.3.enabled", "mode.3.name", "mode.3.item", "mode.4.enabled", "mode.4.name", "mode.4.item"}, new Object[] {true, "Portable Crafter", "PORTABLE_CRAFTER", true, "Magic Eye of Ender", "MAGIC_EYE_OF_ENDER", true, "Wind Staff", "STAFF_ELEMENTAL_WIND", true, "Grappling Hook", "GRAPPLING_HOOK", true, "Gold Pan", "GOLD_PAN"}) + .register(true); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ORE_WASHER, "ORE_WASHER", + new ItemStack[] {null, new ItemStack(Material.DISPENSER), null, null, new ItemStack(Material.FENCE), null, null, new ItemStack(Material.CAULDRON_ITEM), null}, + new ItemStack[] {SlimefunItems.SIFTED_ORE, SlimefunItems.IRON_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.GOLD_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.COPPER_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.TIN_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.ZINC_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGNESIUM_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.LEAD_DUST, SlimefunItems.SIFTED_ORE, SlimefunItems.SILVER_DUST}, + Material.FENCE) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(Player p, MultiBlock mb, Block b) { + + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ORE_WASHER"); + + if (mb.isMultiBlock(machine)) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, machine.getItem(), true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.UP).getState(); + Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + if (current != null) { + if (SlimefunManager.isItemSimiliar(current, SlimefunItems.SIFTED_ORE, true)) { + 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; + + if (inv.firstEmpty() != -1) { + ItemStack removing = current.clone(); + removing.setAmount(1); + inv.removeItem(removing); + inv.addItem(adding); + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); + p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); + if (InvUtils.fits(inv, SlimefunItems.STONE_CHUNK)) inv.addItem(SlimefunItems.STONE_CHUNK); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; + } + else if (SlimefunManager.isItemSimiliar(current, new ItemStack(Material.SAND, 4), false)) { + ItemStack adding = SlimefunItems.SALT; + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(4); + inv.removeItem(removing); + inv.addItem(adding); + p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; + } + else if (SlimefunManager.isItemSimiliar(current, SlimefunItems.PULVERIZED_ORE, true)) { + ItemStack adding = SlimefunItems.PURE_ORE_CLUSTER; + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(1); + inv.removeItem(removing); + inv.addItem(adding); + p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.WATER); + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1, 1); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; + } + } + } + Messages.local.sendTranslation(p, "machines.unknown-material", true); + } + } + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_24K, "GOLD_24K", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_22K, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_22K, "GOLD_22K", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_20K, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_20K, "GOLD_20K", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_18K, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_18K, "GOLD_18K", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_16K, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_16K, "GOLD_16K", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_14K, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_14K, "GOLD_14K", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_12K, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_12K, "GOLD_12K", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_10K, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_10K, "GOLD_10K", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_8K, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_8K, "GOLD_8K", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_6K, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_6K, "GOLD_6K", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.GOLD_DUST, SlimefunItems.GOLD_4K, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.GOLD_4K, "GOLD_4K", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.GOLD_DUST, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.STONE_CHUNK, "STONE_CHUNK", RecipeType.ORE_WASHER, + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.SILICON, "SILICON", RecipeType.SMELTERY, + new ItemStack[] {new ItemStack(Material.QUARTZ_BLOCK), null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.SOLAR_PANEL, "SOLAR_PANEL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), SlimefunItems.SILICON, SlimefunItems.SILICON, SlimefunItems.SILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON}) + .register(true); + + new SolarHelmet(Categories.TECH, SlimefunItems.SOLAR_HELMET, "SOLAR_HELMET", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.SOLAR_PANEL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MEDIUM_CAPACITOR, null, SlimefunItems.MEDIUM_CAPACITOR}, + new String[] {"charge-amount"}, new Double[] {0.1}) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.LAVA_CRYSTAL, "LAVA_CRYSTAL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.RUNE_FIRE, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.BLAZE_POWDER), SlimefunItems.MAGIC_LUMP_1}) + .register(true); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.STAFF_FIRE, "STAFF_ELEMENTAL_FIRE", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {null, null, SlimefunItems.LAVA_CRYSTAL, null, SlimefunItems.STAFF_ELEMENTAL, null, SlimefunItems.STAFF_ELEMENTAL, null, null}) + .register(true); + + new SlimefunItem(Categories.TOOLS, SlimefunItems.AUTO_SMELT_PICKAXE, "SMELTERS_PICKAXE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.LAVA_CRYSTAL, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) + .register(true, new BlockBreakHandler() { + + @Override + public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.AUTO_SMELT_PICKAXE, true)) { + if (e.getBlock().getType().equals(Material.SKULL)) 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; + } + }); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.TALISMAN, "COMMON_TALISMAN", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2, null, new ItemStack(Material.EMERALD), null, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_2}, + new String[] {"recipe-requires-nether-stars"}, new Boolean[] {false}) + .register(true); + + new Talisman(SlimefunItems.TALISMAN_ANVIL, "ANVIL_TALISMAN", + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.ANVIL), SlimefunItems.TALISMAN, new ItemStack(Material.ANVIL), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + true, false, "anvil", new PotionEffect[0]) + .register(true); + + new Talisman(SlimefunItems.TALISMAN_MINER, "MINER_TALISMAN", + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.SIFTED_ORE, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + false, false, "miner", 20, new PotionEffect[0]) + .register(true); + + new Talisman(SlimefunItems.TALISMAN_HUNTER, "HUNTER_TALISMAN", + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.TALISMAN, SlimefunItems.MONSTER_JERKY, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + false, false, "hunter", 20, new PotionEffect[0]) + .register(true); + + new Talisman(SlimefunItems.TALISMAN_LAVA, "LAVA_TALISMAN", + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.TALISMAN, new ItemStack(Material.LAVA_BUCKET), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + true, true, "lava", new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 3600, 4)) + .register(true); + + new Talisman(SlimefunItems.TALISMAN_WATER, "WATER_TALISMAN", + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.WATER_BUCKET), SlimefunItems.TALISMAN, new ItemStack(Material.FISHING_ROD), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + true, true, "water", new PotionEffect(PotionEffectType.WATER_BREATHING, 3600, 4)) + .register(true); + + new Talisman(SlimefunItems.TALISMAN_ANGEL, "ANGEL_TALISMAN", + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.FEATHER), SlimefunItems.TALISMAN, new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + false, true, "angel", 75, new PotionEffect[0]) + .register(true); + + new Talisman(SlimefunItems.TALISMAN_FIRE, "FIRE_TALISMAN", + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.TALISMAN, SlimefunItems.LAVA_CRYSTAL, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + true, true, "fire", new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 3600, 4)) + .register(true); + + new Talisman(SlimefunItems.TALISMAN_MAGICIAN, "MAGICIAN_TALISMAN", + new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENCHANTMENT_TABLE), SlimefunItems.TALISMAN, new ItemStack(Material.ENCHANTMENT_TABLE), SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3}, + false, false, "magician", 80, new PotionEffect[0]) + .register(true); + + for (Enchantment e: Enchantment.values()) { + for (int i = 1; i <= e.getMaxLevel(); i++) { + Slimefun.setItemVariable("MAGICIAN_TALISMAN", "allow-enchantments." + e.getName() + ".level." + i, true); + } + } + + new Talisman(SlimefunItems.TALISMAN_TRAVELLER, "TRAVELLER_TALISMAN", + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.STAFF_WIND, SlimefunItems.TALISMAN_ANGEL, SlimefunItems.STAFF_WIND, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + false, false, "traveller", 60, new PotionEffect(PotionEffectType.SPEED, 3600, 2)) + .register(true); + + new Talisman(SlimefunItems.TALISMAN_WARRIOR, "WARRIOR_TALISMAN", + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.TALISMAN, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + true, true, "warrior", new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 3600, 2)) + .register(true); + + new Talisman(SlimefunItems.TALISMAN_KNIGHT, "KNIGHT_TALISMAN", + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.GILDED_IRON, SlimefunItems.TALISMAN_WARRIOR, SlimefunItems.GILDED_IRON, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}, + "knight", 30, new PotionEffect(PotionEffectType.REGENERATION, 100, 3)) + .register(true); + + new Alloy(SlimefunItems.GILDED_IRON, "GILDED_IRON", + new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.IRON_DUST, null, null, null, null, null, null, null}) + .register(true); + + new ReplacingAlloy(SlimefunItems.SYNTHETIC_EMERALD, "SYNTHETIC_EMERALD", + new ItemStack[] {SlimefunItems.SYNTHETIC_SAPPHIRE, SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.THIN_GLASS), null, null, null, null, null}) + .register(true); + + SlimefunManager.registerArmorSet(SlimefunItems.CHAIN, new ItemStack[] {new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)}, "CHAIN", true, true); + + new Talisman(SlimefunItems.TALISMAN_WHIRLWIND, "WHIRLWIND_TALISMAN", + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.STAFF_WIND, SlimefunItems.TALISMAN_TRAVELLER, SlimefunItems.STAFF_WIND, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3} + , false, true, "whirlwind", 60, new PotionEffect[0]) + .register(true); + + new Talisman(SlimefunItems.TALISMAN_WIZARD, "WIZARD_TALISMAN", + new ItemStack[] {SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.TALISMAN_MAGICIAN, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null, SlimefunItems.ENDER_LUMP_3}, + false, false, "wizard", 60, new PotionEffect[0]) + .register(true); + + new SlimefunItem(Categories.TOOLS, SlimefunItems.LUMBER_AXE, "LUMBER_AXE", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {SlimefunItems.SYNTHETIC_DIAMOND, SlimefunItems.SYNTHETIC_DIAMOND, null, SlimefunItems.SYNTHETIC_EMERALD, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) + .register(true, new BlockBreakHandler() { + + @Override + public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { + if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.LUMBER_AXE, true)) { + if (e.getBlock().getType() == Material.LOG || e.getBlock().getType() == Material.LOG_2) { + List logs = new ArrayList(); + TreeCalculator.getTree(e.getBlock().getLocation(), e.getBlock().getLocation(), logs); + + if (logs.contains(e.getBlock())) logs.remove(e.getBlock()); + for (Location b: logs) { + if (CSCoreLib.getLib().getProtectionManager().canBuild(e.getPlayer().getUniqueId(), b.getBlock())) { + 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; + } + }); + + new SlimefunItem(Categories.MISC, SlimefunItems.SALT, "SALT", RecipeType.ORE_WASHER, + new ItemStack[] {null, null, null, null, new ItemStack(Material.SAND, 4), null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.HEAVY_CREAM, "HEAVY_CREAM", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.MILK_BUCKET), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.HEAVY_CREAM, 2)) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.CHEESE, "CHEESE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.MILK_BUCKET), SlimefunItems.SALT, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.BUTTER, "BUTTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.HEAVY_CREAM, SlimefunItems.SALT, null, null, null, null, null, null, null}) + .register(true); + + SlimefunManager.registerArmorSet(SlimefunItems.GILDED_IRON, new ItemStack[] {SlimefunItems.GILDED_IRON_HELMET, SlimefunItems.GILDED_IRON_CHESTPLATE, SlimefunItems.GILDED_IRON_LEGGINGS, SlimefunItems.GILDED_IRON_BOOTS}, "GILDED_IRON", true, false); + + new SlimefunArmorPiece(Categories.ARMOR, SlimefunItems.SCUBA_HELMET, "SCUBA_HELMET", RecipeType.ARMOR_FORGE, + new ItemStack[] {new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new ItemStack(Material.THIN_GLASS), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, null, null}, + new PotionEffect[] {new PotionEffect(PotionEffectType.WATER_BREATHING, 300, 1)}) + .register(true); + + new SlimefunArmorPiece(Categories.ARMOR, SlimefunItems.HAZMATSUIT_CHESTPLATE, "HAZMAT_CHESTPLATE", RecipeType.ARMOR_FORGE, + new ItemStack[] {new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.FIRE_RESISTANCE, 300, 1)}) + .register(true); + + new SlimefunItem(Categories.ARMOR, SlimefunItems.HAZMATSUIT_LEGGINGS, "HAZMAT_LEGGINGS", RecipeType.ARMOR_FORGE, + new ItemStack [] {new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), new MaterialData(Material.WOOL, (byte) 1).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 1).toItemStack(1)}) + .register(true); + + new SlimefunItem(Categories.ARMOR, SlimefunItems.RUBBER_BOOTS, "RUBBER_BOOTS", RecipeType.ARMOR_FORGE, + new ItemStack [] {null, null, null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), new MaterialData(Material.WOOL, (byte) 15).toItemStack(1), null, new MaterialData(Material.WOOL, (byte) 15).toItemStack(1)}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.CRUSHED_ORE, "CRUSHED_ORE", RecipeType.ORE_CRUSHER, + new ItemStack[] {SlimefunItems.SIFTED_ORE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.PULVERIZED_ORE, "PULVERIZED_ORE", RecipeType.ORE_CRUSHER, + new ItemStack[] {SlimefunItems.CRUSHED_ORE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.PURE_ORE_CLUSTER, "PURE_ORE_CLUSTER", RecipeType.ORE_WASHER, + new ItemStack[] {SlimefunItems.PULVERIZED_ORE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.TINY_URANIUM, "TINY_URANIUM", RecipeType.ORE_CRUSHER, + new ItemStack[] {SlimefunItems.PURE_ORE_CLUSTER, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.SMALL_URANIUM, "SMALL_URANIUM", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM, SlimefunItems.TINY_URANIUM}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.URANIUM, "URANIUM", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SMALL_URANIUM, SlimefunItems.SMALL_URANIUM, null, SlimefunItems.SMALL_URANIUM, SlimefunItems.SMALL_URANIUM, null, null, null, null}) + .register(true); + + new Alloy(SlimefunItems.REDSTONE_ALLOY, "REDSTONE_ALLOY", + new ItemStack[] {new ItemStack(Material.REDSTONE), new ItemStack(Material.REDSTONE_BLOCK), SlimefunItems.FERROSILICON, SlimefunItems.HARDENED_METAL_INGOT, null, null, null, null, null}) + .register(true); + + SlimefunManager.registerArmorSet(SlimefunItems.GOLD_12K, new ItemStack[] {SlimefunItems.GOLD_HELMET, SlimefunItems.GOLD_CHESTPLATE, SlimefunItems.GOLD_LEGGINGS, SlimefunItems.GOLD_BOOTS}, "GOLD_12K", true, false); + + new SlimefunItem(Categories.MISC, SlimefunItems.CLOTH, "CLOTH", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.WOOL), null, null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CLOTH, 8)) + .register(true); + + new SlimefunItem(Categories.PORTABLE, SlimefunItems.RAG, "RAG", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, new ItemStack(Material.STRING), null, new ItemStack(Material.STRING), SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RAG, true)) { + PlayerInventory.consumeItemInHand(p); + p.getWorld().playEffect(p.getLocation(), Effect.STEP_SOUND, Material.WOOL); + p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 0)); + p.setFireTicks(0); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.PORTABLE, SlimefunItems.BANDAGE, "BANDAGE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.RAG, new ItemStack(Material.STRING), SlimefunItems.RAG, null, null, null, null, null, null}, + new CustomItem(SlimefunItems.BANDAGE, 4), new String[] {"enable-bleeding"}, new Boolean[] {true}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BANDAGE, true)) { + PlayerInventory.consumeItemInHand(p); + p.getWorld().playEffect(p.getLocation(), Effect.STEP_SOUND, Material.WOOL); + p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 1)); + p.setFireTicks(0); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.PORTABLE, SlimefunItems.SPLINT, "SPLINT", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.IRON_INGOT), null, new ItemStack(Material.STICK), new ItemStack(Material.STICK), new ItemStack(Material.STICK), null, new ItemStack(Material.IRON_INGOT), null}, + new CustomItem(SlimefunItems.SPLINT, 4), new String[] {"enable-broken-legs"}, new Boolean[] {true}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.SPLINT, true)) { + PlayerInventory.consumeItemInHand(p); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_SKELETON_HURT, 1, 1); + p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 0)); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.MISC, SlimefunItems.CAN, "TIN_CAN", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, null, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.TIN_INGOT}, new CustomItem(SlimefunItems.CAN, 4)) + .register(true); + + new SlimefunItem(Categories.PORTABLE, SlimefunItems.VITAMINS, "VITAMINS", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.APPLE), new ItemStack(Material.RED_MUSHROOM), new ItemStack(Material.SUGAR), null, null, null, null, null}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.VITAMINS, true)) { + PlayerInventory.consumeItemInHand(p); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_GENERIC_EAT, 1, 1); + if (p.hasPotionEffect(PotionEffectType.POISON)) p.removePotionEffect(PotionEffectType.POISON); + if (p.hasPotionEffect(PotionEffectType.WITHER)) p.removePotionEffect(PotionEffectType.WITHER); + if (p.hasPotionEffect(PotionEffectType.SLOW)) p.removePotionEffect(PotionEffectType.SLOW); + if (p.hasPotionEffect(PotionEffectType.SLOW_DIGGING)) p.removePotionEffect(PotionEffectType.SLOW_DIGGING); + if (p.hasPotionEffect(PotionEffectType.WEAKNESS)) p.removePotionEffect(PotionEffectType.WEAKNESS); + if (p.hasPotionEffect(PotionEffectType.CONFUSION)) p.removePotionEffect(PotionEffectType.CONFUSION); + if (p.hasPotionEffect(PotionEffectType.BLINDNESS)) p.removePotionEffect(PotionEffectType.BLINDNESS); + p.addPotionEffect(new PotionEffect(PotionEffectType.HEAL, 1, 2)); + p.setFireTicks(0); + e.setCancelled(true); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.PORTABLE, SlimefunItems.MEDICINE, "MEDICINE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.VITAMINS, new ItemStack(Material.GLASS_BOTTLE), SlimefunItems.HEAVY_CREAM, null, null, null, null, null, null}) + .register(true); + + new SlimefunArmorPiece(Categories.TECH, SlimefunItems.NIGHT_VISION_GOGGLES, "NIGHT_VISION_GOGGLES", RecipeType.ARMOR_FORGE, + new ItemStack[] {new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.COAL_BLOCK), new ItemStack(Material.COAL_BLOCK), new MaterialData(Material.STAINED_GLASS_PANE, (byte) 5).toItemStack(1), new ItemStack(Material.COAL_BLOCK), new MaterialData(Material.STAINED_GLASS_PANE, (byte) 5).toItemStack(1), new ItemStack(Material.COAL_BLOCK), null, new ItemStack(Material.COAL_BLOCK)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.NIGHT_VISION, 600, 20)}) + .register(true); + + new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_CONTAINMENT, "PICKAXE_OF_CONTAINMENT", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, SlimefunItems.FERROSILICON, null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) + .register(true, new BlockBreakHandler() { + + @Override + public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { + if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.PICKAXE_OF_CONTAINMENT, true)) { + if (e.getBlock().getType() != Material.MOB_SPAWNER) return true; + ItemStack spawner = SlimefunItems.BROKEN_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) e.getBlock().getState()).getSpawnedType().toString()))); + } + im.setLore(lore); + spawner.setItemMeta(im); + e.getBlock().getLocation().getWorld().dropItemNaturally(e.getBlock().getLocation(), spawner); + e.setExpToDrop(0); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.TOOLS, SlimefunItems.HERCULES_PICKAXE, "HERCULES_PICKAXE", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) + .register(true, new BlockBreakHandler() { + + @Override + public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { + if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), 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, 2)); + } + } + return true; + } + else return false; + } + }); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.SAW_MILL, "SAW_MILL", + new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG)}, + new ItemStack[] {}, Material.WORKBENCH) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(Player p, MultiBlock mb, Block b) { + if (mb.isMultiBlock(SlimefunItem.getByID("SAW_MILL"))) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, SlimefunItems.SAW_MILL, true)) { + if (b.getRelative(BlockFace.UP).getType() == Material.LOG) BlockBreaker.breakBlock(p, b.getRelative(BlockFace.UP), Arrays.asList(new ItemStack[] {new CustomItem(Material.WOOD, b.getRelative(BlockFace.UP).getData() % 4, 8)}), true); + else if (b.getRelative(BlockFace.UP).getType() == Material.LOG_2) BlockBreaker.breakBlock(p, b.getRelative(BlockFace.UP), Arrays.asList(new ItemStack[] {new CustomItem(Material.WOOD, (b.getRelative(BlockFace.UP).getData() % 2) + 4, 8)}), true); + } + } + return true; + } + else return false; + } + }); + + new SlimefunMachine(Categories.MACHINES_1, new CustomItem(Material.FIRE, "&4Phantom Item", 0), "SAW_MILL2", + new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG)}, + new ItemStack[] {}, Material.WORKBENCH, true) + .register(true); + + new SlimefunMachine(Categories.MACHINES_1, new CustomItem(Material.FIRE, "&4Phantom Item", 0), "SAW_MILL3", + new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG_2)}, + new ItemStack[] {}, Material.WORKBENCH, true) + .register(true); + + new SlimefunMachine(Categories.MACHINES_1, new CustomItem(Material.FIRE, "&4Phantom Item", 0), "SAW_MILL4", + new ItemStack[] {null, null, null, new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.IRON_FENCE), new ItemStack(Material.LOG_2), new ItemStack(Material.WORKBENCH), new ItemStack(Material.LOG_2)}, + new ItemStack[] {}, Material.WORKBENCH, true) + .register(true); + + new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_HELMET_STEEL, "SLIME_STEEL_HELMET", RecipeType.ARMOR_FORGE, + new ItemStack[] {new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), null, null, null}) + .register(true); + + new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_CHESTPLATE_STEEL, "SLIME_STEEL_CHESTPLATE", RecipeType.ARMOR_FORGE, + new ItemStack[] {new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL)}) + .register(true); + + new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_LEGGINGS_STEEL, "SLIME_STEEL_LEGGINGS", RecipeType.ARMOR_FORGE, + new ItemStack[] {new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.SPEED, 300, 2)}) + .register(true); + + new SlimefunArmorPiece(Categories.MAGIC_ARMOR, SlimefunItems.SLIME_BOOTS_STEEL, "SLIME_STEEL_BOOTS", RecipeType.ARMOR_FORGE, + new ItemStack[] {null, null, null, new ItemStack(Material.SLIME_BALL), null, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.SLIME_BALL), SlimefunItems.STEEL_PLATE, new ItemStack(Material.SLIME_BALL)}, + new PotionEffect[] {new PotionEffect(PotionEffectType.JUMP, 300, 5)}) + .register(true); + + new SlimefunItem(Categories.WEAPONS, SlimefunItems.BLADE_OF_VAMPIRES, "BLADE_OF_VAMPIRES", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, null, new ItemStack(Material.BLAZE_ROD), null}) + .register(true); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.DIGITAL_MINER, "DIGITAL_MINER", + new ItemStack[] {SlimefunItems.SOLAR_PANEL, new ItemStack(Material.CHEST), SlimefunItems.SOLAR_PANEL, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.DISPENSER), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.HOPPER), new ItemStack(Material.IRON_BLOCK)}, + new ItemStack[0], Material.DISPENSER) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(final Player p, MultiBlock mb, final Block b) { + if (mb.isMultiBlock(SlimefunItem.getByID("DIGITAL_MINER"))) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, SlimefunItems.DIGITAL_MINER, true)) { + Chest chest = (Chest) b.getRelative(BlockFace.UP).getState(); + final Inventory inv = chest.getInventory(); + List ores = new ArrayList(); + for (int x = b.getX() - 4; x < b.getX() + 4; x++) { + for (int z = b.getZ() - 4; z < b.getZ() + 4; z++) { + for (int y = b.getY(); y > 0; y--) { + if (b.getWorld().getBlockAt(x, y, z).getType().toString().endsWith("_ORE")) { + ores.add(b.getWorld().getBlockAt(x, y, z).getLocation()); + } + } + } + } + if (!ores.isEmpty()) { + final Material ore = ores.get(0).getBlock().getType(); + final ItemStack adding = new ItemStack(ore); + ores.get(0).getBlock().setType(Material.AIR); + ores.clear(); + if (InvUtils.fits(inv, adding)) { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + } + else Messages.local.sendTranslation(p, "miner.no-ores", true); + } + } + return true; + } + else return false; + } + }); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.ADVANCED_DIGITAL_MINER, "ADVANCED_DIGITAL_MINER", + new ItemStack[] {SlimefunItems.SOLAR_PANEL, new ItemStack(Material.CHEST), SlimefunItems.SOLAR_PANEL, SlimefunItems.GOLD_24K_BLOCK, new ItemStack(Material.DISPENSER), SlimefunItems.GOLD_24K_BLOCK, SlimefunItems.GOLD_24K_BLOCK, new ItemStack(Material.HOPPER), SlimefunItems.GOLD_24K_BLOCK}, + new ItemStack[0], Material.DISPENSER) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(final Player p, MultiBlock mb, final Block b) { + if (mb.isMultiBlock(SlimefunItem.getByID("ADVANCED_DIGITAL_MINER"))) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, SlimefunItems.ADVANCED_DIGITAL_MINER, true)) { + Chest chest = (Chest) b.getRelative(BlockFace.UP).getState(); + final Inventory inv = chest.getInventory(); + List ores = new ArrayList(); + for (int x = b.getX() - 6; x < b.getX() + 6; x++) { + for (int z = b.getZ() - 6; z < b.getZ() + 6; z++) { + for (int y = b.getY(); y > 0; y--) { + if (b.getWorld().getBlockAt(x, y, z).getType().toString().endsWith("_ORE")) { + ores.add(b.getWorld().getBlockAt(x, y, z).getLocation()); + } + } + } + } + if (!ores.isEmpty()) { + final Material ore = ores.get(0).getBlock().getType(); + ItemStack drop = new ItemStack(ore); + if (ore == Material.COAL_ORE) drop = new CustomItem(new ItemStack(Material.COAL), 4); + else if (ore == Material.IRON_ORE) drop = new CustomItem(SlimefunItems.IRON_DUST, 2); + else if (ore == Material.GOLD_ORE) drop = new CustomItem(SlimefunItems.GOLD_DUST, 2); + else if (ore == Material.REDSTONE_ORE) drop = new CustomItem(new ItemStack(Material.REDSTONE), 8); + else if (ore == Material.QUARTZ_ORE) drop = new CustomItem(new ItemStack(Material.QUARTZ), 4); + else if (ore == Material.LAPIS_ORE) drop = new CustomItem(new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), 12); + else { + for (ItemStack drops: ores.get(0).getBlock().getDrops()) { + if (!drops.getType().isBlock()) drop = new CustomItem(drops, 2); + } + } + final ItemStack adding = drop; + ores.get(0).getBlock().setType(Material.AIR); + ores.clear(); + if (InvUtils.fits(inv, adding)) { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, ore); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + inv.addItem(adding); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + }, 20L); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + } + else Messages.local.sendTranslation(p, "miner.no-ores", true); + } + } + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.MISC, SlimefunItems.GOLD_24K_BLOCK, "GOLD_24K_BLOCK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K, SlimefunItems.GOLD_24K}) + .register(true); + + new SlimefunGadget(Categories.MACHINES_1, SlimefunItems.COMPOSTER, "COMPOSTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.WOOD_STEP), null, new ItemStack(Material.WOOD_STEP), new ItemStack(Material.WOOD_STEP), null, new ItemStack(Material.WOOD_STEP), new ItemStack(Material.WOOD_STEP), new ItemStack(Material.CAULDRON_ITEM), new ItemStack(Material.WOOD_STEP)}, + new ItemStack[] {new CustomItem(Material.LEAVES, 0, 8), new ItemStack(Material.DIRT), new CustomItem(Material.LEAVES_2, 0, 8), new ItemStack(Material.DIRT), new CustomItem(Material.SAPLING, 0, 8), new ItemStack(Material.DIRT), new ItemStack(Material.STONE, 4), new ItemStack(Material.NETHERRACK), new ItemStack(Material.SAND, 2), new ItemStack(Material.SOUL_SAND), new ItemStack(Material.WHEAT, 4), new ItemStack(Material.NETHER_STALK)}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, final Player p, ItemStack item) { + if (e.getClickedBlock() != null) { + SlimefunItem machine = BlockStorage.check(e.getClickedBlock()); + if (machine != null && machine.getID().equals("COMPOSTER")) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), e.getClickedBlock(), true)) { + final ItemStack input = p.getInventory().getItemInMainHand(); + final Block b = e.getClickedBlock(); + 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); + + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType().isBlock()) b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, input.getType()); + else b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + b.getWorld().dropItemNaturally(b.getRelative(BlockFace.UP).getLocation(), adding); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + return true; + } + } + Messages.local.sendTranslation(p, "machines.wrong-item", true); + return true; + } + return true; + } + } + return false; + } + }); + + new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.FARMER_SHOES, "FARMER_SHOES", RecipeType.ARMOR_FORGE, + new ItemStack[] {null, null, null, new ItemStack(Material.HAY_BLOCK), null, new ItemStack(Material.HAY_BLOCK), new ItemStack(Material.HAY_BLOCK), null, new ItemStack(Material.HAY_BLOCK)}) + .register(true); + + @SuppressWarnings("unchecked") + final String[] explosiveblacklist = Slimefun.getItemValue("EXPLOSIVE_PICKAXE", "unbreakable-blocks") != null ? ((List) Slimefun.getItemValue("EXPLOSIVE_PICKAXE", "unbreakable-blocks")).toArray(new String[((List) Slimefun.getItemValue("EXPLOSIVE_PICKAXE", "unbreakable-blocks")).size()]): new String[] {"BEDROCK", "BARRIER", "COMMAND", "COMMAND_CHAIN", "COMMAND_REPEATING"}; + + new SlimefunItem(Categories.TOOLS, SlimefunItems.EXPLOSIVE_PICKAXE, "EXPLOSIVE_PICKAXE", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {new ItemStack(Material.TNT), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.TNT), null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}, + new String[] {"unbreakable-blocks"}, new Object[] {Arrays.asList("BEDROCK", "BARRIER", "COMMAND", "COMMAND_CHAIN", "COMMAND_REPEATING")}) + .register(true, new BlockBreakHandler() { + + @Override + public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.EXPLOSIVE_PICKAXE, true)) { + e.getBlock().getWorld().createExplosion(e.getBlock().getLocation(), 0.0F); + e.getBlock().getWorld().playSound(e.getBlock().getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1F, 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 && !StringUtils.equals(b.getType().toString(), explosiveblacklist)) { + if (CSCoreLib.getLib().getProtectionManager().canBuild(e.getPlayer().getUniqueId(), b)) { + if (SlimefunStartup.instance.isCoreProtectInstalled()) SlimefunStartup.instance.getCoreProtectAPI().logRemoval(e.getPlayer().getName(), b.getLocation(), b.getType(), b.getData()); + b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); + SlimefunItem sfItem = BlockStorage.check(b); + boolean allow = true; + if (sfItem != null && !(sfItem instanceof HandledBlock)) { + if (SlimefunItem.blockhandler.containsKey(sfItem.getName())) { + allow = SlimefunItem.blockhandler.get(sfItem.getName()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK); + } + if (allow) { + drops.add(BlockStorage.retrieve(e.getBlock())); + } + } + else if (b.getType().equals(Material.SKULL)) { + 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().equals(Material.IRON_ORE) && !b.getType().equals(Material.GOLD_ORE)) ? new CustomItem(drop, fortune): drop); + } + b.setType(Material.AIR); + } + } + } + } + } + } + return true; + } + else return false; + } + }); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.AUTOMATED_PANNING_MACHINE, "AUTOMATED_PANNING_MACHINE", + new ItemStack[] {null, null, null, null, new ItemStack(Material.TRAP_DOOR), null, null, new ItemStack(Material.CAULDRON_ITEM), null}, + new ItemStack[] {new ItemStack(Material.GRAVEL), new ItemStack(Material.FLINT), new ItemStack(Material.GRAVEL), new ItemStack(Material.CLAY_BALL), new ItemStack(Material.GRAVEL), SlimefunItems.SIFTED_ORE}, Material.TRAP_DOOR) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(final Player p, MultiBlock mb, final Block b) { + if (mb.isMultiBlock(SlimefunItem.getByID("AUTOMATED_PANNING_MACHINE"))) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + final ItemStack input = p.getInventory().getItemInMainHand(); + ItemStack output = null; + if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.SIFTED_ORE"))) output = SlimefunItems.SIFTED_ORE; + else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.CLAY"))) output = new ItemStack(Material.CLAY_BALL); + else if (SlimefunStartup.chance(100, (Integer) Slimefun.getItemValue("GOLD_PAN", "chance.FLINT"))) output = new ItemStack(Material.FLINT); + final ItemStack drop = output; + if (input != null) { + if (input.getType() == Material.GRAVEL) { + PlayerInventory.consumeItemInHand(p); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + b.getWorld().playEffect(b.getRelative(BlockFace.DOWN).getLocation(), Effect.STEP_SOUND, Material.GRAVEL); + if (drop != null) b.getWorld().dropItemNaturally(b.getLocation(), drop); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_ARROW_HIT_PLAYER, 1F, 1F); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + } + }, 30L); + return true; + } + } + Messages.local.sendTranslation(p, "machines.wrong-item", true); + return true; + } + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.MAGIC_ARMOR, SlimefunItems.BOOTS_OF_THE_STOMPER, "BOOTS_OF_THE_STOMPER", RecipeType.ARMOR_FORGE, + new ItemStack[] {null, null, null, new ItemStack(Material.WOOL), null, new ItemStack(Material.WOOL), new ItemStack(Material.PISTON_BASE), null, new ItemStack(Material.PISTON_BASE)}) + .register(true); + + new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_THE_SEEKER, "PICKAXE_OF_THE_SEEKER", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {new ItemStack(Material.COMPASS), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.COMPASS), null, SlimefunItems.FERROSILICON, null, null, SlimefunItems.FERROSILICON, null}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PICKAXE_OF_THE_SEEKER, 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) closest = p.getLocation().getBlock().getRelative(x, y, z); + else if (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, 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)); + } + + if (e.getPlayer().getInventory().getItemInMainHand().getEnchantments().containsKey(Enchantment.DURABILITY)) { + if (SlimefunStartup.randomize(100) <= (60 + 40 / (e.getPlayer().getInventory().getItemInMainHand().getEnchantmentLevel(Enchantment.DURABILITY) + 1))) PlayerInventory.damageItemInHand(e.getPlayer()); + } + else PlayerInventory.damageItemInHand(e.getPlayer()); + + PlayerInventory.update(e.getPlayer()); + return true; + } + else return false; + } + }); + + new SlimefunBackpack(9, Categories.PORTABLE, SlimefunItems.BACKPACK_SMALL, "SMALL_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_6K, new ItemStack(Material.CHEST), SlimefunItems.GOLD_6K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) + .register(true); + + new SlimefunBackpack(18, Categories.PORTABLE, SlimefunItems.BACKPACK_MEDIUM, "MEDIUM_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_10K, SlimefunItems.BACKPACK_SMALL, SlimefunItems.GOLD_10K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) + .register(true); + + new SlimefunBackpack(27, Categories.PORTABLE, SlimefunItems.BACKPACK_LARGE, "LARGE_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.LEATHER), null, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_14K, SlimefunItems.BACKPACK_MEDIUM, SlimefunItems.GOLD_14K, new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER), new ItemStack(Material.LEATHER)}) + .register(true); + + new SlimefunBackpack(36, Categories.PORTABLE, SlimefunItems.WOVEN_BACKPACK, "WOVEN_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CLOTH, null, SlimefunItems.CLOTH, SlimefunItems.GOLD_16K, SlimefunItems.BACKPACK_LARGE, SlimefunItems.GOLD_16K, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH}) + .register(true); + + new SlimefunGadget(Categories.MACHINES_1, SlimefunItems.CRUCIBLE, "CRUCIBLE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack [] {new ItemStack(Material.HARD_CLAY), null, new ItemStack(Material.HARD_CLAY), new ItemStack(Material.HARD_CLAY), null, new ItemStack(Material.HARD_CLAY), new ItemStack(Material.HARD_CLAY), new ItemStack(Material.FLINT_AND_STEEL), new ItemStack(Material.HARD_CLAY)}, + new ItemStack [] {new ItemStack(Material.COBBLESTONE, 16), new ItemStack(Material.LAVA_BUCKET), new ItemStack(Material.LEAVES, 16), new ItemStack(Material.WATER_BUCKET), new ItemStack(Material.HARD_CLAY, 12), new ItemStack(Material.LAVA_BUCKET)}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, final Player p, ItemStack item) { + if (e.getClickedBlock() != null) { + SlimefunItem machine = BlockStorage.check(e.getClickedBlock()); + if (machine != null && machine.getID().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); + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (input != null) { + if (SlimefunManager.isItemSimiliar(input, convert, true)) { + e.setCancelled(true); + ItemStack removing = input.clone(); + removing.setAmount(convert.getAmount()); + p.getInventory().removeItem(removing); + + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 7); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 7); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 6); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 6); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 5); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 5); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 4); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 4); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 3); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 3); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 2); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 2); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.LAVA); + block.setData((byte) 1); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 1); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + + @Override + public void run() { + if (input.getType() == Material.COBBLESTONE || input.getType() == Material.HARD_CLAY) { + block.setType(Material.STATIONARY_LAVA); + block.setData((byte) 0); + block.getWorld().playSound(block.getLocation(), Sound.BLOCK_LAVA_POP, 1F, 1F); + } + else if (input.getType() == Material.LEAVES) { + block.setType(Material.WATER); + block.setData((byte) 0); + block.getWorld().playSound(block.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + } + } + }, 50L); + } + }, 50L); + } + }, 50L); + } + }, 50L); + } + }, 50L); + } + }, 50L); + } + }, 50L); + } + }, 50L); + return true; + } + } + } + Messages.local.sendTranslation(p, "machines.wrong-item", true); + return true; + } + return true; + } + } + return false; + } + }); + + new SlimefunBackpack(45, Categories.PORTABLE, SlimefunItems.GILDED_BACKPACK, "GILDED_BACKPACK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K, new ItemStack(Material.LEATHER), SlimefunItems.WOVEN_BACKPACK, new ItemStack(Material.LEATHER), SlimefunItems.GOLD_22K, null, SlimefunItems.GOLD_22K}) + .register(true); + + new Alloy(Categories.TECH_MISC, SlimefunItems.MAGNET, "MAGNET", + new ItemStack[] {SlimefunItems.NICKEL_INGOT, SlimefunItems.ALUMINUM_DUST, SlimefunItems.IRON_DUST, SlimefunItems.COBALT_INGOT, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.INFUSED_MAGNET, "INFUSED_MAGNET", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_2, SlimefunItems.MAGNET, SlimefunItems.ENDER_LUMP_2, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}) + .register(true); + + new SlimefunItem(Categories.TOOLS, SlimefunItems.COBALT_PICKAXE, "COBALT_PICKAXE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.COBALT_INGOT, SlimefunItems.COBALT_INGOT, SlimefunItems.COBALT_INGOT, null, SlimefunItems.NICKEL_INGOT, null, null, SlimefunItems.NICKEL_INGOT, null}) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.NECROTIC_SKULL, "NECROTIC_SKULL", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3, null, new MaterialData(Material.SKULL_ITEM, (byte) 1).toItemStack(1), null, SlimefunItems.MAGIC_LUMP_3, null, SlimefunItems.MAGIC_LUMP_3}) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ESSENCE_OF_AFTERLIFE, "ESSENCE_OF_AFTERLIFE", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_EARTH, SlimefunItems.NECROTIC_SKULL, SlimefunItems.RUNE_FIRE, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_WATER, SlimefunItems.ENDER_LUMP_3}) + .register(true); + + new SoulboundBackpack(36, Categories.PORTABLE, SlimefunItems.BOUND_BACKPACK, "BOUND_BACKPACK", + new ItemStack[] {SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.GILDED_BACKPACK, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.ENDER_LUMP_2, null, SlimefunItems.ENDER_LUMP_2}) + .register(true); + + new JetBoots(SlimefunItems.DURALUMIN_JETBOOTS, "DURALUMIN_JETBOOTS", + new ItemStack[] {null, null, null, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.35) + .register(true); + + new JetBoots(SlimefunItems.SOLDER_JETBOOTS, "SOLDER_JETBOOTS", + new ItemStack[] {null, null, null, SlimefunItems.SOLDER_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.SOLDER_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.4) + .register(true); + + new JetBoots(SlimefunItems.BILLON_JETBOOTS, "BILLON_JETBOOTS", + new ItemStack[] {null, null, null, SlimefunItems.BILLON_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BILLON_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.45) + .register(true); + + new JetBoots(SlimefunItems.STEEL_JETBOOTS, "STEEL_JETBOOTS", + new ItemStack[] {null, null, null, SlimefunItems.STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.5) + .register(true); + + new JetBoots(SlimefunItems.DAMASCUS_STEEL_JETBOOTS, "DAMASCUS_STEEL_JETBOOTS", + new ItemStack[] {null, null, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.55) + .register(true); + + new JetBoots(SlimefunItems.REINFORCED_ALLOY_JETBOOTS, "REINFORCED_ALLOY_JETBOOTS", + new ItemStack[] {null, null, null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.6) + .register(true); + + new JetBoots(SlimefunItems.CARBONADO_JETBOOTS, "CARBONADO_JETBOOTS", + new ItemStack[] {null, null, null, SlimefunItems.CARBONADO, SlimefunItems.POWER_CRYSTAL, SlimefunItems.CARBONADO, SlimefunItems.STEEL_THRUSTER, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.7) + .register(true); + + new JetBoots(SlimefunItems.ARMORED_JETBOOTS, "ARMORED_JETBOOTS", + new ItemStack[] {null, null, null, SlimefunItems.STEEL_PLATE, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_PLATE, SlimefunItems.STEEL_THRUSTER, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_THRUSTER}, + 0.45) + .register(true); + + new SlimefunItem(Categories.WEAPONS, SlimefunItems.SEISMIC_AXE, "SEISMIC_AXE", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.HARDENED_METAL_INGOT, null, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.STAFF_ELEMENTAL, null, null, SlimefunItems.STAFF_ELEMENTAL, null}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.SEISMIC_AXE, true)) { + List blocks = p.getLineOfSight((HashSet) 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) { + if (b.getWorld().getBlockAt(b.getX(), y, b.getZ()).getType() != null) { + if (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) { + FallingBlock block = ground.getWorld().spawnFallingBlock(ground.getBlock().getRelative(BlockFace.UP).getLocation(), ground.getBlock().getType(), ground.getBlock().getData()); + block.setDropItem(false); + block.setVelocity(new Vector(0, 0.4 + i * 0.01, 0)); + Variables.blocks.add(block.getUniqueId()); + } + for (Entity n: ground.getChunk().getEntities()) { + if (n instanceof LivingEntity) { + if (n.getLocation().distance(ground) <= 2.0D && n.getUniqueId() != 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++) { + if (e.getPlayer().getInventory().getItemInMainHand() != null) { + if (e.getPlayer().getInventory().getItemInMainHand().getEnchantments().containsKey(Enchantment.DURABILITY)) { + if (SlimefunStartup.randomize(100) <= (60 + 40 / (e.getPlayer().getInventory().getItemInMainHand().getEnchantmentLevel(Enchantment.DURABILITY) + 1))) PlayerInventory.damageItemInHand(e.getPlayer()); + } + else PlayerInventory.damageItemInHand(e.getPlayer()); + } + } + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.TOOLS, SlimefunItems.PICKAXE_OF_VEIN_MINING, "PICKAXE_OF_VEIN_MINING", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {new ItemStack(Material.EMERALD_ORE), SlimefunItems.SYNTHETIC_DIAMOND, new ItemStack(Material.EMERALD_ORE), null, SlimefunItems.GILDED_IRON, null, null, SlimefunItems.GILDED_IRON, null}) + .register(true, new BlockBreakHandler() { + + @Override + public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { + if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.PICKAXE_OF_VEIN_MINING, 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) { + 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; + } + }); + + new SoulboundItem(Categories.WEAPONS, SlimefunItems.SOULBOUND_SWORD, "SOULBOUND_SWORD", + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_SWORD), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + .register(true); + + new SoulboundItem(Categories.WEAPONS, SlimefunItems.SOULBOUND_BOW, "SOULBOUND_BOW", + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.BOW), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + .register(true); + + new SoulboundItem(Categories.TOOLS, SlimefunItems.SOULBOUND_PICKAXE, "SOULBOUND_PICKAXE", + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_PICKAXE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + .register(true); + + new SoulboundItem(Categories.TOOLS, SlimefunItems.SOULBOUND_AXE, "SOULBOUND_AXE", + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_AXE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + .register(true); + + new ExcludedSoulboundTool(Categories.TOOLS, SlimefunItems.SOULBOUND_SHOVEL, "SOULBOUND_SHOVEL", + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_SPADE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + .register(true); + + new ExcludedSoulboundTool(Categories.TOOLS, SlimefunItems.SOULBOUND_HOE, "SOULBOUND_HOE", + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_HOE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + .register(true); + + new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_HELMET, "SOULBOUND_HELMET", + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_HELMET), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + .register(true); + + new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_CHESTPLATE, "SOULBOUND_CHESTPLATE", + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_CHESTPLATE), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + .register(true); + + new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_LEGGINGS, "SOULBOUND_LEGGINGS", + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_LEGGINGS), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + .register(true); + + new SoulboundItem(Categories.MAGIC_ARMOR, SlimefunItems.SOULBOUND_BOOTS, "SOULBOUND_BOOTS", + new ItemStack[] {null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null, null, new ItemStack(Material.DIAMOND_BOOTS), null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + .register(true); + + new SlimefunMachine(Categories.MACHINES_1, SlimefunItems.JUICER, "JUICER", + new ItemStack[] {null, new ItemStack(Material.GLASS), null, null, new ItemStack(Material.NETHER_FENCE), null, null, new CustomItem(Material.DISPENSER, "Dispenser (Facing up)", 0), null}, + new ItemStack[] { + new ItemStack(Material.APPLE), SlimefunItems.APPLE_JUICE, + new ItemStack(Material.MELON), SlimefunItems.MELON_JUICE, + new ItemStack(Material.CARROT_ITEM), SlimefunItems.CARROT_JUICE, + new ItemStack(Material.PUMPKIN), SlimefunItems.PUMPKIN_JUICE}, + Material.NETHER_FENCE) + .register(true, new MultiBlockInteractionHandler() { + + @Override + public boolean onInteract(Player p, MultiBlock mb, Block b) { + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("JUICER"); + + if (mb.isMultiBlock(machine)) { + if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if (Slimefun.hasUnlocked(p, SlimefunItems.JUICER, true)) { + Dispenser disp = (Dispenser) b.getRelative(BlockFace.DOWN).getState(); + Inventory inv = disp.getInventory(); + for (ItemStack current: inv.getContents()) { + for (ItemStack convert: RecipeType.getRecipeInputs(machine)) { + if (convert != null && SlimefunManager.isItemSimiliar(current, convert, true)) { + ItemStack adding = RecipeType.getRecipeOutput(machine, convert); + if (InvUtils.fits(inv, adding)) { + ItemStack removing = current.clone(); + removing.setAmount(1); + inv.removeItem(removing); + inv.addItem(adding); + p.getWorld().playSound(b.getLocation(), Sound.ENTITY_PLAYER_SPLASH, 1F, 1F); + p.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, Material.HAY_BLOCK); + } + else Messages.local.sendTranslation(p, "machines.full-inventory", true); + return true; + } + } + } + Messages.local.sendTranslation(p, "machines.unknown-material", true); + } + } + return true; + } + else return false; + } + }); + + new Juice(Categories.FOOD, SlimefunItems.APPLE_JUICE, "APPLE_JUICE", RecipeType.JUICER, + new ItemStack[] {null, null, null, null, new ItemStack(Material.APPLE), null, null, null, null}) + .register(true); + + new Juice(Categories.FOOD, SlimefunItems.CARROT_JUICE, "CARROT_JUICE", RecipeType.JUICER, + new ItemStack[] {null, null, null, null, new ItemStack(Material.CARROT_ITEM), null, null, null, null}) + .register(true); + + new Juice(Categories.FOOD, SlimefunItems.MELON_JUICE, "MELON_JUICE", RecipeType.JUICER, + new ItemStack[] {null, null, null, null, new ItemStack(Material.MELON), null, null, null, null}) + .register(true); + + new Juice(Categories.FOOD, SlimefunItems.PUMPKIN_JUICE, "PUMPKIN_JUICE", RecipeType.JUICER, + new ItemStack[] {null, null, null, null, new ItemStack(Material.PUMPKIN), null, null, null, null}) + .register(true); + + new Juice(Categories.FOOD, SlimefunItems.GOLDEN_APPLE_JUICE, "GOLDEN_APPLE_JUICE", RecipeType.JUICER, + new ItemStack[] {new ItemStack(Material.GOLDEN_APPLE), null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.BROKEN_SPAWNER, "BROKEN_SPAWNER", new RecipeType(SlimefunItems.PICKAXE_OF_CONTAINMENT), + new ItemStack[] {null, null, null, null, new ItemStack(Material.MOB_SPAWNER), null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.REPAIRED_SPAWNER, "REINFORCED_SPAWNER", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {SlimefunItems.RUNE_ENDER, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.BROKEN_SPAWNER, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.ESSENCE_OF_AFTERLIFE, new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0), SlimefunItems.RUNE_ENDER}) + .register(true, new BlockPlaceHandler() { + + @Override + public boolean onBlockPlace(BlockPlaceEvent e, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) { + EntityType type = null; + for (String line: item.getItemMeta().getLore()) { + if (ChatColor.stripColor(line).startsWith("Type: ")) type = EntityType.valueOf(ChatColor.stripColor(line).replace("Type: ", "").replace(" ", "_").toUpperCase()); + } + if (type != null) { + CreatureSpawner spawner = (CreatureSpawner) e.getBlock().getState(); + spawner.setSpawnedType(type); + spawner.update(true, false); + } + return true; + } + else return false; + } + }); + + new EnhancedFurnace(1, 1, 1, SlimefunItems.ENHANCED_FURNACE, "ENHANCED_FURNACE", + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new EnhancedFurnace(2, 1, 1, SlimefunItems.ENHANCED_FURNACE_2, "ENHANCED_FURNACE_2", + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new EnhancedFurnace(2, 2, 1, SlimefunItems.ENHANCED_FURNACE_3, "ENHANCED_FURNACE_3", + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_2, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new EnhancedFurnace(3, 2, 1, SlimefunItems.ENHANCED_FURNACE_4, "ENHANCED_FURNACE_4", + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new EnhancedFurnace(3, 2, 2, SlimefunItems.ENHANCED_FURNACE_5, "ENHANCED_FURNACE_5", + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new EnhancedFurnace(3, 3, 2, SlimefunItems.ENHANCED_FURNACE_6, "ENHANCED_FURNACE_6", + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new EnhancedFurnace(4, 3, 2, SlimefunItems.ENHANCED_FURNACE_7, "ENHANCED_FURNACE_7", + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new EnhancedFurnace(4, 4, 2, SlimefunItems.ENHANCED_FURNACE_8, "ENHANCED_FURNACE_8", + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_7, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new EnhancedFurnace(5, 4, 2, SlimefunItems.ENHANCED_FURNACE_9, "ENHANCED_FURNACE_9", + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new EnhancedFurnace(5, 5, 2, SlimefunItems.ENHANCED_FURNACE_10, "ENHANCED_FURNACE_10", + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new EnhancedFurnace(5, 5, 3, SlimefunItems.ENHANCED_FURNACE_11, "ENHANCED_FURNACE_11", + new ItemStack[] {null, SlimefunItems.BASIC_CIRCUIT_BOARD, null, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.HEATING_COIL, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new EnhancedFurnace(10, 10, 3, SlimefunItems.REINFORCED_FURNACE, "REINFORCED_FURNACE", + new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ENHANCED_FURNACE_11, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT}) + .register(true); + + new EnhancedFurnace(20, 10, 3, SlimefunItems.CARBONADO_EDGED_FURNACE, "CARBONADO_EDGED_FURNACE", + new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.CARBONADO, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_FURNACE, SlimefunItems.HEATING_COIL, SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.ELECTRO_MAGNET, "ELECTRO_MAGNET", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.NICKEL_INGOT, SlimefunItems.MAGNET, SlimefunItems.COBALT_INGOT, null, SlimefunItems.BATTERY, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.ELECTRIC_MOTOR, "ELECTRIC_MOTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.HEATING_COIL, "HEATING_COIL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) + .register(true); + + @SuppressWarnings("unchecked") + final String[] blockPlacerBlacklist = Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks") != null ? ((List) Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks")).toArray(new String[((List) Slimefun.getItemValue("BLOCK_PLACER", "unplaceable-blocks")).size()]): new String[] {"STRUCTURE_BLOCK"}; + + new SlimefunItem(Categories.MACHINES_1, SlimefunItems.BLOCK_PLACER, "BLOCK_PLACER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.GOLD_4K, new ItemStack(Material.PISTON_BASE), SlimefunItems.GOLD_4K, new ItemStack(Material.IRON_INGOT), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.IRON_INGOT), SlimefunItems.GOLD_4K, new ItemStack(Material.PISTON_BASE), SlimefunItems.GOLD_4K}, + new String[] {"unplaceable-blocks"}, new Object[] {Arrays.asList("STRUCTURE_BLOCK")}) + .register(true, new AutonomousMachineHandler() { + + @Override + public boolean onBlockDispense(final BlockDispenseEvent e, Block dispenser, final Dispenser d, Block block, Block chest, SlimefunItem machine) { + if (machine.getID().equalsIgnoreCase("BLOCK_PLACER")) { + e.setCancelled(true); + if ((block.getType() == null || block.getType() == Material.AIR) && e.getItem().getType().isBlock()) { + for(String blockType : blockPlacerBlacklist) { + if (e.getItem().getType().toString().equals(blockType)) { + return false; + } + } + + SlimefunItem sfItem = SlimefunItem.getByItem(e.getItem()); + if (sfItem != null) { + if (!SlimefunItem.blockhandler.containsKey(sfItem.getName())) { + block.setType(e.getItem().getType()); + block.setData(e.getItem().getData().getData()); + BlockStorage.store(block, sfItem.getName()); + 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().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + d.getInventory().removeItem(e.getItem()); + } + }, 2L); + } + } + } + else { + block.setType(e.getItem().getType()); + block.setData(e.getItem().getData().getData()); + 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().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + d.getInventory().removeItem(e.getItem()); + } + }, 2L); + } + } + } + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION, "SCROLL_OF_DIMENSIONAL_TELEPOSITION", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {null, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGICAL_BOOK_COVER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.MAGIC_EYE_OF_ENDER, SlimefunItems.ENDER_LUMP_3, null}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack 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() != 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; + } + }); + + new SlimefunBow(SlimefunItems.EXPLOSIVE_BOW, "EXPLOSIVE_BOW", + new ItemStack[] {null, new ItemStack(Material.STICK), new ItemStack(Material.SULPHUR), SlimefunItems.STAFF_FIRE, null, SlimefunItems.SULFATE, null, new ItemStack(Material.STICK), new ItemStack(Material.SULPHUR)}) + .register(true, new BowShootHandler() { + + @Override + public boolean onHit(EntityDamageByEntityEvent e, LivingEntity n) { + if (SlimefunManager.isItemSimiliar(Variables.arrows.get(e.getDamager().getUniqueId()), SlimefunItems.EXPLOSIVE_BOW, true)) { + Vector vector = n.getVelocity(); + vector.setY(0.6); + n.setVelocity(vector); + n.getWorld().createExplosion(n.getLocation(), 0F); + n.getWorld().playSound(n.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1F, 1F); + return true; + } + else return false; + } + }); + + new SlimefunBow(SlimefunItems.ICY_BOW, "ICY_BOW", + new ItemStack[] {null, new ItemStack(Material.STICK), new ItemStack(Material.ICE), SlimefunItems.STAFF_WATER, null, new ItemStack(Material.PACKED_ICE), null, new ItemStack(Material.STICK), new ItemStack(Material.ICE)}) + .register(true, new BowShootHandler() { + + @Override + public boolean onHit(EntityDamageByEntityEvent e, LivingEntity n) { + if (SlimefunManager.isItemSimiliar(Variables.arrows.get(e.getDamager().getUniqueId()), SlimefunItems.ICY_BOW, true)) { + n.getWorld().playEffect(n.getLocation(), Effect.STEP_SOUND, Material.ICE); + n.getWorld().playEffect(n.getEyeLocation(), Effect.STEP_SOUND, Material.ICE); + n.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 20 * 2, 10)); + n.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 20 * 2, -10)); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.TOME_OF_KNOWLEDGE_SHARING, "TOME_OF_KNOWLEDGE_SHARING", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {null, new ItemStack(Material.FEATHER), null, new ItemStack(Material.INK_SACK), SlimefunItems.MAGICAL_BOOK_COVER, new ItemStack(Material.GLASS_BOTTLE), null, new ItemStack(Material.BOOK_AND_QUILL), null}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.TOME_OF_KNOWLEDGE_SHARING, 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.setItemInHand(item); + p.getWorld().playSound(p.getLocation(), Sound.ENTITY_PLAYER_LEVELUP, 1F, 1F); + return true; + } + else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.TOME_OF_KNOWLEDGE_SHARING, false)) { + List researches = Research.getResearches(ChatColor.stripColor(item.getItemMeta().getLore().get(1))); + for (Research research: researches) { + research.unlock(p, true); + } + PlayerInventory.consumeItemInHand(p); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.FLASK_OF_KNOWLEDGE, "FLASK_OF_KNOWLEDGE", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {null, null, null, SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.THIN_GLASS), SlimefunItems.MAGIC_LUMP_2, null, SlimefunItems.MAGIC_LUMP_2, null}, new CustomItem(SlimefunItems.FLASK_OF_KNOWLEDGE, 8)) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.FLASK_OF_KNOWLEDGE, true) && p.getLevel() >= 1) { + p.setLevel(p.getLevel() - 1); + p.getInventory().addItem(new CustomItem(Material.EXP_BOTTLE, "&aFlask of Knowledge", 0)); + PlayerInventory.consumeItemInHand(p); + PlayerInventory.update(p); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.BIRTHDAY, new CustomItem(new MaterialData(Material.CAKE), "&bBirthday Cake"), "BIRTHDAY_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.TORCH), null, new ItemStack(Material.SUGAR), new ItemStack(Material.CAKE), new ItemStack(Material.SUGAR), null, null, null}) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_MILK, "CHRISTMAS_MILK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.MILK_BUCKET), new ItemStack(Material.GLASS_BOTTLE), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_MILK, 4)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, "CHRISTMAS_CHOCOLATE_MILK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CHRISTMAS_MILK, new MaterialData(Material.INK_SACK, (byte) 3).toItemStack(1), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, 2)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_EGG_NOG, "CHRISTMAS_EGG_NOG", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CHRISTMAS_MILK, new ItemStack(Material.EGG), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_EGG_NOG, 2)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_APPLE_CIDER, "CHRISTMAS_APPLE_CIDER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.APPLE_JUICE, new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_CIDER, 2)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_COOKIE, "CHRISTMAS_COOKIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.COOKIE), new ItemStack(Material.SUGAR), new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_COOKIE, 16)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_FRUIT_CAKE, "CHRISTMAS_FRUIT_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.APPLE), new ItemStack(Material.MELON), new ItemStack(Material.SUGAR), null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_FRUIT_CAKE, 4)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_APPLE_PIE, "CHRISTMAS_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE, "CHRISTMAS_HOT_CHOCOLATE", RecipeType.SMELTERY, + new ItemStack[] {SlimefunItems.CHRISTMAS_CHOCOLATE_MILK, null, null, null, null, null, null, null, null}, SlimefunItems.CHRISTMAS_HOT_CHOCOLATE) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CAKE, "CHRISTMAS_CAKE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.EGG), new ItemStack(Material.SUGAR), SlimefunItems.WHEAT_FLOUR, new ItemStack(Material.MILK_BUCKET), null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CAKE, 4)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CARAMEL, "CHRISTMAS_CARAMEL", RecipeType.SMELTERY, + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.SUGAR), null, null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL, 4)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CARAMEL_APPLE, "CHRISTMAS_CARAMEL_APPLE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.SUGAR), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 2)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_CHOCOLATE_APPLE, "CHRISTMAS_CHOCOLATE_APPLE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new CustomItem(Material.INK_SACK, 3), null, null, new ItemStack(Material.APPLE), null, null, new ItemStack(Material.STICK), null}, new CustomItem(SlimefunItems.CHRISTMAS_CARAMEL_APPLE, 2)) + .register(true); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.CHRISTMAS_PRESENT, "CHRISTMAS_PRESENT", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {null, new ItemStack(Material.NAME_TAG), null, new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 13), 1), new CustomItem(new MaterialData(Material.WOOL, (byte) 14), 1)}) + .register(true); + + new SlimefunItem(Categories.EASTER, SlimefunItems.EASTER_CARROT_PIE, "EASTER_CARROT_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.CARROT_ITEM), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.EASTER_CARROT_PIE, 2)) + .register(true); + + new SlimefunItem(Categories.EASTER, SlimefunItems.CHRISTMAS_APPLE_PIE, "EASTER_APPLE_PIE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.SUGAR), new ItemStack(Material.APPLE), new ItemStack(Material.EGG), null, null, null, null, null, null}, new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 2)) + .register(true); + + new SlimefunItem(Categories.EASTER, SlimefunItems.EASTER_EGG, "EASTER_EGG", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1), new ItemStack(Material.EGG), new MaterialData(Material.INK_SACK, (byte) 13).toItemStack(1), null, null, null}, new CustomItem(SlimefunItems.EASTER_EGG, 2)) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.EASTER_EGG, true)) { + e.setCancelled(true); + PlayerInventory.consumeItemInHand(e.getPlayer()); + FireworkShow.launchRandom(e.getPlayer(), 2); + + List gifts = new ArrayList(); + for (int i = 0; i < 2; i++) { + gifts.add(new CustomItem(SlimefunItems.EASTER_CARROT_PIE, 4)); + gifts.add(new CustomItem(SlimefunItems.CHRISTMAS_APPLE_PIE, 4)); + gifts.add(new CustomItem(SlimefunItems.CARROT_JUICE, 1)); + } + + gifts.add(new SkullItem("mrCookieSlime")); + gifts.add(new SkullItem("timtower")); + gifts.add(new SkullItem("bwfcwalshy")); + gifts.add(new SkullItem("jadedcat")); + gifts.add(new SkullItem("ZeldoKavira")); + gifts.add(new SkullItem("eyamaz")); + gifts.add(new SkullItem("Kaelten")); + gifts.add(new SkullItem("Myrathi")); + + p.getWorld().dropItemNaturally(p.getLocation(), gifts.get(SlimefunStartup.randomize(gifts.size()))); + return true; + } + else return false; + } + }); + + new SlimefunItem(Categories.MISC, SlimefunItems.REINFORCED_PLATE, "REINFORCED_PLATE", RecipeType.COMPRESSOR, + new ItemStack[] {new CustomItem(SlimefunItems.REINFORCED_ALLOY_INGOT, 8), null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.HARDENED_GLASS, "HARDENED_GLASS", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), SlimefunItems.REINFORCED_PLATE, new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS), new ItemStack(Material.GLASS)}, + new CustomItem(SlimefunItems.HARDENED_GLASS, 16)) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.SOLAR_ARRAY, "SOLAR_ARRAY", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.COOLING_UNIT, "COOLING_UNIT", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.ICE), new ItemStack(Material.ICE), new ItemStack(Material.ICE), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.ICE), new ItemStack(Material.ICE), new ItemStack(Material.ICE)}) + .register(true); + + new SlimefunBackpack(27, Categories.PORTABLE, SlimefunItems.COOLER, "COOLER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.CLOTH, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.COOLING_UNIT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.WITHER_PROOF_OBSIDIAN, "WITHER_PROOF_OBSIDIAN", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.HARDENED_GLASS, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT, new ItemStack(Material.OBSIDIAN), SlimefunItems.LEAD_INGOT}, + new CustomItem(SlimefunItems.WITHER_PROOF_OBSIDIAN, 4)) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.ANCIENT_PEDESTAL, "ANCIENT_PEDESTAL", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN), null, new ItemStack(Material.STONE), null, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}, new CustomItem(SlimefunItems.ANCIENT_PEDESTAL, 4)) + .register(true); + + SlimefunItem.registerBlockHandler("ANCIENT_PEDESTAL", new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + Item stack = AncientAltarListener.findItem(b); + if (stack != null) { + stack.removeMetadata("item_placed", SlimefunStartup.instance); + b.getWorld().dropItem(b.getLocation(), AncientAltarListener.fixItemStack(stack.getItemStack(), stack.getCustomName())); + stack.remove(); + } + return true; + } + }); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.ANCIENT_ALTAR, "ANCIENT_ALTAR", RecipeType.MAGIC_WORKBENCH, + new ItemStack[] {null, new ItemStack(Material.ENCHANTMENT_TABLE), null, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.GOLD_8K, SlimefunItems.MAGIC_LUMP_3, new ItemStack(Material.OBSIDIAN), SlimefunItems.GOLD_8K, new ItemStack(Material.OBSIDIAN)}) + .register(true); + + // Slimefun 4 + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.ENERGY_REGULATOR, "ENERGY_REGULATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.SILVER_INGOT}) + .register(true, new BlockTicker() { + + @Override + public boolean isSynchronized() { + return false; + } + + @Override + public void uniqueTick() { + } + + @Override + public void tick(Block b, SlimefunItem item, Config data) { + EnergyNet.getNetworkFromLocationOrCreate(b.getLocation()).tick(b); + } + }); + + SlimefunItem.registerBlockHandler("ENERGY_REGULATOR", new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + EnergyHologram.remove(b); + return true; + } + }); + + new SlimefunItem(Categories.MISC, SlimefunItems.DUCT_TAPE, "DUCT_TAPE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_DUST, SlimefunItems.ALUMINUM_DUST, new ItemStack(Material.SLIME_BALL), new ItemStack(Material.WOOL), new ItemStack(Material.SLIME_BALL), new ItemStack(Material.PAPER), new ItemStack(Material.PAPER), new ItemStack(Material.PAPER)}, new CustomItem(SlimefunItems.DUCT_TAPE, 2)) + .register(true); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SMALL_CAPACITOR, "SMALL_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.DURALUMIN_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.DURALUMIN_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.SULFATE, new ItemStack(Material.REDSTONE), SlimefunItems.DURALUMIN_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.DURALUMIN_INGOT}) + .registerDistibutingCapacitor(true, 128); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.MEDIUM_CAPACITOR, "MEDIUM_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.BILLON_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.BILLON_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.SMALL_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.BILLON_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.BILLON_INGOT}) + .registerDistibutingCapacitor(true, 512); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.BIG_CAPACITOR, "BIG_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.STEEL_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.MEDIUM_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.STEEL_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.STEEL_INGOT}) + .registerDistibutingCapacitor(true, 1024); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.LARGE_CAPACITOR, "LARGE_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.BIG_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.REINFORCED_ALLOY_INGOT}) + .registerDistibutingCapacitor(true, 8192); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.CARBONADO_EDGED_CAPACITOR, "CARBONADO_EDGED_CAPACITOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.CARBONADO, new ItemStack(Material.REDSTONE), SlimefunItems.LARGE_CAPACITOR, new ItemStack(Material.REDSTONE), SlimefunItems.CARBONADO, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.CARBONADO}) + .registerDistibutingCapacitor(true, 65536); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR, "SOLAR_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_PANEL, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_INGOT, null, SlimefunItems.ALUMINUM_INGOT, null}) + .register(true, new EnergyTicker() { + + @Override + public double generateEnergy(Location l, SlimefunItem item, Config data) { + if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; + if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 2D; + return 0D; + } + + @Override + public boolean explode(Location l) { + return false; + } + }); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR_2, "SOLAR_GENERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, new ItemStack(Material.REDSTONE), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR}) + .register(true, new EnergyTicker() { + + @Override + public double generateEnergy(Location l, SlimefunItem item, Config data) { + if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; + if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 8; + return 0D; + } + + @Override + public boolean explode(Location l) { + return false; + } + }); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR_3, "SOLAR_GENERATOR_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.CARBONADO, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.SOLAR_GENERATOR_2}) + .register(true, new EnergyTicker() { + + @Override + public double generateEnergy(Location l, SlimefunItem item, Config data) { + if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; + if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 32; + return 0D; + } + + @Override + public boolean explode(Location l) { + return false; + } + }); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.SOLAR_GENERATOR_4, "SOLAR_GENERATOR_4", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.SOLAR_GENERATOR_3}) + .register(true, new EnergyTicker() { + + @Override + public double generateEnergy(Location l, SlimefunItem item, Config data) { + if (!l.getWorld().isChunkLoaded(l.getBlockX() >> 4, l.getBlockZ() >> 4) || l.getBlock().getLightFromSky() != 15) return 0D; + if (l.getWorld().getTime() < 12300 || l.getWorld().getTime() > 23850) return 128; + return 64D; + } + + @Override + public boolean explode(Location l) { + return false; + } + }); + + new ChargingBench(Categories.ELECTRICITY, SlimefunItems.CHARGING_BENCH, "CHARGING_BENCH", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.BATTERY, new ItemStack(Material.WORKBENCH), SlimefunItems.BATTERY, null, SlimefunItems.SMALL_CAPACITOR, null}) + .registerChargeableBlock(true, 128); + + new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE, "ELECTRIC_FURNACE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.FURNACE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&bElectric Furnace"; + } + + @Override + public int getEnergyConsumption() { + return 2; + } + + @Override + public int getSpeed() { + return 1; + } + + }.registerChargeableBlock(true, 64); + + new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE_2, "ELECTRIC_FURNACE_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_FURNACE, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&bElectric Furnace"; + } + + @Override + public int getEnergyConsumption() { + return 3; + } + + @Override + public int getSpeed() { + return 2; + } + + }.registerChargeableBlock(true, 128); + + new ElectricFurnace(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_FURNACE_3, "ELECTRIC_FURNACE_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_FURNACE_2, SlimefunItems.STEEL_INGOT, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&bElectric Furnace"; + } + + @Override + public int getEnergyConsumption() { + return 5; + } + + @Override + public int getSpeed() { + return 4; + } + + }.registerChargeableBlock(true, 128); + + new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN, "ELECTRIC_GOLD_PAN", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, new ItemStack(Material.FLINT), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.FLINT), SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ALUMINUM_INGOT}) { + + @Override + public int getEnergyConsumption() { + return 1; + } + + @Override + public int getSpeed() { + return 1; + } + }.registerChargeableBlock(true, 128); + + new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN_2, "ELECTRIC_GOLD_PAN_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, new ItemStack(Material.IRON_INGOT), SlimefunItems.ELECTRIC_GOLD_PAN, new ItemStack(Material.IRON_INGOT), SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.DURALUMIN_INGOT}) { + + @Override + public int getEnergyConsumption() { + return 2; + } + + @Override + public int getSpeed() { + return 3; + } + }.registerChargeableBlock(true, 128); + + new ElectricGoldPan(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_GOLD_PAN_3, "ELECTRIC_GOLD_PAN_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GOLD_PAN, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRIC_GOLD_PAN_2, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COBALT_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.COBALT_INGOT}) { + + @Override + public int getEnergyConsumption() { + return 7; + } + + @Override + public int getSpeed() { + return 10; + } + }.registerChargeableBlock(true, 512); + + new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER, "ELECTRIC_DUST_WASHER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_GOLD_PAN, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT, SlimefunItems.COPPER_INGOT}) { + + @Override + public int getEnergyConsumption() { + return 3; + } + + @Override + public int getSpeed() { + return 1; + } + }.registerChargeableBlock(true, 128); + + new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER_2, "ELECTRIC_DUST_WASHER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT}) { + + @Override + public int getEnergyConsumption() { + return 5; + } + + @Override + public int getSpeed() { + return 2; + } + }.registerChargeableBlock(true, 128); + + new ElectricDustWasher(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_DUST_WASHER_3, "ELECTRIC_DUST_WASHER_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.WATER_BUCKET), null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_DUST_WASHER_2, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CORINTHIAN_BRONZE_INGOT}) { + + @Override + public int getEnergyConsumption() { + return 15; + } + + @Override + public int getSpeed() { + return 10; + } + }.registerChargeableBlock(true, 512); + + new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY, "ELECTRIC_INGOT_FACTORY", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.FLINT_AND_STEEL), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&cElectric Ingot Factory"; + } + + @Override + public int getEnergyConsumption() { + return 4; + } + + @Override + public int getSpeed() { + return 1; + } + + }.registerChargeableBlock(true, 256); + + new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, "ELECTRIC_INGOT_FACTORY_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.BRASS_INGOT}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&cElectric Ingot Factory"; + } + + @Override + public int getEnergyConsumption() { + return 7; + } + + @Override + public int getSpeed() { + return 2; + } + + }.registerChargeableBlock(true, 256); + + new ElectricIngotFactory(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_FACTORY_3, "ELECTRIC_INGOT_FACTORY_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.GILDED_IRON, new ItemStack(Material.FLINT_AND_STEEL), SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY_2, SlimefunItems.HEATING_COIL, SlimefunItems.BRASS_INGOT, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.BRASS_INGOT}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&cElectric Ingot Factory"; + } + + @Override + public int getEnergyConsumption() { + return 20; + } + + @Override + public int getSpeed() { + return 8; + } + + }.registerChargeableBlock(true, 512); + + new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE, "ELECTRIFIED_CRUCIBLE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.CRUCIBLE, SlimefunItems.LEAD_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.LARGE_CAPACITOR, SlimefunItems.LEAD_INGOT}) { + + @Override + public int getEnergyConsumption() { + return 24; + } + + @Override + public int getSpeed() { + return 1; + } + + }.registerChargeableBlock(true, 1024); + + new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE_2, "ELECTRIFIED_CRUCIBLE_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.ELECTRIFIED_CRUCIBLE, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) { + + @Override + public int getEnergyConsumption() { + return 40; + } + + @Override + public int getSpeed() { + return 2; + } + + }.registerChargeableBlock(true, 1024); + + new ElectrifiedCrucible(Categories.ELECTRICITY, SlimefunItems.ELECTRIFIED_CRUCIBLE_3, "ELECTRIFIED_CRUCIBLE_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.ELECTRIFIED_CRUCIBLE_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.STEEL_PLATE, SlimefunItems.POWER_CRYSTAL, SlimefunItems.STEEL_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT}) { + + @Override + public int getEnergyConsumption() { + return 60; + } + + @Override + public int getSpeed() { + return 4; + } + + }.registerChargeableBlock(true, 1024); + + new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER, "ELECTRIC_ORE_GRINDER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.GILDED_IRON, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { + + @Override + public void registerDefaultRecipes() { + } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.STONE_PICKAXE); + } + + @Override + public String getInventoryTitle() { + return "&bElectric Ore Grinder"; + } + + @Override + public int getEnergyConsumption() { + return 6; + } + + @Override + public int getSpeed() { + return 1; + } + + @Override + public String getMachineIdentifier() { + return "ELECTRIC_ORE_GRINDER"; + } + + }.registerChargeableBlock(true, 128); + + new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_ORE_GRINDER_2, "ELECTRIC_ORE_GRINDER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_ORE_GRINDER, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GILDED_IRON}) { + + @Override + public void registerDefaultRecipes() { + } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.DIAMOND_PICKAXE); + } + + @Override + public String getInventoryTitle() { + return "&bElectric Ore Grinder"; + } + + @Override + public int getEnergyConsumption() { + return 15; + } + + @Override + public int getSpeed() { + return 4; + } + + @Override + public String getMachineIdentifier() { + return "ELECTRIC_ORE_GRINDER"; + } + + }.registerChargeableBlock(true, 512); + + new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER, "HEATED_PRESSURE_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, new ItemStack(Material.GLASS), SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public int getEnergyConsumption() { + return 5; + } + + @Override + public int getSpeed() { + return 1; + } + + }.registerChargeableBlock(true, 128); + + new HeatedPressureChamber(Categories.ELECTRICITY, SlimefunItems.HEATED_PRESSURE_CHAMBER_2, "HEATED_PRESSURE_CHAMBER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.REINFORCED_ALLOY_INGOT}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public int getEnergyConsumption() { + return 22; + } + + @Override + public int getSpeed() { + return 5; + } + + }.registerChargeableBlock(true, 256); + + new AContainer(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_INGOT_PULVERIZER, "ELECTRIC_INGOT_PULVERIZER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.ELECTRIC_ORE_GRINDER, null, SlimefunItems.LEAD_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.LEAD_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.LEAD_INGOT}){ + @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 int getEnergyConsumption() { + return 7; + } + + @Override + public int getSpeed() { + return 1; + } + + @Override + public String getMachineIdentifier() { + return "ELECTRIC_INGOT_PULVERIZER"; + } + }.registerChargeableBlock(true, 512); + + new AGenerator(Categories.ELECTRICITY, SlimefunItems.COAL_GENERATOR, "COAL_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.HEATING_COIL, new ItemStack(Material.FURNACE), SlimefunItems.HEATING_COIL, SlimefunItems.NICKEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.NICKEL_INGOT, null, SlimefunItems.NICKEL_INGOT, null}) { + + @Override + public void registerDefaultRecipes() { + registerFuel(new MachineFuel(8, new MaterialData(Material.COAL, (byte) 0).toItemStack(1))); + registerFuel(new MachineFuel(8, new MaterialData(Material.COAL, (byte) 1).toItemStack(1))); + registerFuel(new MachineFuel(80, new ItemStack(Material.COAL_BLOCK))); + registerFuel(new MachineFuel(12, new ItemStack(Material.BLAZE_ROD))); + + // Logs + registerFuel(new MachineFuel(1, new MaterialData(Material.LOG, (byte) 0).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.LOG, (byte) 1).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.LOG, (byte) 2).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.LOG, (byte) 3).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.LOG_2, (byte) 0).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.LOG_2, (byte) 1).toItemStack(1))); + + // Wooden Planks + registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 0).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 1).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 2).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 3).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 4).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.WOOD, (byte) 5).toItemStack(1))); + } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&cCoal Generator"; + } + + @Override + public int getEnergyProduction() { + return 8; + } + + }.registerUnrechargeableBlock(true, 64); + + new AGenerator(Categories.ELECTRICITY, SlimefunItems.BIO_REACTOR, "BIO_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.HEATING_COIL, SlimefunItems.COMPOSTER, SlimefunItems.HEATING_COIL, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}) { + + @Override + public void registerDefaultRecipes() { + registerFuel(new MachineFuel(2, new ItemStack(Material.ROTTEN_FLESH))); + registerFuel(new MachineFuel(2, new ItemStack(Material.SPIDER_EYE))); + registerFuel(new MachineFuel(2, new ItemStack(Material.BONE))); + registerFuel(new MachineFuel(3, new ItemStack(Material.APPLE))); + registerFuel(new MachineFuel(3, new ItemStack(Material.MELON))); + registerFuel(new MachineFuel(27, new ItemStack(Material.MELON_BLOCK))); + registerFuel(new MachineFuel(3, new ItemStack(Material.PUMPKIN))); + registerFuel(new MachineFuel(3, new ItemStack(Material.PUMPKIN_SEEDS))); + registerFuel(new MachineFuel(3, new ItemStack(Material.MELON_SEEDS))); + registerFuel(new MachineFuel(3, new ItemStack(Material.WHEAT))); + registerFuel(new MachineFuel(3, new ItemStack(Material.SEEDS))); + registerFuel(new MachineFuel(3, new ItemStack(Material.CARROT_ITEM))); + registerFuel(new MachineFuel(3, new ItemStack(Material.POTATO_ITEM))); + registerFuel(new MachineFuel(3, new ItemStack(Material.SUGAR_CANE))); + registerFuel(new MachineFuel(3, new ItemStack(Material.NETHER_STALK))); + registerFuel(new MachineFuel(2, new ItemStack(Material.YELLOW_FLOWER))); + registerFuel(new MachineFuel(2, new ItemStack(Material.RED_ROSE))); + registerFuel(new MachineFuel(2, new ItemStack(Material.RED_MUSHROOM))); + registerFuel(new MachineFuel(2, new ItemStack(Material.BROWN_MUSHROOM))); + registerFuel(new MachineFuel(2, new ItemStack(Material.VINE))); + registerFuel(new MachineFuel(2, new ItemStack(Material.CACTUS))); + registerFuel(new MachineFuel(2, new ItemStack(Material.WATER_LILY))); + + // Leaves + registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES, (byte) 0).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES, (byte) 1).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES, (byte) 2).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES, (byte) 3).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES_2, (byte) 0).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.LEAVES_2, (byte) 1).toItemStack(1))); + + // Saplings + registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 0).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 1).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 2).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 3).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 4).toItemStack(1))); + registerFuel(new MachineFuel(1, new MaterialData(Material.SAPLING, (byte) 5).toItemStack(1))); + } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.GOLD_HOE); + } + + @Override + public String getInventoryTitle() { + return "&2Bio Reactor"; + } + + @Override + public int getEnergyProduction() { + return 4; + } + + }.registerUnrechargeableBlock(true, 128); + + new AutoEnchanter(Categories.ELECTRICITY, SlimefunItems.AUTO_ENCHANTER, "AUTO_ENCHANTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.ENCHANTMENT_TABLE), null, SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN}) + .registerChargeableBlock(true, 128); + + new AutoDisenchanter(Categories.ELECTRICITY, SlimefunItems.AUTO_DISENCHANTER, "AUTO_DISENCHANTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.REDSTONE), new ItemStack(Material.ANVIL), new ItemStack(Material.REDSTONE), SlimefunItems.CARBONADO, SlimefunItems.AUTO_ENCHANTER, SlimefunItems.CARBONADO, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.WITHER_PROOF_OBSIDIAN}) + .registerChargeableBlock(true, 128); + + new AutoAnvil(Categories.ELECTRICITY, SlimefunItems.AUTO_ANVIL, "AUTO_ANVIL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.ANVIL), null, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK)}) { + + @Override + public int getRepairFactor() { + return 10; + } + + @Override + public int getEnergyConsumption() { + return 12; + } + + }.registerChargeableBlock(true, 128); + + new AutoAnvil(Categories.ELECTRICITY, SlimefunItems.AUTO_ANVIL_2, "AUTO_ANVIL_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.AUTO_ANVIL, null, SlimefunItems.STEEL_PLATE, SlimefunItems.HEATING_COIL, SlimefunItems.STEEL_PLATE, new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK), new ItemStack(Material.IRON_BLOCK)}) { + + @Override + public int getRepairFactor() { + return 4; + } + + @Override + public int getEnergyConsumption() { + return 16; + } + + }.registerChargeableBlock(true, 256); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.MULTIMETER, "MULTIMETER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.COPPER_INGOT, null, SlimefunItems.COPPER_INGOT, null, SlimefunItems.REDSTONE_ALLOY, null, null, SlimefunItems.GOLD_6K, null}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(e.getItem(), SlimefunItems.MULTIMETER, true)) { + if (e.getClickedBlock() != null && ChargableBlock.isChargable(e.getClickedBlock())) { + e.setCancelled(true); + p.sendMessage(""); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bStored Energy: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getCharge(e.getClickedBlock())) + " J")); + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bCapacity: &3" + DoubleHandler.getFancyDouble(ChargableBlock.getMaxCharge(e.getClickedBlock())) + " J")); + p.sendMessage(""); + } + return true; + } + return false; + } + }); + + new SlimefunItem(Categories.MISC, SlimefunItems.PLASTIC_SHEET, "PLASTIC_SHEET", RecipeType.HEATED_PRESSURE_CHAMBER, + new ItemStack[] {null, null, null, null, SlimefunItems.BUCKET_OF_OIL, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.ANDROID_MEMORY_CORE, "ANDROID_MEMORY_CORE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.BRASS_INGOT, new MaterialData(Material.STAINED_GLASS, (byte) 1).toItemStack(1), SlimefunItems.BRASS_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.TIN_DUST, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BRASS_INGOT, new MaterialData(Material.STAINED_GLASS, (byte) 1).toItemStack(1), SlimefunItems.BRASS_INGOT}) + .register(true); + + new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER, "GPS_TRANSMITTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.STEEL_INGOT, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT}) + .registerChargeableBlock(true, 16, new BlockTicker() { + + @Override + public void tick(Block b, SlimefunItem item, Config data) { + int charge = ChargableBlock.getCharge(b); + if (charge > 0) { + Slimefun.getGPSNetwork().updateTransmitter(b, UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.ONLINE); + ChargableBlock.setCharge(b, charge - 1); + } + else Slimefun.getGPSNetwork().updateTransmitter(b, UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); + } + + @Override + public void uniqueTick() { + } + + @Override + public boolean isSynchronized() { + return false; + } + }); + + SlimefunItem.registerBlockHandler("GPS_TRANSMITTER", new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + Slimefun.getGPSNetwork().updateTransmitter(b, UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); + return true; + } + }); + + new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_2, "GPS_TRANSMITTER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.CARBON, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER, SlimefunItems.BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER}) + .registerChargeableBlock(true, 64, new BlockTicker() { + + @Override + public void tick(Block b, SlimefunItem item, Config data) { + int charge = ChargableBlock.getCharge(b); + if (charge > 2) { + Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 4 + 100, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.ONLINE); + ChargableBlock.setCharge(b, charge - 3); + } + else { + Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 4 + 100, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); + } + } + + @Override + public void uniqueTick() { + } + + @Override + public boolean isSynchronized() { + return false; + } + }); + + SlimefunItem.registerBlockHandler("GPS_TRANSMITTER_2", new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 4 + 100, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); + return true; + } + }); + + new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_3, "GPS_TRANSMITTER_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.CARBONADO, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.GPS_TRANSMITTER_2}) + .registerChargeableBlock(true, 256, new BlockTicker() { + + @Override + public void tick(Block b, SlimefunItem item, Config data) { + int charge = ChargableBlock.getCharge(b); + if (charge > 10) { + Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 16 + 500, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.ONLINE); + ChargableBlock.setCharge(b, charge - 11); + } + else { + Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 16 + 500, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); + } + } + + @Override + public void uniqueTick() { + } + + @Override + public boolean isSynchronized() { + return false; + } + }); + + SlimefunItem.registerBlockHandler("GPS_TRANSMITTER_3", new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 16 + 500, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); + return true; + } + }); + + new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TRANSMITTER_4, "GPS_TRANSMITTER_4", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.NICKEL_INGOT, SlimefunItems.CARBONADO, SlimefunItems.NICKEL_INGOT, SlimefunItems.GPS_TRANSMITTER_3, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.GPS_TRANSMITTER_3}) + .registerChargeableBlock(true, 1024, new BlockTicker() { + + @Override + public void tick(Block b, SlimefunItem item, Config data) { + int charge = ChargableBlock.getCharge(b); + if (charge > 45) { + Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 64 + 800, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.ONLINE); + ChargableBlock.setCharge(b, charge - 46); + } + else { + Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 64 + 800, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); + } + } + + @Override + public void uniqueTick() { + } + + @Override + public boolean isSynchronized() { + return false; + } + }); + + SlimefunItem.registerBlockHandler("GPS_TRANSMITTER_4", new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + Slimefun.getGPSNetwork().updateTransmitter(new Location(b.getWorld(), b.getX(), b.getY() * 64 + 800, b.getZ()).getBlock(), UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), NetworkStatus.OFFLINE); + return true; + } + }); + + new SlimefunItem(Categories.GPS, SlimefunItems.GPS_CONTROL_PANEL, "GPS_CONTROL_PANEL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COBALT_INGOT, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.COBALT_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { + if (e.getClickedBlock() == null) return false; + SlimefunItem item = BlockStorage.check(e.getClickedBlock()); + if (item == null || !item.getName().equals("GPS_CONTROL_PANEL")) return false; + e.setCancelled(true); + try { + Slimefun.getGPSNetwork().openTransmitterControlPanel(p); + } catch (Exception e1) { + e1.printStackTrace(); + } + return true; + } + }); + + new SlimefunItem(Categories.GPS, SlimefunItems.GPS_MARKER_TOOL, "GPS_MARKER_TOOL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), SlimefunItems.BASIC_CIRCUIT_BOARD, new MaterialData(Material.INK_SACK, (byte) 4).toItemStack(1), new ItemStack(Material.REDSTONE), SlimefunItems.REDSTONE_ALLOY, new ItemStack(Material.REDSTONE)}) + .register(true); + + new SlimefunItem(Categories.GPS, SlimefunItems.GPS_EMERGENCY_TRANSMITTER, "GPS_EMERGENCY_TRANSMITTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.ELECTRO_MAGNET, null, null, SlimefunItems.GPS_TRANSMITTER, null, null, SlimefunItems.ESSENCE_OF_AFTERLIFE, null}) + .register(true); + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID, "PROGRAMMABLE_ANDROID", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COAL_GENERATOR, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.NONE; + } + + @Override + public float getFuelEfficiency() { + return 1; + } + + @Override + public int getTier() { + return 1; + } + + } + .register(true); + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_MINER, "PROGRAMMABLE_ANDROID_MINER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_PICKAXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_PICKAXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.MINER; + } + + @Override + public float getFuelEfficiency() { + return 1; + } + + @Override + public int getTier() { + return 1; + } + + } + .register(true); + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, "PROGRAMMABLE_ANDROID_FARMER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.FARMER; + } + + @Override + public float getFuelEfficiency() { + return 1; + } + + @Override + public int getTier() { + return 1; + } + + } + .register(true); + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER, "PROGRAMMABLE_ANDROID_WOODCUTTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.DIAMOND_AXE), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_AXE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.WOODCUTTER; + } + + @Override + public float getFuelEfficiency() { + return 1; + } + + @Override + public int getTier() { + return 1; + } + + } + .register(true); + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, "PROGRAMMABLE_ANDROID_FISHERMAN", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.FISHERMAN; + } + + @Override + public float getFuelEfficiency() { + return 1; + } + + @Override + public int getTier() { + return 1; + } + + } + .register(true); + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, "PROGRAMMABLE_ANDROID_BUTCHER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.FIGHTER; + } + + @Override + public float getFuelEfficiency() { + return 1; + } + + @Override + public int getTier() { + return 1; + } + + } + .register(true); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.ANDROID_INTERFACE_ITEMS, "ANDROID_INTERFACE_ITEMS", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.BASIC_CIRCUIT_BOARD, new MaterialData(Material.STAINED_GLASS, (byte) 11).toItemStack(1), SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) + .register(true); + + new SlimefunItem(Categories.ELECTRICITY, SlimefunItems.ANDROID_INTERFACE_FUEL, "ANDROID_INTERFACE_FUEL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, new MaterialData(Material.STAINED_GLASS, (byte) 14).toItemStack(1), SlimefunItems.BASIC_CIRCUIT_BOARD, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET, SlimefunItems.PLASTIC_SHEET}) + .register(true); + + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2, "PROGRAMMABLE_ANDROID_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.COMBUSTION_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID, new ItemStack(Material.CHEST), SlimefunItems.PLASTIC_SHEET, SlimefunItems.POWER_CRYSTAL, SlimefunItems.PLASTIC_SHEET}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.NONE; + } + + @Override + public float getFuelEfficiency() { + return 1.5F; + } + + @Override + public int getTier() { + return 2; + } + + } + .register(true); + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN, "PROGRAMMABLE_ANDROID_2_FISHERMAN", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.FISHERMAN; + } + + @Override + public float getFuelEfficiency() { + return 1.5F; + } + + @Override + public int getTier() { + return 2; + } + + } + .register(true); + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER, "PROGRAMMABLE_ANDROID_2_BUTCHER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.FIGHTER; + } + + @Override + public float getFuelEfficiency() { + return 1.5F; + } + + @Override + public int getTier() { + return 2; + } + + } + .register(true); + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER, "PROGRAMMABLE_ANDROID_2_FARMER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER, null, new ItemStack(Material.DIAMOND_HOE), SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.DIAMOND_HOE), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.ADVANCED_FARMER; + } + + @Override + public float getFuelEfficiency() { + return 1.5F; + } + + @Override + public int getTier() { + return 2; + } + + } + .register(true); + + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_3, "PROGRAMMABLE_ANDROID_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.PLASTIC_SHEET, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.PLASTIC_SHEET, SlimefunItems.NUCLEAR_REACTOR, SlimefunItems.PROGRAMMABLE_ANDROID_2, new ItemStack(Material.CHEST), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.POWER_CRYSTAL, SlimefunItems.BLISTERING_INGOT_3}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.NONE; + } + + @Override + public float getFuelEfficiency() { + return 1F; + } + + @Override + public int getTier() { + return 3; + } + + } + .register(true); + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN, "PROGRAMMABLE_ANDROID_3_FISHERMAN", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, null, new ItemStack(Material.FISHING_ROD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.FISHING_ROD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.FISHERMAN; + } + + @Override + public float getFuelEfficiency() { + return 1F; + } + + @Override + public int getTier() { + return 3; + } + + } + .register(true); + + new ProgrammableAndroid(Categories.ELECTRICITY, SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER, "PROGRAMMABLE_ANDROID_3_BUTCHER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GPS_TRANSMITTER_3, null, new ItemStack(Material.DIAMOND_SWORD), SlimefunItems.PROGRAMMABLE_ANDROID_3, new ItemStack(Material.DIAMOND_SWORD), null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public AndroidType getAndroidType() { + return AndroidType.FIGHTER; + } + + @Override + public float getFuelEfficiency() { + return 1F; + } + + @Override + public int getTier() { + return 3; + } + + } + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.BLANK_RUNE, "BLANK_RUNE", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.OBSIDIAN), SlimefunItems.MAGIC_LUMP_1,new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE)}) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_AIR, "ANCIENT_RUNE_AIR", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.FEATHER), new ItemStack(Material.GHAST_TEAR), SlimefunItems.BLANK_RUNE, new ItemStack(Material.GHAST_TEAR) ,new ItemStack(Material.FEATHER), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.FEATHER)}, new CustomItem(SlimefunItems.RUNE_AIR, 4)) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_EARTH, "ANCIENT_RUNE_EARTH", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.DIRT), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.STONE), new ItemStack(Material.OBSIDIAN), SlimefunItems.BLANK_RUNE, new ItemStack(Material.OBSIDIAN) ,new ItemStack(Material.STONE), SlimefunItems.MAGIC_LUMP_1, new ItemStack(Material.DIRT)}, new CustomItem(SlimefunItems.RUNE_EARTH, 4)) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_FIRE, "ANCIENT_RUNE_FIRE", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.FIREBALL), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.FIREBALL), new ItemStack(Material.BLAZE_POWDER), SlimefunItems.RUNE_EARTH, new ItemStack(Material.FLINT_AND_STEEL) ,new ItemStack(Material.FIREBALL), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.FIREBALL)}, new CustomItem(SlimefunItems.RUNE_FIRE, 4)) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_WATER, "ANCIENT_RUNE_WATER", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.RAW_FISH), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.WATER_BUCKET), new ItemStack(Material.SAND), SlimefunItems.BLANK_RUNE, new ItemStack(Material.SAND) ,new ItemStack(Material.WATER_BUCKET), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.RAW_FISH)}, new CustomItem(SlimefunItems.RUNE_WATER, 4)) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_ENDER, "ANCIENT_RUNE_ENDER", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENDER_PEARL), new ItemStack(Material.EYE_OF_ENDER), SlimefunItems.BLANK_RUNE, new ItemStack(Material.EYE_OF_ENDER) ,new ItemStack(Material.ENDER_PEARL), SlimefunItems.ENDER_LUMP_3, new ItemStack(Material.ENDER_PEARL)}, new CustomItem(SlimefunItems.RUNE_ENDER, 6)) + .register(true); + + new SlimefunItem(Categories.LUMPS_AND_MAGIC, SlimefunItems.RUNE_RAINBOW, "ANCIENT_RUNE_RAINBOW", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.MAGIC_LUMP_3, new MaterialData(Material.INK_SACK, (byte) 9).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_ENDER, new ItemStack(Material.WOOL) , new MaterialData(Material.INK_SACK, (byte) 11).toItemStack(1), SlimefunItems.ENDER_LUMP_3, new MaterialData(Material.INK_SACK, (byte) 10).toItemStack(1)}) + .register(true); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.INFERNAL_BONEMEAL, "INFERNAL_BONEMEAL", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.NETHER_STALK), SlimefunItems.RUNE_EARTH, new ItemStack(Material.NETHER_STALK), SlimefunItems.MAGIC_LUMP_2, new MaterialData(Material.INK_SACK, (byte) 15).toItemStack(1), SlimefunItems.MAGIC_LUMP_2, new ItemStack(Material.NETHER_STALK), new ItemStack(Material.BLAZE_POWDER), new ItemStack(Material.NETHER_STALK)}, new CustomItem(SlimefunItems.INFERNAL_BONEMEAL, 8)) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { + if (SlimefunManager.isItemSimiliar(e.getItem(), SlimefunItems.INFERNAL_BONEMEAL, true)) { + if (e.getClickedBlock() != null && e.getClickedBlock().getType().equals(Material.NETHER_WARTS)) { + if (e.getClickedBlock().getData() < 3) { + e.getClickedBlock().setData((byte) (e.getClickedBlock().getData() + 1)); + e.getClickedBlock().getWorld().playEffect(e.getClickedBlock().getLocation(), Effect.STEP_SOUND, Material.REDSTONE_BLOCK); + PlayerInventory.consumeItemInHand(p); + } + } + return true; + } + return false; + } + }); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.ELYTRA_SCALE, "ELYTRA_SCALE", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_ENDER, new ItemStack(Material.FEATHER), SlimefunItems.RUNE_ENDER, SlimefunItems.ENDER_LUMP_3, SlimefunItems.RUNE_AIR, SlimefunItems.ENDER_LUMP_3}) + .register(true); + + new VanillaItem(Categories.MAGIC, SlimefunItems.ELYTRA, "ELYTRA", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, new ItemStack(Material.LEATHER_CHESTPLATE), SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE, SlimefunItems.RUNE_AIR, SlimefunItems.ELYTRA_SCALE}) + .register(true); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.INFUSED_ELYTRA, "INFUSED_ELYTRA", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE}) + .register(true); + + new SoulboundItem(Categories.MAGIC, SlimefunItems.SOULBOUND_ELYTRA, "SOULBOUND_ELYTRA", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ELYTRA_SCALE, SlimefunItems.ELYTRA, SlimefunItems.ELYTRA_SCALE, SlimefunItems.FLASK_OF_KNOWLEDGE, SlimefunItems.ESSENCE_OF_AFTERLIFE, SlimefunItems.FLASK_OF_KNOWLEDGE}) + .register(true); + + RainbowTicker rainbow = new RainbowTicker(); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_WOOL, "RAINBOW_WOOL", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL), new ItemStack(Material.WOOL)}, new CustomItem(SlimefunItems.RAINBOW_WOOL, 8)) + .register(true, rainbow); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_GLASS, "RAINBOW_GLASS", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS), new ItemStack(Material.STAINED_GLASS)}, new CustomItem(SlimefunItems.RAINBOW_GLASS, 8)) + .register(true, rainbow); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_GLASS_PANE, "RAINBOW_GLASS_PANE", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE), new ItemStack(Material.STAINED_GLASS_PANE)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE, 8)) + .register(true, rainbow); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.RAINBOW_CLAY, "RAINBOW_CLAY", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY), new ItemStack(Material.STAINED_CLAY)}, new CustomItem(SlimefunItems.RAINBOW_CLAY, 8)) + .register(true, rainbow); + + RainbowTicker xmas = new RainbowTicker(13, 14); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_WOOL_XMAS, "RAINBOW_WOOL_XMAS", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_WOOL_XMAS, 2)) + .register(true, xmas); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_GLASS_XMAS, "RAINBOW_GLASS_XMAS", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_XMAS, 2)) + .register(true, xmas); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_GLASS_PANE_XMAS, "RAINBOW_GLASS_PANE_XMAS", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE_XMAS, 2)) + .register(true, xmas); + + new SlimefunItem(Categories.CHRISTMAS, SlimefunItems.RAINBOW_CLAY_XMAS, "RAINBOW_CLAY_XMAS", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), SlimefunItems.CHRISTMAS_COOKIE, new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_CLAY_XMAS, 2)) + .register(true, xmas); + + RainbowTicker valentine = new RainbowTicker(2, 6, 10); + + new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_WOOL_VALENTINE, "RAINBOW_WOOL_VALENTINE", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.WOOL), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.WOOL), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_WOOL_VALENTINE, 2)) + .register(true, valentine); + + new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_GLASS_VALENTINE, "RAINBOW_GLASS_VALENTINE", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_VALENTINE, 2)) + .register(true, valentine); + + new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_GLASS_PANE_VALENTINE, "RAINBOW_GLASS_PANE_VALENTINE", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_GLASS_PANE), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_GLASS_PANE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_GLASS_PANE_VALENTINE, 2)) + .register(true, valentine); + + new SlimefunItem(Categories.VALENTINES_DAY, SlimefunItems.RAINBOW_CLAY_VALENTINE, "RAINBOW_CLAY_VALENTINE", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.STAINED_CLAY), SlimefunItems.RUNE_RAINBOW, new ItemStack(Material.STAINED_CLAY), new MaterialData(Material.INK_SACK, (byte) 2).toItemStack(1), new ItemStack(Material.RED_ROSE), new MaterialData(Material.INK_SACK, (byte) 1).toItemStack(1)}, new CustomItem(SlimefunItems.RAINBOW_CLAY_VALENTINE, 2)) + .register(true, valentine); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.WITHER_PROOF_GLASS, "WITHER_PROOF_GLASS", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.HARDENED_GLASS, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.LEAD_INGOT}, + new CustomItem(SlimefunItems.WITHER_PROOF_GLASS, 4)) + .register(true); + + + new SlimefunItem(Categories.GPS, SlimefunItems.GPS_GEO_SCANNER, "GPS_GEO_SCANNER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, null, SlimefunItems.ELECTRO_MAGNET, null, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET}) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { + if (e.getClickedBlock() == null) return false; + SlimefunItem item = BlockStorage.check(e.getClickedBlock()); + if (item == null || !item.getName().equals("GPS_GEO_SCANNER")) return false; + e.setCancelled(true); + try { + Slimefun.getGPSNetwork().scanChunk(p, e.getClickedBlock().getChunk()); + } catch (Exception e1) { + e1.printStackTrace(); + } + return true; + } + }); + + new OilPump(Categories.GPS, SlimefunItems.OIL_PUMP, "OIL_PUMP", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.STEEL_INGOT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.STEEL_INGOT, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, null, new ItemStack(Material.BUCKET), null}) { + + @Override + public int getEnergyConsumption() { + return 14; + } + + @Override + public int getSpeed() { + return 1; + }; + + }.registerChargeableBlock(true, 200); + + new NetherDrill(Categories.GPS, SlimefunItems.NETHER_DRILL, "NETHER_DRILL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[]{SlimefunItems.LEAD_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.OIL_PUMP, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.BIG_CAPACITOR, SlimefunItems.LEAD_INGOT}){ + @Override + public int getSpeed() { + return 1; + } + + @Override + public int getEnergyConsumption() { + return 51; + } + }.registerChargeableBlock(true, 1024); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.BUCKET_OF_OIL, "BUCKET_OF_OIL", new RecipeType(SlimefunItems.OIL_PUMP), + new ItemStack[] {null, null, null, null, new ItemStack(Material.BUCKET), null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.BUCKET_OF_FUEL, "BUCKET_OF_FUEL", new RecipeType(SlimefunItems.REFINERY), + new ItemStack[] {null, null, null, null, SlimefunItems.BUCKET_OF_OIL, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.NETHER_ICE, "NETHER_ICE", new RecipeType(SlimefunItems.NETHER_DRILL), + new ItemStack[] {null, null, null, null, null, null, null, null}) + .register(true); + + new Refinery(Categories.ELECTRICITY, SlimefunItems.REFINERY, "REFINERY", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.HARDENED_GLASS, SlimefunItems.HARDENED_GLASS, SlimefunItems.REDSTONE_ALLOY, SlimefunItems.HARDENED_GLASS, new ItemStack(Material.PISTON_BASE), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PISTON_BASE)}) { + + @Override + public int getEnergyConsumption() { + return 16; + } + + @Override + public int getSpeed() { + return 1; + }; + + }.registerChargeableBlock(true, 256); + + new AGenerator(Categories.ELECTRICITY, SlimefunItems.LAVA_GENERATOR, "LAVA_GENERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.GOLD_16K, null, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL}) { + + @Override + public void registerDefaultRecipes() { + registerFuel(new MachineFuel(40, new ItemStack(Material.LAVA_BUCKET))); + } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&4Lava Generator"; + } + + @Override + public int getEnergyProduction() { + return 10; + } + + }.registerUnrechargeableBlock(true, 512); + + new AGenerator(Categories.ELECTRICITY, SlimefunItems.COMBUSTION_REACTOR, "COMBUSTION_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.STEEL_INGOT, null, SlimefunItems.STEEL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.STEEL_INGOT, SlimefunItems.HEATING_COIL}) { + + @Override + public void registerDefaultRecipes() { + registerFuel(new MachineFuel(30, SlimefunItems.BUCKET_OF_OIL)); + registerFuel(new MachineFuel(90, SlimefunItems.BUCKET_OF_FUEL)); + } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.FLINT_AND_STEEL); + } + + @Override + public String getInventoryTitle() { + return "&cCombustion Reactor"; + } + + @Override + public int getEnergyProduction() { + return 12; + } + + }.registerUnrechargeableBlock(true, 256); + + new SlimefunItem(Categories.GPS, SlimefunItems.GPS_TELEPORTER_PYLON, "GPS_TELEPORTER_PYLON", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.HEATING_COIL, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT, new ItemStack(Material.GLASS), SlimefunItems.ZINC_INGOT}, new CustomItem(SlimefunItems.GPS_TELEPORTER_PYLON, 8)) + .register(true, new RainbowTicker(9, 10)); + + new Teleporter(Categories.GPS, SlimefunItems.GPS_TELEPORTATION_MATRIX, "GPS_TELEPORTATION_MATRIX", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.GPS_CONTROL_PANEL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.GPS_TELEPORTER_PYLON, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.GPS_TELEPORTER_PYLON}) { + + + @Override + public void onInteract(final Player p, final Block b) throws Exception { + GPSNetwork.openTeleporterGUI(p, UUID.fromString(BlockStorage.getBlockInfo(b, "owner")), b, Slimefun.getGPSNetwork().getNetworkComplexity(UUID.fromString(BlockStorage.getBlockInfo(b, "owner")))); + } + + } + .register(true); + + new SlimefunItem(Categories.GPS, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED, "GPS_ACTIVATION_DEVICE_SHARED", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.STONE_PLATE), null, new ItemStack(Material.REDSTONE), SlimefunItems.GPS_TRANSMITTER, new ItemStack(Material.REDSTONE), SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.BILLON_INGOT}) + .register(true); + + new SlimefunItem(Categories.GPS, SlimefunItems.GPS_ACTIVATION_DEVICE_PERSONAL, "GPS_ACTIVATION_DEVICE_PERSONAL", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.LEAD_INGOT, null, SlimefunItems.COBALT_INGOT, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED, SlimefunItems.COBALT_INGOT, null, SlimefunItems.LEAD_INGOT, null}) + .register(true); + + SlimefunItem.registerBlockHandler("GPS_ACTIVATION_DEVICE_PERSONAL", new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + return true; + } + }); + + new SlimefunItem(Categories.TECH, SlimefunItems.HOLOGRAM_PROJECTOR, "HOLOGRAM_PROJECTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.POWER_CRYSTAL, null, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRASS_INGOT, null, SlimefunItems.ALUMINUM_BRASS_INGOT, null}, new CustomItem(SlimefunItems.HOLOGRAM_PROJECTOR, 3)) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(ItemUseEvent e, Player p, ItemStack stack) { + if (e.getClickedBlock() == null) return false; + SlimefunItem item = BlockStorage.check(e.getClickedBlock()); + if (item == null || !item.getName().equals("HOLOGRAM_PROJECTOR")) return false; + e.setCancelled(true); + + if (BlockStorage.getBlockInfo(e.getClickedBlock(), "owner").equals(p.getUniqueId().toString())) { + Projector.openEditor(p, e.getClickedBlock()); + } + + return true; + } + }); + + SlimefunItem.registerBlockHandler("HOLOGRAM_PROJECTOR", 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()); + + Projector.getArmorStand(b); + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + Projector.getArmorStand(b).remove(); + return true; + } + }); + + new SlimefunItem(Categories.MAGIC, SlimefunItems.INFUSED_HOPPER, "INFUSED_HOPPER", RecipeType.ANCIENT_ALTAR, + new ItemStack[] {new ItemStack(Material.OBSIDIAN), SlimefunItems.RUNE_EARTH, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_ENDER, SlimefunItems.INFUSED_MAGNET, SlimefunItems.RUNE_ENDER, new ItemStack(Material.HOPPER), SlimefunItems.RUNE_EARTH, new ItemStack(Material.OBSIDIAN)}) + .register(true, new BlockTicker() { + + @Override + public void uniqueTick() { + } + + @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. + return; + } + ArmorStand hologram = InfusedHopper.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_ENDERMEN_TELEPORT, 5F, 2F); + } + + @Override + public boolean isSynchronized() { + return true; + } + }); + + SlimefunItem.registerBlockHandler("INFUSED_HOPPER", new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + InfusedHopper.getArmorStand(b, true); + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + final ArmorStand hologram = InfusedHopper.getArmorStand(b, false); + if (hologram != null) { + hologram.remove(); + } + return true; + } + }); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT, "BLISTERING_INGOT", RecipeType.HEATED_PRESSURE_CHAMBER, + new ItemStack[] {SlimefunItems.GOLD_24K, SlimefunItems.URANIUM, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT_2, "BLISTERING_INGOT_2", RecipeType.HEATED_PRESSURE_CHAMBER, + new ItemStack[] {SlimefunItems.BLISTERING_INGOT, SlimefunItems.CARBONADO, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.BLISTERING_INGOT_3, "BLISTERING_INGOT_3", RecipeType.HEATED_PRESSURE_CHAMBER, + new ItemStack[] {SlimefunItems.BLISTERING_INGOT_2,new ItemStack(Material.NETHER_STAR), null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.ENRICHED_NETHER_ICE, "ENRICHED_NETHER_ICE", RecipeType.HEATED_PRESSURE_CHAMBER, + new ItemStack[]{SlimefunItems.NETHER_ICE, SlimefunItems.PLUTONIUM, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.GPS, SlimefunItems.ELEVATOR, "ELEVATOR_PLATE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.STONE_PLATE), null, new ItemStack(Material.PISTON_BASE), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PISTON_BASE), SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT}, + new CustomItem(SlimefunItems.ELEVATOR, 2)) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(final ItemUseEvent e, Player p, ItemStack stack) { + if (e.getClickedBlock() == null) return false; + SlimefunItem item = BlockStorage.check(e.getClickedBlock()); + if (item == null) return false; + if (!item.getName().equals("ELEVATOR_PLATE")) return false; + + if (BlockStorage.getBlockInfo(e.getClickedBlock(), "owner").equals(p.getUniqueId().toString())) Elevator.openEditor(p, e.getClickedBlock()); + return true; + } + }); + + SlimefunItem.registerBlockHandler("ELEVATOR_PLATE", new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + BlockStorage.addBlockInfo(b, "floor", "&rFloor #0"); + BlockStorage.addBlockInfo(b, "owner", p.getUniqueId().toString()); + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + return true; + } + }); + + new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR, "FOOD_FABRICATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.BILLON_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BILLON_INGOT, SlimefunItems.CAN, SlimefunItems.SMALL_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.GOLD_HOE); + } + + @Override + public String getInventoryTitle() { + return "&cFood Fabricator"; + } + + @Override + public int getEnergyConsumption() { + return 7; + } + + @Override + public int getSpeed() { + return 1; + }; + + }.registerChargeableBlock(true, 256); + + new FoodFabricator(Categories.ELECTRICITY, SlimefunItems.FOOD_FABRICATOR_2, "FOOD_FABRICATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.DIAMOND_HOE); + } + + @Override + public String getInventoryTitle() { + return "&cFood Fabricator"; + } + + @Override + public int getEnergyConsumption() { + return 24; + } + + @Override + public int getSpeed() { + return 6; + }; + + }.registerChargeableBlock(true, 512); + + new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD2, "ORGANIC_FOOD_WHEAT", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.WHEAT), null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD3, "ORGANIC_FOOD_CARROT", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.CARROT_ITEM), null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD4, "ORGANIC_FOOD_POTATO", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.POTATO_ITEM), null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD5, "ORGANIC_FOOD_SEEDS", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.SEEDS), null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD6, "ORGANIC_FOOD_BEETROOT", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.BEETROOT), null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD7, "ORGANIC_FOOD_MELON", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.MELON), null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.ORGANIC_FOOD8, "ORGANIC_FOOD_APPLE", new RecipeType(SlimefunItems.FOOD_FABRICATOR), + new ItemStack[] {SlimefunItems.CAN, new ItemStack(Material.APPLE), null, null, null, null, null, null, null}) + .register(true); + + new AutoBreeder(Categories.ELECTRICITY, SlimefunItems.AUTO_BREEDER, "AUTO_BREEDER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.GOLD_18K, SlimefunItems.CAN, SlimefunItems.GOLD_18K, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.HAY_BLOCK), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.LEAD_INGOT}) + .registerChargeableBlock(true, 1024); + + new AnimalGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, "ANIMAL_GROWTH_ACCELERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ORGANIC_FOOD2, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.AUTO_BREEDER, SlimefunItems.REINFORCED_ALLOY_INGOT}) + .registerChargeableBlock(true, 1024); + + new XPCollector(Categories.ELECTRICITY, SlimefunItems.XP_COLLECTOR, "XP_COLLECTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.AUTO_ENCHANTER, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ALUMINUM_BRONZE_INGOT}) + .registerChargeableBlock(true, 1024); + + new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER, "FOOD_COMPOSTER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.FOOD_FABRICATOR, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.CAN, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.CAN, null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.GOLD_HOE); + } + + @Override + public String getInventoryTitle() { + return "&cFood Composter"; + } + + @Override + public int getEnergyConsumption() { + return 8; + } + + @Override + public int getSpeed() { + return 1; + } + + }.registerChargeableBlock(true, 256); + + new FoodComposter(Categories.ELECTRICITY, SlimefunItems.FOOD_COMPOSTER_2, "FOOD_COMPOSTER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.FOOD_COMPOSTER, SlimefunItems.ELECTRIC_MOTOR, null, SlimefunItems.ELECTRO_MAGNET, null}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.DIAMOND_HOE); + } + + @Override + public String getInventoryTitle() { + return "&cFood Composter"; + } + + @Override + public int getEnergyConsumption() { + return 26; + } + + @Override + public int getSpeed() { + return 10; + } + + }.registerChargeableBlock(true, 256); + + new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER2, "FERTILIZER_WHEAT", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new ItemStack[] {SlimefunItems.ORGANIC_FOOD2, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER3, "FERTILIZER_CARROT", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new ItemStack[] {SlimefunItems.ORGANIC_FOOD3, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER4, "FERTILIZER_POTATO", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new ItemStack[] {SlimefunItems.ORGANIC_FOOD4, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER5, "FERTILIZER_SEEDS", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new ItemStack[] {SlimefunItems.ORGANIC_FOOD5, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER6, "FERTILIZER_BEETROOT", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new ItemStack[] {SlimefunItems.ORGANIC_FOOD6, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER7, "FERTILIZER_MELON", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new ItemStack[] {SlimefunItems.ORGANIC_FOOD7, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.MISC, SlimefunItems.FERTILIZER8, "FERTILIZER_APPLE", new RecipeType(SlimefunItems.FOOD_COMPOSTER), + new ItemStack[] {SlimefunItems.ORGANIC_FOOD8, null, null, null, null, null, null, null, null}) + .register(true); + + new CropGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.CROP_GROWTH_ACCELERATOR, "CROP_GROWTH_ACCELERATOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ANIMAL_GROWTH_ACCELERATOR, SlimefunItems.ELECTRO_MAGNET}) + { + + @Override + public int getEnergyConsumption() { + return 25; + } + + @Override + public int getRadius() { + return 3; + } + + @Override + public int getSpeed() { + return 3; + } + + }.registerChargeableBlock(true, 1024); + + new CropGrowthAccelerator(Categories.ELECTRICITY, SlimefunItems.CROP_GROWTH_ACCELERATOR_2, "CROP_GROWTH_ACCELERATOR_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CROP_GROWTH_ACCELERATOR, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ADVANCED_CIRCUIT_BOARD, SlimefunItems.ELECTRO_MAGNET}) + { + + @Override + public int getEnergyConsumption() { + return 30; + } + + @Override + public int getRadius() { + return 4; + } + + @Override + public int getSpeed() { + return 4; + } + + }.registerChargeableBlock(true, 1024); + + new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER, "FREEZER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.PACKED_ICE), SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.COOLING_UNIT, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.COOLING_UNIT}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.GOLD_PICKAXE); + } + + @Override + public String getInventoryTitle() { + return "&bFreezer"; + } + + @Override + public int getEnergyConsumption() { + return 9; + } + + @Override + public int getSpeed() { + return 1; + } + + }.registerChargeableBlock(true, 256); + + new Freezer(Categories.ELECTRICITY, SlimefunItems.FREEZER_2, "FREEZER_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.SILVER_INGOT, null, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.FREEZER, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.COOLING_UNIT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.COOLING_UNIT}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.DIAMOND_PICKAXE); + } + + @Override + public String getInventoryTitle() { + return "&bFreezer"; + } + + @Override + public int getEnergyConsumption() { + return 15; + } + + @Override + public int getSpeed() { + return 2; + } + + }.registerChargeableBlock(true, 256); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.REACTOR_COOLANT_CELL, "REACTOR_COOLANT_CELL", new RecipeType(SlimefunItems.FREEZER), + new ItemStack[] {new ItemStack(Material.PACKED_ICE), null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.TECH_MISC, SlimefunItems.NETHER_ICE_COOLANT_CELL, "NETHER_ICE_COOLANT_CELL", new RecipeType(SlimefunItems.HEATED_PRESSURE_CHAMBER), + new ItemStack[]{SlimefunItems.ENRICHED_NETHER_ICE, null, null, null, null, null, null, null, null}) + .register(true); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.NEPTUNIUM, "NEPTUNIUM", new RecipeType(SlimefunItems.NUCLEAR_REACTOR), + new ItemStack[] {SlimefunItems.URANIUM, null, null, null, null, null, null, null, null}) + .register(true); + + SlimefunItem.setRadioactive(SlimefunItems.NEPTUNIUM); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.PLUTONIUM, "PLUTONIUM", new RecipeType(SlimefunItems.NUCLEAR_REACTOR), + new ItemStack[] {SlimefunItems.NEPTUNIUM, null, null, null, null, null, null, null, null}) + .register(true); + + SlimefunItem.setRadioactive(SlimefunItems.PLUTONIUM); + + new SlimefunItem(Categories.RESOURCES, SlimefunItems.BOOSTED_URANIUM, "BOOSTED_URANIUM", RecipeType.HEATED_PRESSURE_CHAMBER, + new ItemStack[] {SlimefunItems.PLUTONIUM, SlimefunItems.URANIUM, null, null, null, null, null, null, null}) + .register(true); + + SlimefunItem.setRadioactive(SlimefunItems.BOOSTED_URANIUM); + + new AReactor(Categories.ELECTRICITY, SlimefunItems.NUCLEAR_REACTOR, "NUCLEAR_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CARBONADO_EDGED_CAPACITOR, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.REINFORCED_PLATE, SlimefunItems.COOLING_UNIT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.LEAD_INGOT}){ + + @Override + public String getInventoryTitle() { + return "&2Nuclear Reactor"; + } + + @Override + public void registerDefaultRecipes() { + registerFuel(new MachineFuel(1200, SlimefunItems.URANIUM, SlimefunItems.NEPTUNIUM)); + registerFuel(new MachineFuel(600, SlimefunItems.NEPTUNIUM, SlimefunItems.PLUTONIUM)); + registerFuel(new MachineFuel(1500, SlimefunItems.BOOSTED_URANIUM, null)); + } + + @Override + public int getEnergyProduction() { + return 250; + } + + @Override + public void extraTick(Location l) { + + } + + @Override + public ItemStack getProgressBar() { + try { + return CustomSkull.getItem("eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTNhZDhlZTg0OWVkZjA0ZWQ5YTI2Y2EzMzQxZjYwMzNiZDc2ZGNjNDIzMWVkMWVhNjNiNzU2NTc1MWIyN2FjIn19fQ=="); + } catch (Exception e) { + return new ItemStack(Material.BLAZE_POWDER); + } + } + + @Override + public ItemStack getCoolant() { + return SlimefunItems.REACTOR_COOLANT_CELL; + } + } + .registerChargeableBlock(true, 16384); + + new AReactor(Categories.ELECTRICITY, SlimefunItems.NETHERSTAR_REACTOR, "NETHERSTAR_REACTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[]{SlimefunItems.BOOSTED_URANIUM, SlimefunItems.CARBONADO_EDGED_CAPACITOR, SlimefunItems.BOOSTED_URANIUM, SlimefunItems.REINFORCED_PLATE, new ItemStack(Material.NETHER_STAR), SlimefunItems.REINFORCED_PLATE, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CORINTHIAN_BRONZE_INGOT}){ + + @Override + public String getInventoryTitle() { + return "&fNether Star Reactor"; + } + + @Override + public void registerDefaultRecipes() { + registerFuel(new MachineFuel(1800, new ItemStack(Material.NETHER_STAR))); + } + + @Override + public int getEnergyProduction() { + return 512; + } + + @Override + public void extraTick(final Location l) { + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new BukkitRunnable() { + @Override + public void run() { + for (Entity entity : ReactorHologram.getArmorStand(l).getNearbyEntities(5, 5, 5)) { + if (entity instanceof LivingEntity) { + ((LivingEntity) entity).addPotionEffect(new PotionEffect(PotionEffectType.WITHER, 60, 1)); + } + } + } + }, 0); + } + + @Override + public ItemStack getCoolant() { + return SlimefunItems.NETHER_ICE_COOLANT_CELL; + } + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.NETHER_STAR); + } + + }.registerChargeableBlock(true, 32768); + + new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_MOTOR, "CARGO_MOTOR", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS, SlimefunItems.SILVER_INGOT, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.HARDENED_GLASS, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HARDENED_GLASS}, new CustomItem(SlimefunItems.CARGO_MOTOR, 4)) + .register(true); + + new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_MANAGER, "CARGO_MANAGER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.HOLOGRAM_PROJECTOR, null, SlimefunItems.REINFORCED_PLATE, SlimefunItems.CARGO_MOTOR, SlimefunItems.REINFORCED_PLATE, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.ALUMINUM_BRONZE_INGOT}) + .register(true, new BlockTicker() { + + @Override + public void uniqueTick() { + } + + @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; + SlimefunItem item = BlockStorage.check(e.getClickedBlock()); + if (item == null || !item.getName().equals("CARGO_MANAGER")) return false; + e.setCancelled(true); + + if (BlockStorage.getBlockInfo(e.getClickedBlock(), "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; + } + }); + + SlimefunItem.registerBlockHandler("CARGO_MANAGER", new SlimefunBlockHandler() { + + @Override + public void onPlace(Player p, Block b, SlimefunItem item) { + } + + @Override + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + CargoHologram.remove(b); + return true; + } + }); + + new SlimefunItem(Categories.CARGO, SlimefunItems.CARGO_NODE, "CARGO_NODE", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.BRONZE_INGOT}, new CustomItem(SlimefunItems.CARGO_NODE, 4)) + .register(true, new ItemInteractionHandler() { + + @Override + public boolean onRightClick(final ItemUseEvent e, Player p, ItemStack stack) { + if (e.getClickedBlock() == null) return false; + SlimefunItem item = BlockStorage.check(e.getClickedBlock()); + if (item == null) return false; + if (!item.getName().equals("CARGO_NODE")) return false; + + if (CargoNet.isConnected(e.getClickedBlock())) { + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7Connected: " + "&2\u2714")); + } + else { + p.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7Connected: " + "&4\u2718")); + } + return true; + } + }); + + new CargoInputNode(Categories.CARGO, SlimefunItems.CARGO_INPUT, "CARGO_NODE_INPUT", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.HOPPER), null, SlimefunItems.BILLON_INGOT, SlimefunItems.CARGO_NODE, SlimefunItems.BILLON_INGOT, null, new ItemStack(Material.HOPPER), null}, new CustomItem(SlimefunItems.CARGO_INPUT, 2)) + .register(true); + + new CargoOutputNode(Categories.CARGO, SlimefunItems.CARGO_OUTPUT, "CARGO_NODE_OUTPUT", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.HOPPER), null, SlimefunItems.BRASS_INGOT, SlimefunItems.CARGO_NODE, SlimefunItems.BRASS_INGOT, null, new ItemStack(Material.HOPPER), null}, new CustomItem(SlimefunItems.CARGO_OUTPUT, 2)) + .register(true); + + new AdvancedCargoOutputNode(Categories.CARGO, SlimefunItems.CARGO_OUTPUT_ADVANCED, "CARGO_NODE_OUTPUT_ADVANCED", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.CARGO_MOTOR, null, SlimefunItems.COBALT_INGOT, SlimefunItems.CARGO_OUTPUT, SlimefunItems.COBALT_INGOT, null, SlimefunItems.CARGO_MOTOR, null}, new CustomItem(SlimefunItems.CARGO_OUTPUT_ADVANCED)) + .register(true); + + new AutomatedCraftingChamber(Categories.ELECTRICITY, SlimefunItems.AUTOMATED_CRAFTING_CHAMBER, "AUTOMATED_CRAFTING_CHAMBER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, new ItemStack(Material.WORKBENCH), null, SlimefunItems.CARGO_MOTOR, SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.CARGO_MOTOR, null, SlimefunItems.ELECTRIC_MOTOR, null}) { + + @Override + public int getEnergyConsumption() { + return 10; + } + }.registerChargeableBlock(true, 256); + + new ReactorAccessPort(Categories.ELECTRICITY, SlimefunItems.REACTOR_ACCESS_PORT, "REACTOR_ACCESS_PORT", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.BLISTERING_INGOT_3, null, SlimefunItems.LEAD_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.LEAD_INGOT, null, SlimefunItems.ELECTRIC_MOTOR, null}) + .register(true); + + new FluidPump(Categories.ELECTRICITY, SlimefunItems.FLUID_PUMP, "FLUID_PUMP", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.MEDIUM_CAPACITOR, null, new ItemStack(Material.BUCKET), SlimefunItems.CARGO_MOTOR, new ItemStack(Material.BUCKET), null, SlimefunItems.OIL_PUMP, null}) + .registerChargeableBlock(true, 512); + + + new TrashCan(Categories.CARGO, SlimefunItems.TRASH_CAN, "TRASH_CAN_BLOCK", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {null, SlimefunItems.PORTABLE_DUSTBIN, null, SlimefunItems.LEAD_INGOT, SlimefunItems.CARGO_MOTOR, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT}) + .register(true); + + new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS, "CARBON_PRESS", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CARBON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBON, SlimefunItems.CARBON, SlimefunItems.HEATED_PRESSURE_CHAMBER, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.CARBONADO, SlimefunItems.HEATING_COIL}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.DIAMOND_PICKAXE); + } + + @Override + public String getInventoryTitle() { + return "&cCarbon Press"; + } + + @Override + public int getEnergyConsumption() { + return 10; + } + + @Override + public int getSpeed() { + return 1; + } + + }.registerChargeableBlock(true, 256); + + new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS_2, "CARBON_PRESS_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.CARBON, SlimefunItems.CARBON_PRESS, SlimefunItems.CARBON, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.DIAMOND_PICKAXE); + } + + @Override + public String getInventoryTitle() { + return "&cCarbon Press"; + } + + @Override + public int getEnergyConsumption() { + return 25; + } + + @Override + public int getSpeed() { + return 3; + } + + }.registerChargeableBlock(true, 512); + + new CarbonPress(Categories.ELECTRICITY, SlimefunItems.CARBON_PRESS_3, "CARBON_PRESS_3", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.CARBONADO, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.CARBONADO, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBON_PRESS_2, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRO_MAGNET, SlimefunItems.HEATING_COIL}) { + + @Override + public ItemStack getProgressBar() { + return new ItemStack(Material.DIAMOND_PICKAXE); + } + + @Override + public String getInventoryTitle() { + return "&cCarbon Press"; + } + + @Override + public int getEnergyConsumption() { + return 90; + } + + @Override + public int getSpeed() { + return 15; + } + + }.registerChargeableBlock(true, 512); + + new ElectricSmeltery(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_SMELTERY, "ELECTRIC_SMELTERY", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {new ItemStack(Material.NETHER_BRICK_ITEM), SlimefunItems.ELECTRIC_MOTOR, new ItemStack(Material.NETHER_BRICK_ITEM), SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_INGOT_FACTORY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { + + @Override + public void registerDefaultRecipes() { + } + + @Override + public int getEnergyConsumption() { + return 10; + } + + @Override + public int getSpeed() { + return 1; + } + + }.registerChargeableBlock(true, 512); + + new ElectricSmeltery(Categories.ELECTRICITY, SlimefunItems.ELECTRIC_SMELTERY_2, "ELECTRIC_SMELTERY_2", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.POWER_CRYSTAL, SlimefunItems.DAMASCUS_STEEL_INGOT, SlimefunItems.HEATING_COIL, SlimefunItems.ELECTRIC_SMELTERY, SlimefunItems.HEATING_COIL, SlimefunItems.GILDED_IRON, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.GILDED_IRON}) { + + @Override + public void registerDefaultRecipes() { + } + + @Override + public int getEnergyConsumption() { + return 20; + } + + @Override + public int getSpeed() { + return 3; + } + + }.registerChargeableBlock(true, 1024); + + new WitherAssembler(Categories.ELECTRICITY, SlimefunItems.WITHER_ASSEMBLER, "WITHER_ASSEMBLER", RecipeType.ENHANCED_CRAFTING_TABLE, + new ItemStack[] {SlimefunItems.BLISTERING_INGOT_3, new ItemStack(Material.NETHER_STAR), SlimefunItems.BLISTERING_INGOT_3, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ANDROID_MEMORY_CORE, SlimefunItems.WITHER_PROOF_OBSIDIAN, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.REINFORCED_ALLOY_INGOT, SlimefunItems.CARBONADO_EDGED_CAPACITOR}) + .registerChargeableBlock(true, 4096); + + } + + public static void registerPostHandler(PostSlimefunLoadingHandler handler) { + MiscSetup.post_handlers.add(handler); + } + +} From 250643733951b311ccbc16f35e2314e5b0ca5da9 Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Wed, 25 Apr 2018 08:52:31 -0700 Subject: [PATCH 61/85] Revert "Fix for players getting stuck in elevator books/teleporter guis" This reverts commit f595cb06a8ca90d9a1a39dc4c648d1dd6f4e8b43. --- src/me/mrCookieSlime/Slimefun/Variables.java | 4 ++++ .../Slimefun/listeners/TeleporterListener.java | 18 +----------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Variables.java b/src/me/mrCookieSlime/Slimefun/Variables.java index c2034c254..eba24266a 100644 --- a/src/me/mrCookieSlime/Slimefun/Variables.java +++ b/src/me/mrCookieSlime/Slimefun/Variables.java @@ -23,6 +23,10 @@ public class Variables { public static List blocks = new ArrayList(); public static List cancelPlace = new ArrayList(); public static Map arrows = new HashMap(); +<<<<<<< HEAD public static Map dialogueCooldown = new HashMap(); +======= + public static List usingGuide = new ArrayList(); +>>>>>>> parent of f595cb0... Fix for players getting stuck in elevator books/teleporter guis } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java b/src/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java index c96af16f6..df886f5e7 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/TeleporterListener.java @@ -1,7 +1,6 @@ package me.mrCookieSlime.Slimefun.listeners; import me.mrCookieSlime.Slimefun.SlimefunStartup; -import me.mrCookieSlime.Slimefun.Variables; import me.mrCookieSlime.Slimefun.GPS.Elevator; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.Teleporter; @@ -13,7 +12,6 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerMoveEvent; public class TeleporterListener implements Listener { @@ -40,8 +38,6 @@ public class TeleporterListener implements Listener { } try { - if(Variables.dialogueCooldown.containsKey(e.getPlayer().getUniqueId())) return; - else Variables.dialogueCooldown.put(e.getPlayer().getUniqueId(), e.getClickedBlock().getLocation().toString()); ((Teleporter) teleporter).onInteract(e.getPlayer(), e.getClickedBlock().getRelative(BlockFace.DOWN)); } catch (Exception x) { x.printStackTrace(); @@ -58,8 +54,6 @@ public class TeleporterListener implements Listener { } try { - if(Variables.dialogueCooldown.containsKey(e.getPlayer().getUniqueId())) return; - else Variables.dialogueCooldown.put(e.getPlayer().getUniqueId(), e.getClickedBlock().getLocation().toString()); ((Teleporter) teleporter).onInteract(e.getPlayer(), e.getClickedBlock().getRelative(BlockFace.DOWN)); } catch (Exception x) { x.printStackTrace(); @@ -69,18 +63,8 @@ public class TeleporterListener implements Listener { else e.setCancelled(true); } else if (item.getID().equals("ELEVATOR_PLATE")) { - if(Variables.dialogueCooldown.containsKey(e.getPlayer().getUniqueId())) return; - else Variables.dialogueCooldown.put(e.getPlayer().getUniqueId(), e.getClickedBlock().getLocation().toString()); Elevator.openDialogue(e.getPlayer(), e.getClickedBlock()); } } - - @EventHandler - public void onPlayerMove(PlayerMoveEvent e) { - if(Variables.dialogueCooldown.containsKey(e.getPlayer().getUniqueId())) { - if(!e.getPlayer().getLocation().toString().equals(Variables.dialogueCooldown.get(e.getPlayer().getUniqueId()))) { - Variables.dialogueCooldown.remove(e.getPlayer().getUniqueId()); - } - } - } + } From 5f8328c02cced020d3d073c363da73b97a2bfada Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Wed, 25 Apr 2018 10:45:54 -0700 Subject: [PATCH 62/85] Removed unintended code --- src/me/mrCookieSlime/Slimefun/Variables.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Variables.java b/src/me/mrCookieSlime/Slimefun/Variables.java index eba24266a..2d5ef8306 100644 --- a/src/me/mrCookieSlime/Slimefun/Variables.java +++ b/src/me/mrCookieSlime/Slimefun/Variables.java @@ -23,10 +23,5 @@ public class Variables { public static List blocks = new ArrayList(); public static List cancelPlace = new ArrayList(); public static Map arrows = new HashMap(); -<<<<<<< HEAD - public static Map dialogueCooldown = new HashMap(); -======= - public static List usingGuide = new ArrayList(); ->>>>>>> parent of f595cb0... Fix for players getting stuck in elevator books/teleporter guis } From 5cf4f0bbebf0cc1bc5def1c476640eed96aed047 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Thu, 26 Apr 2018 00:01:51 +0200 Subject: [PATCH 63/85] Updated to CS-CoreLib 1.5.18 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6ea6ff8b8..6f8663b56 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ com.github.TheBusyBiscuit CS-CoreLib - v1.5.16 + v1.5.18 me.minebuilders From b16b936b81ed05f72797f7e34ff6d393ce57589f Mon Sep 17 00:00:00 2001 From: KyleEstein Date: Wed, 25 Apr 2018 23:40:46 -0400 Subject: [PATCH 64/85] Fix Additional Devices Vulnerable to Duplication Bug --- .../Slimefun/Android/ProgrammableAndroid.java | 10 ++++++++-- .../abstractItems/AContainer.java | 14 +++++++++---- .../SlimefunItem/abstractItems/AFarm.java | 10 ++++++++-- .../abstractItems/AGenerator.java | 20 +++++++++++++++---- .../SlimefunItem/abstractItems/AReactor.java | 15 +++++++++++--- .../machines/AdvancedCargoOutputNode.java | 5 ++++- .../machines/AnimalGrowthAccelerator.java | 5 ++++- .../SlimefunItem/machines/AutoBreeder.java | 5 ++++- .../machines/AutomatedCraftingChamber.java | 10 ++++++++-- .../machines/CargoCraftingNode.java | 5 ++++- .../SlimefunItem/machines/CargoInputNode.java | 5 ++++- .../machines/CropGrowthAccelerator.java | 5 ++++- .../machines/ElectricSmeltery.java | 10 ++++++++-- .../machines/ReactorAccessPort.java | 15 +++++++++++--- .../machines/WitherAssembler.java | 10 ++++++++-- .../SlimefunItem/machines/XPCollector.java | 5 ++++- 16 files changed, 118 insertions(+), 31 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java index 8ba0f054e..b087030f3 100644 --- a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java @@ -211,9 +211,15 @@ public abstract class ProgrammableAndroid extends SlimefunItem { boolean allow = reason.equals(UnregisterReason.PLAYER_BREAK) && (BlockStorage.getBlockInfo(b, "owner").equals(p.getUniqueId().toString()) || p.hasPermission("slimefun.android.bypass")); if (allow) { - if (BlockStorage.getInventory(b).getItemInSlot(43) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(43)); + if (BlockStorage.getInventory(b).getItemInSlot(43) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(43)); + BlockStorage.getInventory(b).replaceExistingItem(43, null); + } for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } AndroidStatusHologram.remove(b); } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index 7dbf3116b..6d82396a5 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -86,13 +86,13 @@ public abstract class AContainer extends SlimefunItem { for (int slot: getInputSlots()) { if (inv.getItemInSlot(slot) != null) { b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.toInventory().clear(slot); + inv.replaceExistingItem(slot, null); } } for (int slot: getOutputSlots()) { if (inv.getItemInSlot(slot) != null) { b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.toInventory().clear(slot); + inv.replaceExistingItem(slot, null); } } } @@ -141,10 +141,16 @@ public abstract class AContainer extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } processing.remove(b); progress.remove(b); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java index c49da80ef..cb0629219 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java @@ -69,7 +69,10 @@ public abstract class AFarm extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } @@ -112,7 +115,10 @@ public abstract class AFarm extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java index 3d0341982..19f7a8c29 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java @@ -88,10 +88,16 @@ public abstract class AGenerator extends SlimefunItem { 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)); + 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)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } progress.remove(b.getLocation()); @@ -141,10 +147,16 @@ public abstract class AGenerator extends SlimefunItem { 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)); + 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)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } progress.remove(b.getLocation()); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java index da03cac9f..1d02c7d88 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java @@ -134,13 +134,22 @@ public abstract class AReactor extends SlimefunItem { 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)); + 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)); + 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)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } progress.remove(b.getLocation()); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java index 5b3efc721..e75969a9a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java @@ -211,7 +211,10 @@ public class AdvancedCargoOutputNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java index 77c6299d1..f0fb5948b 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java @@ -71,7 +71,10 @@ public class AnimalGrowthAccelerator extends SlimefunItem { public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAccelerator.getArmorStand(b).remove(); for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java index 38e445550..0060bd40f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java @@ -71,7 +71,10 @@ public class AutoBreeder extends SlimefunItem { public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { me.mrCookieSlime.Slimefun.holograms.AutoBreeder.getArmorStand(b).remove(); for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java index d446801af..e875dc6da 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java @@ -119,10 +119,16 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem { 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)); + 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)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java index afff95900..40d5407c3 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java @@ -106,7 +106,10 @@ public class CargoCraftingNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java index f02d6e031..930924d2b 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java @@ -237,7 +237,10 @@ public class CargoInputNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java index 60d138860..fd248be65 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java @@ -81,7 +81,10 @@ public abstract class CropGrowthAccelerator extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricSmeltery.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricSmeltery.java index f481901b2..f9c3586f0 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricSmeltery.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricSmeltery.java @@ -102,10 +102,16 @@ public abstract class ElectricSmeltery extends AContainer { 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)); + 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)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } progress.remove(b.getLocation()); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java index 3dd061220..0d50cb497 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java @@ -81,13 +81,22 @@ public class ReactorAccessPort extends SlimefunItem { 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)); + 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)); + 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)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/WitherAssembler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/WitherAssembler.java index bebac6219..e840cb664 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/WitherAssembler.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/WitherAssembler.java @@ -130,10 +130,16 @@ public class WitherAssembler extends SlimefunItem { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getSoulSandSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } for (int slot: getWitherSkullSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java index b1c448295..148694fa5 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java @@ -70,7 +70,10 @@ public class XPCollector extends SlimefunItem { public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { me.mrCookieSlime.Slimefun.holograms.XPCollector.getArmorStand(b).remove(); for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } From a876301d943b3a0d1ab826d29074f487a045562e Mon Sep 17 00:00:00 2001 From: KyleEstein Date: Sat, 28 Apr 2018 12:05:43 -0400 Subject: [PATCH 65/85] Cast inventory to a variable instead of calling getInventory() over and over --- .../Slimefun/Android/ProgrammableAndroid.java | 19 ++++++++++------- .../abstractItems/AContainer.java | 21 +++++++++++-------- .../SlimefunItem/abstractItems/AFarm.java | 11 ++++++---- .../machines/AdvancedCargoOutputNode.java | 11 ++++++---- .../machines/AnimalGrowthAccelerator.java | 11 ++++++---- .../SlimefunItem/machines/AutoBreeder.java | 11 ++++++---- .../machines/CargoCraftingNode.java | 11 ++++++---- .../SlimefunItem/machines/CargoInputNode.java | 11 ++++++---- .../machines/CropGrowthAccelerator.java | 11 ++++++---- .../SlimefunItem/machines/XPCollector.java | 11 ++++++---- 10 files changed, 79 insertions(+), 49 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java index b087030f3..ea6af4535 100644 --- a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java @@ -211,14 +211,17 @@ public abstract class ProgrammableAndroid extends SlimefunItem { boolean allow = reason.equals(UnregisterReason.PLAYER_BREAK) && (BlockStorage.getBlockInfo(b, "owner").equals(p.getUniqueId().toString()) || p.hasPermission("slimefun.android.bypass")); if (allow) { - if (BlockStorage.getInventory(b).getItemInSlot(43) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(43)); - BlockStorage.getInventory(b).replaceExistingItem(43, null); - } - for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + 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); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index 6d82396a5..d1aec7710 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -140,16 +140,19 @@ public abstract class AContainer extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + 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 (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).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); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java index cb0629219..0f9d83b02 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java @@ -68,10 +68,13 @@ public abstract class AFarm extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + 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; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java index e75969a9a..54c605294 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java @@ -210,10 +210,13 @@ public class AdvancedCargoOutputNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + 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; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java index f0fb5948b..c8dd17562 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java @@ -70,10 +70,13 @@ public class AnimalGrowthAccelerator extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAccelerator.getArmorStand(b).remove(); - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + 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; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java index 0060bd40f..b0642d085 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java @@ -70,10 +70,13 @@ public class AutoBreeder extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { me.mrCookieSlime.Slimefun.holograms.AutoBreeder.getArmorStand(b).remove(); - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + 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; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java index 40d5407c3..8f4ad9bbe 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java @@ -105,10 +105,13 @@ public class CargoCraftingNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + 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; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java index 930924d2b..90686153d 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java @@ -236,10 +236,13 @@ public class CargoInputNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + 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; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java index fd248be65..781bfca20 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java @@ -80,10 +80,13 @@ public abstract class CropGrowthAccelerator extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + 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; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java index 148694fa5..70f12376d 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java @@ -69,10 +69,13 @@ 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(); - for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + 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; From 692904ffc3d59e132481ff29d10bac02266f6c1d Mon Sep 17 00:00:00 2001 From: KyleEstein Date: Sat, 28 Apr 2018 12:14:17 -0400 Subject: [PATCH 66/85] Missed updating one onBreak() in AFarm.java --- .../Objects/SlimefunItem/abstractItems/AFarm.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java index 0f9d83b02..d480afa0a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java @@ -117,10 +117,13 @@ public abstract class AFarm extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + 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; From 17ec56799a1b326c95045bafb72c4e18100e9674 Mon Sep 17 00:00:00 2001 From: KyleEstein Date: Sat, 28 Apr 2018 20:13:37 -0400 Subject: [PATCH 67/85] Allow admins to chose ore washer and dust washer behavior --- src/config.yml | 2 ++ .../machines/ElectricDustWasher.java | 16 ++++++++++++---- .../Slimefun/Setup/SlimefunSetup.java | 4 +++- .../mrCookieSlime/Slimefun/SlimefunStartup.java | 4 ++++ 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/config.yml b/src/config.yml index 3ee472760..7b2c23711 100644 --- a/src/config.yml +++ b/src/config.yml @@ -12,6 +12,8 @@ options: emerald-enchantment-limit: 2 research-unlock-fireworks: true research-give-fireworks: true + legacy-ore-washer: false + legacy-dust-washer: false guide: default-view-book: false URID: diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java index 23ca3c005..3035f2bbe 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java @@ -42,6 +42,7 @@ public abstract class ElectricDustWasher extends AContainer { public void registerDefaultRecipes() {} public abstract int getSpeed(); + public static boolean legacy_dust_washer = false; @SuppressWarnings("deprecation") protected void tick(Block b) { @@ -83,13 +84,19 @@ public abstract class ElectricDustWasher extends AContainer { for (int slot: getInputSlots()) { if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.SIFTED_ORE, true)) { boolean empty_slot = false; - for (int output_slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(output_slot) == null) { - empty_slot = true; - break; + if (!legacy_dust_washer) { + for (int output_slot: getOutputSlots()) { + if (BlockStorage.getInventory(b).getItemInSlot(output_slot) == null) { + empty_slot = true; + break; + } } } + else { + empty_slot = true; + } if (!empty_slot) 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; @@ -101,6 +108,7 @@ public abstract class ElectricDustWasher extends AContainer { else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.SILVER_DUST; MachineRecipe r = new MachineRecipe(4 / getSpeed(), new ItemStack[0], new ItemStack[] {adding}); + if (!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/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index a3c69ee1f..4a080df50 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -158,6 +158,8 @@ import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener; @SuppressWarnings("deprecation") public class SlimefunSetup { + public static boolean legacy_ore_washer = false; + public static void setupItems() throws Exception { new SlimefunItem(Categories.WEAPONS, SlimefunItems.GRANDMAS_WALKING_STICK, "GRANDMAS_WALKING_STICK", RecipeType.ENHANCED_CRAFTING_TABLE, new ItemStack[] {null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null, null, new ItemStack(Material.LOG), null}) @@ -1415,7 +1417,7 @@ public class SlimefunSetup { else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.LEAD_DUST; else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.SILVER_DUST; - if (inv.firstEmpty() != -1) { + if (inv.firstEmpty() != -1 || (legacy_ore_washer && InvUtils.fits(inv, adding))) { ItemStack removing = current.clone(); removing.setAmount(1); inv.removeItem(removing); diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java index f93c01af5..041238e6c 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java @@ -40,6 +40,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.AutoEnchanter; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.ElectricDustWasher; import me.mrCookieSlime.Slimefun.Setup.Files; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.Setup.MiscSetup; @@ -387,6 +388,9 @@ public class SlimefunStartup extends JavaPlugin { AutoEnchanter.max_emerald_enchantments = config.getInt("options.emerald-enchantment-limit"); + SlimefunSetup.legacy_ore_washer = config.getBoolean("options.legacy-ore-washer"); + ElectricDustWasher.legacy_dust_washer = config.getBoolean("options.legacy-dust-washer"); + // Do not show /sf elevator command in our Log, it could get quite spammy CSCoreLib.getLib().filterLog("([A-Za-z0-9_]{3,16}) issued server command: /sf elevator (.{0,})"); } From fc601bda6b18b9b3a2ba6cb74e2a90a1748fd43b Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Sun, 29 Apr 2018 10:27:30 -0700 Subject: [PATCH 68/85] Updated saw mill block check The saw mill will now only use the CS-CoreLib protection manager. Also Ive added a check to prevent people from duping planks using barrels. --- .../Slimefun/Setup/SlimefunSetup.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index a3c69ee1f..7d890f274 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1887,10 +1887,24 @@ public class SlimefunSetup { @Override public boolean onInteract(Player p, MultiBlock mb, Block b) { if (mb.isMultiBlock(SlimefunItem.getByID("SAW_MILL"))) { - if(CSCoreLib.getLib().getProtectionManager().canAccessChest(p.getUniqueId(), b, true)) { + if(CSCoreLib.getLib().getProtectionManager().canBuild(p.getUniqueId(), b, true)) { if (Slimefun.hasUnlocked(p, SlimefunItems.SAW_MILL, true)) { - if (b.getRelative(BlockFace.UP).getType() == Material.LOG) BlockBreaker.breakBlock(p, b.getRelative(BlockFace.UP), Arrays.asList(new ItemStack[] {new CustomItem(Material.WOOD, b.getRelative(BlockFace.UP).getData() % 4, 8)}), true); - else if (b.getRelative(BlockFace.UP).getType() == Material.LOG_2) BlockBreaker.breakBlock(p, b.getRelative(BlockFace.UP), Arrays.asList(new ItemStack[] {new CustomItem(Material.WOOD, (b.getRelative(BlockFace.UP).getData() % 2) + 4, 8)}), true); + if (b.getRelative(BlockFace.UP).getType() == Material.LOG) { + Block log = b.getRelative(BlockFace.UP); + if(!BlockStorage.hasBlockInfo(log)) { + log.getWorld().dropItemNaturally(log.getLocation(), new CustomItem(Material.WOOD, log.getData() % 4, 8)); + log.getWorld().playEffect(log.getLocation(), Effect.STEP_SOUND, log.getType()); + log.setType(Material.AIR); + } + } + else if (b.getRelative(BlockFace.UP).getType() == Material.LOG_2) { + Block log = b.getRelative(BlockFace.UP); + if(!BlockStorage.hasBlockInfo(log)) { + log.getWorld().dropItemNaturally(log.getLocation(), new CustomItem(Material.WOOD, (log.getData() % 2) + 4, 8)); + log.getWorld().playEffect(log.getLocation(), Effect.STEP_SOUND, log.getType()); + log.setType(Material.AIR); + } + } } } return true; From e0fd8a358ec8bd46bd0c800e47fc8c0b922726c8 Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Sun, 29 Apr 2018 10:37:11 -0700 Subject: [PATCH 69/85] Fixed the protection check location --- src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 7d890f274..a68243734 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1887,7 +1887,7 @@ public class SlimefunSetup { @Override public boolean onInteract(Player p, MultiBlock mb, Block b) { if (mb.isMultiBlock(SlimefunItem.getByID("SAW_MILL"))) { - if(CSCoreLib.getLib().getProtectionManager().canBuild(p.getUniqueId(), b, true)) { + if(CSCoreLib.getLib().getProtectionManager().canBuild(p.getUniqueId(), b.getRelative(BlockFace.UP), true)) { if (Slimefun.hasUnlocked(p, SlimefunItems.SAW_MILL, true)) { if (b.getRelative(BlockFace.UP).getType() == Material.LOG) { Block log = b.getRelative(BlockFace.UP); From 9d1ad3c86610cc59bbc4ffec419e7df2f74106bf Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Sun, 29 Apr 2018 11:15:07 -0700 Subject: [PATCH 70/85] Removed redundant code --- .../mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index a68243734..2e448335b 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1889,22 +1889,15 @@ public class SlimefunSetup { if (mb.isMultiBlock(SlimefunItem.getByID("SAW_MILL"))) { if(CSCoreLib.getLib().getProtectionManager().canBuild(p.getUniqueId(), b.getRelative(BlockFace.UP), true)) { if (Slimefun.hasUnlocked(p, SlimefunItems.SAW_MILL, true)) { - if (b.getRelative(BlockFace.UP).getType() == Material.LOG) { + if (b.getRelative(BlockFace.UP).getType() == Material.LOG || b.getRelative(BlockFace.UP).getType() == Material.LOG_2) { Block log = b.getRelative(BlockFace.UP); if(!BlockStorage.hasBlockInfo(log)) { - log.getWorld().dropItemNaturally(log.getLocation(), new CustomItem(Material.WOOD, log.getData() % 4, 8)); + ItemStack item = log.getType() == Material.LOG ? new CustomItem(Material.WOOD, log.getData() % 4, 8) : new CustomItem(Material.WOOD, (log.getData() % 2) + 4, 8); + log.getWorld().dropItemNaturally(log.getLocation(), item); log.getWorld().playEffect(log.getLocation(), Effect.STEP_SOUND, log.getType()); log.setType(Material.AIR); } } - else if (b.getRelative(BlockFace.UP).getType() == Material.LOG_2) { - Block log = b.getRelative(BlockFace.UP); - if(!BlockStorage.hasBlockInfo(log)) { - log.getWorld().dropItemNaturally(log.getLocation(), new CustomItem(Material.WOOD, (log.getData() % 2) + 4, 8)); - log.getWorld().playEffect(log.getLocation(), Effect.STEP_SOUND, log.getType()); - log.setType(Material.AIR); - } - } } } return true; From f8112ccb3751b6f93771e1f099da74453b437127 Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Mon, 30 Apr 2018 17:58:04 -0700 Subject: [PATCH 71/85] Prevent SF items from being used in brewing stands --- .../Slimefun/listeners/ItemListener.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index 3950c39eb..7a772c91a 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -8,6 +8,7 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.block.BrewingStand; import org.bukkit.block.Hopper; import org.bukkit.block.Skull; import org.bukkit.entity.FallingBlock; @@ -24,7 +25,9 @@ import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; +import org.bukkit.inventory.BrewerInventory; import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionEffect; @@ -386,4 +389,12 @@ public class ItemListener implements Listener { } } } + + @EventHandler (ignoreCancelled = true) + public void onPreBrew(InventoryClickEvent e) { + Inventory inventory = e.getInventory(); + if (inventory instanceof BrewerInventory && inventory.getHolder() instanceof BrewingStand) { + if(e.getRawSlot() < inventory.getSize()) e.setCancelled(SlimefunItem.getByItem(e.getCursor()) != null); + } + } } From b3b2ec5978a1ffbecc430b4b9bd8e6c55fa9892f Mon Sep 17 00:00:00 2001 From: VoidAngel Date: Mon, 30 Apr 2018 18:00:37 -0700 Subject: [PATCH 72/85] Fixes a bug where mobs could pick up altar probe items --- .../Slimefun/listeners/ItemPickupListener.java | 6 ++++-- .../Slimefun/listeners/ItemPickupListener_1_12.java | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemPickupListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemPickupListener.java index dd8336186..d25ceeda6 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemPickupListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemPickupListener.java @@ -1,6 +1,8 @@ package me.mrCookieSlime.Slimefun.listeners; import me.mrCookieSlime.Slimefun.SlimefunStartup; + +import org.bukkit.ChatColor; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryPickupItemEvent; @@ -20,7 +22,7 @@ public class ItemPickupListener implements Listener { @EventHandler public void onPickup(PlayerPickupItemEvent e) { if (e.getItem().hasMetadata("no_pickup")) e.setCancelled(true); - else if (!e.getItem().hasMetadata("no_pickup") && e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith("&5&dALTAR &3Probe - &e")) { + else if (!e.getItem().hasMetadata("no_pickup") && e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith(ChatColor.translateAlternateColorCodes('&', "&5&dALTAR &3Probe - &e"))) { e.setCancelled(true); e.getItem().remove(); } @@ -29,7 +31,7 @@ public class ItemPickupListener implements Listener { @EventHandler public void onMinecartPickup(InventoryPickupItemEvent e) { if (e.getItem().hasMetadata("no_pickup")) e.setCancelled(true); - else if (!e.getItem().hasMetadata("no_pickup") && e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith("&5&dALTAR &3Probe - &e")) { + else if (!e.getItem().hasMetadata("no_pickup") && e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith(ChatColor.translateAlternateColorCodes('&', "&5&dALTAR &3Probe - &e"))) { e.setCancelled(true); e.getItem().remove(); } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemPickupListener_1_12.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemPickupListener_1_12.java index 644b3be05..ab5243d6a 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemPickupListener_1_12.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemPickupListener_1_12.java @@ -1,6 +1,8 @@ package me.mrCookieSlime.Slimefun.listeners; import me.mrCookieSlime.Slimefun.SlimefunStartup; + +import org.bukkit.ChatColor; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityPickupItemEvent; @@ -22,7 +24,7 @@ public class ItemPickupListener_1_12 implements Listener { @EventHandler public void onPickup(EntityPickupItemEvent e) { if (e.getItem().hasMetadata("no_pickup")) e.setCancelled(true); - else if (!e.getItem().hasMetadata("no_pickup") && e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith("&5&dALTAR &3Probe - &e")) { + else if (!e.getItem().hasMetadata("no_pickup") && e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith(ChatColor.translateAlternateColorCodes('&', "&5&dALTAR &3Probe - &e"))) { e.setCancelled(true); e.getItem().remove(); } @@ -31,7 +33,7 @@ public class ItemPickupListener_1_12 implements Listener { @EventHandler public void onMinecartPickup(InventoryPickupItemEvent e) { if (e.getItem().hasMetadata("no_pickup")) e.setCancelled(true); - else if (!e.getItem().hasMetadata("no_pickup") && e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith("&5&dALTAR &3Probe - &e")) { + else if (!e.getItem().hasMetadata("no_pickup") && e.getItem().getItemStack().hasItemMeta() && e.getItem().getItemStack().getItemMeta().hasDisplayName() && e.getItem().getItemStack().getItemMeta().getDisplayName().startsWith(ChatColor.translateAlternateColorCodes('&', "&5&dALTAR &3Probe - &e"))) { e.setCancelled(true); e.getItem().remove(); } From a65fe55a435ba8b1cbfa271e5838c025138f1414 Mon Sep 17 00:00:00 2001 From: Rick Date: Thu, 3 May 2018 14:41:11 -0400 Subject: [PATCH 73/85] altarinuse addition --- src/me/mrCookieSlime/Slimefun/Variables.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/me/mrCookieSlime/Slimefun/Variables.java b/src/me/mrCookieSlime/Slimefun/Variables.java index 2d5ef8306..d47a44372 100644 --- a/src/me/mrCookieSlime/Slimefun/Variables.java +++ b/src/me/mrCookieSlime/Slimefun/Variables.java @@ -2,10 +2,12 @@ package me.mrCookieSlime.Slimefun; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.UUID; +import org.bukkit.Location; import org.bukkit.entity.Entity; import org.bukkit.inventory.ItemStack; @@ -18,6 +20,7 @@ public class Variables { public static Map enchanting = new HashMap(); public static Map backpack = new HashMap(); + public static HashSet altarinuse = new HashSet(); public static Map> soulbound = new HashMap>(); public static List blocks = new ArrayList(); From d036d297c0b865831d078fceb5d9e326384b5db2 Mon Sep 17 00:00:00 2001 From: Rick Date: Thu, 3 May 2018 14:45:38 -0400 Subject: [PATCH 74/85] Adding alterinuse variable --- src/me/mrCookieSlime/Slimefun/SlimefunStartup.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java index f93c01af5..455eee37b 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java @@ -439,6 +439,7 @@ public class SlimefunStartup extends JavaPlugin { Variables.jump = null; Variables.mode = null; SlimefunGuide.history = null; + Variables.altarinuse = null; Variables.enchanting = null; Variables.backpack = null; Variables.soulbound = null; From 5d830fca94f48a0eeacd20cca05775e23f5ebe99 Mon Sep 17 00:00:00 2001 From: Rick Date: Thu, 3 May 2018 14:47:12 -0400 Subject: [PATCH 75/85] Removes altar and pedistals from altarinuse when finish()-ed. May fix dupe on break during craft (abort()). --- .../Slimefun/AncientAltar/RitualAnimation.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java index ce0b6e711..209fa31f8 100644 --- a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java +++ b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java @@ -1,11 +1,13 @@ package me.mrCookieSlime.Slimefun.AncientAltar; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import me.mrCookieSlime.CSCoreLibPlugin.general.Particles.MC_1_8.ParticleEffect; import me.mrCookieSlime.Slimefun.SlimefunStartup; import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener; +import me.mrCookieSlime.Slimefun.Variables; import org.bukkit.Effect; import org.bukkit.Location; @@ -92,9 +94,9 @@ public class RitualAnimation implements Runnable { private void abort() { running = false; - for (ItemStack stack: items) { - l.getWorld().dropItemNaturally(l, stack); - } +// for (ItemStack stack: items) { +// l.getWorld().dropItemNaturally(l, stack); +// } l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F); altars.remove(altar); } @@ -103,6 +105,12 @@ public class RitualAnimation implements Runnable { l.getWorld().playSound(l, Sound.ENTITY_ZOMBIE_VILLAGER_CURE, 1F, 1F); l.getWorld().playEffect(l, Effect.STEP_SOUND, Material.EMERALD_BLOCK); l.getWorld().dropItemNaturally(l.add(0, 1, 0), output); + + pedestals.forEach((pblock)->{ + Variables.altarinuse.remove(pblock.getLocation()); + }); + Variables.altarinuse.remove(altar.getLocation()); // should re-enable altar blocks on craft completion. + altars.remove(altar); } From 4cde9413ba26713c8129b747c0a9f9c323e594d5 Mon Sep 17 00:00:00 2001 From: Rick Date: Thu, 3 May 2018 14:47:44 -0400 Subject: [PATCH 76/85] Adds checks for and adds to altarinuse. --- .../listeners/AncientAltarListener.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java index 6b01452db..a5a041f01 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java @@ -16,6 +16,7 @@ import me.mrCookieSlime.Slimefun.AncientAltar.RitualAnimation; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.api.BlockStorage; +import me.mrCookieSlime.Slimefun.Variables; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -51,6 +52,10 @@ public class AncientAltarListener implements Listener { SlimefunItem item = BlockStorage.check(b); if (item != null) { if (item.getID().equals("ANCIENT_PEDESTAL")) { + if (Variables.altarinuse.contains(b.getLocation())) { + e.setCancelled(true); + return; + } e.setCancelled(true); Item stack = findItem(b); if (stack == null) { @@ -80,6 +85,11 @@ public class AncientAltarListener implements Listener { } } else if (item.getID().equals("ANCIENT_ALTAR")) { + if (Variables.altarinuse.contains(b.getLocation())) { + e.setCancelled(true); + return; + } + Variables.altarinuse.add(b.getLocation()); // make altarinuse simply because that was the last block clicked. e.setCancelled(true); ItemStack catalyst = new CustomItem(e.getPlayer().getInventory().getItemInMainHand(), 1); @@ -88,6 +98,9 @@ public class AncientAltarListener implements Listener { if (!altars.contains(e.getClickedBlock())) { altars.add(e.getClickedBlock()); if (pedestals.size() == 8) { + pedestals.forEach((pblock)->{ + Variables.altarinuse.add(pblock.getLocation()); + }); if (catalyst != null && !catalyst.getType().equals(Material.AIR)) { List input = new ArrayList(); for (Block pedestal: pedestals) { @@ -105,16 +118,25 @@ public class AncientAltarListener implements Listener { else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-recipe", true); + pedestals.forEach((pblock)->{ + Variables.altarinuse.remove(pblock.getLocation()); + }); + Variables.altarinuse.remove(b.getLocation()); // bad recipe, no longer in use. } } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-catalyst", true); + pedestals.forEach((pblock)->{ + Variables.altarinuse.remove(pblock.getLocation()); + }); + Variables.altarinuse.remove(b.getLocation()); // unkown catalyst, no longer in use } } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.not-enough-pedestals", true, new Variable("%pedestals%", String.valueOf(pedestals.size()))); + Variables.altarinuse.remove(b.getLocation()); // not a valid altar so remove from inuse } } } From e8f3c62e02903d39a1ffdf19faf29f2435e41fc9 Mon Sep 17 00:00:00 2001 From: Rick Date: Thu, 3 May 2018 14:48:25 -0400 Subject: [PATCH 77/85] Removes non UTF-8 chars from Programmable Android (Miner) which broke it. --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 849570de0..b9c2c35bb 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -705,7 +705,7 @@ public class SlimefunItems { 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_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"); From 391e89791109ac998e6c2d25e82f192930b35a08 Mon Sep 17 00:00:00 2001 From: Rick Date: Thu, 3 May 2018 17:20:05 -0400 Subject: [PATCH 78/85] Trying again to refix the UTF-8 characters (I guess they changed the file type too, changed it to UTF-8 to fix this from happening again) --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index b9c2c35bb..435ede70a 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -705,7 +705,7 @@ public class SlimefunItems { 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_MINER = new CustomItem(CustomSkull.getItem("yJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTYzOGEyODU0MWFiM2FlMGE3MjNkNTU3ODczOGUwODc1ODM4OGVjNGMzMzI0N2JkNGNhMTM0ODJhZWYzMzQifX19"), "§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"); From 41da2c4402b35b824d692f0de195a697f0842f9c Mon Sep 17 00:00:00 2001 From: Rick Date: Thu, 3 May 2018 18:50:23 -0400 Subject: [PATCH 79/85] put e back from texture address... don't know why that vanished. --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 435ede70a..849570de0 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -705,7 +705,7 @@ public class SlimefunItems { 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("yJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTYzOGEyODU0MWFiM2FlMGE3MjNkNTU3ODczOGUwODc1ODM4OGVjNGMzMzI0N2JkNGNhMTM0ODJhZWYzMzQifX19"), "§cProgrammable Android &7(Miner)", "", "§8\u21E8 §7Function: Mining", "§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"); From e3bbf4b442687266c84ce664cdb854520cb9c14f Mon Sep 17 00:00:00 2001 From: Rick Date: Thu, 3 May 2018 20:52:32 -0400 Subject: [PATCH 80/85] Fixes Repaired Spawner in the guide... no idea why that's true. --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index d8ad926dd..b76f3cce8 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -331,7 +331,8 @@ public class SlimefunItem { public static SlimefunItem getByItem(ItemStack item) { if (item == null) return null; if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) return getByID("BROKEN_SPAWNER"); - if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REPAIRED_SPAWNER"); + //needs to remain not an item to work in the guide, say what??? + //if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REPAIRED_SPAWNER"); 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; From cc5e7c6e13e8d92c475690ceab508ff31594cc90 Mon Sep 17 00:00:00 2001 From: Rick Date: Thu, 3 May 2018 23:21:14 -0400 Subject: [PATCH 81/85] Stops constant calls to getByItem() for empty book stacks. --- .../Objects/SlimefunItem/machines/AutoDisenchanter.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java index ed6e52c35..27b954281 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoDisenchanter.java @@ -97,7 +97,10 @@ public class AutoDisenchanter extends AContainer { ItemStack item = BlockStorage.getInventory(b).getItemInSlot(slot); // Check if disenchantable - SlimefunItem sfItem = SlimefunItem.getByItem(item); + SlimefunItem sfItem = null; + if ((item != null) && (item.getType() != Material.BOOK)) { // stops endless checks of getByItem for empty book stacks. + sfItem = SlimefunItem.getByItem(item); + } if (sfItem != null && !sfItem.isDisenchantable()) return; // Disenchant From 0d3fa242906fd5d62baf0cc08fdd1d5f9b9f07e3 Mon Sep 17 00:00:00 2001 From: Rick Date: Fri, 4 May 2018 14:44:09 -0400 Subject: [PATCH 82/85] changing again to ampersands... --- src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java index 849570de0..c8894068a 100644 --- a/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java +++ b/src/me/mrCookieSlime/Slimefun/Lists/SlimefunItems.java @@ -705,7 +705,7 @@ public class SlimefunItems { 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_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"); From 07134165d6779b76cb61c3813583e56709d0acb6 Mon Sep 17 00:00:00 2001 From: KyleEstein Date: Fri, 4 May 2018 21:41:24 -0400 Subject: [PATCH 83/85] Implement changes requested by TheBusyBiscuit --- .../SlimefunItem/machines/ElectricDustWasher.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java index 3035f2bbe..ab108de42 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricDustWasher.java @@ -83,19 +83,16 @@ public abstract class ElectricDustWasher extends AContainer { else { for (int slot: getInputSlots()) { if (SlimefunManager.isItemSimiliar(BlockStorage.getInventory(b).getItemInSlot(slot), SlimefunItems.SIFTED_ORE, true)) { - boolean empty_slot = false; if (!legacy_dust_washer) { + boolean empty_slot = false; for (int output_slot: getOutputSlots()) { if (BlockStorage.getInventory(b).getItemInSlot(output_slot) == null) { empty_slot = true; break; } } + if (!empty_slot) return; } - else { - empty_slot = true; - } - if (!empty_slot) return; ItemStack adding = SlimefunItems.IRON_DUST; if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.GOLD_DUST; @@ -108,7 +105,7 @@ public abstract class ElectricDustWasher extends AContainer { else if (SlimefunStartup.chance(100, 25)) adding = SlimefunItems.SILVER_DUST; MachineRecipe r = new MachineRecipe(4 / getSpeed(), new ItemStack[0], new ItemStack[] {adding}); - if (!fits(b, r.getOutput())) return; + if (legacy_dust_washer && !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()); From 80e1a489c880ec2d023d86b01d1a27279792974c Mon Sep 17 00:00:00 2001 From: Rick Date: Sat, 5 May 2018 09:20:10 -0400 Subject: [PATCH 84/85] Fixes repaired/reinforced spawner in guide. --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index b76f3cce8..992acd1d0 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -331,8 +331,7 @@ public class SlimefunItem { public static SlimefunItem getByItem(ItemStack item) { if (item == null) return null; if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) return getByID("BROKEN_SPAWNER"); - //needs to remain not an item to work in the guide, say what??? - //if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REPAIRED_SPAWNER"); + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REINFORCED_SPAWNER"); 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; From 2ef7fbd57595344fb2c3017e93bd709f6db3a514 Mon Sep 17 00:00:00 2001 From: The Busy Bot Date: Sat, 5 May 2018 17:42:27 +0000 Subject: [PATCH 85/85] Updated to Version: v4.1.15 --- pom.xml | 72 ++++++++++++++++++++++++--------------------------------- 1 file changed, 30 insertions(+), 42 deletions(-) diff --git a/pom.xml b/pom.xml index 6f8663b56..731b96145 100644 --- a/pom.xml +++ b/pom.xml @@ -1,19 +1,14 @@ - + 4.0.0 - me.mrCookieSlime Slimefun - 4.1.14 - + v4.1.15 1.8 1.8 - UTF-8 + UTF-8 - paper-repo @@ -27,30 +22,26 @@ worldedit-worldguard-repo http://maven.sk89q.com/repo/ - - jitpack.io - https://jitpack.io - - + + jitpack.io + https://jitpack.io + + robomwm-repo https://dl.bintray.com/robomwm/maven - - ${project.basedir}/src - ${project.basedir}/tests/java - - ${project.basedir}/tests/resources - + + ${project.basedir}/tests/resources + ${project.name} v${project.version} - ${basedir}/src true @@ -60,9 +51,7 @@ - - org.bukkit bukkit @@ -75,17 +64,17 @@ 6.1.1-SNAPSHOT - com.github.TheBusyBiscuit - CS-CoreLib - v1.5.18 - + com.github.TheBusyBiscuit + CS-CoreLib + v1.5.18 + - me.minebuilders - clearlag-core - 2.9.7 - system - ${project.basedir}/lib/Clearlag.jar - + me.minebuilders + clearlag-core + 2.9.7 + system + ${project.basedir}/lib/Clearlag.jar + net.coreprotect CoreProtect @@ -94,17 +83,16 @@ me.mrCookieSlime EmeraldEnchants - 2.0 - system - ${project.basedir}/lib/EmeraldEnchants v2.0.jar + 2.0 + system + ${project.basedir}/lib/EmeraldEnchants v2.0.jar - me.mrCookieSlime - ExoticGarden - 1.2.0 - system - ${project.basedir}/lib/ExoticGarden v1.2.0.jar - + me.mrCookieSlime + ExoticGarden + 1.2.0 + system + ${project.basedir}/lib/ExoticGarden v1.2.0.jar + -