From c0415a1e271c89332bb6d358532347dc057cb0cb Mon Sep 17 00:00:00 2001 From: Eric Date: Sat, 17 Jun 2017 13:38:07 +0200 Subject: [PATCH] Respawn shop item after teleport Sometimes it disappeared after teleporting, because the chunk has not been loaded yet. Now, after 15 ticks, the shop item will be respawned after a teleport. --- .../listeners/ShopUpdateListener.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/epiceric/shopchest/listeners/ShopUpdateListener.java b/src/main/java/de/epiceric/shopchest/listeners/ShopUpdateListener.java index de32403..224269b 100644 --- a/src/main/java/de/epiceric/shopchest/listeners/ShopUpdateListener.java +++ b/src/main/java/de/epiceric/shopchest/listeners/ShopUpdateListener.java @@ -11,6 +11,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerRespawnEvent; +import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.scheduler.BukkitRunnable; @@ -22,6 +23,18 @@ public class ShopUpdateListener implements Listener { this.plugin = plugin; } + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) + public void onPlayerTeleport(final PlayerTeleportEvent e) { + // Wait till the chunk should have loaded on the client + new BukkitRunnable() { + @Override + public void run() { + hideShops(e.getPlayer(), true); + plugin.getShopUtils().updateShops(e.getPlayer(), true); + } + }.runTaskLater(plugin, 15L); + } + @EventHandler(priority = EventPriority.MONITOR) public void onPlayerJoin(PlayerJoinEvent e) { restartShopUpdater(e.getPlayer()); @@ -75,8 +88,15 @@ public class ShopUpdateListener implements Listener { plugin.getUpdater().start(); } + hideShops(p, false); + } + + private void hideShops(Player p, boolean onlyItem) { for (Shop shop : plugin.getShopUtils().getShops()) { - if (shop.getHologram() != null) shop.getHologram().hidePlayer(p); + if (!onlyItem) { + if (shop.getHologram() != null) shop.getHologram().hidePlayer(p); + } + if (shop.getItem() != null) shop.getItem().setVisible(p, false); } }