Fix shop visibility after respawn or world change

This commit is contained in:
Eric 2017-04-10 14:35:14 +02:00
parent e969aa35da
commit 35028f2cab

View File

@ -9,7 +9,10 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.scheduler.BukkitRunnable;
public class ShopUpdateListener implements Listener { public class ShopUpdateListener implements Listener {
@ -28,14 +31,43 @@ public class ShopUpdateListener implements Listener {
@EventHandler(priority = EventPriority.MONITOR) @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent e) { public void onPlayerJoin(PlayerJoinEvent e) {
restartShopUpdater(e.getPlayer());
}
// The Bukkit::getOnlinePlayers() list does not include players that
// are currently respawning or chaning worlds, so when only one player is
// online and is currently respawning, the updater will think that no player
// is online, so it will stop. To prevent that, a delay of 1 tick is needed.
@EventHandler
public void onPlayerChangedWorld(final PlayerChangedWorldEvent e) {
new BukkitRunnable() {
@Override
public void run() {
restartShopUpdater(e.getPlayer());
}
}.runTaskLater(plugin, 1L);
}
@EventHandler
public void onPlayerRespawn(final PlayerRespawnEvent e) {
new BukkitRunnable() {
@Override
public void run() {
restartShopUpdater(e.getPlayer());
}
}.runTaskLater(plugin, 1L);
}
private void restartShopUpdater(Player p) {
if (!plugin.getUpdater().isRunning()) { if (!plugin.getUpdater().isRunning()) {
plugin.setUpdater(new ShopUpdater(plugin)); plugin.setUpdater(new ShopUpdater(plugin));
plugin.getUpdater().start(); plugin.getUpdater().start();
} }
for (Shop shop : plugin.getShopUtils().getShops()) { for (Shop shop : plugin.getShopUtils().getShops()) {
if (shop.getHologram() != null) shop.getHologram().hidePlayer(e.getPlayer()); if (shop.getHologram() != null) shop.getHologram().hidePlayer(p);
if (shop.getItem() != null) shop.getItem().setVisible(e.getPlayer(), false); if (shop.getItem() != null) shop.getItem().setVisible(p, false);
} }
} }