diff --git a/src/main/java/org/dynmap/DynmapPlugin.java b/src/main/java/org/dynmap/DynmapPlugin.java index 18f171f2..6fb852d5 100644 --- a/src/main/java/org/dynmap/DynmapPlugin.java +++ b/src/main/java/org/dynmap/DynmapPlugin.java @@ -406,7 +406,7 @@ public class DynmapPlugin extends JavaPlugin { pm.registerEvent(org.bukkit.event.Event.Type.BLOCK_PLACE, renderTrigger, org.bukkit.event.Event.Priority.Monitor, this); onbreak = isTrigger("blockbreak"); pm.registerEvent(org.bukkit.event.Event.Type.BLOCK_BREAK, renderTrigger, org.bukkit.event.Event.Priority.Monitor, this); - if(isTrigger("snowform")) Log.info("The 'snowform' trigger has been deprecated due to Bukkit changes - use 'blockform'"); + if(isTrigger("snowform")) Log.info("The 'snowform' trigger has been deprecated due to Bukkit changes - use 'blockformed'"); onleaves = isTrigger("leavesdecay"); pm.registerEvent(org.bukkit.event.Event.Type.LEAVES_DECAY, renderTrigger, org.bukkit.event.Event.Priority.Monitor, this); onburn = isTrigger("blockburn"); diff --git a/src/main/java/org/dynmap/MapManager.java b/src/main/java/org/dynmap/MapManager.java index 90cd4be7..3c7b0019 100644 --- a/src/main/java/org/dynmap/MapManager.java +++ b/src/main/java/org/dynmap/MapManager.java @@ -310,7 +310,9 @@ public class MapManager { tile.render(cache); } else { - if ((cache.isEmpty() == false) && tile.render(cache)) { + /* Switch to not checking if rendered tile is blank - breaks us on skylands, where tiles can be nominally blank - just work off chunk cache empty */ + if (cache.isEmpty() == false) { + tile.render(cache); found.remove(tile); rendered.add(tile); for (MapTile adjTile : map.getAdjecentTiles(tile)) { diff --git a/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java b/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java index 57562d83..41bb284b 100644 --- a/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java +++ b/src/main/java/org/dynmap/hdmap/IsoHDPerspective.java @@ -76,6 +76,7 @@ public class IsoHDPerspective implements HDPerspective { private static final int CHEST_BLKTYPEID = 54; private static final int FENCE_BLKTYPEID = 85; + private static final int REDSTONE_BLKTYPEID = 55; private enum ChestData { SINGLE_WEST, SINGLE_SOUTH, SINGLE_EAST, SINGLE_NORTH, LEFT_WEST, LEFT_SOUTH, LEFT_EAST, LEFT_NORTH, RIGHT_WEST, RIGHT_SOUTH, RIGHT_EAST, RIGHT_NORTH @@ -386,6 +387,62 @@ public class IsoHDPerspective implements HDPerspective { return cd.ordinal(); } + /** + * Generate redstone wire model data: + * 0 = NSEW wire + * 1 = NS wire + * 2 = EW wire + * 3 = NE wire + * 4 = NW wire + * 5 = SE wire + * 6 = SW wire + * 7 = NSE wire + * 8 = NSW wire + * 9 = NEW wire + * 10 = SEW wire + * @param mapiter + * @return + */ + private int generateRedstoneWireBlockData(MapIterator mapiter) { + /* Check adjacent block IDs */ + int ids[] = { mapiter.getBlockTypeIDAt(BlockStep.Z_PLUS), /* To west */ + mapiter.getBlockTypeIDAt(BlockStep.X_PLUS), /* To south */ + mapiter.getBlockTypeIDAt(BlockStep.Z_MINUS), /* To east */ + mapiter.getBlockTypeIDAt(BlockStep.X_MINUS) }; /* To north */ + int flags = 0; + for(int i = 0; i < 4; i++) + if(ids[i] == REDSTONE_BLKTYPEID) flags |= (1<='\u0000' && ch<='\u001F') || (ch>='\u007F')){ + String ss=Integer.toHexString(ch); + s2.append("\\u"); + for(int k=0;k<4-ss.length();k++){ + s2.append('0'); + } + s2.append(ss.toUpperCase()); + } + else{ + s2.append(ch); + } + } + }//for + } + public static void appendJson(Object o, StringBuilder s) { if (o == null) { s.append("null"); } else if (o instanceof Boolean) { s.append(((Boolean) o) ? "true" : "false"); } else if (o instanceof String) { - s.append("\"" + JSONObject.escape((String)o) + "\""); + s.append("\""); + escape((String)o, s); + s.append("\""); } else if (o instanceof Integer || o instanceof Long || o instanceof Float || o instanceof Double) { s.append(o.toString()); } else if (o instanceof Map) { diff --git a/src/main/resources/models.txt b/src/main/resources/models.txt index 2816a091..dd7e4ce5 100644 --- a/src/main/resources/models.txt +++ b/src/main/resources/models.txt @@ -903,25 +903,103 @@ rotate:id=68,data=2,rot=270 # Wall sign - facing south block:id=68,data=5,scale=4 rotate:id=68,data=2,rot=90 -# Redstone wire -block:id=55,data=*,scale=16 -layer:0 --------**------- ---------**------ --------**------- -------**-------- --------**------- ---------**------ --*---*-**---*--- -***-******-***-* -*-***-******-*** ----*---**-*---*- -------**-------- --------**------- ---------**------ --------**------- -------**-------- --------**------- +# Redstone wire (NSEW) +block:id=55,data=0,scale=16 +layer:0,1 +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +**************** +**************** +**************** +**************** +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +# Redstone wire (NS) +block:id=55,data=1,scale=16 +layer:0,1 +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +# Redstone wire (EW) +block:id=55,data=2,scale=16 +rotate:id=55,data=1,rot=90 +# Redstone wire (NE) +block:id=55,data=3,scale=16 +layer:0,1 +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------********** +------********** +------********** +------********** +---------------- +---------------- +---------------- +---------------- +---------------- +---------------- +# Redstone wire (NW) +block:id=55,data=4,scale=16 +rotate:id=55,data=3,rot=270 +# Redstone wire (SE) +block:id=55,data=5,scale=16 +rotate:id=55,data=3,rot=90 +# Redstone wire (SW) +block:id=55,data=6,scale=16 +rotate:id=55,data=3,rot=180 +# Redstone wire (NSE) +block:id=55,data=7,scale=16 +layer:0,1 +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +------********** +------********** +------********** +------********** +------****------ +------****------ +------****------ +------****------ +------****------ +------****------ +# Redstone wire (NSW) +block:id=55,data=8,scale=16 +rotate:id=55,data=7,rot=180 +# Redstone wire (NEW) +block:id=55,data=9,scale=16 +rotate:id=55,data=7,rot=270 +# Redstone wire (SEW) +block:id=55,data=10,scale=16 +rotate:id=55,data=7,rot=90 # Signpost - facing west block:id=63,data=0,scale=16 layer:0,1,2,3,4,5 diff --git a/src/main/resources/texture.txt b/src/main/resources/texture.txt index 7ae56ee0..39e4ad9f 100644 --- a/src/main/resources/texture.txt +++ b/src/main/resources/texture.txt @@ -255,8 +255,8 @@ block:id=54,data=9,topbottom=25,south=42,north=57,east=26,west=26 block:id=54,data=10,topbottom=25,south=26,north=26,east=42,west=57 # Chest - right side of double, facing north block:id=54,data=11,topbottom=25,south=57,north=42,east=26,west=26 -# Redstone wire (model handling shape - use red wool for color) -block:id=55,allfaces=129,transparency=TRANSPARENT +# Redstone wire (use processed tile - pretoned to active) +block:id=55,allfaces=180,transparency=TRANSPARENT # Diamond ore block:id=56,allfaces=50 # Diamond block diff --git a/web/css/regions.css b/web/css/regions.css index 8a3cb79b..efc6fcb1 100644 --- a/web/css/regions.css +++ b/web/css/regions.css @@ -11,10 +11,6 @@ font-weight: bold; } -.regioninfo .owners { - margin-left: 20px; -} - .regioninfo .regionflags .regionflag { display: block; font-size: 90%; diff --git a/web/js/chatballoon.js b/web/js/chatballoon.js index f52966f3..250c27a9 100644 --- a/web/js/chatballoon.js +++ b/web/js/chatballoon.js @@ -26,7 +26,7 @@ componentconstructors['chatballoon'] = function(dynmap, configuration) { var popup = me.chatpopups[message.name]; if (!popup) { me.chatpopups[message.name] = popup = { - layer: new L.Popup({autopan: false, closeButton: false}), + layer: new L.Popup({autoPan: configuration.focuschatballoons, closeButton: false}), content: $('
').addClass('balloonmessages')[0] }; popup.layer.setContent(popup.content); diff --git a/web/js/map.js b/web/js/map.js index fe978e1f..9771c18c 100644 --- a/web/js/map.js +++ b/web/js/map.js @@ -319,6 +319,11 @@ DynMap.prototype = { me.world = mapWorld; me.maptype = map; + me.map.addLayer(me.maptype); + if(me.maptype.options.maxZoom < prevzoom) + prevzoom = me.maptype.options.maxZoom; + me.map.options.maxZoom = me.maptype.options.maxZoom; + me.map.options.minZoom = me.maptype.options.minZoom; if (projectionChanged || worldChanged) { var centerPoint; @@ -329,11 +334,11 @@ DynMap.prototype = { else { centerPoint = me.map.getCenter(); } - me.map.setView(centerPoint, 0, true); + me.map.setView(centerPoint, prevzoom, true); + } + else { + me.map.setZoom(prevzoom); } - me.map.addLayer(me.maptype); - - me.map.setZoom(prevzoom); if (worldChanged) { $(me).trigger('worldchanged'); diff --git a/web/js/regions.js b/web/js/regions.js index f0f51486..c9351087 100644 --- a/web/js/regions.js +++ b/web/js/regions.js @@ -69,16 +69,24 @@ componentconstructors['regions'] = function(dynmap, configuration) { } function createPopupContent(name, region) { + function join(a) { + if (a instanceof Array) { + return a.join(', '); + } else if (typeof a === 'string') { + return a; + } + return null; + } var members = region.members || {}; return $('
').addClass('regioninfo') .append($('').addClass('regionname').text(name)) .append($('').addClass('owners') - .append(region.owners.players && $('').addClass('playerowners').text(region.owners.players.concat())) - .append(region.owners.groups && $('').addClass('groupowners').text(region.owners.groups.concat())) + .append(region.owners.players && $('').addClass('playerowners').text(join(region.owners.players))) + .append(region.owners.groups && $('').addClass('groupowners').text(join(region.owners.groups))) ) .append($('').addClass('members') - .append(members.players && $('').addClass('playermembers').text(members.players.concat())) - .append(members.groups && $('').addClass('groupmembers').text(members.groups.concat())) + .append(members.players && $('').addClass('playermembers').text(join(members.players))) + .append(members.groups && $('').addClass('groupmembers').text(join(members.groups))) ) .append(region.parent && $('').addClass('regionparent').text(region.parent)) .append(region.flags && function() { diff --git a/web/js/regions_Residence.js b/web/js/regions_Residence.js index 2217d9ef..a8b5c0cd 100644 --- a/web/js/regions_Residence.js +++ b/web/js/regions_Residence.js @@ -18,6 +18,16 @@ regionConstructors['Residence'] = function(dynmap, configuration) { boxLayers.push(boxLayer); }); + $.each(residence.Subzones, function(szname, subzone) { + $.each(subzone.Areas, function(name2, area2) { + var subzoneLayer = configuration.createBoxLayer(area2.X1, area2.X2, area2.Y1, area2.Y2, area2.Z1, area2.Z2); + subzoneLayer.bindPopup(configuration.createPopupContent(name2, $.extend(subzone, { + owners: { players: [subzone.Permissions.Owner] }, + flags: subzone.Permissions.AreaFlags + }))); + boxLayers.push(subzoneLayer); + }); + }); } }); configuration.result(new L.LayerGroup(boxLayers));