mirror of
https://github.com/amalthea-mc/ShopChest.git
synced 2024-11-08 19:51:05 +00:00
Fix shop visibility after respawn or world change
This commit is contained in:
parent
e969aa35da
commit
35028f2cab
@ -9,7 +9,10 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
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.scheduler.BukkitRunnable;
|
||||
|
||||
public class ShopUpdateListener implements Listener {
|
||||
|
||||
@ -28,14 +31,43 @@ public class ShopUpdateListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
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()) {
|
||||
plugin.setUpdater(new ShopUpdater(plugin));
|
||||
plugin.getUpdater().start();
|
||||
}
|
||||
|
||||
for (Shop shop : plugin.getShopUtils().getShops()) {
|
||||
if (shop.getHologram() != null) shop.getHologram().hidePlayer(e.getPlayer());
|
||||
if (shop.getItem() != null) shop.getItem().setVisible(e.getPlayer(), false);
|
||||
if (shop.getHologram() != null) shop.getHologram().hidePlayer(p);
|
||||
if (shop.getItem() != null) shop.getItem().setVisible(p, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user