summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/modules/seen
diff options
context:
space:
mode:
authorDavid <david@panic.tk>2018-11-07 23:50:06 +0100
committerDavid <david@panic.tk>2018-11-07 23:50:06 +0100
commit604cf01967ede98bf5024e4926bb0777fc4e8eee (patch)
treee2fa63d7e683769ee3bf3eddc75280648e92eb04 /src/main/java/com/redstoner/modules/seen
parente86c52ef7c0e1e33c6af0e8674b038976bec11cc (diff)
Converted Modules to gradle
Diffstat (limited to 'src/main/java/com/redstoner/modules/seen')
-rw-r--r--src/main/java/com/redstoner/modules/seen/Seen.cmd53
-rw-r--r--src/main/java/com/redstoner/modules/seen/Seen.java320
2 files changed, 373 insertions, 0 deletions
diff --git a/src/main/java/com/redstoner/modules/seen/Seen.cmd b/src/main/java/com/redstoner/modules/seen/Seen.cmd
new file mode 100644
index 0000000..d17e655
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/seen/Seen.cmd
@@ -0,0 +1,53 @@
+command seen {
+ [string:player] {
+ help Displays information about a player.;
+ perm utils.seen;
+ run seen player;
+ }
+
+ [string:player] [flag:ips] {
+ help Displays information about a player.;
+ perm utils.seen;
+ run seen2 player ips;
+ }
+}
+command firstseen {
+ [empty] {
+ run firstseen;
+ type player;
+ help Gives the date and time they first joined;
+ perm utils.firstseen;
+ }
+ [string:person] {
+ run firstseenP person;
+ help Gives the date and time when a player first joined;
+ perm utils.firstseen.other;
+ }
+}
+command playtime {
+ [empty] {
+ type player;
+ run playtimeDef;
+ perm utils.playtime;
+ help Displays your total playtime!;
+ }
+ [string:name] {
+ run playtime name;
+ perm utils.playtime.others;
+ help Displays the playtime of another player. The player must be online!;
+ }
+}
+
+command uuid {
+ [empty] {
+ type player;
+ run uuidDef;
+ perm utils.uuid;
+ help Displays your UUID (click to copy);
+ }
+ [string:name] {
+ run uuid name;
+ perm utils.uuid.other;
+ help Displays someone elses UUID (click to copy);
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/redstoner/modules/seen/Seen.java b/src/main/java/com/redstoner/modules/seen/Seen.java
new file mode 100644
index 0000000..ed3324c
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/seen/Seen.java
@@ -0,0 +1,320 @@
+package com.redstoner.modules.seen;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.UUID;
+
+import org.bukkit.Bukkit;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.Statistic;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+
+import com.earth2me.essentials.utils.DateUtil;
+import com.nemez.cmdmgr.Command;
+import com.nemez.cmdmgr.Command.AsyncType;
+import com.redstoner.annotations.AutoRegisterListener;
+import com.redstoner.annotations.Commands;
+import com.redstoner.annotations.Version;
+import com.redstoner.misc.CommandHolderType;
+import com.redstoner.misc.JsonManager;
+import com.redstoner.misc.Main;
+import com.redstoner.misc.Utils;
+import com.redstoner.modules.Module;
+import com.redstoner.modules.datamanager.DataManager;
+
+import net.nemez.chatapi.click.Message;
+
+@AutoRegisterListener
+@Commands(CommandHolderType.File)
+@Version(major = 4, minor = 0, revision = 10, compatible = 4)
+public class Seen implements Module, Listener
+{
+ HashMap<UUID, JSONArray> names = new HashMap<>();
+ HashMap<UUID, JSONArray> ips = new HashMap<>();
+
+ @Override
+ public void postEnable()
+ {
+ Module.super.postEnable();
+ for (Player player : Bukkit.getOnlinePlayers())
+ loadData(player);
+ }
+
+ @Command(hook = "seen", async = AsyncType.ALWAYS)
+ public boolean seen(CommandSender sender, String player)
+ {
+ return seen(sender, player, false);
+ }
+
+ @SuppressWarnings("deprecation")
+ @Command(hook = "seen2", async = AsyncType.ALWAYS)
+ public boolean seen(CommandSender sender, String player, boolean show_ips)
+ {
+ ArrayList<String> message = new ArrayList<>();
+ OfflinePlayer p;
+ if (Utils.isUUID(player))
+ p = Bukkit.getOfflinePlayer(UUID.fromString(player));
+ else
+ p = Bukkit.getPlayer(player);
+ boolean cansee = (sender instanceof Player ? p instanceof Player && ((Player) sender).canSee((Player) p)
+ : true);
+ if (p == null)
+ {
+ p = Bukkit.getOfflinePlayer(player);
+ if (p != null)
+ p = Bukkit.getOfflinePlayer(p.getUniqueId());
+ }
+ if (p == null || (!p.isOnline() && !p.hasPlayedBefore()) || (!cansee && !p.getName().equalsIgnoreCase(player)))
+ {
+ getLogger().message(sender, true, "§e" + player + "§7 has never joined the server!");
+ return true;
+ }
+ boolean online = cansee ? p instanceof Player : false;
+ String state;
+ long timestamp;
+ if (online)
+ {
+ state = "&aonline";
+ timestamp = (long) DataManager.getData(p.getUniqueId().toString(), "lastjoined");
+ }
+ else
+ {
+ state = "&coffline";
+ timestamp = (long) DataManager.getOrDefault(p.getUniqueId().toString(), "lastquit", p.getLastPlayed());
+ }
+ String time = DateUtil.formatDateDiff(timestamp);
+ message.add("&e" + p.getName() + " &7has been " + state + " &7for &e" + time + "&7.");
+ JSONArray _names;
+ if (online)
+ {
+ if (DataManager.getState((Player) p, "afk"))
+ {
+ message.add("They're currently &eAFK&7:");
+ String reason = (String) DataManager.getOrDefault(p.getUniqueId().toString(), "AFK", "afk_reason", "");
+ Long timeAFK = (Long) DataManager.getOrDefault(p.getUniqueId().toString(), "AFK", "afk_time", 0L);
+
+ message.add(" &9For: " + DateUtil.formatDateDiff(timeAFK));
+ if (reason.length() >= 1)
+ message.add(" &9Reason: " + reason);
+ }
+ if (DataManager.getState((Player) p, "vanished"))
+ message.add("They're currently &evanished&7!");
+ _names = names.get(p.getUniqueId());
+ }
+ else
+ {
+ _names = loadNames(p.getUniqueId());
+ }
+ if (_names != null && _names.size() > 1)
+ message.add("They've also been known as: &e"
+ + _names.toJSONString().replaceAll("[\"\\[\\]]", "").replace(",", "&7, &e"));
+ if (sender.hasPermission("utils.seen.ip"))
+ {
+ if (show_ips)
+ {
+ JSONArray _ips;
+ if (online)
+ _ips = ips.get(p.getUniqueId());
+ else
+ _ips = loadIPs(p.getUniqueId());
+ if (_ips != null && _ips.size() > 0)
+ message.add("They've joined with the following IPs: &e"
+ + _ips.toJSONString().replaceAll("[\"\\[\\]]", "").replace(",", "&7, &e"));
+ }
+ message.add(
+ "Their current IP is: &a" + DataManager.getOrDefault(p.getUniqueId().toString(), "ip", "unknown"));
+ }
+ getLogger().message(sender, message.toArray(new String[] {}));
+ return true;
+ }
+
+ @EventHandler
+ public void onPlayerJoin(PlayerJoinEvent event)
+ {
+ DataManager.setData(event.getPlayer(), "lastjoined", System.currentTimeMillis());
+ DataManager.setData(event.getPlayer(), "ip", event.getPlayer().getAddress().getHostString());
+ loadData(event.getPlayer());
+ }
+
+ @EventHandler
+ public void onPlayerQuit(PlayerQuitEvent event)
+ {
+ DataManager.setData(event.getPlayer(), "lastquit", System.currentTimeMillis());
+ unloadData(event.getPlayer());
+ }
+
+ @SuppressWarnings("unchecked")
+ public void loadData(Player player)
+ {
+ Thread t = new Thread(new Runnable()
+ {
+ @Override
+ public void run()
+ {
+ File jsonfile = new File(Main.plugin.getDataFolder(), "/seen/" + Utils.getID(player) + ".json");
+ 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", lnames);
+
+ JSONArray lips = (JSONArray) json.get("ips");
+ String ip = player.getAddress().getHostString();
+ if (!lips.contains(ip))
+ lips.add(ip);
+ json.put("ips", lips);
+
+ 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());
+ this.ips.remove(player.getUniqueId());
+ }
+
+ public JSONArray loadNames(UUID uuid)
+ {
+ File jsonfile = new File(Main.plugin.getDataFolder(), "/seen/" + uuid + ".json");
+ JSONObject json = JsonManager.getObject(jsonfile);
+ if (json == null)
+ return null;
+ else
+ return (JSONArray) json.get("names");
+ }
+
+ public JSONArray loadIPs(UUID uuid)
+ {
+ File jsonfile = new File(Main.plugin.getDataFolder(), "/seen/" + uuid + ".json");
+ JSONObject json = JsonManager.getObject(jsonfile);
+ if (json == null)
+ return null;
+ else
+ return (JSONArray) json.get("ips");
+ }
+
+ @SuppressWarnings("deprecation")
+ @Command(hook = "firstseenP")
+ public void firstseen(CommandSender sender, String person)
+ {
+ OfflinePlayer oPlayer = Bukkit.getPlayer(person);
+ if (oPlayer == null)
+ oPlayer = Bukkit.getServer().getOfflinePlayer(person);
+ Long firstJoin = oPlayer.getFirstPlayed();
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ String disDate = format.format(new Date(firstJoin));
+ if (disDate.equals("1970-01-01 00:00"))
+ {
+ getLogger().message(sender, true, "&3" + oPlayer.getName() + "&c has never joined.");
+ }
+ else
+ {
+ getLogger().message(sender, "&3" + oPlayer.getName() + " &efirst joined&a " + disDate + "&e.");
+ }
+ }
+
+ @Command(hook = "firstseen")
+ public void firstseen(CommandSender sender)
+ {
+ firstseen(sender, sender.getName());
+ }
+
+ @Command(hook = "playtimeDef")
+ public boolean playtime(CommandSender sender)
+ {
+ return playtime(sender, sender.getName());
+ }
+
+ @Command(hook = "playtime")
+ public boolean playtime(CommandSender sender, String name)
+ {
+ if (name == null)
+ name = sender.getName();
+ Player player = Bukkit.getPlayer(name);
+ if (player == null)
+ {
+ getLogger().message(sender, true, "§e" + name
+ + "§7 couldn't be found! Hint: Currently, you can only check statistics of players that are online!");
+ return true;
+ }
+ int ticks_lived = player.getStatistic(Statistic.PLAY_ONE_TICK);
+ int days = ticks_lived / 1728000;
+ int hours = (ticks_lived % 1728000) / 72000;
+ int minutes = (ticks_lived % 72000) / 1200;
+ if (sender.getName().equals(name))
+ {
+ getLogger().message(sender,
+ "You have played for &b"
+ + (days == 0 && hours == 0 && minutes == 0 ? "less than a minute."
+ : ("a total of: &e" + (days != 0 ? (days + "d ") : "")
+ + ((hours != 0 || days != 0) ? (hours + "h ") : "")
+ + ((minutes != 0 || hours != 0 || days != 0) ? (minutes + "m") : "")))
+ + "&7.");
+ }
+ else
+ {
+ getLogger().message(sender, "&3" + name + " &7has played for "
+ + (days == 0 && hours == 0 && minutes == 0 ? "less than a minute."
+ : ("a total of: &e" + (days != 0 ? (days + "d ") : "")
+ + ((hours != 0 || days != 0) ? (hours + "h ") : "")
+ + ((minutes != 0 || hours != 0 || days != 0) ? (minutes + "m") : "")))
+ + "&7.");
+ }
+ return true;
+ }
+
+ @Command(hook = "uuidDef")
+ public boolean uuid(CommandSender sender)
+ {
+ Player player = (Player) sender;
+ Message m = new Message(sender, null);
+ m.appendText(getLogger().getPrefix());
+ m.appendSuggestHover("&6> UUID: &e" + player.getUniqueId().toString(), player.getUniqueId().toString(),
+ "Click to copy into chatbox!");
+ m.send();
+ return true;
+ }
+
+ @SuppressWarnings("deprecation")
+ @Command(hook = "uuid")
+ public boolean uuid(CommandSender sender, String name)
+ {
+ OfflinePlayer player = Bukkit.getPlayer(name);
+ if (player == null)
+ {
+ player = Bukkit.getOfflinePlayer(name);
+ if (player == null)
+ {
+ getLogger().error("That player couldn't be found!");
+ return true;
+ }
+ }
+ Message m = new Message(sender, null);
+ m.appendText(getLogger().getPrefix());
+ m.appendSuggestHover("&6> UUID: &e" + player.getUniqueId().toString(), player.getUniqueId().toString(),
+ "Click to copy into chatbox!");
+ m.send();
+ return true;
+ }
+}