diff --git a/api/pom.xml b/api/pom.xml
index 15bae96..3a66ec0 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvparent
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvapi
diff --git a/api/src/main/java/com/lishid/openinv/internal/IAnySilentContainer.java b/api/src/main/java/com/lishid/openinv/internal/IAnySilentContainer.java
index 8f97e18..7eac2bf 100644
--- a/api/src/main/java/com/lishid/openinv/internal/IAnySilentContainer.java
+++ b/api/src/main/java/com/lishid/openinv/internal/IAnySilentContainer.java
@@ -6,16 +6,27 @@ import org.bukkit.entity.Player;
public interface IAnySilentContainer {
/**
- * Checks if the given block is a container which can be unblocked or silenced.
- *
- * @param block the BlockState
- * @return true if the Block is a supported container
+ * Opens the container at the given coordinates for the Player. If you do not want blocked
+ * containers to open, be sure to check {@link #isAnyContainerNeeded(Player, Block)}
+ * first.
+ *
+ * @param player the Player opening the container
+ * @param silentchest whether the container's noise is to be silenced
+ * @param block the Block
+ * @return true if the container can be opened
*/
- public boolean isAnySilentContainer(Block block);
+ public boolean activateContainer(Player player, boolean silentchest, Block block);
+
+ /**
+ * Closes the Player's currently open container silently, if necessary.
+ *
+ * @param player the Player closing a container
+ */
+ public void deactivateContainer(Player player);
/**
* Checks if the container at the given coordinates is blocked.
- *
+ *
* @param player the Player opening the container
* @param block the Block
* @return true if the container is blocked
@@ -23,15 +34,11 @@ public interface IAnySilentContainer {
public boolean isAnyContainerNeeded(Player player, Block block);
/**
- * Opens the container at the given coordinates for the Player. If you do not want blocked
- * containers to open, be sure to check {@link #isAnyContainerNeeded(Player, Block)}
- * first.
- *
- * @param player
- * @param silentchest whether the container's noise is to be silenced
- * @param block the Block
- * @return true if the container can be opened
+ * Checks if the given block is a container which can be unblocked or silenced.
+ *
+ * @param block the BlockState
+ * @return true if the Block is a supported container
*/
- public boolean activateContainer(Player player, boolean silentchest, Block block);
+ public boolean isAnySilentContainer(Block block);
}
diff --git a/assembly/pom.xml b/assembly/pom.xml
index 4e3b67c..c503030 100644
--- a/assembly/pom.xml
+++ b/assembly/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvparent
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvassembly
diff --git a/common/pom.xml b/common/pom.xml
index 5e6738d..e014004 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvparent
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvcommon
@@ -22,7 +22,7 @@
com.lishid
openinvapi
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/1_4_5/pom.xml b/internal/1_4_5/pom.xml
index 4afc9bf..0e8e075 100644
--- a/internal/1_4_5/pom.xml
+++ b/internal/1_4_5/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_4_5
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/1_4_5/src/main/java/com/lishid/openinv/internal/v1_4_5/AnySilentContainer.java b/internal/1_4_5/src/main/java/com/lishid/openinv/internal/v1_4_5/AnySilentContainer.java
index 55ea5d7..4bff7b8 100644
--- a/internal/1_4_5/src/main/java/com/lishid/openinv/internal/v1_4_5/AnySilentContainer.java
+++ b/internal/1_4_5/src/main/java/com/lishid/openinv/internal/v1_4_5/AnySilentContainer.java
@@ -165,4 +165,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/1_4_6/pom.xml b/internal/1_4_6/pom.xml
index 5a5b0d0..df34a76 100644
--- a/internal/1_4_6/pom.xml
+++ b/internal/1_4_6/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_4_6
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/1_4_6/src/main/java/com/lishid/openinv/internal/v1_4_6/AnySilentContainer.java b/internal/1_4_6/src/main/java/com/lishid/openinv/internal/v1_4_6/AnySilentContainer.java
index 14d440c..f420591 100644
--- a/internal/1_4_6/src/main/java/com/lishid/openinv/internal/v1_4_6/AnySilentContainer.java
+++ b/internal/1_4_6/src/main/java/com/lishid/openinv/internal/v1_4_6/AnySilentContainer.java
@@ -165,4 +165,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/pom.xml b/internal/pom.xml
index 735b2e7..b78ad8c 100644
--- a/internal/pom.xml
+++ b/internal/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvparent
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvinternal
diff --git a/internal/v1_10_R1/pom.xml b/internal/v1_10_R1/pom.xml
index 2363e42..81a8306 100644
--- a/internal/v1_10_R1/pom.xml
+++ b/internal/v1_10_R1/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_10_R1
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_10_R1/src/main/java/com/lishid/openinv/internal/v1_10_R1/AnySilentContainer.java b/internal/v1_10_R1/src/main/java/com/lishid/openinv/internal/v1_10_R1/AnySilentContainer.java
index 66182f1..916427b 100644
--- a/internal/v1_10_R1/src/main/java/com/lishid/openinv/internal/v1_10_R1/AnySilentContainer.java
+++ b/internal/v1_10_R1/src/main/java/com/lishid/openinv/internal/v1_10_R1/AnySilentContainer.java
@@ -211,4 +211,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_11_R1/pom.xml b/internal/v1_11_R1/pom.xml
index 567b310..20a693c 100644
--- a/internal/v1_11_R1/pom.xml
+++ b/internal/v1_11_R1/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_11_R1
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/AnySilentContainer.java b/internal/v1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/AnySilentContainer.java
index 2a5621d..cb0a110 100644
--- a/internal/v1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/AnySilentContainer.java
+++ b/internal/v1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/AnySilentContainer.java
@@ -16,14 +16,14 @@
package com.lishid.openinv.internal.v1_11_R1;
+import java.lang.reflect.Field;
+
import com.lishid.openinv.internal.IAnySilentContainer;
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.BlockState;
import org.bukkit.entity.Player;
-import org.bukkit.scheduler.BukkitRunnable;
+import org.bukkit.inventory.InventoryView;
import net.minecraft.server.v1_11_R1.AxisAlignedBB;
import net.minecraft.server.v1_11_R1.Block;
@@ -31,7 +31,6 @@ import net.minecraft.server.v1_11_R1.BlockChest;
import net.minecraft.server.v1_11_R1.BlockEnderChest;
import net.minecraft.server.v1_11_R1.BlockPosition;
import net.minecraft.server.v1_11_R1.BlockShulkerBox;
-import net.minecraft.server.v1_11_R1.Container;
import net.minecraft.server.v1_11_R1.Entity;
import net.minecraft.server.v1_11_R1.EntityOcelot;
import net.minecraft.server.v1_11_R1.EntityPlayer;
@@ -40,18 +39,29 @@ import net.minecraft.server.v1_11_R1.IBlockData;
import net.minecraft.server.v1_11_R1.ITileInventory;
import net.minecraft.server.v1_11_R1.InventoryEnderChest;
import net.minecraft.server.v1_11_R1.InventoryLargeChest;
-import net.minecraft.server.v1_11_R1.PacketPlayOutOpenWindow;
import net.minecraft.server.v1_11_R1.StatisticList;
import net.minecraft.server.v1_11_R1.TileEntity;
import net.minecraft.server.v1_11_R1.TileEntityChest;
import net.minecraft.server.v1_11_R1.TileEntityEnderChest;
import net.minecraft.server.v1_11_R1.TileEntityShulkerBox;
import net.minecraft.server.v1_11_R1.World;
-
-import org.bukkit.craftbukkit.v1_11_R1.event.CraftEventFactory;
+import net.minecraft.server.v1_11_R1.EnumGamemode;
+import net.minecraft.server.v1_11_R1.PlayerInteractManager;
public class AnySilentContainer implements IAnySilentContainer {
+ private Field playerInteractManagerGamemode;
+
+ public AnySilentContainer() {
+ try {
+ this.playerInteractManagerGamemode = PlayerInteractManager.class.getDeclaredField("gamemode");
+ this.playerInteractManagerGamemode.setAccessible(true);
+ } catch (Exception e) {
+ System.err.println("[OpenInv] Unable to directly write player gamemode! SilentChest will fail.");
+ e.printStackTrace();
+ }
+ }
+
@Override
public boolean isAnySilentContainer(org.bukkit.block.Block block) {
if (block.getType() == Material.ENDER_CHEST) {
@@ -186,7 +196,6 @@ public class AnySilentContainer implements IAnySilentContainer {
ITileInventory tileInventory = (ITileInventory) tile;
Block block = world.getType(blockPosition).getBlock();
- Container container = null;
if (block instanceof BlockChest) {
for (EnumDirection localEnumDirection : EnumDirection.EnumDirectionLimit.HORIZONTAL) {
@@ -218,68 +227,68 @@ public class AnySilentContainer implements IAnySilentContainer {
} else if (blockChest.g == BlockChest.Type.TRAP) {
player.b(StatisticList.getStatistic("stat.trappedChestTriggered"));
}
-
- if (silentchest) {
- container = new SilentContainerChest(player.inventory, tileInventory, player);
- }
}
if (block instanceof BlockShulkerBox) {
player.b(StatisticList.getStatistic("stat.shulkerBoxOpened"));
-
- if (silentchest && tileInventory instanceof TileEntityShulkerBox) {
- // Set value to current + 1. Ensures consistency later when resetting.
- SilentContainerShulkerBox.setOpenValue((TileEntityShulkerBox) tileInventory,
- SilentContainerShulkerBox.getOpenValue((TileEntityShulkerBox) tileInventory) + 1);
-
- container = new SilentContainerShulkerBox(player.inventory, tileInventory, player);
- }
}
- // AnyChest only - SilentChest not active or container unsupported
- if (!silentchest || container == null) {
+ // AnyChest only - SilentChest not active, container unsupported, or unnecessary.
+ if (!silentchest || player.playerInteractManager.getGameMode() == EnumGamemode.SPECTATOR) {
player.openContainer(tileInventory);
return true;
}
- // SilentChest
+ // SilentChest requires access to setting players' gamemode directly.
+ if (this.playerInteractManagerGamemode == null) {
+ return false;
+ }
+
+ EnumGamemode gamemode = player.playerInteractManager.getGameMode();
+ this.forceGameMode(player, EnumGamemode.SPECTATOR);
+ player.openContainer(tileInventory);
+ this.forceGameMode(player, gamemode);
+ return true;
+ }
+
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {
+ if (this.playerInteractManagerGamemode == null) {
+ return;
+ }
+
+ InventoryView view = bukkitPlayer.getOpenInventory();
+ switch (view.getType()) {
+ case CHEST:
+ case ENDER_CHEST:
+ case SHULKER_BOX:
+ break;
+ default:
+ return;
+ }
+
+ EntityPlayer player = PlayerDataManager.getHandle(bukkitPlayer);
+
+ EnumGamemode gamemode = player.playerInteractManager.getGameMode();
+ this.forceGameMode(player, EnumGamemode.SPECTATOR);
+ player.activeContainer.b(player);
+ player.activeContainer = player.defaultContainer;
+ this.forceGameMode(player, gamemode);
+ }
+
+ private void forceGameMode(final EntityPlayer player, final EnumGamemode gameMode) {
+ if (this.playerInteractManagerGamemode == null) {
+ // No need to warn repeatedly, error on startup and lack of function should be enough.
+ return;
+ }
try {
- // Call InventoryOpenEvent
- container = CraftEventFactory.callInventoryOpenEvent(player, container, false);
- if (container == null) {
- return false;
+ if (!this.playerInteractManagerGamemode.isAccessible()) {
+ // Just in case, ensure accessible.
+ this.playerInteractManagerGamemode.setAccessible(true);
}
-
- // Open window
- int windowId = player.nextContainerCounter();
- player.playerConnection.sendPacket(new PacketPlayOutOpenWindow(windowId, tileInventory.getContainerName(), tileInventory.getScoreboardDisplayName(), tileInventory.getSize()));
- player.activeContainer = container;
- player.activeContainer.windowId = windowId;
- player.activeContainer.addSlotListener(player);
-
- // Special handling for shulker boxes - reset value for viewers to what it was initially.
- if (tile instanceof TileEntityShulkerBox) {
- new BukkitRunnable() {
- @Override
- public void run() {
- // TODO hacky
- Object tile = world.getTileEntity(blockPosition);
- if (!(tile instanceof TileEntityShulkerBox)) {
- return;
- }
- TileEntityShulkerBox box = (TileEntityShulkerBox) tile;
- // Reset back - we added 1, and calling TileEntityShulkerBox#startOpen adds 1 more.
- SilentContainerShulkerBox.setOpenValue(box,
- SilentContainerShulkerBox.getOpenValue((TileEntityShulkerBox) tile) - 2);
- }
- }.runTaskLater(Bukkit.getPluginManager().getPlugin("OpenInv"), 2);
- }
-
- return true;
+ this.playerInteractManagerGamemode.set(player.playerInteractManager, gameMode);
} catch (Exception e) {
e.printStackTrace();
- p.sendMessage(ChatColor.RED + "Error while sending silent container.");
- return false;
}
}
diff --git a/internal/v1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/SilentContainerChest.java b/internal/v1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/SilentContainerChest.java
deleted file mode 100644
index 65df1e6..0000000
--- a/internal/v1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/SilentContainerChest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2011-2014 lishid. All rights reserved.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 3.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-package com.lishid.openinv.internal.v1_11_R1;
-
-import net.minecraft.server.v1_11_R1.ContainerChest;
-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;
-
-public class SilentContainerChest extends ContainerChest {
-
- public SilentContainerChest(PlayerInventory playerInventory, IInventory iInventory,
- EntityHuman entityHuman) {
- super(playerInventory, iInventory, entityHuman);
- // Send close signal
- 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() != ItemStack.a) {
- ItemStack carried = playerinventory.getCarried();
- playerinventory.setCarried(ItemStack.a);
- entityHuman.drop(carried, false);
- }
- }
-
-}
diff --git a/internal/v1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/SilentContainerShulkerBox.java b/internal/v1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/SilentContainerShulkerBox.java
deleted file mode 100644
index 9fd4fbf..0000000
--- a/internal/v1_11_R1/src/main/java/com/lishid/openinv/internal/v1_11_R1/SilentContainerShulkerBox.java
+++ /dev/null
@@ -1,56 +0,0 @@
-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 fieldShulkerActionData;
-
- public SilentContainerShulkerBox(PlayerInventory playerInventory, IInventory iInventory,
- EntityHuman entityHuman) {
- super(playerInventory, iInventory, entityHuman);
- }
-
- @Override
- public void b(EntityHuman entityHuman) {
- PlayerInventory playerinventory = entityHuman.inventory;
-
- if (!playerinventory.getCarried().isEmpty()) {
- entityHuman.drop(playerinventory.getCarried(), false);
- playerinventory.setCarried(ItemStack.a);
- }
- }
-
- private static Field exposeOpenStatus() throws NoSuchFieldException, SecurityException {
- if (fieldShulkerActionData == null) {
- fieldShulkerActionData = TileEntityShulkerBox.class.getDeclaredField("h");
- fieldShulkerActionData.setAccessible(true);
- }
- return fieldShulkerActionData;
- }
-
- public static void setOpenValue(TileEntityShulkerBox tileShulkerBox, Object value) {
- try {
- exposeOpenStatus().set(tileShulkerBox, value);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public static Integer getOpenValue(TileEntityShulkerBox tileShulkerBox) {
- try {
- return (Integer) exposeOpenStatus().get(tileShulkerBox);
- } catch (Exception e) {
- e.printStackTrace();
- return 0;
- }
- }
-
-}
diff --git a/internal/v1_12_R1/pom.xml b/internal/v1_12_R1/pom.xml
index e4e237c..6d93dab 100644
--- a/internal/v1_12_R1/pom.xml
+++ b/internal/v1_12_R1/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_12_R1
@@ -21,8 +21,21 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
+
+
+
+ maven-compiler-plugin
+ 3.6.1
+
+ 1.8
+ 1.8
+
+
+
+
+
diff --git a/internal/v1_12_R1/src/main/java/com/lishid/openinv/internal/v1_12_R1/AnySilentContainer.java b/internal/v1_12_R1/src/main/java/com/lishid/openinv/internal/v1_12_R1/AnySilentContainer.java
index 904aad8..dfde6be 100644
--- a/internal/v1_12_R1/src/main/java/com/lishid/openinv/internal/v1_12_R1/AnySilentContainer.java
+++ b/internal/v1_12_R1/src/main/java/com/lishid/openinv/internal/v1_12_R1/AnySilentContainer.java
@@ -10,15 +10,15 @@
package com.lishid.openinv.internal.v1_12_R1;
+import java.lang.reflect.Field;
+
import com.lishid.openinv.internal.IAnySilentContainer;
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.Statistic;
import org.bukkit.block.BlockState;
import org.bukkit.entity.Player;
-import org.bukkit.scheduler.BukkitRunnable;
+import org.bukkit.inventory.InventoryView;
import net.minecraft.server.v1_12_R1.AxisAlignedBB;
import net.minecraft.server.v1_12_R1.Block;
@@ -26,26 +26,36 @@ import net.minecraft.server.v1_12_R1.BlockChest;
import net.minecraft.server.v1_12_R1.BlockEnderChest;
import net.minecraft.server.v1_12_R1.BlockPosition;
import net.minecraft.server.v1_12_R1.BlockShulkerBox;
-import net.minecraft.server.v1_12_R1.Container;
import net.minecraft.server.v1_12_R1.Entity;
import net.minecraft.server.v1_12_R1.EntityOcelot;
import net.minecraft.server.v1_12_R1.EntityPlayer;
import net.minecraft.server.v1_12_R1.EnumDirection;
+import net.minecraft.server.v1_12_R1.EnumGamemode;
import net.minecraft.server.v1_12_R1.IBlockData;
import net.minecraft.server.v1_12_R1.ITileInventory;
import net.minecraft.server.v1_12_R1.InventoryEnderChest;
import net.minecraft.server.v1_12_R1.InventoryLargeChest;
-import net.minecraft.server.v1_12_R1.PacketPlayOutOpenWindow;
+import net.minecraft.server.v1_12_R1.PlayerInteractManager;
import net.minecraft.server.v1_12_R1.TileEntity;
import net.minecraft.server.v1_12_R1.TileEntityChest;
import net.minecraft.server.v1_12_R1.TileEntityEnderChest;
import net.minecraft.server.v1_12_R1.TileEntityShulkerBox;
import net.minecraft.server.v1_12_R1.World;
-import org.bukkit.craftbukkit.v1_12_R1.event.CraftEventFactory;
-
public class AnySilentContainer implements IAnySilentContainer {
+ private Field playerInteractManagerGamemode;
+
+ public AnySilentContainer() {
+ try {
+ this.playerInteractManagerGamemode = PlayerInteractManager.class.getDeclaredField("gamemode");
+ this.playerInteractManagerGamemode.setAccessible(true);
+ } catch (NoSuchFieldException | SecurityException e) {
+ System.err.println("[OpenInv] Unable to directly write player gamemode! SilentChest will fail.");
+ e.printStackTrace();
+ }
+ }
+
@Override
public boolean activateContainer(final Player bukkitPlayer, final boolean silentchest,
final org.bukkit.block.Block bukkitBlock) {
@@ -82,7 +92,6 @@ public class AnySilentContainer implements IAnySilentContainer {
ITileInventory tileInventory = (ITileInventory) tile;
Block block = world.getType(blockPosition).getBlock();
- Container container = null;
if (block instanceof BlockChest) {
for (EnumDirection localEnumDirection : EnumDirection.EnumDirectionLimit.HORIZONTAL) {
@@ -115,73 +124,69 @@ public class AnySilentContainer implements IAnySilentContainer {
} else if (blockChest.g == BlockChest.Type.TRAP) {
bukkitPlayer.incrementStatistic(Statistic.TRAPPED_CHEST_TRIGGERED);
}
-
- if (silentchest) {
- container = new SilentContainerChest(player.inventory, tileInventory, player);
- }
}
if (block instanceof BlockShulkerBox) {
bukkitPlayer.incrementStatistic(Statistic.SHULKER_BOX_OPENED);
-
- if (silentchest && tileInventory instanceof TileEntityShulkerBox) {
- // Set value to current + 1. Ensures consistency later when resetting.
- SilentContainerShulkerBox.setOpenValue((TileEntityShulkerBox) tileInventory,
- SilentContainerShulkerBox.getOpenValue((TileEntityShulkerBox) tileInventory)
- + 1);
-
- container = new SilentContainerShulkerBox(player.inventory, tileInventory, player);
- }
}
- // AnyChest only - SilentChest not active or container unsupported
- if (!silentchest || container == null) {
+ // AnyChest only - SilentChest not active, container unsupported, or unnecessary.
+ if (!silentchest || player.playerInteractManager.getGameMode() == EnumGamemode.SPECTATOR) {
player.openContainer(tileInventory);
return true;
}
- // SilentChest
- try {
- // Call InventoryOpenEvent
- container = CraftEventFactory.callInventoryOpenEvent(player, container, false);
- if (container == null) {
- return false;
- }
-
- // Open window
- int windowId = player.nextContainerCounter();
- player.playerConnection.sendPacket(
- new PacketPlayOutOpenWindow(windowId, tileInventory.getContainerName(),
- tileInventory.getScoreboardDisplayName(), tileInventory.getSize()));
- player.activeContainer = container;
- player.activeContainer.windowId = windowId;
- player.activeContainer.addSlotListener(player);
-
- // Special handling for shulker boxes - reset value for viewers to what it was initially.
- if (tile instanceof TileEntityShulkerBox) {
- new BukkitRunnable() {
- @Override
- public void run() {
- // TODO hacky
- Object tile = world.getTileEntity(blockPosition);
- if (!(tile instanceof TileEntityShulkerBox)) {
- return;
- }
- TileEntityShulkerBox box = (TileEntityShulkerBox) tile;
- // Reset back - we added 1, and calling TileEntityShulkerBox#startOpen adds 1 more.
- SilentContainerShulkerBox.setOpenValue(box,
- SilentContainerShulkerBox.getOpenValue((TileEntityShulkerBox) tile)
- - 2);
- }
- }.runTaskLater(Bukkit.getPluginManager().getPlugin("OpenInv"), 2);
- }
-
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- bukkitPlayer.sendMessage(ChatColor.RED + "Error while sending silent container.");
+ // SilentChest requires access to setting players' gamemode directly.
+ if (this.playerInteractManagerGamemode == null) {
return false;
}
+
+ EnumGamemode gamemode = player.playerInteractManager.getGameMode();
+ this.forceGameMode(player, EnumGamemode.SPECTATOR);
+ player.openContainer(tileInventory);
+ this.forceGameMode(player, gamemode);
+ return true;
+ }
+
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {
+ if (this.playerInteractManagerGamemode == null) {
+ return;
+ }
+
+ InventoryView view = bukkitPlayer.getOpenInventory();
+ switch (view.getType()) {
+ case CHEST:
+ case ENDER_CHEST:
+ case SHULKER_BOX:
+ break;
+ default:
+ return;
+ }
+
+ EntityPlayer player = PlayerDataManager.getHandle(bukkitPlayer);
+
+ EnumGamemode gamemode = player.playerInteractManager.getGameMode();
+ this.forceGameMode(player, EnumGamemode.SPECTATOR);
+ player.activeContainer.b(player);
+ player.activeContainer = player.defaultContainer;
+ this.forceGameMode(player, gamemode);
+ }
+
+ private void forceGameMode(final EntityPlayer player, final EnumGamemode gameMode) {
+ if (this.playerInteractManagerGamemode == null) {
+ // No need to warn repeatedly, error on startup and lack of function should be enough.
+ return;
+ }
+ try {
+ if (!this.playerInteractManagerGamemode.isAccessible()) {
+ // Just in case, ensure accessible.
+ this.playerInteractManagerGamemode.setAccessible(true);
+ }
+ this.playerInteractManagerGamemode.set(player.playerInteractManager, gameMode);
+ } catch (IllegalArgumentException | IllegalAccessException e) {
+ e.printStackTrace();
+ }
}
private boolean hasOcelotOnTop(final World world, final BlockPosition blockPosition) {
diff --git a/internal/v1_12_R1/src/main/java/com/lishid/openinv/internal/v1_12_R1/SilentContainerChest.java b/internal/v1_12_R1/src/main/java/com/lishid/openinv/internal/v1_12_R1/SilentContainerChest.java
deleted file mode 100644
index 09a4424..0000000
--- a/internal/v1_12_R1/src/main/java/com/lishid/openinv/internal/v1_12_R1/SilentContainerChest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2011-2014 lishid. All rights reserved. This program is free software: you can
- * redistribute it and/or modify it under the terms of the GNU General Public License as published
- * by the Free Software Foundation, version 3. This program is distributed in the hope that it will
- * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should
- * have received a copy of the GNU General Public License along with this program. If not, see
- * .
- */
-
-package com.lishid.openinv.internal.v1_12_R1;
-
-import net.minecraft.server.v1_12_R1.ContainerChest;
-import net.minecraft.server.v1_12_R1.EntityHuman;
-import net.minecraft.server.v1_12_R1.IInventory;
-import net.minecraft.server.v1_12_R1.ItemStack;
-import net.minecraft.server.v1_12_R1.PlayerInventory;
-
-public class SilentContainerChest extends ContainerChest {
-
- public SilentContainerChest(final PlayerInventory playerInventory, final IInventory iInventory,
- final EntityHuman entityHuman) {
- super(playerInventory, iInventory, entityHuman);
- // Send close signal
- iInventory.closeContainer(entityHuman);
- }
-
- @Override
- public void b(final EntityHuman entityHuman) {
- // Don't send close signal twice, might screw up
- PlayerInventory playerinventory = entityHuman.inventory;
-
- if (playerinventory.getCarried() != ItemStack.a) {
- ItemStack carried = playerinventory.getCarried();
- playerinventory.setCarried(ItemStack.a);
- entityHuman.drop(carried, false);
- }
- }
-
-}
diff --git a/internal/v1_12_R1/src/main/java/com/lishid/openinv/internal/v1_12_R1/SilentContainerShulkerBox.java b/internal/v1_12_R1/src/main/java/com/lishid/openinv/internal/v1_12_R1/SilentContainerShulkerBox.java
deleted file mode 100644
index bc94298..0000000
--- a/internal/v1_12_R1/src/main/java/com/lishid/openinv/internal/v1_12_R1/SilentContainerShulkerBox.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.lishid.openinv.internal.v1_12_R1;
-
-import java.lang.reflect.Field;
-
-import net.minecraft.server.v1_12_R1.ContainerShulkerBox;
-import net.minecraft.server.v1_12_R1.EntityHuman;
-import net.minecraft.server.v1_12_R1.IInventory;
-import net.minecraft.server.v1_12_R1.ItemStack;
-import net.minecraft.server.v1_12_R1.PlayerInventory;
-import net.minecraft.server.v1_12_R1.TileEntityShulkerBox;
-
-public class SilentContainerShulkerBox extends ContainerShulkerBox {
-
- private static Field fieldShulkerActionData;
-
- private static Field exposeOpenStatus() throws NoSuchFieldException, SecurityException {
- if (SilentContainerShulkerBox.fieldShulkerActionData == null) {
- SilentContainerShulkerBox.fieldShulkerActionData = TileEntityShulkerBox.class
- .getDeclaredField("h");
- SilentContainerShulkerBox.fieldShulkerActionData.setAccessible(true);
- }
- return SilentContainerShulkerBox.fieldShulkerActionData;
- }
-
- public static Integer getOpenValue(final TileEntityShulkerBox tileShulkerBox) {
- try {
- return (Integer) SilentContainerShulkerBox.exposeOpenStatus().get(tileShulkerBox);
- } catch (Exception e) {
- e.printStackTrace();
- return 0;
- }
- }
-
- public static void setOpenValue(final TileEntityShulkerBox tileShulkerBox, final Object value) {
- try {
- SilentContainerShulkerBox.exposeOpenStatus().set(tileShulkerBox, value);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- public SilentContainerShulkerBox(final PlayerInventory playerInventory,
- final IInventory iInventory, final EntityHuman entityHuman) {
- super(playerInventory, iInventory, entityHuman);
- }
-
- @Override
- public void b(final EntityHuman entityHuman) {
- PlayerInventory playerinventory = entityHuman.inventory;
-
- if (!playerinventory.getCarried().isEmpty()) {
- entityHuman.drop(playerinventory.getCarried(), false);
- playerinventory.setCarried(ItemStack.a);
- }
- }
-
-}
diff --git a/internal/v1_4_R1/pom.xml b/internal/v1_4_R1/pom.xml
index 4a41bc1..c7b6c5a 100644
--- a/internal/v1_4_R1/pom.xml
+++ b/internal/v1_4_R1/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_4_R1
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_4_R1/src/main/java/com/lishid/openinv/internal/v1_4_R1/AnySilentContainer.java b/internal/v1_4_R1/src/main/java/com/lishid/openinv/internal/v1_4_R1/AnySilentContainer.java
index 3ef4bae..8bdcbd3 100644
--- a/internal/v1_4_R1/src/main/java/com/lishid/openinv/internal/v1_4_R1/AnySilentContainer.java
+++ b/internal/v1_4_R1/src/main/java/com/lishid/openinv/internal/v1_4_R1/AnySilentContainer.java
@@ -165,4 +165,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_5_R2/pom.xml b/internal/v1_5_R2/pom.xml
index cc08ed4..ce49cf5 100644
--- a/internal/v1_5_R2/pom.xml
+++ b/internal/v1_5_R2/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_5_R2
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_5_R2/src/main/java/com/lishid/openinv/internal/v1_5_R2/AnySilentContainer.java b/internal/v1_5_R2/src/main/java/com/lishid/openinv/internal/v1_5_R2/AnySilentContainer.java
index 76f2cb9..b2f3c43 100644
--- a/internal/v1_5_R2/src/main/java/com/lishid/openinv/internal/v1_5_R2/AnySilentContainer.java
+++ b/internal/v1_5_R2/src/main/java/com/lishid/openinv/internal/v1_5_R2/AnySilentContainer.java
@@ -165,4 +165,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_5_R3/pom.xml b/internal/v1_5_R3/pom.xml
index d62a25a..02c453d 100644
--- a/internal/v1_5_R3/pom.xml
+++ b/internal/v1_5_R3/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_5_R3
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_5_R3/src/main/java/com/lishid/openinv/internal/v1_5_R3/AnySilentContainer.java b/internal/v1_5_R3/src/main/java/com/lishid/openinv/internal/v1_5_R3/AnySilentContainer.java
index f5393a6..02dc321 100644
--- a/internal/v1_5_R3/src/main/java/com/lishid/openinv/internal/v1_5_R3/AnySilentContainer.java
+++ b/internal/v1_5_R3/src/main/java/com/lishid/openinv/internal/v1_5_R3/AnySilentContainer.java
@@ -165,4 +165,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_6_R1/pom.xml b/internal/v1_6_R1/pom.xml
index 9518816..31c62ed 100644
--- a/internal/v1_6_R1/pom.xml
+++ b/internal/v1_6_R1/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_6_R1
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_6_R1/src/main/java/com/lishid/openinv/internal/v1_6_R1/AnySilentContainer.java b/internal/v1_6_R1/src/main/java/com/lishid/openinv/internal/v1_6_R1/AnySilentContainer.java
index fb5a306..660fefd 100644
--- a/internal/v1_6_R1/src/main/java/com/lishid/openinv/internal/v1_6_R1/AnySilentContainer.java
+++ b/internal/v1_6_R1/src/main/java/com/lishid/openinv/internal/v1_6_R1/AnySilentContainer.java
@@ -165,4 +165,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_6_R2/pom.xml b/internal/v1_6_R2/pom.xml
index 71331a7..1909fed 100644
--- a/internal/v1_6_R2/pom.xml
+++ b/internal/v1_6_R2/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_6_R2
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_6_R2/src/main/java/com/lishid/openinv/internal/v1_6_R2/AnySilentContainer.java b/internal/v1_6_R2/src/main/java/com/lishid/openinv/internal/v1_6_R2/AnySilentContainer.java
index 1b20b29..bd40860 100644
--- a/internal/v1_6_R2/src/main/java/com/lishid/openinv/internal/v1_6_R2/AnySilentContainer.java
+++ b/internal/v1_6_R2/src/main/java/com/lishid/openinv/internal/v1_6_R2/AnySilentContainer.java
@@ -165,4 +165,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_6_R3/pom.xml b/internal/v1_6_R3/pom.xml
index e3e8d24..6c1445f 100644
--- a/internal/v1_6_R3/pom.xml
+++ b/internal/v1_6_R3/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_6_R3
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_6_R3/src/main/java/com/lishid/openinv/internal/v1_6_R3/AnySilentContainer.java b/internal/v1_6_R3/src/main/java/com/lishid/openinv/internal/v1_6_R3/AnySilentContainer.java
index a7dec1d..d61e09c 100644
--- a/internal/v1_6_R3/src/main/java/com/lishid/openinv/internal/v1_6_R3/AnySilentContainer.java
+++ b/internal/v1_6_R3/src/main/java/com/lishid/openinv/internal/v1_6_R3/AnySilentContainer.java
@@ -165,4 +165,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_7_R1/pom.xml b/internal/v1_7_R1/pom.xml
index 504f7a9..558472d 100644
--- a/internal/v1_7_R1/pom.xml
+++ b/internal/v1_7_R1/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_7_R1
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_7_R1/src/main/java/com/lishid/openinv/internal/v1_7_R1/AnySilentContainer.java b/internal/v1_7_R1/src/main/java/com/lishid/openinv/internal/v1_7_R1/AnySilentContainer.java
index 2e71862..f400239 100644
--- a/internal/v1_7_R1/src/main/java/com/lishid/openinv/internal/v1_7_R1/AnySilentContainer.java
+++ b/internal/v1_7_R1/src/main/java/com/lishid/openinv/internal/v1_7_R1/AnySilentContainer.java
@@ -166,4 +166,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_7_R2/pom.xml b/internal/v1_7_R2/pom.xml
index 3dc0519..14419bd 100644
--- a/internal/v1_7_R2/pom.xml
+++ b/internal/v1_7_R2/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_7_R2
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_7_R2/src/main/java/com/lishid/openinv/internal/v1_7_R2/AnySilentContainer.java b/internal/v1_7_R2/src/main/java/com/lishid/openinv/internal/v1_7_R2/AnySilentContainer.java
index 2252593..d2f541c 100644
--- a/internal/v1_7_R2/src/main/java/com/lishid/openinv/internal/v1_7_R2/AnySilentContainer.java
+++ b/internal/v1_7_R2/src/main/java/com/lishid/openinv/internal/v1_7_R2/AnySilentContainer.java
@@ -166,4 +166,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_7_R3/pom.xml b/internal/v1_7_R3/pom.xml
index 847c265..e9eb8b3 100644
--- a/internal/v1_7_R3/pom.xml
+++ b/internal/v1_7_R3/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_7_R3
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_7_R3/src/main/java/com/lishid/openinv/internal/v1_7_R3/AnySilentContainer.java b/internal/v1_7_R3/src/main/java/com/lishid/openinv/internal/v1_7_R3/AnySilentContainer.java
index da958e5..1675080 100644
--- a/internal/v1_7_R3/src/main/java/com/lishid/openinv/internal/v1_7_R3/AnySilentContainer.java
+++ b/internal/v1_7_R3/src/main/java/com/lishid/openinv/internal/v1_7_R3/AnySilentContainer.java
@@ -166,4 +166,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_7_R4/pom.xml b/internal/v1_7_R4/pom.xml
index 04446c7..871b352 100644
--- a/internal/v1_7_R4/pom.xml
+++ b/internal/v1_7_R4/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_7_R4
@@ -27,7 +27,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_7_R4/src/main/java/com/lishid/openinv/internal/v1_7_R4/AnySilentContainer.java b/internal/v1_7_R4/src/main/java/com/lishid/openinv/internal/v1_7_R4/AnySilentContainer.java
index c56b6b9..6323e5d 100644
--- a/internal/v1_7_R4/src/main/java/com/lishid/openinv/internal/v1_7_R4/AnySilentContainer.java
+++ b/internal/v1_7_R4/src/main/java/com/lishid/openinv/internal/v1_7_R4/AnySilentContainer.java
@@ -166,4 +166,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_8_R1/pom.xml b/internal/v1_8_R1/pom.xml
index 0d7b775..f05f553 100644
--- a/internal/v1_8_R1/pom.xml
+++ b/internal/v1_8_R1/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_8_R1
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_8_R1/src/main/java/com/lishid/openinv/internal/v1_8_R1/AnySilentContainer.java b/internal/v1_8_R1/src/main/java/com/lishid/openinv/internal/v1_8_R1/AnySilentContainer.java
index 17b195b..b5cb77a 100644
--- a/internal/v1_8_R1/src/main/java/com/lishid/openinv/internal/v1_8_R1/AnySilentContainer.java
+++ b/internal/v1_8_R1/src/main/java/com/lishid/openinv/internal/v1_8_R1/AnySilentContainer.java
@@ -210,4 +210,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_8_R2/pom.xml b/internal/v1_8_R2/pom.xml
index 26e4815..0b8ef6d 100644
--- a/internal/v1_8_R2/pom.xml
+++ b/internal/v1_8_R2/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_8_R2
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_8_R2/src/main/java/com/lishid/openinv/internal/v1_8_R2/AnySilentContainer.java b/internal/v1_8_R2/src/main/java/com/lishid/openinv/internal/v1_8_R2/AnySilentContainer.java
index 83680c8..773f1f9 100644
--- a/internal/v1_8_R2/src/main/java/com/lishid/openinv/internal/v1_8_R2/AnySilentContainer.java
+++ b/internal/v1_8_R2/src/main/java/com/lishid/openinv/internal/v1_8_R2/AnySilentContainer.java
@@ -211,4 +211,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_8_R3/pom.xml b/internal/v1_8_R3/pom.xml
index f80f372..8121fac 100644
--- a/internal/v1_8_R3/pom.xml
+++ b/internal/v1_8_R3/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_8_R3
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_8_R3/src/main/java/com/lishid/openinv/internal/v1_8_R3/AnySilentContainer.java b/internal/v1_8_R3/src/main/java/com/lishid/openinv/internal/v1_8_R3/AnySilentContainer.java
index fea742a..3789042 100644
--- a/internal/v1_8_R3/src/main/java/com/lishid/openinv/internal/v1_8_R3/AnySilentContainer.java
+++ b/internal/v1_8_R3/src/main/java/com/lishid/openinv/internal/v1_8_R3/AnySilentContainer.java
@@ -211,4 +211,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_9_R1/pom.xml b/internal/v1_9_R1/pom.xml
index 39a84da..f01f6a5 100644
--- a/internal/v1_9_R1/pom.xml
+++ b/internal/v1_9_R1/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_9_R1
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_9_R1/src/main/java/com/lishid/openinv/internal/v1_9_R1/AnySilentContainer.java b/internal/v1_9_R1/src/main/java/com/lishid/openinv/internal/v1_9_R1/AnySilentContainer.java
index 08933fd..e4e26c8 100644
--- a/internal/v1_9_R1/src/main/java/com/lishid/openinv/internal/v1_9_R1/AnySilentContainer.java
+++ b/internal/v1_9_R1/src/main/java/com/lishid/openinv/internal/v1_9_R1/AnySilentContainer.java
@@ -211,4 +211,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/internal/v1_9_R2/pom.xml b/internal/v1_9_R2/pom.xml
index c70697e..e66a721 100644
--- a/internal/v1_9_R2/pom.xml
+++ b/internal/v1_9_R2/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvinternal
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvadapter1_9_R2
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/internal/v1_9_R2/src/main/java/com/lishid/openinv/internal/v1_9_R2/AnySilentContainer.java b/internal/v1_9_R2/src/main/java/com/lishid/openinv/internal/v1_9_R2/AnySilentContainer.java
index 539c45d..430f179 100644
--- a/internal/v1_9_R2/src/main/java/com/lishid/openinv/internal/v1_9_R2/AnySilentContainer.java
+++ b/internal/v1_9_R2/src/main/java/com/lishid/openinv/internal/v1_9_R2/AnySilentContainer.java
@@ -211,4 +211,7 @@ public class AnySilentContainer implements IAnySilentContainer {
}
}
+ @Override
+ public void deactivateContainer(final Player bukkitPlayer) {}
+
}
diff --git a/plugin/plugin-core/pom.xml b/plugin/plugin-core/pom.xml
index 4cf014b..ec55518 100644
--- a/plugin/plugin-core/pom.xml
+++ b/plugin/plugin-core/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvplugin
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvplugincore
@@ -22,12 +22,12 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
com.lishid
openinvpluginv1_10_r1
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/plugin/plugin-core/src/main/java/com/lishid/openinv/OpenInv.java b/plugin/plugin-core/src/main/java/com/lishid/openinv/OpenInv.java
index b9bfc02..723e7a6 100644
--- a/plugin/plugin-core/src/main/java/com/lishid/openinv/OpenInv.java
+++ b/plugin/plugin-core/src/main/java/com/lishid/openinv/OpenInv.java
@@ -41,6 +41,7 @@ import com.lishid.openinv.internal.IInventoryAccess;
import com.lishid.openinv.internal.ISpecialEnderChest;
import com.lishid.openinv.internal.ISpecialPlayerInventory;
import com.lishid.openinv.listeners.InventoryClickListener;
+import com.lishid.openinv.listeners.InventoryCloseListener;
import com.lishid.openinv.listeners.InventoryDragListener;
import com.lishid.openinv.listeners.PlayerListener;
import com.lishid.openinv.listeners.PluginListener;
@@ -504,6 +505,7 @@ public class OpenInv extends JavaPlugin implements IOpenInv {
pm.registerEvents(new PlayerListener(this), this);
pm.registerEvents(new PluginListener(this), this);
pm.registerEvents(new InventoryClickListener(this), this);
+ pm.registerEvents(new InventoryCloseListener(this), this);
// Bukkit will handle missing events for us, attempt to register InventoryDragEvent without a version check
pm.registerEvents(new InventoryDragListener(this), this);
diff --git a/plugin/plugin-core/src/main/java/com/lishid/openinv/listeners/InventoryCloseListener.java b/plugin/plugin-core/src/main/java/com/lishid/openinv/listeners/InventoryCloseListener.java
new file mode 100644
index 0000000..73fe3eb
--- /dev/null
+++ b/plugin/plugin-core/src/main/java/com/lishid/openinv/listeners/InventoryCloseListener.java
@@ -0,0 +1,36 @@
+package com.lishid.openinv.listeners;
+
+import com.lishid.openinv.IOpenInv;
+
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.inventory.InventoryCloseEvent;
+
+/**
+ *
+ *
+ * @author Jikoo
+ */
+public class InventoryCloseListener implements Listener {
+
+ private final IOpenInv plugin;
+
+ public InventoryCloseListener(final IOpenInv plugin) {
+ this.plugin = plugin;
+ }
+
+ @EventHandler
+ public void onInventoryClose(final InventoryCloseEvent event) {
+ if (!(event.getPlayer() instanceof Player)) {
+ return;
+ }
+
+ Player player = (Player) event.getPlayer();
+
+ if (this.plugin.getPlayerSilentChestStatus(player)) {
+ this.plugin.getAnySilentContainer().deactivateContainer(player);
+ }
+ }
+
+}
diff --git a/plugin/plugin-v1_10_R1/pom.xml b/plugin/plugin-v1_10_R1/pom.xml
index 303348f..101c689 100644
--- a/plugin/plugin-v1_10_R1/pom.xml
+++ b/plugin/plugin-v1_10_R1/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvplugin
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvpluginv1_10_r1
@@ -21,7 +21,7 @@
com.lishid
openinvcommon
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
diff --git a/plugin/pom.xml b/plugin/pom.xml
index 5453c2a..37b8479 100644
--- a/plugin/pom.xml
+++ b/plugin/pom.xml
@@ -5,7 +5,7 @@
com.lishid
openinvparent
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
openinvplugin
diff --git a/pom.xml b/pom.xml
index b63ebfe..2372e38 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
openinvparent
OpenInvParent
http://dev.bukkit.org/bukkit-plugins/openinv/
- 3.2.2-SNAPSHOT
+ 3.3.0-SNAPSHOT
pom