I have an InventoryOpenEvent listener:
public class OpenEnderChestListener implements Listener {
private final MagicBagPlugin plugin;
public OpenEnderChestListener(MagicBagPlugin plugin) { this.plugin = plugin; }
// deserialize inventory, put in activeenderchests hashmap then open inventory
@EventHandler
public void openEnderChest(InventoryOpenEvent event) {
Bukkit.broadcastMessage("openEnderChest");
if (!event.getInventory().getType().equals(InventoryType.ENDER_CHEST))
return;
TileState tileState = (TileState) event.getInventory().getLocation().getBlock().getState();
if (!tileState.getPersistentDataContainer().has(plugin.getKey(), PersistentDataType.STRING))
return;
Block enderChestBlock = event.getInventory().getLocation().getBlock();
Inventory enderChestInventory = plugin.getEnderChestInventory(enderChestBlock);
Bukkit.broadcastMessage("before opening inventory: " + enderChestInventory.getViewers().toString());
if (enderChestInventory == null)
return;
plugin.makeEnderChestActive(enderChestBlock, enderChestInventory);
// this fires openInventoryEvent before this one has finished
event.getPlayer().openInventory(enderChestInventory);
Bukkit.broadcastMessage("after opening inventory: " + enderChestInventory.getViewers().toString());
event.setCancelled(true);
Bukkit.broadcastMessage("after cancelling event: " + enderChestInventory.getViewers().toString());
}
}