mirror of
https://github.com/webbukkit/dynmap.git
synced 2024-09-26 21:02:40 +02:00
Added ability to hide players (/map hide, /map hide playername(s) and /map show).
This commit is contained in:
parent
68412ae27d
commit
6419469be3
@ -6,20 +6,34 @@ import org.bukkit.event.player.PlayerListener;
|
||||
|
||||
public class DynmapPlayerListener extends PlayerListener {
|
||||
private MapManager mgr;
|
||||
private PlayerList playerList;
|
||||
|
||||
public DynmapPlayerListener(MapManager mgr) {
|
||||
public DynmapPlayerListener(MapManager mgr, PlayerList playerList) {
|
||||
this.mgr = mgr;
|
||||
this.playerList = playerList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerCommand(PlayerChatEvent event) {
|
||||
String[] split = event.getMessage().split(" ");
|
||||
Player player = event.getPlayer();
|
||||
if (split[0].equalsIgnoreCase("/map")) {
|
||||
if (split.length > 1) {
|
||||
if (split[1].equals("render")) {
|
||||
Player player = event.getPlayer();
|
||||
mgr.touch(player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ());
|
||||
event.setCancelled(true);
|
||||
} else if (split[1].equals("hide")) {
|
||||
if (split.length == 2) {
|
||||
playerList.hide(event.getPlayer().getName());
|
||||
} else for (int i=2;i<split.length;i++)
|
||||
playerList.hide(split[i]);
|
||||
event.setCancelled(true);
|
||||
} else if (split[1].equals("show")) {
|
||||
if (split.length == 2) {
|
||||
playerList.show(event.getPlayer().getName());
|
||||
} else for (int i=2;i<split.length;i++)
|
||||
playerList.show(split[i]);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -17,8 +17,9 @@ public class DynmapPlugin extends JavaPlugin {
|
||||
|
||||
protected static final Logger log = Logger.getLogger("Minecraft");
|
||||
|
||||
private WebServer server = null;
|
||||
private WebServer webserver = null;
|
||||
private MapManager mgr = null;
|
||||
private PlayerList playerList;
|
||||
|
||||
private BukkitPlayerDebugger debugger = new BukkitPlayerDebugger(this);
|
||||
|
||||
@ -38,11 +39,14 @@ public class DynmapPlugin extends JavaPlugin {
|
||||
configuration.load();
|
||||
|
||||
debugger.enable();
|
||||
playerList = new PlayerList(getServer());
|
||||
playerList.load();
|
||||
|
||||
mgr = new MapManager(getWorld(), debugger, configuration);
|
||||
mgr.startManager();
|
||||
|
||||
try {
|
||||
server = new WebServer(mgr, getServer(), debugger, configuration);
|
||||
webserver = new WebServer(mgr, getServer(), playerList, debugger, configuration);
|
||||
} catch(IOException e) {
|
||||
log.info("position failed to start WebServer (IOException)");
|
||||
}
|
||||
@ -53,9 +57,9 @@ public class DynmapPlugin extends JavaPlugin {
|
||||
public void onDisable() {
|
||||
mgr.stopManager();
|
||||
|
||||
if(server != null) {
|
||||
server.shutdown();
|
||||
server = null;
|
||||
if(webserver != null) {
|
||||
webserver.shutdown();
|
||||
webserver = null;
|
||||
}
|
||||
debugger.disable();
|
||||
}
|
||||
@ -65,7 +69,7 @@ public class DynmapPlugin extends JavaPlugin {
|
||||
getServer().getPluginManager().registerEvent(Event.Type.BLOCK_PLACED, blockListener, Priority.Normal, this);
|
||||
getServer().getPluginManager().registerEvent(Event.Type.BLOCK_DAMAGED, blockListener, Priority.Normal, this);
|
||||
|
||||
getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND, new DynmapPlayerListener(mgr), Priority.Normal, this);
|
||||
getServer().getPluginManager().registerEvent(Event.Type.PLAYER_COMMAND, new DynmapPlayerListener(mgr, playerList), Priority.Normal, this);
|
||||
//getServer().getPluginManager().registerEvent(Event.Type.BLOCK_DESTROYED, listener, Priority.Normal, this);
|
||||
/* etc.getLoader().addListener(PluginLoader.Hook.COMMAND, listener, this, PluginListener.Priority.MEDIUM);
|
||||
etc.getLoader().addListener(PluginLoader.Hook.BLOCK_CREATED, listener, this, PluginListener.Priority.MEDIUM);
|
||||
|
@ -16,6 +16,7 @@ public class MapManager extends Thread {
|
||||
private Debugger debugger;
|
||||
private MapType map;
|
||||
public StaleQueue staleQueue;
|
||||
public PlayerList playerList;
|
||||
|
||||
/* lock for our data structures */
|
||||
public static final Object lock = new Object();
|
||||
@ -55,6 +56,7 @@ public class MapManager extends Thread {
|
||||
|
||||
if (!tileDirectory.isDirectory())
|
||||
tileDirectory.mkdirs();
|
||||
|
||||
map = new KzedMap(this, world, debugger, configuration);
|
||||
}
|
||||
|
||||
|
81
src/main/java/org/dynmap/PlayerList.java
Normal file
81
src/main/java/org/dynmap/PlayerList.java
Normal file
@ -0,0 +1,81 @@
|
||||
package org.dynmap;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.OutputStreamWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Scanner;
|
||||
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class PlayerList {
|
||||
private Server server;
|
||||
private HashSet<String> hiddenPlayerNames = new HashSet<String>();
|
||||
private File hiddenPlayersFile = new File(DynmapPlugin.dataRoot, "hiddenplayers.txt");
|
||||
|
||||
public PlayerList(Server server) {
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public void save() {
|
||||
OutputStream stream;
|
||||
try {
|
||||
stream = new FileOutputStream(hiddenPlayersFile);
|
||||
OutputStreamWriter writer = new OutputStreamWriter(stream);
|
||||
for(String player : hiddenPlayerNames) {
|
||||
writer.write(player);
|
||||
writer.write("\n");
|
||||
}
|
||||
writer.close();
|
||||
stream.close();
|
||||
} catch(IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public void load() {
|
||||
try {
|
||||
Scanner scanner = new Scanner(hiddenPlayersFile);
|
||||
while(scanner.hasNextLine()) {
|
||||
String line = scanner.nextLine();
|
||||
hiddenPlayerNames.add(line);
|
||||
}
|
||||
scanner.close();
|
||||
} catch (FileNotFoundException e) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public void hide(String playerName) {
|
||||
hiddenPlayerNames.add(playerName);
|
||||
save();
|
||||
}
|
||||
|
||||
public void show(String playerName) {
|
||||
hiddenPlayerNames.remove(playerName);
|
||||
save();
|
||||
}
|
||||
|
||||
public void setVisible(String playerName, boolean visible) {
|
||||
if (visible) show(playerName); else hide(playerName);
|
||||
}
|
||||
|
||||
public Player[] getVisiblePlayers() {
|
||||
ArrayList<Player> visiblePlayers = new ArrayList<Player>();
|
||||
Player[] onlinePlayers = server.getOnlinePlayers();
|
||||
for(int i=0;i<onlinePlayers.length;i++){
|
||||
Player p = onlinePlayers[i];
|
||||
if (!hiddenPlayerNames.contains(p.getName())) {
|
||||
visiblePlayers.add(p);
|
||||
}
|
||||
}
|
||||
Player[] result = new Player[visiblePlayers.size()];
|
||||
visiblePlayers.toArray(result);
|
||||
return result;
|
||||
}
|
||||
}
|
@ -22,11 +22,13 @@ public class WebServer extends Thread {
|
||||
|
||||
private MapManager mgr;
|
||||
private Server server;
|
||||
private PlayerList playerList;
|
||||
|
||||
public WebServer(MapManager mgr, Server server, Debugger debugger, ConfigurationNode configuration) throws IOException
|
||||
public WebServer(MapManager mgr, Server server, PlayerList playerList, Debugger debugger, ConfigurationNode configuration) throws IOException
|
||||
{
|
||||
this.mgr = mgr;
|
||||
this.server = server;
|
||||
this.playerList = playerList;
|
||||
this.debugger = debugger;
|
||||
|
||||
String bindAddress = configuration.getString("webserver-bindaddress", "0.0.0.0");
|
||||
@ -44,7 +46,7 @@ public class WebServer extends Thread {
|
||||
while (running) {
|
||||
try {
|
||||
Socket socket = sock.accept();
|
||||
WebServerRequest requestThread = new WebServerRequest(socket, mgr, server, debugger);
|
||||
WebServerRequest requestThread = new WebServerRequest(socket, mgr, server, playerList, debugger);
|
||||
requestThread.start();
|
||||
}
|
||||
catch (IOException e) {
|
||||
|
@ -24,13 +24,15 @@ public class WebServerRequest extends Thread {
|
||||
private Socket socket;
|
||||
private MapManager mgr;
|
||||
private Server server;
|
||||
private PlayerList playerList;
|
||||
|
||||
public WebServerRequest(Socket socket, MapManager mgr, Server server, Debugger debugger)
|
||||
public WebServerRequest(Socket socket, MapManager mgr, Server server, PlayerList playerList, Debugger debugger)
|
||||
{
|
||||
this.debugger = debugger;
|
||||
this.socket = socket;
|
||||
this.mgr = mgr;
|
||||
this.server = server;
|
||||
this.playerList = playerList;
|
||||
}
|
||||
|
||||
private static void writeHttpHeader(BufferedOutputStream out, int statusCode, String statusText) throws IOException {
|
||||
@ -112,7 +114,7 @@ public class WebServerRequest extends Thread {
|
||||
long relativeTime = server.getTime() % 24000;
|
||||
sb.append(current + " " + relativeTime + "\n");
|
||||
|
||||
Player[] players = server.getOnlinePlayers();
|
||||
Player[] players = playerList.getVisiblePlayers();
|
||||
for(Player player : players) {
|
||||
sb.append("player " + player.getName() + " " + player.getLocation().getX() + " " + player.getLocation().getY() + " " + player.getLocation().getZ() + "\n");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user