diff --git a/src/de/craftinc/gates/dynmap/GateMarkerUtil.java b/src/de/craftinc/gates/dynmap/GateMarkerUtil.java new file mode 100644 index 0000000..31f0e65 --- /dev/null +++ b/src/de/craftinc/gates/dynmap/GateMarkerUtil.java @@ -0,0 +1,125 @@ +/* Craft Inc. Gates Dynmap + Copyright (C) 2011-2014 Craft Inc. Gates Team (see AUTHORS.txt) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program (LGPLv3). If not, see . +*/ +package de.craftinc.gates.dynmap; + +import de.craftinc.gates.Gate; +import org.bukkit.Location; +import org.dynmap.markers.Marker; +import org.dynmap.markers.MarkerAPI; +import org.dynmap.markers.MarkerIcon; +import org.dynmap.markers.MarkerSet; + +import java.io.InputStream; +import java.util.logging.Level; + + +public class GateMarkerUtil +{ + protected static final String markerIconID = "de.craftinc.gates.maker-icon"; + protected static final String markerIconLabel = "Gate"; + + protected static final String markerSetID = "de.craftinc.gates"; + protected static final String markerSetName = "Gates"; + + protected MarkerIcon gateIcon; + protected MarkerSet markerSet; + protected MarkerAPI markerAPI; + + public GateMarkerUtil(MarkerAPI markerAPI) + { + super(); + this.markerAPI = markerAPI; + loadGateIcon(); + loadMarkerSet(); + } + + + protected void loadGateIcon() + { + this.gateIcon = this.markerAPI.getMarkerIcon(markerIconID); + + if (this.gateIcon == null) { + InputStream inputStream = this.getClass().getResourceAsStream("/gate.png"); + + if (inputStream == null) { + Logger.log(Level.SEVERE, "Cannot load gate icon (missing resource)"); + return; + } + + this.gateIcon = this.markerAPI.createMarkerIcon(markerIconID, markerIconLabel, inputStream); + + if (this.gateIcon == null) { + Logger.log(Level.SEVERE, "Cannot load gate icon"); + } + } + + } + + + protected void loadMarkerSet() + { + markerSet = markerAPI.getMarkerSet(markerSetID); + + if (markerSet == null) { + markerSet = markerAPI.createMarkerSet(markerSetID, markerSetName, null, false); + } + } + + + public void addMarker(Gate gate) + { + if (gate.getLocation() == null) { + return; + } + + String id = gate.getId(); + String label = gate.getId(); + Location l = gate.getLocation(); + MarkerIcon icon = this.gateIcon; + + this.markerSet.createMarker(id, label, false, l.getWorld().getName(), l.getX(), l.getY(), l.getZ(), icon, false); + } + + + public void updateMarker(Gate gate, String oldID) + { + Marker m = this.markerSet.findMarker(gate.getId()); + + if (oldID != null && m != null) { + m.deleteMarker(); + m = null; + } + + if (m == null) { + this.addMarker(gate); + } + else if (gate.getLocation() == null) { + this.removeMarker(gate); + } + else { + Location l = gate.getLocation(); + m.setLocation(l.getWorld().getName(), l.getX(), l.getY(), l.getZ()); + } + } + + + public void removeMarker(Gate gate) + { + Marker m = this.markerSet.findMarker(gate.getId()); + m.deleteMarker(); + } +} diff --git a/src/de/craftinc/gates/dynmap/Logger.java b/src/de/craftinc/gates/dynmap/Logger.java new file mode 100644 index 0000000..1d5538d --- /dev/null +++ b/src/de/craftinc/gates/dynmap/Logger.java @@ -0,0 +1,36 @@ +/* Craft Inc. Gates Dynmap + Copyright (C) 2011-2014 Craft Inc. Gates Team (see AUTHORS.txt) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program (LGPLv3). If not, see . +*/ +package de.craftinc.gates.dynmap; + + +import java.util.logging.Level; + + +public class Logger +{ + public static void log(String msg) + { + log(Level.INFO, msg); + } + + + public static void log(Level level, String msg) + { + java.util.logging.Logger.getLogger("Minecraft").log(level, "["+Plugin.getPlugin().getDescription().getFullName()+"] "+msg); + } + +} diff --git a/src/de/craftinc/gates/dynmap/Plugin.java b/src/de/craftinc/gates/dynmap/Plugin.java index 869a04a..7b1329f 100644 --- a/src/de/craftinc/gates/dynmap/Plugin.java +++ b/src/de/craftinc/gates/dynmap/Plugin.java @@ -18,47 +18,59 @@ package de.craftinc.gates.dynmap; import de.craftinc.gates.Gate; +import de.craftinc.gates.GateChangeListener; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.dynmap.DynmapAPI; import org.dynmap.markers.MarkerAPI; -import org.dynmap.markers.MarkerIcon; -import org.dynmap.markers.MarkerSet; -import java.io.InputStream; import java.util.List; +import java.util.Map; import java.util.logging.Level; -import java.util.logging.Logger; -public class Plugin extends JavaPlugin +public class Plugin extends JavaPlugin implements GateChangeListener { - private static final String markerSetID = "de.craftinc.gates"; - private static final String markerSetName = "Gates"; + protected static Plugin instance; - private static final String markerIconID = "de.craftinc.gates.maker-icon"; - private static final String markerIconLabel = "Gate"; + protected DynmapAPI dynmapAPI; + protected MarkerAPI markerAPI; + protected de.craftinc.gates.Plugin gatesPlugin; + protected GateMarkerUtil markerUtil; - DynmapAPI dynmapAPI; - MarkerAPI markerAPI; - de.craftinc.gates.Plugin gatesPlugin; - - MarkerSet gateMarkers; - MarkerIcon gateIcon; + public Plugin() + { + instance = this; + } + public static Plugin getPlugin() + { + return instance; + } + + @Override public void onEnable() { + super.onEnable(); + if (!loadAPI()) { return; } - loadIcons(); - createMakersSet(); + this.markerUtil = new GateMarkerUtil(this.markerAPI); loadAllGateMarkers(); - setupChangeListener(); + this.gatesPlugin.getGatesManager().addGateChangeListener(this); + } + + + @Override + public void onDisable() + { + this.gatesPlugin.getGatesManager().removeGateChangeListener(this); + super.onDisable(); } @@ -68,7 +80,7 @@ public class Plugin extends JavaPlugin org.bukkit.plugin.Plugin dynmap = pm.getPlugin("dynmap"); if (dynmap == null) { - log(Level.SEVERE, "Cannot find dynmap!"); + Logger.log(Level.SEVERE, "Cannot find dynmap!"); return false; } @@ -76,14 +88,14 @@ public class Plugin extends JavaPlugin markerAPI = dynmapAPI.getMarkerAPI(); if (markerAPI == null) { - log(Level.SEVERE, "Error loading Dynmap marker API!"); + Logger.log(Level.SEVERE, "Error loading Dynmap marker API!"); return false; } gatesPlugin = (de.craftinc.gates.Plugin)pm.getPlugin("Craft Inc. Gates"); if (gatesPlugin == null) { - log(Level.SEVERE, "Cannot find Craft Inc. Gates"); + Logger.log(Level.SEVERE, "Cannot find Craft Inc. Gates"); return false; } @@ -91,80 +103,20 @@ public class Plugin extends JavaPlugin } - private void loadIcons() - { - this.gateIcon = this.markerAPI.getMarkerIcon(markerSetID); - - if (this.gateIcon == null) { - InputStream inputStream = this.getClass().getResourceAsStream("/gate.png"); - - if (inputStream == null) { - log(Level.SEVERE, "Cannot load gate icon (missing resource)"); - return; - } - - this.gateIcon = this.markerAPI.createMarkerIcon(markerIconID, markerIconLabel, inputStream); - - if (this.gateIcon == null) { - log(Level.SEVERE, "Cannot load gate icon"); - } - } - } - - - - private void createMakersSet() - { - gateMarkers = markerAPI.getMarkerSet(markerSetID); - - if (gateMarkers == null) { - gateMarkers = markerAPI.createMarkerSet(markerSetID, markerSetName, null, false); - } - } - - private void loadAllGateMarkers() { List allGates = this.gatesPlugin.getGatesManager().allGates(); for (Gate g : allGates) { - - if (g.getLocation() == null) { - continue; - } - - String id = g.getId(); - String label = g.getId(); - boolean markup = false; - String world = g.getLocation().getWorld().getName(); - double x = g.getLocation().getX(); - double y = g.getLocation().getY(); - double z = g.getLocation().getZ(); - MarkerIcon icon = this.gateIcon; - boolean is_persistent = false; - - this.gateMarkers.createMarker(id, label, markup, world, x, y, z, icon, is_persistent); + this.markerUtil.addMarker(g); } } - private void setupChangeListener() + + @Override + public void gateChangedHandler(Gate gate, Map stringObjectMap) { - // TODO: implement this + String oldID = (String)stringObjectMap.get(GateChangeListener.changedID); + this.markerUtil.updateMarker(gate, oldID); } - - - /* - * Logging - */ - public void log(String msg) - { - log(Level.INFO, msg); - } - - - public void log(Level level, String msg) - { - Logger.getLogger("Minecraft").log(level, "["+this.getDescription().getFullName()+"] "+msg); - } - }