From 6419469be3f7f163b91600320948586e49b80f22 Mon Sep 17 00:00:00 2001 From: FrozenCow Date: Thu, 20 Jan 2011 22:56:39 +0100 Subject: [PATCH] Added ability to hide players (/map hide, /map hide playername(s) and /map show). --- .../java/org/dynmap/DynmapPlayerListener.java | 18 ++++- src/main/java/org/dynmap/DynmapPlugin.java | 16 ++-- src/main/java/org/dynmap/MapManager.java | 2 + src/main/java/org/dynmap/PlayerList.java | 81 +++++++++++++++++++ src/main/java/org/dynmap/WebServer.java | 6 +- .../java/org/dynmap/WebServerRequest.java | 6 +- 6 files changed, 117 insertions(+), 12 deletions(-) create mode 100644 src/main/java/org/dynmap/PlayerList.java diff --git a/src/main/java/org/dynmap/DynmapPlayerListener.java b/src/main/java/org/dynmap/DynmapPlayerListener.java index e6c934ce..f93af63d 100644 --- a/src/main/java/org/dynmap/DynmapPlayerListener.java +++ b/src/main/java/org/dynmap/DynmapPlayerListener.java @@ -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 hiddenPlayerNames = new HashSet(); + 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 visiblePlayers = new ArrayList(); + Player[] onlinePlayers = server.getOnlinePlayers(); + for(int i=0;i