ShopChest/src/main/java/de/epiceric/shopchest/listeners/ShopUpdateListener.java

75 lines
2.4 KiB
Java
Raw Normal View History

package de.epiceric.shopchest.listeners;
import de.epiceric.shopchest.ShopChest;
import de.epiceric.shopchest.event.ShopUpdateEvent;
import de.epiceric.shopchest.shop.Shop;
import de.epiceric.shopchest.utils.ShopUpdater;
import org.bukkit.Bukkit;
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 {
private ShopChest plugin;
public ShopUpdateListener(ShopChest plugin) {
this.plugin = plugin;
}
@EventHandler
public void onShopUpdate(ShopUpdateEvent e) {
for (Player p : Bukkit.getOnlinePlayers()) {
2017-03-17 14:04:05 +01:00
plugin.getShopUtils().updateShops(p);
}
}
@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(p);
if (shop.getItem() != null) shop.getItem().setVisible(p, false);
}
}
}