From 689df03b78e18164ec7156cda1010af5f286bdb5 Mon Sep 17 00:00:00 2001 From: Arthur Mayer Date: Mon, 7 Mar 2011 03:45:42 +0100 Subject: [PATCH 01/11] merged latest changes, added ability to embed dynmap into a website. --- web/dynmap_style.css | 23 +---------------------- web/index.html | 1 + web/standalone.css | 24 ++++++++++++++++++++++++ 3 files changed, 26 insertions(+), 22 deletions(-) create mode 100644 web/standalone.css diff --git a/web/dynmap_style.css b/web/dynmap_style.css index 0f9c88ff..b25a4e4c 100644 --- a/web/dynmap_style.css +++ b/web/dynmap_style.css @@ -2,23 +2,6 @@ * Page setup */ -html { - height: 100% -} - -body { - height: 100%; - - font-family: sans-serif; - font-size: 11px; - - color: #fff; - background: #000; - - margin: 0px; - padding: 0px ; -} - .dynmap .map .tile img, img { image-rendering: -moz-crisp-edges; -ms-interpolation-mode: nearest-neighbor; @@ -539,8 +522,4 @@ body { position: relative; top: -3px; left: 0px; -} - -/* Chat Balloons */ - -#content { color: #000; } \ No newline at end of file +} \ No newline at end of file diff --git a/web/index.html b/web/index.html index 6f57c402..d87bcf22 100644 --- a/web/index.html +++ b/web/index.html @@ -10,6 +10,7 @@ + diff --git a/web/standalone.css b/web/standalone.css new file mode 100644 index 00000000..f8eed6e1 --- /dev/null +++ b/web/standalone.css @@ -0,0 +1,24 @@ +/******************* + * Page setup + */ + +html { + height: 100% +} + +body { + height: 100%; + + font-family: sans-serif; + font-size: 11px; + + color: #fff; + background: #000; + + margin: 0px; + padding: 0px ; +} + +/* Chat Balloons */ + +#content { color: #000; } \ No newline at end of file From 32fdf9da86db875d34a35a5083041b9175b9be67 Mon Sep 17 00:00:00 2001 From: Arthur Mayer Date: Mon, 7 Mar 2011 07:07:48 +0100 Subject: [PATCH 02/11] added option to disable webchat input --- configuration.txt | 1 + src/main/java/org/dynmap/DynmapPlugin.java | 21 ++++++++------ web/map.js | 32 ++++++++++++---------- 3 files changed, 30 insertions(+), 24 deletions(-) mode change 100755 => 100644 configuration.txt diff --git a/configuration.txt b/configuration.txt old mode 100755 new mode 100644 index 10d54410..7bd144ae --- a/configuration.txt +++ b/configuration.txt @@ -69,6 +69,7 @@ web: # showchat: modal/balloons showchat: modal + allowchat: true messagettl: 15000 showplayerfacesonmap: true diff --git a/src/main/java/org/dynmap/DynmapPlugin.java b/src/main/java/org/dynmap/DynmapPlugin.java index 8ac9f555..9805c370 100644 --- a/src/main/java/org/dynmap/DynmapPlugin.java +++ b/src/main/java/org/dynmap/DynmapPlugin.java @@ -132,15 +132,18 @@ public class DynmapPlugin extends JavaPlugin { webServer.handlers.put("/up/configuration", new ClientConfigurationHandler((Map) configuration.getProperty("web"))); SendMessageHandler messageHandler = new SendMessageHandler(); - messageHandler.onMessageReceived.addListener(new Listener() { - @Override - public void triggered(Message t) { - mapManager.pushUpdate(new Client.WebChatMessage(t.name, t.message)); - log.info("[WEB]" + t.name + ": " + t.message); - getServer().broadcastMessage("[WEB]" + t.name + ": " + t.message); - } - }); - webServer.handlers.put("/up/sendmessage", messageHandler); + boolean allowchat = configuration.getBoolean("allowchat", true); + if (allowchat == true) { + messageHandler.onMessageReceived.addListener(new Listener() { + @Override + public void triggered(Message t) { + mapManager.pushUpdate(new Client.WebChatMessage(t.name, t.message)); + log.info("[WEB]" + t.name + ": " + t.message); + getServer().broadcastMessage("[WEB]" + t.name + ": " + t.message); + } + }); + webServer.handlers.put("/up/sendmessage", messageHandler); + } try { webServer.startServer(); diff --git a/web/map.js b/web/map.js index 326bf977..cce76d9e 100644 --- a/web/map.js +++ b/web/map.js @@ -202,21 +202,23 @@ DynMap.prototype = { var messagelist = me.messagelist = $('
') .addClass('messagelist') .appendTo(chat); - var chatinput = me.chatinput = $('') - .addClass('chatinput') - .attr({ - id: 'chatinput', - type: 'text', - value: '' - }) - .keydown(function(event) { - if (event.keyCode == '13') { - event.preventDefault(); - sendChat(chatinput.val()); - chatinput.val(''); - } - }) - .appendTo(chat); + if (me.options.allowchat === 'true') { + var chatinput = me.chatinput = $('') + .addClass('chatinput') + .attr({ + id: 'chatinput', + type: 'text', + value: '' + }) + .keydown(function(event) { + if (event.keyCode == '13') { + event.preventDefault(); + sendChat(chatinput.val()); + chatinput.val(''); + } + }) + .appendTo(chat); + } } // TODO: Enable hash-links. From bc7ddaf9d2da2c1f9239d4cdbbbead08ff13c0ca Mon Sep 17 00:00:00 2001 From: Arthur Mayer Date: Mon, 7 Mar 2011 07:13:32 +0100 Subject: [PATCH 03/11] some fix to allowchat --- 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 9805c370..0a8e635a 100644 --- a/src/main/java/org/dynmap/DynmapPlugin.java +++ b/src/main/java/org/dynmap/DynmapPlugin.java @@ -131,9 +131,9 @@ public class DynmapPlugin extends JavaPlugin { webServer.handlers.put("/up/", new ClientUpdateHandler(mapManager, playerList, getServer())); webServer.handlers.put("/up/configuration", new ClientConfigurationHandler((Map) configuration.getProperty("web"))); - SendMessageHandler messageHandler = new SendMessageHandler(); boolean allowchat = configuration.getBoolean("allowchat", true); if (allowchat == true) { + SendMessageHandler messageHandler = new SendMessageHandler(); messageHandler.onMessageReceived.addListener(new Listener() { @Override public void triggered(Message t) { From f4ba02cd23d5e2c83d567a120bde0d2fd53de843 Mon Sep 17 00:00:00 2001 From: Arthur Mayer Date: Mon, 7 Mar 2011 07:48:46 +0100 Subject: [PATCH 04/11] fix, json has boolean, so checking for boolean and not string. thanks dashkal for testing that --- web/map.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/map.js b/web/map.js index cce76d9e..5b4d53ad 100644 --- a/web/map.js +++ b/web/map.js @@ -202,7 +202,7 @@ DynMap.prototype = { var messagelist = me.messagelist = $('
') .addClass('messagelist') .appendTo(chat); - if (me.options.allowchat === 'true') { + if (me.options.allowchat === true) { var chatinput = me.chatinput = $('') .addClass('chatinput') .attr({ From fe93d372ab1ac6a0cf904959c8fd49f814a22d80 Mon Sep 17 00:00:00 2001 From: Arthur Mayer Date: Mon, 7 Mar 2011 08:10:30 +0100 Subject: [PATCH 05/11] css fixes, allow to use dynmap embedded into a website or standalone. --- web/embedded.css | 15 +++++++++++++++ web/index.html | 1 + web/standalone.css | 20 ++++++++++++++++---- 3 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 web/embedded.css diff --git a/web/embedded.css b/web/embedded.css new file mode 100644 index 00000000..84ff3806 --- /dev/null +++ b/web/embedded.css @@ -0,0 +1,15 @@ +/* Embedded into website */ + +#mcmap { + width: 100%; + height: 500px; +} + +.dynmap .sidebar { + width: 140px; /* original width 200px */ + margin-right: -143px; /* original margin 203px, sidebar width +2xborder 1px +1px to hide */ +} + +.dynmap .hitbar { + right: 140px; /* width of sidebar */ +} \ No newline at end of file diff --git a/web/index.html b/web/index.html index d87bcf22..6fa6557f 100644 --- a/web/index.html +++ b/web/index.html @@ -10,6 +10,7 @@ + diff --git a/web/standalone.css b/web/standalone.css index f8eed6e1..9343aa08 100644 --- a/web/standalone.css +++ b/web/standalone.css @@ -1,8 +1,7 @@ -/******************* - * Page setup - */ +/* Standalone Document */ html { + width: 100%; height: 100% } @@ -21,4 +20,17 @@ body { /* Chat Balloons */ -#content { color: #000; } \ No newline at end of file +#content { color: #000; } + +#mcmap { + height: 100%; +} + +.dynmap .sidebar { + width: 200px; /* original width 200px */ + margin-right: -203px; /* original margin 203px, sidebar width +2xborder 1px +1px to hide */ +} + +.dynmap .hitbar { + right: 200px; /* width of sidebar */ +} \ No newline at end of file From 07010f36ac205224beb0337f2b0118da7dfeb12d Mon Sep 17 00:00:00 2001 From: Arthur Mayer Date: Mon, 7 Mar 2011 08:14:41 +0100 Subject: [PATCH 06/11] another fix --- web/dynmap_style.css | 4 ++-- web/standalone.css | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/web/dynmap_style.css b/web/dynmap_style.css index b25a4e4c..a91166c5 100644 --- a/web/dynmap_style.css +++ b/web/dynmap_style.css @@ -28,8 +28,8 @@ */ #mcmap { - width: 100%; - height: 100% + /*width: 100%; + height: 100%*/ } .dynmap { diff --git a/web/standalone.css b/web/standalone.css index 9343aa08..a7031590 100644 --- a/web/standalone.css +++ b/web/standalone.css @@ -23,7 +23,8 @@ body { #content { color: #000; } #mcmap { - height: 100%; + width: 100%; + height: 100%; } .dynmap .sidebar { From 072924a2a5dca0941661d39abc78d0002f7bae24 Mon Sep 17 00:00:00 2001 From: FrozenCow Date: Mon, 7 Mar 2011 21:04:37 +0100 Subject: [PATCH 07/11] Renamed embedded.css to embedded_example.css. --- web/{embedded.css => embedded_example.css} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename web/{embedded.css => embedded_example.css} (100%) diff --git a/web/embedded.css b/web/embedded_example.css similarity index 100% rename from web/embedded.css rename to web/embedded_example.css From b985a55b920e09d55c57e689f720db8bf8783107 Mon Sep 17 00:00:00 2001 From: FrozenCow Date: Mon, 7 Mar 2011 22:07:34 +0100 Subject: [PATCH 08/11] Changed chat-mechanism a bit. --- configuration.txt | 10 ++- ...ner.java => DynmapPlayerChatListener.java} | 4 +- src/main/java/org/dynmap/DynmapPlugin.java | 83 ++++++++++--------- web/map.js | 58 +++++-------- 4 files changed, 75 insertions(+), 80 deletions(-) rename src/main/java/org/dynmap/{DynmapPlayerListener.java => DynmapPlayerChatListener.java} (90%) diff --git a/configuration.txt b/configuration.txt index 7bd144ae..8b7fbc11 100644 --- a/configuration.txt +++ b/configuration.txt @@ -67,14 +67,16 @@ web: # Interval the browser should poll for updates. updaterate: 2000 - # showchat: modal/balloons - showchat: modal - allowchat: true + showchatballoons: false + focuschatballoons: false + + showchatwindow: true + allowwebchat: true messagettl: 15000 showplayerfacesonmap: true showplayerfacesinmenu: true - focuschatballoons: false + joinmessage: "%playername% joined" quitmessage: "%playername% quit" diff --git a/src/main/java/org/dynmap/DynmapPlayerListener.java b/src/main/java/org/dynmap/DynmapPlayerChatListener.java similarity index 90% rename from src/main/java/org/dynmap/DynmapPlayerListener.java rename to src/main/java/org/dynmap/DynmapPlayerChatListener.java index 0dab13da..08fee3fd 100644 --- a/src/main/java/org/dynmap/DynmapPlayerListener.java +++ b/src/main/java/org/dynmap/DynmapPlayerChatListener.java @@ -4,10 +4,10 @@ import org.bukkit.event.player.PlayerChatEvent; import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerListener; -public class DynmapPlayerListener extends PlayerListener { +public class DynmapPlayerChatListener extends PlayerListener { DynmapPlugin plugin; - public DynmapPlayerListener(DynmapPlugin plugin) { + public DynmapPlayerChatListener(DynmapPlugin plugin) { this.plugin = plugin; } diff --git a/src/main/java/org/dynmap/DynmapPlugin.java b/src/main/java/org/dynmap/DynmapPlugin.java index 0a8e635a..10ec33f9 100644 --- a/src/main/java/org/dynmap/DynmapPlugin.java +++ b/src/main/java/org/dynmap/DynmapPlugin.java @@ -16,14 +16,12 @@ import java.util.logging.Logger; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.block.BlockDamageLevel; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.Event; import org.bukkit.event.Event.Priority; import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockDamageEvent; import org.bukkit.event.block.BlockListener; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.player.PlayerEvent; @@ -75,12 +73,12 @@ public class DynmapPlugin extends JavaPlugin { public void onEnable() { dataDirectory = this.getDataFolder(); - + configuration = new Configuration(new File(this.getDataFolder(), "configuration.txt")); configuration.load(); loadDebuggers(); - + tilesDirectory = getFile(configuration.getString("tilespath", "web/tiles")); if (!tilesDirectory.isDirectory() && !tilesDirectory.mkdirs()) { log.warning("Could not create directory for tiles ('" + tilesDirectory + "')."); @@ -131,18 +129,17 @@ public class DynmapPlugin extends JavaPlugin { webServer.handlers.put("/up/", new ClientUpdateHandler(mapManager, playerList, getServer())); webServer.handlers.put("/up/configuration", new ClientConfigurationHandler((Map) configuration.getProperty("web"))); - boolean allowchat = configuration.getBoolean("allowchat", true); - if (allowchat == true) { + if (configuration.getNode("web").getBoolean("allowwebchat", false)) { SendMessageHandler messageHandler = new SendMessageHandler(); - messageHandler.onMessageReceived.addListener(new Listener() { - @Override - public void triggered(Message t) { - mapManager.pushUpdate(new Client.WebChatMessage(t.name, t.message)); - log.info("[WEB]" + t.name + ": " + t.message); - getServer().broadcastMessage("[WEB]" + t.name + ": " + t.message); - } - }); - webServer.handlers.put("/up/sendmessage", messageHandler); + messageHandler.onMessageReceived.addListener(new Listener() { + @Override + public void triggered(Message t) { + mapManager.pushUpdate(new Client.WebChatMessage(t.name, t.message)); + log.info("[WEB]" + t.name + ": " + t.message); + getServer().broadcastMessage("[WEB]" + t.name + ": " + t.message); + } + }); + webServer.handlers.put("/up/sendmessage", messageHandler); } try { @@ -170,11 +167,11 @@ public class DynmapPlugin extends JavaPlugin { public boolean isTrigger(String s) { return enabledTriggers.contains(s); } - + public void registerEvents() { final PluginManager pm = getServer().getPluginManager(); final MapManager mm = mapManager; - + // To trigger rendering. { BlockListener renderTrigger = new BlockListener() { @@ -188,8 +185,10 @@ public class DynmapPlugin extends JavaPlugin { mm.touch(event.getBlock().getLocation()); } }; - if (isTrigger("blockplaced")) pm.registerEvent(Event.Type.BLOCK_PLACED, renderTrigger, Priority.Monitor, this); - if (isTrigger("blockbreak")) pm.registerEvent(Event.Type.BLOCK_BREAK, renderTrigger, Priority.Monitor, this); + if (isTrigger("blockplaced")) + pm.registerEvent(Event.Type.BLOCK_PLACED, renderTrigger, Priority.Monitor, this); + if (isTrigger("blockbreak")) + pm.registerEvent(Event.Type.BLOCK_BREAK, renderTrigger, Priority.Monitor, this); } { PlayerListener renderTrigger = new PlayerListener() { @@ -197,13 +196,16 @@ public class DynmapPlugin extends JavaPlugin { public void onPlayerJoin(PlayerEvent event) { mm.touch(event.getPlayer().getLocation()); } + @Override public void onPlayerMove(PlayerMoveEvent event) { mm.touch(event.getPlayer().getLocation()); } }; - if (isTrigger("playerjoin")) pm.registerEvent(Event.Type.PLAYER_JOIN, renderTrigger, Priority.Monitor, this); - if (isTrigger("playermove")) pm.registerEvent(Event.Type.PLAYER_MOVE, renderTrigger, Priority.Monitor, this); + if (isTrigger("playerjoin")) + pm.registerEvent(Event.Type.PLAYER_JOIN, renderTrigger, Priority.Monitor, this); + if (isTrigger("playermove")) + pm.registerEvent(Event.Type.PLAYER_MOVE, renderTrigger, Priority.Monitor, this); } { WorldListener renderTrigger = new WorldListener() { @@ -213,18 +215,30 @@ public class DynmapPlugin extends JavaPlugin { int z = event.getChunk().getZ() * 16 + 8; mm.touch(new Location(event.getWorld(), x, 127, z)); } - - /*@Override - public void onChunkGenerated(ChunkLoadEvent event) { - int x = event.getChunk().getX() * 16 + 8; - int z = event.getChunk().getZ() * 16 + 8; - mm.touch(new Location(event.getWorld(), x, 127, z)); - }*/ + + /* + * @Override public void onChunkGenerated(ChunkLoadEvent event) + * { int x = event.getChunk().getX() * 16 + 8; int z = + * event.getChunk().getZ() * 16 + 8; mm.touch(new + * Location(event.getWorld(), x, 127, z)); } + */ }; - if (isTrigger("chunkloaded")) pm.registerEvent(Event.Type.CHUNK_LOADED, renderTrigger, Priority.Monitor, this); + if (isTrigger("chunkloaded")) + pm.registerEvent(Event.Type.CHUNK_LOADED, renderTrigger, Priority.Monitor, this); //if (isTrigger("chunkgenerated")) pm.registerEvent(Event.Type.CHUNK_GENERATED, renderTrigger, Priority.Monitor, this); } - + + // To announce when players have joined/quit/chatted. + if (configuration.getNode("web").getBoolean("showchatballoons", false) || configuration.getNode("web").getBoolean("showchatwindow", false)) { + // To handle webchat. + PlayerListener playerListener = new DynmapPlayerChatListener(this); + //getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND, playerListener, Priority.Normal, this); + pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Monitor, this); + pm.registerEvent(Event.Type.PLAYER_LOGIN, playerListener, Priority.Monitor, this); + pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Monitor, this); + pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Monitor, this); + } + // To link configuration to real loaded worlds. WorldListener worldListener = new WorldListener() { @Override @@ -233,15 +247,6 @@ public class DynmapPlugin extends JavaPlugin { } }; pm.registerEvent(Event.Type.WORLD_LOADED, worldListener, Priority.Monitor, this); - - // To handle webchat. - PlayerListener playerListener = new DynmapPlayerListener(this); - //getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND, playerListener, Priority.Normal, this); - pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Monitor, this); - pm.registerEvent(Event.Type.PLAYER_LOGIN, playerListener, Priority.Monitor, this); - pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Monitor, this); - pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Monitor, this); - } private static File combinePaths(File parent, String path) { diff --git a/web/map.js b/web/map.js index 5b4d53ad..c4c9611b 100644 --- a/web/map.js +++ b/web/map.js @@ -195,14 +195,14 @@ DynMap.prototype = { .appendTo(container); // The chat - if (me.options.showchat === 'modal') { + if (me.options.showchatwindow) { var chat = me.chat = $('
') .addClass('chat') .appendTo(container); var messagelist = me.messagelist = $('
') .addClass('messagelist') .appendTo(chat); - if (me.options.allowchat === true) { + if (me.options.allowwebchat) { var chatinput = me.chatinput = $('') .addClass('chatinput') .attr({ @@ -308,30 +308,22 @@ DynMap.prototype = { } $.each(update.updates, function(index, update) { - swtch(update.type, { - tile: function() { - - if(me.lasttimestamp <= update.timestamp || !me.options.jsonfile) + // Only handle updates that are actually new. + if(!me.options.jsonfile || me.lasttimestamp <= update.timestamp) { + swtch(update.type, { + tile: function() { me.onTileUpdated(update.name); - }, - chat: function() { - if (!me.options.showchat) { - return; - } - if(me.lasttimestamp <= update.timestamp || !me.options.jsonfile) + }, + chat: function() { me.onPlayerChat(update.playerName, update.message); - }, - webchat: function() { - if (!me.options.showchat) { - return; - } - - if(me.lasttimestamp <= update.timestamp || !me.options.jsonfile) + }, + webchat: function() { me.onPlayerChat('[WEB]' + update.playerName, update.message); - } - }, function(type) { - console.log('Unknown type ', type, '!'); - }); + } + }, function(type) { + console.log('Unknown type ', type, '!'); + }); + } /* remove older messages from chat*/ //var timestamp = event.timeStamp; //var divs = $('div[rel]'); @@ -371,11 +363,9 @@ DynMap.prototype = { var d = new Date(); var now = d.getTime(); var popupIndex; - for (popupIndex in this.chatPopups) - { + for (popupIndex in this.chatPopups) { var popup = this.chatPopups[popupIndex]; - if (now - popup.popupTime > POPUP_LIFE) - { + if (now - popup.popupTime > POPUP_LIFE) { popup.infoWindow.close(); popup.infoWindow = null; delete this.chatPopups[popupIndex]; @@ -388,9 +378,8 @@ DynMap.prototype = { var map = me.map; var player = me.players[playerName]; var playerMarker = player && player.marker; - if (me.options.showchat === 'balloons') { - if (playerMarker) - { + if (me.options.showchatballoons) { + if (playerMarker) { var popup = chatPopups[playerName]; if (!popup) { popup = { lines: [ message ] }; @@ -399,14 +388,12 @@ DynMap.prototype = { } var MAX_LINES = 5; - if (popup.lines.length > MAX_LINES) - { + if (popup.lines.length > MAX_LINES) { popup.lines = popup.lines.slice(1); } var htmlMessage = '
' + playerName + "

"; var line; - for (line in popup.lines) - { + for (line in popup.lines) { htmlMessage = htmlMessage + popup.lines[line] + "
"; } htmlMessage = htmlMessage + "
"; @@ -423,7 +410,8 @@ DynMap.prototype = { popup.infoWindow.open(map, playerMarker); this.chatPopups[playerName] = popup; } - } else if (me.options.showchat === 'modal') { + } + if (me.options.showchatwindow) { var messagelist = me.messagelist; var messageRow = $('
') From d98fe89c4293384ceac6b28741f5678618346ac7 Mon Sep 17 00:00:00 2001 From: FrozenCow Date: Tue, 8 Mar 2011 01:22:03 +0100 Subject: [PATCH 09/11] Fixed not being able to follow players. --- web/map.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/map.js b/web/map.js index c4c9611b..5d6c33d8 100644 --- a/web/map.js +++ b/web/map.js @@ -517,7 +517,9 @@ DynMap.prototype = { .text(player.name) ) .click(function(e) { - me.followPlayer(null); + if (me.followingPlayer !== player) { + me.followPlayer(null); + } me.panTo(player.location); }) .appendTo(me.playerlist); From 02e0f0aa24784a0607b053f81f1b0728c3904c2d Mon Sep 17 00:00:00 2001 From: FrozenCow Date: Tue, 8 Mar 2011 02:39:16 +0100 Subject: [PATCH 10/11] Fixed being able to render other worlds from command. --- 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 10ec33f9..c18c8f6c 100644 --- a/src/main/java/org/dynmap/DynmapPlugin.java +++ b/src/main/java/org/dynmap/DynmapPlugin.java @@ -323,7 +323,7 @@ public class DynmapPlugin extends JavaPlugin { } } else if (args[0].equals("fullrender")) { if (player == null || player.isOp()) { - if (args.length > 2) { + if (args.length > 1) { for (int i = 1; i < args.length; i++) { World w = getServer().getWorld(args[i]); mapManager.renderFullWorld(new Location(w, 0, 0, 0)); From ead24cc30480f3942dc44beed84fe64ff01c8e88 Mon Sep 17 00:00:00 2001 From: FrozenCow Date: Tue, 8 Mar 2011 16:42:21 +0100 Subject: [PATCH 11/11] Added heightmap like combination for flatmap. --- src/main/java/org/dynmap/flat/FlatMap.java | 30 ++++++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/dynmap/flat/FlatMap.java b/src/main/java/org/dynmap/flat/FlatMap.java index a0adc02a..5cd52d54 100644 --- a/src/main/java/org/dynmap/flat/FlatMap.java +++ b/src/main/java/org/dynmap/flat/FlatMap.java @@ -1,6 +1,7 @@ package org.dynmap.flat; import java.awt.Color; +import java.awt.color.ColorSpace; import java.awt.image.BufferedImage; import java.awt.image.WritableRaster; import java.io.File; @@ -69,7 +70,10 @@ public class FlatMap extends MapType { boolean rendered = false; BufferedImage im = new BufferedImage(t.size, t.size, BufferedImage.TYPE_INT_RGB); - WritableRaster r = im.getRaster(); + WritableRaster raster = im.getRaster(); + + float[] hsb = new float[4]; + int[] pixel = new int[4]; for (int x = 0; x < t.size; x++) for (int y = 0; y < t.size; y++) { @@ -83,10 +87,26 @@ public class FlatMap extends MapType { Color c = colors[0]; if (c == null) continue; - r.setPixel(x, y, new int[] { - c.getRed(), - c.getGreen(), - c.getBlue() }); + + + Color.RGBtoHSB(c.getRed(), c.getGreen(), c.getBlue(), hsb); + + float normalheight = 64; + float below = Math.min(my, normalheight) / normalheight; + float above = 1.0f - Math.max(0, my - normalheight) / (128 - normalheight); + + // Saturation will be changed when going higher. + hsb[1] *= above; + + // Brightness will change when going lower + hsb[2] *= below; + + int rgb = Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]); + pixel[0] = (rgb&0xff0000) >> 16; + pixel[1] = (rgb&0x00ff00) >> 8; + pixel[2] = (rgb&0x0000ff)/* >> 0*/; + + raster.setPixel(x, y, pixel); rendered = true; }