From 750b5495337600f9783ef457a8436f282c945d42 Mon Sep 17 00:00:00 2001 From: Ajneb97 Date: Wed, 24 Dec 2025 14:26:00 -0300 Subject: [PATCH] 1.21.1 --- pom.xml | 6 +- src/main/java/pk/ajneb97/MainCommand.java | 14 +- src/main/java/pk/ajneb97/PlayerKits2.java | 6 +- .../configs/DataFolderConfigManager.java | 9 +- .../pk/ajneb97/configs/KitsConfigManager.java | 2 +- .../ajneb97/configs/PlayersConfigManager.java | 80 ++++++++---- .../pk/ajneb97/database/MySQLConnection.java | 51 +------- .../pk/ajneb97/database/PlayerCallback.java | 8 -- .../pk/ajneb97/listeners/PlayerListener.java | 6 + .../pk/ajneb97/managers/KitItemManager.java | 2 +- .../ajneb97/managers/PlayerDataManager.java | 121 ++++++++++++------ .../model/internal/GenericCallback.java | 6 + .../internal}/SimpleCallback.java | 2 +- .../java/pk/ajneb97/utils/ServerVersion.java | 3 +- 14 files changed, 182 insertions(+), 134 deletions(-) delete mode 100644 src/main/java/pk/ajneb97/database/PlayerCallback.java create mode 100644 src/main/java/pk/ajneb97/model/internal/GenericCallback.java rename src/main/java/pk/ajneb97/{database => model/internal}/SimpleCallback.java (61%) diff --git a/pom.xml b/pom.xml index 2ab77cd..7c98403 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ pk.ajneb97 PlayerKits2 - 1.20.2 + 1.21.1 21 @@ -41,13 +41,13 @@ io.papermc.paper paper-api - 1.21.10-R0.1-SNAPSHOT + 1.21.11-R0.1-SNAPSHOT provided org.spigotmc spigot-api - 1.21.10-R0.1-SNAPSHOT + 1.21.11-R0.1-SNAPSHOT provided diff --git a/src/main/java/pk/ajneb97/MainCommand.java b/src/main/java/pk/ajneb97/MainCommand.java index e0c377f..6453b45 100644 --- a/src/main/java/pk/ajneb97/MainCommand.java +++ b/src/main/java/pk/ajneb97/MainCommand.java @@ -9,6 +9,7 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import pk.ajneb97.configs.MainConfigManager; import pk.ajneb97.managers.MessagesManager; +import pk.ajneb97.managers.PlayerDataManager; import pk.ajneb97.model.Kit; import pk.ajneb97.model.internal.GiveKitInstructions; import pk.ajneb97.model.internal.PlayerKitsMessageResult; @@ -170,13 +171,16 @@ public class MainCommand implements CommandExecutor, TabCompleter { String kitName = args[1]; String playerName = args[2]; - PlayerKitsMessageResult result = plugin.getPlayerDataManager().resetKitForPlayer(playerName,kitName,playerName.equals("*")); - if(result.isError()){ - msgManager.sendMessage(sender, result.getMessage(), true); - }else{ - if(playerName.equals("*")){ + PlayerDataManager playerDataManager = plugin.getPlayerDataManager(); + if(playerName.equals("*")){ + playerDataManager.resetKitForAllPlayers(kitName,result -> { msgManager.sendMessage(sender, messagesConfig.getString("kitResetCorrectAll") .replace("%kit%",kitName), true); + }); + }else{ + PlayerKitsMessageResult result = playerDataManager.resetKitForPlayer(playerName,kitName); + if(result.isError()){ + msgManager.sendMessage(sender, result.getMessage(), true); }else{ msgManager.sendMessage(sender, messagesConfig.getString("kitResetCorrect") .replace("%kit%",kitName).replace("%player%",playerName), true); diff --git a/src/main/java/pk/ajneb97/PlayerKits2.java b/src/main/java/pk/ajneb97/PlayerKits2.java index 17e9c2a..7f5e2b8 100644 --- a/src/main/java/pk/ajneb97/PlayerKits2.java +++ b/src/main/java/pk/ajneb97/PlayerKits2.java @@ -144,13 +144,17 @@ public class PlayerKits2 extends JavaPlugin { serverVersion = ServerVersion.v1_21_R5; break; case "1.21.9": + case "1.21.10": serverVersion = ServerVersion.v1_21_R6; break; + case "1.21.11": + serverVersion = ServerVersion.v1_21_R7; + break; default: try{ serverVersion = ServerVersion.valueOf(packageName.replace("org.bukkit.craftbukkit.", "")); }catch(Exception e){ - serverVersion = ServerVersion.v1_21_R6; + serverVersion = ServerVersion.v1_21_R7; } } } diff --git a/src/main/java/pk/ajneb97/configs/DataFolderConfigManager.java b/src/main/java/pk/ajneb97/configs/DataFolderConfigManager.java index 77557cd..23a6213 100644 --- a/src/main/java/pk/ajneb97/configs/DataFolderConfigManager.java +++ b/src/main/java/pk/ajneb97/configs/DataFolderConfigManager.java @@ -34,7 +34,14 @@ public abstract class DataFolderConfigManager { } } - public CommonConfig getConfigFile(String pathName) { + public CommonConfig getConfigFile(String pathName,boolean create) { + String pathFile = plugin.getDataFolder() + File.separator + folderName; + File folder = new File(pathFile); + File file = new File(folder, pathName); + if(!file.exists() && !create) { + return null; + } + CommonConfig commonConfig = new CommonConfig(pathName, plugin, folderName, true); commonConfig.registerConfig(); return commonConfig; diff --git a/src/main/java/pk/ajneb97/configs/KitsConfigManager.java b/src/main/java/pk/ajneb97/configs/KitsConfigManager.java index 1d1c0ad..c6c9b21 100644 --- a/src/main/java/pk/ajneb97/configs/KitsConfigManager.java +++ b/src/main/java/pk/ajneb97/configs/KitsConfigManager.java @@ -48,7 +48,7 @@ public class KitsConfigManager extends DataFolderConfigManager{ public void saveConfig(Kit kit){ String kitName = kit.getName(); - CommonConfig kitConfig = getConfigFile(kitName+".yml"); + CommonConfig kitConfig = getConfigFile(kitName+".yml",true); FileConfiguration config = kitConfig.getConfig(); diff --git a/src/main/java/pk/ajneb97/configs/PlayersConfigManager.java b/src/main/java/pk/ajneb97/configs/PlayersConfigManager.java index 5e5e0ac..6ae5022 100644 --- a/src/main/java/pk/ajneb97/configs/PlayersConfigManager.java +++ b/src/main/java/pk/ajneb97/configs/PlayersConfigManager.java @@ -1,10 +1,13 @@ package pk.ajneb97.configs; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.scheduler.BukkitRunnable; import pk.ajneb97.PlayerKits2; import pk.ajneb97.configs.model.CommonConfig; import pk.ajneb97.model.PlayerData; import pk.ajneb97.model.PlayerDataKit; +import pk.ajneb97.model.internal.GenericCallback; + import java.util.ArrayList; import java.util.HashMap; import java.util.Map; @@ -23,43 +26,54 @@ public class PlayersConfigManager extends DataFolderConfigManager{ @Override public void loadConfigs(){ - Map players = new HashMap<>(); + // No use for player config + } - ArrayList configs = getConfigs(); - for(CommonConfig commonConfig : configs){ - FileConfiguration config = commonConfig.getConfig(); - String uuidString = commonConfig.getPath().replace(".yml", ""); - String name = config.getString("name"); - ArrayList playerDataKits = new ArrayList<>(); + public void loadConfig(UUID uuid, GenericCallback callback) { + new BukkitRunnable() { + @Override + public void run() { + PlayerData playerData = null; + CommonConfig playerConfig = getConfigFile(uuid+".yml",false); + if(playerConfig != null) { + // If config exists + FileConfiguration config = playerConfig.getConfig(); + String name = config.getString("name"); + ArrayList playerDataKits = new ArrayList<>(); + if (config.contains("kits")) { + for (String key : config.getConfigurationSection("kits").getKeys(false)) { + long cooldown = config.getLong("kits." + key + ".cooldown"); + boolean oneTime = config.getBoolean("kits." + key + ".one_time"); + boolean bought = config.getBoolean("kits." + key + ".bought"); - if (config.contains("kits")) { - for (String key : config.getConfigurationSection("kits").getKeys(false)) { - long cooldown = config.getLong("kits." + key + ".cooldown"); - boolean oneTime = config.getBoolean("kits." + key + ".one_time"); - boolean bought = config.getBoolean("kits." + key + ".bought"); + PlayerDataKit playerDataKit = new PlayerDataKit(key); + playerDataKit.setCooldown(cooldown); + playerDataKit.setOneTime(oneTime); + playerDataKit.setBought(bought); - PlayerDataKit playerDataKit = new PlayerDataKit(key); - playerDataKit.setCooldown(cooldown); - playerDataKit.setOneTime(oneTime); - playerDataKit.setBought(bought); + playerDataKits.add(playerDataKit); + } + } - playerDataKits.add(playerDataKit); + playerData = new PlayerData(uuid, name); + playerData.setKits(playerDataKits); } + + PlayerData finalPlayer = playerData; + + new BukkitRunnable(){ + @Override + public void run() { + callback.onDone(finalPlayer); + } + }.runTask(plugin); } - - UUID uuid = UUID.fromString(uuidString); - PlayerData playerData = new PlayerData(uuid, name); - playerData.setKits(playerDataKits); - - players.put(uuid, playerData); - } - - plugin.getPlayerDataManager().setPlayers(players); + }.runTaskAsynchronously(plugin); } public void saveConfig(PlayerData playerData){ String playerName = playerData.getName(); - CommonConfig playerConfig = getConfigFile(playerData.getUuid()+".yml"); + CommonConfig playerConfig = getConfigFile(playerData.getUuid()+".yml",true); FileConfiguration config = playerConfig.getConfig(); config.set("name", playerName); @@ -90,4 +104,16 @@ public class PlayersConfigManager extends DataFolderConfigManager{ } } + public void resetKitForAllPlayers(String kitName){ + ArrayList configs = getConfigs(); + for(CommonConfig commonConfig : configs) { + FileConfiguration config = commonConfig.getConfig(); + if(!config.contains("kits."+kitName)){ + continue; + } + config.set("kits."+kitName,null); + + commonConfig.saveConfig(); + } + } } diff --git a/src/main/java/pk/ajneb97/database/MySQLConnection.java b/src/main/java/pk/ajneb97/database/MySQLConnection.java index 46b6a0e..22a5b94 100644 --- a/src/main/java/pk/ajneb97/database/MySQLConnection.java +++ b/src/main/java/pk/ajneb97/database/MySQLConnection.java @@ -7,6 +7,8 @@ import pk.ajneb97.PlayerKits2; import pk.ajneb97.managers.MessagesManager; import pk.ajneb97.model.PlayerData; import pk.ajneb97.model.PlayerDataKit; +import pk.ajneb97.model.internal.GenericCallback; +import pk.ajneb97.model.internal.SimpleCallback; import java.sql.Connection; import java.sql.PreparedStatement; @@ -29,7 +31,6 @@ public class MySQLConnection { connection = new HikariConnection(config); connection.getHikari().getConnection(); createTables(); - loadData(); Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage(plugin.prefix+" &aSuccessfully connected to the Database.")); }catch(Exception e) { Bukkit.getConsoleSender().sendMessage(MessagesManager.getLegacyColoredMessage(plugin.prefix+" &cError while connecting to the Database.")); @@ -45,50 +46,6 @@ public class MySQLConnection { } } - public void loadData(){ - Map playerMap = new HashMap<>(); - try(Connection connection = getConnection()){ - PreparedStatement statement = connection.prepareStatement( - "SELECT playerkits_players.UUID, playerkits_players.PLAYER_NAME, " + - "playerkits_players_kits.NAME, " + - "playerkits_players_kits.COOLDOWN, " + - "playerkits_players_kits.ONE_TIME, " + - "playerkits_players_kits.BOUGHT " + - "FROM playerkits_players LEFT JOIN playerkits_players_kits " + - "ON playerkits_players.UUID = playerkits_players_kits.UUID"); - - ResultSet result = statement.executeQuery(); - - while(result.next()){ - UUID uuid = UUID.fromString(result.getString("UUID")); - String playerName = result.getString("PLAYER_NAME"); - String kitName = result.getString("NAME"); - long cooldown = result.getLong("COOLDOWN"); - boolean oneTime = result.getBoolean("ONE_TIME"); - boolean bought = result.getBoolean("BOUGHT"); - - PlayerData player = playerMap.get(uuid); - if(player == null){ - //Create and add it - player = new PlayerData(uuid,playerName); - playerMap.put(uuid, player); - } - - if(kitName != null){ - PlayerDataKit playerDataKit = new PlayerDataKit(kitName); - playerDataKit.setCooldown(cooldown); - playerDataKit.setOneTime(oneTime); - playerDataKit.setBought(bought); - player.addKit(playerDataKit); - } - } - } catch (SQLException e) { - e.printStackTrace(); - } - - plugin.getPlayerDataManager().setPlayers(playerMap); - } - public void createTables() { try(Connection connection = getConnection()){ PreparedStatement statement1 = connection.prepareStatement( @@ -114,7 +71,7 @@ public class MySQLConnection { } } - public void getPlayer(String uuid,PlayerCallback callback){ + public void getPlayer(String uuid, GenericCallback callback){ new BukkitRunnable(){ @Override public void run() { @@ -167,7 +124,7 @@ public class MySQLConnection { }.runTaskAsynchronously(plugin); } - public void createPlayer(PlayerData player,SimpleCallback callback){ + public void createPlayer(PlayerData player, SimpleCallback callback){ new BukkitRunnable(){ @Override public void run() { diff --git a/src/main/java/pk/ajneb97/database/PlayerCallback.java b/src/main/java/pk/ajneb97/database/PlayerCallback.java deleted file mode 100644 index 2008151..0000000 --- a/src/main/java/pk/ajneb97/database/PlayerCallback.java +++ /dev/null @@ -1,8 +0,0 @@ -package pk.ajneb97.database; - -import pk.ajneb97.model.PlayerData; - -public interface PlayerCallback { - - void onDone(PlayerData player); -} diff --git a/src/main/java/pk/ajneb97/listeners/PlayerListener.java b/src/main/java/pk/ajneb97/listeners/PlayerListener.java index 724a0a9..cc93000 100644 --- a/src/main/java/pk/ajneb97/listeners/PlayerListener.java +++ b/src/main/java/pk/ajneb97/listeners/PlayerListener.java @@ -7,6 +7,7 @@ import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; import pk.ajneb97.PlayerKits2; import pk.ajneb97.managers.InventoryManager; import pk.ajneb97.managers.MessagesManager; @@ -33,6 +34,11 @@ public class PlayerListener implements Listener { } } + @EventHandler + public void onLeave(PlayerQuitEvent event){ + plugin.getPlayerDataManager().manageLeave(event.getPlayer()); + } + @EventHandler public void closeInventory(InventoryCloseEvent event){ Player player = (Player) event.getPlayer(); diff --git a/src/main/java/pk/ajneb97/managers/KitItemManager.java b/src/main/java/pk/ajneb97/managers/KitItemManager.java index 7d33be2..dc9c015 100644 --- a/src/main/java/pk/ajneb97/managers/KitItemManager.java +++ b/src/main/java/pk/ajneb97/managers/KitItemManager.java @@ -243,7 +243,7 @@ public class KitItemManager { if(lore != null) { List loreCopy = new ArrayList<>(lore); if(useMiniMessage){ - MiniMessageUtils.setItemLore(meta,lore,player,plugin); + MiniMessageUtils.setItemLore(meta,loreCopy,player,plugin); }else{ for(int i=0;i(); this.playerNames = new HashMap<>(); } @@ -27,13 +32,6 @@ public class PlayerDataManager { return players; } - public void setPlayers(Map players) { - this.players = players; - for(Map.Entry entry : players.entrySet()){ - playerNames.put(entry.getValue().getName(),entry.getKey()); - } - } - public void addPlayer(PlayerData p){ players.put(p.getUuid(),p); playerNames.put(p.getName(), p.getUuid()); @@ -68,6 +66,11 @@ public class PlayerDataManager { return players.get(uuid); } + public void removePlayer(PlayerData playerData){ + players.remove(playerData.getUuid()); + playerNames.remove(playerData.getName()); + } + public void removePlayerByUUID(UUID uuid){ players.remove(uuid); } @@ -133,41 +136,58 @@ public class PlayerDataManager { } } - public PlayerKitsMessageResult resetKitForPlayer(String name, String kitName, boolean all){ - PlayerData playerData = getPlayerByName(name); + public PlayerKitsMessageResult resetKitForPlayer(String playerName, String kitName){ FileConfiguration messagesConfig = plugin.getConfigsManager().getMessagesConfigManager().getConfig(); - if(playerData == null && !all){ + if(Bukkit.getPlayer(playerName) == null){ + return PlayerKitsMessageResult.error(messagesConfig.getString("playerNotOnline") + .replace("%player%",playerName)); + } + + PlayerData playerData = getPlayerByName(playerName); + if(playerData == null){ return PlayerKitsMessageResult.error(messagesConfig.getString("playerDataNotFound") - .replace("%player%",name)); - } - - if(all){ - for(Map.Entry entry : players.entrySet()){ - entry.getValue().resetKit(kitName); - } - }else{ - playerData.resetKit(kitName); + .replace("%player%",playerName)); } + playerData.resetKit(kitName); if(plugin.getMySQLConnection() != null){ - if(all){ - plugin.getMySQLConnection().resetKit(null,kitName,true); - }else{ - plugin.getMySQLConnection().resetKit(playerData.getUuid().toString(),kitName,false); - } - + plugin.getMySQLConnection().resetKit(playerData.getUuid().toString(),kitName,false); } return PlayerKitsMessageResult.success(); } + + public void resetKitForAllPlayers(String kitName, GenericCallback callback){ + new BukkitRunnable() { + @Override + public void run() { + MySQLConnection mySQLConnection = plugin.getMySQLConnection(); + if (mySQLConnection == null) { + PlayersConfigManager playerConfigsManager = plugin.getConfigsManager().getPlayersConfigManager(); + playerConfigsManager.resetKitForAllPlayers(kitName); + } + + new BukkitRunnable() { + @Override + public void run() { + players.values().forEach(p -> p.resetKit(kitName)); + if(plugin.getMySQLConnection() != null){ + plugin.getMySQLConnection().resetKit(null,kitName,true); + } + + callback.onDone(PlayerKitsMessageResult.success()); + } + }.runTask(plugin); + } + }.runTaskAsynchronously(plugin); + } + public void manageJoin(Player player){ - // Create or update data if(plugin.getMySQLConnection() != null){ MySQLConnection mySQLConnection = plugin.getMySQLConnection(); UUID uuid = player.getUniqueId(); mySQLConnection.getPlayer(uuid.toString(), playerData -> { - removePlayerByUUID(uuid); //Remove data if already exists if(playerData != null) { addPlayer(playerData); //Update name if different @@ -180,24 +200,49 @@ public class PlayerDataManager { playerData = new PlayerData(uuid, player.getName()); addPlayer(playerData); - //Create if it doesn't exist + //Create if it doesn't exist + first join kit mySQLConnection.createPlayer(playerData, () -> plugin.getKitsManager().giveFirstJoinKit(player)); } }); }else{ - PlayerData playerData = getPlayer(player,false); - if(playerData == null){ - playerData = new PlayerData(player.getUniqueId(),player.getName()); - playerData.setModified(true); - addPlayer(playerData); - plugin.getKitsManager().giveFirstJoinKit(player); - }else{ - if(playerData.getName() == null || !playerData.getName().equals(player.getName())){ - updatePlayerName(playerData.getName(),player.getName(),player.getUniqueId()); - playerData.setName(player.getName()); + // Load player data from file if exists + plugin.getConfigsManager().getPlayersConfigManager().loadConfig(player.getUniqueId(), playerData -> { + if(playerData != null){ + addPlayer(playerData); + if(playerData.getName() == null || !playerData.getName().equals(player.getName())){ + updatePlayerName(playerData.getName(),player.getName(),player.getUniqueId()); + playerData.setName(player.getName()); + playerData.setModified(true); + } + }else{ + // Create it if it doesn't exist. + playerData = new PlayerData(player.getUniqueId(),player.getName()); playerData.setModified(true); + addPlayer(playerData); + + // First join kit + plugin.getKitsManager().giveFirstJoinKit(player); + } + }); + } + } + + public void manageLeave(Player player){ + // Save player data into file and remove from map + PlayerData playerData = getPlayer(player,false); + if(playerData != null){ + if(plugin.getMySQLConnection() == null) { + if(playerData.isModified()){ + new BukkitRunnable(){ + @Override + public void run() { + plugin.getConfigsManager().getPlayersConfigManager().saveConfig(playerData); + } + }.runTaskAsynchronously(plugin); } } + + removePlayer(playerData); } } } diff --git a/src/main/java/pk/ajneb97/model/internal/GenericCallback.java b/src/main/java/pk/ajneb97/model/internal/GenericCallback.java new file mode 100644 index 0000000..a5b33a1 --- /dev/null +++ b/src/main/java/pk/ajneb97/model/internal/GenericCallback.java @@ -0,0 +1,6 @@ +package pk.ajneb97.model.internal; + +public interface GenericCallback { + + void onDone(T result); +} diff --git a/src/main/java/pk/ajneb97/database/SimpleCallback.java b/src/main/java/pk/ajneb97/model/internal/SimpleCallback.java similarity index 61% rename from src/main/java/pk/ajneb97/database/SimpleCallback.java rename to src/main/java/pk/ajneb97/model/internal/SimpleCallback.java index 8f63b98..65f35e8 100644 --- a/src/main/java/pk/ajneb97/database/SimpleCallback.java +++ b/src/main/java/pk/ajneb97/model/internal/SimpleCallback.java @@ -1,4 +1,4 @@ -package pk.ajneb97.database; +package pk.ajneb97.model.internal; public interface SimpleCallback { diff --git a/src/main/java/pk/ajneb97/utils/ServerVersion.java b/src/main/java/pk/ajneb97/utils/ServerVersion.java index 528f5fa..c2e2b13 100644 --- a/src/main/java/pk/ajneb97/utils/ServerVersion.java +++ b/src/main/java/pk/ajneb97/utils/ServerVersion.java @@ -31,7 +31,8 @@ public enum ServerVersion { v1_21_R3, v1_21_R4, v1_21_R5, - v1_21_R6; + v1_21_R6, + v1_21_R7; public boolean serverVersionGreaterEqualThan(ServerVersion version1,ServerVersion version2){ return version1.ordinal() >= version2.ordinal();