diff --git a/pom.xml b/pom.xml index 7a50e78..5a5b9a2 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ org.spigotmc spigot-api - 1.21.1-R0.1-SNAPSHOT + 1.21.4-R0.1-SNAPSHOT provided diff --git a/src/main/java/pk/ajneb97/PlayerKits2.java b/src/main/java/pk/ajneb97/PlayerKits2.java index 4b1cfaa..ace67ca 100644 --- a/src/main/java/pk/ajneb97/PlayerKits2.java +++ b/src/main/java/pk/ajneb97/PlayerKits2.java @@ -132,6 +132,9 @@ public class PlayerKits2 extends JavaPlugin { case "1.21.3": serverVersion = ServerVersion.v1_21_R2; break; + case "1.21.4": + serverVersion = ServerVersion.v1_21_R3; + break; default: serverVersion = ServerVersion.valueOf(packageName.replace("org.bukkit.craftbukkit.", "")); } diff --git a/src/main/java/pk/ajneb97/managers/KitItemManager.java b/src/main/java/pk/ajneb97/managers/KitItemManager.java index 00b99ca..ffe82f0 100644 --- a/src/main/java/pk/ajneb97/managers/KitItemManager.java +++ b/src/main/java/pk/ajneb97/managers/KitItemManager.java @@ -11,6 +11,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.LeatherArmorMeta; +import org.bukkit.inventory.meta.components.CustomModelDataComponent; import pk.ajneb97.PlayerKits2; import pk.ajneb97.model.internal.KitVariable; import pk.ajneb97.model.item.*; @@ -19,6 +20,7 @@ import pk.ajneb97.utils.OtherUtils; import pk.ajneb97.utils.ServerVersion; import java.util.*; +import java.util.stream.Collectors; public class KitItemManager { @@ -76,7 +78,39 @@ public class KitItemManager { } if(OtherUtils.isNew() && meta.hasCustomModelData()) { - kitItem.setCustomModelData(meta.getCustomModelData()); + if(!serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_21_R3)){ + kitItem.setCustomModelData(meta.getCustomModelData()); + } + } + + if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_21_R3)){ + if(meta.hasCustomModelData()){ + CustomModelDataComponent customModelDataComponent = meta.getCustomModelDataComponent(); + + List customModelDataComponentFlagsList = customModelDataComponent.getFlags() + .stream() + .map(String::valueOf) + .collect(Collectors.toList()); + + List customModelDataComponentColorsList = customModelDataComponent.getColors() + .stream() + .map(color -> String.valueOf(color.asRGB())) + .collect(Collectors.toList()); + + List customModelDataComponentFloatsList = customModelDataComponent.getFloats() + .stream() + .map(String::valueOf) + .collect(Collectors.toList()); + + List customModelDataComponentStringsList = new ArrayList<>(customModelDataComponent.getStrings()); + + kitItem.setCustomModelComponentData(new KitItemCustomModelComponentData( + customModelDataComponentFlagsList, + customModelDataComponentColorsList, + customModelDataComponentFloatsList, + customModelDataComponentStringsList + )); + } } if(meta instanceof LeatherArmorMeta) { @@ -159,6 +193,31 @@ public class KitItemManager { meta.setCustomModelData(customModelData); } + ServerVersion serverVersion = PlayerKits2.serverVersion; + if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_21_R3)){ + KitItemCustomModelComponentData kitItemCustomModelComponentData = kitItem.getCustomModelComponentData(); + if(kitItemCustomModelComponentData != null){ + CustomModelDataComponent customModelDataComponent = meta.getCustomModelDataComponent(); + + List cFloats = kitItemCustomModelComponentData.getFloats(); + List cColors = kitItemCustomModelComponentData.getColors(); + List cFlags = kitItemCustomModelComponentData.getFlags(); + List cStrings = kitItemCustomModelComponentData.getStrings(); + + customModelDataComponent.setFlags(cFlags.stream() + .map(Boolean::parseBoolean) + .collect(Collectors.toList())); + customModelDataComponent.setFloats(cFloats.stream() + .map(Float::parseFloat) + .collect(Collectors.toList())); + customModelDataComponent.setColors(cColors.stream() + .map(rgb -> Color.fromRGB(Integer.parseInt(rgb))) + .collect(Collectors.toList())); + customModelDataComponent.setStrings(new ArrayList<>(cStrings)); + meta.setCustomModelDataComponent(customModelDataComponent); + } + } + List enchants = kitItem.getEnchants(); if(enchants != null) { for(int i=0;i attributes = kitItem.getAttributes(); item = ItemUtils.setAttributes(plugin,item, attributes); - ServerVersion serverVersion = PlayerKits2.serverVersion; - //Item Flags meta = item.getItemMeta(); List flags = kitItem.getFlags(); @@ -262,6 +319,15 @@ public class KitItemManager { if(item.getCustomModelData() != 0) { config.set(path+".custom_model_data", item.getCustomModelData()); } + + KitItemCustomModelComponentData customModelComponentData = item.getCustomModelComponentData(); + if(customModelComponentData != null){ + if(!customModelComponentData.getFlags().isEmpty()) config.set(path+".custom_model_component_data.flags",customModelComponentData.getFlags()); + if(!customModelComponentData.getFloats().isEmpty()) config.set(path+".custom_model_component_data.floats",customModelComponentData.getFloats()); + if(!customModelComponentData.getColors().isEmpty()) config.set(path+".custom_model_component_data.colors",customModelComponentData.getColors()); + if(!customModelComponentData.getStrings().isEmpty()) config.set(path+".custom_model_component_data.strings",customModelComponentData.getStrings()); + } + if(item.getColor() != 0) { config.set(path+".color", item.getColor()); } @@ -365,6 +431,29 @@ public class KitItemManager { List canPlace = config.contains(path+".can_place") ? config.getStringList(path+".can_place") : null; List canDestroy = config.contains(path+".can_destroy") ? config.getStringList(path+".can_destroy") : null; + KitItemCustomModelComponentData customModelComponentData = null; + if(config.contains(path+".custom_model_component_data")) { + List cFlags = new ArrayList<>(); + List cFloats = new ArrayList<>(); + List cColors = new ArrayList<>(); + List cStrings = new ArrayList<>(); + + if(config.contains(path+".custom_model_component_data.flags")) { + cFlags = config.getStringList(path+".custom_model_component_data.flags"); + } + if(config.contains(path+".custom_model_component_data.floats")) { + cFloats = config.getStringList(path+".custom_model_component_data.floats"); + } + if(config.contains(path+".custom_model_component_data.colors")) { + cColors = config.getStringList(path+".custom_model_component_data.colors"); + } + if(config.contains(path+".custom_model_component_data.strings")) { + cStrings = config.getStringList(path+".custom_model_component_data.strings"); + } + + customModelComponentData = new KitItemCustomModelComponentData(cFlags,cColors,cFloats,cStrings); + } + KitItemSkullData skullData = null; if(config.contains(path+".skull_data")) { String skullTexture = null; @@ -481,6 +570,7 @@ public class KitItemManager { kitItem.setBannerData(bannerData); kitItem.setBookData(bookData); kitItem.setTrimData(trimData); + kitItem.setCustomModelComponentData(customModelComponentData); } kitItem.setOffhand(offhand); diff --git a/src/main/java/pk/ajneb97/model/item/KitItem.java b/src/main/java/pk/ajneb97/model/item/KitItem.java index e4adb6c..974c4d0 100644 --- a/src/main/java/pk/ajneb97/model/item/KitItem.java +++ b/src/main/java/pk/ajneb97/model/item/KitItem.java @@ -35,6 +35,7 @@ public class KitItem{ private KitItemBannerData bannerData; private KitItemBookData bookData; private KitItemTrimData trimData; + private KitItemCustomModelComponentData customModelComponentData; private boolean offhand; private int previewSlot; @@ -223,6 +224,14 @@ public class KitItem{ this.trimData = trimData; } + public KitItemCustomModelComponentData getCustomModelComponentData() { + return customModelComponentData; + } + + public void setCustomModelComponentData(KitItemCustomModelComponentData customModelComponentData) { + this.customModelComponentData = customModelComponentData; + } + public boolean isOffhand() { return offhand; } @@ -283,6 +292,7 @@ public class KitItem{ kitItem.setBannerData(bannerData != null ? bannerData.clone() : null); kitItem.setBookData(bookData != null ? bookData.clone() : null); kitItem.setTrimData(trimData != null ? trimData.clone() : null); + kitItem.setCustomModelComponentData(customModelComponentData != null ? customModelComponentData.clone() : null); kitItem.setPreviewSlot(previewSlot); kitItem.setOffhand(offhand); diff --git a/src/main/java/pk/ajneb97/model/item/KitItemCustomModelComponentData.java b/src/main/java/pk/ajneb97/model/item/KitItemCustomModelComponentData.java new file mode 100644 index 0000000..8ffc0c7 --- /dev/null +++ b/src/main/java/pk/ajneb97/model/item/KitItemCustomModelComponentData.java @@ -0,0 +1,54 @@ +package pk.ajneb97.model.item; + +import java.util.ArrayList; +import java.util.List; + +public class KitItemCustomModelComponentData { + private List flags; + private List colors; + private List floats; + private List strings; + + public KitItemCustomModelComponentData(List flags, List colors, List floats, List strings) { + this.flags = flags; + this.colors = colors; + this.floats = floats; + this.strings = strings; + } + + public List getFlags() { + return flags; + } + + public void setFlags(List flags) { + this.flags = flags; + } + + public List getColors() { + return colors; + } + + public void setColors(List colors) { + this.colors = colors; + } + + public List getFloats() { + return floats; + } + + public void setFloats(List floats) { + this.floats = floats; + } + + public List getStrings() { + return strings; + } + + public void setStrings(List strings) { + this.strings = strings; + } + + public KitItemCustomModelComponentData clone(){ + return new KitItemCustomModelComponentData(new ArrayList<>(flags),new ArrayList<>(colors),new ArrayList<>(floats),new ArrayList<>(strings)); + } +} diff --git a/src/main/java/pk/ajneb97/utils/ActionUtils.java b/src/main/java/pk/ajneb97/utils/ActionUtils.java index 62abf80..1afcd7b 100644 --- a/src/main/java/pk/ajneb97/utils/ActionUtils.java +++ b/src/main/java/pk/ajneb97/utils/ActionUtils.java @@ -12,6 +12,8 @@ import pk.ajneb97.libs.actionbar.ActionBarAPI; import pk.ajneb97.libs.titles.TitleAPI; import pk.ajneb97.managers.MessagesManager; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.ArrayList; public class ActionUtils { @@ -31,7 +33,7 @@ public class ActionUtils { int volume = 0; float pitch = 0; try { - sound = Sound.valueOf(sep[0]); + sound = getSoundByName(sep[0]); volume = Integer.valueOf(sep[1]); pitch = Float.valueOf(sep[2]); }catch(Exception e ) { @@ -43,6 +45,16 @@ public class ActionUtils { player.playSound(player.getLocation(), sound, volume, pitch); } + private static Sound getSoundByName(String name){ + try { + Class soundTypeClass = Class.forName("org.bukkit.Sound"); + Method valueOf = soundTypeClass.getMethod("valueOf", String.class); + return (Sound) valueOf.invoke(null,name); + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + public static void actionbar(Player player, String actionLine, PlayerKits2 plugin){ String[] sep = actionLine.split(";"); String text = sep[0]; diff --git a/src/main/java/pk/ajneb97/utils/ItemUtils.java b/src/main/java/pk/ajneb97/utils/ItemUtils.java index f02f56c..2557482 100644 --- a/src/main/java/pk/ajneb97/utils/ItemUtils.java +++ b/src/main/java/pk/ajneb97/utils/ItemUtils.java @@ -618,8 +618,17 @@ public class ItemUtils { // 1.21+ only public static void addDummyAttribute(ItemMeta meta,PlayerKits2 plugin){ - AttributeModifier modifier = new AttributeModifier(new NamespacedKey(plugin,"dummy_attribute"),0,AttributeModifier.Operation.ADD_NUMBER,EquipmentSlotGroup.FEET); - meta.addAttributeModifier(Attribute.GENERIC_GRAVITY, modifier); + try{ + AttributeModifier modifier = new AttributeModifier(new NamespacedKey(plugin,"dummy_attribute"),0,AttributeModifier.Operation.ADD_NUMBER,EquipmentSlotGroup.FEET); + ServerVersion serverVersion = PlayerKits2.serverVersion; + if(serverVersion.serverVersionGreaterEqualThan(serverVersion,ServerVersion.v1_21_R3)){ + meta.addAttributeModifier(Attribute.GRAVITY, modifier); + }else{ + meta.addAttributeModifier(getAttributeByName("GENERIC_GRAVITY"), modifier); + } + }catch(Exception ignored){ + + } } public static KitItemBookData getBookData(ItemStack item){ @@ -752,4 +761,14 @@ public class ItemUtils { throw new RuntimeException(e); } } + + private static Attribute getAttributeByName(String name){ + try { + Class attributeTypeClass = Class.forName("org.bukkit.attribute"); + Method valueOf = attributeTypeClass.getMethod("valueOf", String.class); + return (Attribute) valueOf.invoke(null,name); + } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | ClassNotFoundException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/main/java/pk/ajneb97/utils/ServerVersion.java b/src/main/java/pk/ajneb97/utils/ServerVersion.java index a848b49..f63c232 100644 --- a/src/main/java/pk/ajneb97/utils/ServerVersion.java +++ b/src/main/java/pk/ajneb97/utils/ServerVersion.java @@ -27,7 +27,8 @@ public enum ServerVersion { v1_20_R3, v1_20_R4, v1_21_R1, - v1_21_R2; + v1_21_R2, + v1_21_R3; public boolean serverVersionGreaterEqualThan(ServerVersion version1,ServerVersion version2){ return version1.ordinal() >= version2.ordinal(); diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 039c540..b8059d8 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ main: pk.ajneb97.PlayerKits2 -version: 1.13.1 +version: 1.14.1 name: PlayerKits2 api-version: 1.13 softdepend: [Vault,PlaceholderAPI]