Archived
0

Fixed lag on player join, fixed format, added "ips" flag

This commit is contained in:
Pepich
2017-10-22 14:55:14 +02:00
parent 66b02ee346
commit ac78f852eb

View File

@@ -31,7 +31,7 @@ import com.redstoner.modules.datamanager.DataManager;
@AutoRegisterListener @AutoRegisterListener
@Commands(CommandHolderType.File) @Commands(CommandHolderType.File)
@Version(major = 4, minor = 0, revision = 0, compatible = 4) @Version(major = 4, minor = 0, revision = 1, compatible = 4)
public class Seen implements Module, Listener public class Seen implements Module, Listener
{ {
HashMap<UUID, JSONArray> names = new HashMap<>(); HashMap<UUID, JSONArray> names = new HashMap<>();
@@ -41,12 +41,13 @@ public class Seen implements Module, Listener
public void postEnable() public void postEnable()
{ {
Module.super.postEnable(); Module.super.postEnable();
for (Player player : Bukkit.getOnlinePlayers())
loadData(player);
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@Command(hook = "seen", async = AsyncType.ALWAYS) @Command(hook = "seen2", async = AsyncType.ALWAYS)
public boolean seen(CommandSender sender, String player) public boolean seen(CommandSender sender, String player, boolean show_ips)
{ {
ArrayList<String> message = new ArrayList<>(); ArrayList<String> message = new ArrayList<>();
OfflinePlayer p = Bukkit.getPlayer(player); OfflinePlayer p = Bukkit.getPlayer(player);
@@ -56,7 +57,7 @@ public class Seen implements Module, Listener
if (p != null) if (p != null)
p = Bukkit.getOfflinePlayer(p.getUniqueId()); p = Bukkit.getOfflinePlayer(p.getUniqueId());
} }
if (p == null || !p.hasPlayedBefore()) if (p == null || (!p.isOnline() && !p.hasPlayedBefore()))
{ {
getLogger().message(sender, true, "That player has never joined the server!"); getLogger().message(sender, true, "That player has never joined the server!");
return true; return true;
@@ -77,15 +78,17 @@ public class Seen implements Module, Listener
timestamp = (long) DataManager.getOrDefault(p.getUniqueId().toString(), "lastquit", p.getLastPlayed()); timestamp = (long) DataManager.getOrDefault(p.getUniqueId().toString(), "lastquit", p.getLastPlayed());
} }
String time = DateUtil.formatDateDiff(timestamp); String time = DateUtil.formatDateDiff(timestamp);
message.add("The player &e" + p.getName() + " &7has been " + state + " &7since " + time + "&7."); message.add("The player &e" + p.getName() + " &7has been " + state + " &7since &e" + time + "&7.");
JSONArray _names; JSONArray _names;
if (online) if (online)
{ {
if (DataManager.getState((Player) p, "afk")) if (DataManager.getState((Player) p, "afk"))
message.add("This player is currently &eAFK"); {
String reason = (String) DataManager.getOrDefault(p.getUniqueId().toString(), "AFK", "afk_reason", ""); message.add("This player is currently &eAFK&7:");
if (reason.length() >= 1) String reason = (String) DataManager.getOrDefault(p.getUniqueId().toString(), "AFK", "afk_reason", "");
message.add(" &5- " + reason); if (reason.length() >= 1)
message.add(" &5- " + reason);
}
if (DataManager.getState((Player) p, "vanished")) if (DataManager.getState((Player) p, "vanished"))
message.add("This player is currently &evanished&7!"); message.add("This player is currently &evanished&7!");
_names = names.get(p.getUniqueId()); _names = names.get(p.getUniqueId());
@@ -99,14 +102,19 @@ public class Seen implements Module, Listener
+ _names.toJSONString().replaceAll("[\"\\[\\]]", "").replace(",", "&7, &e")); + _names.toJSONString().replaceAll("[\"\\[\\]]", "").replace(",", "&7, &e"));
if (sender.hasPermission("utils.seen.ip")) if (sender.hasPermission("utils.seen.ip"))
{ {
JSONArray _ips; if (show_ips)
if (online) {
_ips = ips.get(p.getUniqueId()); JSONArray _ips;
else if (online)
_ips = loadIPs(p.getUniqueId()); _ips = ips.get(p.getUniqueId());
if (_names != null && _names.size() > 0) else
message.add("This player has joined with the following IPs: &e" _ips = loadIPs(p.getUniqueId());
+ _ips.toJSONString().replaceAll("[\"\\[\\]]", "").replace(",", "&7, &e")); if (_ips != null && _ips.size() > 0)
message.add("This player has joined with the following IPs: &e"
+ _ips.toJSONString().replaceAll("[\"\\[\\]]", "").replace(",", "&7, &e"));
}
message.add("This players current IP is: &a"
+ DataManager.getOrDefault(p.getUniqueId().toString(), "ip", "unknown"));
} }
getLogger().message(sender, message.toArray(new String[] {})); getLogger().message(sender, message.toArray(new String[] {}));
return true; return true;
@@ -116,7 +124,7 @@ public class Seen implements Module, Listener
public void onPlayerJoin(PlayerJoinEvent event) public void onPlayerJoin(PlayerJoinEvent event)
{ {
DataManager.setData(event.getPlayer(), "lastjoined", System.currentTimeMillis()); DataManager.setData(event.getPlayer(), "lastjoined", System.currentTimeMillis());
DataManager.setData(event.getPlayer(), "ip", event.getPlayer().getAddress().getHostName()); DataManager.setData(event.getPlayer(), "ip", event.getPlayer().getAddress().getHostString());
loadData(event.getPlayer()); loadData(event.getPlayer());
} }
@@ -130,33 +138,47 @@ public class Seen implements Module, Listener
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void loadData(Player player) public void loadData(Player player)
{ {
File jsonfile = new File(Main.plugin.getDataFolder(), "/seen/" + Utils.getID(player)); Thread t = new Thread(new Runnable()
JSONObject json = JsonManager.getObject(jsonfile);
if (json == null)
{ {
json = new JSONObject();
json.put("names", new JSONArray());
json.put("ips", new JSONArray());
}
JSONArray names = (JSONArray) json.get("names");
if (!names.contains(player.getName()))
names.add(player.getName());
json.put("names", names);
JSONArray ips = (JSONArray) json.get("ips"); @Override
String ip = player.getAddress().getHostName(); public void run()
if (!ips.contains(ip)) {
ips.add(ip); File jsonfile = new File(Main.plugin.getDataFolder(), "/seen/" + Utils.getID(player) + ".json");
json.put("ips", ips); JSONObject json = JsonManager.getObject(jsonfile);
if (json == null)
{
json = new JSONObject();
json.put("names", new JSONArray());
json.put("ips", new JSONArray());
}
JSONArray lnames = (JSONArray) json.get("names");
if (!lnames.contains(player.getName()))
lnames.add(player.getName());
json.put("names", names);
this.names.put(player.getUniqueId(), names); JSONArray lips = (JSONArray) json.get("ips");
this.ips.put(player.getUniqueId(), ips); String ip = player.getAddress().getHostString();
JsonManager.save(json, jsonfile); if (!lips.contains(ip))
lips.add(ip);
json.put("ips", ips);
names.put(player.getUniqueId(), lnames);
ips.put(player.getUniqueId(), lips);
JsonManager.save(json, jsonfile);
}
});
t.start();
}
public void unloadData(Player player)
{
this.names.remove(player.getUniqueId());
} }
public JSONArray loadNames(UUID uuid) public JSONArray loadNames(UUID uuid)
{ {
File jsonfile = new File(Main.plugin.getDataFolder(), "/seen/" + uuid); File jsonfile = new File(Main.plugin.getDataFolder(), "/seen/" + uuid + ".json");
JSONObject json = JsonManager.getObject(jsonfile); JSONObject json = JsonManager.getObject(jsonfile);
if (json == null) if (json == null)
return null; return null;
@@ -166,16 +188,11 @@ public class Seen implements Module, Listener
public JSONArray loadIPs(UUID uuid) public JSONArray loadIPs(UUID uuid)
{ {
File jsonfile = new File(Main.plugin.getDataFolder(), "/seen/" + uuid); File jsonfile = new File(Main.plugin.getDataFolder(), "/seen/" + uuid + ".json");
JSONObject json = JsonManager.getObject(jsonfile); JSONObject json = JsonManager.getObject(jsonfile);
if (json == null) if (json == null)
return null; return null;
else else
return (JSONArray) json.get("ips"); return (JSONArray) json.get("ips");
} }
public void unloadData(Player player)
{
this.names.remove(player.getUniqueId());
}
} }