Example #1
0
  @Override
  public void onDisable() {
    /* Reset registered listeners */
    bep.cleanup();
    /* Disable core */
    core.disableCore();

    if (sscache != null) {
      sscache.cleanup();
      sscache = null;
    }
  }
Example #2
0
  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);
  }
Example #3
0
  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);
  }