From 20e3f2b9ce74226e256cf22a807a2125021629f4 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Mon, 14 Oct 2019 20:50:57 +0200 Subject: [PATCH] Some more bug fixes and optimizations --- pom.xml | 8 +- .../SlimefunItem/SimpleSlimefunItem.java | 5 ++ .../Objects/SlimefunItem/SlimefunItem.java | 19 ++++- .../SlimefunItem/machines/BlockPlacer.java | 5 ++ .../machines/HologramProjector.java | 9 ++- .../SlimefunItem/machines/InfusedHopper.java | 5 ++ .../machines/electric/ElevatorPlate.java | 5 ++ .../electric/geo/GEOScannerBlock.java | 5 ++ .../Objects/handlers/ItemHandler.java | 4 + .../mrCookieSlime/Slimefun/SlimefunGuide.java | 12 +-- .../Slimefun/listeners/ItemListener.java | 81 ++++++++++--------- 11 files changed, 108 insertions(+), 50 deletions(-) diff --git a/pom.xml b/pom.xml index 076289735..4df76967c 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,10 @@ spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + jitpack.io + https://jitpack.io + worldedit-worldguard-repo https://maven.sk89q.com/repo/ @@ -28,10 +32,6 @@ coreprotect-repo https://maven.playpro.com/ - - jitpack.io - https://jitpack.io - CodeMC https://repo.codemc.org/repository/maven-public diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java index 81fa753a0..f7c6a17a4 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SimpleSlimefunItem.java @@ -33,6 +33,11 @@ public abstract class SimpleSlimefunItem extends Slimefun super(category, item, recipeType, recipe, keys, values); } + @Override + protected boolean areItemHandlersPrivate() { + return true; + } + @Override public void preRegister() { addItemHandler(getItemHandler()); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index f70106f26..a25dcecc9 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -5,6 +5,7 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Consumer; import java.util.logging.Level; import org.bukkit.Bukkit; @@ -142,7 +143,6 @@ public class SlimefunItem { */ public String getPermission() { return permission; } public List getNoPermissionTooltip() { return noPermissionTooltip; } - public Set getHandlers() { return itemhandlers; } public boolean isTicking() { return ticking; } /** @@ -210,9 +210,12 @@ public class SlimefunItem { create(); - for (ItemHandler handler: itemhandlers) { + for (ItemHandler handler : itemhandlers) { + if (areItemHandlersPrivate()) continue; + Set handlerset = getHandlers(handler.toCodename()); handlerset.add(handler); + SlimefunPlugin.getUtilities().itemHandlers.put(handler.toCodename(), handlerset); } @@ -543,6 +546,18 @@ public class SlimefunItem { public String getItemName() { return ItemUtils.getItemName(item); } + + public Set getHandlers() { + return itemhandlers; + } + + protected boolean areItemHandlersPrivate() { + return false; + } + + public void callItemHandler(Class c, Consumer callable) { + itemhandlers.stream().filter(c::isInstance).map(c::cast).forEach(callable); + } @Override public String toString() { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/BlockPlacer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/BlockPlacer.java index 6006706d4..7be395d9f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/BlockPlacer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/BlockPlacer.java @@ -30,6 +30,11 @@ public class BlockPlacer extends SimpleSlimefunItem { super(category, item, recipeType, recipe, keys, values); } + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public AutonomousMachineHandler getItemHandler() { return (e, dispenser, d, block, chest, machine) -> { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java index 00f22516e..1a8d8af46 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/HologramProjector.java @@ -24,8 +24,8 @@ public class HologramProjector extends SimpleSlimefunItem { super(category, item, id, recipeType, recipe); } + @Override + protected boolean areItemHandlersPrivate() { + return false; + } + @Override public BlockTicker getItemHandler() { return new BlockTicker() { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java index 5a08dceca..4ba52363a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/ElevatorPlate.java @@ -33,6 +33,11 @@ public class ElevatorPlate extends SimpleSlimefunItem { } }); } + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } @Override public ItemInteractionHandler getItemHandler() { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java index 19b253b48..24868595e 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/electric/geo/GEOScannerBlock.java @@ -14,6 +14,11 @@ public class GEOScannerBlock extends SimpleSlimefunItem public GEOScannerBlock(Category category, ItemStack item, String id, RecipeType recipeType, ItemStack[] recipe) { super(category, item, id, recipeType, recipe); } + + @Override + protected boolean areItemHandlersPrivate() { + return false; + } @Override public ItemInteractionHandler getItemHandler() { diff --git a/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemHandler.java b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemHandler.java index 1abe961cf..885db30a4 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemHandler.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/handlers/ItemHandler.java @@ -4,4 +4,8 @@ package me.mrCookieSlime.Slimefun.Objects.handlers; public interface ItemHandler { String toCodename(); + + default boolean isPrivate() { + return false; + } } diff --git a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java index 09abdae50..be8bb53fa 100644 --- a/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java +++ b/src/me/mrCookieSlime/Slimefun/SlimefunGuide.java @@ -738,7 +738,7 @@ public final class SlimefunGuide { menu.setEmptySlotsClickable(false); fillInv(menu, cheat); - addBackButton(menu, player, false, cheat); + addBackButton(menu, 1, player, false, cheat); searchTerm = searchTerm.toLowerCase(); @@ -800,17 +800,17 @@ public final class SlimefunGuide { } } - private static void addBackButton(ChestMenu menu, Player player, boolean book, boolean cheat) { + private static void addBackButton(ChestMenu menu, int slot, Player player, boolean book, boolean cheat) { List playerHistory = getHistory().getOrDefault(player.getUniqueId(), new LinkedList<>()); if (playerHistory != null && playerHistory.size() > 1) { - menu.addItem(0, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), + menu.addItem(slot, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to previous Page", "&rShift + left Click: &7Go back to Main Menu") ); - menu.addMenuClickHandler(0, (pl, slot, item118, action) -> { + menu.addMenuClickHandler(0, (pl, s, is, action) -> { if (action.isShiftClicked()) openMainMenuAsync(pl, true, false, 1); else { Object last = getLastEntry(pl, true); @@ -822,7 +822,7 @@ public final class SlimefunGuide { } else { menu.addItem(0, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to Main Menu")); - menu.addMenuClickHandler(0, (pl, slot, item, action) -> { + menu.addMenuClickHandler(0, (pl, s, is, action) -> { openMainMenuAsync(pl, true, book, 1); return false; }); @@ -916,7 +916,7 @@ public final class SlimefunGuide { if (addToHistory) addToHistory(p, sfItem != null ? sfItem: item); - addBackButton(menu, p, book, false); + addBackButton(menu, 0, p, book, false); LinkedList history = getHistory().get(p.getUniqueId()); diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java index acfbb4417..5b89ab44b 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ItemListener.java @@ -211,7 +211,6 @@ public class ItemListener implements Listener { final Player p = e.getPlayer(); ItemStack item = e.getItem(); - SlimefunItem slimefunItem = SlimefunItem.getByItem(item); if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true)) { if (p.isSneaking()) SlimefunGuide.openSettings(p, item); @@ -228,47 +227,57 @@ public class ItemListener implements Listener { else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.DEBUG_FISH, true)) { // Ignore the debug fish in here } - else if (slimefunItem != null) { - if (Slimefun.hasUnlocked(p, slimefunItem, true)) { + else { + SlimefunItem slimefunItem = SlimefunItem.getByItem(item); + + if (slimefunItem != null) { + if (Slimefun.hasUnlocked(p, slimefunItem, true)) { + slimefunItem.callItemHandler(ItemInteractionHandler.class, handler -> + handler.onRightClick(e, p, item) + ); + + // Open the Backpack (also includes Coolers) + if (slimefunItem instanceof SlimefunBackpack) { + e.setCancelled(true); + BackpackListener.openBackpack(p, item, (SlimefunBackpack) slimefunItem); + } + else if (slimefunItem instanceof MultiTool) { + e.setCancelled(true); + + List modes = ((MultiTool) slimefunItem).getModes(); + int index = utilities.mode.getOrDefault(p.getUniqueId(), 0); + + if (!p.isSneaking()) { + float charge = ItemEnergy.getStoredEnergy(item); + float cost = 0.3F; + if (charge >= cost) { + p.getEquipment().setItemInMainHand(ItemEnergy.chargeItem(item, -cost)); + Bukkit.getPluginManager().callEvent(new ItemUseEvent(e.getParentEvent(), SlimefunItem.getByID((String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(index) + ".item")).getItem(), e.getClickedBlock())); + } + } + else { + index++; + if (index == modes.size()) index = 0; + + final int finalIndex = index; + SlimefunPlugin.getLocal().sendMessage(p, "messages.mode-change", true, msg -> msg.replace("%device%", "Multi Tool").replace("%mode%", (String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(finalIndex) + ".name"))); + utilities.mode.put(p.getUniqueId(), index); + } + } + else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.HEAVY_CREAM, true)) e.setCancelled(true); + } + else { + e.setCancelled(true); + } + } + else { for (ItemHandler handler : SlimefunItem.getHandlers("ItemInteractionHandler")) { if (((ItemInteractionHandler) handler).onRightClick(e, p, item)) return; } - - // Open the Backpack (also includes Coolers) - if (slimefunItem instanceof SlimefunBackpack) { - e.setCancelled(true); - BackpackListener.openBackpack(p, item, (SlimefunBackpack) slimefunItem); - } - else if (slimefunItem instanceof MultiTool) { - e.setCancelled(true); - - List modes = ((MultiTool) slimefunItem).getModes(); - int index = utilities.mode.getOrDefault(p.getUniqueId(), 0); - - if (!p.isSneaking()) { - float charge = ItemEnergy.getStoredEnergy(item); - float cost = 0.3F; - if (charge >= cost) { - p.getEquipment().setItemInMainHand(ItemEnergy.chargeItem(item, -cost)); - Bukkit.getPluginManager().callEvent(new ItemUseEvent(e.getParentEvent(), SlimefunItem.getByID((String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(index) + ".item")).getItem(), e.getClickedBlock())); - } - } - else { - index++; - if (index == modes.size()) index = 0; - - final int finalIndex = index; - SlimefunPlugin.getLocal().sendMessage(p, "messages.mode-change", true, msg -> msg.replace("%device%", "Multi Tool").replace("%mode%", (String) Slimefun.getItemValue(slimefunItem.getID(), "mode." + modes.get(finalIndex) + ".name"))); - utilities.mode.put(p.getUniqueId(), index); - } - } - else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.HEAVY_CREAM, true)) e.setCancelled(true); - } - else { - e.setCancelled(true); } } + if (e.getClickedBlock() != null && BlockStorage.hasBlockInfo(e.getClickedBlock())) { String id = BlockStorage.checkID(e.getClickedBlock()); if (BlockMenuPreset.isInventory(id) && !canPlaceCargoNodes(p, item, e.getClickedBlock().getRelative(e.getParentEvent().getBlockFace())) && (!p.isSneaking() || item == null || item.getType() == Material.AIR)) {