mirror of
https://github.com/webbukkit/dynmap.git
synced 2024-11-25 03:35:18 +01:00
First pass of Towny region support
This commit is contained in:
parent
7e12574bd8
commit
0ebabf5b61
@ -22,8 +22,14 @@ import java.io.ByteArrayInputStream;
|
|||||||
|
|
||||||
public class RegionHandler extends FileHandler {
|
public class RegionHandler extends FileHandler {
|
||||||
private ConfigurationNode regions;
|
private ConfigurationNode regions;
|
||||||
|
private String regiontype;
|
||||||
|
private TownyConfigHandler towny;
|
||||||
public RegionHandler(ConfigurationNode regions) {
|
public RegionHandler(ConfigurationNode regions) {
|
||||||
this.regions = regions;
|
this.regions = regions;
|
||||||
|
regiontype = regions.getString("name", "WorldGuard");
|
||||||
|
if(regiontype.equals("Towny")) {
|
||||||
|
towny = new TownyConfigHandler(regions);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected InputStream getFileInput(String path, HttpRequest request, HttpResponse response) {
|
protected InputStream getFileInput(String path, HttpRequest request, HttpResponse response) {
|
||||||
@ -37,11 +43,15 @@ public class RegionHandler extends FileHandler {
|
|||||||
Configuration regionConfig = null;
|
Configuration regionConfig = null;
|
||||||
File infile;
|
File infile;
|
||||||
String regionFile;
|
String regionFile;
|
||||||
|
Map<?, ?> regionData;
|
||||||
|
|
||||||
|
if(regiontype.equals("Towny")) {
|
||||||
|
regionData = towny.getRegionData(worldname);
|
||||||
|
}
|
||||||
|
else {
|
||||||
/* If using worldpath, format is either plugins/<plugin>/<worldname>/<filename> OR
|
/* If using worldpath, format is either plugins/<plugin>/<worldname>/<filename> OR
|
||||||
* plugins/<plugin>/worlds/<worldname>/<filename>
|
* plugins/<plugin>/worlds/<worldname>/<filename>
|
||||||
*/
|
*/
|
||||||
String regiontype = regions.getString("name", "WorldGuard");
|
|
||||||
File basepath = new File("plugins", regiontype);
|
File basepath = new File("plugins", regiontype);
|
||||||
if(basepath.exists() == false)
|
if(basepath.exists() == false)
|
||||||
return null;
|
return null;
|
||||||
@ -65,11 +75,12 @@ public class RegionHandler extends FileHandler {
|
|||||||
regionConfig.load();
|
regionConfig.load();
|
||||||
/* Parse region data and store in MemoryInputStream */
|
/* Parse region data and store in MemoryInputStream */
|
||||||
String bnode = regions.getString("basenode", "regions");
|
String bnode = regions.getString("basenode", "regions");
|
||||||
Map<?, ?> regionData = (Map<?, ?>) regionConfig.getProperty(bnode);
|
regionData = (Map<?, ?>) regionConfig.getProperty(bnode);
|
||||||
if(regionData == null) {
|
if(regionData == null) {
|
||||||
Log.severe("Region data from " + infile.getPath() + " does not include basenode '" + bnode + "'");
|
Log.severe("Region data from " + infile.getPath() + " does not include basenode '" + bnode + "'");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
/* See if we have explicit list of regions to report - limit to this list if we do */
|
/* See if we have explicit list of regions to report - limit to this list if we do */
|
||||||
List<String> idlist = regions.getStrings("visibleregions", null);
|
List<String> idlist = regions.getStrings("visibleregions", null);
|
||||||
List<String> hidlist = regions.getStrings("hiddenregions", null);
|
List<String> hidlist = regions.getStrings("hiddenregions", null);
|
||||||
|
@ -20,13 +20,27 @@ import org.dynmap.web.Json;
|
|||||||
|
|
||||||
public class RegionsComponent extends ClientComponent {
|
public class RegionsComponent extends ClientComponent {
|
||||||
|
|
||||||
|
private TownyConfigHandler towny;
|
||||||
|
private String regiontype;
|
||||||
|
|
||||||
public RegionsComponent(final DynmapPlugin plugin, final ConfigurationNode configuration) {
|
public RegionsComponent(final DynmapPlugin plugin, final ConfigurationNode configuration) {
|
||||||
super(plugin, configuration);
|
super(plugin, configuration);
|
||||||
|
|
||||||
// For internal webserver.
|
// For internal webserver.
|
||||||
String fname = configuration.getString("filename", "regions.yml");
|
String fname = configuration.getString("filename", "regions.yml");
|
||||||
|
|
||||||
|
regiontype = configuration.getString("name", "WorldGuard");
|
||||||
|
|
||||||
|
|
||||||
|
/* Load special handler for Towny */
|
||||||
|
if(regiontype.equals("Towny")) {
|
||||||
|
towny = new TownyConfigHandler(configuration);
|
||||||
|
plugin.webServer.handlers.put("/standalone/towny_*", new RegionHandler(configuration));
|
||||||
|
}
|
||||||
|
else {
|
||||||
plugin.webServer.handlers.put("/standalone/" + fname.substring(0, fname.lastIndexOf('.')) + "_*", new RegionHandler(configuration));
|
plugin.webServer.handlers.put("/standalone/" + fname.substring(0, fname.lastIndexOf('.')) + "_*", new RegionHandler(configuration));
|
||||||
|
|
||||||
|
}
|
||||||
// For external webserver.
|
// For external webserver.
|
||||||
//Parse region file for multi world style
|
//Parse region file for multi world style
|
||||||
if (configuration.getBoolean("useworldpath", false)) {
|
if (configuration.getBoolean("useworldpath", false)) {
|
||||||
@ -34,7 +48,7 @@ public class RegionsComponent extends ClientComponent {
|
|||||||
@Override
|
@Override
|
||||||
public void triggered(ClientUpdateEvent t) {
|
public void triggered(ClientUpdateEvent t) {
|
||||||
World world = t.world.world;
|
World world = t.world.world;
|
||||||
parseRegionFile(world.getName() + "/" + configuration.getString("filename", "regions.yml"), configuration.getString("filename", "regions.yml").replace(".", "_" + world.getName() + ".yml"));
|
parseRegionFile(world.getName(), world.getName() + "/" + configuration.getString("filename", "regions.yml"), configuration.getString("filename", "regions.yml").replace(".", "_" + world.getName() + ".yml"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@ -42,18 +56,26 @@ public class RegionsComponent extends ClientComponent {
|
|||||||
@Override
|
@Override
|
||||||
public void triggered(ClientUpdateEvent t) {
|
public void triggered(ClientUpdateEvent t) {
|
||||||
World world = t.world.world;
|
World world = t.world.world;
|
||||||
parseRegionFile(configuration.getString("filename", "regions.yml"), configuration.getString("filename", "regions.yml").replace(".", "_" + world.getName() + ".yml"));
|
parseRegionFile(world.getName(), configuration.getString("filename", "regions.yml"), configuration.getString("filename", "regions.yml").replace(".", "_" + world.getName() + ".yml"));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//handles parsing and writing region json files
|
//handles parsing and writing region json files
|
||||||
private void parseRegionFile(String regionFile, String outputFileName)
|
private void parseRegionFile(String wname, String regionFile, String outputFileName)
|
||||||
{
|
{
|
||||||
File outputFile;
|
File outputFile;
|
||||||
org.bukkit.util.config.Configuration regionConfig = null;
|
org.bukkit.util.config.Configuration regionConfig = null;
|
||||||
String regiontype = configuration.getString("name", "WorldGuard");
|
Map<?, ?> regionData;
|
||||||
|
File webWorldPath;
|
||||||
|
|
||||||
|
if(regiontype.equals("Towny")) {
|
||||||
|
regionData = towny.getRegionData(wname);
|
||||||
|
outputFileName = "towny_" + wname + ".json";
|
||||||
|
webWorldPath = new File(plugin.getWebPath()+"/standalone/", outputFileName);
|
||||||
|
}
|
||||||
|
else {
|
||||||
if(configuration.getBoolean("useworldpath", false))
|
if(configuration.getBoolean("useworldpath", false))
|
||||||
{
|
{
|
||||||
if(new File("plugins/"+configuration.getString("name", "WorldGuard"), regionFile).exists())
|
if(new File("plugins/"+configuration.getString("name", "WorldGuard"), regionFile).exists())
|
||||||
@ -68,10 +90,10 @@ public class RegionsComponent extends ClientComponent {
|
|||||||
return;
|
return;
|
||||||
regionConfig.load();
|
regionConfig.load();
|
||||||
|
|
||||||
|
regionData = (Map<?, ?>) regionConfig.getProperty(configuration.getString("basenode", "regions"));
|
||||||
outputFileName = outputFileName.substring(0, outputFileName.lastIndexOf("."))+".json";
|
outputFileName = outputFileName.substring(0, outputFileName.lastIndexOf("."))+".json";
|
||||||
|
webWorldPath = new File(plugin.getWebPath()+"/standalone/", outputFileName);
|
||||||
File webWorldPath = new File(plugin.getWebPath()+"/standalone/", outputFileName);
|
}
|
||||||
Map<?, ?> regionData = (Map<?, ?>) regionConfig.getProperty(configuration.getString("basenode", "regions"));
|
|
||||||
/* See if we have explicit list of regions to report - limit to this list if we do */
|
/* See if we have explicit list of regions to report - limit to this list if we do */
|
||||||
List<String> idlist = configuration.getStrings("visibleregions", null);
|
List<String> idlist = configuration.getStrings("visibleregions", null);
|
||||||
List<String> hidlist = configuration.getStrings("hiddenregions", null);
|
List<String> hidlist = configuration.getStrings("hiddenregions", null);
|
||||||
|
208
src/main/java/org/dynmap/regions/TownyConfigHandler.java
Normal file
208
src/main/java/org/dynmap/regions/TownyConfigHandler.java
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
package org.dynmap.regions;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FilenameFilter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.util.config.Configuration;
|
||||||
|
import org.dynmap.ConfigurationNode;
|
||||||
|
import org.dynmap.DynmapPlugin;
|
||||||
|
import org.dynmap.Log;
|
||||||
|
import org.dynmap.utils.TileFlags;
|
||||||
|
|
||||||
|
public class TownyConfigHandler {
|
||||||
|
private int townblocksize; /* Size of each block - default is 16x16 */
|
||||||
|
|
||||||
|
public TownyConfigHandler(ConfigurationNode cfg) {
|
||||||
|
/* Find path to Towny base configuration */
|
||||||
|
File cfgfile = new File("plugins/Towny/settings/config.yml");
|
||||||
|
if(cfgfile.canRead() == false) { /* Can't read config */
|
||||||
|
Log.severe("Cannot find Towny file - " + cfgfile.getPath());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Configuration tcfg = new Configuration(cfgfile);
|
||||||
|
tcfg.load();
|
||||||
|
townblocksize = tcfg.getInt("town_block_size", 16); /* Get block size */
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get map of attributes for given world
|
||||||
|
*/
|
||||||
|
public Map<String, Object> getRegionData(String wname) {
|
||||||
|
Map<String, Object> rslt = new HashMap<String, Object>();
|
||||||
|
/* List towns directory - process all towns there */
|
||||||
|
File towndir = new File("plugins/Towny/data/towns");
|
||||||
|
File[] towns = towndir.listFiles(new FilenameFilter() {
|
||||||
|
@Override
|
||||||
|
public boolean accept(File dir, String name) {
|
||||||
|
return name.endsWith(".txt");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
for(File town : towns) {
|
||||||
|
Map<?,?> td = processTown(town, wname);
|
||||||
|
if(td != null) {
|
||||||
|
String fn = town.getName();
|
||||||
|
rslt.put(fn.substring(0, fn.lastIndexOf('.')), td);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rslt;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum direction { XPLUS, YPLUS, XMINUS, YMINUS };
|
||||||
|
|
||||||
|
private static final String FLAGS[] = {
|
||||||
|
"hasUpkeep", "pvp", "mobs", "public", "explosion", "fire"
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Process data from given town file
|
||||||
|
*/
|
||||||
|
public Map<String,Object> processTown(File townfile, String wname) {
|
||||||
|
Properties p = new Properties();
|
||||||
|
FileInputStream fis = null;
|
||||||
|
Map<String, Object> rslt = null;
|
||||||
|
try {
|
||||||
|
fis = new FileInputStream(townfile); /* Open and load file */
|
||||||
|
p.load(fis);
|
||||||
|
} catch (IOException iox) {
|
||||||
|
Log.severe("Error loading Towny file " + townfile.getPath());
|
||||||
|
} finally {
|
||||||
|
if(fis != null) {
|
||||||
|
try { fis.close(); } catch (IOException iox) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Get block list */
|
||||||
|
String blocks = p.getProperty("townBlocks");
|
||||||
|
/* If it doesn't start with world, we're done (town on different world) */
|
||||||
|
if((blocks == null) || (!blocks.startsWith(wname+":")))
|
||||||
|
return null;
|
||||||
|
String[] nodes = blocks.split(";"); /* Split into list */
|
||||||
|
TileFlags blks = new TileFlags();
|
||||||
|
ArrayList<int[]> nodevals = new ArrayList<int[]>();
|
||||||
|
int minx = Integer.MAX_VALUE;
|
||||||
|
int miny = Integer.MAX_VALUE;
|
||||||
|
for(String n: nodes) {
|
||||||
|
int idx = n.indexOf(':');
|
||||||
|
if(idx >= 0) n = n.substring(idx+1);
|
||||||
|
String[] v = n.split(",");
|
||||||
|
if(v.length == 2) {
|
||||||
|
try {
|
||||||
|
int[] vv = new int[] { Integer.valueOf(v[0]), Integer.valueOf(v[1]) };
|
||||||
|
blks.setFlag(vv[0], vv[1], true);
|
||||||
|
nodevals.add(vv);
|
||||||
|
if(vv[0] < minx) {
|
||||||
|
minx = vv[0];
|
||||||
|
miny = vv[1];
|
||||||
|
}
|
||||||
|
else if((vv[0] == minx) && (vv[1] < miny)) {
|
||||||
|
miny = vv[1];
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException nfx) {
|
||||||
|
Log.severe("Error parsing block list in Towny - " + townfile.getPath());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Trace outline of blocks - start from minx, miny going to x+ */
|
||||||
|
int init_x = minx;
|
||||||
|
int init_y = miny;
|
||||||
|
int cur_x = minx+1;
|
||||||
|
int cur_y = miny;
|
||||||
|
direction dir = direction.XPLUS;
|
||||||
|
ArrayList<int[]> linelist = new ArrayList<int[]>();
|
||||||
|
linelist.add(new int[] { init_x, init_y } ); // Add start point
|
||||||
|
while((cur_x != init_x) || (cur_y != init_y)) {
|
||||||
|
switch(dir) {
|
||||||
|
case XPLUS: /* Segment in X+ direction */
|
||||||
|
if(!blks.getFlag(cur_x+1, cur_y)) { /* Right turn? */
|
||||||
|
linelist.add(new int[] { cur_x+1, cur_y }); /* Finish line */
|
||||||
|
dir = direction.YPLUS; /* Change direction */
|
||||||
|
}
|
||||||
|
else if(!blks.getFlag(cur_x+1, cur_y-1)) { /* Straight? */
|
||||||
|
cur_x++;
|
||||||
|
}
|
||||||
|
else { /* Left turn */
|
||||||
|
linelist.add(new int[] { cur_x+1, cur_y }); /* Finish line */
|
||||||
|
dir = direction.YMINUS;
|
||||||
|
cur_x++; cur_y--;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case YPLUS: /* Segment in Y+ direction */
|
||||||
|
if(!blks.getFlag(cur_x, cur_y+1)) { /* Right turn? */
|
||||||
|
linelist.add(new int[] { cur_x+1, cur_y+1 }); /* Finish line */
|
||||||
|
dir = direction.XMINUS; /* Change direction */
|
||||||
|
}
|
||||||
|
else if(!blks.getFlag(cur_x+1, cur_y+1)) { /* Straight? */
|
||||||
|
cur_y++;
|
||||||
|
}
|
||||||
|
else { /* Left turn */
|
||||||
|
linelist.add(new int[] { cur_x+1, cur_y+1 }); /* Finish line */
|
||||||
|
dir = direction.XPLUS;
|
||||||
|
cur_x++; cur_y++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case XMINUS: /* Segment in X- direction */
|
||||||
|
if(!blks.getFlag(cur_x-1, cur_y)) { /* Right turn? */
|
||||||
|
linelist.add(new int[] { cur_x, cur_y+1 }); /* Finish line */
|
||||||
|
dir = direction.YMINUS; /* Change direction */
|
||||||
|
}
|
||||||
|
else if(!blks.getFlag(cur_x-1, cur_y+1)) { /* Straight? */
|
||||||
|
cur_x--;
|
||||||
|
}
|
||||||
|
else { /* Left turn */
|
||||||
|
linelist.add(new int[] { cur_x, cur_y+1 }); /* Finish line */
|
||||||
|
dir = direction.YPLUS;
|
||||||
|
cur_x--; cur_y++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case YMINUS: /* Segment in Y- direction */
|
||||||
|
if(!blks.getFlag(cur_x, cur_y-1)) { /* Right turn? */
|
||||||
|
linelist.add(new int[] { cur_x, cur_y }); /* Finish line */
|
||||||
|
dir = direction.XPLUS; /* Change direction */
|
||||||
|
}
|
||||||
|
else if(!blks.getFlag(cur_x-1, cur_y-1)) { /* Straight? */
|
||||||
|
cur_y--;
|
||||||
|
}
|
||||||
|
else { /* Left turn */
|
||||||
|
linelist.add(new int[] { cur_x, cur_y }); /* Finish line */
|
||||||
|
dir = direction.XMINUS;
|
||||||
|
cur_x--; cur_y--;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
Map<String,Integer>[] coordlist = new Map[linelist.size()];
|
||||||
|
for(int i = 0; i < linelist.size(); i++) {
|
||||||
|
coordlist[i] = new HashMap<String,Integer>();
|
||||||
|
coordlist[i].put("x", linelist.get(i)[0] * townblocksize);
|
||||||
|
coordlist[i].put("z", linelist.get(i)[1] * townblocksize);
|
||||||
|
}
|
||||||
|
rslt = new HashMap<String,Object>();
|
||||||
|
rslt.put("points", coordlist);
|
||||||
|
/* Add other data */
|
||||||
|
String mayor = p.getProperty("mayor");
|
||||||
|
if(mayor != null) rslt.put("mayor", mayor);
|
||||||
|
String nation = p.getProperty("nation");
|
||||||
|
if(nation != null) rslt.put("nation", nation);
|
||||||
|
String assistants = p.getProperty("assistants");
|
||||||
|
if(assistants != null) rslt.put("assistants", assistants);
|
||||||
|
String residents = p.getProperty("residents");
|
||||||
|
if(residents != null) rslt.put("residents", residents);
|
||||||
|
Map<String,String> flags = new HashMap<String,String>();
|
||||||
|
for(String f : FLAGS) {
|
||||||
|
String fval = p.getProperty(f);
|
||||||
|
if(fval != null) flags.put(f, fval);
|
||||||
|
}
|
||||||
|
rslt.put("flags", flags);
|
||||||
|
|
||||||
|
return rslt;
|
||||||
|
}
|
||||||
|
}
|
@ -110,6 +110,25 @@ components:
|
|||||||
# hiddenregions:
|
# hiddenregions:
|
||||||
# - hiddenplace
|
# - hiddenplace
|
||||||
# - secretsite
|
# - secretsite
|
||||||
|
#- class: org.dynmap.regions.RegionsComponent
|
||||||
|
# type: regions
|
||||||
|
# name: Towny
|
||||||
|
# use3dregions: false
|
||||||
|
# infowindow: '<div class="infowindow"><span style="font-size:120%;">%regionname%</span><br /> Mayor <span style="font-weight:bold;">%playerowners%</span><br /> Associates <span style="font-weight:bold;">%playermanagers%</span><br/>Flags<br /><span style="font-weight:bold;">%flags%</span></div>'
|
||||||
|
# regionstyle:
|
||||||
|
# strokeColor: "#FF0000"
|
||||||
|
# strokeOpacity: 0.8
|
||||||
|
# strokeWeight: 3
|
||||||
|
# fillColor: "#FF0000"
|
||||||
|
# fillOpacity: 0.35
|
||||||
|
# # Optional setting to limit which regions to show, by name - if commented out, all regions are shown
|
||||||
|
# visibleregions:
|
||||||
|
# - homebase
|
||||||
|
# - miningsite
|
||||||
|
# # Optional setting to hide specific regions, by name
|
||||||
|
# hiddenregions:
|
||||||
|
# - hiddenplace
|
||||||
|
# - secretsite
|
||||||
#- class: org.dynmap.TestComponent
|
#- class: org.dynmap.TestComponent
|
||||||
# stuff: "This is some configuration-value"
|
# stuff: "This is some configuration-value"
|
||||||
|
|
||||||
|
@ -115,8 +115,11 @@ componentconstructors['regions'] = function(dynmap, configuration) {
|
|||||||
popup = popup.replace('%regionname%', name);
|
popup = popup.replace('%regionname%', name);
|
||||||
popup = popup.replace('%playerowners%', join(region.owners.players));
|
popup = popup.replace('%playerowners%', join(region.owners.players));
|
||||||
popup = popup.replace('%groupowners%', join(region.owners.groups));
|
popup = popup.replace('%groupowners%', join(region.owners.groups));
|
||||||
|
popup = popup.replace('%playermanagers%', join(region.associates || ""));
|
||||||
popup = popup.replace('%playermembers%', join(members.players));
|
popup = popup.replace('%playermembers%', join(members.players));
|
||||||
popup = popup.replace('%groupmembers%', join(members.groups));
|
popup = popup.replace('%groupmembers%', join(members.groups));
|
||||||
|
popup = popup.replace('%parent%', region.parent || "");
|
||||||
|
popup = popup.replace('%priority%', region.priority || "");
|
||||||
var regionflags = "";
|
var regionflags = "";
|
||||||
$.each(region.flags, function(name, value) {
|
$.each(region.flags, function(name, value) {
|
||||||
regionflags = regionflags + "<span>" + name + ": " + value + "</span><br>";
|
regionflags = regionflags + "<span>" + name + ": " + value + "</span><br>";
|
||||||
|
36
web/js/regions_Towny.js
Normal file
36
web/js/regions_Towny.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
regionConstructors['Towny'] = function(dynmap, configuration) {
|
||||||
|
// Helper function.
|
||||||
|
function createOutlineFromRegion(region, outCreator) {
|
||||||
|
var xarray = [];
|
||||||
|
var zarray = [];
|
||||||
|
if(region.points) {
|
||||||
|
var i;
|
||||||
|
for(i = 0; i < region.points.length; i++) {
|
||||||
|
xarray[i] = region.points[i].x;
|
||||||
|
zarray[i] = region.points[i].z;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var ymin = 64;
|
||||||
|
var ymax = 65;
|
||||||
|
|
||||||
|
return outCreator(xarray, ymax, ymin, zarray);
|
||||||
|
}
|
||||||
|
|
||||||
|
var regionFile = 'towny_'+configuration.worldName+'.json';
|
||||||
|
$.getJSON('standalone/'+regionFile, function(data) {
|
||||||
|
var boxLayers = [];
|
||||||
|
$.each(data, function(name, region) {
|
||||||
|
var outLayer = createOutlineFromRegion(region, configuration.createOutlineLayer);
|
||||||
|
if (outLayer) {
|
||||||
|
outLayer.bindPopup(configuration.createPopupContent(name,
|
||||||
|
$.extend(region, {
|
||||||
|
owners: { players: [region.mayor] },
|
||||||
|
members: { players: [ region.residents ] }
|
||||||
|
})));
|
||||||
|
boxLayers.push(outLayer);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
configuration.result(new L.LayerGroup(boxLayers));
|
||||||
|
|
||||||
|
});
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user