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();