Skip to content

Commit

Permalink
feat: add options for NBT Byte tags
Browse files Browse the repository at this point in the history
  • Loading branch information
MemencioPerez committed Nov 24, 2024
1 parent bfdd942 commit 77eca86
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -759,9 +759,11 @@ private Map<Integer, TreeMap<Integer, MenuItem>> loadMenuItems(FileConfiguration
.hideUnbreakable(c.getBoolean(currentPath + "hide_unbreakable", false))
.hideEnchants(c.getBoolean(currentPath + "hide_enchantments", false))
.nbtString(c.getString(currentPath + "nbt_string", null))
.nbtByte(c.getString(currentPath + "nbt_byte", null))
.nbtShort(c.getString(currentPath + "nbt_short", null))
.nbtInt(c.getString(currentPath + "nbt_int", null))
.nbtStrings(c.getStringList(currentPath + "nbt_strings"))
.nbtBytes(c.getStringList(currentPath + "nbt_bytes"))
.nbtShorts(c.getStringList(currentPath + "nbt_shorts"))
.nbtInts(c.getStringList(currentPath + "nbt_ints"))
.priority(c.getInt(currentPath + "priority", 1));
Expand Down
16 changes: 16 additions & 0 deletions src/main/java/com/extendedclip/deluxemenus/menu/MenuItem.java
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,14 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) {
}
}

if (this.options.nbtByte().isPresent()) {
final String tag = holder.setPlaceholdersAndArguments(this.options.nbtByte().get());
if (tag.contains(":")) {
final String[] parts = tag.split(":");
itemStack = NbtProvider.setByte(itemStack, parts[0], Byte.parseByte(parts[1]));
}
}

if (this.options.nbtShort().isPresent()) {
final String tag = holder.setPlaceholdersAndArguments(this.options.nbtShort().get());
if (tag.contains(":")) {
Expand All @@ -437,6 +445,14 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) {
}
}

for (String nbtTag : this.options.nbtBytes()) {
final String tag = holder.setPlaceholdersAndArguments(nbtTag);
if (tag.contains(":")) {
final String[] parts = tag.split(":");
itemStack = NbtProvider.setByte(itemStack, parts[0], Byte.parseByte(parts[1]));
}
}

for (String nbtTag : this.options.nbtShorts()) {
final String tag = holder.setPlaceholdersAndArguments(nbtTag);
if (tag.contains(":")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,11 @@ public class MenuItemOptions {
private final LoreAppendMode loreAppendMode;

private final String nbtString;
private final String nbtByte;
private final String nbtShort;
private final String nbtInt;
private final List<String> nbtStrings;
private final List<String> nbtBytes;
private final List<String> nbtShorts;
private final List<String> nbtInts;

Expand Down Expand Up @@ -99,9 +101,11 @@ private MenuItemOptions(final @NotNull MenuItemOptionsBuilder builder) {
this.displayNameHasPlaceholders = builder.displayNameHasPlaceholders;
this.loreHasPlaceholders = builder.loreHasPlaceholders;
this.nbtString = builder.nbtString;
this.nbtByte = builder.nbtByte;
this.nbtShort = builder.nbtShort;
this.nbtInt = builder.nbtInt;
this.nbtStrings = builder.nbtStrings;
this.nbtBytes = builder.nbtBytes;
this.nbtShorts = builder.nbtShorts;
this.nbtInts = builder.nbtInts;
this.slot = builder.slot;
Expand Down Expand Up @@ -222,6 +226,10 @@ public boolean hasLore() {
return Optional.ofNullable(nbtString);
}

public @NotNull Optional<String> nbtByte() {
return Optional.ofNullable(nbtByte);
}

public @NotNull Optional<String> nbtShort() {
return Optional.ofNullable(nbtShort);
}
Expand All @@ -234,6 +242,10 @@ public boolean hasLore() {
return nbtStrings;
}

public @NotNull List<String> nbtBytes() {
return nbtBytes;
}

public @NotNull List<String> nbtShorts() {
return nbtShorts;
}
Expand Down Expand Up @@ -329,9 +341,11 @@ public boolean updatePlaceholders() {
.itemFlags(this.itemFlags)
.unbreakable(this.unbreakable)
.nbtString(this.nbtString)
.nbtByte(this.nbtByte)
.nbtShort(this.nbtShort)
.nbtInt(this.nbtInt)
.nbtStrings(this.nbtStrings)
.nbtBytes(this.nbtBytes)
.nbtShorts(this.nbtShorts)
.nbtInts(this.nbtInts)
.slot(this.slot)
Expand Down Expand Up @@ -382,9 +396,11 @@ public static class MenuItemOptionsBuilder {
private LoreAppendMode loreAppendMode;

private String nbtString;
private String nbtByte;
private String nbtShort;
private String nbtInt;
private List<String> nbtStrings = Collections.emptyList();
private List<String> nbtBytes = Collections.emptyList();
private List<String> nbtShorts = Collections.emptyList();
private List<String> nbtInts = Collections.emptyList();

Expand Down Expand Up @@ -542,6 +558,11 @@ public MenuItemOptionsBuilder nbtString(final @Nullable String nbtString) {
return this;
}

public MenuItemOptionsBuilder nbtByte(final @Nullable String nbtByte) {
this.nbtByte = nbtByte;
return this;
}

public MenuItemOptionsBuilder nbtShort(final @Nullable String nbtShort) {
this.nbtShort = nbtShort;
return this;
Expand All @@ -557,6 +578,11 @@ public MenuItemOptionsBuilder nbtStrings(final @NotNull List<String> nbtStrings)
return this;
}

public MenuItemOptionsBuilder nbtBytes(final @NotNull List<String> nbtBytes) {
this.nbtBytes = nbtBytes;
return this;
}

public MenuItemOptionsBuilder nbtShorts(final @NotNull List<String> nbtShorts) {
this.nbtShorts = nbtShorts;
return this;
Expand Down
28 changes: 28 additions & 0 deletions src/main/java/com/extendedclip/deluxemenus/nbt/NbtProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public final class NbtProvider {
private static Method getStringMethod;
private static Method setStringMethod;
private static Method setBooleanMethod;
private static Method setByteMethod;
private static Method setShortMethod;
private static Method setIntMethod;
private static Method removeTagMethod;
Expand All @@ -37,6 +38,7 @@ public final class NbtProvider {
getStringMethod = compoundClass.getMethod(VersionConstants.GET_STRING_METHOD_NAME, String.class);
setStringMethod = compoundClass.getMethod(VersionConstants.SET_STRING_METHOD_NAME, String.class, String.class);
setBooleanMethod = compoundClass.getMethod(VersionConstants.SET_BOOLEAN_METHOD_NAME, String.class, boolean.class);
setByteMethod = compoundClass.getMethod(VersionConstants.SET_BYTE_METHOD_NAME, String.class, byte.class);
setShortMethod = compoundClass.getMethod(VersionConstants.SET_SHORT_METHOD_NAME, String.class, short.class);
setIntMethod = compoundClass.getMethod(VersionConstants.SET_INTEGER_METHOD_NAME, String.class, int.class);
removeTagMethod = compoundClass.getMethod(VersionConstants.REMOVE_TAG_METHOD_NAME, String.class);
Expand Down Expand Up @@ -118,6 +120,19 @@ public static String getString(final ItemStack itemStack, final String key) {
return getString(itemCompound, key);
}

public static ItemStack setByte(final ItemStack itemStack, final String key, final byte value) {
if (itemStack == null) return null;
if (itemStack.getType() == Material.AIR) return null;

Object nmsItemStack = asNMSCopy(itemStack);
Object itemCompound = hasTag(nmsItemStack) ? getTag(nmsItemStack) : newNBTTagCompound();

setByte(itemCompound, key, value);
setTag(nmsItemStack, itemCompound);

return asBukkitCopy(nmsItemStack);
}

public static ItemStack setShort(final ItemStack itemStack, final String key, final short value) {
if (itemStack == null) return null;
if (itemStack.getType() == Material.AIR) return null;
Expand Down Expand Up @@ -191,6 +206,13 @@ private static void setBoolean(final Object itemCompound, final String key, fina
}
}

private static void setByte(final Object itemCompound, final String key, final byte value) {
try {
setByteMethod.invoke(itemCompound, key, value);
} catch (IllegalAccessException | InvocationTargetException ignored) {
}
}

private static void setShort(final Object itemCompound, final String key, final short value) {
try {
setShortMethod.invoke(itemCompound, key, value);
Expand Down Expand Up @@ -321,6 +343,7 @@ private static class VersionConstants {
private final static String GET_STRING_METHOD_NAME = getStringMethodName();
private final static String SET_STRING_METHOD_NAME = setStringMethodName();
private final static String SET_BOOLEAN_METHOD_NAME = setBooleanMethodName();
private final static String SET_BYTE_METHOD_NAME = setByteMethodName();
private final static String SET_SHORT_METHOD_NAME = setShortMethodName();
private final static String SET_INTEGER_METHOD_NAME = setIntegerMethodName();
private final static String REMOVE_TAG_METHOD_NAME = removeTagMethodName();
Expand All @@ -343,6 +366,11 @@ private static String setBooleanMethodName() {
return "setBoolean";
}

private static String setByteMethodName() {
if (VersionHelper.HAS_OBFUSCATED_NAMES) return "a";
return "setByte";
}

private static String setShortMethodName() {
if (VersionHelper.HAS_OBFUSCATED_NAMES) return "a";
return "setShort";
Expand Down

0 comments on commit 77eca86

Please sign in to comment.