@Override public void onDisable() { /* Reset registered listeners */ bep.cleanup(); /* Disable core */ core.disableCore(); if (sscache != null) { sscache.cleanup(); sscache = null; } }
private void registerPlayerLoginListener() { PlayerListener pl = new PlayerListener() { public void onPlayerJoin(PlayerJoinEvent evt) { DynmapPlayer dp = new BukkitPlayer(evt.getPlayer()); core.listenerManager.processPlayerEvent(EventType.PLAYER_JOIN, dp); } public void onPlayerQuit(PlayerQuitEvent evt) { DynmapPlayer dp = new BukkitPlayer(evt.getPlayer()); core.listenerManager.processPlayerEvent(EventType.PLAYER_QUIT, dp); } }; bep.registerEvent(Type.PLAYER_JOIN, pl); bep.registerEvent(Type.PLAYER_QUIT, pl); }
private void registerEvents() { BlockListener blockTrigger = new BlockListener() { @Override public void onBlockPlace(BlockPlaceEvent event) { if (event.isCancelled()) return; Location loc = event.getBlock().getLocation(); String wn = loc.getWorld().getName(); sscache.invalidateSnapshot(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); if (onplace) { mapManager.touch(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "blockplace"); } } @Override public void onBlockBreak(BlockBreakEvent event) { if (event.isCancelled()) return; Location loc = event.getBlock().getLocation(); String wn = loc.getWorld().getName(); sscache.invalidateSnapshot(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); if (onbreak) { mapManager.touch(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "blockbreak"); } } @Override public void onLeavesDecay(LeavesDecayEvent event) { if (event.isCancelled()) return; Location loc = event.getBlock().getLocation(); String wn = loc.getWorld().getName(); sscache.invalidateSnapshot(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); if (onleaves) { mapManager.touch( wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "leavesdecay"); } } @Override public void onBlockBurn(BlockBurnEvent event) { if (event.isCancelled()) return; Location loc = event.getBlock().getLocation(); String wn = loc.getWorld().getName(); sscache.invalidateSnapshot(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); if (onburn) { mapManager.touch(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "blockburn"); } } @Override public void onBlockForm(BlockFormEvent event) { if (event.isCancelled()) return; Location loc = event.getBlock().getLocation(); String wn = loc.getWorld().getName(); sscache.invalidateSnapshot(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); if (onblockform) { mapManager.touch(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "blockform"); } } @Override public void onBlockFade(BlockFadeEvent event) { if (event.isCancelled()) return; Location loc = event.getBlock().getLocation(); String wn = loc.getWorld().getName(); sscache.invalidateSnapshot(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); if (onblockfade) { mapManager.touch(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "blockfade"); } } @Override public void onBlockSpread(BlockSpreadEvent event) { if (event.isCancelled()) return; Location loc = event.getBlock().getLocation(); String wn = loc.getWorld().getName(); sscache.invalidateSnapshot(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); if (onblockspread) { mapManager.touch( wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "blockspread"); } } @Override public void onBlockFromTo(BlockFromToEvent event) { if (event.isCancelled()) return; Location loc = event.getToBlock().getLocation(); String wn = loc.getWorld().getName(); sscache.invalidateSnapshot(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); if (onblockfromto) mapManager.touch( wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "blockfromto"); loc = event.getBlock().getLocation(); wn = loc.getWorld().getName(); sscache.invalidateSnapshot(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); if (onblockfromto) mapManager.touch( wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "blockfromto"); } @Override public void onBlockPhysics(BlockPhysicsEvent event) { if (event.isCancelled()) return; Location loc = event.getBlock().getLocation(); String wn = loc.getWorld().getName(); sscache.invalidateSnapshot(wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); if (onblockphysics) { mapManager.touch( wn, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "blockphysics"); } } @Override public void onBlockPistonRetract(BlockPistonRetractEvent event) { if (event.isCancelled()) return; Block b = event.getBlock(); Location loc = b.getLocation(); BlockFace dir; try { /* Workaround Bukkit bug = http://leaky.bukkit.org/issues/1227 */ dir = event.getDirection(); } catch (ClassCastException ccx) { dir = BlockFace.NORTH; } String wn = loc.getWorld().getName(); int x = loc.getBlockX(), y = loc.getBlockY(), z = loc.getBlockZ(); sscache.invalidateSnapshot(wn, x, y, z); if (onpiston) mapManager.touch(wn, x, y, z, "pistonretract"); for (int i = 0; i < 2; i++) { x += dir.getModX(); y += dir.getModY(); z += dir.getModZ(); sscache.invalidateSnapshot(wn, x, y, z); if (onpiston) mapManager.touch(wn, x, y, z, "pistonretract"); } } @Override public void onBlockPistonExtend(BlockPistonExtendEvent event) { if (event.isCancelled()) return; Block b = event.getBlock(); Location loc = b.getLocation(); BlockFace dir; try { /* Workaround Bukkit bug = http://leaky.bukkit.org/issues/1227 */ dir = event.getDirection(); } catch (ClassCastException ccx) { dir = BlockFace.NORTH; } String wn = loc.getWorld().getName(); int x = loc.getBlockX(), y = loc.getBlockY(), z = loc.getBlockZ(); sscache.invalidateSnapshot(wn, x, y, z); if (onpiston) mapManager.touch(wn, x, y, z, "pistonretract"); for (int i = 0; i < 1 + event.getLength(); i++) { x += dir.getModX(); y += dir.getModY(); z += dir.getModZ(); sscache.invalidateSnapshot(wn, x, y, z); if (onpiston) mapManager.touch(wn, x, y, z, "pistonretract"); } } }; // To trigger rendering. onplace = core.isTrigger("blockplaced"); bep.registerEvent(Event.Type.BLOCK_PLACE, blockTrigger); onbreak = core.isTrigger("blockbreak"); bep.registerEvent(Event.Type.BLOCK_BREAK, blockTrigger); if (core.isTrigger("snowform")) Log.info( "The 'snowform' trigger has been deprecated due to Bukkit changes - use 'blockformed'"); onleaves = core.isTrigger("leavesdecay"); bep.registerEvent(Event.Type.LEAVES_DECAY, blockTrigger); onburn = core.isTrigger("blockburn"); bep.registerEvent(Event.Type.BLOCK_BURN, blockTrigger); onblockform = core.isTrigger("blockformed"); bep.registerEvent(Event.Type.BLOCK_FORM, blockTrigger); onblockfade = core.isTrigger("blockfaded"); bep.registerEvent(Event.Type.BLOCK_FADE, blockTrigger); onblockspread = core.isTrigger("blockspread"); bep.registerEvent(Event.Type.BLOCK_SPREAD, blockTrigger); onblockfromto = core.isTrigger("blockfromto"); bep.registerEvent(Event.Type.BLOCK_FROMTO, blockTrigger); onblockphysics = core.isTrigger("blockphysics"); bep.registerEvent(Event.Type.BLOCK_PHYSICS, blockTrigger); onpiston = core.isTrigger("pistonmoved"); bep.registerEvent(Event.Type.BLOCK_PISTON_EXTEND, blockTrigger); bep.registerEvent(Event.Type.BLOCK_PISTON_RETRACT, blockTrigger); /* Register player event trigger handlers */ PlayerListener playerTrigger = new PlayerListener() { @Override public void onPlayerJoin(PlayerJoinEvent event) { if (onplayerjoin) { Location loc = event.getPlayer().getLocation(); mapManager.touch( loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "playerjoin"); } core.listenerManager.processPlayerEvent( EventType.PLAYER_JOIN, new BukkitPlayer(event.getPlayer())); } @Override public void onPlayerQuit(PlayerQuitEvent event) { core.listenerManager.processPlayerEvent( EventType.PLAYER_QUIT, new BukkitPlayer(event.getPlayer())); } @Override public void onPlayerMove(PlayerMoveEvent event) { Location loc = event.getPlayer().getLocation(); mapManager.touch( loc.getWorld().getName(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(), "playermove"); } }; onplayerjoin = core.isTrigger("playerjoin"); onplayermove = core.isTrigger("playermove"); bep.registerEvent(Event.Type.PLAYER_JOIN, playerTrigger); bep.registerEvent(Event.Type.PLAYER_QUIT, playerTrigger); if (onplayermove) bep.registerEvent(Event.Type.PLAYER_MOVE, playerTrigger); /* Register entity event triggers */ EntityListener entityTrigger = new EntityListener() { @Override public void onEntityExplode(EntityExplodeEvent event) { Location loc = event.getLocation(); String wname = loc.getWorld().getName(); int minx, maxx, miny, maxy, minz, maxz; minx = maxx = loc.getBlockX(); miny = maxy = loc.getBlockY(); minz = maxz = loc.getBlockZ(); /* Calculate volume impacted by explosion */ List<Block> blocks = event.blockList(); for (Block b : blocks) { Location l = b.getLocation(); int x = l.getBlockX(); if (x < minx) minx = x; if (x > maxx) maxx = x; int y = l.getBlockY(); if (y < miny) miny = y; if (y > maxy) maxy = y; int z = l.getBlockZ(); if (z < minz) minz = z; if (z > maxz) maxz = z; } sscache.invalidateSnapshot(wname, minx, miny, minz, maxx, maxy, maxz); if (onexplosion) { mapManager.touchVolume(wname, minx, miny, minz, maxx, maxy, maxz, "entityexplode"); } } }; onexplosion = core.isTrigger("explosion"); bep.registerEvent(Event.Type.ENTITY_EXPLODE, entityTrigger); /* Register world event triggers */ WorldListener worldTrigger = new WorldListener() { @Override public void onChunkLoad(ChunkLoadEvent event) { if (DynmapCore.ignore_chunk_loads) return; Chunk c = event.getChunk(); /* Touch extreme corners */ int x = c.getX() << 4; int z = c.getZ() << 4; mapManager.touchVolume( event.getWorld().getName(), x, 0, z, x + 15, 128, z + 16, "chunkload"); } @Override public void onChunkPopulate(ChunkPopulateEvent event) { Chunk c = event.getChunk(); /* Touch extreme corners */ int x = c.getX() << 4; int z = c.getZ() << 4; mapManager.touchVolume( event.getWorld().getName(), x, 0, z, x + 15, 128, z + 16, "chunkpopulate"); } @Override public void onWorldLoad(WorldLoadEvent event) { core.updateConfigHashcode(); BukkitWorld w = new BukkitWorld(event.getWorld()); if (core.processWorldLoad( w)) /* Have core process load first - fire event listeners if good load after */ core.listenerManager.processWorldEvent(EventType.WORLD_LOAD, w); } @Override public void onWorldUnload(WorldUnloadEvent event) { core.updateConfigHashcode(); DynmapWorld w = core.getWorld(event.getWorld().getName()); if (w != null) core.listenerManager.processWorldEvent(EventType.WORLD_UNLOAD, w); } }; ongeneratechunk = core.isTrigger("chunkgenerated"); if (ongeneratechunk) { bep.registerEvent(Event.Type.CHUNK_POPULATED, worldTrigger); } onloadchunk = core.isTrigger("chunkloaded"); if (onloadchunk) { bep.registerEvent(Event.Type.CHUNK_LOAD, worldTrigger); } // To link configuration to real loaded worlds. bep.registerEvent(Event.Type.WORLD_LOAD, worldTrigger); bep.registerEvent(Event.Type.WORLD_UNLOAD, worldTrigger); }