diff options
author | David <david@panic.tk> | 2018-11-07 23:50:06 +0100 |
---|---|---|
committer | David <david@panic.tk> | 2018-11-07 23:50:06 +0100 |
commit | 604cf01967ede98bf5024e4926bb0777fc4e8eee (patch) | |
tree | e2fa63d7e683769ee3bf3eddc75280648e92eb04 /src/main/java/com/redstoner/modules/seen | |
parent | e86c52ef7c0e1e33c6af0e8674b038976bec11cc (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.cmd | 53 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/seen/Seen.java | 320 |
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; + } +} |