From 476171911af7cc8a009125e0aebc4296fd26b511 Mon Sep 17 00:00:00 2001 From: Jikoo Date: Sat, 19 Nov 2016 02:01:52 -0500 Subject: [PATCH] Silences shulker boxes but breaks sound/animation till tile is reloaded Time for relaxation and sleep, too much actual effort expended today --- OpenInv/pom.xml | 2 +- .../internal/v1_11_R1/AnySilentContainer.java | 6 ++-- .../v1_11_R1/SilentContainerShulkerBox.java | 31 +++++++++++++++++-- 3 files changed, 34 insertions(+), 5 deletions(-) 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()) {