diff --git a/OpenInv/pom.xml b/OpenInv/pom.xml
index 4d40e4b..badccd8 100644
--- a/OpenInv/pom.xml
+++ b/OpenInv/pom.xml
@@ -9,7 +9,7 @@
openinv
OpenInv
- 2.5.2
+ 2.5.3-SNAPSHOT
diff --git a/OpenInvCraftbukkit1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/AnySilentContainer.java b/OpenInvCraftbukkit1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/AnySilentContainer.java
index fa9f578..5697ece 100644
--- a/OpenInvCraftbukkit1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/AnySilentContainer.java
+++ b/OpenInvCraftbukkit1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/AnySilentContainer.java
@@ -116,9 +116,11 @@ public class AnySilentContainer implements IAnySilentContainer {
player.b(StatisticList.ae);
- if (silentchest) {
- // TODO We need to go deeper: Box is not anumated, but sound plays.
+ if (silentchest && tile instanceof TileEntityShulkerBox) {
+ // TODO: This fixes sound, but the box is then silent for anyone until the tile entity is recreated
+ SilentContainerShulkerBox.increaseOpenQuantity((TileEntityShulkerBox) tile);
container = new SilentContainerShulkerBox(player.inventory, ((IInventory) tile), player);
+ SilentContainerShulkerBox.decreaseOpenQuantity((TileEntityShulkerBox) tile);
}
}
diff --git a/OpenInvCraftbukkit1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/SilentContainerShulkerBox.java b/OpenInvCraftbukkit1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/SilentContainerShulkerBox.java
index f911d55..f66a21b 100644
--- a/OpenInvCraftbukkit1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/SilentContainerShulkerBox.java
+++ b/OpenInvCraftbukkit1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/SilentContainerShulkerBox.java
@@ -1,22 +1,49 @@
package com.lishid.openinv.internal.v1_11_R1;
+import java.lang.reflect.Field;
+
import net.minecraft.server.v1_11_R1.ContainerShulkerBox;
import net.minecraft.server.v1_11_R1.EntityHuman;
import net.minecraft.server.v1_11_R1.IInventory;
import net.minecraft.server.v1_11_R1.ItemStack;
import net.minecraft.server.v1_11_R1.PlayerInventory;
+import net.minecraft.server.v1_11_R1.TileEntityShulkerBox;
public class SilentContainerShulkerBox extends ContainerShulkerBox {
+ private static Field h;
+
+ private static Field exposeOpenStatus() throws NoSuchFieldException, SecurityException {
+ if (h == null) {
+ h = TileEntityShulkerBox.class.getDeclaredField("h");
+ h.setAccessible(true);
+ }
+ return h;
+ }
+
+ public static void increaseOpenQuantity(TileEntityShulkerBox containerShulkerBox) {
+ try {
+ exposeOpenStatus().set(containerShulkerBox, ((Integer) exposeOpenStatus().get(containerShulkerBox)) + 1);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ public static void decreaseOpenQuantity(TileEntityShulkerBox containerShulkerBox) {
+ try {
+ exposeOpenStatus().set(containerShulkerBox, ((Integer) exposeOpenStatus().get(containerShulkerBox)) - 1);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
public SilentContainerShulkerBox(PlayerInventory playerInventory, IInventory iInventory,
EntityHuman entityHuman) {
super(playerInventory, iInventory, entityHuman);
- iInventory.closeContainer(entityHuman);
}
@Override
public void b(EntityHuman entityHuman) {
- // Don't send close signal twice, might screw up
PlayerInventory playerinventory = entityHuman.inventory;
if (!playerinventory.getCarried().isEmpty()) {