From 06ce57161de42c0e88548f6ec7189e680b18b50e Mon Sep 17 00:00:00 2001 From: StarWishSama Date: Wed, 26 Jun 2019 19:06:36 +0800 Subject: [PATCH] (+) Sync official latest source (+) Translate some texts --- pom.xml | 74 +-- .../Slimefun/AncientAltar/AltarRecipe.java | 15 +- .../Slimefun/AncientAltar/Pedestals.java | 83 ++-- .../Slimefun/Android/ProgrammableAndroid.java | 4 +- .../CSCoreLibSetup/CSCoreLibLoader.java | 11 +- .../Slimefun/Commands/SlimefunCommand.java | 7 +- .../Slimefun/GEO/OreGenSystem.java | 2 +- .../mrCookieSlime/Slimefun/GPS/Elevator.java | 2 +- .../Slimefun/GPS/GPSNetwork.java | 4 +- .../Slimefun/GPS/TeleportationSequence.java | 4 +- .../Slimefun/Hashing/ItemHash.java | 2 +- .../Slimefun/Objects/Research.java | 6 +- .../machines/AutomatedCraftingChamber.java | 4 +- .../machines/ReactorAccessPort.java | 1 + .../Slimefun/Setup/MiscSetup.java | 22 +- .../Slimefun/Setup/ResearchSetup.java | 458 +++++++++--------- .../Slimefun/Setup/SlimefunManager.java | 208 ++++---- .../Slimefun/Setup/SlimefunSetup.java | 21 +- .../mrCookieSlime/Slimefun/SlimefunGuide.java | 47 +- .../Slimefun/SlimefunStartup.java | 37 +- src/me/mrCookieSlime/Slimefun/URID/URID.java | 46 -- src/me/mrCookieSlime/Slimefun/Variables.java | 29 +- .../{URID => api}/AutoSavingTask.java | 4 +- .../mrCookieSlime/Slimefun/api/Backpacks.java | 2 +- .../Slimefun/api/BlockInfoConfig.java | 6 +- .../Slimefun/api/BlockStorage.java | 43 +- .../Slimefun/api/GuideHandler.java | 14 +- src/me/mrCookieSlime/Slimefun/api/Soul.java | 2 +- .../Slimefun/api/TickerTask.java | 42 +- .../Slimefun/api/energy/ChargableBlock.java | 6 +- .../api/energy/EnergyFlowListener.java | 1 + .../api/item_transport/CargoManager.java | 10 +- .../Slimefun/api/item_transport/CargoNet.java | 29 +- .../api/item_transport/ChestManipulator.java | 2 +- .../Slimefun/api/machine/MachineConfig.java | 32 -- .../Slimefun/api/machine/MachineSettings.java | 33 -- .../Slimefun/api/network/Network.java | 14 +- .../Slimefun/holograms/CargoHologram.java | 2 +- .../Slimefun/holograms/EnergyHologram.java | 2 +- .../Slimefun/holograms/ReactorHologram.java | 2 +- .../listeners/AncientAltarListener.java | 299 ++++++------ .../Slimefun/listeners/BowListener.java | 8 +- .../Slimefun/listeners/DamageListener.java | 2 +- .../Slimefun/listeners/ItemListener.java | 15 +- .../Slimefun/listeners/ToolListener.java | 2 +- 45 files changed, 775 insertions(+), 884 deletions(-) delete mode 100644 src/me/mrCookieSlime/Slimefun/URID/URID.java rename src/me/mrCookieSlime/Slimefun/{URID => api}/AutoSavingTask.java (89%) delete mode 100644 src/me/mrCookieSlime/Slimefun/api/machine/MachineConfig.java delete mode 100644 src/me/mrCookieSlime/Slimefun/api/machine/MachineSettings.java diff --git a/pom.xml b/pom.xml index c4e5b70863..c59a9aee72 100644 --- a/pom.xml +++ b/pom.xml @@ -83,42 +83,42 @@ - - - org.bukkit - bukkit - 1.14-R0.1-SNAPSHOT - - - com.sk89q.worldedit - worldedit-bukkit - 7.0.0-SNAPSHOT - - - com.github.TheBusyBiscuit - CS-CoreLib - v1.6 - - - me.minebuilders - clearlag-core - 2.9.7 - - - net.coreprotect - coreprotect - 2.16.0 - - - me.mrCookieSlime - EmeraldEnchants - 2.0 - - - me.mrCookieSlime - ExoticGarden - 1.7.0 - - + + + org.bukkit + bukkit + 1.14.2-R0.1-SNAPSHOT + + + com.sk89q.worldedit + worldedit-bukkit + 7.0.0 + + + com.github.TheBusyBiscuit + CS-CoreLib + v1.6.1 + + + me.minebuilders + clearlag-core + 2.9.7 + + + net.coreprotect + coreprotect + 2.16.3 + + + me.mrCookieSlime + EmeraldEnchants + 2.0 + + + me.mrCookieSlime + ExoticGarden + 1.2.0 + + diff --git a/src/me/mrCookieSlime/Slimefun/AncientAltar/AltarRecipe.java b/src/me/mrCookieSlime/Slimefun/AncientAltar/AltarRecipe.java index 7c94e8f1bb..57e2865ddb 100644 --- a/src/me/mrCookieSlime/Slimefun/AncientAltar/AltarRecipe.java +++ b/src/me/mrCookieSlime/Slimefun/AncientAltar/AltarRecipe.java @@ -13,10 +13,17 @@ public class AltarRecipe { public AltarRecipe(List input, ItemStack output) { this.catalyst = input.get(4); - this.input = new ArrayList(); - for (int i = 0; i < input.size(); i++) { - if (i != 4) this.input.add(input.get(i)); - } + this.input = new ArrayList<>(); + this.input.add(input.get(0)); + this.input.add(input.get(1)); + this.input.add(input.get(2)); + this.input.add(input.get(5)); + + this.input.add(input.get(8)); + this.input.add(input.get(7)); + this.input.add(input.get(6)); + this.input.add(input.get(3)); + this.output = output; Pedestals.recipes.add(this); diff --git a/src/me/mrCookieSlime/Slimefun/AncientAltar/Pedestals.java b/src/me/mrCookieSlime/Slimefun/AncientAltar/Pedestals.java index aed7347585..4d7ace3ab8 100644 --- a/src/me/mrCookieSlime/Slimefun/AncientAltar/Pedestals.java +++ b/src/me/mrCookieSlime/Slimefun/AncientAltar/Pedestals.java @@ -15,35 +15,34 @@ public class Pedestals { - public static List recipes = new ArrayList(); + public static List recipes = new ArrayList<>(); public static List getPedestals(Block altar) { - List list = new ArrayList(); - + List list = new ArrayList<>(); + if (BlockStorage.check(altar.getRelative(2, 0, -2), "ANCIENT_PEDESTAL")) { + list.add(altar.getRelative(2, 0, -2)); + } if (BlockStorage.check(altar.getRelative(3, 0, 0), "ANCIENT_PEDESTAL")) { list.add(altar.getRelative(3, 0, 0)); } - if (BlockStorage.check(altar.getRelative(-3, 0, 0), "ANCIENT_PEDESTAL")) { - list.add(altar.getRelative(-3, 0, 0)); - } - if (BlockStorage.check(altar.getRelative(0, 0, 3), "ANCIENT_PEDESTAL")) { - list.add(altar.getRelative(0, 0, 3)); - } - if (BlockStorage.check(altar.getRelative(0, 0, -3), "ANCIENT_PEDESTAL")) { - list.add(altar.getRelative(0, 0, -3)); - } if (BlockStorage.check(altar.getRelative(2, 0, 2), "ANCIENT_PEDESTAL")) { list.add(altar.getRelative(2, 0, 2)); } - if (BlockStorage.check(altar.getRelative(2, 0, -2), "ANCIENT_PEDESTAL")) { - list.add(altar.getRelative(2, 0, -2)); + if (BlockStorage.check(altar.getRelative(0, 0, 3), "ANCIENT_PEDESTAL")) { + list.add(altar.getRelative(0, 0, 3)); } if (BlockStorage.check(altar.getRelative(-2, 0, 2), "ANCIENT_PEDESTAL")) { list.add(altar.getRelative(-2, 0, 2)); } + if (BlockStorage.check(altar.getRelative(-3, 0, 0), "ANCIENT_PEDESTAL")) { + list.add(altar.getRelative(-3, 0, 0)); + } if (BlockStorage.check(altar.getRelative(-2, 0, -2), "ANCIENT_PEDESTAL")) { list.add(altar.getRelative(-2, 0, -2)); } + if (BlockStorage.check(altar.getRelative(0, 0, -3), "ANCIENT_PEDESTAL")) { + list.add(altar.getRelative(0, 0, -3)); + } return list; } @@ -62,38 +61,28 @@ public static ItemStack getRecipeOutput(ItemStack catalyst, List inpu return checkRecipe(catalyst, input); } - private static ItemStack checkRecipe(ItemStack catalyst, List input) { - AltarRecipe r = null; - for (AltarRecipe recipe : recipes) { - if (SlimefunManager.isItemSimiliar(catalyst, recipe.getCatalyst(), true)) { - r = recipe; - - List copy = new ArrayList(input); - - recipe: - for (ItemStack item : recipe.getInput()) { - Iterator iterator = copy.iterator(); - boolean match = false; - - items: - while (iterator.hasNext()) { - ItemStack altar_item = iterator.next(); - if (SlimefunManager.isItemSimiliar(altar_item, item, true)) { - match = true; - iterator.remove(); - break items; - } - } - - if (!match) { - r = null; - break recipe; - } - } + private static ItemStack checkRecipe(ItemStack catalyst, List items) { + loop: + for (AltarRecipe recipe: recipes) { + if (!SlimefunManager.isItemSimiliar(catalyst, recipe.getCatalyst(), true)) { + continue; + } + + for (int i = 0; i < 8; i++) { + if (!SlimefunManager.isItemSimiliar(items.get(i), recipe.getInput().get(0), true)) { + continue; + } + + for (int j = 1; j < 8; j++) { + if (!SlimefunManager.isItemSimiliar(items.get((i + j) % items.size()), recipe.getInput().get(j), true)) { + continue loop; + } + } + + return recipe.getOutput(); + } + } - if (r != null) return r.getOutput(); - } - } return null; - } -} + } +} \ No newline at end of file diff --git a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java index 2ea25dc4f5..26e6e58eae 100644 --- a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java @@ -73,7 +73,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem { private static final ItemStack[] fish = new ItemStack[] {new ItemStack(Material.COD), new ItemStack(Material.SALMON), new ItemStack(Material.PUFFERFISH), new ItemStack(Material.TROPICAL_FISH), new ItemStack(Material.STRING), new ItemStack(Material.BONE), new ItemStack(Material.STICK)}; private static final List directions = Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST); - private static final List blockblacklist = new ArrayList(); + private static final List blockblacklist = new ArrayList<>(); static { blockblacklist.add(Material.BEDROCK); @@ -84,7 +84,7 @@ public abstract class ProgrammableAndroid extends SlimefunItem { blockblacklist.add(Material.REPEATING_COMMAND_BLOCK); } - private Set recipes = new HashSet(); + private Set recipes = new HashSet<>(); public String getInventoryTitle() { return "可编程式机器人"; diff --git a/src/me/mrCookieSlime/Slimefun/CSCoreLibSetup/CSCoreLibLoader.java b/src/me/mrCookieSlime/Slimefun/CSCoreLibSetup/CSCoreLibLoader.java index a5c8a16721..ec73f5d665 100644 --- a/src/me/mrCookieSlime/Slimefun/CSCoreLibSetup/CSCoreLibLoader.java +++ b/src/me/mrCookieSlime/Slimefun/CSCoreLibSetup/CSCoreLibLoader.java @@ -12,8 +12,11 @@ import java.net.URLConnection; import org.bukkit.plugin.Plugin; +import com.google.gson.JsonArray; import org.json.simple.JSONArray; import org.json.simple.JSONObject; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import org.json.simple.JSONValue; public class CSCoreLibLoader { @@ -62,9 +65,11 @@ private boolean connect() { connection.setDoOutput(true); final BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); - final JSONArray array = (JSONArray) JSONValue.parse(reader.readLine()); - download = traceURL(((String) ((JSONObject) array.get(array.size() - 1)).get("downloadUrl")).replace("https:", "http:")); - file = new File("plugins/" + (String) ((JSONObject) array.get(array.size() - 1)).get("name") + ".jar"); + final JsonArray array = new JsonParser().parse(reader).getAsJsonArray(); + final JsonObject json = array.get(array.size() - 1).getAsJsonObject(); + + download = traceURL(json.get("downloadUrl").getAsString().replace("https:", "http:")); + file = new File("plugins/" + json.get("name").getAsString() + ".jar"); return true; } catch (IOException e) { diff --git a/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java b/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java index 72d8277172..ec06385861 100644 --- a/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java +++ b/src/me/mrCookieSlime/Slimefun/Commands/SlimefunCommand.java @@ -42,9 +42,9 @@ public class SlimefunCommand implements CommandExecutor, Listener { public SlimefunStartup plugin; - public static List arguments = new ArrayList(); - public static List descriptions = new ArrayList(); - public static List tabs = new ArrayList(); + public static List arguments = new ArrayList<>(); + public static List descriptions = new ArrayList<>(); + public static List tabs = new ArrayList<>(); public SlimefunCommand(SlimefunStartup plugin) { this.plugin = plugin; @@ -92,7 +92,6 @@ public SlimefunCommand(SlimefunStartup plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); } - @SuppressWarnings("deprecation") @Override public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { if (args.length == 0) { diff --git a/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java b/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java index 280f8727ea..054d4c6a97 100644 --- a/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java +++ b/src/me/mrCookieSlime/Slimefun/GEO/OreGenSystem.java @@ -12,7 +12,7 @@ public class OreGenSystem { - public static Map map = new HashMap(); + public static Map map = new HashMap<>(); public static Collection listResources() { return map.values(); diff --git a/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java b/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java index 4c8bb0072f..39e8e13e7a 100644 --- a/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java +++ b/src/me/mrCookieSlime/Slimefun/GPS/Elevator.java @@ -24,7 +24,7 @@ public class Elevator { - public static List ignored = new ArrayList(); + public static List ignored = new ArrayList<>(); public static void openEditor(Player p, final Block b) { ChestMenu menu = new ChestMenu("电梯设置"); diff --git a/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java b/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java index 5fde10b344..c0f89d720a 100644 --- a/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java +++ b/src/me/mrCookieSlime/Slimefun/GPS/GPSNetwork.java @@ -35,12 +35,12 @@ public class GPSNetwork { - private Map> transmitters = new HashMap>(); + private Map> transmitters = new HashMap<>(); private int[] border = new int[] {0, 1, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 26, 27, 35, 36, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53}; private int[] inventory = new int[] {19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43}; public void updateTransmitter(Block b, UUID uuid, NetworkStatus status) { - Set set = new HashSet(); + Set set = new HashSet<>(); if (transmitters.containsKey(uuid)) set = transmitters.get(uuid); if (status.equals(NetworkStatus.ONLINE)) { if (!set.contains(b.getLocation())) { diff --git a/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java b/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java index 2d0fdeb6c5..eae967f8c5 100644 --- a/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java +++ b/src/me/mrCookieSlime/Slimefun/GPS/TeleportationSequence.java @@ -19,7 +19,7 @@ public class TeleportationSequence { - public static Set players = new HashSet(); + public static Set players = new HashSet<>(); public static void start(UUID uuid, int complexity, Location source, Location destination, boolean resistance) { players.add(uuid); @@ -53,7 +53,7 @@ private static void cancel(UUID uuid, Player p) { players.remove(uuid); if (p != null) { try { - TitleBuilder title = (TitleBuilder) new TitleBuilder(20, 60, 20).addText(ChatColor.translateAlternateColorCodes('&', "&4Teleportation cancelled")); + TitleBuilder title = (TitleBuilder) new TitleBuilder(20, 60, 20).addText(ChatColor.translateAlternateColorCodes('&', "&4传送已取消")); TitleBuilder subtitle = (TitleBuilder) new TitleBuilder(20, 60, 20).addText(ChatColor.translateAlternateColorCodes('&', "&40%")); title.send(TitleType.TITLE, p); diff --git a/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java b/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java index 039b19e0d3..c5ebb2c6ce 100644 --- a/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java +++ b/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java @@ -15,7 +15,7 @@ public class ItemHash { public static MessageDigest digest; public static int LENGTH; - public static Map map = new HashMap(); + public static Map map = new HashMap<>(); static { try { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/Research.java b/src/me/mrCookieSlime/Slimefun/Objects/Research.java index b5a0bcbf0b..670d9aef6f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/Research.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/Research.java @@ -48,12 +48,12 @@ public class Research { * @since 4.0 * @see ResearchSetup */ - public static List list = new ArrayList(); + public static List list = new ArrayList<>(); /** * Contains all the players (UUIDs) that are currently unlocking a research. * @since 4.0 */ - public static List researching = new ArrayList(); + public static List researching = new ArrayList<>(); /** * Whether researching in creative is free. * @since 4.0 @@ -87,7 +87,7 @@ public Research(int id, String name, int cost) { this.id = id; this.name = name; this.cost = cost; - this.items = new ArrayList(); + this.items = new ArrayList<>(); } /** diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java index 07090dfc17..577737c728 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java @@ -242,8 +242,8 @@ protected void tick(Block b) { ItemStack item = menu.getItemInSlot(getInputSlots()[j]); if (item != null && item.getAmount() == 1) return; - - builder.append(CustomItemSerializer.serialize(item, ItemFlag.DATA, ItemFlag.ITEMMETA_DISPLAY_NAME, ItemFlag.ITEMMETA_LORE, ItemFlag.MATERIAL)); + + builder.append(CustomItemSerializer.serialize(item, ItemFlag.MATERIAL, ItemFlag.ITEMMETA_DISPLAY_NAME, ItemFlag.ITEMMETA_LORE)); i++; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java index 5b43f85af5..507d0740e6 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java @@ -60,6 +60,7 @@ public int[] getSlotsAccessedByItemTransport(ItemTransportFlow flow) { public int[] getSlotsAccessedByItemTransport(BlockMenu menu, ItemTransportFlow flow, ItemStack item) { if (flow.equals(ItemTransportFlow.INSERT)) { if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REACTOR_COOLANT_CELL, true)) return getCoolantSlots(); + else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.NETHER_ICE_COOLANT_CELL, true)) return getCoolantSlots(); else return getFuelSlots(); } else return getOutputSlots(); diff --git a/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java index 2ce55ca85f..1f74010c95 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/MiscSetup.java @@ -29,7 +29,7 @@ public class MiscSetup { - public static List post_handlers = new ArrayList(); + public static List post_handlers = new ArrayList<>(); public static void setupMisc() { if (SlimefunItem.getByID("COMMON_TALISMAN") != null && (Boolean) Slimefun.getItemValue("COMMON_TALISMAN", "recipe-requires-nether-stars")) { @@ -59,9 +59,9 @@ else if (item.getItem() == null) { } } - List pre = new ArrayList(); - List init = new ArrayList(); - List post = new ArrayList(); + List pre = new ArrayList<>(); + List init = new ArrayList<>(); + List post = new ArrayList<>(); for (SlimefunItem item: SlimefunItem.list()) { if (item instanceof Alloy || item instanceof ReplacingAlloy) pre.add(item); @@ -102,20 +102,22 @@ else if (item.getItem() == null) { // } // } - for (ItemStack[] inputs: RecipeType.getRecipeInputList((SlimefunMachine) SlimefunItem.getByID("ENHANCED_CRAFTING_TABLE"))) { + SlimefunMachine machine = (SlimefunMachine) SlimefunItem.getByID("ENHANCED_CRAFTING_TABLE"); + for (ItemStack[] inputs: RecipeType.getRecipeInputList(machine)) { + StringBuilder builder = new StringBuilder(); int i = 0; for (ItemStack item: inputs) { if (i > 0) { builder.append(" "); } - - builder.append(CustomItemSerializer.serialize(item, ItemFlag.DATA, ItemFlag.ITEMMETA_DISPLAY_NAME, ItemFlag.ITEMMETA_LORE, ItemFlag.MATERIAL)); + + builder.append(CustomItemSerializer.serialize(item, ItemFlag.MATERIAL, ItemFlag.ITEMMETA_DISPLAY_NAME, ItemFlag.ITEMMETA_LORE)); i++; } - - AutomatedCraftingChamber.recipes.put(builder.toString(), RecipeType.getRecipeOutputList((SlimefunMachine) SlimefunItem.getByID("ENHANCED_CRAFTING_TABLE"), inputs)); + + AutomatedCraftingChamber.recipes.put(builder.toString(), RecipeType.getRecipeOutputList(machine, inputs)); } } @@ -155,7 +157,7 @@ else if (item.getItem() == null) { if (input == null) input = recipe; else { if (input[0] != null && recipe[0] != null) { - List inputs = new ArrayList(); + List inputs = new ArrayList<>(); boolean dust = false; for (ItemStack i: input) { if (i != null) { diff --git a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java index 5e049f25ca..6ec13fb528 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/ResearchSetup.java @@ -8,232 +8,232 @@ import org.bukkit.inventory.ItemStack; public class ResearchSetup { - - public static void setupResearches() { - Slimefun.registerResearch(new Research(0, "Walking Sticks", 1), SlimefunItems.GRANDMAS_WALKING_STICK, SlimefunItems.GRANDPAS_WALKING_STICK); - Slimefun.registerResearch(new Research(1, "Portable Crafter", 1), SlimefunItems.PORTABLE_CRAFTER); - Slimefun.registerResearch(new Research(2, "Fortune Cookie", 1), SlimefunItems.FORTUNE_COOKIE); - Slimefun.registerResearch(new Research(4, "Portable Dustbin", 2), SlimefunItems.PORTABLE_DUSTBIN); - Slimefun.registerResearch(new Research(5, "Beef Jerky", 2), SlimefunItems.BEEF_JERKY); - Slimefun.registerResearch(new Research(6, "Armor Crafting", 2), SlimefunItems.ARMOR_FORGE); - Slimefun.registerResearch(new Research(8, "Lumps and Magic", 3), new ItemStack[] {SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_3}); - Slimefun.registerResearch(new Research(9, "Ender Backpack", 4), new ItemStack[] {SlimefunItems.ENDER_BACKPACK}); - Slimefun.registerResearch(new Research(7, "Glowstone Armor", 3), new ItemStack[] {SlimefunItems.GLOWSTONE_HELMET, SlimefunItems.GLOWSTONE_CHESTPLATE, SlimefunItems.GLOWSTONE_LEGGINGS, SlimefunItems.GLOWSTONE_BOOTS}); - Slimefun.registerResearch(new Research(10, "Ender Armor", 4), new ItemStack[] {SlimefunItems.ENDER_HELMET, SlimefunItems.ENDER_CHESTPLATE, SlimefunItems.ENDER_LEGGINGS, SlimefunItems.ENDER_BOOTS}); - Slimefun.registerResearch(new Research(11, "Magic Eye of Ender", 4), new ItemStack[] {SlimefunItems.MAGIC_EYE_OF_ENDER}); - Slimefun.registerResearch(new Research(12, "Magic Sugar", 4), new ItemStack[] {SlimefunItems.MAGIC_SUGAR}); - Slimefun.registerResearch(new Research(13, "Monster Jerky", 5), new ItemStack[] {SlimefunItems.MONSTER_JERKY}); - Slimefun.registerResearch(new Research(14, "Slime Armor", 5), new ItemStack[] {SlimefunItems.SLIME_HELMET, SlimefunItems.SLIME_CHESTPLATE, SlimefunItems.SLIME_LEGGINGS, SlimefunItems.SLIME_BOOTS}); - Slimefun.registerResearch(new Research(15, "Sword of Beheading", 6), new ItemStack[] {SlimefunItems.SWORD_OF_BEHEADING}); - Slimefun.registerResearch(new Research(16, "Electric Work", 8), new ItemStack[] {SlimefunItems.BASIC_CIRCUIT_BOARD}); - Slimefun.registerResearch(new Research(17, "Advanced Electricity", 9), new ItemStack[] {SlimefunItems.ADVANCED_CIRCUIT_BOARD}); - Slimefun.registerResearch(new Research(18, "Hot Smelting", 10), new ItemStack[] {SlimefunItems.SMELTERY}); - Slimefun.registerResearch(new Research(19, "Steel Age", 11), new ItemStack[] {SlimefunItems.STEEL_INGOT}); - Slimefun.registerResearch(new Research(20, "Important Power-Related Items", 12), new ItemStack[] {SlimefunItems.SULFATE, SlimefunItems.POWER_CRYSTAL}); - Slimefun.registerResearch(new Research(21, "Your first Battery", 10), new ItemStack[] {SlimefunItems.BATTERY}); - Slimefun.registerResearch(new Research(22, "Steel Plating", 14), new ItemStack[] {SlimefunItems.STEEL_PLATE}); - Slimefun.registerResearch(new Research(23, "Steel Thruster", 14), new ItemStack[] {SlimefunItems.STEEL_THRUSTER}); - Slimefun.registerResearch(new Research(24, "Parachute", 15), new ItemStack[] {SlimefunItems.PARACHUTE}); - Slimefun.registerResearch(new Research(25, "Grappling Hook", 15), new ItemStack[] {SlimefunItems.GRAPPLING_HOOK, SlimefunItems.HOOK, SlimefunItems.CHAIN}); - Slimefun.registerResearch(new Research(26, "Jetpacks", 22), new ItemStack[] {SlimefunItems.DURALUMIN_JETPACK, SlimefunItems.BILLON_JETPACK, SlimefunItems.SOLDER_JETPACK, SlimefunItems.STEEL_JETPACK, SlimefunItems.DAMASCUS_STEEL_JETPACK, SlimefunItems.REINFORCED_ALLOY_JETPACK}); - Slimefun.registerResearch(new Research(27, "Multi Tools", 18), new ItemStack[] {SlimefunItems.DURALUMIN_MULTI_TOOL, SlimefunItems.SOLDER_MULTI_TOOL, SlimefunItems.BILLON_MULTI_TOOL, SlimefunItems.STEEL_MULTI_TOOL, SlimefunItems.DAMASCUS_STEEL_MULTI_TOOL, SlimefunItems.REINFORCED_ALLOY_MULTI_TOOL}); - Slimefun.registerResearch(new Research(28, "Solar Power", 17), new ItemStack[] {SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_HELMET}); - Slimefun.registerResearch(new Research(29, "Elemental Staves", 17), new ItemStack[] {SlimefunItems.STAFF_ELEMENTAL}); - Slimefun.registerResearch(new Research(30, "Grind Stone", 4), new ItemStack[] {SlimefunItems.GRIND_STONE}); - Slimefun.registerResearch(new Research(31, "Cactus Suit", 5), new ItemStack[] {SlimefunItems.CACTUS_BOOTS, SlimefunItems.CACTUS_CHESTPLATE, SlimefunItems.CACTUS_HELMET, SlimefunItems.CACTUS_LEGGINGS}); - Slimefun.registerResearch(new Research(32, "Gold Pan", 5), new ItemStack[] {SlimefunItems.GOLD_PAN}); - Slimefun.registerResearch(new Research(33, "Magical Book Binding", 5), new ItemStack[] {SlimefunItems.MAGICAL_BOOK_COVER}); - Slimefun.registerResearch(new Research(34, "New Metals", 6), new ItemStack[] {SlimefunItems.COPPER_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ZINC_INGOT, SlimefunItems.MAGNESIUM_INGOT}); - Slimefun.registerResearch(new Research(35, "Ore Doubling", 6), new ItemStack[] {SlimefunItems.ORE_CRUSHER}); - Slimefun.registerResearch(new Research(36, "Bronze Creation", 8), new ItemStack[] {SlimefunItems.BRONZE_INGOT}); - Slimefun.registerResearch(new Research(37, "Advanced Alloys", 12), new ItemStack[] {SlimefunItems.BILLON_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.BRASS_INGOT}); - Slimefun.registerResearch(new Research(38, "Carbon Creation", 9), new ItemStack[] {SlimefunItems.COMPRESSOR, SlimefunItems.CARBON}); - Slimefun.registerResearch(new Research(39, "Bakery Innovation", 1), new ItemStack[] {SlimefunItems.WHEAT_FLOUR}); - Slimefun.registerResearch(new Research(40, "Gilded Iron Armor", 16), new ItemStack[] {SlimefunItems.GILDED_IRON_HELMET, SlimefunItems.GILDED_IRON_CHESTPLATE, SlimefunItems.GILDED_IRON_LEGGINGS, SlimefunItems.GILDED_IRON_BOOTS}); - Slimefun.registerResearch(new Research(41, "Synthetic Diamonds", 10), new ItemStack[] {SlimefunItems.COMPRESSED_CARBON, SlimefunItems.CARBON_CHUNK, SlimefunItems.SYNTHETIC_DIAMOND}); - Slimefun.registerResearch(new Research(42, "Pressure Chamber", 14), new ItemStack[] {SlimefunItems.PRESSURE_CHAMBER}); - Slimefun.registerResearch(new Research(43, "Synthetic Sapphires", 16), new ItemStack[] {SlimefunItems.SYNTHETIC_SAPPHIRE}); - Slimefun.registerResearch(new Research(45, "Damascus Steel", 17), new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_INGOT}); - Slimefun.registerResearch(new Research(46, "Damascus Steel Armor", 18), new ItemStack[] {SlimefunItems.DAMASCUS_STEEL_HELMET, SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, SlimefunItems.DAMASCUS_STEEL_LEGGINGS, SlimefunItems.DAMASCUS_STEEL_BOOTS}); - Slimefun.registerResearch(new Research(47, "Reinforced Alloy", 22), new ItemStack[] {SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT}); - Slimefun.registerResearch(new Research(48, "Black Diamonds", 26), new ItemStack[] {SlimefunItems.RAW_CARBONADO, SlimefunItems.CARBONADO}); - Slimefun.registerResearch(new Research(50, "Magic Workbench", 12), new ItemStack[] {SlimefunItems.MAGIC_WORKBENCH}); - Slimefun.registerResearch(new Research(51, "Wind Staff", 17), new ItemStack[] {SlimefunItems.STAFF_WIND}); - Slimefun.registerResearch(new Research(52, "Reinforced Armor", 26), new ItemStack[] {SlimefunItems.REINFORCED_ALLOY_HELMET, SlimefunItems.REINFORCED_ALLOY_CHESTPLATE, SlimefunItems.REINFORCED_ALLOY_LEGGINGS, SlimefunItems.REINFORCED_ALLOY_BOOTS}); - Slimefun.registerResearch(new Research(53, "Ore Washer", 5), new ItemStack[] {SlimefunItems.ORE_WASHER, SlimefunItems.STONE_CHUNK, SlimefunItems.SIFTED_ORE}); - Slimefun.registerResearch(new Research(54, "Pure Gold", 7), new ItemStack[] {SlimefunItems.GOLD_4K, SlimefunItems.GOLD_6K, SlimefunItems.GOLD_8K, SlimefunItems.GOLD_10K, SlimefunItems.GOLD_12K, SlimefunItems.GOLD_14K, SlimefunItems.GOLD_16K, SlimefunItems.GOLD_18K, SlimefunItems.GOLD_20K, SlimefunItems.GOLD_22K, SlimefunItems.GOLD_24K}); - Slimefun.registerResearch(new Research(55, "Silicon Valley", 12), new ItemStack[] {SlimefunItems.SILICON, SlimefunItems.FERROSILICON}); - Slimefun.registerResearch(new Research(56, "Fire Staff", 2), new ItemStack[] {SlimefunItems.STAFF_FIRE}); - Slimefun.registerResearch(new Research(57, "Smelters Pickaxe", 17), new ItemStack[] {SlimefunItems.AUTO_SMELT_PICKAXE}); - Slimefun.registerResearch(new Research(58, "Common Talisman", 14), new ItemStack[] {SlimefunItems.TALISMAN}); - Slimefun.registerResearch(new Research(59, "Talisman of the Anvil", 18), new ItemStack[] {SlimefunItems.TALISMAN_ANVIL}); - Slimefun.registerResearch(new Research(60, "Talisman of the Miner", 18), new ItemStack[] {SlimefunItems.TALISMAN_MINER}); - Slimefun.registerResearch(new Research(61, "Talisman of the Hunter", 18), new ItemStack[] {SlimefunItems.TALISMAN_HUNTER}); - Slimefun.registerResearch(new Research(62, "Talisman of the Lava Walker", 18), new ItemStack[] {SlimefunItems.TALISMAN_LAVA}); - Slimefun.registerResearch(new Research(63, "Talisman of the Water Breather", 18), new ItemStack[] {SlimefunItems.TALISMAN_WATER}); - Slimefun.registerResearch(new Research(64, "Talisman of the Angel", 18), new ItemStack[] {SlimefunItems.TALISMAN_ANGEL}); - Slimefun.registerResearch(new Research(65, "Talisman of the Firefighter", 18), new ItemStack[] {SlimefunItems.TALISMAN_FIRE}); - Slimefun.registerResearch(new Research(67, "Firey Situation", 14), SlimefunItems.LAVA_CRYSTAL); - Slimefun.registerResearch(new Research(68, "Talisman of the Magician", 20), SlimefunItems.TALISMAN_MAGICIAN); - Slimefun.registerResearch(new Research(69, "Talisman of the Traveller", 20), SlimefunItems.TALISMAN_TRAVELLER); - Slimefun.registerResearch(new Research(70, "Talisman of the Warrior", 20), SlimefunItems.TALISMAN_WARRIOR); - Slimefun.registerResearch(new Research(71, "Talisman of the Knight", 20), SlimefunItems.TALISMAN_KNIGHT); - Slimefun.registerResearch(new Research(72, "Shiny Iron", 11), SlimefunItems.GILDED_IRON); - Slimefun.registerResearch(new Research(73, "Fake Gem", 17), SlimefunItems.SYNTHETIC_EMERALD); - Slimefun.registerResearch(new Research(74, "Chainmail Armor", 8), new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)); - Slimefun.registerResearch(new Research(75, "Talisman of the Whirlwind", 19), SlimefunItems.TALISMAN_WHIRLWIND); - Slimefun.registerResearch(new Research(76, "Talisman of the Wizard", 22), SlimefunItems.TALISMAN_WIZARD); - Slimefun.registerResearch(new Research(77, "Lumber Axe", 21), SlimefunItems.LUMBER_AXE); - Slimefun.registerResearch(new Research(79, "Hazmat Suit", 21), SlimefunItems.SCUBA_HELMET, SlimefunItems.HAZMATSUIT_CHESTPLATE, SlimefunItems.HAZMATSUIT_LEGGINGS, SlimefunItems.RUBBER_BOOTS); - Slimefun.registerResearch(new Research(80, "Radioactive", 30), SlimefunItems.TINY_URANIUM, SlimefunItems.SMALL_URANIUM, SlimefunItems.URANIUM); - Slimefun.registerResearch(new Research(81, "Ore Purification", 25), SlimefunItems.CRUSHED_ORE, SlimefunItems.PULVERIZED_ORE, SlimefunItems.PURE_ORE_CLUSTER); - Slimefun.registerResearch(new Research(84, "Redstone Alloy", 16), SlimefunItems.REDSTONE_ALLOY); - Slimefun.registerResearch(new Research(85, "Top Tier Machines", 24), SlimefunItems.CARBONADO_MULTI_TOOL, SlimefunItems.CARBONADO_JETPACK, SlimefunItems.CARBONADO_JETBOOTS); - Slimefun.registerResearch(new Research(86, "First Aid", 2), SlimefunItems.CLOTH, SlimefunItems.RAG, SlimefunItems.BANDAGE, SlimefunItems.SPLINT, SlimefunItems.CAN, SlimefunItems.VITAMINS, SlimefunItems.MEDICINE); - Slimefun.registerResearch(new Research(87, "Shiny Armor", 13), SlimefunItems.GOLD_HELMET, SlimefunItems.GOLD_CHESTPLATE, SlimefunItems.GOLD_LEGGINGS, SlimefunItems.GOLD_BOOTS); - Slimefun.registerResearch(new Research(89, "Night Vision Goggles", 10), SlimefunItems.NIGHT_VISION_GOGGLES); - Slimefun.registerResearch(new Research(90, "Pickaxe of Containment", 14), SlimefunItems.PICKAXE_OF_CONTAINMENT, SlimefunItems.BROKEN_SPAWNER); - Slimefun.registerResearch(new Research(91, "Hercules Pickaxe", 28), SlimefunItems.HERCULES_PICKAXE); - Slimefun.registerResearch(new Research(92, "Saw Mill", 2), SlimefunItems.SAW_MILL); - Slimefun.registerResearch(new Research(93, "Slimy Steel Armor", 27), SlimefunItems.SLIME_HELMET_STEEL, SlimefunItems.SLIME_CHESTPLATE_STEEL, SlimefunItems.SLIME_LEGGINGS_STEEL, SlimefunItems.SLIME_BOOTS_STEEL); - Slimefun.registerResearch(new Research(94, "Blade of Vampires", 26), SlimefunItems.BLADE_OF_VAMPIRES); - Slimefun.registerResearch(new Research(95, "Lazy Mining", 40), SlimefunItems.DIGITAL_MINER); - Slimefun.registerResearch(new Research(96, "Water Staff", 8), SlimefunItems.STAFF_WATER); - Slimefun.registerResearch(new Research(97, "Golden City", 19), SlimefunItems.GOLD_24K_BLOCK); - Slimefun.registerResearch(new Research(98, "Advanced Mining 101", 42), SlimefunItems.ADVANCED_DIGITAL_MINER); - Slimefun.registerResearch(new Research(99, "Composting Dirt", 3), SlimefunItems.COMPOSTER); - Slimefun.registerResearch(new Research(100, "Farmer Shoes", 4), SlimefunItems.FARMER_SHOES); - Slimefun.registerResearch(new Research(101, "Explosive Pickaxe", 28), SlimefunItems.EXPLOSIVE_PICKAXE); - Slimefun.registerResearch(new Research(102, "Automated Gold Pan", 17), SlimefunItems.AUTOMATED_PANNING_MACHINE); - Slimefun.registerResearch(new Research(103, "Boots of the Stomper", 19), SlimefunItems.BOOTS_OF_THE_STOMPER); - Slimefun.registerResearch(new Research(104, "Pickaxe of the Seeker", 19), SlimefunItems.PICKAXE_OF_THE_SEEKER); - Slimefun.registerResearch(new Research(105, "Backpacks", 15), SlimefunItems.BACKPACK_LARGE, SlimefunItems.BACKPACK_MEDIUM, SlimefunItems.BACKPACK_SMALL); - Slimefun.registerResearch(new Research(106, "Woven Backpack", 19), SlimefunItems.WOVEN_BACKPACK); - Slimefun.registerResearch(new Research(107, "Crucible", 13), SlimefunItems.CRUCIBLE); - Slimefun.registerResearch(new Research(108, "Gilded Backpack", 22), SlimefunItems.GILDED_BACKPACK); - Slimefun.registerResearch(new Research(110, "Being a Tank", 28), SlimefunItems.HEAVY_METAL_HELMET, SlimefunItems.HEAVY_METAL_CHESTPLATE, SlimefunItems.HEAVY_METAL_LEGGINGS, SlimefunItems.HEAVY_METAL_BOOTS); - Slimefun.registerResearch(new Research(111, "Armored Jetpack", 27), SlimefunItems.ARMORED_JETPACK); - Slimefun.registerResearch(new Research(112, "Ender Talismans", 28)); - Slimefun.registerResearch(new Research(115, "Even more Ores", 10), SlimefunItems.NICKEL_INGOT, SlimefunItems.COBALT_INGOT); - Slimefun.registerResearch(new Research(116, "Magnetic Metals", 16), SlimefunItems.MAGNET); - Slimefun.registerResearch(new Research(117, "Infused Magnets", 18), SlimefunItems.INFUSED_MAGNET); - Slimefun.registerResearch(new Research(118, "Speedy Pickaxe", 14), SlimefunItems.COBALT_PICKAXE); - Slimefun.registerResearch(new Research(119, "Necromancy", 19), SlimefunItems.NECROTIC_SKULL, SlimefunItems.ESSENCE_OF_AFTERLIFE); - Slimefun.registerResearch(new Research(120, "Soulbound Storage", 22), SlimefunItems.BOUND_BACKPACK); - Slimefun.registerResearch(new Research(121, "Jet Boots", 25), SlimefunItems.DURALUMIN_JETBOOTS, SlimefunItems.BILLON_JETBOOTS, SlimefunItems.SOLDER_JETBOOTS, SlimefunItems.STEEL_JETBOOTS, SlimefunItems.DAMASCUS_STEEL_JETBOOTS, SlimefunItems.REINFORCED_ALLOY_JETBOOTS); - Slimefun.registerResearch(new Research(122, "Armored Jet Boots", 27), SlimefunItems.ARMORED_JETBOOTS); - Slimefun.registerResearch(new Research(123, "Seismic Axe", 29), SlimefunItems.SEISMIC_AXE); - Slimefun.registerResearch(new Research(124, "Pickaxe of Vein Mining", 29), SlimefunItems.PICKAXE_OF_VEIN_MINING); - Slimefun.registerResearch(new Research(125, "Soulbound Weapons", 29), SlimefunItems.SOULBOUND_SWORD, SlimefunItems.SOULBOUND_BOW); - Slimefun.registerResearch(new Research(126, "Soulbound Tools", 29), SlimefunItems.SOULBOUND_PICKAXE, SlimefunItems.SOULBOUND_AXE, SlimefunItems.SOULBOUND_SHOVEL, SlimefunItems.SOULBOUND_HOE); - Slimefun.registerResearch(new Research(127, "Soulbound Armor", 29), SlimefunItems.SOULBOUND_HELMET, SlimefunItems.SOULBOUND_CHESTPLATE, SlimefunItems.SOULBOUND_LEGGINGS, SlimefunItems.SOULBOUND_BOOTS); - Slimefun.registerResearch(new Research(129, "Delicious Drinks", 29), SlimefunItems.JUICER, SlimefunItems.APPLE_JUICE, SlimefunItems.MELON_JUICE, SlimefunItems.CARROT_JUICE, SlimefunItems.PUMPKIN_JUICE); - Slimefun.registerResearch(new Research(130, "Repairing Spawners", 15), SlimefunItems.REPAIRED_SPAWNER); - Slimefun.registerResearch(new Research(131, "HO HO HO", 1)); - Slimefun.registerResearch(new Research(132, "Enhanced Furnace", 7), SlimefunItems.ENHANCED_FURNACE, SlimefunItems.ENHANCED_FURNACE_2); - Slimefun.registerResearch(new Research(133, "Better Furnaces", 18), SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.ENHANCED_FURNACE_7); - Slimefun.registerResearch(new Research(134, "High Tier Furnace", 29), SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.ENHANCED_FURNACE_11); - Slimefun.registerResearch(new Research(135, "Reinforced Furnace", 32), SlimefunItems.REINFORCED_FURNACE); - Slimefun.registerResearch(new Research(136, "Carbonado Edged Furnace", 35), SlimefunItems.CARBONADO_EDGED_FURNACE); - Slimefun.registerResearch(new Research(137, "Heating up", 32), SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.HEATING_COIL); - Slimefun.registerResearch(new Research(138, "Block Placer", 17), SlimefunItems.BLOCK_PLACER); - Slimefun.registerResearch(new Research(139, "Lazy Panning", 29), SlimefunItems.AUTOMATED_PANNING_MACHINE); - Slimefun.registerResearch(new Research(142, "Turning things around", 38), SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION); - Slimefun.registerResearch(new Research(143, "Robin Hood", 22), SlimefunItems.EXPLOSIVE_BOW, SlimefunItems.ICY_BOW, SlimefunItems.WITHER_BOW); - Slimefun.registerResearch(new Research(144, "Sharing with friends", 30), SlimefunItems.TOME_OF_KNOWLEDGE_SHARING); - 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.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); - Slimefun.registerResearch(new Research(154, "Upgraded Solar Cells", 26), SlimefunItems.SOLAR_ARRAY); - Slimefun.registerResearch(new Research(155, "Elemental Runes", 15), SlimefunItems.BLANK_RUNE, SlimefunItems.RUNE_EARTH, SlimefunItems.RUNE_WATER, SlimefunItems.RUNE_AIR, SlimefunItems.RUNE_FIRE); - Slimefun.registerResearch(new Research(156, "Purple Runes", 18), SlimefunItems.RUNE_ENDER, SlimefunItems.RUNE_RAINBOW); - Slimefun.registerResearch(new Research(157, "Infernal Bonemeal", 12), SlimefunItems.INFERNAL_BONEMEAL); - Slimefun.registerResearch(new Research(158, "Rainbow Blocks", 24), SlimefunItems.RAINBOW_CLAY, SlimefunItems.RAINBOW_GLASS, SlimefunItems.RAINBOW_GLASS_PANE, SlimefunItems.RAINBOW_WOOL); - Slimefun.registerResearch(new Research(159, "Infused Hopper", 22), SlimefunItems.INFUSED_HOPPER); - Slimefun.registerResearch(new Research(160, "Wither-Proof Glass", 20), SlimefunItems.WITHER_PROOF_GLASS); - Slimefun.registerResearch(new Research(161, "Duct Tape", 14), SlimefunItems.DUCT_TAPE); - Slimefun.registerResearch(new Research(162, "Plastic", 25), SlimefunItems.PLASTIC_SHEET); - Slimefun.registerResearch(new Research(163, "Memory Core", 28), SlimefunItems.ANDROID_MEMORY_CORE); - Slimefun.registerResearch(new Research(164, "Oil", 30), SlimefunItems.BUCKET_OF_OIL, SlimefunItems.OIL_PUMP); - Slimefun.registerResearch(new Research(165, "Fuel", 30), SlimefunItems.BUCKET_OF_FUEL, SlimefunItems.REFINERY); - Slimefun.registerResearch(new Research(166, "Holograms", 36), SlimefunItems.HOLOGRAM_PROJECTOR); - Slimefun.registerResearch(new Research(167, "Tier 1 Capacitors", 25), SlimefunItems.SMALL_CAPACITOR, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.BIG_CAPACITOR); - Slimefun.registerResearch(new Research(168, "Tier 2 Capacitors", 32), SlimefunItems.LARGE_CAPACITOR, SlimefunItems.CARBONADO_EDGED_CAPACITOR); - Slimefun.registerResearch(new Research(169, "Solar Power Plant", 14), SlimefunItems.SOLAR_GENERATOR); - Slimefun.registerResearch(new Research(170, "Powered Furnace", 15), SlimefunItems.ELECTRIC_FURNACE); - Slimefun.registerResearch(new Research(171, "Crushing and Grinding", 20), SlimefunItems.ELECTRIC_ORE_GRINDER, SlimefunItems.ELECTRIC_INGOT_PULVERIZER); - Slimefun.registerResearch(new Research(172, "Heated Pressure Chamber", 22), SlimefunItems.HEATED_PRESSURE_CHAMBER); - Slimefun.registerResearch(new Research(173, "Coal Generator", 18), SlimefunItems.COAL_GENERATOR); - Slimefun.registerResearch(new Research(173, "Bio-Reactor", 18), SlimefunItems.BIO_REACTOR); - Slimefun.registerResearch(new Research(174, "Automatic Enchanting and Disenchanting", 24), SlimefunItems.AUTO_ENCHANTER, SlimefunItems.AUTO_DISENCHANTER); - Slimefun.registerResearch(new Research(175, "Automatic Anvil", 34), SlimefunItems.AUTO_ANVIL, SlimefunItems.AUTO_ANVIL_2); - Slimefun.registerResearch(new Research(176, "Power Measurement", 10), SlimefunItems.MULTIMETER); - Slimefun.registerResearch(new Research(177, "Basic GPS Setup", 28), SlimefunItems.GPS_TRANSMITTER, SlimefunItems.GPS_CONTROL_PANEL, SlimefunItems.GPS_MARKER_TOOL); - Slimefun.registerResearch(new Research(178, "GPS Emergency Waypoint", 30), SlimefunItems.GPS_EMERGENCY_TRANSMITTER); - Slimefun.registerResearch(new Research(179, "Programmable Androids", 50), SlimefunItems.PROGRAMMABLE_ANDROID, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, SlimefunItems.PROGRAMMABLE_ANDROID_MINER, SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER); - Slimefun.registerResearch(new Research(180, "Android Interfaces", 26), SlimefunItems.ANDROID_INTERFACE_FUEL, SlimefunItems.ANDROID_INTERFACE_ITEMS); - Slimefun.registerResearch(new Research(181, "GEO-Scans", 30), SlimefunItems.GPS_GEO_SCANNER); - Slimefun.registerResearch(new Research(182, "Combustion Reactor", 38), SlimefunItems.COMBUSTION_REACTOR); - Slimefun.registerResearch(new Research(183, "Teleporter Base Components", 42), SlimefunItems.GPS_TELEPORTATION_MATRIX, SlimefunItems.GPS_TELEPORTER_PYLON); - Slimefun.registerResearch(new Research(184, "Teleporter Activation", 36), SlimefunItems.GPS_ACTIVATION_DEVICE_PERSONAL, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED); - Slimefun.registerResearch(new Research(185, "Upgraded Solar Generators", 28), SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.SOLAR_GENERATOR_3); - Slimefun.registerResearch(new Research(186, "Upgraded Transmitters", 36), SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.GPS_TRANSMITTER_3); - Slimefun.registerResearch(new Research(187, "Elevators", 28), SlimefunItems.ELEVATOR); - Slimefun.registerResearch(new Research(188, "Full-Time Solar Power", 44), SlimefunItems.SOLAR_GENERATOR_4); - Slimefun.registerResearch(new Research(189, "Top Tier Transmitter", 44), SlimefunItems.GPS_TRANSMITTER_4); - Slimefun.registerResearch(new Research(190, "Energy Networks 101", 6), SlimefunItems.ENERGY_REGULATOR); - Slimefun.registerResearch(new Research(191, "Butcher Androids", 32), SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER); - Slimefun.registerResearch(new Research(192, "Organic Food", 25), SlimefunItems.FOOD_FABRICATOR, SlimefunItems.WHEAT_ORGANIC_FOOD, SlimefunItems.CARROT_ORGANIC_FOOD, SlimefunItems.POTATO_ORGANIC_FOOD, SlimefunItems.SEEDS_ORGANIC_FOOD, SlimefunItems.BEETROOT_ORGANIC_FOOD, SlimefunItems.MELON_ORGANIC_FOOD); - Slimefun.registerResearch(new Research(193, "Automated Feeding", 25), SlimefunItems.AUTO_BREEDER); - Slimefun.registerResearch(new Research(194, "Advanced Androids", 60), SlimefunItems.PROGRAMMABLE_ANDROID_2); - Slimefun.registerResearch(new Research(195, "Advanced Androids - Butcher", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER); - Slimefun.registerResearch(new Research(196, "Advanced Androids - Fisherman", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN); - Slimefun.registerResearch(new Research(197, "Animal Growth Manipulation", 32), SlimefunItems.ANIMAL_GROWTH_ACCELERATOR); - Slimefun.registerResearch(new Research(198, "Exp Collector", 36), SlimefunItems.XP_COLLECTOR); - Slimefun.registerResearch(new Research(199, "Organic Fertilizer", 36), SlimefunItems.FOOD_COMPOSTER, SlimefunItems.WHEAT_FERTILIZER, SlimefunItems.CARROT_FERTILIZER, SlimefunItems.POTATO_FERTILIZER, SlimefunItems.SEEDS_FERTILIZER, SlimefunItems.BEETROOT_FERTILIZER, SlimefunItems.MELON_FERTILIZER, SlimefunItems.APPLE_FERTILIZER); - Slimefun.registerResearch(new Research(200, "Crop Growth Acceleration", 40), SlimefunItems.CROP_GROWTH_ACCELERATOR); - Slimefun.registerResearch(new Research(201, "Upgraded Crop Growth Accelerator", 44), SlimefunItems.CROP_GROWTH_ACCELERATOR_2); - Slimefun.registerResearch(new Research(202, "Reactor Essentials", 36), SlimefunItems.REACTOR_COOLANT_CELL, SlimefunItems.NEPTUNIUM, SlimefunItems.PLUTONIUM); - Slimefun.registerResearch(new Research(203, "Nuclear Power Plant", 48), SlimefunItems.NUCLEAR_REACTOR); - Slimefun.registerResearch(new Research(204, "Mr Freeze", 20), SlimefunItems.FREEZER); - Slimefun.registerResearch(new Research(205, "Cargo Basics", 30), SlimefunItems.CARGO_MOTOR, SlimefunItems.CARGO_MANAGER, SlimefunItems.CARGO_NODE); - Slimefun.registerResearch(new Research(206, "Cargo Setup", 30), SlimefunItems.CARGO_INPUT, SlimefunItems.CARGO_OUTPUT); - Slimefun.registerResearch(new Research(207, "Electric Ingot Fabrication", 18), SlimefunItems.ELECTRIC_GOLD_PAN, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.ELECTRIC_INGOT_FACTORY); - Slimefun.registerResearch(new Research(208, "Faster Ingot Fabrication", 26), SlimefunItems.ELECTRIC_GOLD_PAN_2, SlimefunItems.ELECTRIC_DUST_WASHER_2, SlimefunItems.ELECTRIC_INGOT_FACTORY_2); - Slimefun.registerResearch(new Research(209, "Super Fast Ingot Fabrication", 32), SlimefunItems.ELECTRIC_GOLD_PAN_3, SlimefunItems.ELECTRIC_DUST_WASHER_3, SlimefunItems.ELECTRIC_INGOT_FACTORY_3, SlimefunItems.ELECTRIC_ORE_GRINDER_2); - Slimefun.registerResearch(new Research(210, "Automated Crafting", 20), SlimefunItems.AUTOMATED_CRAFTING_CHAMBER); - Slimefun.registerResearch(new Research(211, "Upgraded Food Fabrication", 28), SlimefunItems.FOOD_FABRICATOR_2, SlimefunItems.FOOD_COMPOSTER_2); - Slimefun.registerResearch(new Research(212, "Reactor Interaction", 18), SlimefunItems.REACTOR_ACCESS_PORT); - Slimefun.registerResearch(new Research(213, "Fluid Pump", 28), SlimefunItems.FLUID_PUMP); - Slimefun.registerResearch(new Research(214, "Upgraded Freezer", 29), SlimefunItems.FREEZER_2); - Slimefun.registerResearch(new Research(215, "Never-Ending Circle", 30), SlimefunItems.BOOSTED_URANIUM); - Slimefun.registerResearch(new Research(216, "Trash", 8), SlimefunItems.TRASH_CAN); - Slimefun.registerResearch(new Research(216, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); - Slimefun.registerResearch(new Research(217, "Advanced Output Node", 24), SlimefunItems.CARGO_OUTPUT_ADVANCED); - Slimefun.registerResearch(new Research(218, "Carbon Press", 28), SlimefunItems.CARBON_PRESS); - Slimefun.registerResearch(new Research(219, "Electric Smeltery", 28), SlimefunItems.ELECTRIC_SMELTERY); - Slimefun.registerResearch(new Research(220, "Upgraded Electric Furnace", 20), SlimefunItems.ELECTRIC_FURNACE_2, SlimefunItems.ELECTRIC_FURNACE_3); - Slimefun.registerResearch(new Research(221, "Upgraded Carbon Press", 26), SlimefunItems.CARBON_PRESS_2); - Slimefun.registerResearch(new Research(222, "Empowered Androids", 60), SlimefunItems.PROGRAMMABLE_ANDROID_3); - Slimefun.registerResearch(new Research(223, "Empowered Androids - Butcher", 30), SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER); - Slimefun.registerResearch(new Research(224, "Empowered Androids - Fisherman", 30), SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN); - Slimefun.registerResearch(new Research(225, "Ultimate Carbon Press", 32), SlimefunItems.CARBON_PRESS_3); - Slimefun.registerResearch(new Research(226, "Automated Wither Killer", 35), SlimefunItems.WITHER_ASSEMBLER); - Slimefun.registerResearch(new Research(227, "Upgraded Heated Pressure Chamber", 20), SlimefunItems.HEATED_PRESSURE_CHAMBER_2); - Slimefun.registerResearch(new Research(228, "Elytras", 20), SlimefunItems.ELYTRA_SCALE, SlimefunItems.ELYTRA); - Slimefun.registerResearch(new Research(229, "Special Elytras", 30), SlimefunItems.INFUSED_ELYTRA, SlimefunItems.SOULBOUND_ELYTRA); - Slimefun.registerResearch(new Research(230, "Electrified Crucible", 26), SlimefunItems.ELECTRIFIED_CRUCIBLE); - Slimefun.registerResearch(new Research(231, "Hot Crucibles", 30), SlimefunItems.ELECTRIFIED_CRUCIBLE_2, SlimefunItems.ELECTRIFIED_CRUCIBLE_3); - Slimefun.registerResearch(new Research(232, "Advanced Electric Smeltery", 28), SlimefunItems.ELECTRIC_SMELTERY_2); - Slimefun.registerResearch(new Research(233, "Advanced Androids - Farmer", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER); - Slimefun.registerResearch(new Research(234, "Lava Generator", 38), SlimefunItems.LAVA_GENERATOR); - Slimefun.registerResearch(new Research(235, "Nether Ice Coolant", 45), SlimefunItems.NETHER_ICE, SlimefunItems.ENRICHED_NETHER_ICE, SlimefunItems.NETHER_ICE_COOLANT_CELL, SlimefunItems.NETHER_DRILL); - Slimefun.registerResearch(new Research(236, "Nether Star Reactor", 60), SlimefunItems.NETHERSTAR_REACTOR); - Slimefun.registerResearch(new Research(237, "Blistering Radioactivity", 38), SlimefunItems.BLISTERING_INGOT, SlimefunItems.BLISTERING_INGOT_2, SlimefunItems.BLISTERING_INGOT_3); - Slimefun.registerResearch(new Research(239, "Automatic Ignition Chamber", 12), SlimefunItems.IGNITION_CHAMBER); - } -} + + public static void setupResearches() { + Slimefun.registerResearch(new Research(0, "Walking Sticks", 1), SlimefunItems.GRANDMAS_WALKING_STICK, SlimefunItems.GRANDPAS_WALKING_STICK); + Slimefun.registerResearch(new Research(1, "Portable Crafter", 1), SlimefunItems.PORTABLE_CRAFTER); + Slimefun.registerResearch(new Research(2, "Fortune Cookie", 1), SlimefunItems.FORTUNE_COOKIE); + Slimefun.registerResearch(new Research(4, "Portable Dustbin", 2), SlimefunItems.PORTABLE_DUSTBIN); + Slimefun.registerResearch(new Research(5, "Beef Jerky", 2), SlimefunItems.BEEF_JERKY); + Slimefun.registerResearch(new Research(6, "Armor Crafting", 2), SlimefunItems.ARMOR_FORGE); + Slimefun.registerResearch(new Research(8, "Lumps and Magic", 3), SlimefunItems.MAGIC_LUMP_1, SlimefunItems.MAGIC_LUMP_2, SlimefunItems.MAGIC_LUMP_3, SlimefunItems.ENDER_LUMP_1, SlimefunItems.ENDER_LUMP_2, SlimefunItems.ENDER_LUMP_3); + Slimefun.registerResearch(new Research(9, "Ender Backpack", 4), SlimefunItems.ENDER_BACKPACK); + Slimefun.registerResearch(new Research(7, "Glowstone Armor", 3), SlimefunItems.GLOWSTONE_HELMET, SlimefunItems.GLOWSTONE_CHESTPLATE, SlimefunItems.GLOWSTONE_LEGGINGS, SlimefunItems.GLOWSTONE_BOOTS); + Slimefun.registerResearch(new Research(10, "Ender Armor", 4), SlimefunItems.ENDER_HELMET, SlimefunItems.ENDER_CHESTPLATE, SlimefunItems.ENDER_LEGGINGS, SlimefunItems.ENDER_BOOTS); + Slimefun.registerResearch(new Research(11, "Magic Eye of Ender", 4), SlimefunItems.MAGIC_EYE_OF_ENDER); + Slimefun.registerResearch(new Research(12, "Magic Sugar", 4), SlimefunItems.MAGIC_SUGAR); + Slimefun.registerResearch(new Research(13, "Monster Jerky", 5), SlimefunItems.MONSTER_JERKY); + Slimefun.registerResearch(new Research(14, "Slime Armor", 5), SlimefunItems.SLIME_HELMET, SlimefunItems.SLIME_CHESTPLATE, SlimefunItems.SLIME_LEGGINGS, SlimefunItems.SLIME_BOOTS); + Slimefun.registerResearch(new Research(15, "Sword of Beheading", 6), SlimefunItems.SWORD_OF_BEHEADING); + Slimefun.registerResearch(new Research(16, "Electric Work", 8), SlimefunItems.BASIC_CIRCUIT_BOARD); + Slimefun.registerResearch(new Research(17, "Advanced Electricity", 9), SlimefunItems.ADVANCED_CIRCUIT_BOARD); + Slimefun.registerResearch(new Research(18, "Hot Smelting", 10), SlimefunItems.SMELTERY); + Slimefun.registerResearch(new Research(19, "Steel Age", 11), SlimefunItems.STEEL_INGOT); + Slimefun.registerResearch(new Research(20, "Important Power-Related Items", 12), SlimefunItems.SULFATE, SlimefunItems.POWER_CRYSTAL); + Slimefun.registerResearch(new Research(21, "Your first Battery", 10), SlimefunItems.BATTERY); + Slimefun.registerResearch(new Research(22, "Steel Plating", 14), SlimefunItems.STEEL_PLATE); + Slimefun.registerResearch(new Research(23, "Steel Thruster", 14), SlimefunItems.STEEL_THRUSTER); + Slimefun.registerResearch(new Research(24, "Parachute", 15), SlimefunItems.PARACHUTE); + Slimefun.registerResearch(new Research(25, "Grappling Hook", 15), SlimefunItems.GRAPPLING_HOOK, SlimefunItems.HOOK, SlimefunItems.CHAIN); + Slimefun.registerResearch(new Research(26, "Jetpacks", 22), SlimefunItems.DURALUMIN_JETPACK, SlimefunItems.BILLON_JETPACK, SlimefunItems.SOLDER_JETPACK, SlimefunItems.STEEL_JETPACK, SlimefunItems.DAMASCUS_STEEL_JETPACK, SlimefunItems.REINFORCED_ALLOY_JETPACK); + Slimefun.registerResearch(new Research(27, "Multi Tools", 18), SlimefunItems.DURALUMIN_MULTI_TOOL, SlimefunItems.SOLDER_MULTI_TOOL, SlimefunItems.BILLON_MULTI_TOOL, SlimefunItems.STEEL_MULTI_TOOL, SlimefunItems.DAMASCUS_STEEL_MULTI_TOOL, SlimefunItems.REINFORCED_ALLOY_MULTI_TOOL); + Slimefun.registerResearch(new Research(28, "Solar Power", 17), SlimefunItems.SOLAR_PANEL, SlimefunItems.SOLAR_HELMET); + Slimefun.registerResearch(new Research(29, "Elemental Staves", 17), SlimefunItems.STAFF_ELEMENTAL); + Slimefun.registerResearch(new Research(30, "Grind Stone", 4), SlimefunItems.GRIND_STONE); + Slimefun.registerResearch(new Research(31, "Cactus Suit", 5), SlimefunItems.CACTUS_BOOTS, SlimefunItems.CACTUS_CHESTPLATE, SlimefunItems.CACTUS_HELMET, SlimefunItems.CACTUS_LEGGINGS); + Slimefun.registerResearch(new Research(32, "Gold Pan", 5), SlimefunItems.GOLD_PAN); + Slimefun.registerResearch(new Research(33, "Magical Book Binding", 5), SlimefunItems.MAGICAL_BOOK_COVER); + Slimefun.registerResearch(new Research(34, "New Metals", 6), SlimefunItems.COPPER_INGOT, SlimefunItems.TIN_INGOT, SlimefunItems.SILVER_INGOT, SlimefunItems.LEAD_INGOT, SlimefunItems.ALUMINUM_INGOT, SlimefunItems.ZINC_INGOT, SlimefunItems.MAGNESIUM_INGOT); + Slimefun.registerResearch(new Research(35, "Ore Doubling", 6), SlimefunItems.ORE_CRUSHER); + Slimefun.registerResearch(new Research(36, "Bronze Creation", 8), SlimefunItems.BRONZE_INGOT); + Slimefun.registerResearch(new Research(37, "Advanced Alloys", 12), SlimefunItems.BILLON_INGOT, SlimefunItems.DURALUMIN_INGOT, SlimefunItems.ALUMINUM_BRASS_INGOT, SlimefunItems.ALUMINUM_BRONZE_INGOT, SlimefunItems.SOLDER_INGOT, SlimefunItems.CORINTHIAN_BRONZE_INGOT, SlimefunItems.BRASS_INGOT); + Slimefun.registerResearch(new Research(38, "Carbon Creation", 9), SlimefunItems.COMPRESSOR, SlimefunItems.CARBON); + Slimefun.registerResearch(new Research(39, "Bakery Innovation", 1), SlimefunItems.WHEAT_FLOUR); + Slimefun.registerResearch(new Research(40, "Gilded Iron Armor", 16), SlimefunItems.GILDED_IRON_HELMET, SlimefunItems.GILDED_IRON_CHESTPLATE, SlimefunItems.GILDED_IRON_LEGGINGS, SlimefunItems.GILDED_IRON_BOOTS); + Slimefun.registerResearch(new Research(41, "Synthetic Diamonds", 10), SlimefunItems.COMPRESSED_CARBON, SlimefunItems.CARBON_CHUNK, SlimefunItems.SYNTHETIC_DIAMOND); + Slimefun.registerResearch(new Research(42, "Pressure Chamber", 14), SlimefunItems.PRESSURE_CHAMBER); + Slimefun.registerResearch(new Research(43, "Synthetic Sapphires", 16), SlimefunItems.SYNTHETIC_SAPPHIRE); + Slimefun.registerResearch(new Research(45, "Damascus Steel", 17), SlimefunItems.DAMASCUS_STEEL_INGOT); + Slimefun.registerResearch(new Research(46, "Damascus Steel Armor", 18), SlimefunItems.DAMASCUS_STEEL_HELMET, SlimefunItems.DAMASCUS_STEEL_CHESTPLATE, SlimefunItems.DAMASCUS_STEEL_LEGGINGS, SlimefunItems.DAMASCUS_STEEL_BOOTS); + Slimefun.registerResearch(new Research(47, "Reinforced Alloy", 22), SlimefunItems.HARDENED_METAL_INGOT, SlimefunItems.REINFORCED_ALLOY_INGOT); + Slimefun.registerResearch(new Research(48, "Black Diamonds", 26), SlimefunItems.RAW_CARBONADO, SlimefunItems.CARBONADO); + Slimefun.registerResearch(new Research(50, "Magic Workbench", 12), SlimefunItems.MAGIC_WORKBENCH); + Slimefun.registerResearch(new Research(51, "Wind Staff", 17), SlimefunItems.STAFF_WIND); + Slimefun.registerResearch(new Research(52, "Reinforced Armor", 26), SlimefunItems.REINFORCED_ALLOY_HELMET, SlimefunItems.REINFORCED_ALLOY_CHESTPLATE, SlimefunItems.REINFORCED_ALLOY_LEGGINGS, SlimefunItems.REINFORCED_ALLOY_BOOTS); + Slimefun.registerResearch(new Research(53, "Ore Washer", 5), SlimefunItems.ORE_WASHER, SlimefunItems.STONE_CHUNK, SlimefunItems.SIFTED_ORE); + Slimefun.registerResearch(new Research(54, "Pure Gold", 7), SlimefunItems.GOLD_4K, SlimefunItems.GOLD_6K, SlimefunItems.GOLD_8K, SlimefunItems.GOLD_10K, SlimefunItems.GOLD_12K, SlimefunItems.GOLD_14K, SlimefunItems.GOLD_16K, SlimefunItems.GOLD_18K, SlimefunItems.GOLD_20K, SlimefunItems.GOLD_22K, SlimefunItems.GOLD_24K); + Slimefun.registerResearch(new Research(55, "Silicon Valley", 12), SlimefunItems.SILICON, SlimefunItems.FERROSILICON); + Slimefun.registerResearch(new Research(56, "Fire Staff", 2), SlimefunItems.STAFF_FIRE); + Slimefun.registerResearch(new Research(57, "Smelters Pickaxe", 17), SlimefunItems.AUTO_SMELT_PICKAXE); + Slimefun.registerResearch(new Research(58, "Common Talisman", 14), SlimefunItems.TALISMAN); + Slimefun.registerResearch(new Research(59, "Talisman of the Anvil", 18), SlimefunItems.TALISMAN_ANVIL); + Slimefun.registerResearch(new Research(60, "Talisman of the Miner", 18), SlimefunItems.TALISMAN_MINER); + Slimefun.registerResearch(new Research(61, "Talisman of the Hunter", 18), SlimefunItems.TALISMAN_HUNTER); + Slimefun.registerResearch(new Research(62, "Talisman of the Lava Walker", 18), SlimefunItems.TALISMAN_LAVA); + Slimefun.registerResearch(new Research(63, "Talisman of the Water Breather", 18), SlimefunItems.TALISMAN_WATER); + Slimefun.registerResearch(new Research(64, "Talisman of the Angel", 18), SlimefunItems.TALISMAN_ANGEL); + Slimefun.registerResearch(new Research(65, "Talisman of the Firefighter", 18), SlimefunItems.TALISMAN_FIRE); + Slimefun.registerResearch(new Research(67, "Firey Situation", 14), SlimefunItems.LAVA_CRYSTAL); + Slimefun.registerResearch(new Research(68, "Talisman of the Magician", 20), SlimefunItems.TALISMAN_MAGICIAN); + Slimefun.registerResearch(new Research(69, "Talisman of the Traveller", 20), SlimefunItems.TALISMAN_TRAVELLER); + Slimefun.registerResearch(new Research(70, "Talisman of the Warrior", 20), SlimefunItems.TALISMAN_WARRIOR); + Slimefun.registerResearch(new Research(71, "Talisman of the Knight", 20), SlimefunItems.TALISMAN_KNIGHT); + Slimefun.registerResearch(new Research(72, "Shiny Iron", 11), SlimefunItems.GILDED_IRON); + Slimefun.registerResearch(new Research(73, "Fake Gem", 17), SlimefunItems.SYNTHETIC_EMERALD); + Slimefun.registerResearch(new Research(74, "Chainmail Armor", 8), new ItemStack(Material.CHAINMAIL_HELMET), new ItemStack(Material.CHAINMAIL_CHESTPLATE), new ItemStack(Material.CHAINMAIL_LEGGINGS), new ItemStack(Material.CHAINMAIL_BOOTS)); + Slimefun.registerResearch(new Research(75, "Talisman of the Whirlwind", 19), SlimefunItems.TALISMAN_WHIRLWIND); + Slimefun.registerResearch(new Research(76, "Talisman of the Wizard", 22), SlimefunItems.TALISMAN_WIZARD); + Slimefun.registerResearch(new Research(77, "Lumber Axe", 21), SlimefunItems.LUMBER_AXE); + Slimefun.registerResearch(new Research(79, "Hazmat Suit", 21), SlimefunItems.SCUBA_HELMET, SlimefunItems.HAZMATSUIT_CHESTPLATE, SlimefunItems.HAZMATSUIT_LEGGINGS, SlimefunItems.RUBBER_BOOTS); + Slimefun.registerResearch(new Research(80, "Radioactive", 30), SlimefunItems.TINY_URANIUM, SlimefunItems.SMALL_URANIUM, SlimefunItems.URANIUM); + Slimefun.registerResearch(new Research(81, "Ore Purification", 25), SlimefunItems.CRUSHED_ORE, SlimefunItems.PULVERIZED_ORE, SlimefunItems.PURE_ORE_CLUSTER); + Slimefun.registerResearch(new Research(84, "Redstone Alloy", 16), SlimefunItems.REDSTONE_ALLOY); + Slimefun.registerResearch(new Research(85, "Top Tier Machines", 24), SlimefunItems.CARBONADO_MULTI_TOOL, SlimefunItems.CARBONADO_JETPACK, SlimefunItems.CARBONADO_JETBOOTS); + Slimefun.registerResearch(new Research(86, "First Aid", 2), SlimefunItems.CLOTH, SlimefunItems.RAG, SlimefunItems.BANDAGE, SlimefunItems.SPLINT, SlimefunItems.CAN, SlimefunItems.VITAMINS, SlimefunItems.MEDICINE); + Slimefun.registerResearch(new Research(87, "Shiny Armor", 13), SlimefunItems.GOLD_HELMET, SlimefunItems.GOLD_CHESTPLATE, SlimefunItems.GOLD_LEGGINGS, SlimefunItems.GOLD_BOOTS); + Slimefun.registerResearch(new Research(89, "Night Vision Goggles", 10), SlimefunItems.NIGHT_VISION_GOGGLES); + Slimefun.registerResearch(new Research(90, "Pickaxe of Containment", 14), SlimefunItems.PICKAXE_OF_CONTAINMENT, SlimefunItems.BROKEN_SPAWNER); + Slimefun.registerResearch(new Research(91, "Hercules Pickaxe", 28), SlimefunItems.HERCULES_PICKAXE); + Slimefun.registerResearch(new Research(92, "Saw Mill", 2), SlimefunItems.SAW_MILL); + Slimefun.registerResearch(new Research(93, "Slimy Steel Armor", 27), SlimefunItems.SLIME_HELMET_STEEL, SlimefunItems.SLIME_CHESTPLATE_STEEL, SlimefunItems.SLIME_LEGGINGS_STEEL, SlimefunItems.SLIME_BOOTS_STEEL); + Slimefun.registerResearch(new Research(94, "Blade of Vampires", 26), SlimefunItems.BLADE_OF_VAMPIRES); + Slimefun.registerResearch(new Research(95, "Lazy Mining", 40), SlimefunItems.DIGITAL_MINER); + Slimefun.registerResearch(new Research(96, "Water Staff", 8), SlimefunItems.STAFF_WATER); + Slimefun.registerResearch(new Research(97, "Golden City", 19), SlimefunItems.GOLD_24K_BLOCK); + Slimefun.registerResearch(new Research(98, "Advanced Mining 101", 42), SlimefunItems.ADVANCED_DIGITAL_MINER); + Slimefun.registerResearch(new Research(99, "Composting Dirt", 3), SlimefunItems.COMPOSTER); + Slimefun.registerResearch(new Research(100, "Farmer Shoes", 4), SlimefunItems.FARMER_SHOES); + Slimefun.registerResearch(new Research(101, "Explosive Pickaxe", 28), SlimefunItems.EXPLOSIVE_PICKAXE); + Slimefun.registerResearch(new Research(102, "Automated Gold Pan", 17), SlimefunItems.AUTOMATED_PANNING_MACHINE); + Slimefun.registerResearch(new Research(103, "Boots of the Stomper", 19), SlimefunItems.BOOTS_OF_THE_STOMPER); + Slimefun.registerResearch(new Research(104, "Pickaxe of the Seeker", 19), SlimefunItems.PICKAXE_OF_THE_SEEKER); + Slimefun.registerResearch(new Research(105, "Backpacks", 15), SlimefunItems.BACKPACK_LARGE, SlimefunItems.BACKPACK_MEDIUM, SlimefunItems.BACKPACK_SMALL); + Slimefun.registerResearch(new Research(106, "Woven Backpack", 19), SlimefunItems.WOVEN_BACKPACK); + Slimefun.registerResearch(new Research(107, "Crucible", 13), SlimefunItems.CRUCIBLE); + Slimefun.registerResearch(new Research(108, "Gilded Backpack", 22), SlimefunItems.GILDED_BACKPACK); + Slimefun.registerResearch(new Research(110, "Being a Tank", 28), SlimefunItems.HEAVY_METAL_HELMET, SlimefunItems.HEAVY_METAL_CHESTPLATE, SlimefunItems.HEAVY_METAL_LEGGINGS, SlimefunItems.HEAVY_METAL_BOOTS); + Slimefun.registerResearch(new Research(111, "Armored Jetpack", 27), SlimefunItems.ARMORED_JETPACK); + Slimefun.registerResearch(new Research(112, "Ender Talismans", 28)); + Slimefun.registerResearch(new Research(115, "Even more Ores", 10), SlimefunItems.NICKEL_INGOT, SlimefunItems.COBALT_INGOT); + Slimefun.registerResearch(new Research(116, "Magnetic Metals", 16), SlimefunItems.MAGNET); + Slimefun.registerResearch(new Research(117, "Infused Magnets", 18), SlimefunItems.INFUSED_MAGNET); + Slimefun.registerResearch(new Research(118, "Speedy Pickaxe", 14), SlimefunItems.COBALT_PICKAXE); + Slimefun.registerResearch(new Research(119, "Necromancy", 19), SlimefunItems.NECROTIC_SKULL, SlimefunItems.ESSENCE_OF_AFTERLIFE); + Slimefun.registerResearch(new Research(120, "Soulbound Storage", 22), SlimefunItems.BOUND_BACKPACK); + Slimefun.registerResearch(new Research(121, "Jet Boots", 25), SlimefunItems.DURALUMIN_JETBOOTS, SlimefunItems.BILLON_JETBOOTS, SlimefunItems.SOLDER_JETBOOTS, SlimefunItems.STEEL_JETBOOTS, SlimefunItems.DAMASCUS_STEEL_JETBOOTS, SlimefunItems.REINFORCED_ALLOY_JETBOOTS); + Slimefun.registerResearch(new Research(122, "Armored Jet Boots", 27), SlimefunItems.ARMORED_JETBOOTS); + Slimefun.registerResearch(new Research(123, "Seismic Axe", 29), SlimefunItems.SEISMIC_AXE); + Slimefun.registerResearch(new Research(124, "Pickaxe of Vein Mining", 29), SlimefunItems.PICKAXE_OF_VEIN_MINING); + Slimefun.registerResearch(new Research(125, "Soulbound Weapons", 29), SlimefunItems.SOULBOUND_SWORD, SlimefunItems.SOULBOUND_BOW); + Slimefun.registerResearch(new Research(126, "Soulbound Tools", 29), SlimefunItems.SOULBOUND_PICKAXE, SlimefunItems.SOULBOUND_AXE, SlimefunItems.SOULBOUND_SHOVEL, SlimefunItems.SOULBOUND_HOE); + Slimefun.registerResearch(new Research(127, "Soulbound Armor", 29), SlimefunItems.SOULBOUND_HELMET, SlimefunItems.SOULBOUND_CHESTPLATE, SlimefunItems.SOULBOUND_LEGGINGS, SlimefunItems.SOULBOUND_BOOTS); + Slimefun.registerResearch(new Research(129, "Delicious Drinks", 29), SlimefunItems.JUICER, SlimefunItems.APPLE_JUICE, SlimefunItems.MELON_JUICE, SlimefunItems.CARROT_JUICE, SlimefunItems.PUMPKIN_JUICE); + Slimefun.registerResearch(new Research(130, "Repairing Spawners", 15), SlimefunItems.REPAIRED_SPAWNER); + Slimefun.registerResearch(new Research(131, "HO HO HO", 1)); + Slimefun.registerResearch(new Research(132, "Enhanced Furnace", 7), SlimefunItems.ENHANCED_FURNACE, SlimefunItems.ENHANCED_FURNACE_2); + Slimefun.registerResearch(new Research(133, "Better Furnaces", 18), SlimefunItems.ENHANCED_FURNACE_3, SlimefunItems.ENHANCED_FURNACE_4, SlimefunItems.ENHANCED_FURNACE_5, SlimefunItems.ENHANCED_FURNACE_6, SlimefunItems.ENHANCED_FURNACE_7); + Slimefun.registerResearch(new Research(134, "High Tier Furnace", 29), SlimefunItems.ENHANCED_FURNACE_8, SlimefunItems.ENHANCED_FURNACE_9, SlimefunItems.ENHANCED_FURNACE_10, SlimefunItems.ENHANCED_FURNACE_11); + Slimefun.registerResearch(new Research(135, "Reinforced Furnace", 32), SlimefunItems.REINFORCED_FURNACE); + Slimefun.registerResearch(new Research(136, "Carbonado Edged Furnace", 35), SlimefunItems.CARBONADO_EDGED_FURNACE); + Slimefun.registerResearch(new Research(137, "Heating up", 32), SlimefunItems.ELECTRO_MAGNET, SlimefunItems.ELECTRIC_MOTOR, SlimefunItems.HEATING_COIL); + Slimefun.registerResearch(new Research(138, "Block Placer", 17), SlimefunItems.BLOCK_PLACER); + Slimefun.registerResearch(new Research(139, "Lazy Panning", 29), SlimefunItems.AUTOMATED_PANNING_MACHINE); + Slimefun.registerResearch(new Research(142, "Turning things around", 38), SlimefunItems.SCROLL_OF_DIMENSIONAL_TELEPOSITION); + Slimefun.registerResearch(new Research(143, "Robin Hood", 22), SlimefunItems.EXPLOSIVE_BOW, SlimefunItems.ICY_BOW); + Slimefun.registerResearch(new Research(144, "Sharing with friends", 30), SlimefunItems.TOME_OF_KNOWLEDGE_SHARING); + 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.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); + Slimefun.registerResearch(new Research(154, "Upgraded Solar Cells", 26), SlimefunItems.SOLAR_ARRAY); + Slimefun.registerResearch(new Research(155, "Elemental Runes", 15), SlimefunItems.BLANK_RUNE, SlimefunItems.RUNE_EARTH, SlimefunItems.RUNE_WATER, SlimefunItems.RUNE_AIR, SlimefunItems.RUNE_FIRE); + Slimefun.registerResearch(new Research(156, "Purple Runes", 18), SlimefunItems.RUNE_ENDER, SlimefunItems.RUNE_RAINBOW); + Slimefun.registerResearch(new Research(157, "Infernal Bonemeal", 12), SlimefunItems.INFERNAL_BONEMEAL); + Slimefun.registerResearch(new Research(158, "Rainbow Blocks", 24), SlimefunItems.RAINBOW_CLAY, SlimefunItems.RAINBOW_GLASS, SlimefunItems.RAINBOW_GLASS_PANE, SlimefunItems.RAINBOW_WOOL); + Slimefun.registerResearch(new Research(159, "Infused Hopper", 22), SlimefunItems.INFUSED_HOPPER); + Slimefun.registerResearch(new Research(160, "Wither-Proof Glass", 20), SlimefunItems.WITHER_PROOF_GLASS); + Slimefun.registerResearch(new Research(161, "Duct Tape", 14), SlimefunItems.DUCT_TAPE); + Slimefun.registerResearch(new Research(162, "Plastic", 25), SlimefunItems.PLASTIC_SHEET); + Slimefun.registerResearch(new Research(163, "Memory Core", 28), SlimefunItems.ANDROID_MEMORY_CORE); + Slimefun.registerResearch(new Research(164, "Oil", 30), SlimefunItems.BUCKET_OF_OIL, SlimefunItems.OIL_PUMP); + Slimefun.registerResearch(new Research(165, "Fuel", 30), SlimefunItems.BUCKET_OF_FUEL, SlimefunItems.REFINERY); + Slimefun.registerResearch(new Research(166, "Holograms", 36), SlimefunItems.HOLOGRAM_PROJECTOR); + Slimefun.registerResearch(new Research(167, "Tier 1 Capacitors", 25), SlimefunItems.SMALL_CAPACITOR, SlimefunItems.MEDIUM_CAPACITOR, SlimefunItems.BIG_CAPACITOR); + Slimefun.registerResearch(new Research(168, "Tier 2 Capacitors", 32), SlimefunItems.LARGE_CAPACITOR, SlimefunItems.CARBONADO_EDGED_CAPACITOR); + Slimefun.registerResearch(new Research(169, "Solar Power Plant", 14), SlimefunItems.SOLAR_GENERATOR); + Slimefun.registerResearch(new Research(170, "Powered Furnace", 15), SlimefunItems.ELECTRIC_FURNACE); + Slimefun.registerResearch(new Research(171, "Crushing and Grinding", 20), SlimefunItems.ELECTRIC_ORE_GRINDER, SlimefunItems.ELECTRIC_INGOT_PULVERIZER); + Slimefun.registerResearch(new Research(172, "Heated Pressure Chamber", 22), SlimefunItems.HEATED_PRESSURE_CHAMBER); + Slimefun.registerResearch(new Research(173, "Coal Generator", 18), SlimefunItems.COAL_GENERATOR); + Slimefun.registerResearch(new Research(173, "Bio-Reactor", 18), SlimefunItems.BIO_REACTOR); + Slimefun.registerResearch(new Research(174, "Automatic Enchanting and Disenchanting", 24), SlimefunItems.AUTO_ENCHANTER, SlimefunItems.AUTO_DISENCHANTER); + Slimefun.registerResearch(new Research(175, "Automatic Anvil", 34), SlimefunItems.AUTO_ANVIL, SlimefunItems.AUTO_ANVIL_2); + Slimefun.registerResearch(new Research(176, "Power Measurement", 10), SlimefunItems.MULTIMETER); + Slimefun.registerResearch(new Research(177, "Basic GPS Setup", 28), SlimefunItems.GPS_TRANSMITTER, SlimefunItems.GPS_CONTROL_PANEL, SlimefunItems.GPS_MARKER_TOOL); + Slimefun.registerResearch(new Research(178, "GPS Emergency Waypoint", 30), SlimefunItems.GPS_EMERGENCY_TRANSMITTER); + Slimefun.registerResearch(new Research(179, "Programmable Androids", 50), SlimefunItems.PROGRAMMABLE_ANDROID, SlimefunItems.PROGRAMMABLE_ANDROID_FARMER, SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER, SlimefunItems.PROGRAMMABLE_ANDROID_FISHERMAN, SlimefunItems.PROGRAMMABLE_ANDROID_MINER, SlimefunItems.PROGRAMMABLE_ANDROID_WOODCUTTER); + Slimefun.registerResearch(new Research(180, "Android Interfaces", 26), SlimefunItems.ANDROID_INTERFACE_FUEL, SlimefunItems.ANDROID_INTERFACE_ITEMS); + Slimefun.registerResearch(new Research(181, "GEO-Scans", 30), SlimefunItems.GPS_GEO_SCANNER); + Slimefun.registerResearch(new Research(182, "Combustion Reactor", 38), SlimefunItems.COMBUSTION_REACTOR); + Slimefun.registerResearch(new Research(183, "Teleporter Base Components", 42), SlimefunItems.GPS_TELEPORTATION_MATRIX, SlimefunItems.GPS_TELEPORTER_PYLON); + Slimefun.registerResearch(new Research(184, "Teleporter Activation", 36), SlimefunItems.GPS_ACTIVATION_DEVICE_PERSONAL, SlimefunItems.GPS_ACTIVATION_DEVICE_SHARED); + Slimefun.registerResearch(new Research(185, "Upgraded Solar Generators", 28), SlimefunItems.SOLAR_GENERATOR_2, SlimefunItems.SOLAR_GENERATOR_3); + Slimefun.registerResearch(new Research(186, "Upgraded Transmitters", 36), SlimefunItems.GPS_TRANSMITTER_2, SlimefunItems.GPS_TRANSMITTER_3); + Slimefun.registerResearch(new Research(187, "Elevators", 28), SlimefunItems.ELEVATOR); + Slimefun.registerResearch(new Research(188, "Full-Time Solar Power", 44), SlimefunItems.SOLAR_GENERATOR_4); + Slimefun.registerResearch(new Research(189, "Top Tier Transmitter", 44), SlimefunItems.GPS_TRANSMITTER_4); + Slimefun.registerResearch(new Research(190, "Energy Networks 101", 6), SlimefunItems.ENERGY_REGULATOR); + Slimefun.registerResearch(new Research(191, "Butcher Androids", 32), SlimefunItems.PROGRAMMABLE_ANDROID_BUTCHER); + Slimefun.registerResearch(new Research(192, "Organic Food", 25), SlimefunItems.FOOD_FABRICATOR, SlimefunItems.WHEAT_ORGANIC_FOOD, SlimefunItems.CARROT_ORGANIC_FOOD, SlimefunItems.POTATO_ORGANIC_FOOD, SlimefunItems.SEEDS_ORGANIC_FOOD, SlimefunItems.BEETROOT_ORGANIC_FOOD, SlimefunItems.MELON_ORGANIC_FOOD, SlimefunItems.APPLE_ORGANIC_FOOD); + Slimefun.registerResearch(new Research(193, "Automated Feeding", 25), SlimefunItems.AUTO_BREEDER); + Slimefun.registerResearch(new Research(194, "Advanced Androids", 60), SlimefunItems.PROGRAMMABLE_ANDROID_2); + Slimefun.registerResearch(new Research(195, "Advanced Androids - Butcher", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_BUTCHER); + Slimefun.registerResearch(new Research(196, "Advanced Androids - Fisherman", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_FISHERMAN); + Slimefun.registerResearch(new Research(197, "Animal Growth Manipulation", 32), SlimefunItems.ANIMAL_GROWTH_ACCELERATOR); + Slimefun.registerResearch(new Research(198, "Exp Collector", 36), SlimefunItems.XP_COLLECTOR); + Slimefun.registerResearch(new Research(199, "Organic Fertilizer", 36), SlimefunItems.FOOD_COMPOSTER, SlimefunItems.WHEAT_FERTILIZER, SlimefunItems.CARROT_FERTILIZER, SlimefunItems.POTATO_FERTILIZER, SlimefunItems.SEEDS_FERTILIZER, SlimefunItems.BEETROOT_FERTILIZER, SlimefunItems.MELON_FERTILIZER, SlimefunItems.APPLE_FERTILIZER); + Slimefun.registerResearch(new Research(200, "Crop Growth Acceleration", 40), SlimefunItems.CROP_GROWTH_ACCELERATOR); + Slimefun.registerResearch(new Research(201, "Upgraded Crop Growth Accelerator", 44), SlimefunItems.CROP_GROWTH_ACCELERATOR_2); + Slimefun.registerResearch(new Research(202, "Reactor Essentials", 36), SlimefunItems.REACTOR_COOLANT_CELL, SlimefunItems.NEPTUNIUM, SlimefunItems.PLUTONIUM); + Slimefun.registerResearch(new Research(203, "Nuclear Power Plant", 48), SlimefunItems.NUCLEAR_REACTOR); + Slimefun.registerResearch(new Research(204, "Mr Freeze", 20), SlimefunItems.FREEZER); + Slimefun.registerResearch(new Research(205, "Cargo Basics", 30), SlimefunItems.CARGO_MOTOR, SlimefunItems.CARGO_MANAGER, SlimefunItems.CARGO_NODE); + Slimefun.registerResearch(new Research(206, "Cargo Setup", 30), SlimefunItems.CARGO_INPUT, SlimefunItems.CARGO_OUTPUT); + Slimefun.registerResearch(new Research(207, "Electric Ingot Fabrication", 18), SlimefunItems.ELECTRIC_GOLD_PAN, SlimefunItems.ELECTRIC_DUST_WASHER, SlimefunItems.ELECTRIC_INGOT_FACTORY); + Slimefun.registerResearch(new Research(208, "Faster Ingot Fabrication", 26), SlimefunItems.ELECTRIC_GOLD_PAN_2, SlimefunItems.ELECTRIC_DUST_WASHER_2, SlimefunItems.ELECTRIC_INGOT_FACTORY_2); + Slimefun.registerResearch(new Research(209, "Super Fast Ingot Fabrication", 32), SlimefunItems.ELECTRIC_GOLD_PAN_3, SlimefunItems.ELECTRIC_DUST_WASHER_3, SlimefunItems.ELECTRIC_INGOT_FACTORY_3, SlimefunItems.ELECTRIC_ORE_GRINDER_2); + Slimefun.registerResearch(new Research(210, "Automated Crafting", 20), SlimefunItems.AUTOMATED_CRAFTING_CHAMBER); + Slimefun.registerResearch(new Research(211, "Upgraded Food Fabrication", 28), SlimefunItems.FOOD_FABRICATOR_2, SlimefunItems.FOOD_COMPOSTER_2); + Slimefun.registerResearch(new Research(212, "Reactor Interaction", 18), SlimefunItems.REACTOR_ACCESS_PORT); + Slimefun.registerResearch(new Research(213, "Fluid Pump", 28), SlimefunItems.FLUID_PUMP); + Slimefun.registerResearch(new Research(214, "Upgraded Freezer", 29), SlimefunItems.FREEZER_2); + Slimefun.registerResearch(new Research(215, "Never-Ending Circle", 30), SlimefunItems.BOOSTED_URANIUM); + Slimefun.registerResearch(new Research(216, "Trash", 8), SlimefunItems.TRASH_CAN); + Slimefun.registerResearch(new Research(216, "Charging Bench", 8), SlimefunItems.CHARGING_BENCH); + Slimefun.registerResearch(new Research(217, "Advanced Output Node", 24), SlimefunItems.CARGO_OUTPUT_ADVANCED); + Slimefun.registerResearch(new Research(218, "Carbon Press", 28), SlimefunItems.CARBON_PRESS); + Slimefun.registerResearch(new Research(219, "Electric Smeltery", 28), SlimefunItems.ELECTRIC_SMELTERY); + Slimefun.registerResearch(new Research(220, "Upgraded Electric Furnace", 20), SlimefunItems.ELECTRIC_FURNACE_2, SlimefunItems.ELECTRIC_FURNACE_3); + Slimefun.registerResearch(new Research(221, "Upgraded Carbon Press", 26), SlimefunItems.CARBON_PRESS_2); + Slimefun.registerResearch(new Research(222, "Empowered Androids", 60), SlimefunItems.PROGRAMMABLE_ANDROID_3); + Slimefun.registerResearch(new Research(223, "Empowered Androids - Butcher", 30), SlimefunItems.PROGRAMMABLE_ANDROID_3_BUTCHER); + Slimefun.registerResearch(new Research(224, "Empowered Androids - Fisherman", 30), SlimefunItems.PROGRAMMABLE_ANDROID_3_FISHERMAN); + Slimefun.registerResearch(new Research(225, "Ultimate Carbon Press", 32), SlimefunItems.CARBON_PRESS_3); + Slimefun.registerResearch(new Research(226, "Automated Wither Killer", 35), SlimefunItems.WITHER_ASSEMBLER); + Slimefun.registerResearch(new Research(227, "Upgraded Heated Pressure Chamber", 20), SlimefunItems.HEATED_PRESSURE_CHAMBER_2); + Slimefun.registerResearch(new Research(228, "Elytras", 20), SlimefunItems.ELYTRA_SCALE, SlimefunItems.ELYTRA); + Slimefun.registerResearch(new Research(229, "Special Elytras", 30), SlimefunItems.INFUSED_ELYTRA, SlimefunItems.SOULBOUND_ELYTRA); + Slimefun.registerResearch(new Research(230, "Electrified Crucible", 26), SlimefunItems.ELECTRIFIED_CRUCIBLE); + Slimefun.registerResearch(new Research(231, "Hot Crucibles", 30), SlimefunItems.ELECTRIFIED_CRUCIBLE_2, SlimefunItems.ELECTRIFIED_CRUCIBLE_3); + Slimefun.registerResearch(new Research(232, "Advanced Electric Smeltery", 28), SlimefunItems.ELECTRIC_SMELTERY_2); + Slimefun.registerResearch(new Research(233, "Advanced Androids - Farmer", 30), SlimefunItems.PROGRAMMABLE_ANDROID_2_FARMER); + Slimefun.registerResearch(new Research(234, "Lava Generator", 38), SlimefunItems.LAVA_GENERATOR); + Slimefun.registerResearch(new Research(235, "Nether Ice Coolant", 45), SlimefunItems.NETHER_ICE, SlimefunItems.ENRICHED_NETHER_ICE, SlimefunItems.NETHER_ICE_COOLANT_CELL, SlimefunItems.NETHER_DRILL); + Slimefun.registerResearch(new Research(236, "Nether Star Reactor", 60), SlimefunItems.NETHERSTAR_REACTOR); + Slimefun.registerResearch(new Research(237, "Blistering Radioactivity", 38), SlimefunItems.BLISTERING_INGOT, SlimefunItems.BLISTERING_INGOT_2, SlimefunItems.BLISTERING_INGOT_3); + Slimefun.registerResearch(new Research(239, "Automatic Ignition Chamber", 12), SlimefunItems.IGNITION_CHAMBER); + } +} \ No newline at end of file diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java index 075e94cba6..85780be681 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunManager.java @@ -1,12 +1,10 @@ package me.mrCookieSlime.Slimefun.Setup; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.bukkit.Material; import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.Damageable; @@ -21,44 +19,44 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.VanillaItem; public class SlimefunManager { - - public static SlimefunStartup plugin; - public static String PREFIX; - public static Map> drops = new HashMap>(); - - public static void registerArmorSet(ItemStack baseComponent, ItemStack[] items, String idSyntax, PotionEffect[][] effects, boolean special, boolean slimefun) { - String[] components = new String[] {"_HELMET", "_CHESTPLATE", "_LEGGINGS", "_BOOTS"}; - Category cat = special ? Categories.MAGIC_ARMOR: Categories.ARMOR; - List recipes = new ArrayList(); - recipes.add(new ItemStack[] {baseComponent, baseComponent, baseComponent, baseComponent, null, baseComponent, null, null, null}); - recipes.add(new ItemStack[] {baseComponent, null, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent}); - recipes.add(new ItemStack[] {baseComponent, baseComponent, baseComponent, baseComponent, null, baseComponent, baseComponent, null, baseComponent}); - recipes.add(new ItemStack[] {null, null, null, baseComponent, null, baseComponent, baseComponent, null, baseComponent}); - for (int i = 0; i < 4; i++) { - if ((effects.length - 1) >= i) if (effects[i].length > 0) new SlimefunArmorPiece(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i), effects[i]).register(slimefun); - else new SlimefunItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); - } - } - - public static void registerArmorSet(ItemStack baseComponent, ItemStack[] items, String idSyntax, boolean slimefun, boolean vanilla) { - String[] components = new String[] {"_HELMET", "_CHESTPLATE", "_LEGGINGS", "_BOOTS"}; - Category cat = Categories.ARMOR; - List recipes = new ArrayList(); - recipes.add(new ItemStack[] {baseComponent, baseComponent, baseComponent, baseComponent, null, baseComponent, null, null, null}); - recipes.add(new ItemStack[] {baseComponent, null, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent}); - recipes.add(new ItemStack[] {baseComponent, baseComponent, baseComponent, baseComponent, null, baseComponent, baseComponent, null, baseComponent}); - recipes.add(new ItemStack[] {null, null, null, baseComponent, null, baseComponent, baseComponent, null, baseComponent}); - for (int i = 0; i < 4; i++) { - if (vanilla) { - new VanillaItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); - } else { - new SlimefunItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); - } - } - } - - //ToDO: ALl all - //Charcoal=coal? + + public static SlimefunStartup plugin; + public static String PREFIX; + public static Map> drops = new HashMap<>(); + + public static void registerArmorSet(ItemStack baseComponent, ItemStack[] items, String idSyntax, PotionEffect[][] effects, boolean special, boolean slimefun) { + String[] components = new String[] {"_HELMET", "_CHESTPLATE", "_LEGGINGS", "_BOOTS"}; + Category cat = special ? Categories.MAGIC_ARMOR: Categories.ARMOR; + List recipes = new ArrayList(); + recipes.add(new ItemStack[] {baseComponent, baseComponent, baseComponent, baseComponent, null, baseComponent, null, null, null}); + recipes.add(new ItemStack[] {baseComponent, null, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent}); + recipes.add(new ItemStack[] {baseComponent, baseComponent, baseComponent, baseComponent, null, baseComponent, baseComponent, null, baseComponent}); + recipes.add(new ItemStack[] {null, null, null, baseComponent, null, baseComponent, baseComponent, null, baseComponent}); + for (int i = 0; i < 4; i++) { + if ((effects.length - 1) >= i) if (effects[i].length > 0) new SlimefunArmorPiece(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i), effects[i]).register(slimefun); + else new SlimefunItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); + } + } + + public static void registerArmorSet(ItemStack baseComponent, ItemStack[] items, String idSyntax, boolean slimefun, boolean vanilla) { + String[] components = new String[] {"_HELMET", "_CHESTPLATE", "_LEGGINGS", "_BOOTS"}; + Category cat = Categories.ARMOR; + List recipes = new ArrayList(); + recipes.add(new ItemStack[] {baseComponent, baseComponent, baseComponent, baseComponent, null, baseComponent, null, null, null}); + recipes.add(new ItemStack[] {baseComponent, null, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent, baseComponent}); + recipes.add(new ItemStack[] {baseComponent, baseComponent, baseComponent, baseComponent, null, baseComponent, baseComponent, null, baseComponent}); + recipes.add(new ItemStack[] {null, null, null, baseComponent, null, baseComponent, baseComponent, null, baseComponent}); + for (int i = 0; i < 4; i++) { + if (vanilla) { + new VanillaItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); + } else { + new SlimefunItem(cat, items[i], idSyntax + components[i], RecipeType.ARMOR_FORGE, recipes.get(i)).register(slimefun); + } + } + } + + //ToDO: ALl all + //Charcoal=coal? // public static List data_safe = Arrays.asList(Material.WHITE_WOOL, // Material.WHITE_CARPET, // Material.WHITE_TERRACOTTA, @@ -67,74 +65,64 @@ public static void registerArmorSet(ItemStack baseComponent, ItemStack[] items, // Material.INK_SAC, // Material.STONE, // Material.COAL, Material.SKULL_ITEM, Material.RAW_FISH, Material.COOKED_FISH); - - public static boolean isItemSimiliar(ItemStack item, ItemStack SFitem, boolean lore) { - return isItemSimiliar(item, SFitem, lore, DataType.IF_COLORED); - } - - public static enum DataType { - - ALWAYS, - NEVER, - IF_COLORED; - - } - - @SuppressWarnings("deprecation") - public static boolean isItemSimiliar(ItemStack item, ItemStack SFitem, boolean lore, DataType data) { - if (item == null) return SFitem == null; - if (SFitem == null) return false; - - if (item.getType() == SFitem.getType() && item.getAmount() >= SFitem.getAmount()) { - //ToDo: Removed data_safe - is that correct? - if (data.equals(DataType.ALWAYS)/* || (data.equals(DataType.IF_COLORED) && data_safe.contains(item.getType()))*/) { -/* if (data_safe.contains(item.getType())) { - if (item.getData().getData() != SFitem.getData().getData()) { - if (!(SFitem.getDurability() == item.getData().getData() && SFitem.getData().getData() == item.getDurability())) return false; - } - } - else*/ if (data.equals(DataType.ALWAYS) && ((Damageable) item.getItemMeta()).getDamage() != ((Damageable) SFitem.getItemMeta()).getDamage()) { - return false; - } - } - - if (item.hasItemMeta() && SFitem.hasItemMeta()) { - if (item.getItemMeta().hasDisplayName() && SFitem.getItemMeta().hasDisplayName()) { - if (item.getItemMeta().getDisplayName().equals(SFitem.getItemMeta().getDisplayName())) { - if (lore) { - if (item.getItemMeta().hasLore() && SFitem.getItemMeta().hasLore()) { - return equalsLore(item.getItemMeta().getLore(), SFitem.getItemMeta().getLore()); - } - else return !item.getItemMeta().hasLore() && !SFitem.getItemMeta().hasLore(); - } - else return true; - } - else return false; - } - else if (!item.getItemMeta().hasDisplayName() && !SFitem.getItemMeta().hasDisplayName()) { - if (lore) { - if (item.getItemMeta().hasLore() && SFitem.getItemMeta().hasLore()) { - return equalsLore(item.getItemMeta().getLore(), SFitem.getItemMeta().getLore()); - } - else return !item.getItemMeta().hasLore() && !SFitem.getItemMeta().hasLore(); - } - else return true; - } - else return false; - } - else return !item.hasItemMeta() && !SFitem.hasItemMeta(); - } - else return false; - } - - private static boolean equalsLore(List lore, List lore2) { - String string1 = "", string2 = ""; - for (String string: lore) { - if (!string.startsWith("&e&e&7")) string1 = string1 + "-NEW LINE-" + string; - } - for (String string: lore2) { - if (!string.startsWith("&e&e&7")) string2 = string2 + "-NEW LINE-" + string; - } - return string1.equals(string2); - } + + public static boolean isItemSimiliar(ItemStack item, ItemStack SFitem, boolean lore) { + return isItemSimiliar(item, SFitem, lore, DataType.IF_COLORED); + } + + + @Deprecated + public static enum DataType { + + ALWAYS, + NEVER, + IF_COLORED; + + } + + @Deprecated + public static boolean isItemSimiliar(ItemStack item, ItemStack SFitem, boolean lore, DataType data) { + if (item == null) return SFitem == null; + if (SFitem == null) return false; + + if (item.getType() == SFitem.getType() && item.getAmount() >= SFitem.getAmount()) { + if (item.hasItemMeta() && SFitem.hasItemMeta()) { + if (item.getItemMeta().hasDisplayName() && SFitem.getItemMeta().hasDisplayName()) { + if (item.getItemMeta().getDisplayName().equals(SFitem.getItemMeta().getDisplayName())) { + if (lore) { + if (item.getItemMeta().hasLore() && SFitem.getItemMeta().hasLore()) { + return equalsLore(item.getItemMeta().getLore(), SFitem.getItemMeta().getLore()); + } + else return !item.getItemMeta().hasLore() && !SFitem.getItemMeta().hasLore(); + } + else return true; + } + else return false; + } + else if (!item.getItemMeta().hasDisplayName() && !SFitem.getItemMeta().hasDisplayName()) { + if (lore) { + if (item.getItemMeta().hasLore() && SFitem.getItemMeta().hasLore()) { + return equalsLore(item.getItemMeta().getLore(), SFitem.getItemMeta().getLore()); + } + else return !item.getItemMeta().hasLore() && !SFitem.getItemMeta().hasLore(); + } + else return true; + } + else return false; + } + else return !item.hasItemMeta() && !SFitem.hasItemMeta(); + } + else return false; + } + + private static boolean equalsLore(List lore, List lore2) { + String string1 = "", string2 = ""; + for (String string: lore) { + if (!string.startsWith("&e&e&7")) string1 = string1 + "-NEW LINE-" + string; + } + for (String string: lore2) { + if (!string.startsWith("&e&e&7")) string2 = string2 + "-NEW LINE-" + string; + } + return string1.equals(string2); + } } diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 2d24f8dc86..f7782f593c 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -780,11 +780,11 @@ public boolean onInteract(Player p, MultiBlock mb, Block b) { 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)) { + if (j == (inv.getContents().length - 1) && !SlimefunManager.isItemSimiliar(converting, inv.getContents()[j], true)) { craft = false; break; } - else if (SlimefunManager.isItemSimiliar(inv.getContents()[j], converting, true, SlimefunManager.DataType.ALWAYS)) break; + else if (SlimefunManager.isItemSimiliar(inv.getContents()[j], converting, true)) break; } } } @@ -1151,13 +1151,13 @@ public boolean onInteract(final Player p, MultiBlock mb, final Block b) { @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())) { + if (e.getClickedBlock() == null && !Variables.jump_state.containsKey(p.getUniqueId())) { e.setCancelled(true); if (p.getInventory().getItemInOffHand().getType().equals(Material.BOW)) { // Cancel, to fix dupe #740 return false; } - Variables.jump.put(p.getUniqueId(), p.getInventory().getItemInMainHand().getType() != Material.SHEARS); + Variables.jump_state.put(p.getUniqueId(), p.getInventory().getItemInMainHand().getType() != Material.SHEARS); if (p.getInventory().getItemInMainHand().getType() == Material.LEAD) PlayerInventory.consumeItemInHand(p); Vector direction = p.getEyeLocation().getDirection().multiply(2.0); @@ -1170,7 +1170,7 @@ public boolean onRightClick(ItemUseEvent e, Player p, ItemStack item) { b.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 100000, 100000)); b.setLeashHolder(arrow); - Variables.damage.put(p.getUniqueId(), true); + Variables.damage.add(p.getUniqueId()); Variables.remove.put(p.getUniqueId(), new Entity[] {b, arrow}); } return true; @@ -2141,10 +2141,11 @@ public boolean onRightClick(ItemUseEvent e, final Player p, ItemStack item) { @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", "CHEST"}; + final boolean damageOnUse = Boolean.TRUE.equals(((Boolean) Slimefun.getItemValue("EXPLOSIVE_PICKAXE", "damage-on-use"))); 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", "CHEST")}) + new String[] {"unbreakable-blocks", "damage-on-use"}, new Object[] {Arrays.asList("BEDROCK", "BARRIER", "COMMAND", "COMMAND_CHAIN", "COMMAND_REPEATING"), Boolean.FALSE }) .register(true, new BlockBreakHandler() { @Override @@ -2161,7 +2162,7 @@ public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List if (SlimefunStartup.instance.isCoreProtectInstalled()) SlimefunStartup.instance.getCoreProtectAPI().logRemoval(e.getPlayer().getName(), b.getLocation(), b.getType(), b.getBlockData()); b.getWorld().playEffect(b.getLocation(), Effect.STEP_SOUND, b.getType()); SlimefunItem sfItem = BlockStorage.check(b); - boolean allow = true; + boolean allow = false; 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); @@ -2182,11 +2183,17 @@ else if (b.getType().name().endsWith("_SHULKER_BOX")) { } b.setType(Material.AIR); } + if (damageOnUse) { + if (!item.getEnchantments().containsKey(Enchantment.DURABILITY) || SlimefunStartup.randomize(100) <= (60 + 40 / (item.getEnchantmentLevel(Enchantment.DURABILITY) + 1))) { + PlayerInventory.damageItemInHand(e.getPlayer()); + } + } } } } } } + PlayerInventory.update(e.getPlayer()); return true; } else return false; diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index a918dc2ef0..7630a2a08f 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -52,13 +52,12 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.MachineFuel; import me.mrCookieSlime.Slimefun.Setup.Messages; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; -import me.mrCookieSlime.Slimefun.URID.URID; import me.mrCookieSlime.Slimefun.api.GuideHandler; import me.mrCookieSlime.Slimefun.api.Slimefun; public class SlimefunGuide { - public static Map> history = new HashMap>(); + public static Map> history = new HashMap<>(); public static int month = 0; public static List contributors = new ArrayList(); @@ -341,11 +340,11 @@ public static void openGuide(Player p, boolean book) { if (!SlimefunStartup.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled-items.SLIMEFUN_GUIDE")) return; if (!history.containsKey(p.getUniqueId())) openMainMenu(p, true, book, 1); else { - URID last = getLastEntry(p, false); - if (URID.decode(last) instanceof Category) openCategory(p, (Category) URID.decode(last), true, 1, book); - else if (URID.decode(last) instanceof SlimefunItem) displayItem(p, ((SlimefunItem) URID.decode(last)).getItem(), false, book, 0); - else if (URID.decode(last) instanceof GuideHandler) ((GuideHandler) URID.decode(last)).run(p, true, book); - else displayItem(p, (ItemStack) URID.decode(last), false, book, 0); + Object last = getLastEntry(p, false); + if (last instanceof Category) openCategory(p, (Category) last, true, 1, book); + else if (last instanceof SlimefunItem) displayItem(p, ((SlimefunItem) last).getItem(), false, book, 0); + else if (last instanceof GuideHandler) ((GuideHandler) last).run(p, true, book); + else displayItem(p, (ItemStack) last, false, book, 0); } } @@ -903,24 +902,23 @@ public boolean onClick(Player p, int slot, ItemStack item, ClickAction action) { } if (survival) { - addToHistory(p, category.getURID()); + addToHistory(p, category); } } - public static void addToHistory(Player p, URID urid) { - List list = new ArrayList(); + public static void addToHistory(Player p, Object obj) { + List list = new ArrayList<>(); if (history.containsKey(p.getUniqueId())) list = history.get(p.getUniqueId()); - list.add(urid); + list.add(obj); history.put(p.getUniqueId(), list); } - private static URID getLastEntry(Player p, boolean remove) { - List list = new ArrayList(); + private static Object getLastEntry(Player p, boolean remove) { + List list = new ArrayList<>(); if (history.containsKey(p.getUniqueId())) list = history.get(p.getUniqueId()); if (remove && list.size() >= 1) { - URID urid = list.get(list.size() - 1); - urid.markDirty(); - list.remove(urid); + Object obj = list.get(list.size() - 1); + list.remove(obj); } if (list.isEmpty()) history.remove(p.getUniqueId()); else history.put(p.getUniqueId(), list); @@ -998,18 +996,18 @@ else if (r instanceof FurnaceRecipe) { - if (addToHistory) addToHistory(p, sfItem != null ? sfItem.getURID(): URID.nextURID(item, true)); + if (addToHistory) addToHistory(p, sfItem != null ? sfItem: item); if (history.containsKey(p.getUniqueId()) && history.get(p.getUniqueId()).size() > 1) { menu.addItem(0, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 返回", "", "&r左键: &7返回上一页", "&rShift +左键: &7返回主菜单")); menu.addMenuClickHandler(0, (p13, slot, item1, action) -> { if (action.isShiftClicked()) openMainMenu(p13, true, book, 1); else { - URID last = getLastEntry(p13, true); - if (URID.decode(last) instanceof Category) openCategory(p13, (Category) URID.decode(last), true, 1, book); - else if (URID.decode(last) instanceof SlimefunItem) displayItem(p13, ((SlimefunItem) URID.decode(last)).getItem(), false, book, 0); - else if (URID.decode(last) instanceof GuideHandler) ((GuideHandler) URID.decode(last)).run(p13, true, book); - else displayItem(p13, (ItemStack) URID.decode(last), false, book, 0); + Object last = getLastEntry(p13, true); + if (last instanceof Category) openCategory(p13, (Category) last, true, 1, book); + else if (last instanceof SlimefunItem) displayItem(p13, ((SlimefunItem) last).getItem(), false, book, 0); + else if (last instanceof GuideHandler) ((GuideHandler) last).run(p13, true, book); + else displayItem(p13, (ItemStack) last, false, book, 0); } return false; }); @@ -1186,11 +1184,6 @@ else if (sfItem instanceof AReactor) { } public static void clearHistory(UUID uuid) { - if (!history.containsKey(uuid)) return; - - for (URID urid: history.get(uuid)) { - urid.markDirty(); - } history.remove(uuid); } diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java index 55454d7ff5..12a5aab7fa 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunStartup.java @@ -2,21 +2,34 @@ import java.io.File; -import me.mrCookieSlime.Slimefun.listeners.*; +import me.mrCookieSlime.Slimefun.listeners.AncientAltarListener; +import me.mrCookieSlime.Slimefun.listeners.AndroidKillingListener; +import me.mrCookieSlime.Slimefun.listeners.ArmorListener; +import me.mrCookieSlime.Slimefun.listeners.AutonomousToolsListener; +import me.mrCookieSlime.Slimefun.listeners.BackpackListener; +import me.mrCookieSlime.Slimefun.listeners.BlockListener; +import me.mrCookieSlime.Slimefun.listeners.BowListener; +import me.mrCookieSlime.Slimefun.listeners.ClearLaggIntegration; +import me.mrCookieSlime.Slimefun.listeners.CoolerListener; +import me.mrCookieSlime.Slimefun.listeners.DamageListener; +import me.mrCookieSlime.Slimefun.listeners.FurnaceListener; +import me.mrCookieSlime.Slimefun.listeners.GearListener; +import me.mrCookieSlime.Slimefun.listeners.GuideOnJoinListener; +import me.mrCookieSlime.Slimefun.listeners.ItemListener; +import me.mrCookieSlime.Slimefun.listeners.ItemPickupListener; +import me.mrCookieSlime.Slimefun.listeners.NetworkListener; +import me.mrCookieSlime.Slimefun.listeners.PlayerQuitListener; +import me.mrCookieSlime.Slimefun.listeners.TalismanListener; +import me.mrCookieSlime.Slimefun.listeners.TeleporterListener; +import me.mrCookieSlime.Slimefun.listeners.ToolListener; +import me.mrCookieSlime.Slimefun.listeners.WorldListener; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.world.WorldLoadEvent; -import org.bukkit.event.world.WorldUnloadEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import org.bukkit.scheduler.BukkitRunnable; import me.mrCookieSlime.CSCoreLibPlugin.CSCoreLib; import me.mrCookieSlime.CSCoreLibPlugin.PluginUtils; @@ -34,7 +47,6 @@ import me.mrCookieSlime.Slimefun.GitHub.GitHubSetup; import me.mrCookieSlime.Slimefun.Hashing.ItemHash; import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; -import me.mrCookieSlime.Slimefun.Misc.BookDesign; import me.mrCookieSlime.Slimefun.Objects.MultiBlock; import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunArmorPiece; @@ -48,8 +60,7 @@ import me.mrCookieSlime.Slimefun.Setup.ResearchSetup; import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; import me.mrCookieSlime.Slimefun.Setup.SlimefunSetup; -import me.mrCookieSlime.Slimefun.URID.AutoSavingTask; -import me.mrCookieSlime.Slimefun.URID.URID; +import me.mrCookieSlime.Slimefun.api.AutoSavingTask; import me.mrCookieSlime.Slimefun.WorldEdit.WESlimefunManager; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.Slimefun; @@ -376,7 +387,7 @@ public void onDisable() { SlimefunItem.handlers = null; SlimefunItem.radioactive = null; Variables.damage = null; - Variables.jump = null; + Variables.jump_state = null; Variables.mode = null; SlimefunGuide.history = null; Variables.altarinuse = null; @@ -389,8 +400,6 @@ public void onDisable() { SlimefunCommand.arguments = null; SlimefunCommand.descriptions = null; SlimefunCommand.tabs = null; - URID.objects = null; - URID.ids = null; SlimefunItem.blockhandler = null; BlockMenuPreset.presets = null; BlockStorage.loaded_tickers = null; diff --git a/src/me/mrCookieSlime/Slimefun/URID/URID.java b/src/me/mrCookieSlime/Slimefun/URID/URID.java deleted file mode 100644 index ddc9f2886b..0000000000 --- a/src/me/mrCookieSlime/Slimefun/URID/URID.java +++ /dev/null @@ -1,46 +0,0 @@ -package me.mrCookieSlime.Slimefun.URID; - -import java.util.HashMap; -import java.util.Map; - -public class URID { - - public static Map objects = new HashMap(); - public static Map ids = new HashMap(); - - private static int next = 0; - private int id; - private boolean dirty; - - public URID(Object object, boolean dirty) { - this.id = next; - next++; - objects.put(this, object); - ids.put(toInteger(), this); - } - - public int toInteger() { - return id; - } - - public static URID nextURID(Object object, boolean dirty) { - URID urid = new URID(object, dirty); - return urid; - } - - public static URID fromInteger(int id) { - return ids.get(id); - } - - public static Object decode(URID urid) { - return objects.get(urid); - } - - public void markDirty() { - if (dirty) { - ids.remove(toInteger()); - objects.remove(this); - } - } - -} diff --git a/src/me/mrCookieSlime/Slimefun/Variables.java b/src/me/mrCookieSlime/Slimefun/Variables.java index d47a44372d..8d9f6f1477 100644 --- a/src/me/mrCookieSlime/Slimefun/Variables.java +++ b/src/me/mrCookieSlime/Slimefun/Variables.java @@ -1,11 +1,6 @@ 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 java.util.*; import org.bukkit.Location; import org.bukkit.entity.Entity; @@ -13,18 +8,18 @@ public class Variables { - public static Map jump = new HashMap(); - public static Map damage = new HashMap(); - public static Map remove = new HashMap(); - public static Map mode = new HashMap(); + public static Map jump_state = new HashMap<>(); + public static Set damage = new HashSet<>(); + public static Map remove = new HashMap<>(); + public static Map mode = new HashMap<>(); - public static Map enchanting = new HashMap(); - public static Map backpack = new HashMap(); - public static HashSet altarinuse = new HashSet(); + 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(); - public static List cancelPlace = new ArrayList(); - public static Map arrows = new HashMap(); + public static Map> soulbound = new HashMap<>(); + public static List blocks = new ArrayList<>(); + public static List cancelPlace = new ArrayList<>(); + public static Map arrows = new HashMap<>(); } diff --git a/src/me/mrCookieSlime/Slimefun/URID/AutoSavingTask.java b/src/me/mrCookieSlime/Slimefun/api/AutoSavingTask.java similarity index 89% rename from src/me/mrCookieSlime/Slimefun/URID/AutoSavingTask.java rename to src/me/mrCookieSlime/Slimefun/api/AutoSavingTask.java index aba9d50255..396b62a760 100644 --- a/src/me/mrCookieSlime/Slimefun/URID/AutoSavingTask.java +++ b/src/me/mrCookieSlime/Slimefun/api/AutoSavingTask.java @@ -1,4 +1,4 @@ -package me.mrCookieSlime.Slimefun.URID; +package me.mrCookieSlime.Slimefun.api; import java.util.HashSet; import java.util.Set; @@ -13,7 +13,7 @@ public class AutoSavingTask implements Runnable { @Override public void run() { - Set worlds = new HashSet(); + Set worlds = new HashSet<>(); for (World world: Bukkit.getWorlds()) { if (BlockStorage.isWorldRegistered(world.getName())) { diff --git a/src/me/mrCookieSlime/Slimefun/api/Backpacks.java b/src/me/mrCookieSlime/Slimefun/api/Backpacks.java index 0fad7bcc07..7dd5e9ab73 100644 --- a/src/me/mrCookieSlime/Slimefun/api/Backpacks.java +++ b/src/me/mrCookieSlime/Slimefun/api/Backpacks.java @@ -15,7 +15,7 @@ public class Backpacks { public static String createBackpack(Player p, int size) { - List ids = new ArrayList(); + List ids = new ArrayList<>(); Config cfg = new Config(new File("data-storage/Slimefun/Players/" + p.getUniqueId() + ".yml")); for (int i = 0; i < 1000; i++) { if (cfg.contains("backpacks." + i + ".size")) ids.add(i); diff --git a/src/me/mrCookieSlime/Slimefun/api/BlockInfoConfig.java b/src/me/mrCookieSlime/Slimefun/api/BlockInfoConfig.java index 8cffcb7c2f..1bec33657e 100644 --- a/src/me/mrCookieSlime/Slimefun/api/BlockInfoConfig.java +++ b/src/me/mrCookieSlime/Slimefun/api/BlockInfoConfig.java @@ -25,7 +25,7 @@ public Map getMap(){ @Override protected void store(String path, Object value) { if (value != null && !(value instanceof String)) { - throw new UnsupportedOperationException("Can't set \""+path+"\" to \""+value+"\" (type: "+value.getClass().getSimpleName()+") because BlockInfoConfig only supports Strings"); + throw new UnsupportedOperationException("Can't set \"" + path + "\" to \"" + value + "\" (type: " + value.getClass().getSimpleName() + ") because BlockInfoConfig only supports Strings"); } checkPath(path); if (value == null) { @@ -38,7 +38,7 @@ protected void store(String path, Object value) { private void checkPath(String path) { if (path.contains(".")) { - throw new UnsupportedOperationException("BlockInfoConfig only supports Map (path: " + path+")"); + throw new UnsupportedOperationException("BlockInfoConfig only supports Map (path: " + path + ")"); } } @@ -66,7 +66,7 @@ public Set getKeys() { } private UnsupportedOperationException invalidType(String path) { - return new UnsupportedOperationException("Can't get \""+path+"\" because BlockInfoConfig only supports String values"); + return new UnsupportedOperationException("Can't get \"" + path + "\" because BlockInfoConfig only supports String values"); } @Override diff --git a/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java b/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java index 3fc94823fb..6562537eae 100644 --- a/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java +++ b/src/me/mrCookieSlime/Slimefun/api/BlockStorage.java @@ -35,19 +35,19 @@ public class BlockStorage { private static final String path_blocks = "data-storage/Slimefun/stored-blocks/"; 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 Set loaded_tickers = new HashSet(); + public static Map worlds = new HashMap<>(); + public static Map> ticking_chunks = new HashMap<>(); + public static Set loaded_tickers = new HashSet<>(); private World world; private Map storage = new HashMap<>(); - private static Map map_chunks = new HashMap(); + private static Map map_chunks = new HashMap<>(); - private Map inventories = new HashMap(); - public static Map universal_inventories = new HashMap(); + private Map inventories = new HashMap<>(); + public static Map universal_inventories = new HashMap<>(); - private Map cache_blocks = new HashMap(); + private Map cache_blocks = new HashMap<>(); public static int info_delay; @@ -93,9 +93,14 @@ public BlockStorage(final World w) { try { for (File file: f.listFiles()) { - if (file.getName().endsWith(".sfb")) { + if (file.getName().equals("null.sfb")) { + System.err.println("[Slimefun] 发现文件损坏!"); + System.err.println("[Slimefun] Slimefun 将会直接跳过这些文件,"); + System.err.println("[Slimefun] 但是你应该去看看它们!"); + } + else if (file.getName().endsWith(".sfb")) { if (timestamp + info_delay < System.currentTimeMillis()) { - System.out.println("[Slimefun] Loading Blocks... " + Math.round((((done * 100.0f) / total) * 100.0f) / 100.0f) + "% done (\"" + w.getName() + "\")"); + System.out.println("[Slimefun] 正在读取粘液科技方块... " + Math.round((((done * 100.0f) / total) * 100.0f) / 100.0f) + "% 已完成 (\"" + w.getName() + "\")"); timestamp = System.currentTimeMillis(); } @@ -126,7 +131,7 @@ public BlockStorage(final World w) { 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 + ")"); + System.err.println("[Slimefun] 加载 " + file.getName() + " 时出现了问题 (ERR: " + key + ")"); x.printStackTrace(); } } @@ -135,9 +140,9 @@ public BlockStorage(final World w) { } } finally { long time = (System.currentTimeMillis() - start); - System.out.println("[Slimefun] Loading Blocks... 100% (FINISHED - " + time + "ms)"); - System.out.println("[Slimefun] Loaded a total of " + totalBlocks + " Blocks for World \"" + world.getName() + "\""); - if (totalBlocks > 0) System.out.println("[Slimefun] Avg: " + DoubleHandler.fixDouble((double) time / (double) totalBlocks, 3) + "ms/Block"); + System.out.println("[Slimefun] 读取粘液科技方块完成 (耗时 - " + time + "ms)"); + System.out.println("[Slimefun] 已加载了 " + totalBlocks + " 个方块在世界 \"" + world.getName() + "\""); + if (totalBlocks > 0) System.out.println("[Slimefun] 平均值: " + DoubleHandler.fixDouble((double) time / (double) totalBlocks, 3) + "ms/每方块"); } } else f.mkdirs(); @@ -191,12 +196,12 @@ public BlockStorage(final World w) { public void computeChanges() { changes = cache_blocks.size() + chunk_changes; - Map inventories2 = new HashMap(inventories); + Map inventories2 = new HashMap<>(inventories); for (Map.Entry entry: inventories2.entrySet()) { changes += entry.getValue().changes; } - Map universal_inventories2 = new HashMap(universal_inventories); + Map universal_inventories2 = new HashMap<>(universal_inventories); for (Map.Entry entry: universal_inventories2.entrySet()) { changes += entry.getValue().changes; } @@ -215,9 +220,9 @@ public void save(boolean computeChanges, boolean remove) { if (changes == 0) return; - System.out.println("[Slimefun] Saving Blocks for World \"" + world.getName() + "\" (" + changes + " Changes queued)"); + System.out.println("[Slimefun] 正在保存世界 \"" + world.getName() + "\" 中的更改... (" + changes + " 个更改已列队)"); - Map cache = new HashMap(cache_blocks); + Map cache = new HashMap<>(cache_blocks); for (Map.Entry entry: cache.entrySet()) { cache_blocks.remove(entry.getKey()); @@ -235,13 +240,13 @@ public void save(boolean computeChanges, boolean remove) { } } - Map inventories2 = new HashMap(inventories); + Map inventories2 = new HashMap<>(inventories); for (Map.Entry entry: inventories2.entrySet()) { entry.getValue().save(entry.getKey()); } - Map universal_inventories2 = new HashMap(universal_inventories); + Map universal_inventories2 = new HashMap<>(universal_inventories); for (Map.Entry entry: universal_inventories2.entrySet()) { entry.getValue().save(); diff --git a/src/me/mrCookieSlime/Slimefun/api/GuideHandler.java b/src/me/mrCookieSlime/Slimefun/api/GuideHandler.java index 9466c3089d..d3360b032d 100644 --- a/src/me/mrCookieSlime/Slimefun/api/GuideHandler.java +++ b/src/me/mrCookieSlime/Slimefun/api/GuideHandler.java @@ -5,22 +5,10 @@ import me.mrCookieSlime.CSCoreLibPlugin.PlayerRunnable; import me.mrCookieSlime.CSCoreLibPlugin.general.Inventory.ChestMenu; import me.mrCookieSlime.Slimefun.SlimefunGuide; -import me.mrCookieSlime.Slimefun.URID.URID; import org.bukkit.entity.Player; public abstract class GuideHandler { - - URID urid; - - public GuideHandler() { - this.urid = URID.nextURID(this, false); - } - - public URID getURID() { - return this.urid; - } - public abstract void addEntry(List texts, List tooltips); public abstract PlayerRunnable getRunnable(); public abstract int getTier(); @@ -36,7 +24,7 @@ public void run(Player p, boolean survival, boolean book) { this.getRunnable(book).run(p); if (survival && this.trackHistory()) { - SlimefunGuide.addToHistory(p, getURID()); + SlimefunGuide.addToHistory(p, this); } } diff --git a/src/me/mrCookieSlime/Slimefun/api/Soul.java b/src/me/mrCookieSlime/Slimefun/api/Soul.java index ee5beb279b..4ac3cb68c6 100644 --- a/src/me/mrCookieSlime/Slimefun/api/Soul.java +++ b/src/me/mrCookieSlime/Slimefun/api/Soul.java @@ -12,7 +12,7 @@ public class Soul { public static void storeItem(UUID uuid, ItemStack drop) { - List items = new ArrayList(); + List items = new ArrayList<>(); if (Variables.soulbound.containsKey(uuid)) items = Variables.soulbound.get(uuid); items.add(drop); Variables.soulbound.put(uuid, items); diff --git a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java index c2ef3af0fa..98877eb89d 100644 --- a/src/me/mrCookieSlime/Slimefun/api/TickerTask.java +++ b/src/me/mrCookieSlime/Slimefun/api/TickerTask.java @@ -23,22 +23,22 @@ public class TickerTask implements Runnable { public boolean HALTED = false; - public Map move = new HashMap(); - public Map delete = new HashMap(); + public Map move = new HashMap<>(); + public Map delete = new HashMap<>(); - private Set tickers = new HashSet(); + private Set tickers = new HashSet<>(); private int skipped = 0, chunks = 0, machines = 0; private long time = 0; - private Map map_chunk = new HashMap(); - private Map map_machine = new HashMap(); - private Map map_machinetime = new HashMap(); - private Map map_chunktime = new HashMap(); - private Set skipped_chunks = new HashSet(); + private Map map_chunk = new HashMap<>(); + private Map map_machine = new HashMap<>(); + private Map map_machinetime = new HashMap<>(); + private Map map_chunktime = new HashMap<>(); + private Set skipped_chunks = new HashSet<>(); - public static Map block_timings = new HashMap(); + public static Map block_timings = new HashMap<>(); - public static Map bugged_blocks = new HashMap(); + public static Map bugged_blocks = new HashMap<>(); @Override public void run() { @@ -56,10 +56,10 @@ public void run() { map_machinetime.clear(); block_timings.clear(); - final Map bugged = new HashMap(bugged_blocks); + final Map bugged = new HashMap<>(bugged_blocks); bugged_blocks.clear(); - Map remove = new HashMap(delete); + Map remove = new HashMap<>(delete); for (Map.Entry entry: remove.entrySet()) { BlockStorage._integrated_removeBlockInfo(entry.getKey(), entry.getValue()); @@ -105,11 +105,11 @@ public void run() { try { PrintStream stream = new PrintStream(file); stream.println(); - stream.println("Server Software: " + Bukkit.getName()); - stream.println(" Build: " + Bukkit.getVersion()); + stream.println("服务端名称: " + Bukkit.getName()); + stream.println(" 构建版本号: " + Bukkit.getVersion()); stream.println(" Minecraft: " + Bukkit.getBukkitVersion()); stream.println(); - stream.println("Slimefun Environment:"); + stream.println("Slimefun:"); stream.println(" CS-CoreLib v" + CSCoreLib.getLib().getDescription().getVersion()); stream.println(" Slimefun v" + SlimefunStartup.instance.getDescription().getVersion()); stream.println(); @@ -129,26 +129,26 @@ public void run() { } } - stream.println(" Installed Addons (" + addons.size() + ")"); + stream.println(" 已安装的扩展 (" + addons.size() + ")"); for (String addon : addons) { stream.println(addon); } stream.println(); - stream.println("Installed Plugins (" + plugins.size() + "):"); + stream.println("已安装的插件 (" + plugins.size() + "):"); for (String plugin : plugins) { stream.println(plugin); } stream.println(); stream.println("Ticked Block:"); - stream.println(" World: " + l.getWorld().getName()); + stream.println(" 世界: " + l.getWorld().getName()); stream.println(" X: " + l.getBlockX()); stream.println(" Y: " + l.getBlockY()); stream.println(" Z: " + l.getBlockZ()); stream.println(); - stream.println("Slimefun Data:"); + stream.println("Slimefun 数据:"); stream.println(" ID: " + item.getID()); - stream.println(" Inventory: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l)); - stream.println(" Data: " + BlockStorage.getBlockInfoAsJson(l)); + stream.println(" 方块物品栏: " + BlockStorage.getStorage(l.getWorld()).hasInventory(l)); + stream.println(" 方块数据: " + BlockStorage.getBlockInfoAsJson(l)); stream.println(); stream.println("Stacktrace:"); stream.println(); diff --git a/src/me/mrCookieSlime/Slimefun/api/energy/ChargableBlock.java b/src/me/mrCookieSlime/Slimefun/api/energy/ChargableBlock.java index 81892409d3..7707c9cdc0 100644 --- a/src/me/mrCookieSlime/Slimefun/api/energy/ChargableBlock.java +++ b/src/me/mrCookieSlime/Slimefun/api/energy/ChargableBlock.java @@ -18,9 +18,9 @@ public class ChargableBlock { - public static Map max_charges = new HashMap(); - public static Set rechargeable = new HashSet(); - public static Set capacitors = new HashSet(); + public static Map max_charges = new HashMap<>(); + public static Set rechargeable = new HashSet<>(); + public static Set capacitors = new HashSet<>(); public static void registerChargableBlock(String id, int capacity, boolean recharge) { max_charges.put(id, capacity); diff --git a/src/me/mrCookieSlime/Slimefun/api/energy/EnergyFlowListener.java b/src/me/mrCookieSlime/Slimefun/api/energy/EnergyFlowListener.java index 2376eae29a..b164c3d4c5 100644 --- a/src/me/mrCookieSlime/Slimefun/api/energy/EnergyFlowListener.java +++ b/src/me/mrCookieSlime/Slimefun/api/energy/EnergyFlowListener.java @@ -2,6 +2,7 @@ import org.bukkit.block.Block; +@FunctionalInterface public interface EnergyFlowListener { void onPulse(Block b); diff --git a/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoManager.java b/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoManager.java index 34f70476de..05fe1dc30b 100644 --- a/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoManager.java +++ b/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoManager.java @@ -39,7 +39,7 @@ else if (storage.hasInventory(target.getLocation())) { BlockMenu menu = BlockStorage.getInventory(target.getLocation()); for (int slot: menu.getPreset().getSlotsAccessedByItemTransport(menu, ItemTransportFlow.WITHDRAW, null)) { final ItemStack is = menu.getItemInSlot(slot); - if (SlimefunManager.isItemSimiliar(is, template, true, DataType.ALWAYS) && matchesFilter(node, is, -1)) { + if (SlimefunManager.isItemSimiliar(is, template, true) && matchesFilter(node, is, -1)) { if (is.getAmount() > template.getAmount()) { menu.replaceExistingItem(slot, new CustomItem(is, is.getAmount() - template.getAmount())); return template; @@ -55,7 +55,7 @@ else if (target.getState() instanceof InventoryHolder) { Inventory inv = ((InventoryHolder) target.getState()).getInventory(); for (int slot = 0; slot < inv.getContents().length; slot++) { final ItemStack is = inv.getContents()[slot]; - if (SlimefunManager.isItemSimiliar(is, template, true, DataType.ALWAYS) && matchesFilter(node, is, -1)) { + if (SlimefunManager.isItemSimiliar(is, template, true) && matchesFilter(node, is, -1)) { if (is.getAmount() > template.getAmount()) { inv.setItem(slot, ChestManipulator.trigger(target, slot, is, new CustomItem(is, is.getAmount() - template.getAmount()))); return template; @@ -114,7 +114,7 @@ public static ItemStack insert(Block node, BlockStorage storage, Block target, I menu.replaceExistingItem(slot, stack.clone()); return null; } - else if (SlimefunManager.isItemSimiliar(new CustomItem(is, 1), new CustomItem(stack, 1), true, DataType.ALWAYS) && is.getAmount() < is.getType().getMaxStackSize()) { + else if (SlimefunManager.isItemSimiliar(new CustomItem(is, 1), new CustomItem(stack, 1), true) && is.getAmount() < is.getType().getMaxStackSize()) { int amount = is.getAmount() + stack.getAmount(); if (amount > is.getType().getMaxStackSize()) { @@ -139,7 +139,7 @@ else if (storage.hasInventory(target.getLocation())) { menu.replaceExistingItem(slot, stack.clone()); return null; } - else if (SlimefunManager.isItemSimiliar(new CustomItem(is, 1), new CustomItem(stack, 1), true, DataType.ALWAYS) && is.getAmount() < is.getType().getMaxStackSize()) { + else if (SlimefunManager.isItemSimiliar(new CustomItem(is, 1), new CustomItem(stack, 1), true) && is.getAmount() < is.getType().getMaxStackSize()) { int amount = is.getAmount() + stack.getAmount(); if (amount > is.getType().getMaxStackSize()) { @@ -165,7 +165,7 @@ else if (target.getState() instanceof InventoryHolder) { inv.setItem(slot, ChestManipulator.trigger(target, slot, null, stack.clone())); return null; } - else if (SlimefunManager.isItemSimiliar(new CustomItem(is, 1), new CustomItem(stack, 1), true, DataType.ALWAYS) && is.getAmount() < is.getType().getMaxStackSize()) { + else if (SlimefunManager.isItemSimiliar(new CustomItem(is, 1), new CustomItem(stack, 1), true) && is.getAmount() < is.getType().getMaxStackSize()) { ItemStack prev = is.clone(); int amount = is.getAmount() + stack.getAmount(); diff --git a/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java b/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java index dc63598364..bcda2c501c 100644 --- a/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java +++ b/src/me/mrCookieSlime/Slimefun/api/item_transport/CargoNet.java @@ -38,14 +38,15 @@ public class CargoNet extends Network { 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(); + 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 private static final ChestTerminalSorter sorter = new ChestTerminalSorter(); 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 int TERMINAL_OUT_SLOT = 17; private static final ItemStack terminal_noitem_item = new CustomItem(new ItemStack(Material.BARRIER), "&4No Item cached"); private static final MenuClickHandler terminal_noitem_handler = (p, slot, item, action) -> false; @@ -237,7 +238,14 @@ public void tick(final Block b) { requests.add(new ItemRequest(bus, 17, items.get(index), ItemTransportFlow.WITHDRAW)); } } - } + } for (final Location terminal : terminals) { + BlockMenu menu = BlockStorage.getInventory(terminal); + + ItemStack sending_item = menu.getItemInSlot(TERMINAL_OUT_SLOT); + if (sending_item != null) { + requests.add(new ItemRequest(terminal, TERMINAL_OUT_SLOT, sending_item, ItemTransportFlow.INSERT)); + } + } Iterator iterator = requests.iterator(); while (iterator.hasNext()) { @@ -268,7 +276,7 @@ public void tick(final Block b) { case WITHDRAW: { int slot = request.getSlot(); ItemStack prevStack = menu.getItemInSlot(slot); - if (!(prevStack == null || (prevStack.getAmount() + request.getItem().getAmount() <= prevStack.getMaxStackSize() && SlimefunManager.isItemSimiliar(prevStack, new CustomItem(request.getItem(), 1), true, DataType.ALWAYS)))) { + if (!(prevStack == null || (prevStack.getAmount() + request.getItem().getAmount() <= prevStack.getMaxStackSize() && SlimefunManager.isItemSimiliar(prevStack, new CustomItem(request.getItem(), 1), true)))) { iterator.remove(); break; } @@ -393,7 +401,7 @@ else if (inputTarget.getState() instanceof InventoryHolder) { if (is != null && CargoManager.matchesFilter(l.getBlock(), is, -1)) { boolean add = true; for (StoredItem item: items) { - if (SlimefunManager.isItemSimiliar(is, item.getItem(), true, DataType.ALWAYS)) { + if (SlimefunManager.isItemSimiliar(is, item.getItem(), true)) { add = false; item.add(is.getAmount()); } @@ -414,7 +422,7 @@ else if (storage.hasInventory(target.getLocation())) { if (is != null && CargoManager.matchesFilter(l.getBlock(), is, -1)) { boolean add = true; for (StoredItem item: items) { - if (SlimefunManager.isItemSimiliar(is, item.getItem(), true, DataType.ALWAYS)) { + if (SlimefunManager.isItemSimiliar(is, item.getItem(), true)) { add = false; item.add(is.getAmount() + stored); } @@ -432,7 +440,7 @@ else if (storage.hasInventory(target.getLocation())) { if (is != null && CargoManager.matchesFilter(l.getBlock(), is, -1)) { boolean add = true; for (StoredItem item: items) { - if (SlimefunManager.isItemSimiliar(is, item.getItem(), true, DataType.ALWAYS)) { + if (SlimefunManager.isItemSimiliar(is, item.getItem(), true)) { add = false; item.add(is.getAmount()); } @@ -451,7 +459,7 @@ else if (target.getState() instanceof InventoryHolder) { if (is != null && CargoManager.matchesFilter(l.getBlock(), is, -1)) { boolean add = true; for (StoredItem item: items) { - if (SlimefunManager.isItemSimiliar(is, item.getItem(), true, DataType.ALWAYS)) { + if (SlimefunManager.isItemSimiliar(is, item.getItem(), true)) { add = false; item.add(is.getAmount()); } @@ -507,11 +515,6 @@ else if (target.getState() instanceof InventoryHolder) { 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)); - } } } }); diff --git a/src/me/mrCookieSlime/Slimefun/api/item_transport/ChestManipulator.java b/src/me/mrCookieSlime/Slimefun/api/item_transport/ChestManipulator.java index d78617f201..921b0ab9fd 100644 --- a/src/me/mrCookieSlime/Slimefun/api/item_transport/ChestManipulator.java +++ b/src/me/mrCookieSlime/Slimefun/api/item_transport/ChestManipulator.java @@ -8,7 +8,7 @@ public class ChestManipulator { - public static List listeners = new ArrayList(); + public static List listeners = new ArrayList<>(); public static void registerListener(CargoTransportEvent listener) { listeners.add(listener); diff --git a/src/me/mrCookieSlime/Slimefun/api/machine/MachineConfig.java b/src/me/mrCookieSlime/Slimefun/api/machine/MachineConfig.java deleted file mode 100644 index 04b8735e7e..0000000000 --- a/src/me/mrCookieSlime/Slimefun/api/machine/MachineConfig.java +++ /dev/null @@ -1,32 +0,0 @@ -package me.mrCookieSlime.Slimefun.api.machine; - -import java.util.HashMap; -import java.util.Map; - -import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; - -public class MachineConfig extends Config { - - MachineSettings global; - Map children; - - public MachineConfig(String id) { - super("plugins/Slimefun/machines/" + id + ".yml"); - - this.global = new MachineSettings(this); - this.children = new HashMap(); - } - - public MachineSettings getGlobalSettings() { - return this.global; - } - - public MachineSettings getSettings(AContainer item) { - if (!this.children.containsKey(item.getID())) { - this.children.put(item.getID(), new MachineSettings(this, item)); - } - - return this.children.get(item.getID()); - } -} diff --git a/src/me/mrCookieSlime/Slimefun/api/machine/MachineSettings.java b/src/me/mrCookieSlime/Slimefun/api/machine/MachineSettings.java deleted file mode 100644 index d554a63869..0000000000 --- a/src/me/mrCookieSlime/Slimefun/api/machine/MachineSettings.java +++ /dev/null @@ -1,33 +0,0 @@ -package me.mrCookieSlime.Slimefun.api.machine; - -import java.util.List; - -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.abstractItems.AContainer; - -public class MachineSettings { - - MachineConfig cfg; - String prefix = "global"; - - public MachineSettings(MachineConfig cfg) { - this.cfg = cfg; - } - - public MachineSettings(MachineConfig cfg, AContainer machine) { - this.cfg = cfg; - this.prefix = machine.getID(); - } - - public String getString(String path) { - return this.cfg.getString(prefix + "." + path); - } - - public int getInt(String path) { - return this.cfg.getInt(prefix + "." + path); - } - - public List getStringList(String path) { - return this.cfg.getStringList(prefix + "." + path); - } - -} diff --git a/src/me/mrCookieSlime/Slimefun/api/network/Network.java b/src/me/mrCookieSlime/Slimefun/api/network/Network.java index 1dee3a8774..832a321355 100644 --- a/src/me/mrCookieSlime/Slimefun/api/network/Network.java +++ b/src/me/mrCookieSlime/Slimefun/api/network/Network.java @@ -13,7 +13,7 @@ import me.mrCookieSlime.Slimefun.SlimefunStartup; public abstract class Network { - private static List NETWORK_LIST = new ArrayList(); + 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)) { @@ -24,7 +24,7 @@ public static T getNetworkFromLocation(Location l, Class t } public static List getNetworksFromLocation(Location l, Class type) { - List ret = new ArrayList(); + List ret = new ArrayList<>(); for(Network n: NETWORK_LIST) { if(type.isInstance(n) && n.connectsTo(l)) { ret.add(type.cast(n)); @@ -59,12 +59,12 @@ public static enum Component { public abstract void locationClassificationChange(Location l, Component from, Component to); protected Location regulator; - private Queue nodeQueue = new ArrayDeque(); + 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 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; diff --git a/src/me/mrCookieSlime/Slimefun/holograms/CargoHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/CargoHologram.java index 32f8d05df5..8016a27ef2 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/CargoHologram.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/CargoHologram.java @@ -25,7 +25,7 @@ public static void remove(Block b) { } private static ArmorStand getArmorStand(Block b) { - Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() - 0.7F, b.getZ() + 0.5); + Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + 0.7F, b.getZ() + 0.5); for (Entity n : l.getChunk().getEntities()) { if (n instanceof ArmorStand) { diff --git a/src/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java index f38f65d8f1..3301d1ae38 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/EnergyHologram.java @@ -32,7 +32,7 @@ public static void remove(final Block b) { } private static ArmorStand getArmorStand(Block b) { - Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() - 0.7F, b.getZ() + 0.5); + Location l = new Location(b.getWorld(), b.getX() + 0.5, b.getY() + 0.7F, b.getZ() + 0.5); for (Entity n : l.getChunk().getEntities()) { if (n instanceof ArmorStand) { diff --git a/src/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java b/src/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java index 6e52eaab00..ed1e174dfb 100644 --- a/src/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java +++ b/src/me/mrCookieSlime/Slimefun/holograms/ReactorHologram.java @@ -13,7 +13,7 @@ public class ReactorHologram { public static ArmorStand getArmorStand(Location reactor) { - Location l = new Location(reactor.getWorld(), reactor.getX() + 0.5, reactor.getY(), reactor.getZ() + 0.5); + Location l = new Location(reactor.getWorld(), reactor.getX() + 0.5, reactor.getY() + 0.7, reactor.getZ() + 0.5); for (Entity n : l.getChunk().getEntities()) { if (n instanceof ArmorStand) { diff --git a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java index c855cdfb19..1ae04d89c6 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java @@ -7,6 +7,7 @@ import java.util.UUID; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.block.Block; @@ -38,153 +39,155 @@ public class AncientAltarListener implements Listener { - public AncientAltarListener(SlimefunStartup plugin) { - plugin.getServer().getPluginManager().registerEvents(this, plugin); - } - - List altars = new ArrayList(); - Set removed_items = new HashSet(); - - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public void onInteract(PlayerInteractEvent e) { - if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; - Block b = e.getClickedBlock(); - 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) { - 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); - return; - } - insertItem(e.getPlayer(), b); - } - else if (!removed_items.contains(stack.getUniqueId())) { - final UUID uuid = stack.getUniqueId(); - removed_items.add(uuid); - - SlimefunStartup.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { - removed_items.remove(uuid); - }, 30L); - - stack.remove(); - e.getPlayer().getInventory().addItem(fixItemStack(stack.getItemStack(), stack.getCustomName())); - e.getPlayer().playSound(b.getLocation(), Sound.ENTITY_ITEM_PICKUP, 1F, 1F); - PlayerInventory.update(e.getPlayer()); - } - } - 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); - List pedestals = Pedestals.getPedestals(b); - - 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) { - 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(); - 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); - } - 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 - } - } - } - } - } - - public static ItemStack fixItemStack(ItemStack itemStack, String customName) { - ItemStack stack = itemStack.clone(); - if (customName.equals(StringUtils.formatItemName(new ItemStack(itemStack.getType()), false))) { - ItemMeta im = stack.getItemMeta(); - im.setDisplayName(null); - stack.setItemMeta(im); - } else { - ItemMeta im = stack.getItemMeta(); - im.setDisplayName(customName); - stack.setItemMeta(im); - } - return stack; - } - - public static Item findItem(Block b) { - for (Entity n: b.getChunk().getEntities()) { - if (n instanceof Item) { - if (b.getLocation().add(0.5, 1.2, 0.5).distanceSquared(n.getLocation()) < 0.5D && n.getCustomName() != null) return (Item) n; - } - } - return null; - } - - private void insertItem(Player p, Block b) { - final ItemStack stack = p.getInventory().getItemInMainHand(); - if (stack != null) { - PlayerInventory.consumeItemInHand(p); - String nametag = StringUtils.formatItemName(stack, false); - Item entity = b.getWorld().dropItem(b.getLocation().add(0.5, 1.2, 0.5), new CustomItem(new CustomItem(stack, 1), "&5&dALTAR &3Probe - &e" + System.nanoTime())); - entity.setVelocity(new Vector(0, 0.1, 0)); - entity.setMetadata("no_pickup", new FixedMetadataValue(SlimefunStartup.instance, "altar_item")); - entity.setCustomNameVisible(true); - entity.setCustomName(nametag); - 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); - SlimefunItem item = BlockStorage.check(b); - if(item == null) return; - if(item.getID().equalsIgnoreCase("ANCIENT_PEDESTAL")) { - Messages.local.sendTranslation(e.getPlayer(), "messages.cannot-place", true); - e.setCancelled(true); - } - } + public AncientAltarListener(SlimefunStartup plugin) { + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + List altars = new ArrayList<>(); + Set removed_items = new HashSet<>(); + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onInteract(PlayerInteractEvent e) { + if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; + Block b = e.getClickedBlock(); + 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) { + 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); + return; + } + insertItem(e.getPlayer(), b); + } + else if (!removed_items.contains(stack.getUniqueId())) { + final UUID uuid = stack.getUniqueId(); + removed_items.add(uuid); + + SlimefunStartup.instance.getServer().getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { + removed_items.remove(uuid); + }, 30L); + + stack.remove(); + e.getPlayer().getInventory().addItem(fixItemStack(stack.getItemStack(), stack.getCustomName())); + e.getPlayer().playSound(b.getLocation(), Sound.ENTITY_ITEM_PICKUP, 1F, 1F); + PlayerInventory.update(e.getPlayer()); + } + } + 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); + List pedestals = Pedestals.getPedestals(b); + + 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) { + 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<>(); + 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); + } + 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 + } + } + } + } + } + + public static ItemStack fixItemStack(ItemStack itemStack, String customName) { + ItemStack stack = itemStack.clone(); + if (customName.equals(StringUtils.formatItemName(new ItemStack(itemStack.getType()), false))) { + ItemMeta im = stack.getItemMeta(); + im.setDisplayName(null); + stack.setItemMeta(im); + } + else { + ItemMeta im = stack.getItemMeta(); + if (!customName.startsWith(String.valueOf(ChatColor.COLOR_CHAR))) customName = ChatColor.RESET + customName; + im.setDisplayName(customName); + stack.setItemMeta(im); + } + return stack; + } + + public static Item findItem(Block b) { + for (Entity n: b.getChunk().getEntities()) { + if (n instanceof Item) { + if (b.getLocation().add(0.5, 1.2, 0.5).distanceSquared(n.getLocation()) < 0.5D && n.getCustomName() != null) return (Item) n; + } + } + return null; + } + + private void insertItem(Player p, Block b) { + final ItemStack stack = p.getInventory().getItemInMainHand(); + if (stack != null) { + PlayerInventory.consumeItemInHand(p); + String nametag = StringUtils.formatItemName(stack, false); + Item entity = b.getWorld().dropItem(b.getLocation().add(0.5, 1.2, 0.5), new CustomItem(new CustomItem(stack, 1), "&5&dALTAR &3Probe - &e" + System.nanoTime())); + entity.setVelocity(new Vector(0, 0.1, 0)); + entity.setMetadata("no_pickup", new FixedMetadataValue(SlimefunStartup.instance, "altar_item")); + entity.setCustomNameVisible(true); + entity.setCustomName(nametag); + 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); + SlimefunItem item = BlockStorage.check(b); + if(item == null) return; + if(item.getID().equalsIgnoreCase("ANCIENT_PEDESTAL")) { + Messages.local.sendTranslation(e.getPlayer(), "messages.cannot-place", true); + e.setCancelled(true); + } + } } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/BowListener.java b/src/me/mrCookieSlime/Slimefun/listeners/BowListener.java index 8008bdc10c..db9a5fb124 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/BowListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/BowListener.java @@ -43,9 +43,9 @@ public void onArrowHit(final ProjectileHitEvent e) { private void handleGrapplingHook(Arrow arrow) { if (arrow != null) { - if (arrow.getShooter() instanceof Player && Variables.jump.containsKey(((Player) arrow.getShooter()).getUniqueId())) { + if (arrow.getShooter() instanceof Player && Variables.jump_state.containsKey(((Player) arrow.getShooter()).getUniqueId())) { final Player p = (Player) arrow.getShooter(); - if (p.getGameMode() != GameMode.CREATIVE && Variables.jump.get(p.getUniqueId())) arrow.getWorld().dropItem(arrow.getLocation(), SlimefunItem.getItem("GRAPPLING_HOOK")); + if (p.getGameMode() != GameMode.CREATIVE && Variables.jump_state.get(p.getUniqueId())) arrow.getWorld().dropItem(arrow.getLocation(), SlimefunItem.getItem("GRAPPLING_HOOK")); if (p.getLocation().distance(arrow.getLocation()) < 3.0D) { if (arrow.getLocation().getY() > p.getLocation().getY()) { p.setVelocity(new Vector(0.0D, 0.25D, 0.0D)); @@ -56,7 +56,7 @@ private void handleGrapplingHook(Arrow arrow) { } Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { - Variables.jump.remove(p.getUniqueId()); + Variables.jump_state.remove(p.getUniqueId()); Variables.remove.remove(p.getUniqueId()); }, 20L); } @@ -85,7 +85,7 @@ private void handleGrapplingHook(Arrow arrow) { } Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, () -> { - Variables.jump.remove(p.getUniqueId()); + Variables.jump_state.remove(p.getUniqueId()); Variables.remove.remove(p.getUniqueId()); }, 20L); } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java index 169164e6a7..b690675e4c 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/DamageListener.java @@ -115,7 +115,7 @@ public void onDamage(EntityDeathEvent e) { @EventHandler public void onArrowHit(EntityDamageEvent e) { if (e.getEntity() instanceof Player && e.getCause() == DamageCause.FALL) { - if (Variables.damage.containsKey(e.getEntity().getUniqueId())) { + if (Variables.damage.contains(e.getEntity().getUniqueId())) { e.setCancelled(true); Variables.damage.remove(e.getEntity().getUniqueId()); } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index b77c3bae3a..c854b2d70b 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -19,10 +19,7 @@ import org.bukkit.event.Listener; 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.InventoryMoveItemEvent; -import org.bukkit.event.inventory.InventoryType; +import org.bukkit.event.inventory.*; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.inventory.BrewerInventory; @@ -65,6 +62,16 @@ public ItemListener(SlimefunStartup plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); } + @EventHandler + public void onPrepareCraft(PrepareItemCraftEvent e) { + for (ItemStack item : e.getInventory().getContents()) { + if (SlimefunItem.getByItem(item) != null && !(SlimefunItem.getByItem(item).isReplacing())) { + e.getInventory().setResult(null); + break; + } + } + } + @EventHandler public void onIgnitionChamberItemMove(InventoryMoveItemEvent e) { if (e.getInitiator().getHolder() instanceof Hopper) { diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java index 000eb06462..da02f4a708 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java @@ -200,7 +200,7 @@ public void onBlockBreak(BlockBreakEvent e) { allow = SlimefunItem.blockhandler.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK); } else { for (ItemHandler handler : SlimefunItem.getHandlers("BlockBreakHandler")) { - if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) return; + if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) break; } } if (allow) {