/* * This file is part of HoloAPI. * * HoloAPI is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * HoloAPI is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HoloAPI. If not, see <http://www.gnu.org/licenses/>. */ package com.dsh105.holoapi.listeners; import com.dsh105.holoapi.HoloAPI; import com.dsh105.holoapi.api.AnimatedHologram; import com.dsh105.holoapi.api.Hologram; import com.dsh105.holoapi.api.events.HoloLineUpdateEvent; import com.dsh105.holoapi.config.Settings; import org.bukkit.entity.Entity; 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.PlayerQuitEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.world.ChunkLoadEvent; import org.bukkit.event.world.ChunkUnloadEvent; import org.bukkit.scheduler.BukkitRunnable; public class HoloListener implements Listener { @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onHoloLineUpdate(HoloLineUpdateEvent event) { if (HoloAPI.getHoloUpdater().getTrackedHolograms().contains(event.getHologram())) { if (!HoloAPI.getHoloUpdater().shouldTrack(event.getNewLineContent())) { HoloAPI.getHoloUpdater().track(event.getHologram(), false); } } else { HoloAPI.getHoloUpdater().track(event.getHologram()); } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerTeleport(PlayerTeleportEvent event) { Player player = event.getPlayer(); for (Hologram h : HoloAPI.getManager().getAllHolograms().keySet()) { if (event.getTo().getWorld().getName().equals(h.getWorldName())) { if (h.getLocationFor(player) != null && h.getVisibility().isVisibleTo(player, h.getSaveId())) { h.show(player, true); } } } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerQuit(PlayerQuitEvent event) { Player player = event.getPlayer(); for (Hologram h : HoloAPI.getManager().getAllHolograms().keySet()) { if (h.getLocationFor(player) != null) { h.clear(player); } } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onPlayerJoin(PlayerJoinEvent event) { final Player player = event.getPlayer(); for (final Hologram h : HoloAPI.getManager().getAllHolograms().keySet()) { if (player.getLocation().getWorld().getName().equals(h.getWorldName()) && h.getVisibility().isVisibleTo(player, h.getSaveId())) { new BukkitRunnable() { @Override public void run() { if (h instanceof AnimatedHologram && !((AnimatedHologram) h).isAnimating()) { ((AnimatedHologram) h).animate(); } h.show(player, true); } }.runTaskLater(HoloAPI.getCore(), 40L); } } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onWorldChange(PlayerChangedWorldEvent event) { final Player player = event.getPlayer(); for (final Hologram h : HoloAPI.getManager().getAllHolograms().keySet()) { if (player.getLocation().getWorld().getName().equals(h.getWorldName()) && h.getVisibility().isVisibleTo(player, h.getSaveId())) { if (h instanceof AnimatedHologram && !((AnimatedHologram) h).isAnimating()) { ((AnimatedHologram) h).animate(); } h.show(player, true); } else if (event.getFrom().getName().equals(h.getWorldName()) && h.getLocationFor(player) != null) { new BukkitRunnable() { @Override public void run() { h.clear(player); } }.runTaskLater(HoloAPI.getCore(), 20L); } } } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onChunkLoad(ChunkLoadEvent event) { for (Hologram h : HoloAPI.getManager().getAllHolograms().keySet()) { if (h.getDefaultLocation().getChunk().equals(event.getChunk())) { for (Entity e : h.getDefaultLocation().getWorld().getEntities()) { if (e instanceof Player) { if (h.getVisibility().isVisibleTo((Player) e, h.getSaveId())) { h.show((Player) e, true); } } } } } } }