Added server-to-client configuration and maptype-configuration: enables serverside configuration of maps and updaterate.
This commit is contained in:
parent
e47b4dc49f
commit
1beb4fa466
10 changed files with 573 additions and 150 deletions
|
|
@ -1,6 +1,12 @@
|
|||
package org.dynmap;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.Location;
|
||||
|
|
@ -15,7 +21,7 @@ public class MapManager extends Thread {
|
|||
|
||||
private World world;
|
||||
private Debugger debugger;
|
||||
private MapType map;
|
||||
private MapType[] maps;
|
||||
public StaleQueue staleQueue;
|
||||
public ChatQueue chatQueue;
|
||||
public PlayerList playerList;
|
||||
|
|
@ -67,7 +73,29 @@ public class MapManager extends Thread {
|
|||
if (!tileDirectory.isDirectory())
|
||||
tileDirectory.mkdirs();
|
||||
|
||||
map = new KzedMap(this, world, debugger, configuration);
|
||||
maps = loadMapTypes(configuration);
|
||||
}
|
||||
|
||||
private MapType[] loadMapTypes(ConfigurationNode configuration) {
|
||||
List<?> configuredMaps = (List<?>)configuration.getProperty("maps");
|
||||
ArrayList<MapType> mapTypes = new ArrayList<MapType>();
|
||||
for(Object configuredMapObj : configuredMaps) {
|
||||
try {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> configuredMap = (Map<String, Object>)configuredMapObj;
|
||||
String typeName = (String)configuredMap.get("class");
|
||||
log.info("Loading map '" + typeName.toString() + "'...");
|
||||
Class<?> mapTypeClass = Class.forName(typeName);
|
||||
Constructor<?> constructor = mapTypeClass.getConstructor(MapManager.class, World.class, Debugger.class, Map.class);
|
||||
MapType mapType = (MapType)constructor.newInstance(this, world, debugger, configuredMap);
|
||||
mapTypes.add(mapType);
|
||||
} catch (Exception e) {
|
||||
debugger.error("Error loading map", e);
|
||||
}
|
||||
}
|
||||
MapType[] result = new MapType[mapTypes.size()];
|
||||
mapTypes.toArray(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/* initialize and start map manager */
|
||||
|
|
@ -142,7 +170,9 @@ public class MapManager extends Thread {
|
|||
}
|
||||
|
||||
public void touch(int x, int y, int z) {
|
||||
map.touch(new Location(world, x, y, z));
|
||||
for (int i = 0; i < maps.length; i++) {
|
||||
maps[i].touch(new Location(world, x, y, z));
|
||||
}
|
||||
}
|
||||
|
||||
public void invalidateTile(MapTile tile) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package org.dynmap.kzedmap;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.util.Map;
|
||||
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.util.config.ConfigurationNode;
|
||||
|
|
@ -8,8 +9,8 @@ import org.dynmap.debug.Debugger;
|
|||
|
||||
public class CaveTileRenderer extends DefaultTileRenderer {
|
||||
|
||||
public CaveTileRenderer(String name, Debugger debugger, ConfigurationNode configuration) {
|
||||
super(name, debugger, configuration);
|
||||
public CaveTileRenderer(Debugger debugger, Map<String, Object> configuration) {
|
||||
super(debugger, configuration);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -5,11 +5,11 @@ import java.awt.image.BufferedImage;
|
|||
import java.awt.image.WritableRaster;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.util.config.ConfigurationNode;
|
||||
import org.dynmap.debug.Debugger;
|
||||
|
||||
public class DefaultTileRenderer implements MapTileRenderer {
|
||||
|
|
@ -20,9 +20,9 @@ public class DefaultTileRenderer implements MapTileRenderer {
|
|||
return name;
|
||||
}
|
||||
|
||||
public DefaultTileRenderer(String name, Debugger debugger, ConfigurationNode configuration) {
|
||||
this.name = name;
|
||||
public DefaultTileRenderer(Debugger debugger, Map<String, Object> configuration) {
|
||||
this.debugger = debugger;
|
||||
name = (String)configuration.get("prefix");
|
||||
}
|
||||
|
||||
public void render(KzedMapTile tile, String path) {
|
||||
|
|
|
|||
|
|
@ -4,18 +4,24 @@ import java.awt.Color;
|
|||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Scanner;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.util.config.ConfigurationNode;
|
||||
import org.dynmap.MapType;
|
||||
import org.dynmap.MapManager;
|
||||
import org.dynmap.MapTile;
|
||||
import org.dynmap.MapType;
|
||||
import org.dynmap.debug.Debugger;
|
||||
|
||||
public class KzedMap extends MapType {
|
||||
protected static final Logger log = Logger.getLogger("Minecraft");
|
||||
|
||||
/* dimensions of a map tile */
|
||||
public static final int tileWidth = 128;
|
||||
public static final int tileHeight = 128;
|
||||
|
|
@ -34,18 +40,38 @@ public class KzedMap extends MapType {
|
|||
MapTileRenderer[] renderers;
|
||||
ZoomedTileRenderer zoomrenderer;
|
||||
|
||||
public KzedMap(MapManager manager, World world, Debugger debugger, ConfigurationNode configuration) {
|
||||
public KzedMap(MapManager manager, World world, Debugger debugger, Map<String, Object> configuration) {
|
||||
super(manager, world, debugger);
|
||||
if (colors == null) {
|
||||
colors = loadColorSet("colors.txt");
|
||||
}
|
||||
renderers = new MapTileRenderer[] {
|
||||
new DefaultTileRenderer("t", debugger, configuration),
|
||||
new CaveTileRenderer("ct", debugger, configuration),
|
||||
};
|
||||
|
||||
renderers = loadRenderers(configuration);
|
||||
zoomrenderer = new ZoomedTileRenderer(debugger, configuration);
|
||||
}
|
||||
|
||||
private MapTileRenderer[] loadRenderers(Map<String, Object> configuration) {
|
||||
List<?> configuredRenderers = (List<?>)configuration.get("renderers");
|
||||
ArrayList<MapTileRenderer> renderers = new ArrayList<MapTileRenderer>();
|
||||
for(Object configuredRendererObj : configuredRenderers) {
|
||||
try {
|
||||
@SuppressWarnings("unchecked")
|
||||
Map<String, Object> configuredRenderer = (Map<String, Object>)configuredRendererObj;
|
||||
String typeName = (String)configuredRenderer.get("class");
|
||||
log.info("Loading renderer '" + typeName.toString() + "'...");
|
||||
Class<?> mapTypeClass = Class.forName(typeName);
|
||||
Constructor<?> constructor = mapTypeClass.getConstructor(Debugger.class, Map.class);
|
||||
MapTileRenderer mapTileRenderer = (MapTileRenderer)constructor.newInstance(getDebugger(), configuredRenderer);
|
||||
renderers.add(mapTileRenderer);
|
||||
} catch (Exception e) {
|
||||
getDebugger().error("Error loading renderer", e);
|
||||
}
|
||||
}
|
||||
MapTileRenderer[] result = new MapTileRenderer[renderers.size()];
|
||||
renderers.toArray(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void touch(Location l) {
|
||||
int x = l.getBlockX();
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import java.awt.RenderingHints;
|
|||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
|
|
@ -14,7 +15,7 @@ import org.dynmap.debug.Debugger;
|
|||
public class ZoomedTileRenderer {
|
||||
protected Debugger debugger;
|
||||
|
||||
public ZoomedTileRenderer(Debugger debugger, ConfigurationNode configuration) {
|
||||
public ZoomedTileRenderer(Debugger debugger, Map<String, Object> configuration) {
|
||||
this.debugger = debugger;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue