summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/modules/check
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/check
parente86c52ef7c0e1e33c6af0e8674b038976bec11cc (diff)
Converted Modules to gradle
Diffstat (limited to 'src/main/java/com/redstoner/modules/check')
-rw-r--r--src/main/java/com/redstoner/modules/check/Check.cmd8
-rw-r--r--src/main/java/com/redstoner/modules/check/Check.java247
2 files changed, 255 insertions, 0 deletions
diff --git a/src/main/java/com/redstoner/modules/check/Check.cmd b/src/main/java/com/redstoner/modules/check/Check.cmd
new file mode 100644
index 0000000..87cadbd
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/check/Check.cmd
@@ -0,0 +1,8 @@
+command check {
+ perm utils.check;
+
+ [string:player] {
+ run checkCommand player;
+ help Get info on a player;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/redstoner/modules/check/Check.java b/src/main/java/com/redstoner/modules/check/Check.java
new file mode 100644
index 0000000..48bf579
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/check/Check.java
@@ -0,0 +1,247 @@
+package com.redstoner.modules.check;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Serializable;
+import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Scanner;
+
+import org.bukkit.Bukkit;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.command.CommandSender;
+import org.bukkit.event.Listener;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+
+import com.nemez.cmdmgr.Command;
+import com.nemez.cmdmgr.Command.AsyncType;
+import com.nemez.cmdmgr.CommandManager;
+import com.redstoner.annotations.Commands;
+import com.redstoner.annotations.Version;
+import com.redstoner.coremods.moduleLoader.ModuleLoader;
+import com.redstoner.misc.CommandHolderType;
+import com.redstoner.misc.Main;
+import com.redstoner.misc.mysql.JSONManager;
+import com.redstoner.misc.mysql.MysqlHandler;
+import com.redstoner.misc.mysql.elements.ConstraintOperator;
+import com.redstoner.misc.mysql.elements.MysqlConstraint;
+import com.redstoner.misc.mysql.elements.MysqlDatabase;
+import com.redstoner.misc.mysql.elements.MysqlTable;
+import com.redstoner.modules.Module;
+
+import net.nemez.chatapi.click.Message;
+
+@Commands(CommandHolderType.File)
+@Version(major = 4, minor = 1, revision = 0, compatible = 4)
+public class Check implements Module, Listener
+{
+ MysqlTable table;
+
+ @Override
+ public boolean onEnable()
+ {
+ Map<Serializable, Serializable> config = JSONManager.getConfiguration("check.json");
+ if (config == null || !config.containsKey("database") || !config.containsKey("table"))
+ {
+ getLogger().error("Could not load the Check config file, disabling!");
+ return false;
+ }
+ try
+ {
+ MysqlDatabase database = MysqlHandler.INSTANCE
+ .getDatabase((String) config.get("database") + "?autoReconnect=true");
+ table = database.getTable((String) config.get("table"));
+ }
+ catch (NullPointerException e)
+ {
+ getLogger().error("Could not use the Check config, disabling!");
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public void postEnable()
+ {
+ CommandManager.registerCommand(getCommandString(), this, Main.plugin);
+ }
+
+ @SuppressWarnings("deprecation")
+ @Command(hook = "checkCommand", async = AsyncType.ALWAYS)
+ public void checkCommand(final CommandSender sender, final String player)
+ {
+ getLogger().message(sender, "&7Please note that the data may not be fully accurate!");
+ OfflinePlayer oPlayer;
+ oPlayer = Bukkit.getPlayer(player);
+ if (oPlayer == null)
+ oPlayer = Bukkit.getServer().getOfflinePlayer(player);
+ sendData(sender, oPlayer);
+ if (ModuleLoader.exists("Tag"))
+ Bukkit.dispatchCommand(sender, "tag check " + player);
+ }
+
+ public String read(URL url)
+ {
+ String data = "";
+ try
+ {
+ Scanner in = new Scanner(new InputStreamReader(url.openStream()));
+ while (in.hasNextLine())
+ {
+ data += in.nextLine();
+ }
+ in.close();
+ return data;
+ }
+ catch (IOException e)
+ {}
+ return null;
+ }
+
+ public JSONObject getIpInfo(OfflinePlayer player)
+ {
+ String ip = "";
+ if (player.isOnline())
+ {
+ ip = player.getPlayer().getAddress().getHostString();
+ }
+ else
+ {
+ try
+ {
+ ip = (String) table.get("last_ip", new MysqlConstraint("uuid", ConstraintOperator.EQUAL,
+ player.getUniqueId().toString().replace("-", "")))[0];
+ }
+ catch (Exception e)
+ {
+ return null;
+ }
+ }
+ try
+ {
+ URL ipinfo = new URL("https://ipinfo.io/" + ip + "/json");
+ String rawJson = read(ipinfo);
+ return (JSONObject) new JSONParser().parse(rawJson);
+ }
+ catch (Exception e)
+ {}
+ return null;
+ }
+
+ public String getFirstJoin(OfflinePlayer player)
+ {
+ Long firstJoin = player.getFirstPlayed();
+ Date date = new Date(firstJoin);
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ return format.format(date);
+ }
+
+ public String getLastSeen(OfflinePlayer player)
+ {
+ Long lastSeen = player.getLastPlayed();
+ Date date = new Date(lastSeen);
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
+ return format.format(date);
+ }
+
+ public Object[] getWebsiteData(OfflinePlayer player)
+ {
+ MysqlConstraint constraint = new MysqlConstraint("uuid", ConstraintOperator.EQUAL,
+ player.getUniqueId().toString().replace("-", ""));
+ try
+ {
+ int id = (int) table.get("id", constraint)[0];
+ String email = (String) table.get("email", constraint)[0];
+ boolean confirmed = (boolean) table.get("confirmed", constraint)[0];
+ return new Object[] {"https://redstoner.com/users/" + id, email, confirmed};
+ }
+ catch (Exception e)
+ {
+ try
+ {
+ int id = (int) table.get("id", constraint)[0];
+ String email = (String) table.get("email", constraint)[0];
+ boolean confirmed = (boolean) table.get("confirmed", constraint)[0];
+ return new Object[] {"https://redstoner.com/users/" + id, email, confirmed};
+ }
+ catch (Exception e2)
+ {}
+ return new Object[] {null};
+ }
+ }
+
+ public String getCountry(JSONObject data)
+ {
+ return (String) data.get("country");
+ }
+
+ public String getAllNames(OfflinePlayer player)
+ {
+ String uuid = player.getUniqueId().toString().replace("-", "");
+ String nameString = "";
+ try
+ {
+ String rawJson = read(new URL("https://api.mojang.com/user/profiles/" + uuid + "/names"));
+ JSONArray names = (JSONArray) new JSONParser().parse(rawJson);
+ for (Object obj : names)
+ {
+ nameString += "&e" + ((JSONObject) obj).get("name") + "&7, ";
+ }
+ nameString = nameString.substring(0, nameString.length() - 2);
+ return nameString;
+ }
+ catch (Exception e)
+ {}
+ return null;
+ }
+
+ public void sendData(CommandSender sender, OfflinePlayer player)
+ {
+ try
+ {
+ JSONObject ipInfo = getIpInfo(player);
+ // data
+ String firstJoin = getFirstJoin(player);
+ String lastSeen = getLastSeen(player);
+ firstJoin = (firstJoin.equals("1970-01-01 01:00")) ? "&eNever" : "&7(yyyy-MM-dd hh:mm) &e" + firstJoin;
+ lastSeen = (lastSeen.equals("1970-1-1 01:00")) ? "&eNever" : "&7(yyyy-MM-dd hh:mm) &e" + lastSeen;
+ Object[] websiteData = getWebsiteData(player);
+ String websiteUrl = (websiteData[0] == null) ? "None" : (String) websiteData[0];
+ String email = (websiteData[0] == null) ? "Unknown" : (String) websiteData[1];
+ boolean emailNotConfirmed = (websiteData[0] == null) ? false : !((boolean) websiteData[2]);
+ String country = (ipInfo == null) ? "Unknown" : getCountry(ipInfo);
+ String namesUsed = getAllNames(player);
+ if (namesUsed == null)
+ namesUsed = "None";
+ // messages
+ List<Message> messages = new ArrayList<>();
+ messages.add(new Message(sender, null).appendText(getLogger().getHeader()));
+ messages.add(new Message(sender, null).appendText("&7Data provided by redstoner:"));
+ messages.add(new Message(sender, null).appendSuggestHover("&6> UUID: &e" + player.getUniqueId().toString(),
+ player.getUniqueId().toString(), "Click to copy into chatbox!"));
+ messages.add(new Message(sender, null).appendText("&6> First joined: &e" + firstJoin));
+ messages.add(new Message(sender, null).appendText("&6> Last seen: &e" + lastSeen));
+ messages.add(
+ new Message(sender, null).appendText("&6> Website account: &e").appendLink(websiteUrl, websiteUrl));
+ messages.add(new Message(sender, null).appendText("&6> Email: &e")
+ .appendText((emailNotConfirmed ? "&6> &4Email NOT Confirmed!&e" : "&e") + email));
+ messages.add(new Message(sender, null).appendText("&7Data provided by ipinfo:"));
+ messages.add(new Message(sender, null).appendText("&6> Country: &e" + country));
+ messages.add(new Message(sender, null).appendText("&7Data provided by mojang:"));
+ messages.add(new Message(sender, null).appendText("&6> All ingame names used so far: &e" + namesUsed));
+ for (Message m : messages)
+ m.send();
+ }
+ catch (Exception e)
+ {
+ getLogger().message(sender, true, "Sorry, something went wrong while fetching data");
+ e.printStackTrace();
+ }
+ }
+}