diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java index abb6a847..f1d07c6d 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java @@ -5,6 +5,7 @@ import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetics; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; +import org.bukkit.Color; import org.jetbrains.annotations.Nullable; import java.util.HashMap; @@ -30,11 +31,13 @@ public class Data { public void clear(UUID uniqueId) { // Override } - + // BACKPACK=colorfulbackpack&RRGGBB,HELMET=niftyhat,BALLOON=colorfulballoon,CHESTPLATE=niftychestplate public String steralizeData(CosmeticUser user) { String data = ""; for (Cosmetic cosmetic : user.getCosmetic()) { + Color color = user.getCosmeticColor(cosmetic.getSlot()); String input = cosmetic.getSlot() + "=" + cosmetic.getId(); + if (color != null) input = input + "&" + color.asRGB(); if (data.length() == 0) { data = input; continue; @@ -44,8 +47,8 @@ public class Data { return data; } - public Map desteralizedata(String raw) { - Map cosmetics = new HashMap<>(); + public Map> desteralizedata(String raw) { + Map> cosmetics = new HashMap<>(); String[] rawData = raw.split(","); for (String a : rawData) { @@ -55,9 +58,19 @@ public class Data { Cosmetic cosmetic = null; HMCCosmeticsPlugin.getInstance().getLogger().info("First split (suppose slot) " + splitData[0]); if (CosmeticSlot.valueOf(splitData[0]) != null) slot = CosmeticSlot.valueOf(splitData[0]); - if (Cosmetics.hasCosmetic(splitData[1])) cosmetic = Cosmetics.getCosmetic(splitData[1]); - if (slot == null || cosmetic == null) continue; - cosmetics.put(slot, cosmetic); + + if (splitData[1].contains("&")) { + String[] colorSplitData = splitData[1].split("&"); + if (Cosmetics.hasCosmetic(colorSplitData[0])) cosmetic = Cosmetics.getCosmetic(colorSplitData[0]); + if (slot == null || cosmetic == null) continue; + cosmetics.put(slot, Map.of(cosmetic, Color.fromRGB(Integer.parseInt(colorSplitData[1])))); + } else { + if (Cosmetics.hasCosmetic(splitData[1])) cosmetic = Cosmetics.getCosmetic(splitData[1]); + if (slot == null || cosmetic == null) continue; + HashMap cosmeticColorHashMap = new HashMap<>(); + cosmeticColorHashMap.put(cosmetic, null); + cosmetics.put(slot, cosmeticColorHashMap); + } } return cosmetics; } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/InternalData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/InternalData.java index 2047eaa3..5efaa305 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/InternalData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/InternalData.java @@ -5,6 +5,7 @@ import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import org.bukkit.Bukkit; +import org.bukkit.Color; import org.bukkit.NamespacedKey; import org.bukkit.OfflinePlayer; import org.bukkit.entity.Player; @@ -37,10 +38,14 @@ public class InternalData extends Data { if (!player.getPersistentDataContainer().has(key, PersistentDataType.STRING)) return user; String rawData = player.getPersistentDataContainer().get(key, PersistentDataType.STRING); - Map a = desteralizedata(rawData); - for (CosmeticSlot slot : a.keySet()) { - user.addPlayerCosmetic(a.get(slot)); - //HMCCosmeticsPlugin.getInstance().getLogger().info("Retrieved " + player.getName() + " | slot " + slot + " | cosmetic " + Cosmetics.getCosmetic(player.getPersistentDataContainer().get(key, PersistentDataType.STRING))); + Map> a = desteralizedata(rawData); + for (Map cosmeticColors : a.values()) { + for (Cosmetic cosmetic : cosmeticColors.keySet()) { + Bukkit.getScheduler().runTask(HMCCosmeticsPlugin.getInstance(), () -> { + // This can not be async. + user.addPlayerCosmetic(cosmetic, cosmeticColors.get(cosmetic)); + }); + } } return user; } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java index d1580181..d20cb6f4 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java @@ -6,6 +6,7 @@ import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import org.bukkit.Bukkit; +import org.bukkit.Color; import java.sql.*; import java.util.HashMap; @@ -82,13 +83,14 @@ public class MySQLData extends Data { ResultSet rs = preparedStatement.executeQuery(); if (rs.next()) { String rawData = rs.getString("COSMETICS"); - Map cosmetics = desteralizedata(rawData); - for (Cosmetic cosmetic : cosmetics.values()) { - Bukkit.getScheduler().runTask(HMCCosmeticsPlugin.getInstance(), () -> { - // This can not be async. - user.addPlayerCosmetic(cosmetic); - }); - + Map> cosmetics = desteralizedata(rawData); + for (Map cosmeticColors : cosmetics.values()) { + for (Cosmetic cosmetic : cosmeticColors.keySet()) { + Bukkit.getScheduler().runTask(HMCCosmeticsPlugin.getInstance(), () -> { + // This can not be async. + user.addPlayerCosmetic(cosmetic, cosmeticColors.get(cosmetic)); + }); + } } } } catch (SQLException e) {