|
|
@ -1,6 +1,7 @@ |
|
|
|
package org.dynmap.worldguard; |
|
|
|
package org.dynmap.worldguard; |
|
|
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
import java.io.IOException; |
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.HashSet; |
|
|
|
import java.util.HashSet; |
|
|
|
import java.util.List; |
|
|
|
import java.util.List; |
|
|
@ -44,6 +45,7 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { |
|
|
|
MarkerAPI markerapi; |
|
|
|
MarkerAPI markerapi; |
|
|
|
WorldGuardPlugin wg; |
|
|
|
WorldGuardPlugin wg; |
|
|
|
BooleanFlag boost_flag; |
|
|
|
BooleanFlag boost_flag; |
|
|
|
|
|
|
|
int updatesPerTick = 20; |
|
|
|
|
|
|
|
|
|
|
|
FileConfiguration cfg; |
|
|
|
FileConfiguration cfg; |
|
|
|
MarkerSet set; |
|
|
|
MarkerSet set; |
|
|
@ -99,13 +101,6 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { |
|
|
|
public static void severe(String msg) { |
|
|
|
public static void severe(String msg) { |
|
|
|
log.log(Level.SEVERE, msg); |
|
|
|
log.log(Level.SEVERE, msg); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private class WorldGuardUpdate implements Runnable { |
|
|
|
|
|
|
|
public void run() { |
|
|
|
|
|
|
|
if(!stop) |
|
|
|
|
|
|
|
updateRegions(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private Map<String, AreaMarker> resareas = new HashMap<String, AreaMarker>(); |
|
|
|
private Map<String, AreaMarker> resareas = new HashMap<String, AreaMarker>(); |
|
|
|
|
|
|
|
|
|
|
@ -269,17 +264,50 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/* Update worldguard region information */ |
|
|
|
private class UpdateJob implements Runnable { |
|
|
|
private void updateRegions() { |
|
|
|
|
|
|
|
Map<String,AreaMarker> newmap = new HashMap<String,AreaMarker>(); /* Build new map */ |
|
|
|
Map<String,AreaMarker> newmap = new HashMap<String,AreaMarker>(); /* Build new map */ |
|
|
|
|
|
|
|
List<World> worldsToDo = null; |
|
|
|
/* Loop through worlds */ |
|
|
|
List<ProtectedRegion> regionsToDo = null; |
|
|
|
for(World w : getServer().getWorlds()) { |
|
|
|
World curworld = null; |
|
|
|
RegionManager rm = wg.getRegionManager(w); /* Get region manager for world */ |
|
|
|
|
|
|
|
if(rm == null) continue; |
|
|
|
public void run() { |
|
|
|
|
|
|
|
if (stop) { |
|
|
|
Map<String,ProtectedRegion> regions = rm.getRegions(); /* Get all the regions */ |
|
|
|
return; |
|
|
|
for(ProtectedRegion pr : regions.values()) { |
|
|
|
} |
|
|
|
|
|
|
|
// If worlds list isn't primed, prime it
|
|
|
|
|
|
|
|
if (worldsToDo == null) { |
|
|
|
|
|
|
|
worldsToDo = new ArrayList<World>(getServer().getWorlds()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
while (regionsToDo == null) { // No pending regions for world
|
|
|
|
|
|
|
|
if (worldsToDo.isEmpty()) { // No more worlds?
|
|
|
|
|
|
|
|
/* Now, review old map - anything left is gone */ |
|
|
|
|
|
|
|
for(AreaMarker oldm : resareas.values()) { |
|
|
|
|
|
|
|
oldm.deleteMarker(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/* And replace with new map */ |
|
|
|
|
|
|
|
resareas = newmap; |
|
|
|
|
|
|
|
// Set up for next update (new job)
|
|
|
|
|
|
|
|
getServer().getScheduler().scheduleSyncDelayedTask(DynmapWorldGuardPlugin.this, new UpdateJob(), updperiod); |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else { |
|
|
|
|
|
|
|
curworld = worldsToDo.remove(0); |
|
|
|
|
|
|
|
RegionManager rm = wg.getRegionManager(curworld); /* Get region manager for world */ |
|
|
|
|
|
|
|
if(rm != null) { |
|
|
|
|
|
|
|
Map<String,ProtectedRegion> regions = rm.getRegions(); /* Get all the regions */ |
|
|
|
|
|
|
|
if ((regions != null) && (regions.isEmpty() == false)) { |
|
|
|
|
|
|
|
regionsToDo = new ArrayList<ProtectedRegion>(regions.values()); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/* Now, process up to limit regions */ |
|
|
|
|
|
|
|
for (int i = 0; i < updatesPerTick; i++) { |
|
|
|
|
|
|
|
if (regionsToDo.isEmpty()) { |
|
|
|
|
|
|
|
regionsToDo = null; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
ProtectedRegion pr = regionsToDo.remove(regionsToDo.size()-1); |
|
|
|
int depth = 1; |
|
|
|
int depth = 1; |
|
|
|
ProtectedRegion p = pr; |
|
|
|
ProtectedRegion p = pr; |
|
|
|
while(p.getParent() != null) { |
|
|
|
while(p.getParent() != null) { |
|
|
@ -288,18 +316,11 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { |
|
|
|
} |
|
|
|
} |
|
|
|
if(depth > maxdepth) |
|
|
|
if(depth > maxdepth) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
handleRegion(w, pr, newmap); |
|
|
|
handleRegion(curworld, pr, newmap); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Tick next step in the job
|
|
|
|
|
|
|
|
getServer().getScheduler().scheduleSyncDelayedTask(DynmapWorldGuardPlugin.this, this, 1); |
|
|
|
} |
|
|
|
} |
|
|
|
/* Now, review old map - anything left is gone */ |
|
|
|
|
|
|
|
for(AreaMarker oldm : resareas.values()) { |
|
|
|
|
|
|
|
oldm.deleteMarker(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/* And replace with new map */ |
|
|
|
|
|
|
|
resareas = newmap; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
getServer().getScheduler().scheduleSyncDelayedTask(this, new WorldGuardUpdate(), updperiod); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private class OurServerListener implements Listener { |
|
|
|
private class OurServerListener implements Listener { |
|
|
@ -413,6 +434,7 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { |
|
|
|
use3d = cfg.getBoolean("use3dregions", false); |
|
|
|
use3d = cfg.getBoolean("use3dregions", false); |
|
|
|
infowindow = cfg.getString("infowindow", DEF_INFOWINDOW); |
|
|
|
infowindow = cfg.getString("infowindow", DEF_INFOWINDOW); |
|
|
|
maxdepth = cfg.getInt("maxdepth", 16); |
|
|
|
maxdepth = cfg.getInt("maxdepth", 16); |
|
|
|
|
|
|
|
updatesPerTick = cfg.getInt("updates-per-tick", 20); |
|
|
|
|
|
|
|
|
|
|
|
/* Get style information */ |
|
|
|
/* Get style information */ |
|
|
|
defstyle = new AreaStyle(cfg, "regionstyle"); |
|
|
|
defstyle = new AreaStyle(cfg, "regionstyle"); |
|
|
@ -453,7 +475,7 @@ public class DynmapWorldGuardPlugin extends JavaPlugin { |
|
|
|
updperiod = (long)(per*20); |
|
|
|
updperiod = (long)(per*20); |
|
|
|
stop = false; |
|
|
|
stop = false; |
|
|
|
|
|
|
|
|
|
|
|
getServer().getScheduler().scheduleSyncDelayedTask(this, new WorldGuardUpdate(), 40); /* First time is 2 seconds */ |
|
|
|
getServer().getScheduler().scheduleSyncDelayedTask(this, new UpdateJob(), 40); /* First time is 2 seconds */ |
|
|
|
|
|
|
|
|
|
|
|
info("version " + this.getDescription().getVersion() + " is activated"); |
|
|
|
info("version " + this.getDescription().getVersion() + " is activated"); |
|
|
|
} |
|
|
|
} |
|
|
|