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;
}