diff --git a/src/main/java/org/dynmap/worldguard/DynmapWorldGuardPlugin.java b/src/main/java/org/dynmap/worldguard/DynmapWorldGuardPlugin.java index c59cdb0..717a37a 100644 --- a/src/main/java/org/dynmap/worldguard/DynmapWorldGuardPlugin.java +++ b/src/main/java/org/dynmap/worldguard/DynmapWorldGuardPlugin.java @@ -8,25 +8,26 @@ import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; -import org.bukkit.Location; import org.bukkit.World; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.event.Event.Priority; +import org.bukkit.event.Event.Type; +import org.bukkit.event.server.PluginEnableEvent; +import org.bukkit.event.server.ServerListener; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; import org.dynmap.DynmapAPI; import org.dynmap.markers.AreaMarker; import org.dynmap.markers.MarkerAPI; import org.dynmap.markers.MarkerSet; -import org.dynmap.markers.Marker; import com.sk89q.worldedit.BlockVector; import com.sk89q.worldedit.BlockVector2D; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.protection.GlobalRegionManager; import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.managers.RegionManager; -import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion; @@ -34,6 +35,7 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { private static final Logger log = Logger.getLogger("Minecraft"); private static final String LOG_PREFIX = "[Dynmap-WorldGuard] "; private static final String DEF_INFOWINDOW = "
%regionname%
Owner %playerowners%
Flags
%flags%
"; + Plugin dynmap; DynmapAPI api; MarkerAPI markerapi; WorldGuardPlugin wg; @@ -47,6 +49,7 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { Map cusstyle; Set visible; Set hidden; + boolean stop; private static class AreaStyle { String strokecolor; @@ -81,7 +84,8 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { private class WorldGuardUpdate implements Runnable { public void run() { - updateRegions(); + if(!stop) + updateRegions(); } } @@ -221,43 +225,50 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { getServer().getScheduler().scheduleSyncDelayedTask(this, new WorldGuardUpdate(), updperiod); } + + private class OurServerListener extends ServerListener { + @Override + public void onPluginEnable(PluginEnableEvent event) { + Plugin p = event.getPlugin(); + String name = p.getDescription().getName(); + if(name.equals("dynmap") || name.equals("WorldGuard")) { + if(dynmap.isEnabled() && wg.isEnabled()) + activate(); + } + } + } public void onEnable() { - info("initializing"); - Plugin p = this.getServer().getPluginManager().getPlugin("dynmap"); /* Find dynmap */ - if(p == null) { - severe("Error loading Dynmap!"); + info("initializing"); + PluginManager pm = getServer().getPluginManager(); + /* Get dynmap */ + dynmap = pm.getPlugin("dynmap"); + if(dynmap == null) { + severe("Cannot find dynmap!"); return; } - if(!p.isEnabled()) { /* Make sure it's enabled before us */ - getServer().getPluginManager().enablePlugin(p); - if(!p.isEnabled()) { - severe("Failed to enable Dynmap!"); - return; - } + api = (DynmapAPI)dynmap; /* Get API */ + /* Get WorldGuard */ + Plugin p = pm.getPlugin("WorldGuard"); + if(p == null) { + severe("Cannot find WorldGuard!"); + return; } - api = (DynmapAPI)p; /* Get API */ + wg = (WorldGuardPlugin)p; + /* If both enabled, activate */ + if(dynmap.isEnabled() && wg.isEnabled()) + activate(); + else + getServer().getPluginManager().registerEvent(Type.PLUGIN_ENABLE, new OurServerListener(), Priority.Monitor, this); + } + + private void activate() { /* Now, get markers API */ markerapi = api.getMarkerAPI(); if(markerapi == null) { severe("Error loading dynmap marker API!"); return; } - /* Find worldguard */ - p = this.getServer().getPluginManager().getPlugin("WorldGuard"); - if(p == null) { - severe("Error loading WorldGuard"); - return; - } - if(!p.isEnabled()) { /* Make sure it's enabled before us */ - getServer().getPluginManager().enablePlugin(p); - if(!p.isEnabled()) { - severe("Failed to enable WorldGuard!"); - return; - } - } - wg = (WorldGuardPlugin)p; - /* Load configuration */ FileConfiguration cfg = getConfig(); cfg.options().copyDefaults(true); /* Load defaults, if needed */ @@ -298,10 +309,11 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { int per = cfg.getInt("update.period", 300); if(per < 15) per = 15; updperiod = (long)(per*20); + stop = false; getServer().getScheduler().scheduleSyncDelayedTask(this, new WorldGuardUpdate(), 40); /* First time is 2 seconds */ - info("version " + this.getDescription().getVersion() + " is enabled"); + info("version " + this.getDescription().getVersion() + " is activated"); } public void onDisable() { @@ -310,6 +322,7 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { set = null; } resareas.clear(); + stop = true; } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a5dddbe..2e3acb2 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,5 +2,5 @@ name: Dynmap-WorldGuard main: org.dynmap.worldguard.DynmapWorldGuardPlugin version: "${project.version}" author: mikeprimm -depend: [ dynmap, WorldGuard ] +softdepend: [ dynmap, WorldGuard ]