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]