diff --git a/src/main/java/pk/ajneb97/configs/KitsConfigManager.java b/src/main/java/pk/ajneb97/configs/KitsConfigManager.java index 86018e1..6f43b46 100644 --- a/src/main/java/pk/ajneb97/configs/KitsConfigManager.java +++ b/src/main/java/pk/ajneb97/configs/KitsConfigManager.java @@ -144,6 +144,7 @@ public class KitsConfigManager { config.set("one_time",kit.isOneTime()); config.set("auto_armor",kit.isAutoArmor()); config.set("permission_required",kit.isPermissionRequired()); + config.set("clear_inventory",kit.isClearInventory()); config.set("custom_permission",kit.getCustomPermission()); config.set("save_original_items",kit.isSaveOriginalItems()); @@ -234,9 +235,10 @@ public class KitsConfigManager { String customPermission = config.contains(mainPath+"custom_permission") ? config.getString(mainPath+"custom_permission") : null; boolean autoArmor = config.contains(mainPath+"auto_armor") ? config.getBoolean(mainPath+"auto_armor") : false; boolean oneTime = config.contains(mainPath+"one_time") ? config.getBoolean(mainPath+"one_time") : false; + boolean clearInventory = config.contains(mainPath+"clear_inventory") ? config.getBoolean(mainPath+"clear_inventory") : false; boolean saveOriginalItems = config.contains(mainPath+"save_original_items") ? config.getBoolean(mainPath+"save_original_items") : false; - ArrayList items = new ArrayList(); + ArrayList items = new ArrayList<>(); if(config.contains(mainPath+"items")){ for(String key : config.getConfigurationSection(mainPath+"items").getKeys(false)){ KitItem item = kitItemManager.getKitItemFromConfig(config,mainPath+"items."+key); @@ -273,6 +275,7 @@ public class KitsConfigManager { kit.setAutoArmor(autoArmor); kit.setOneTime(oneTime); kit.setPermissionRequired(permissionRequired); + kit.setClearInventory(clearInventory); kit.setCustomPermission(customPermission); kit.setItems(items); kit.setClaimActions(claimActions); diff --git a/src/main/java/pk/ajneb97/configs/PlayersConfigManager.java b/src/main/java/pk/ajneb97/configs/PlayersConfigManager.java index fc67ace..93b7d25 100644 --- a/src/main/java/pk/ajneb97/configs/PlayersConfigManager.java +++ b/src/main/java/pk/ajneb97/configs/PlayersConfigManager.java @@ -7,6 +7,9 @@ import pk.ajneb97.model.PlayerDataKit; import java.io.File; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; public class PlayersConfigManager { private ArrayList configFiles; @@ -96,12 +99,12 @@ public class PlayersConfigManager { } public void loadConfigs(){ - ArrayList players = new ArrayList<>(); + Map players = new HashMap<>(); for(CustomConfig configFile : configFiles) { FileConfiguration config = configFile.getConfig(); - String uuid = configFile.getPath().replace(".yml", ""); + String uuidString = configFile.getPath().replace(".yml", ""); String name = config.getString("name"); ArrayList playerDataKits = new ArrayList<>(); @@ -120,10 +123,11 @@ public class PlayersConfigManager { } } - PlayerData playerData = new PlayerData(name,uuid); + UUID uuid = UUID.fromString(uuidString); + PlayerData playerData = new PlayerData(uuid,name); playerData.setKits(playerDataKits); - players.add(playerData); + players.put(uuid,playerData); } plugin.getPlayerDataManager().setPlayers(players); @@ -152,12 +156,16 @@ public class PlayersConfigManager { } public void saveConfigs(){ - ArrayList players = plugin.getPlayerDataManager().getPlayers(); - for(PlayerData playerData : players) { - if(playerData.isModified()){ - saveConfig(playerData); + Map players = plugin.getPlayerDataManager().getPlayers(); + boolean isMySQL = plugin.getConfigsManager().getMainConfigManager().isMySQL(); + if(!isMySQL){ + for(Map.Entry entry : players.entrySet()) { + PlayerData playerData = entry.getValue(); + if(playerData.isModified()){ + saveConfig(playerData); + } + playerData.setModified(false); } - playerData.setModified(false); } } diff --git a/src/main/java/pk/ajneb97/database/MySQLConnection.java b/src/main/java/pk/ajneb97/database/MySQLConnection.java index aefbe68..f9cf0ba 100644 --- a/src/main/java/pk/ajneb97/database/MySQLConnection.java +++ b/src/main/java/pk/ajneb97/database/MySQLConnection.java @@ -61,7 +61,7 @@ public class MySQLConnection { } public void loadData(){ - ArrayList players = new ArrayList<>(); + Map playerMap = new HashMap<>(); try(Connection connection = getConnection()){ PreparedStatement statement = connection.prepareStatement( "SELECT playerkits_players.UUID, playerkits_players.PLAYER_NAME, " + @@ -74,9 +74,8 @@ public class MySQLConnection { ResultSet result = statement.executeQuery(); - Map playerMap = new HashMap<>(); while(result.next()){ - String uuid = result.getString("UUID"); + UUID uuid = UUID.fromString(result.getString("UUID")); String playerName = result.getString("PLAYER_NAME"); String kitName = result.getString("NAME"); long cooldown = result.getLong("COOLDOWN"); @@ -84,11 +83,9 @@ public class MySQLConnection { boolean bought = result.getBoolean("BOUGHT"); PlayerData player = playerMap.get(uuid); - if(player == null){ //Create and add it - player = new PlayerData(playerName,uuid); - players.add(player); + player = new PlayerData(uuid,playerName); playerMap.put(uuid, player); } @@ -104,7 +101,7 @@ public class MySQLConnection { e.printStackTrace(); } - plugin.getPlayerDataManager().setPlayers(players); + plugin.getPlayerDataManager().setPlayers(playerMap); } public void createTables() { @@ -153,14 +150,14 @@ public class MySQLConnection { boolean firstFind = true; 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"); - if(firstFind){ - firstFind = false; - player = new PlayerData(playerName,uuid); + if(player == null){ + player = new PlayerData(uuid,playerName); } if(kitName != null){ PlayerDataKit playerDataKit = new PlayerDataKit(kitName); @@ -194,7 +191,7 @@ public class MySQLConnection { "INSERT INTO playerkits_players " + "(UUID, PLAYER_NAME) VALUE (?,?)"); - statement.setString(1, player.getUuid()); + statement.setString(1, player.getUuid().toString()); statement.setString(2, player.getName()); statement.executeUpdate(); @@ -221,7 +218,7 @@ public class MySQLConnection { "PLAYER_NAME=? WHERE UUID=?"); statement.setString(1, player.getName()); - statement.setString(2, player.getUuid()); + statement.setString(2, player.getUuid().toString()); statement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); @@ -242,7 +239,7 @@ public class MySQLConnection { "INSERT INTO playerkits_players_kits " + "(UUID, NAME, COOLDOWN, ONE_TIME, BOUGHT) VALUE (?,?,?,?,?)"); - statement.setString(1, player.getUuid()); + statement.setString(1, player.getUuid().toString()); statement.setString(2, kit.getName()); statement.setLong(3, kit.getCooldown()); statement.setBoolean(4, kit.isOneTime()); @@ -256,7 +253,7 @@ public class MySQLConnection { statement.setLong(1, kit.getCooldown()); statement.setBoolean(2, kit.isOneTime()); statement.setBoolean(3, kit.isBought()); - statement.setString(4, player.getUuid()); + statement.setString(4, player.getUuid().toString()); statement.setString(5, kit.getName()); } statement.executeUpdate(); diff --git a/src/main/java/pk/ajneb97/managers/KitsManager.java b/src/main/java/pk/ajneb97/managers/KitsManager.java index eb76a4c..f1157e9 100644 --- a/src/main/java/pk/ajneb97/managers/KitsManager.java +++ b/src/main/java/pk/ajneb97/managers/KitsManager.java @@ -286,12 +286,17 @@ public class KitsManager { boolean enoughSpace = freeSlots < inventoryKitItems; boolean dropItemsIfFullInventory = configFile.getBoolean("drop_items_if_full_inventory"); + boolean clearInventory = kit.isClearInventory(); - if(enoughSpace && !dropItemsIfFullInventory){ + if(enoughSpace && !dropItemsIfFullInventory && !clearInventory){ sendKitActions(kit.getErrorActions(),player,false); return PlayerKitsMessageResult.error(messagesFile.getString("noSpaceError")); } + if(clearInventory){ + player.getInventory().clear(); + } + //Actions before sendKitActions(kit.getClaimActions(),player,true); diff --git a/src/main/java/pk/ajneb97/managers/MigrationManager.java b/src/main/java/pk/ajneb97/managers/MigrationManager.java index 7cc2dbb..762a8ba 100644 --- a/src/main/java/pk/ajneb97/managers/MigrationManager.java +++ b/src/main/java/pk/ajneb97/managers/MigrationManager.java @@ -13,6 +13,7 @@ import pk.ajneb97.model.item.KitItemSkullData; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.UUID; public class MigrationManager { @@ -130,7 +131,7 @@ public class MigrationManager { try { String path = "Players."+uuid; String name = config.getString(path+".name"); - PlayerData playerData = new PlayerData(name,uuid); + PlayerData playerData = new PlayerData(UUID.fromString(uuid),name); for(String kitName : config.getConfigurationSection(path).getKeys(false)){ if(kitName.equals("name")){ continue; diff --git a/src/main/java/pk/ajneb97/managers/PlayerDataManager.java b/src/main/java/pk/ajneb97/managers/PlayerDataManager.java index ab2facf..3566e40 100644 --- a/src/main/java/pk/ajneb97/managers/PlayerDataManager.java +++ b/src/main/java/pk/ajneb97/managers/PlayerDataManager.java @@ -8,65 +8,68 @@ import pk.ajneb97.model.internal.PlayerKitsMessageResult; import pk.ajneb97.utils.OtherUtils; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; public class PlayerDataManager { private PlayerKits2 plugin; - private ArrayList players; + private Map players; + private Map playerNames; public PlayerDataManager(PlayerKits2 plugin){ this.plugin = plugin; + this.playerNames = new HashMap<>(); } - public ArrayList getPlayers() { + public Map getPlayers() { return players; } - public void setPlayers(ArrayList players) { + public void setPlayers(Map players) { this.players = players; + for(Map.Entry entry : players.entrySet()){ + playerNames.put(entry.getValue().getName(),entry.getKey()); + } } - private PlayerData getPlayer(Player player,boolean create){ - for(PlayerData playerData : players){ - if(playerData.getUuid().equals(player.getUniqueId().toString())){ - return playerData; - } - } - - if(create){ - PlayerData playerData = new PlayerData(player.getName(),player.getUniqueId().toString()); - playerData.setModified(true); - players.add(playerData); - return playerData; - } - return null; + public void addPlayer(PlayerData p){ + players.put(p.getUuid(),p); + playerNames.put(p.getName(), p.getUuid()); } - public PlayerData getPlayerByUUID(String uuid){ - for(PlayerData player : players){ - if(player.getUuid().equals(uuid)){ - return player; - } + public PlayerData getPlayer(Player player, boolean create){ + PlayerData playerData = players.get(player.getUniqueId()); + if(playerData == null && create){ + playerData = new PlayerData(player.getUniqueId(),player.getName()); + addPlayer(playerData); } - return null; + return playerData; } - public void removePlayerByUUID(String uuid){ - for(int i=0;i entry : players.entrySet()){ + entry.getValue().resetKit(kitName); } }else{ playerData.resetKit(kitName); @@ -150,7 +153,7 @@ public class PlayerDataManager { if(all){ plugin.getMySQLConnection().resetKit(null,kitName,true); }else{ - plugin.getMySQLConnection().resetKit(playerData.getUuid(),kitName,false); + plugin.getMySQLConnection().resetKit(playerData.getUuid().toString(),kitName,false); } } @@ -162,33 +165,35 @@ public class PlayerDataManager { // Create or update data if(plugin.getMySQLConnection() != null){ MySQLConnection mySQLConnection = plugin.getMySQLConnection(); - String uuid = player.getUniqueId().toString(); - mySQLConnection.getPlayer(uuid, playerData -> { + UUID uuid = player.getUniqueId(); + mySQLConnection.getPlayer(uuid.toString(), playerData -> { removePlayerByUUID(uuid); //Remove data if already exists if(playerData != null) { - players.add(playerData); + addPlayer(playerData); //Update name if different - if(!playerData.getName().equals(player.getName())){ + if (!playerData.getName().equals(player.getName())) { + updatePlayerName(playerData.getName(), player.getName(), player.getUniqueId()); playerData.setName(player.getName()); mySQLConnection.updatePlayerName(playerData); } }else { - playerData = new PlayerData(player.getName(),uuid); - players.add(playerData); + playerData = new PlayerData(uuid, player.getName()); + addPlayer(playerData); //Create if it doesn't exist mySQLConnection.createPlayer(playerData, () -> plugin.getKitsManager().giveFirstJoinKit(player)); } }); }else{ - PlayerData playerData = getPlayerByUUID(player.getUniqueId().toString()); + PlayerData playerData = getPlayer(player,false); if(playerData == null){ - playerData = new PlayerData(player.getName(),player.getUniqueId().toString()); + playerData = new PlayerData(player.getUniqueId(),player.getName()); playerData.setModified(true); - players.add(playerData); + 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()); playerData.setModified(true); } diff --git a/src/main/java/pk/ajneb97/model/Kit.java b/src/main/java/pk/ajneb97/model/Kit.java index 144a123..7d1fa11 100644 --- a/src/main/java/pk/ajneb97/model/Kit.java +++ b/src/main/java/pk/ajneb97/model/Kit.java @@ -1,7 +1,6 @@ package pk.ajneb97.model; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import pk.ajneb97.model.item.KitItem; import pk.ajneb97.utils.PlayerUtils; @@ -11,6 +10,7 @@ public class Kit { private String name; private int cooldown; private boolean permissionRequired; + private boolean clearInventory; private String customPermission; private boolean oneTime; private ArrayList items; @@ -164,6 +164,14 @@ public class Kit { this.saveOriginalItems = saveOriginalItems; } + public boolean isClearInventory() { + return clearInventory; + } + + public void setClearInventory(boolean clearInventory) { + this.clearInventory = clearInventory; + } + public boolean playerHasPermission(CommandSender player){ if(permissionRequired){ if(customPermission != null){ @@ -178,6 +186,7 @@ public class Kit { public void setDefaults(Kit defaultKit){ cooldown = defaultKit.getCooldown(); oneTime = defaultKit.isOneTime(); + clearInventory = defaultKit.isClearInventory(); permissionRequired = defaultKit.isPermissionRequired(); if(defaultKit.getClaimActions() != null){ ArrayList actions = new ArrayList<>(); diff --git a/src/main/java/pk/ajneb97/model/PlayerData.java b/src/main/java/pk/ajneb97/model/PlayerData.java index 57c9dbe..1b3cb7b 100644 --- a/src/main/java/pk/ajneb97/model/PlayerData.java +++ b/src/main/java/pk/ajneb97/model/PlayerData.java @@ -1,22 +1,31 @@ package pk.ajneb97.model; import java.util.ArrayList; +import java.util.UUID; public class PlayerData { private String name; - private String uuid; + private UUID uuid; private ArrayList kits; private boolean modified; - public PlayerData(String name,String uuid){ + public PlayerData(UUID uuid, String name){ this.name = name; this.uuid = uuid; - this.kits = new ArrayList(); + this.kits = new ArrayList<>(); this.modified = false; } + public UUID getUuid() { + return uuid; + } + + public void setUuid(UUID uuid) { + this.uuid = uuid; + } + public String getName() { return name; } @@ -25,14 +34,6 @@ public class PlayerData { this.name = name; } - public String getUuid() { - return uuid; - } - - public void setUuid(String uuid) { - this.uuid = uuid; - } - public ArrayList getKits() { return kits; } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 5823505..b7c79d8 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ main: pk.ajneb97.PlayerKits2 -version: 1.15.3 +version: 1.16.1 name: PlayerKits2 api-version: 1.13 softdepend: [Vault,PlaceholderAPI]