From b244a09646429792cf7b369129407a7f55e940ac Mon Sep 17 00:00:00 2001 From: Spagles <106791090+Spagles@users.noreply.github.com> Date: Sat, 1 Aug 2026 20:37:26 +1000 Subject: [PATCH 1/6] feat: add reflected getAmount method to RefAttributeModifier --- .../org/bukkit/attribute/RefAttributeModifier.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/xyz/srnyx/annoyingapi/reflection/org/bukkit/attribute/RefAttributeModifier.java b/src/main/java/xyz/srnyx/annoyingapi/reflection/org/bukkit/attribute/RefAttributeModifier.java index e468393..9fe2c32 100644 --- a/src/main/java/xyz/srnyx/annoyingapi/reflection/org/bukkit/attribute/RefAttributeModifier.java +++ b/src/main/java/xyz/srnyx/annoyingapi/reflection/org/bukkit/attribute/RefAttributeModifier.java @@ -49,6 +49,11 @@ public class RefAttributeModifier { */ @Nullable public static final Method ATTRIBUTE_MODIFIER_GET_NAME_METHOD = ReflectionUtility.getMethod(1, 13, 2, ATTRIBUTE_MODIFIER_CLASS, "getName"); + /** + * 1.13.2+ org.bukkit.attribute.AttributeModifier#getAmount() + */ + @Nullable public static final Method ATTRIBUTE_MODIFIER_GET_AMOUNT_METHOD = ReflectionUtility.getMethod(1, 13, 2, ATTRIBUTE_MODIFIER_CLASS, "getAmount"); + /** * 1.13.2+ org.bukkit.attribute.AttributeModifier#getOperation() */ From fac4d2b1aee0a059051f7a70b0a56b7248b98f7e Mon Sep 17 00:00:00 2001 From: Spagles <106791090+Spagles@users.noreply.github.com> Date: Sat, 1 Aug 2026 20:38:19 +1000 Subject: [PATCH 2/6] fix: serialize attribute modifier amount property --- .../file/okaeri/serdes/AttributeModifierSerializer.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/xyz/srnyx/annoyingapi/file/okaeri/serdes/AttributeModifierSerializer.java b/src/main/java/xyz/srnyx/annoyingapi/file/okaeri/serdes/AttributeModifierSerializer.java index d5002b1..4d94cb9 100644 --- a/src/main/java/xyz/srnyx/annoyingapi/file/okaeri/serdes/AttributeModifierSerializer.java +++ b/src/main/java/xyz/srnyx/annoyingapi/file/okaeri/serdes/AttributeModifierSerializer.java @@ -11,6 +11,7 @@ import xyz.srnyx.annoyingapi.reflection.org.bukkit.attribute.RefAttributeModifier; import static xyz.srnyx.annoyingapi.reflection.org.bukkit.attribute.RefAttributeModifier.ATTRIBUTE_MODIFIER_CLASS; +import static xyz.srnyx.annoyingapi.reflection.org.bukkit.attribute.RefAttributeModifier.ATTRIBUTE_MODIFIER_GET_AMOUNT_METHOD; import static xyz.srnyx.annoyingapi.reflection.org.bukkit.attribute.RefAttributeModifier.ATTRIBUTE_MODIFIER_GET_NAME_METHOD; import static xyz.srnyx.annoyingapi.reflection.org.bukkit.attribute.RefAttributeModifier.ATTRIBUTE_MODIFIER_GET_OPERATION_METHOD; import static xyz.srnyx.annoyingapi.reflection.org.bukkit.attribute.RefAttributeModifier.ATTRIBUTE_MODIFIER_GET_SLOT_GROUP_METHOD; @@ -43,6 +44,13 @@ public void serialize(@NotNull Object object, @NotNull SerializationData data, @ e.printStackTrace(); } + // amount + if (ATTRIBUTE_MODIFIER_GET_AMOUNT_METHOD != null) try { + data.set("amount", ATTRIBUTE_MODIFIER_GET_AMOUNT_METHOD.invoke(object)); + } catch (final Exception e) { + e.printStackTrace(); + } + // operation try { data.set("operation", ATTRIBUTE_MODIFIER_GET_OPERATION_METHOD.invoke(object)); From 7bb5264096f32e5443183884b754b96fdc6877e2 Mon Sep 17 00:00:00 2001 From: Spagles <106791090+Spagles@users.noreply.github.com> Date: Sat, 1 Aug 2026 20:38:49 +1000 Subject: [PATCH 3/6] fix: invoke fallback platform when dependency file download fails --- .../xyz/srnyx/annoyingapi/dependency/AnnoyingDownload.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/xyz/srnyx/annoyingapi/dependency/AnnoyingDownload.java b/src/main/java/xyz/srnyx/annoyingapi/dependency/AnnoyingDownload.java index 5dfecef..d8a1f36 100644 --- a/src/main/java/xyz/srnyx/annoyingapi/dependency/AnnoyingDownload.java +++ b/src/main/java/xyz/srnyx/annoyingapi/dependency/AnnoyingDownload.java @@ -250,8 +250,9 @@ private void downloadFile(@NotNull AnnoyingDependency dependency, @NotNull Plugi final byte[] buffer = new byte[1024]; int numRead; while ((numRead = in.read(buffer)) != -1) out.write(buffer, 0, numRead); - } catch (final IOException ignored) { - //ignored + } catch (final IOException e) { + fail(dependency, platform); + return; } // Send success message From d38ec9c81a8b671735f3811b60d9d3c017e67ce6 Mon Sep 17 00:00:00 2001 From: Spagles <106791090+Spagles@users.noreply.github.com> Date: Sat, 1 Aug 2026 20:39:29 +1000 Subject: [PATCH 4/6] fix: prevent passing null raw input to selector fallback functions --- .../srnyx/annoyingapi/command/selector/SelectorOptional.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/xyz/srnyx/annoyingapi/command/selector/SelectorOptional.java b/src/main/java/xyz/srnyx/annoyingapi/command/selector/SelectorOptional.java index 3c4492d..8102613 100644 --- a/src/main/java/xyz/srnyx/annoyingapi/command/selector/SelectorOptional.java +++ b/src/main/java/xyz/srnyx/annoyingapi/command/selector/SelectorOptional.java @@ -97,6 +97,7 @@ public SelectorOptional mapRaw(@NotNull Function mapper) { */ @Nullable @Unmodifiable public List orElse(@NotNull Function> other) { + if (raw == null) return null; if (selector == null) return other.apply(raw); final List expanded = selector.expand(sender); if (expanded == null) sender.invalidArgument(raw); @@ -112,6 +113,7 @@ public List orElse(@NotNull Function> other) { */ @Nullable @Unmodifiable public List orElseSingle(@NotNull Function other) { + if (raw == null) return null; if (selector == null) return Collections.singletonList(other.apply(raw)); final List expanded = selector.expand(sender); if (expanded == null) sender.invalidArgument(raw); @@ -127,6 +129,7 @@ public List orElseSingle(@NotNull Function other) { */ @Nullable @Unmodifiable public List orElseFlat(@NotNull Function>> other) { + if (raw == null) return null; if (selector == null) { final Optional> result = other.apply(raw); if (result.isEmpty()) sender.invalidArgument(raw); From cb37b46a85c1c7d09c3929df5b19845fa703c7c4 Mon Sep 17 00:00:00 2001 From: Spagles <106791090+Spagles@users.noreply.github.com> Date: Sat, 1 Aug 2026 20:39:59 +1000 Subject: [PATCH 5/6] fix: handle standard package names correctly in getRelocation --- src/main/java/xyz/srnyx/annoyingapi/AnnoyingPlugin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/xyz/srnyx/annoyingapi/AnnoyingPlugin.java b/src/main/java/xyz/srnyx/annoyingapi/AnnoyingPlugin.java index 5e41d40..3998dcc 100644 --- a/src/main/java/xyz/srnyx/annoyingapi/AnnoyingPlugin.java +++ b/src/main/java/xyz/srnyx/annoyingapi/AnnoyingPlugin.java @@ -678,7 +678,8 @@ public Relocation getRelocation(@NotNull String from, @NotNull String name) { */ @NotNull public Relocation getRelocation(@NotNull String from) { - return getRelocation(from, from.substring(from.lastIndexOf("{}") + 2).toLowerCase().replaceAll("[^a-z0-9._{}]", "")); + final int index = from.contains("{}") ? from.lastIndexOf("{}") + 2 : (from.contains(".") ? from.lastIndexOf(".") + 1 : 0); + return getRelocation(from, from.substring(index).toLowerCase().replaceAll("[^a-z0-9._{}]", "")); } /** From fcbd974c93a8bdf6478408a395fc7631aaa56619 Mon Sep 17 00:00:00 2001 From: srnyx <25808801+srnyx@users.noreply.github.com> Date: Sat, 1 Aug 2026 14:26:21 -0400 Subject: [PATCH 6/6] Refactor getRelocation method for clarity --- src/main/java/xyz/srnyx/annoyingapi/AnnoyingPlugin.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/xyz/srnyx/annoyingapi/AnnoyingPlugin.java b/src/main/java/xyz/srnyx/annoyingapi/AnnoyingPlugin.java index 3998dcc..f56b1e5 100644 --- a/src/main/java/xyz/srnyx/annoyingapi/AnnoyingPlugin.java +++ b/src/main/java/xyz/srnyx/annoyingapi/AnnoyingPlugin.java @@ -678,8 +678,13 @@ public Relocation getRelocation(@NotNull String from, @NotNull String name) { */ @NotNull public Relocation getRelocation(@NotNull String from) { - final int index = from.contains("{}") ? from.lastIndexOf("{}") + 2 : (from.contains(".") ? from.lastIndexOf(".") + 1 : 0); - return getRelocation(from, from.substring(index).toLowerCase().replaceAll("[^a-z0-9._{}]", "")); + String name = from; + if (name.contains("{}")) { + name = name.substring(name.lastIndexOf("{}") + 2); + } else if (name.contains(".")) { + name = name.substring(name.lastIndexOf(".") + 1); + } + return getRelocation(from, name.toLowerCase().replaceAll("[^a-z0-9._{}]", "")); } /**