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 {
|
public class DynmapPlayerListener extends PlayerListener {
|
||||||
private MapManager mgr;
|
private MapManager mgr;
|
||||||
|
private PlayerList playerList;
|
||||||
|
|
||||||
public DynmapPlayerListener(MapManager mgr) {
|
public DynmapPlayerListener(MapManager mgr, PlayerList playerList) {
|
||||||
this.mgr = mgr;
|
this.mgr = mgr;
|
||||||
|
this.playerList = playerList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerCommand(PlayerChatEvent event) {
|
public void onPlayerCommand(PlayerChatEvent event) {
|
||||||
String[] split = event.getMessage().split(" ");
|
String[] split = event.getMessage().split(" ");
|
||||||
Player player = event.getPlayer();
|
|
||||||
if (split[0].equalsIgnoreCase("/map")) {
|
if (split[0].equalsIgnoreCase("/map")) {
|
||||||
if (split.length > 1) {
|
if (split.length > 1) {
|
||||||
if (split[1].equals("render")) {
|
if (split[1].equals("render")) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
mgr.touch(player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ());
|
mgr.touch(player.getLocation().getBlockX(), player.getLocation().getBlockY(), player.getLocation().getBlockZ());
|
||||||
event.setCancelled(true);
|
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");
|
protected static final Logger log = Logger.getLogger("Minecraft");
|
||||||
|
|
||||||
private WebServer server = null;
|
private WebServer webserver = null;
|
||||||
private MapManager mgr = null;
|
private MapManager mgr = null;
|
||||||
|
private PlayerList playerList;
|
||||||
|
|
||||||
private BukkitPlayerDebugger debugger = new BukkitPlayerDebugger(this);
|
private BukkitPlayerDebugger debugger = new BukkitPlayerDebugger(this);
|
||||||
|
|
||||||
@ -38,11 +39,14 @@ public class DynmapPlugin extends JavaPlugin {
|
|||||||
configuration.load();
|
configuration.load();
|
||||||
|
|
||||||
debugger.enable();
|
debugger.enable();
|
||||||
|
playerList = new PlayerList(getServer());
|
||||||
|
playerList.load();
|
||||||
|
|
||||||
mgr = new MapManager(getWorld(), debugger, configuration);
|
mgr = new MapManager(getWorld(), debugger, configuration);
|
||||||
mgr.startManager();
|
mgr.startManager();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
server = new WebServer(mgr, getServer(), debugger, configuration);
|
webserver = new WebServer(mgr, getServer(), playerList, debugger, configuration);
|
||||||
} catch(IOException e) {
|
} catch(IOException e) {
|
||||||
log.info("position failed to start WebServer (IOException)");
|
log.info("position failed to start WebServer (IOException)");
|
||||||
}
|
}
|
||||||
@ -53,9 +57,9 @@ public class DynmapPlugin extends JavaPlugin {
|
|||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
mgr.stopManager();
|
mgr.stopManager();
|
||||||
|
|
||||||
if(server != null) {
|
if(webserver != null) {
|
||||||
server.shutdown();
|
webserver.shutdown();
|
||||||
server = null;
|
webserver = null;
|
||||||
}
|
}
|
||||||
debugger.disable();
|
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_PLACED, blockListener, Priority.Normal, this);
|
||||||
getServer().getPluginManager().registerEvent(Event.Type.BLOCK_DAMAGED, 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);
|
//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.COMMAND, listener, this, PluginListener.Priority.MEDIUM);
|
||||||
etc.getLoader().addListener(PluginLoader.Hook.BLOCK_CREATED, 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 Debugger debugger;
|
||||||
private MapType map;
|
private MapType map;
|
||||||
public StaleQueue staleQueue;
|
public StaleQueue staleQueue;
|
||||||
|
public PlayerList playerList;
|
||||||
|
|
||||||
/* lock for our data structures */
|
/* lock for our data structures */
|
||||||
public static final Object lock = new Object();
|
public static final Object lock = new Object();
|
||||||
@ -55,6 +56,7 @@ public class MapManager extends Thread {
|
|||||||
|
|
||||||
if (!tileDirectory.isDirectory())
|
if (!tileDirectory.isDirectory())
|
||||||
tileDirectory.mkdirs();
|
tileDirectory.mkdirs();
|
||||||
|
|
||||||
map = new KzedMap(this, world, debugger, configuration);
|
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 MapManager mgr;
|
||||||
private Server server;
|
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.mgr = mgr;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
|
this.playerList = playerList;
|
||||||
this.debugger = debugger;
|
this.debugger = debugger;
|
||||||
|
|
||||||
String bindAddress = configuration.getString("webserver-bindaddress", "0.0.0.0");
|
String bindAddress = configuration.getString("webserver-bindaddress", "0.0.0.0");
|
||||||
@ -44,7 +46,7 @@ public class WebServer extends Thread {
|
|||||||
while (running) {
|
while (running) {
|
||||||
try {
|
try {
|
||||||
Socket socket = sock.accept();
|
Socket socket = sock.accept();
|
||||||
WebServerRequest requestThread = new WebServerRequest(socket, mgr, server, debugger);
|
WebServerRequest requestThread = new WebServerRequest(socket, mgr, server, playerList, debugger);
|
||||||
requestThread.start();
|
requestThread.start();
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
|
@ -24,13 +24,15 @@ public class WebServerRequest extends Thread {
|
|||||||
private Socket socket;
|
private Socket socket;
|
||||||
private MapManager mgr;
|
private MapManager mgr;
|
||||||
private Server server;
|
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.debugger = debugger;
|
||||||
this.socket = socket;
|
this.socket = socket;
|
||||||
this.mgr = mgr;
|
this.mgr = mgr;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
|
this.playerList = playerList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void writeHttpHeader(BufferedOutputStream out, int statusCode, String statusText) throws IOException {
|
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;
|
long relativeTime = server.getTime() % 24000;
|
||||||
sb.append(current + " " + relativeTime + "\n");
|
sb.append(current + " " + relativeTime + "\n");
|
||||||
|
|
||||||
Player[] players = server.getOnlinePlayers();
|
Player[] players = playerList.getVisiblePlayers();
|
||||||
for(Player player : players) {
|
for(Player player : players) {
|
||||||
sb.append("player " + player.getName() + " " + player.getLocation().getX() + " " + player.getLocation().getY() + " " + player.getLocation().getZ() + "\n");
|
sb.append("player " + player.getName() + " " + player.getLocation().getX() + " " + player.getLocation().getY() + " " + player.getLocation().getZ() + "\n");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user