From e2342c38eb5ac57bf28928ec21ab0a99eb8409e7 Mon Sep 17 00:00:00 2001 From: Kyle Einstein Date: Mon, 23 Apr 2018 08:33:29 -0400 Subject: [PATCH 1/4] Fix Two Player Duplication Bug --- .../Objects/SlimefunItem/abstractItems/AContainer.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index 76475f53a..7dbf3116b 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -84,10 +84,16 @@ public abstract class AContainer extends SlimefunItem { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getInputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.toInventory().clear(slot); + } } for (int slot: getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.toInventory().clear(slot); + } } } progress.remove(b); From b16b936b81ed05f72797f7e34ff6d393ce57589f Mon Sep 17 00:00:00 2001 From: KyleEstein Date: Wed, 25 Apr 2018 23:40:46 -0400 Subject: [PATCH 2/4] Fix Additional Devices Vulnerable to Duplication Bug --- .../Slimefun/Android/ProgrammableAndroid.java | 10 ++++++++-- .../abstractItems/AContainer.java | 14 +++++++++---- .../SlimefunItem/abstractItems/AFarm.java | 10 ++++++++-- .../abstractItems/AGenerator.java | 20 +++++++++++++++---- .../SlimefunItem/abstractItems/AReactor.java | 15 +++++++++++--- .../machines/AdvancedCargoOutputNode.java | 5 ++++- .../machines/AnimalGrowthAccelerator.java | 5 ++++- .../SlimefunItem/machines/AutoBreeder.java | 5 ++++- .../machines/AutomatedCraftingChamber.java | 10 ++++++++-- .../machines/CargoCraftingNode.java | 5 ++++- .../SlimefunItem/machines/CargoInputNode.java | 5 ++++- .../machines/CropGrowthAccelerator.java | 5 ++++- .../machines/ElectricSmeltery.java | 10 ++++++++-- .../machines/ReactorAccessPort.java | 15 +++++++++++--- .../machines/WitherAssembler.java | 10 ++++++++-- .../SlimefunItem/machines/XPCollector.java | 5 ++++- 16 files changed, 118 insertions(+), 31 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java index 8ba0f054e..b087030f3 100644 --- a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java @@ -211,9 +211,15 @@ public abstract class ProgrammableAndroid extends SlimefunItem { boolean allow = reason.equals(UnregisterReason.PLAYER_BREAK) && (BlockStorage.getBlockInfo(b, "owner").equals(p.getUniqueId().toString()) || p.hasPermission("slimefun.android.bypass")); if (allow) { - if (BlockStorage.getInventory(b).getItemInSlot(43) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(43)); + if (BlockStorage.getInventory(b).getItemInSlot(43) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(43)); + BlockStorage.getInventory(b).replaceExistingItem(43, null); + } for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } AndroidStatusHologram.remove(b); } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index 7dbf3116b..6d82396a5 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -86,13 +86,13 @@ public abstract class AContainer extends SlimefunItem { for (int slot: getInputSlots()) { if (inv.getItemInSlot(slot) != null) { b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.toInventory().clear(slot); + inv.replaceExistingItem(slot, null); } } for (int slot: getOutputSlots()) { if (inv.getItemInSlot(slot) != null) { b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); - inv.toInventory().clear(slot); + inv.replaceExistingItem(slot, null); } } } @@ -141,10 +141,16 @@ public abstract class AContainer extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } processing.remove(b); progress.remove(b); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java index c49da80ef..cb0629219 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java @@ -69,7 +69,10 @@ public abstract class AFarm extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } @@ -112,7 +115,10 @@ public abstract class AFarm extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java index 3d0341982..19f7a8c29 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AGenerator.java @@ -88,10 +88,16 @@ public abstract class AGenerator extends SlimefunItem { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getInputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } for (int slot: getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } progress.remove(b.getLocation()); @@ -141,10 +147,16 @@ public abstract class AGenerator extends SlimefunItem { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getInputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } for (int slot: getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } progress.remove(b.getLocation()); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java index da03cac9f..1d02c7d88 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AReactor.java @@ -134,13 +134,22 @@ public abstract class AReactor extends SlimefunItem { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getFuelSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } for (int slot: getCoolantSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } for (int slot: getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } progress.remove(b.getLocation()); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java index 5b3efc721..e75969a9a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java @@ -211,7 +211,10 @@ public class AdvancedCargoOutputNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java index 77c6299d1..f0fb5948b 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java @@ -71,7 +71,10 @@ public class AnimalGrowthAccelerator extends SlimefunItem { public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAccelerator.getArmorStand(b).remove(); for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java index 38e445550..0060bd40f 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java @@ -71,7 +71,10 @@ public class AutoBreeder extends SlimefunItem { public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { me.mrCookieSlime.Slimefun.holograms.AutoBreeder.getArmorStand(b).remove(); for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java index d446801af..e875dc6da 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutomatedCraftingChamber.java @@ -119,10 +119,16 @@ public abstract class AutomatedCraftingChamber extends SlimefunItem { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getInputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } for (int slot: getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java index afff95900..40d5407c3 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java @@ -106,7 +106,10 @@ public class CargoCraftingNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java index f02d6e031..930924d2b 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java @@ -237,7 +237,10 @@ public class CargoInputNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java index 60d138860..fd248be65 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java @@ -81,7 +81,10 @@ public abstract class CropGrowthAccelerator extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricSmeltery.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricSmeltery.java index f481901b2..f9c3586f0 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricSmeltery.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ElectricSmeltery.java @@ -102,10 +102,16 @@ public abstract class ElectricSmeltery extends AContainer { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getInputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } for (int slot: getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } progress.remove(b.getLocation()); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java index 3dd061220..0d50cb497 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/ReactorAccessPort.java @@ -81,13 +81,22 @@ public class ReactorAccessPort extends SlimefunItem { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getFuelSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } for (int slot: getCoolantSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } for (int slot: getOutputSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/WitherAssembler.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/WitherAssembler.java index bebac6219..e840cb664 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/WitherAssembler.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/WitherAssembler.java @@ -130,10 +130,16 @@ public class WitherAssembler extends SlimefunItem { BlockMenu inv = BlockStorage.getInventory(b); if (inv != null) { for (int slot: getSoulSandSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } for (int slot: getWitherSkullSlots()) { - if (inv.getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java index b1c448295..148694fa5 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java @@ -70,7 +70,10 @@ public class XPCollector extends SlimefunItem { public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { me.mrCookieSlime.Slimefun.holograms.XPCollector.getArmorStand(b).remove(); for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); + BlockStorage.getInventory(b).replaceExistingItem(slot, null); + } } return true; } From a876301d943b3a0d1ab826d29074f487a045562e Mon Sep 17 00:00:00 2001 From: KyleEstein Date: Sat, 28 Apr 2018 12:05:43 -0400 Subject: [PATCH 3/4] Cast inventory to a variable instead of calling getInventory() over and over --- .../Slimefun/Android/ProgrammableAndroid.java | 19 ++++++++++------- .../abstractItems/AContainer.java | 21 +++++++++++-------- .../SlimefunItem/abstractItems/AFarm.java | 11 ++++++---- .../machines/AdvancedCargoOutputNode.java | 11 ++++++---- .../machines/AnimalGrowthAccelerator.java | 11 ++++++---- .../SlimefunItem/machines/AutoBreeder.java | 11 ++++++---- .../machines/CargoCraftingNode.java | 11 ++++++---- .../SlimefunItem/machines/CargoInputNode.java | 11 ++++++---- .../machines/CropGrowthAccelerator.java | 11 ++++++---- .../SlimefunItem/machines/XPCollector.java | 11 ++++++---- 10 files changed, 79 insertions(+), 49 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java index b087030f3..ea6af4535 100644 --- a/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java +++ b/src/me/mrCookieSlime/Slimefun/Android/ProgrammableAndroid.java @@ -211,14 +211,17 @@ public abstract class ProgrammableAndroid extends SlimefunItem { boolean allow = reason.equals(UnregisterReason.PLAYER_BREAK) && (BlockStorage.getBlockInfo(b, "owner").equals(p.getUniqueId().toString()) || p.hasPermission("slimefun.android.bypass")); if (allow) { - if (BlockStorage.getInventory(b).getItemInSlot(43) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(43)); - BlockStorage.getInventory(b).replaceExistingItem(43, null); - } - for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + if (inv.getItemInSlot(43) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(43)); + inv.replaceExistingItem(43, null); + } + for (int slot: getOutputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } AndroidStatusHologram.remove(b); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java index 6d82396a5..d1aec7710 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AContainer.java @@ -140,16 +140,19 @@ public abstract class AContainer extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot: getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } - } - for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + for (int slot: getOutputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } processing.remove(b); diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java index cb0629219..0f9d83b02 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java @@ -68,10 +68,13 @@ public abstract class AFarm extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot: getOutputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java index e75969a9a..54c605294 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AdvancedCargoOutputNode.java @@ -210,10 +210,13 @@ public class AdvancedCargoOutputNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot: getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java index f0fb5948b..c8dd17562 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AnimalGrowthAccelerator.java @@ -70,10 +70,13 @@ public class AnimalGrowthAccelerator extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { me.mrCookieSlime.Slimefun.holograms.AnimalGrowthAccelerator.getArmorStand(b).remove(); - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot: getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java index 0060bd40f..b0642d085 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/AutoBreeder.java @@ -70,10 +70,13 @@ public class AutoBreeder extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { me.mrCookieSlime.Slimefun.holograms.AutoBreeder.getArmorStand(b).remove(); - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot: getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java index 40d5407c3..8f4ad9bbe 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoCraftingNode.java @@ -105,10 +105,13 @@ public class CargoCraftingNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot: getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java index 930924d2b..90686153d 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CargoInputNode.java @@ -236,10 +236,13 @@ public class CargoInputNode extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot: getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java index fd248be65..781bfca20 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/CropGrowthAccelerator.java @@ -80,10 +80,13 @@ public abstract class CropGrowthAccelerator extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getInputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot: getInputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java index 148694fa5..70f12376d 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/machines/XPCollector.java @@ -69,10 +69,13 @@ public class XPCollector extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { me.mrCookieSlime.Slimefun.holograms.XPCollector.getArmorStand(b).remove(); - for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot: getOutputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true; From 692904ffc3d59e132481ff29d10bac02266f6c1d Mon Sep 17 00:00:00 2001 From: KyleEstein Date: Sat, 28 Apr 2018 12:14:17 -0400 Subject: [PATCH 4/4] Missed updating one onBreak() in AFarm.java --- .../Objects/SlimefunItem/abstractItems/AFarm.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java index 0f9d83b02..d480afa0a 100644 --- a/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java +++ b/src/me/mrCookieSlime/Slimefun/Objects/SlimefunItem/abstractItems/AFarm.java @@ -117,10 +117,13 @@ public abstract class AFarm extends SlimefunItem { @Override public boolean onBreak(Player p, Block b, SlimefunItem item, UnregisterReason reason) { - for (int slot: getOutputSlots()) { - if (BlockStorage.getInventory(b).getItemInSlot(slot) != null) { - b.getWorld().dropItemNaturally(b.getLocation(), BlockStorage.getInventory(b).getItemInSlot(slot)); - BlockStorage.getInventory(b).replaceExistingItem(slot, null); + BlockMenu inv = BlockStorage.getInventory(b); + if (inv != null) { + for (int slot: getOutputSlots()) { + if (inv.getItemInSlot(slot) != null) { + b.getWorld().dropItemNaturally(b.getLocation(), inv.getItemInSlot(slot)); + inv.replaceExistingItem(slot, null); + } } } return true;