From 6e1376cfb2b9b6821f3fd77117b6bbe991e7e10f Mon Sep 17 00:00:00 2001 From: Rick Date: Fri, 20 Apr 2018 17:43:57 -0400 Subject: [PATCH 01/18] Fix for the Anvil being able to rename Broken and Reinforced Spawners resulting in becoming vanilla pig spawners. Problem with isDisabled... called isItem... which doesn't return an affirmative unless the lore matches exactly... however... lore would nearly never match exactly: backpacks have different ids or no ids, no item ever matches to "" or "" which should result in a great number of slimefun items being identified as NOT SlimeFun items. --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index b39506aee..0ce3a0c61 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -334,7 +334,7 @@ public class SlimefunItem { else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; - else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), true)) return sfi; + else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; } return null; } @@ -344,7 +344,7 @@ public class SlimefunItem { if (this instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; - else return SlimefunManager.isItemSimiliar(item, this.item, true); + else return SlimefunManager.isItemSimiliar(item, this.item, false); } public void load() { From 44e9a3cc43abbf3c5c196fb9efb51b0f9cb96a1e Mon Sep 17 00:00:00 2001 From: Rick Date: Fri, 20 Apr 2018 17:47:41 -0400 Subject: [PATCH 02/18] Copies entirety of logic from the Enhanced Crafting table to the Magic Workbench for the crafting of Soulbound Backpacks. On further investigation, I discovered this did not "delete" the ID of the backpack being used for crafting, but instead recycles that ID for use in the final crafted pack and simply adjusts the size for that ID so that it matches. By taking that approach, I was forced to include all of this even though this will make it exponentially more difficult to make ID-less packs for sale in other plugins like ChestShop. --- .../Slimefun/Setup/SlimefunSetup.java | 68 ++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index cf78c4ec3..39f759903 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -1158,8 +1158,16 @@ public class SlimefunSetup { boolean craft = true; for (int j = 0; j < inv.getContents().length; j++) { if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], true)) { - craft = false; - break; + if (SlimefunItem.getByItem(inputs.get(i)[j]) instanceof SlimefunBackpack) { + if (!SlimefunManager.isItemSimiliar(inv.getContents()[j], inputs.get(i)[j], false)) { + craft = false; + break; + } + } + else { + craft = false; + break; + } } } @@ -1171,6 +1179,62 @@ public class SlimefunSetup { inv2.setItem(j, inv.getContents()[j] != null ? (inv.getContents()[j].getAmount() > 1 ? new CustomItem(inv.getContents()[j], inv.getContents()[j].getAmount() - 1): null): null); } if (InvUtils.fits(inv2, adding)) { + SlimefunItem sfItem = SlimefunItem.getByItem(adding); + + if (sfItem instanceof SlimefunBackpack) { + ItemStack backpack = null; + + for (int j = 0; j < 9; j++) { + if (inv.getContents()[j] != null) { + if (inv.getContents()[j].getType() != Material.AIR) { + if (SlimefunItem.getByItem(inv.getContents()[j]) instanceof SlimefunBackpack) { + backpack = inv.getContents()[j]; + break; + } + } + } + } + String id = ""; + int size = ((SlimefunBackpack) sfItem).size; + + if (backpack != null) { + for (String line: backpack.getItemMeta().getLore()) { + if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { + id = line.replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); + Config cfg = new Config(new File("data-storage/Slimefun/Players/" + id.split("#")[0] + ".yml")); + cfg.setValue("backpacks." + id.split("#")[1] + ".size", size); + cfg.save(); + break; + } + } + } + + if (id.equals("")) { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + else { + for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { + if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + ItemMeta im = adding.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", id)); + im.setLore(lore); + adding.setItemMeta(im); + break; + } + } + } + } + for (int j = 0; j < 9; j++) { if (inv.getContents()[j] != null) { if (inv.getContents()[j].getType() != Material.AIR) { From 785cbea08f0dde4983bd869fc30e16b946cfb562 Mon Sep 17 00:00:00 2001 From: Rick Date: Fri, 20 Apr 2018 17:53:36 -0400 Subject: [PATCH 03/18] I could not use "breaK" as advised as that would completely break the loop and cease checking for duplicates among the remaining items. However, we are only checking against 5 additional slots here, so I've stated them each and made them return if a match is a bit better than setting a variable and all that, this is also more clear about what is going on here. I will state that the previous patch does introduce a limitation: identical soulbound items would be lost. Having exactly duplicated soulbound items prior to a death is a rather extreme situation, but during my testing I actually was using some I duplicated in creative mode and noticed that I would only retrieve one of each, and not the copies. It might be desireable to integrate an option here to only use this logic IF keep inventory regions will be in use somewhere, although not entirely necessary. --- src/me/mrCookieSlime/Slimefun/api/Soul.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/me/mrCookieSlime/Slimefun/api/Soul.java b/src/me/mrCookieSlime/Slimefun/api/Soul.java index 764d92624..3f8db67cb 100644 --- a/src/me/mrCookieSlime/Slimefun/api/Soul.java +++ b/src/me/mrCookieSlime/Slimefun/api/Soul.java @@ -21,6 +21,12 @@ public class Soul { public static void retrieveItems(Player p) { if (Variables.soulbound.containsKey(p.getUniqueId())) { for (ItemStack item: Variables.soulbound.get(p.getUniqueId())) { + if (item.equals(p.getInventory().getHelmet())) return; + if (item.equals(p.getInventory().getChestplate())) return; + if (item.equals(p.getInventory().getLeggings())) return; + if (item.equals(p.getInventory().getBoots())) return; + if (item.equals(p.getInventory().getItemInOffHand())) return; + if(!p.getInventory().contains(item)) { p.getInventory().addItem(item); } From 201fb33eb4da9cd797becb1f8ac04159ac367985 Mon Sep 17 00:00:00 2001 From: Rick Date: Sat, 21 Apr 2018 17:20:43 -0400 Subject: [PATCH 04/18] Closes #631... player no longer needs to be "owner" of the item to break these two blocks. This makes sense to me since most Slimefun blocks do not check for this either except maybe those which have inventories, which neither of these do. --- .../mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index 39f759903..e51f8f131 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -4689,7 +4689,7 @@ public class SlimefunSetup { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - return BlockStorage.getBlockInfo(b, "owner").equals(p.getUniqueId().toString()); + return true; } }); @@ -4724,12 +4724,9 @@ public class SlimefunSetup { } @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - if (BlockStorage.getBlockInfo(b, "owner").equals(p.getUniqueId().toString())) { - Projector.getArmorStand(b).remove(); - return true; - } - else return false; + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + Projector.getArmorStand(b).remove(); + return true; } }); From fd9ed5155ae12526e41edc24cf9d56121a12d12e Mon Sep 17 00:00:00 2001 From: Rick Date: Sat, 21 Apr 2018 17:28:43 -0400 Subject: [PATCH 05/18] cleaned up some whitespace that showed up in last commit. --- src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index e51f8f131..70be04745 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -4724,7 +4724,7 @@ public class SlimefunSetup { } @Override - public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { + public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { Projector.getArmorStand(b).remove(); return true; } From 83e55c255df6e49d07040c77a8efe038e3652b62 Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 10:19:57 -0400 Subject: [PATCH 06/18] Changed to special cases only for solving issue with Broken/Repaired spawner renaming ability. There may still be other items these routines don't define as "SlimeFun items" without identical lore to the example, but hopefully this covers everything. --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 0ce3a0c61..36cc7e35f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -11,6 +11,7 @@ import java.util.Set; import me.mrCookieSlime.Slimefun.SlimefunStartup; import me.mrCookieSlime.Slimefun.AncientAltar.AltarRecipe; import me.mrCookieSlime.Slimefun.Lists.RecipeType; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Objects.SlimefunBlockHandler; @@ -334,7 +335,8 @@ public class SlimefunItem { else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; - else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; + else if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false))) return sfi; + else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), true)) return sfi; } return null; } @@ -344,7 +346,8 @@ public class SlimefunItem { if (this instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; - else return SlimefunManager.isItemSimiliar(item, this.item, false); + else if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false))) return true; + else return SlimefunManager.isItemSimiliar(item, this.item, true); } public void load() { From fda8f56f8a5bb4219fb512d1bf7c3298787d26ac Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 10:25:44 -0400 Subject: [PATCH 07/18] Switched to "continue" as stated. Although... pondering as to why this would have seemed to have worked anyway... the way I did it, in the case of a match, the whole thing quits... which is actually fine if the user just died in a keep-inventory region. If there was a better way of determining the existence of a keep-inventory region from all plugins that might produce one, really, that's what we'd rather be checking for here anyway. This is a fine alternative, but actually identical items will result in only one being kept when dying in a non-keep-inventory situation. --- src/me/mrCookieSlime/Slimefun/api/Soul.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/api/Soul.java b/src/me/mrCookieSlime/Slimefun/api/Soul.java index 3f8db67cb..ee5beb279 100644 --- a/src/me/mrCookieSlime/Slimefun/api/Soul.java +++ b/src/me/mrCookieSlime/Slimefun/api/Soul.java @@ -21,11 +21,11 @@ public class Soul { public static void retrieveItems(Player p) { if (Variables.soulbound.containsKey(p.getUniqueId())) { for (ItemStack item: Variables.soulbound.get(p.getUniqueId())) { - if (item.equals(p.getInventory().getHelmet())) return; - if (item.equals(p.getInventory().getChestplate())) return; - if (item.equals(p.getInventory().getLeggings())) return; - if (item.equals(p.getInventory().getBoots())) return; - if (item.equals(p.getInventory().getItemInOffHand())) return; + if (item.equals(p.getInventory().getHelmet())) continue; + if (item.equals(p.getInventory().getChestplate())) continue; + if (item.equals(p.getInventory().getLeggings())) continue; + if (item.equals(p.getInventory().getBoots())) continue; + if (item.equals(p.getInventory().getItemInOffHand())) continue; if(!p.getInventory().contains(item)) { p.getInventory().addItem(item); From 34150791bca1e5a046c92ce3a792bb4df17073a4 Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 10:58:36 -0400 Subject: [PATCH 08/18] Commit 2 of 2 for ticket #643 -- eliminates Altar dupe bug by disallowing all interactions while altar is in use. --- .../listeners/AncientAltarListener.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java index 6b01452db..c630ea8e5 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java @@ -37,6 +37,8 @@ import org.bukkit.util.Vector; public class AncientAltarListener implements Listener { + public static boolean altarinuse = false; + public AncientAltarListener(SlimefunStartup plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); } @@ -46,6 +48,10 @@ public class AncientAltarListener implements Listener { @EventHandler(priority=EventPriority.HIGH, ignoreCancelled = true) public void onInteract(PlayerInteractEvent e) { + if (this.altarinuse) { + e.setCancelled(true); + return; + } if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; Block b = e.getClickedBlock(); SlimefunItem item = BlockStorage.check(b); @@ -62,6 +68,7 @@ public class AncientAltarListener implements Listener { insertItem(e.getPlayer(), b); } else if (!removed_items.contains(stack.getUniqueId())) { + this.altarinuse = true; final UUID uuid = stack.getUniqueId(); removed_items.add(uuid); @@ -80,6 +87,10 @@ public class AncientAltarListener implements Listener { } } else if (item.getID().equals("ANCIENT_ALTAR")) { + if (this.altarinuse) { + e.setCancelled(true); + return; + } e.setCancelled(true); ItemStack catalyst = new CustomItem(e.getPlayer().getInventory().getItemInMainHand(), 1); @@ -94,14 +105,13 @@ public class AncientAltarListener implements Listener { Item stack = findItem(pedestal); if (stack != null) input.add(fixItemStack(stack.getItemStack(), stack.getCustomName())); } - ItemStack result = Pedestals.getRecipeOutput(catalyst, input); if (result != null) { + this.altarinuse = true; List consumed = new ArrayList(); consumed.add(catalyst); PlayerInventory.consumeItemInHand(e.getPlayer()); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L); - } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L); } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-recipe", true); @@ -136,6 +146,15 @@ public class AncientAltarListener implements Listener { return stack; } + public void setNotInUse() { + this.altarinuse = false; + } + + public boolean setAltarinuse(boolean inuse) { + this.altarinuse = inuse; + return true; + } + public static Item findItem(Block b) { for (Entity n: b.getChunk().getEntities()) { if (n instanceof Item) { @@ -158,7 +177,7 @@ public class AncientAltarListener implements Listener { p.playSound(b.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.3F, 0.3F); } } - + @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent e) { Block b = e.getBlockPlaced().getRelative(0, -1, 0); From 2b9e24b45b99c2d2bed40920dbc6f0af21cb5eae Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 10:58:57 -0400 Subject: [PATCH 09/18] Commit 1 of 2 for ticket #643 -- eliminates Altar dupe bug by disallowing all interactions while altar is in use. --- .../Slimefun/AncientAltar/RitualAnimation.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java index ce0b6e711..3ad6f6013 100644 --- a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java +++ b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java @@ -28,7 +28,7 @@ public class RitualAnimation implements Runnable { List particles; boolean running; - int stage; + int stage; public RitualAnimation(List altars, Block altar, Location drop, ItemStack output, List pedestals, List items) { this.l = drop; @@ -48,6 +48,7 @@ public class RitualAnimation implements Runnable { idle(); if(this.stage == 36) { finish(); + AncientAltarListener.altarinuse = false; return; } if(this.stage > 0 && this.stage % 4 == 0) { @@ -72,7 +73,10 @@ public class RitualAnimation implements Runnable { private void checkPedestal(Block pedestal) { Item item = AncientAltarListener.findItem(pedestal); - if (item == null) abort(); + if (item == null) { + abort(); + AncientAltarListener.altarinuse = false; + } else { particles.add(pedestal.getLocation().add(0.5, 1.5, 0.5)); items.add(AncientAltarListener.fixItemStack(item.getItemStack(), item.getCustomName())); @@ -95,7 +99,7 @@ public class RitualAnimation implements Runnable { for (ItemStack stack: items) { l.getWorld().dropItemNaturally(l, stack); } - l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F); + l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F); altars.remove(altar); } From c65d8cf49b92bb53ae34d66239788e83021b4ec6 Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 11:59:36 -0400 Subject: [PATCH 10/18] Redoing this to fix a thing. --- .../listeners/AncientAltarListener.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java index c630ea8e5..05aef13a7 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java @@ -48,7 +48,7 @@ public class AncientAltarListener implements Listener { @EventHandler(priority=EventPriority.HIGH, ignoreCancelled = true) public void onInteract(PlayerInteractEvent e) { - if (this.altarinuse) { + if (altarinuse) { e.setCancelled(true); return; } @@ -63,12 +63,12 @@ public class AncientAltarListener implements Listener { if(e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.AIR)) return; if(b.getRelative(0, 1, 0).getType() != Material.AIR) { Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_PEDESTAL.obstructed", true); + altarinuse = false; return; } insertItem(e.getPlayer(), b); } else if (!removed_items.contains(stack.getUniqueId())) { - this.altarinuse = true; final UUID uuid = stack.getUniqueId(); removed_items.add(uuid); @@ -87,7 +87,7 @@ public class AncientAltarListener implements Listener { } } else if (item.getID().equals("ANCIENT_ALTAR")) { - if (this.altarinuse) { + if (altarinuse) { e.setCancelled(true); return; } @@ -107,7 +107,6 @@ public class AncientAltarListener implements Listener { } ItemStack result = Pedestals.getRecipeOutput(catalyst, input); if (result != null) { - this.altarinuse = true; List consumed = new ArrayList(); consumed.add(catalyst); PlayerInventory.consumeItemInHand(e.getPlayer()); @@ -115,16 +114,19 @@ public class AncientAltarListener implements Listener { else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-recipe", true); + altarinuse = false; } } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-catalyst", true); + altarinuse = false; } } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.not-enough-pedestals", true, new Variable("%pedestals%", String.valueOf(pedestals.size()))); + altarinuse = false; } } } @@ -146,15 +148,6 @@ public class AncientAltarListener implements Listener { return stack; } - public void setNotInUse() { - this.altarinuse = false; - } - - public boolean setAltarinuse(boolean inuse) { - this.altarinuse = inuse; - return true; - } - public static Item findItem(Block b) { for (Entity n: b.getChunk().getEntities()) { if (n instanceof Item) { From 8e3d2e332bfa511c36664f9963c6fd7852f00e8f Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 11:59:53 -0400 Subject: [PATCH 11/18] redoing this to fix a thing. --- .../Slimefun/AncientAltar/RitualAnimation.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java index 3ad6f6013..2ea07ab9d 100644 --- a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java +++ b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java @@ -45,6 +45,7 @@ public class RitualAnimation implements Runnable { @Override public void run() { + AncientAltarListener.altarinuse = true; idle(); if(this.stage == 36) { finish(); @@ -73,11 +74,9 @@ public class RitualAnimation implements Runnable { private void checkPedestal(Block pedestal) { Item item = AncientAltarListener.findItem(pedestal); - if (item == null) { - abort(); - AncientAltarListener.altarinuse = false; - } + if (item == null) abort(); else { + AncientAltarListener.altarinuse = true; particles.add(pedestal.getLocation().add(0.5, 1.5, 0.5)); items.add(AncientAltarListener.fixItemStack(item.getItemStack(), item.getCustomName())); pedestal.getWorld().playSound(pedestal.getLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 5F, 2F); @@ -99,7 +98,8 @@ public class RitualAnimation implements Runnable { for (ItemStack stack: items) { l.getWorld().dropItemNaturally(l, stack); } - l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F); + l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F); + AncientAltarListener.altarinuse = false; altars.remove(altar); } @@ -107,6 +107,7 @@ public class RitualAnimation implements Runnable { l.getWorld().playSound(l, Sound.ENTITY_ZOMBIE_VILLAGER_CURE, 1F, 1F); l.getWorld().playEffect(l, Effect.STEP_SOUND, Material.EMERALD_BLOCK); l.getWorld().dropItemNaturally(l.add(0, 1, 0), output); + AncientAltarListener.altarinuse = false; altars.remove(altar); } From 3b5669dbafe70dd8b3e3a5a857e62aef349038fe Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:00:23 -0400 Subject: [PATCH 12/18] Fixing some character issue from prior pull requests. --- src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java b/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java index 26007e050..c707fb156 100644 --- a/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java +++ b/src/me/mrCookieSlime/Slimefun/Hashing/ItemHash.java @@ -38,7 +38,7 @@ public class ItemHash { StringBuilder builder = new StringBuilder(LENGTH * 2); for (char c: item.getHash().toCharArray()) { - builder.append('§'); + builder.append('§'); builder.append(c); } @@ -47,7 +47,7 @@ public class ItemHash { public static SlimefunItem fromString(String input) { if (input == null || input.length() != LENGTH * 2) return null; - String hex = input.replaceAll("§", ""); + String hex = input.replaceAll("§", ""); if (hex.length() != LENGTH || !map.containsKey(hex)) return null; From e6199e3d462725ae56a86e4e36bb12ccf43c934b Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:11:51 -0400 Subject: [PATCH 13/18] Moves special case out of loop --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 36cc7e35f..62a1d3797 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -330,12 +330,12 @@ public class SlimefunItem { public static SlimefunItem getByItem(ItemStack item) { if (item == null) return null; + if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false))) return item; for (SlimefunItem sfi: items) { if (sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; - else if (sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; - else if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false))) return sfi; + else if (sfi instanceof SlimefunBackpack && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (SlimefunManager.isItemSimiliar(item, sfi.getItem(), true)) return sfi; } return null; From 47d95af0a0536dee6d7c7f01e451d126aec73477 Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:12:52 -0400 Subject: [PATCH 14/18] Fix whitespace issue. --- .../mrCookieSlime/Slimefun/listeners/AncientAltarListener.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java index 05aef13a7..1ffbcd41e 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java @@ -110,7 +110,8 @@ public class AncientAltarListener implements Listener { List consumed = new ArrayList(); consumed.add(catalyst); PlayerInventory.consumeItemInHand(e.getPlayer()); - Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L); } + Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunStartup.instance, new RitualAnimation(altars, b, b.getLocation().add(0.5, 1.3, 0.5), result, pedestals, consumed), 10L); + } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-recipe", true); From 91587048c3c37d066324bda22b19d31ab98751aa Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:47:22 -0400 Subject: [PATCH 15/18] removes case for getbyitem... since i can't check items in the loop here, I can't check the actual item, so this just throws an error and doesn't work anyway. --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 62a1d3797..6c6149690 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -329,8 +329,7 @@ public class SlimefunItem { } public static SlimefunItem getByItem(ItemStack item) { - if (item == null) return null; - if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false))) return item; + if (item == null) return null; for (SlimefunItem sfi: items) { if (sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; From 444cb1538e9205718994d3900f0630b877f8fc15 Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:48:00 -0400 Subject: [PATCH 16/18] Removing all changes. --- .../listeners/AncientAltarListener.java | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java index 1ffbcd41e..6b01452db 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/AncientAltarListener.java @@ -37,8 +37,6 @@ import org.bukkit.util.Vector; public class AncientAltarListener implements Listener { - public static boolean altarinuse = false; - public AncientAltarListener(SlimefunStartup plugin) { plugin.getServer().getPluginManager().registerEvents(this, plugin); } @@ -48,10 +46,6 @@ public class AncientAltarListener implements Listener { @EventHandler(priority=EventPriority.HIGH, ignoreCancelled = true) public void onInteract(PlayerInteractEvent e) { - if (altarinuse) { - e.setCancelled(true); - return; - } if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return; Block b = e.getClickedBlock(); SlimefunItem item = BlockStorage.check(b); @@ -63,7 +57,6 @@ public class AncientAltarListener implements Listener { if(e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.AIR)) return; if(b.getRelative(0, 1, 0).getType() != Material.AIR) { Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_PEDESTAL.obstructed", true); - altarinuse = false; return; } insertItem(e.getPlayer(), b); @@ -87,10 +80,6 @@ public class AncientAltarListener implements Listener { } } else if (item.getID().equals("ANCIENT_ALTAR")) { - if (altarinuse) { - e.setCancelled(true); - return; - } e.setCancelled(true); ItemStack catalyst = new CustomItem(e.getPlayer().getInventory().getItemInMainHand(), 1); @@ -105,6 +94,7 @@ public class AncientAltarListener implements Listener { Item stack = findItem(pedestal); if (stack != null) input.add(fixItemStack(stack.getItemStack(), stack.getCustomName())); } + ItemStack result = Pedestals.getRecipeOutput(catalyst, input); if (result != null) { List consumed = new ArrayList(); @@ -115,19 +105,16 @@ public class AncientAltarListener implements Listener { else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-recipe", true); - altarinuse = false; } } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.unknown-catalyst", true); - altarinuse = false; } } else { altars.remove(e.getClickedBlock()); Messages.local.sendTranslation(e.getPlayer(), "machines.ANCIENT_ALTAR.not-enough-pedestals", true, new Variable("%pedestals%", String.valueOf(pedestals.size()))); - altarinuse = false; } } } @@ -171,7 +158,7 @@ public class AncientAltarListener implements Listener { p.playSound(b.getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.3F, 0.3F); } } - + @EventHandler (priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockPlace(BlockPlaceEvent e) { Block b = e.getBlockPlaced().getRelative(0, -1, 0); From 1f88557e4cda62f4bfd9aa3c397419f66de48bda Mon Sep 17 00:00:00 2001 From: Rick Date: Sun, 22 Apr 2018 12:48:19 -0400 Subject: [PATCH 17/18] Removing all changes. --- .../Slimefun/AncientAltar/RitualAnimation.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java index 2ea07ab9d..ce0b6e711 100644 --- a/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java +++ b/src/me/mrCookieSlime/Slimefun/AncientAltar/RitualAnimation.java @@ -28,7 +28,7 @@ public class RitualAnimation implements Runnable { List particles; boolean running; - int stage; + int stage; public RitualAnimation(List altars, Block altar, Location drop, ItemStack output, List pedestals, List items) { this.l = drop; @@ -45,11 +45,9 @@ public class RitualAnimation implements Runnable { @Override public void run() { - AncientAltarListener.altarinuse = true; idle(); if(this.stage == 36) { finish(); - AncientAltarListener.altarinuse = false; return; } if(this.stage > 0 && this.stage % 4 == 0) { @@ -76,7 +74,6 @@ public class RitualAnimation implements Runnable { Item item = AncientAltarListener.findItem(pedestal); if (item == null) abort(); else { - AncientAltarListener.altarinuse = true; particles.add(pedestal.getLocation().add(0.5, 1.5, 0.5)); items.add(AncientAltarListener.fixItemStack(item.getItemStack(), item.getCustomName())); pedestal.getWorld().playSound(pedestal.getLocation(), Sound.ENTITY_ENDERMEN_TELEPORT, 5F, 2F); @@ -99,7 +96,6 @@ public class RitualAnimation implements Runnable { l.getWorld().dropItemNaturally(l, stack); } l.getWorld().playSound(l, Sound.BLOCK_NOTE_SNARE, 5F, 1F); - AncientAltarListener.altarinuse = false; altars.remove(altar); } @@ -107,7 +103,6 @@ public class RitualAnimation implements Runnable { l.getWorld().playSound(l, Sound.ENTITY_ZOMBIE_VILLAGER_CURE, 1F, 1F); l.getWorld().playEffect(l, Effect.STEP_SOUND, Material.EMERALD_BLOCK); l.getWorld().dropItemNaturally(l.add(0, 1, 0), output); - AncientAltarListener.altarinuse = false; altars.remove(altar); } From 4acd3645dd3dc20af960c2b368bf10fc8809b2bc Mon Sep 17 00:00:00 2001 From: Rick Date: Mon, 23 Apr 2018 20:34:53 -0400 Subject: [PATCH 18/18] Reverts change to isItem, makes changes instead to getByItem --- .../Slimefun/Objects/SlimefunItem/SlimefunItem.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java index 6c6149690..d8ad926dd 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/SlimefunItem.java @@ -330,6 +330,8 @@ public class SlimefunItem { public static SlimefunItem getByItem(ItemStack item) { if (item == null) return null; + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) return getByID("BROKEN_SPAWNER"); + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false)) return getByID("REPAIRED_SPAWNER"); for (SlimefunItem sfi: items) { if (sfi instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; else if (sfi instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, sfi.getItem(), false)) return sfi; @@ -345,8 +347,7 @@ public class SlimefunItem { if (this instanceof ChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof DamagableChargableItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; else if (this instanceof ChargedItem && SlimefunManager.isItemSimiliar(item, this.item, false)) return true; - else if ((SlimefunManager.isItemSimiliar(item, SlimefunItems.BROKEN_SPAWNER, false)) || (SlimefunManager.isItemSimiliar(item, SlimefunItems.REPAIRED_SPAWNER, false))) return true; - else return SlimefunManager.isItemSimiliar(item, this.item, true); + else return SlimefunManager.isItemSimiliar(item, this.item, true); } public void load() {