From e22a50e1cf466e970da93d58be269663a02ae216 Mon Sep 17 00:00:00 2001 From: Phoenix616 Date: Sat, 16 May 2020 22:33:40 +0100 Subject: [PATCH] Only close our own inventories on teleport (Fixes #312) --- .../Listeners/Player/PlayerTeleport.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/Acrobot/ChestShop/Listeners/Player/PlayerTeleport.java b/src/main/java/com/Acrobot/ChestShop/Listeners/Player/PlayerTeleport.java index be364a8..a9012db 100644 --- a/src/main/java/com/Acrobot/ChestShop/Listeners/Player/PlayerTeleport.java +++ b/src/main/java/com/Acrobot/ChestShop/Listeners/Player/PlayerTeleport.java @@ -1,9 +1,13 @@ package com.Acrobot.ChestShop.Listeners.Player; +import com.Acrobot.ChestShop.Signs.ChestShopSign; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.DoubleChest; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.player.PlayerTeleportEvent; +import org.bukkit.inventory.InventoryHolder; /** * A fix for a CraftBukkit bug. @@ -14,11 +18,19 @@ public class PlayerTeleport implements Listener { @EventHandler public static void onPlayerTeleport(PlayerTeleportEvent event) { - if (event.getPlayer() == null || event.getPlayer().getOpenInventory() == null) { + InventoryHolder holder = event.getPlayer().getOpenInventory().getTopInventory().getHolder(); + if (!(holder instanceof BlockState)) { return; } - if (event.getPlayer().getOpenInventory().getType() != InventoryType.CRAFTING) { + Block container; + if (holder instanceof DoubleChest) { + container = ((DoubleChest) holder).getLocation().getBlock(); + } else { + container = ((BlockState) holder).getBlock(); + } + + if (ChestShopSign.isShopBlock(container)) { event.getPlayer().closeInventory(); } }