From 70ee381f48ed23d6a682c3931bca0875f6b66012 Mon Sep 17 00:00:00 2001 From: HeroBrineGoat <76707404+MasterOfTheFish@users.noreply.github.com> Date: Thu, 20 Jan 2022 19:09:54 -0500 Subject: [PATCH] More database stuff --- .../fisher2911/hmccosmetics/HMCCosmetics.java | 7 +- .../hmccosmetics/database/Database.java | 113 ++++++++++-------- .../database/DatabaseFactory.java | 3 +- .../hmccosmetics/database/MySQLDatabase.java | 2 +- .../hmccosmetics/database/SQLiteDatabase.java | 10 +- .../hmccosmetics/inventory/PlayerArmor.java | 5 + .../fisher2911/hmccosmetics/user/User.java | 12 -- .../hmccosmetics/user/UserManager.java | 3 + 8 files changed, 85 insertions(+), 70 deletions(-) diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/HMCCosmetics.java b/src/main/java/io/github/fisher2911/hmccosmetics/HMCCosmetics.java index 0f804207..87078e71 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/HMCCosmetics.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/HMCCosmetics.java @@ -21,6 +21,7 @@ import org.bukkit.Bukkit; import org.bukkit.plugin.java.JavaPlugin; import java.io.BufferedReader; +import java.sql.SQLException; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -49,7 +50,11 @@ public class HMCCosmetics extends JavaPlugin { this.userManager.startTeleportTask(); - this.database = DatabaseFactory.create(this); + try { + this.database = DatabaseFactory.create(this); + } catch (final SQLException exception) { + exception.printStackTrace(); + } this.registerCommands(); this.registerListeners(); diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java b/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java index e732f743..c10c9f0c 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/database/Database.java @@ -2,14 +2,19 @@ package io.github.fisher2911.hmccosmetics.database; import com.j256.ormlite.dao.Dao; import com.j256.ormlite.dao.DaoManager; -import com.j256.ormlite.jdbc.DataSourceConnectionSource; +import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.table.TableUtils; import io.github.fisher2911.hmccosmetics.HMCCosmetics; +import io.github.fisher2911.hmccosmetics.cosmetic.CosmeticManager; import io.github.fisher2911.hmccosmetics.database.dao.ArmorItemDAO; import io.github.fisher2911.hmccosmetics.database.dao.UserDAO; +import io.github.fisher2911.hmccosmetics.gui.ArmorItem; +import io.github.fisher2911.hmccosmetics.inventory.PlayerArmor; import io.github.fisher2911.hmccosmetics.user.User; import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.sql.SQLException; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; @@ -34,9 +39,9 @@ public abstract class Database { "))"; protected final HMCCosmetics plugin; - private final DataSourceConnectionSource dataSource; + private final ConnectionSource dataSource; - public Database(final HMCCosmetics plugin, final DataSourceConnectionSource dataSource) { + public Database(final HMCCosmetics plugin, final ConnectionSource dataSource) { this.plugin = plugin; this.dataSource = dataSource; } @@ -49,8 +54,8 @@ public abstract class Database { private void createTables() { try { - TableUtils.createTable(this.dataSource, ArmorItemDAO.class); - TableUtils.createTable(this.dataSource, UserDAO.class); + TableUtils.createTableIfNotExists(this.dataSource, ArmorItemDAO.class); + TableUtils.createTableIfNotExists(this.dataSource, UserDAO.class); } catch (final SQLException exception) { exception.printStackTrace(); } @@ -61,9 +66,11 @@ public abstract class Database { final UserDAO user = new UserDAO(u.getUuid()); final Dao userDao = DaoManager.createDao(this.dataSource, UserDAO.class); - userDao.create(user); userDao.assignEmptyForeignCollection(user, "armorItems"); - userDao.create(user); + for (final ArmorItem armorItem : u.getPlayerArmor().getArmorItems()) { + user.getArmorItems().add(ArmorItemDAO.fromArmorItem(armorItem)); + } + userDao.createOrUpdate(user); } catch (final SQLException exception) { exception.printStackTrace(); } @@ -89,52 +96,52 @@ public abstract class Database { // } // } // -// public User loadUser(final UUID uuid) { -// final int armorStandId = ARMOR_STAND_ID.getAndDecrement(); -// -// final User blankUser = new User( -// uuid, -// PlayerArmor.empty(), -// armorStandId -// ); -// -// try (final PreparedStatement statement = this.getConnection().prepareStatement(this.getLoadStatement())) { -// statement.setString(1, uuid.toString()); -// -// final ResultSet results = statement.executeQuery(); -// -// if (!results.next()) { -// return blankUser; -// } -// -// final String backpackId = results.getString(1); -// final String hatId = results.getString(2); -// final int dye = results.getInt(3); -// -// final CosmeticManager manager = this.plugin.getCosmeticManager(); -// -// ArmorItem backpack = manager.getArmorItem(backpackId); -// ArmorItem hat = manager.getArmorItem(hatId); -// -// if (backpack == null) backpack = ArmorItem.empty(ArmorItem.Type.BACKPACK); -// if (hat == null) hat = ArmorItem.empty(ArmorItem.Type.HAT); -// -// return new User( -// uuid, -// new PlayerArmor( -// hat, -// backpack, -// // todo -// null -// ), -// armorStandId -// ); -// -// } catch (final SQLException exception) { -// exception.printStackTrace(); -// return blankUser; -// } -// } + public User loadUser(final UUID uuid) { + final int armorStandId = ARMOR_STAND_ID.getAndDecrement(); + + final User blankUser = new User( + uuid, + PlayerArmor.empty(), + armorStandId + ); + + try (final PreparedStatement statement = this.getConnection().prepareStatement(this.getLoadStatement())) { + statement.setString(1, uuid.toString()); + + final ResultSet results = statement.executeQuery(); + + if (!results.next()) { + return blankUser; + } + + final String backpackId = results.getString(1); + final String hatId = results.getString(2); + final int dye = results.getInt(3); + + final CosmeticManager manager = this.plugin.getCosmeticManager(); + + ArmorItem backpack = manager.getArmorItem(backpackId); + ArmorItem hat = manager.getArmorItem(hatId); + + if (backpack == null) backpack = ArmorItem.empty(ArmorItem.Type.BACKPACK); + if (hat == null) hat = ArmorItem.empty(ArmorItem.Type.HAT); + + return new User( + uuid, + new PlayerArmor( + hat, + backpack, + // todo + null + ), + armorStandId + ); + + } catch (final SQLException exception) { + exception.printStackTrace(); + return blankUser; + } + } public abstract void close(); diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/database/DatabaseFactory.java b/src/main/java/io/github/fisher2911/hmccosmetics/database/DatabaseFactory.java index 0a79d9fa..9c8c6db8 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/database/DatabaseFactory.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/database/DatabaseFactory.java @@ -7,6 +7,7 @@ import org.bukkit.configuration.file.YamlConfiguration; import java.io.File; import java.nio.file.Path; +import java.sql.SQLException; import java.util.logging.Logger; public class DatabaseFactory { @@ -19,7 +20,7 @@ public class DatabaseFactory { private static final String IP_PATH = "ip"; private static final String PORT_PATH = "port"; - public static Database create(final HMCCosmetics plugin) { + public static Database create(final HMCCosmetics plugin) throws SQLException { final File file = Path.of(plugin.getDataFolder().getPath(), FILE_NAME).toFile(); if (!file.exists()) { diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/database/MySQLDatabase.java b/src/main/java/io/github/fisher2911/hmccosmetics/database/MySQLDatabase.java index 22a45fe6..dbabb5b5 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/database/MySQLDatabase.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/database/MySQLDatabase.java @@ -39,7 +39,7 @@ public class MySQLDatabase extends Database { final String password, final String ip, final String port) { - super(plugin); + super(plugin, null); final HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://" + ip + ":" + port + "/" + name); diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/database/SQLiteDatabase.java b/src/main/java/io/github/fisher2911/hmccosmetics/database/SQLiteDatabase.java index e3b7171b..0e40ef90 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/database/SQLiteDatabase.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/database/SQLiteDatabase.java @@ -1,5 +1,7 @@ package io.github.fisher2911.hmccosmetics.database; +import com.j256.ormlite.jdbc.JdbcConnectionSource; +import com.j256.ormlite.jdbc.JdbcPooledConnectionSource; import io.github.fisher2911.hmccosmetics.HMCCosmetics; import io.github.fisher2911.hmccosmetics.inventory.PlayerArmor; import io.github.fisher2911.hmccosmetics.user.User; @@ -15,8 +17,12 @@ public class SQLiteDatabase extends Database { private Connection conn; - public SQLiteDatabase(final HMCCosmetics plugin) { - super(plugin); + public SQLiteDatabase(final HMCCosmetics plugin) throws SQLException { + super(plugin, new JdbcPooledConnectionSource("jdbc:sqlite:" + Path.of( + plugin.getDataFolder().getPath(), + "database", + "users.db" + ).toFile().getPath())); } String SAVE_STATEMENT = diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/inventory/PlayerArmor.java b/src/main/java/io/github/fisher2911/hmccosmetics/inventory/PlayerArmor.java index 0430fab6..84284fa4 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/inventory/PlayerArmor.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/inventory/PlayerArmor.java @@ -7,6 +7,7 @@ import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import java.util.ArrayList; +import java.util.Collection; import java.util.EnumMap; import java.util.Map; @@ -60,4 +61,8 @@ public class PlayerArmor { public ArmorItem setItem(final ArmorItem armorItem) { return this.armorItems.put(armorItem.getType(), armorItem); } + + public Collection getArmorItems() { + return this.armorItems.values(); + } } diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java b/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java index 00027326..47e89e4a 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/user/User.java @@ -174,18 +174,6 @@ public class User { final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager(); - final PacketContainer teleportPacket = new PacketContainer(PacketType.Play.Server.ENTITY_TELEPORT); - - teleportPacket.getIntegers().write(0, this.armorStandId); - teleportPacket.getDoubles(). - write(0, location.getX()). - write(1, location.getY()). - write(2, location.getZ()); - - teleportPacket.getBytes(). - write(0, (byte) (location.getYaw() * 256.0F / 360.0F)). - write(1, (byte) (location.getPitch() * 256.0F / 360.0F)); - for (final Player p : Bukkit.getOnlinePlayers()) { try { protocolManager.sendServerPacket(p, armorPacket); diff --git a/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java b/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java index 64d3f43f..62070c5b 100644 --- a/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java +++ b/src/main/java/io/github/fisher2911/hmccosmetics/user/UserManager.java @@ -70,6 +70,9 @@ public class UserManager { this.armorStandIdMap.remove(user.getArmorStandId()); + // todo - remove + this.plugin.getDatabase().saveUser(user); + user.removeAllCosmetics(); this.setFakeHelmet(user); user.despawnAttached();