From 6587d3aff05b33d54550501bc7eb80e4625f2d1d Mon Sep 17 00:00:00 2001 From: "Ansgar [Hiajen]" Date: Sat, 12 Jun 2021 18:00:44 +0200 Subject: [PATCH] to Database stuff --- build.gradle | 1 + .../net/saltymc/eaa/commands/TagCommand.java | 43 +++++--- .../saltymc/eaa/util/database/DB_Player.java | 104 ++++++++++++++++++ .../net/saltymc/eaa/util/database/DB_Tag.java | 77 +++++++++++++ .../saltymc/eaa/util/database/Postgre.java | 54 +++++++++ 5 files changed, 264 insertions(+), 15 deletions(-) create mode 100644 src/main/java/net/saltymc/eaa/util/database/DB_Player.java create mode 100644 src/main/java/net/saltymc/eaa/util/database/DB_Tag.java create mode 100644 src/main/java/net/saltymc/eaa/util/database/Postgre.java diff --git a/build.gradle b/build.gradle index cf67376..eeee300 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,7 @@ dependencies { minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + include group: 'org.postgresql', name: 'postgresql', version: '42.2.9' // Fabric API. This is technically optional, but you probably want it anyway. modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" diff --git a/src/main/java/net/saltymc/eaa/commands/TagCommand.java b/src/main/java/net/saltymc/eaa/commands/TagCommand.java index 6cc7c01..4773897 100644 --- a/src/main/java/net/saltymc/eaa/commands/TagCommand.java +++ b/src/main/java/net/saltymc/eaa/commands/TagCommand.java @@ -1,5 +1,6 @@ package net.saltymc.eaa.commands; +import com.mojang.brigadier.arguments.IntegerArgumentType; import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.context.CommandContext; @@ -9,6 +10,8 @@ import net.minecraft.client.toast.SystemToast; import net.minecraft.command.argument.EntityArgumentType; import net.minecraft.text.Text; +import net.saltymc.eaa.util.database.DB_Player; +import net.saltymc.eaa.util.database.DB_Tag; import net.saltymc.eaa.util.mojangApi.PlayerInfo; import static net.fabricmc.fabric.api.client.command.v1.ClientCommandManager.argument; @@ -16,35 +19,45 @@ import static net.fabricmc.fabric.api.client.command.v1.ClientCommandManager.lit public class TagCommand extends EaaModCommand{ @Override - public int run(CommandContext context) throws CommandSyntaxException { + public int run(CommandContext context) { FabricClientCommandSource source = context.getSource(); String player = StringArgumentType.getString(context,"player"); - String tag = StringArgumentType.getString(context,"tag"); + DB_Tag.Type tag = DB_Tag.Type.valueOf(StringArgumentType.getString(context,"tag")); + int grade = IntegerArgumentType.getInteger(context, "grade"); - SystemToast.add(source.getClient().getToastManager(), SystemToast.Type.TUTORIAL_HINT, Text.of(tag), Text.of(player)); - - Text text = null; try { String playerUUID = PlayerInfo.playerNameToUUID(player); - String playerName = PlayerInfo.playerUUIDToCurrentName(playerUUID); - text = Text.of("You tagged player " + playerName + " : " + playerUUID); + DB_Player db_player = DB_Player.getPlayer(playerUUID); + new DB_Tag(db_player, tag, grade).put(); + } catch (Exception e) { - text = Text.of(e.toString()); + source.sendFeedback(Text.of(e.toString())); } - source.sendFeedback(text); + + + SystemToast.add(source.getClient().getToastManager(), SystemToast.Type.TUTORIAL_HINT, Text.of("Player Tagged"), + Text.of(player + " | " + tag.name() + " | " + grade)); return 1; } @Override public LiteralArgumentBuilder getCommandSpecification() { - return literal("/tag").then( - argument("player", StringArgumentType.word()) - .suggests((ctx, builder) -> EntityArgumentType.player().listSuggestions(ctx, builder)) - .then(argument("tag", StringArgumentType.word()) - .executes(this) - )); + return literal("/tag") + .then( + argument("player", StringArgumentType.word()) + .suggests((ctx, builder) -> EntityArgumentType.player().listSuggestions(ctx, builder)) + .then(argument("tag", StringArgumentType.word()) + .suggests(((context, builder) -> { + for (DB_Tag.Type tag : DB_Tag.Type.values()) + builder.suggest(tag.name()); + return builder.buildFuture(); + })) + .then( + argument("grade", IntegerArgumentType.integer(0,10)) + .executes(this) + ))); } } diff --git a/src/main/java/net/saltymc/eaa/util/database/DB_Player.java b/src/main/java/net/saltymc/eaa/util/database/DB_Player.java new file mode 100644 index 0000000..b47b337 --- /dev/null +++ b/src/main/java/net/saltymc/eaa/util/database/DB_Player.java @@ -0,0 +1,104 @@ +package net.saltymc.eaa.util.database; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class DB_Player { + + public static final String tableName = "Player"; + + int id = -1; + String uuid; + + public DB_Player(String uuid){ + this.uuid = uuid; + } + + private DB_Player(int id, String uuid) { + this.id = id; + this.uuid = uuid; + } + + public void put() { + putPlayer(this); + } + + public DB_Player get(){ + return getPlayer(this.uuid); + } + + public static void putPlayer(DB_Player player) { + + try { + PreparedStatement statement; + if (player.id != -1) { + statement = Postgre.getInstance().connection.prepareStatement("UPDATE " + tableName + " SET id = ?, UUID = ? WHERE id = ?;"); + + statement.setInt(1, player.id); + statement.setString(2, player.uuid); + + statement.setInt(3, player.id); + + } else { + statement = Postgre.getInstance().connection.prepareStatement("INSERT INTO " + tableName + " (UUID) " + + "VALUES(?);"); + + statement.setString(1, player.uuid); + + } + statement.executeQuery(); + } catch (SQLException e){ + throw new RuntimeException("Could not safe Player", e); + } + + } + + public static DB_Player getPlayer(int id){ + try { + PreparedStatement statement = Postgre.getInstance().connection.prepareStatement("SELECT * FROM " + tableName + " WHERE id = ?"); + statement.setInt(1, id); + ResultSet rs = statement.executeQuery(); + rs.next(); + return new DB_Player(rs.getInt("id"), rs.getString("UUID")); + } catch (SQLException e){ + throw new RuntimeException("Could not put Player into Database!", e); + } + } + + public static DB_Player getPlayer(String uuid){ + try { + PreparedStatement statement = Postgre.getInstance().connection.prepareStatement("SELECT * FROM Player WHERE UUID = ?"); + statement.setString(1, uuid); + ResultSet rs = statement.executeQuery(); + + if (rs.next()){ + return new DB_Player(rs.getInt("id"), rs.getString("UUID")); + } else { + //unknown Player - create new + DB_Player db_player = new DB_Player(uuid); + db_player.put(); + + return getPlayer(uuid); + } + } catch (SQLException e){ + throw new RuntimeException("Could not get Player from Database!", e); + } + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } +} diff --git a/src/main/java/net/saltymc/eaa/util/database/DB_Tag.java b/src/main/java/net/saltymc/eaa/util/database/DB_Tag.java new file mode 100644 index 0000000..a8b3dd0 --- /dev/null +++ b/src/main/java/net/saltymc/eaa/util/database/DB_Tag.java @@ -0,0 +1,77 @@ +package net.saltymc.eaa.util.database; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +public class DB_Tag { + + public static final String tableName = "Tag"; + + int id; + DB_Player player; + int grade; + Type type; + + Date tagDate; + + public DB_Tag(DB_Player db_player){ + this.player = db_player; + } + + public DB_Tag(DB_Player db_player, Type type, int grade){ + this.player = db_player; + this.type = type; + this.grade = grade; + } + + public void put(){ + putTag(this); + } + + public static void putTag(DB_Tag tag){ + try { + PreparedStatement statement = Postgre.getInstance().connect().prepareStatement( + "INSERT INTO " + tableName + " (Player_ID, Grade, TagType, TagDate) " + + "VALUES (?, ?, ?, ?);"); + + statement.setInt(1, tag.player.getId()); + statement.setInt(2,tag.grade); + statement.setString(3, tag.type.name()); + statement.setDate(4 , new java.sql.Date(new Date().getTime())); + } catch (SQLException e){ + throw new RuntimeException("Could not save Tag!", e); + } + } + + public static List getTagsFromPlayer(DB_Player player){ + try { + PreparedStatement statement = Postgre.getInstance().connect().prepareStatement("SELECT * FROM " + tableName + " WHERE Player_ID = ? ORDER BY TagDate ASC;"); + statement.setInt(1, player.getId()); + + ResultSet rs = statement.executeQuery(); + List ret = new ArrayList<>(); + while (rs.next()){ + DB_Tag tmp = new DB_Tag(player); + tmp.id = rs.getInt("ID"); + tmp.grade = rs.getInt("Grade"); + tmp.type = Type.valueOf(rs.getString("TagType")); + tmp.tagDate = rs.getDate("TagDate"); + + ret.add(tmp); + } + + return ret; + + } catch (SQLException e){ + throw new RuntimeException("Error getting Tag!", e); + } + } + + public enum Type { + HACKER, FRIENDLY, GOODPLAYER, IDIOT + } +} diff --git a/src/main/java/net/saltymc/eaa/util/database/Postgre.java b/src/main/java/net/saltymc/eaa/util/database/Postgre.java new file mode 100644 index 0000000..0d80917 --- /dev/null +++ b/src/main/java/net/saltymc/eaa/util/database/Postgre.java @@ -0,0 +1,54 @@ +package net.saltymc.eaa.util.database; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class Postgre { + + private final String url = "jdbc:postgresql://localhost/myDB"; + private final String user = "postgres"; + private final String password = "root"; + + private static Postgre postgre; + public Connection connection; + + public Postgre(){ + this.connection = connect(); + } + + static Postgre getInstance(){ + if (postgre == null) + postgre = new Postgre(); + + return postgre; + } + + + /** + * Connect to the PostgreSQL database + * + * @return a Connection object + */ + public Connection connect() { + Connection conn = null; + try { + conn = DriverManager.getConnection(url, user, password); + Class.forName("org.postgresql.Driver"); + + if (conn != null) { + System.out.println("Connected to the PostgreSQL server successfully."); + } else { + System.out.println("Failed to make connection!"); + } + + } catch (SQLException e) { + System.out.println(e.getMessage()); + } catch (ClassNotFoundException e) { + System.out.println("PostgreSQL JDBC driver not found."); + e.printStackTrace(); + } + + return conn; + } +}