From 7ef40c1f0f0e5a5a69e581d8c9112e8344b33348 Mon Sep 17 00:00:00 2001 From: Boy0000 Date: Fri, 9 May 2025 15:12:08 +0200 Subject: [PATCH] feat: add nms-methods for getting color of item --- .../lojosho/hibiscuscommons/nms/NMSUtils.java | 10 ++++ .../nms/v1_20_R3/NMSUtils.java | 51 +++++++++++++++++++ .../nms/v1_20_R4/NMSUtils.java | 28 ++++++++++ .../nms/v1_21_R1/NMSUtils.java | 28 ++++++++++ .../nms/v1_21_R2/NMSUtils.java | 28 ++++++++++ .../nms/v1_21_R3/NMSUtils.java | 28 ++++++++++ .../nms/v1_21_R4/NMSUtils.java | 25 +++++++++ 7 files changed, 198 insertions(+) diff --git a/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSUtils.java b/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSUtils.java index ad072e6..833f0b8 100644 --- a/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSUtils.java +++ b/common/src/main/java/me/lojosho/hibiscuscommons/nms/NMSUtils.java @@ -1,7 +1,12 @@ package me.lojosho.hibiscuscommons.nms; +import org.bukkit.Color; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nullable; public interface NMSUtils { @@ -9,4 +14,9 @@ public interface NMSUtils { Entity getEntity(int entityId); + @Nullable + Color getColor(ItemStack itemStack); + + ItemStack setColor(@NotNull ItemStack itemStack, Color color); + } diff --git a/v1_20_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R3/NMSUtils.java b/v1_20_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R3/NMSUtils.java index 407f382..b2df5a7 100644 --- a/v1_20_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R3/NMSUtils.java +++ b/v1_20_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R3/NMSUtils.java @@ -2,7 +2,13 @@ package me.lojosho.hibiscuscommons.nms.v1_20_R3; import net.minecraft.server.level.ServerLevel; import org.bukkit.Bukkit; +import org.bukkit.Color; +import org.bukkit.FireworkEffect; import org.bukkit.craftbukkit.v1_20_R3.CraftServer; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSUtils { @@ -18,6 +24,51 @@ public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nm return entity.getBukkitEntity(); } + @Override + public @Nullable Color getColor(ItemStack itemStack) { + if (itemStack == null) return null; + ItemMeta meta = itemStack.getItemMeta(); + if (meta == null) return null; + + Color color = null; + switch (meta) { + case LeatherArmorMeta leatherMeta -> color = leatherMeta.getColor(); + case PotionMeta potionMeta -> color = potionMeta.getColor(); + case MapMeta mapMeta -> color = mapMeta.getColor(); + case FireworkEffectMeta fireworkEffectMeta -> { + FireworkEffect effect = fireworkEffectMeta.getEffect(); + if (effect != null) { + color = effect.getColors().stream().findFirst().isPresent() ? effect.getColors().stream().findFirst().get() : null; + } + } + default -> {} + } + + return color; + } + + @Override + public ItemStack setColor(@NotNull ItemStack itemStack, Color color) { + ItemMeta meta = itemStack.getItemMeta(); + switch (meta) { + case LeatherArmorMeta leatherMeta -> leatherMeta.setColor(color); + case PotionMeta potionMeta -> potionMeta.setColor(color); + case MapMeta mapMeta -> mapMeta.setColor(color); + case FireworkEffectMeta fireworkMeta -> fireworkMeta.setEffect( + FireworkEffect.builder() + .with(FireworkEffect.Type.BALL) + .withColor(color) + .trail(false) + .flicker(false) + .build() + ); + case null, default -> {} + } + + itemStack.setItemMeta(meta); + return itemStack; + } + private net.minecraft.world.entity.Entity getNMSEntity(int entityId) { for (ServerLevel world : ((CraftServer) Bukkit.getServer()).getHandle().getServer().getAllLevels()) { net.minecraft.world.entity.Entity entity = world.getEntity(entityId); diff --git a/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSUtils.java b/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSUtils.java index 0bd739d..38d4981 100644 --- a/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSUtils.java +++ b/v1_20_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_20_R4/NMSUtils.java @@ -1,8 +1,17 @@ package me.lojosho.hibiscuscommons.nms.v1_20_R4; +import net.minecraft.core.component.DataComponents; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.component.DyedItemColor; import org.bukkit.Bukkit; +import org.bukkit.Color; +import org.bukkit.FireworkEffect; import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSUtils { @@ -18,6 +27,25 @@ public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nm return entity.getBukkitEntity(); } + @Override + public @Nullable Color getColor(ItemStack itemStack) { + if (itemStack == null) return null; + net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + if (nmsItem == null) return null; + + DyedItemColor color = nmsItem.get(DataComponents.DYED_COLOR); + if (color == null) return null; + return Color.fromRGB(color.rgb()); + } + + @Override + public ItemStack setColor(@NotNull ItemStack itemStack, Color color) { + net.minecraft.world.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); + boolean tooltip = !nmsStack.has(DataComponents.DYED_COLOR) || nmsStack.get(DataComponents.DYED_COLOR).showInTooltip(); + nmsStack.set(DataComponents.DYED_COLOR, new DyedItemColor(color.asRGB(), tooltip)); + return CraftItemStack.asBukkitCopy(nmsStack); + } + private net.minecraft.world.entity.Entity getNMSEntity(int entityId) { for (ServerLevel world : ((CraftServer) Bukkit.getServer()).getHandle().getServer().getAllLevels()) { net.minecraft.world.entity.Entity entity = world.getEntity(entityId); diff --git a/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSUtils.java b/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSUtils.java index f6343c9..925fb09 100644 --- a/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSUtils.java +++ b/v1_21_R1/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R1/NMSUtils.java @@ -1,8 +1,17 @@ package me.lojosho.hibiscuscommons.nms.v1_21_R1; +import net.minecraft.core.component.DataComponents; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.component.DyedItemColor; import org.bukkit.Bukkit; +import org.bukkit.Color; +import org.bukkit.FireworkEffect; import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSUtils { @@ -18,6 +27,25 @@ public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nm return entity.getBukkitEntity(); } + @Override + public @Nullable Color getColor(ItemStack itemStack) { + if (itemStack == null) return null; + net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + if (nmsItem == null) return null; + + DyedItemColor color = nmsItem.get(DataComponents.DYED_COLOR); + if (color == null) return null; + return Color.fromRGB(color.rgb()); + } + + @Override + public ItemStack setColor(@NotNull ItemStack itemStack, Color color) { + net.minecraft.world.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); + boolean tooltip = !nmsStack.has(DataComponents.DYED_COLOR) || nmsStack.get(DataComponents.DYED_COLOR).showInTooltip(); + nmsStack.set(DataComponents.DYED_COLOR, new DyedItemColor(color.asRGB(), tooltip)); + return CraftItemStack.asBukkitCopy(nmsStack); + } + private net.minecraft.world.entity.Entity getNMSEntity(int entityId) { for (ServerLevel world : ((CraftServer) Bukkit.getServer()).getHandle().getServer().getAllLevels()) { net.minecraft.world.entity.Entity entity = world.getEntity(entityId); diff --git a/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSUtils.java b/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSUtils.java index 318ccba..cef93ce 100644 --- a/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSUtils.java +++ b/v1_21_R2/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R2/NMSUtils.java @@ -1,8 +1,17 @@ package me.lojosho.hibiscuscommons.nms.v1_21_R2; +import net.minecraft.core.component.DataComponents; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.component.DyedItemColor; import org.bukkit.Bukkit; +import org.bukkit.Color; +import org.bukkit.FireworkEffect; import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSUtils { @@ -18,6 +27,25 @@ public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nm return entity.getBukkitEntity(); } + @Override + public @Nullable Color getColor(ItemStack itemStack) { + if (itemStack == null) return null; + net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + if (nmsItem == null) return null; + + DyedItemColor color = nmsItem.get(DataComponents.DYED_COLOR); + if (color == null) return null; + return Color.fromRGB(color.rgb()); + } + + @Override + public ItemStack setColor(@NotNull ItemStack itemStack, Color color) { + net.minecraft.world.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); + boolean tooltip = !nmsStack.has(DataComponents.DYED_COLOR) || nmsStack.get(DataComponents.DYED_COLOR).showInTooltip(); + nmsStack.set(DataComponents.DYED_COLOR, new DyedItemColor(color.asRGB(), tooltip)); + return CraftItemStack.asBukkitCopy(nmsStack); + } + private net.minecraft.world.entity.Entity getNMSEntity(int entityId) { for (ServerLevel world : ((CraftServer) Bukkit.getServer()).getHandle().getServer().getAllLevels()) { net.minecraft.world.entity.Entity entity = world.getEntity(entityId); diff --git a/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSUtils.java b/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSUtils.java index 5a33a18..fb6f66c 100644 --- a/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSUtils.java +++ b/v1_21_R3/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R3/NMSUtils.java @@ -1,8 +1,17 @@ package me.lojosho.hibiscuscommons.nms.v1_21_R3; +import net.minecraft.core.component.DataComponents; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.component.DyedItemColor; import org.bukkit.Bukkit; +import org.bukkit.Color; +import org.bukkit.FireworkEffect; import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSUtils { @@ -18,6 +27,25 @@ public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nm return entity.getBukkitEntity(); } + @Override + public @Nullable Color getColor(ItemStack itemStack) { + if (itemStack == null) return null; + net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + if (nmsItem == null) return null; + + DyedItemColor color = nmsItem.get(DataComponents.DYED_COLOR); + if (color == null) return null; + return Color.fromRGB(color.rgb()); + } + + @Override + public ItemStack setColor(@NotNull ItemStack itemStack, Color color) { + net.minecraft.world.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); + boolean tooltip = !nmsStack.has(DataComponents.DYED_COLOR) || nmsStack.get(DataComponents.DYED_COLOR).showInTooltip(); + nmsStack.set(DataComponents.DYED_COLOR, new DyedItemColor(color.asRGB(), tooltip)); + return CraftItemStack.asBukkitCopy(nmsStack); + } + private net.minecraft.world.entity.Entity getNMSEntity(int entityId) { for (ServerLevel world : ((CraftServer) Bukkit.getServer()).getHandle().getServer().getAllLevels()) { net.minecraft.world.entity.Entity entity = world.getEntity(entityId); diff --git a/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSUtils.java b/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSUtils.java index 80de296..1b314be 100644 --- a/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSUtils.java +++ b/v1_21_R4/src/main/java/me/lojosho/hibiscuscommons/nms/v1_21_R4/NMSUtils.java @@ -1,8 +1,15 @@ package me.lojosho.hibiscuscommons.nms.v1_21_R4; +import net.minecraft.core.component.DataComponents; import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.item.component.DyedItemColor; import org.bukkit.Bukkit; +import org.bukkit.Color; import org.bukkit.craftbukkit.CraftServer; +import org.bukkit.craftbukkit.inventory.CraftItemStack; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSUtils { @@ -18,6 +25,24 @@ public class NMSUtils extends NMSCommon implements me.lojosho.hibiscuscommons.nm return entity.getBukkitEntity(); } + @Override + public @Nullable Color getColor(ItemStack itemStack) { + if (itemStack == null) return null; + net.minecraft.world.item.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); + if (nmsItem == null) return null; + + DyedItemColor color = nmsItem.get(DataComponents.DYED_COLOR); + if (color == null) return null; + return Color.fromRGB(color.rgb()); + } + + @Override + public ItemStack setColor(@NotNull ItemStack itemStack, Color color) { + net.minecraft.world.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); + nmsStack.set(DataComponents.DYED_COLOR, new DyedItemColor(color.asRGB())); + return CraftItemStack.asBukkitCopy(nmsStack); + } + private net.minecraft.world.entity.Entity getNMSEntity(int entityId) { for (ServerLevel world : ((CraftServer) Bukkit.getServer()).getHandle().getServer().getAllLevels()) { net.minecraft.world.entity.Entity entity = world.getEntity(entityId);