diff --git a/src/main/java/us/camin/regions/Plugin.java b/src/main/java/us/camin/regions/Plugin.java index 6cb6c12..8c33c9c 100644 --- a/src/main/java/us/camin/regions/Plugin.java +++ b/src/main/java/us/camin/regions/Plugin.java @@ -24,6 +24,8 @@ import org.bukkit.plugin.PluginManager; import org.bukkit.World; import org.bukkit.command.CommandExecutor; import org.bukkit.configuration.ConfigurationSection; +import org.dynmap.markers.MarkerAPI; +import org.dynmap.DynmapCommonAPI; import java.util.logging.Logger; @@ -40,8 +42,7 @@ public class Plugin extends JavaPlugin { public void onEnable() { log.info("[Regions] Enabling Regions"); - m_regions = new RegionManager(); - loadRegions(); + m_regions = new RegionManager(getServer().getPluginManager()); m_playerWatcher = new PlayerWatcher(this); @@ -49,6 +50,18 @@ public class Plugin extends JavaPlugin { CommandExecutor regionCommand = new RegionCommand(this); getCommand("region").setExecutor(regionCommand); + + org.bukkit.plugin.Plugin mapPlugin = getServer().getPluginManager().getPlugin("dynmap"); + if (mapPlugin instanceof DynmapCommonAPI) { + DynmapCommonAPI mapAPI = (DynmapCommonAPI)mapPlugin; + MarkerAPI markerAPI = mapAPI.getMarkerAPI(); + RegionEventHandler regionHandler = new RegionEventHandler(markerAPI); + getServer().getPluginManager().registerEvents(regionHandler, this); + } else { + log.info("[Regions] Dynmap not found. Disabling map support."); + } + + loadRegions(); } private void loadTestRegions() { diff --git a/src/main/java/us/camin/regions/RegionEventHandler.java b/src/main/java/us/camin/regions/RegionEventHandler.java new file mode 100644 index 0000000..821a571 --- /dev/null +++ b/src/main/java/us/camin/regions/RegionEventHandler.java @@ -0,0 +1,49 @@ +package us.camin.regions; + +/** + * This file is part of Regions + * + * Regions 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. + * + * Regions 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 Regions. If not, see . + * + */ + +import org.bukkit.event.Listener; +import org.dynmap.markers.MarkerSet; +import org.dynmap.markers.MarkerIcon; +import org.dynmap.markers.MarkerAPI; +import org.dynmap.markers.Marker; +import org.bukkit.event.EventHandler; +import org.bukkit.Location; + +public class RegionEventHandler implements Listener { + private MarkerSet m_set; + private MarkerAPI m_api; + + public RegionEventHandler(MarkerAPI markerAPI) { + m_api = markerAPI; + m_set = m_api.createMarkerSet("Regions", "Regions", null, false); + } + + @EventHandler + public void onRegionEvent(RegionEvent event) { + if (event.type == RegionEvent.EventType.Added) { + Location loc = event.region.location(); + MarkerIcon icon = m_api.getMarkerIcon("default"); + m_set.createMarker(null, event.region.name(), loc.getWorld().getName(), loc.getX(), loc.getY(), loc.getZ(), icon, false); + } else if (event.type == RegionEvent.EventType.Removed) { + Marker marker = m_set.findMarkerByLabel(event.region.name()); + marker.deleteMarker(); + } + } +} diff --git a/src/main/java/us/camin/regions/RegionManager.java b/src/main/java/us/camin/regions/RegionManager.java index 12cdbb1..92262fb 100644 --- a/src/main/java/us/camin/regions/RegionManager.java +++ b/src/main/java/us/camin/regions/RegionManager.java @@ -24,6 +24,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.Bukkit; import org.bukkit.Server; import org.bukkit.entity.Player; +import org.bukkit.plugin.PluginManager; import java.util.logging.Logger; import java.util.Map; @@ -37,8 +38,10 @@ import java.util.Set; public class RegionManager { Logger log = Logger.getLogger("Regions.RegionManager"); private Map> m_regions; + private PluginManager m_pm; - public RegionManager() { + public RegionManager(PluginManager pm) { + m_pm = pm; m_regions = new HashMap>(); } @@ -56,14 +59,20 @@ public class RegionManager { log.fine("Adding new region "+r.name()+" at "+r.location()); if (!m_regions.containsKey(worldName)) m_regions.put(worldName, new ArrayList()); - return m_regions.get(worldName).add(r); + if (m_regions.get(worldName).add(r)) { + m_pm.callEvent(new RegionEvent(r, RegionEvent.EventType.Added)); + } + return false; } public boolean removeRegion(Region r) { String worldName = r.location().getWorld().getName(); log.fine("Removing region "+r.name()+" from "+r.location()); if (m_regions.containsKey(worldName)) { - return m_regions.get(worldName).remove(r); + if (m_regions.get(worldName).remove(r)) { + m_pm.callEvent(new RegionEvent(r, RegionEvent.EventType.Removed)); + } + return true; } return false; }