diff --git a/src/main/java/com/Acrobot/Breeze/Utils/ImplementationAdapter.java b/src/main/java/com/Acrobot/Breeze/Utils/ImplementationAdapter.java index 2075380..171fa6c 100644 --- a/src/main/java/com/Acrobot/Breeze/Utils/ImplementationAdapter.java +++ b/src/main/java/com/Acrobot/Breeze/Utils/ImplementationAdapter.java @@ -2,6 +2,7 @@ package com.Acrobot.Breeze.Utils; import org.bukkit.block.Block; import org.bukkit.block.BlockState; +import org.bukkit.block.DoubleChest; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; @@ -10,6 +11,8 @@ import java.util.function.BiFunction; public class ImplementationAdapter { private static BiFunction HOLDER_PROVIDER; + private static BiFunction LEFT_HOLDER_PROVIDER; + private static BiFunction RIGHT_HOLDER_PROVIDER; private static BiFunction STATE_PROVIDER; static { @@ -17,8 +20,12 @@ public class ImplementationAdapter { Inventory.class.getMethod("getHolder", boolean.class); Class c = Class.forName("com.Acrobot.Breeze.Utils.ImplementationFeatures.PaperLatestHolder"); HOLDER_PROVIDER = (BiFunction) c.getDeclaredField("PROVIDER").get(null); + LEFT_HOLDER_PROVIDER = (BiFunction) c.getDeclaredField("LEFT_PROVIDER").get(null); + RIGHT_HOLDER_PROVIDER = (BiFunction) c.getDeclaredField("RIGHT_PROVIDER").get(null); } catch (NoSuchMethodException | ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { HOLDER_PROVIDER = (inventory, useSnapshot) -> inventory.getHolder(); + LEFT_HOLDER_PROVIDER = (doubleChest, useSnapshot) -> doubleChest.getLeftSide(); + RIGHT_HOLDER_PROVIDER = (doubleChest, useSnapshot) -> doubleChest.getRightSide(); } try { Block.class.getMethod("getState", boolean.class); @@ -39,6 +46,26 @@ public class ImplementationAdapter { return HOLDER_PROVIDER.apply(inventory, useSnapshot); } + /** + * Get the a DoubleChest's left side + * @param doubleChest The DoubleChest + * @param useSnapshot Whether or not the holder should be a snapshot (if possible) + * @return The left side's holder + */ + public static InventoryHolder getLeftSide(DoubleChest doubleChest, boolean useSnapshot) { + return LEFT_HOLDER_PROVIDER.apply(doubleChest, useSnapshot); + } + + /** + * Get the a DoubleChest's right side + * @param doubleChest The DoubleChest + * @param useSnapshot Whether or not the holder should be a snapshot (if possible) + * @return The left right's holder + */ + public static InventoryHolder getRightSide(DoubleChest doubleChest, boolean useSnapshot) { + return RIGHT_HOLDER_PROVIDER.apply(doubleChest, useSnapshot); + } + /** * Get a block state * @param block The block to get the state from diff --git a/src/main/java/com/Acrobot/Breeze/Utils/ImplementationFeatures/PaperLatestHolder.java b/src/main/java/com/Acrobot/Breeze/Utils/ImplementationFeatures/PaperLatestHolder.java index aa59983..4259df1 100644 --- a/src/main/java/com/Acrobot/Breeze/Utils/ImplementationFeatures/PaperLatestHolder.java +++ b/src/main/java/com/Acrobot/Breeze/Utils/ImplementationFeatures/PaperLatestHolder.java @@ -1,5 +1,6 @@ package com.Acrobot.Breeze.Utils.ImplementationFeatures; +import org.bukkit.block.DoubleChest; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryHolder; @@ -9,4 +10,8 @@ public class PaperLatestHolder { public static final BiFunction PROVIDER = Inventory::getHolder; + public static final BiFunction LEFT_PROVIDER = DoubleChest::getLeftSide; + + public static final BiFunction RIGHT_PROVIDER = DoubleChest::getRightSide; + } diff --git a/src/main/java/com/Acrobot/ChestShop/Listeners/PostTransaction/ItemManager.java b/src/main/java/com/Acrobot/ChestShop/Listeners/PostTransaction/ItemManager.java index 5ebe660..c7535b7 100644 --- a/src/main/java/com/Acrobot/ChestShop/Listeners/PostTransaction/ItemManager.java +++ b/src/main/java/com/Acrobot/ChestShop/Listeners/PostTransaction/ItemManager.java @@ -1,9 +1,12 @@ package com.Acrobot.ChestShop.Listeners.PostTransaction; +import com.Acrobot.Breeze.Utils.ImplementationAdapter; import com.Acrobot.Breeze.Utils.InventoryUtil; +import com.Acrobot.ChestShop.ChestShop; import com.Acrobot.ChestShop.Configuration.Properties; import com.Acrobot.ChestShop.Events.TransactionEvent; import org.bukkit.block.BlockState; +import org.bukkit.block.DoubleChest; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -54,9 +57,11 @@ public class ItemManager implements Listener { private static void update(InventoryHolder holder) { if (holder instanceof Player) { ((Player) holder).updateInventory(); - } - if (holder instanceof BlockState) { + } else if (holder instanceof BlockState) { ((BlockState) holder).update(); + } else if (holder instanceof DoubleChest) { + update(ImplementationAdapter.getLeftSide((DoubleChest) holder, false)); + update(ImplementationAdapter.getRightSide((DoubleChest) holder, false)); } } }