From 8957ab7c31f9311b3d0feb430c737e012bf59dbb Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Thu, 28 Jul 2011 10:01:54 -0500 Subject: [PATCH 1/9] Fix message - blockform -> blockformed --- src/main/java/org/dynmap/DynmapPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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"); From 4622b42aedb0d82294a9951ca3d6f9dc9591c95c Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Thu, 28 Jul 2011 10:11:34 -0500 Subject: [PATCH 2/9] Fix map edge detection to only use lack-of-chunks: fix skylands premature end-of-render issue --- src/main/java/org/dynmap/MapManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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)) { From 4824388c6b9e85c69c52788259c10b59a3636e0e Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Thu, 28 Jul 2011 23:51:53 -0500 Subject: [PATCH 3/9] Update zoom range to match selected map --- web/js/map.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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'); From 47194defca3055f045c09f9a3ec288effe455d6b Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Fri, 29 Jul 2011 09:50:50 -0500 Subject: [PATCH 4/9] Add support for Subzones (1 tier) --- web/js/regions_Residence.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/web/js/regions_Residence.js b/web/js/regions_Residence.js index 2217d9ef..822e05d3 100644 --- a/web/js/regions_Residence.js +++ b/web/js/regions_Residence.js @@ -17,7 +17,17 @@ 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)); From 5bf8010bbbb849fab1cd1346fbdfd26d68382961 Mon Sep 17 00:00:00 2001 From: FrozenCow Date: Fri, 29 Jul 2011 17:14:58 +0200 Subject: [PATCH 5/9] Fixed styling and owner/member texts of regions. --- web/css/regions.css | 4 ---- web/js/regions.js | 16 ++++++++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) 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/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() { From 95128df6b9f2741286b9c9ca5a25d9337044f8d0 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Fri, 29 Jul 2011 10:30:59 -0500 Subject: [PATCH 6/9] Fix nesting - iterating over areas versus residences --- web/js/regions_Residence.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/web/js/regions_Residence.js b/web/js/regions_Residence.js index 822e05d3..a8b5c0cd 100644 --- a/web/js/regions_Residence.js +++ b/web/js/regions_Residence.js @@ -17,15 +17,15 @@ 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); - }); + }); + $.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); }); }); } From 29e42137c99ad5948cb3bcaf1865af9c7f28f627 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Fri, 29 Jul 2011 14:28:29 -0500 Subject: [PATCH 7/9] Fix autopan on chatbaloons - can be off now :) --- web/js/chatballoon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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); From 6c42b399f4b194254b2c403d029115529cf01954 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Sat, 30 Jul 2011 01:22:05 -0500 Subject: [PATCH 8/9] Improve texture rendering for redstone wire --- .../org/dynmap/hdmap/IsoHDPerspective.java | 60 +++++++++ .../java/org/dynmap/hdmap/TexturePack.java | 21 +++- src/main/resources/models.txt | 116 +++++++++++++++--- src/main/resources/texture.txt | 4 +- 4 files changed, 179 insertions(+), 22 deletions(-) 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< Date: Sat, 30 Jul 2011 02:13:45 -0500 Subject: [PATCH 9/9] Make JSON unicode encoding more thorough - don't assume anything outside ASCII should not be escaped --- src/main/java/org/dynmap/web/Json.java | 48 +++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/dynmap/web/Json.java b/src/main/java/org/dynmap/web/Json.java index 17c1d54f..ea0a7f84 100644 --- a/src/main/java/org/dynmap/web/Json.java +++ b/src/main/java/org/dynmap/web/Json.java @@ -15,13 +15,59 @@ public class Json { return sb.toString(); } + public static void escape(String s, StringBuilder s2) { + for(int i=0;i='\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) {