package com.nisovin.magicspells.util; import java.util.HashMap; import java.util.Map; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerRespawnEvent; import org.bukkit.event.player.PlayerTeleportEvent; import com.nisovin.magicspells.MagicSpells; public class BossBarManager_V1_8 implements BossBarManager, Listener { Map<String, String> bossBarTitles = new HashMap<String, String>(); Map<String, Double> bossBarValues = new HashMap<String, Double>(); public BossBarManager_V1_8() { MagicSpells.registerEvents(this); MagicSpells.scheduleRepeatingTask(new Runnable() { public void run() { for (String name : bossBarTitles.keySet()) { Player player = Bukkit.getPlayerExact(name); if (player != null) { updateBar(player, null, 0); } } } }, 8, 8); } public void setPlayerBar(Player player, String title, double percent) { boolean alreadyShowing = bossBarTitles.containsKey(player.getName()); bossBarTitles.put(player.getName(), title); bossBarValues.put(player.getName(), percent); if (alreadyShowing) { updateBar(player, title, percent); } else { showBar(player); } } public void removePlayerBar(Player player) { if (bossBarTitles.remove(player.getName()) != null) { bossBarValues.remove(player.getName()); MagicSpells.getVolatileCodeHandler().removeBossBar(player); } } private void showBar(Player player) { try { if (player != null && player.isValid()) { MagicSpells.getVolatileCodeHandler().setBossBar(player, bossBarTitles.get(player.getName()), bossBarValues.get(player.getName())); } } catch (Exception e) { System.out.println("BOSS BAR EXCEPTION: " + e.getMessage()); } } private void updateBar(Player player, String title, double val) { MagicSpells.getVolatileCodeHandler().updateBossBar(player, title, val); } @EventHandler public void onRespawn(final PlayerRespawnEvent event) { if (bossBarTitles.containsKey(event.getPlayer().getName())) { MagicSpells.scheduleDelayedTask(new Runnable() { public void run() { showBar(event.getPlayer()); } }, 10); } } @EventHandler public void onTeleport(final PlayerTeleportEvent event) { if (bossBarTitles.containsKey(event.getPlayer().getName())) { MagicSpells.scheduleDelayedTask(new Runnable() { public void run() { showBar(event.getPlayer()); } }, 10); } } @EventHandler public void onQuit(PlayerQuitEvent event) { bossBarTitles.remove(event.getPlayer().getName()); bossBarValues.remove(event.getPlayer().getName()); } public void turnOff() { for (Player player : Bukkit.getOnlinePlayers()) { if (bossBarTitles.containsKey(player.getName())) { MagicSpells.getVolatileCodeHandler().removeBossBar(player); } } bossBarTitles.clear(); bossBarValues.clear(); } }