mirror of
https://github.com/webbukkit/dynmap.git
synced 2024-12-25 10:07:37 +01:00
Merge remote-tracking branch 'kilandor/master' into nowebserver
Conflicts: configuration.txt src/main/java/org/dynmap/DynmapPlayerListener.java src/main/java/org/dynmap/DynmapPlugin.java web/map.js
This commit is contained in:
commit
1cc43637ee
15
configuration.txt
Normal file → Executable file
15
configuration.txt
Normal file → Executable file
@ -15,6 +15,15 @@ webserver-bindaddress: 0.0.0.0
|
|||||||
# The TCP-port the webserver will listen on.
|
# The TCP-port the webserver will listen on.
|
||||||
webserver-port: 8123
|
webserver-port: 8123
|
||||||
|
|
||||||
|
# Disables Webserver portion of Dynmap (Advanced users only)
|
||||||
|
disable-webserver: false
|
||||||
|
|
||||||
|
# Writes JSON to file in the webpath
|
||||||
|
jsonfile: false
|
||||||
|
|
||||||
|
# How often the json file gets written to(in seconds)
|
||||||
|
jsonfile-interval: 1000
|
||||||
|
|
||||||
# The maptypes Dynmap will use to render.
|
# The maptypes Dynmap will use to render.
|
||||||
worlds:
|
worlds:
|
||||||
- name: world
|
- name: world
|
||||||
@ -36,12 +45,16 @@ worlds:
|
|||||||
maximumheight: 64
|
maximumheight: 64
|
||||||
|
|
||||||
web:
|
web:
|
||||||
|
# Handles the clientside updates differently only enable if using jsonfile
|
||||||
|
jsonfile: false
|
||||||
|
|
||||||
# Interval the browser should poll for updates.
|
# Interval the browser should poll for updates.
|
||||||
updaterate: 2000
|
updaterate: 2000
|
||||||
|
|
||||||
# showchat: modal/balloons
|
# showchat: modal/balloons
|
||||||
showchat: modal
|
showchat: modal
|
||||||
messagettl: 15000
|
messagettl: 15000
|
||||||
|
|
||||||
showplayerfacesonmap: true
|
showplayerfacesonmap: true
|
||||||
showplayerfacesinmenu: true
|
showplayerfacesinmenu: true
|
||||||
focuschatballoons: false
|
focuschatballoons: false
|
||||||
@ -89,4 +102,4 @@ web:
|
|||||||
# Enables debugging.
|
# Enables debugging.
|
||||||
#debuggers:
|
#debuggers:
|
||||||
# - class: org.dynmap.debug.LogDebugger
|
# - class: org.dynmap.debug.LogDebugger
|
||||||
# - class: org.dynmap.debug.BukkitPlayerDebugger
|
# - class: org.dynmap.debug.BukkitPlayerDebugger
|
||||||
|
@ -23,7 +23,11 @@ public class Client {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class ChatMessage {
|
public static class Stamped {
|
||||||
|
public long timestamp = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ChatMessage extends Stamped {
|
||||||
public String type = "chat";
|
public String type = "chat";
|
||||||
public String playerName;
|
public String playerName;
|
||||||
public String message;
|
public String message;
|
||||||
@ -34,7 +38,7 @@ public class Client {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class WebChatMessage {
|
public static class WebChatMessage extends Stamped {
|
||||||
public String type = "webchat";
|
public String type = "webchat";
|
||||||
public String playerName;
|
public String playerName;
|
||||||
public String message;
|
public String message;
|
||||||
@ -45,7 +49,7 @@ public class Client {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Tile {
|
public static class Tile extends Stamped {
|
||||||
public String type = "tile";
|
public String type = "tile";
|
||||||
public String name;
|
public String name;
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package org.dynmap;
|
package org.dynmap;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.Constructor;
|
import java.lang.reflect.Constructor;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
@ -8,6 +10,7 @@ import java.net.UnknownHostException;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
import java.util.Timer;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -31,6 +34,7 @@ import org.dynmap.web.handlers.ClientUpdateHandler;
|
|||||||
import org.dynmap.web.handlers.FilesystemHandler;
|
import org.dynmap.web.handlers.FilesystemHandler;
|
||||||
import org.dynmap.web.handlers.SendMessageHandler;
|
import org.dynmap.web.handlers.SendMessageHandler;
|
||||||
import org.dynmap.web.handlers.SendMessageHandler.Message;
|
import org.dynmap.web.handlers.SendMessageHandler.Message;
|
||||||
|
import org.dynmap.web.Json;
|
||||||
|
|
||||||
public class DynmapPlugin extends JavaPlugin {
|
public class DynmapPlugin extends JavaPlugin {
|
||||||
|
|
||||||
@ -41,6 +45,8 @@ public class DynmapPlugin extends JavaPlugin {
|
|||||||
public PlayerList playerList;
|
public PlayerList playerList;
|
||||||
public Configuration configuration;
|
public Configuration configuration;
|
||||||
|
|
||||||
|
public Timer timer;
|
||||||
|
|
||||||
public static File tilesDirectory;
|
public static File tilesDirectory;
|
||||||
|
|
||||||
public World getWorld() {
|
public World getWorld() {
|
||||||
@ -70,6 +76,19 @@ public class DynmapPlugin extends JavaPlugin {
|
|||||||
mapManager = new MapManager(this, configuration);
|
mapManager = new MapManager(this, configuration);
|
||||||
mapManager.startRendering();
|
mapManager.startRendering();
|
||||||
|
|
||||||
|
loadWebserver();
|
||||||
|
|
||||||
|
if (configuration.getBoolean("jsonfile", false)) {
|
||||||
|
jsonConfig();
|
||||||
|
int jsonInterval = configuration.getInt("jsonfile-interval", 1) * 1000;
|
||||||
|
timer = new Timer();
|
||||||
|
timer.scheduleAtFixedRate(new JsonTimerTask(this, configuration), jsonInterval, jsonInterval);
|
||||||
|
}
|
||||||
|
|
||||||
|
registerEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadWebserver() {
|
||||||
InetAddress bindAddress;
|
InetAddress bindAddress;
|
||||||
{
|
{
|
||||||
String address = configuration.getString("webserver-bindaddress", "0.0.0.0");
|
String address = configuration.getString("webserver-bindaddress", "0.0.0.0");
|
||||||
@ -105,8 +124,6 @@ public class DynmapPlugin extends JavaPlugin {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.severe("Failed to start WebServer on " + bindAddress + ":" + port + "!");
|
log.severe("Failed to start WebServer on " + bindAddress + ":" + port + "!");
|
||||||
}
|
}
|
||||||
|
|
||||||
registerEvents();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
@ -116,6 +133,11 @@ public class DynmapPlugin extends JavaPlugin {
|
|||||||
webServer.shutdown();
|
webServer.shutdown();
|
||||||
webServer = null;
|
webServer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (timer != null) {
|
||||||
|
timer.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
Debug.clearDebuggers();
|
Debug.clearDebuggers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,4 +254,24 @@ public class DynmapPlugin extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void jsonConfig() {
|
||||||
|
File outputFile;
|
||||||
|
Map<?, ?> clientConfig = (Map<?, ?>) configuration.getProperty("web");
|
||||||
|
File webpath = new File(configuration.getString("webpath", "web"), "dynmap_config.json");
|
||||||
|
if (webpath.isAbsolute())
|
||||||
|
outputFile = webpath;
|
||||||
|
else
|
||||||
|
outputFile = new File(getDataFolder(), webpath.toString());
|
||||||
|
|
||||||
|
try {
|
||||||
|
FileOutputStream fos = new FileOutputStream(outputFile);
|
||||||
|
fos.write(Json.stringifyJson(clientConfig).getBytes());
|
||||||
|
fos.close();
|
||||||
|
} catch (FileNotFoundException ex) {
|
||||||
|
System.out.println("FileNotFoundException : " + ex);
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
System.out.println("IOException : " + ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
66
src/main/java/org/dynmap/JsonTimerTask.java
Normal file
66
src/main/java/org/dynmap/JsonTimerTask.java
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
package org.dynmap;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.config.Configuration;
|
||||||
|
import org.dynmap.web.Json;
|
||||||
|
|
||||||
|
class JsonTimerTask extends TimerTask {
|
||||||
|
private final DynmapPlugin plugin;
|
||||||
|
private Server server;
|
||||||
|
private MapManager mapManager;
|
||||||
|
private Configuration configuration;
|
||||||
|
|
||||||
|
public JsonTimerTask(DynmapPlugin instance, Configuration config) {
|
||||||
|
this.plugin = instance;
|
||||||
|
this.server = this.plugin.getServer();
|
||||||
|
this.mapManager = this.plugin.getMapManager();
|
||||||
|
this.configuration = config;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
for (World world : this.server.getWorlds()) {
|
||||||
|
long current = System.currentTimeMillis();
|
||||||
|
|
||||||
|
Client.Update update = new Client.Update();
|
||||||
|
|
||||||
|
update.timestamp = current;
|
||||||
|
update.servertime = world.getTime() % 24000;
|
||||||
|
|
||||||
|
Player[] players = mapManager.playerList.getVisiblePlayers();
|
||||||
|
update.players = new Client.Player[players.length];
|
||||||
|
for (int i = 0; i < players.length; i++) {
|
||||||
|
Player p = players[i];
|
||||||
|
Location pl = p.getLocation();
|
||||||
|
update.players[i] = new Client.Player(p.getName(), pl.getWorld().getName(), pl.getX(), pl.getY(), pl.getZ());
|
||||||
|
}
|
||||||
|
|
||||||
|
update.updates = mapManager.getWorldUpdates(world.getName(), current - (configuration.getInt("jsonfile-interval", 1) + 10000));
|
||||||
|
|
||||||
|
File webpath = new File(this.configuration.getString("webpath", "web"), "dynmap_" + world.getName() + ".json");
|
||||||
|
File outputFile;
|
||||||
|
if (webpath.isAbsolute())
|
||||||
|
outputFile = webpath;
|
||||||
|
else {
|
||||||
|
outputFile = new File(plugin.getDataFolder(), webpath.toString());
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
FileOutputStream fos = new FileOutputStream(outputFile);
|
||||||
|
fos.write(Json.stringifyJson(update).getBytes());
|
||||||
|
fos.close();
|
||||||
|
} catch (FileNotFoundException ex) {
|
||||||
|
System.out.println("FileNotFoundException : " + ex);
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
System.out.println("IOException : " + ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
20
web/map.js
20
web/map.js
@ -103,7 +103,7 @@ DynMap.prototype = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
google.maps.event.addListener(map, 'dragstart', function(mEvent) {
|
google.maps.event.addListener(map, 'dragstart', function(mEvent) {
|
||||||
me.followPlayer('');
|
me.followPlayer(null);
|
||||||
});
|
});
|
||||||
// TODO: Enable hash-links.
|
// TODO: Enable hash-links.
|
||||||
/*google.maps.event.addListener(map, 'zoom_changed', function() {
|
/*google.maps.event.addListener(map, 'zoom_changed', function() {
|
||||||
@ -277,7 +277,9 @@ DynMap.prototype = {
|
|||||||
$.getJSON(me.options.updateUrl + "world/" + me.world.name + "/" + me.lasttimestamp, function(update) {
|
$.getJSON(me.options.updateUrl + "world/" + me.world.name + "/" + me.lasttimestamp, function(update) {
|
||||||
me.alertbox.hide();
|
me.alertbox.hide();
|
||||||
|
|
||||||
me.lasttimestamp = update.timestamp;
|
if (!me.options.jsonfile)
|
||||||
|
me.lasttimestamp = update.timestamp;
|
||||||
|
|
||||||
me.clock.setTime(update.servertime);
|
me.clock.setTime(update.servertime);
|
||||||
me.clockdigital.setTime(update.servertime);
|
me.clockdigital.setTime(update.servertime);
|
||||||
|
|
||||||
@ -303,19 +305,24 @@ DynMap.prototype = {
|
|||||||
$.each(update.updates, function(index, update) {
|
$.each(update.updates, function(index, update) {
|
||||||
swtch(update.type, {
|
swtch(update.type, {
|
||||||
tile: function() {
|
tile: function() {
|
||||||
me.onTileUpdated(update.name);
|
|
||||||
|
if(me.lasttimestamp <= update.timestamp || !me.options.jsonfile)
|
||||||
|
me.onTileUpdated(update.name);
|
||||||
},
|
},
|
||||||
chat: function() {
|
chat: function() {
|
||||||
if (!me.options.showchat) {
|
if (!me.options.showchat) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
me.onPlayerChat(update.playerName, update.message);
|
if(me.lasttimestamp <= update.timestamp || !me.options.jsonfile)
|
||||||
|
me.onPlayerChat(update.playerName, update.message);
|
||||||
},
|
},
|
||||||
webchat: function() {
|
webchat: function() {
|
||||||
if (!me.options.showchat) {
|
if (!me.options.showchat) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
me.onPlayerChat('[WEB]' + update.playerName, update.message);
|
|
||||||
|
if(me.lasttimestamp <= update.timestamp || !me.options.jsonfile)
|
||||||
|
me.onPlayerChat('[WEB]' + update.playerName, update.message);
|
||||||
}
|
}
|
||||||
}, function(type) {
|
}, function(type) {
|
||||||
console.log('Unknown type ', type, '!');
|
console.log('Unknown type ', type, '!');
|
||||||
@ -325,7 +332,6 @@ DynMap.prototype = {
|
|||||||
//var divs = $('div[rel]');
|
//var divs = $('div[rel]');
|
||||||
//divs.filter(function(i){return parseInt(divs[i].attr('rel')) > timestamp+me.options.messagettl;}).remove();
|
//divs.filter(function(i){return parseInt(divs[i].attr('rel')) > timestamp+me.options.messagettl;}).remove();
|
||||||
});
|
});
|
||||||
|
|
||||||
setTimeout(function() { me.update(); }, me.options.updaterate);
|
setTimeout(function() { me.update(); }, me.options.updaterate);
|
||||||
}, function(request, statusText, ex) {
|
}, function(request, statusText, ex) {
|
||||||
me.alertbox
|
me.alertbox
|
||||||
@ -575,4 +581,4 @@ DynMap.prototype = {
|
|||||||
+ "&zoom=" + me.map.getZoom();
|
+ "&zoom=" + me.map.getZoom();
|
||||||
me.linkbox.data('link').val(a);
|
me.linkbox.data('link').val(a);
|
||||||
}*/
|
}*/
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user