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 = $('
')