From b35cc4224cab4d7dcf2cb731fdd2e0035cd9ea11 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Wed, 23 Apr 2025 03:30:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=94=BB=E9=80=A0=E5=8F=B0?= =?UTF-8?q?=E6=A6=82=E7=8E=87=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bukkit/font/BukkitFontManager.java | 2 +- .../item/factory/ComponentItemFactory.java | 52 +++++++------- .../item/recipe/RecipeEventListener.java | 6 +- .../plugin/user/BukkitServerPlayer.java | 2 +- .../craftengine/bukkit/util/Reflections.java | 26 +++---- .../conflict/matcher/ExactPathMatcher.java | 3 + .../conflict/matcher/FilenameMatcher.java | 2 +- .../script/AbstractTokenStringReader.java | 65 +++++++++++++++++ .../core/plugin/script/Action.java | 4 ++ .../craftengine/core/plugin/script/Block.java | 72 +++++++++++++++++++ .../craftengine/core/plugin/script/Task.java | 61 ++++++++++++++++ .../core/plugin/script/TaskActionParser.java | 6 ++ .../core/plugin/script/TaskActionParsers.java | 4 ++ .../core/plugin/script/TaskContext.java | 8 +++ .../core/plugin/script/TokenStringReader.java | 18 +++++ .../script/argument/ArgumentParser.java | 8 +++ .../script/argument/ArgumentParsers.java | 19 +++++ .../script/argument/DoubleArgumentParser.java | 12 ++++ .../script/argument/IntArgumentParser.java | 12 ++++ .../script/argument/LongArgumentParser.java | 12 ++++ .../core/registry/BuiltInRegistries.java | 2 + .../craftengine/core/registry/Registries.java | 2 + gradle.properties | 2 +- 23 files changed, 354 insertions(+), 46 deletions(-) create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/AbstractTokenStringReader.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/Action.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/Block.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/Task.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskActionParser.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskActionParsers.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskContext.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/TokenStringReader.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/ArgumentParser.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/ArgumentParsers.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/DoubleArgumentParser.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/IntArgumentParser.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/LongArgumentParser.java diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java index 2a8aa4fbe..1e9a23fcf 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java @@ -129,7 +129,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { } @SuppressWarnings("UnstableApiUsage") - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onAnvilRename(PrepareAnvilEvent event) { if (!Config.allowEmojiAnvil() || super.emojiKeywordTrie == null) { return; diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory.java index afe9f24b4..ad37aa293 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/factory/ComponentItemFactory.java @@ -339,32 +339,6 @@ public class ComponentItemFactory extends BukkitItemFactory { return Optional.ofNullable((Integer) ComponentType.encodeJava(ComponentKeys.REPAIR_COST, item.getComponent(ComponentKeys.REPAIR_COST)).orElse(null)); } - @Override - protected ItemWrapper mergeCopy(ItemWrapper item1, ItemWrapper item2) { - Object itemStack1 = item1.getLiteralObject(); - Object itemStack2 = item2.getLiteralObject(); - try { - Object itemStack3 = Reflections.method$ItemStack$transmuteCopy.invoke(itemStack1, Reflections.method$ItemStack$getItem.invoke(itemStack2), 1); - Reflections.method$ItemStack$applyComponents.invoke(itemStack3, Reflections.method$ItemStack$getComponentsPatch.invoke(itemStack2)); - return new RTagItemWrapper(new RtagItem(ItemObject.asCraftMirror(itemStack3)), item2.count()); - } catch (Exception e) { - this.plugin.logger().warn("Failed to merge item", e); - } - return null; - } - - @Override - protected void merge(ItemWrapper item1, ItemWrapper item2) { - // load previous changes on nms items - Object itemStack1 = item1.getLiteralObject(); - Object itemStack2 = item2.getLiteralObject(); - try { - Reflections.method$ItemStack$applyComponents.invoke(itemStack1, Reflections.method$ItemStack$getComponentsPatch.invoke(itemStack2)); - } catch (Exception e) { - plugin.logger().warn("Failed to merge item", e); - } - } - @Override protected void trim(ItemWrapper item, Trim trim) { if (trim == null) { @@ -388,4 +362,30 @@ public class ComponentItemFactory extends BukkitItemFactory { Map trimMap = (Map) trim.get(); return Optional.of(new Trim(trimMap.get("pattern"), trimMap.get("material"))); } + + @Override + protected ItemWrapper mergeCopy(ItemWrapper item1, ItemWrapper item2) { + Object itemStack1 = item1.getLiteralObject(); + Object itemStack2 = item2.getLiteralObject(); + try { + Object itemStack3 = FastNMS.INSTANCE.method$ItemStack$transmuteCopy(itemStack1, itemStack2); + FastNMS.INSTANCE.method$ItemStack$applyComponents(itemStack3, FastNMS.INSTANCE.method$ItemStack$getComponentsPatch(itemStack2)); + return new RTagItemWrapper(new RtagItem(ItemObject.asCraftMirror(itemStack3)), item2.count()); + } catch (Exception e) { + this.plugin.logger().warn("Failed to merge item", e); + } + return null; + } + + @Override + protected void merge(ItemWrapper item1, ItemWrapper item2) { + // load previous changes on nms items + Object itemStack1 = item1.getLiteralObject(); + Object itemStack2 = item2.getLiteralObject(); + try { + FastNMS.INSTANCE.method$ItemStack$applyComponents(itemStack1, FastNMS.INSTANCE.method$ItemStack$getComponentsPatch(itemStack2)); + } catch (Exception e) { + plugin.logger().warn("Failed to merge item", e); + } + } } \ No newline at end of file diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java index 918f68fec..efb32bfc7 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/item/recipe/RecipeEventListener.java @@ -447,7 +447,7 @@ public class RecipeEventListener implements Listener { } } - @EventHandler(ignoreCancelled = true, priority = EventPriority.LOW) + @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onAnvilCombineItems(PrepareAnvilEvent event) { AnvilInventory inventory = event.getInventory(); ItemStack first = inventory.getFirstItem(); @@ -490,7 +490,7 @@ public class RecipeEventListener implements Listener { } @SuppressWarnings("UnstableApiUsage") - @EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL) + @EventHandler(ignoreCancelled = true, priority = EventPriority.LOW) public void onAnvilRepairItems(PrepareAnvilEvent event) { AnvilInventory inventory = event.getInventory(); ItemStack first = inventory.getFirstItem(); @@ -644,7 +644,7 @@ public class RecipeEventListener implements Listener { } @SuppressWarnings("UnstableApiUsage") - @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) + @EventHandler(ignoreCancelled = true, priority = EventPriority.NORMAL) public void onAnvilRenameItem(PrepareAnvilEvent event) { AnvilInventory inventory = event.getInventory(); ItemStack first = inventory.getFirstItem(); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java index acf55c019..4b05c788f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java @@ -320,7 +320,7 @@ public class BukkitServerPlayer extends Player { if (VersionHelper.isFolia()) { try { Object serverPlayer = serverPlayer(); - Object gameMode = Reflections.field$ServerPlayer$gameMode.get(serverPlayer); + Object gameMode = FastNMS.INSTANCE.field$ServerPlayer$gameMode(serverPlayer); this.gameTicks = (int) Reflections.field$ServerPlayerGameMode$gameTicks.get(gameMode); } catch (ReflectiveOperationException e) { CraftEngine.instance().logger().warn("Failed to get game tick for " + name(), e); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index 8d0465e6c..0ecc7730c 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -5297,25 +5297,25 @@ public class Reflections { ) ); - // 1.20.5+ - public static final Method method$ItemStack$transmuteCopy = ReflectionUtils.getMethod( - clazz$ItemStack, clazz$ItemStack, clazz$ItemLike, int.class - ); +// // 1.20.5+ +// public static final Method method$ItemStack$transmuteCopy = ReflectionUtils.getMethod( +// clazz$ItemStack, clazz$ItemStack, clazz$ItemLike, int.class +// ); // 1.20.5+ public static final Class clazz$DataComponentPatch = ReflectionUtils.getClazz( BukkitReflectionUtils.assembleMCClass("core.component.DataComponentPatch") ); - // 1.20.5+ - public static final Method method$ItemStack$getComponentsPatch = Optional.ofNullable(clazz$DataComponentPatch) - .map(it -> ReflectionUtils.getMethod(clazz$ItemStack, it)) - .orElse(null); - - // 1.20.5+ - public static final Method method$ItemStack$applyComponents = Optional.ofNullable(clazz$DataComponentPatch) - .map(it -> ReflectionUtils.getMethod(clazz$ItemStack, void.class, it)) - .orElse(null); +// // 1.20.5+ +// public static final Method method$ItemStack$getComponentsPatch = Optional.ofNullable(clazz$DataComponentPatch) +// .map(it -> ReflectionUtils.getMethod(clazz$ItemStack, it)) +// .orElse(null); +// +// // 1.20.5+ WRONG!!! +// public static final Method method$ItemStack$applyComponents = Optional.ofNullable(clazz$DataComponentPatch) +// .map(it -> ReflectionUtils.getMethod(clazz$ItemStack, void.class, it)) +// .orElse(null); public static final Method method$ItemStack$getItem = requireNonNull( ReflectionUtils.getMethod( diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/ExactPathMatcher.java b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/ExactPathMatcher.java index 0553cbafb..fdff56bcd 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/ExactPathMatcher.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/ExactPathMatcher.java @@ -29,6 +29,9 @@ public class ExactPathMatcher implements PathMatcher { @Override public PathMatcher create(Map arguments) { String path = (String) arguments.get("path"); + if (path == null) { + throw new IllegalArgumentException("The 'path' argument must not be null"); + } return new ExactPathMatcher(path); } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/FilenameMatcher.java b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/FilenameMatcher.java index 82e171d23..e52d8a590 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/FilenameMatcher.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/matcher/FilenameMatcher.java @@ -30,7 +30,7 @@ public class FilenameMatcher implements PathMatcher { public PathMatcher create(Map arguments) { String name = (String) arguments.get("name"); if (name == null) { - throw new IllegalArgumentException("The name argument must not be null"); + throw new IllegalArgumentException("The 'name' argument must not be null"); } return new FilenameMatcher(name); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/AbstractTokenStringReader.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/AbstractTokenStringReader.java new file mode 100644 index 000000000..d1f415d54 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/AbstractTokenStringReader.java @@ -0,0 +1,65 @@ +package net.momirealms.craftengine.core.plugin.script; + +import java.io.EOFException; + +public abstract class AbstractTokenStringReader implements TokenStringReader { + protected final char[] chars; + protected int index; + + public AbstractTokenStringReader(char[] chars) { + this.chars = chars; + } + + @Override + public boolean hasNext() { + return this.index < this.chars.length; + } + + @Override + public int index() { + return this.index; + } + + @Override + public String nextToken() { + if (!hasNext()) { + throw new IndexOutOfBoundsException(); + } + int start = this.index; + int end = this.chars.length - 1; + while (this.index < this.chars.length && !Character.isWhitespace(this.chars[this.index])) { + end++; + } + String token = new String(this.chars, start, end - start); + this.index = end; + return token; + } + + @Override + public char peek() { + return this.chars[this.index]; + } + + @Override + public char peek(int n) { + return this.chars[this.index + n]; + } + + @Override + public void skip(int n) { + if (n < 0) { + throw new IllegalArgumentException("n < 0"); + } + if (index() + n >= this.chars.length) { + throw new IndexOutOfBoundsException("index(" + index() + ") + (" + n + ") > chars.length(" + this.chars.length + ")"); + } + this.index += n; + } + + @Override + public void skipWhitespace() { + while (this.index < this.chars.length && !Character.isWhitespace(this.chars[this.index])) { + this.index++; + } + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/Action.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/Action.java new file mode 100644 index 000000000..20573dd90 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/Action.java @@ -0,0 +1,4 @@ +package net.momirealms.craftengine.core.plugin.script; + +public interface Action { +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/Block.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/Block.java new file mode 100644 index 000000000..789c91123 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/Block.java @@ -0,0 +1,72 @@ +package net.momirealms.craftengine.core.plugin.script; + +import net.momirealms.craftengine.core.util.Key; + +public interface Block { + + int size(); + + Action[] actions(); + + Key id(); + + Action byIndex(int index); + + int indexOf(Action action); + + boolean contains(Action action); + + static Block create(Key id, Action... actions) { + return new BlockImpl(id, actions); + } + + class BlockImpl implements Block { + private final Key id; + private final Action[] actions; + + public BlockImpl(Key id, Action[] actions) { + this.actions = actions; + this.id = id; + } + + @Override + public int size() { + return actions.length; + } + + @Override + public Action[] actions() { + return this.actions; + } + + @Override + public Key id() { + return this.id; + } + + @Override + public boolean contains(Action action) { + for (Action value : this.actions) { + if (value.equals(action)) { + return true; + } + } + return false; + } + + @Override + public Action byIndex(int index) { + return this.actions[index]; + } + + @Override + public int indexOf(final Action action) { + for (int i = 0; i < this.actions.length; i++) { + if (this.actions[i].equals(action)) { + return i; + } + } + return -1; + } + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/Task.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/Task.java new file mode 100644 index 000000000..3924f2178 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/Task.java @@ -0,0 +1,61 @@ +package net.momirealms.craftengine.core.plugin.script; + +import net.momirealms.craftengine.core.util.Key; +import org.jetbrains.annotations.Nullable; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; + +public interface Task { + + Map blocks(); + + Key id(); + + @Nullable + Block byId(Key id); + + @Nullable + Block byAction(Action action); + + static Task create(Key key, Map blocks) { + return new TaskImpl(key, blocks); + } + + class TaskImpl implements Task { + private final Key id; + private final Map blocks = new LinkedHashMap<>(); + + public TaskImpl(Key id, Map blocks) { + this.blocks.putAll(blocks); + this.id = id; + } + + @Nullable + @Override + public Block byId(Key id) { + return this.blocks.get(id); + } + + @Override + public Map blocks() { + return Collections.unmodifiableMap(this.blocks); + } + + @Override + public Key id() { + return this.id; + } + + @Override + public @Nullable Block byAction(Action action) { + for (Block block : blocks.values()) { + if (block.contains(action)) { + return block; + } + } + return null; + } + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskActionParser.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskActionParser.java new file mode 100644 index 000000000..3bf720e3a --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskActionParser.java @@ -0,0 +1,6 @@ +package net.momirealms.craftengine.core.plugin.script; + +public interface TaskActionParser { + + Action parse(TokenStringReader reader); +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskActionParsers.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskActionParsers.java new file mode 100644 index 000000000..d72978f04 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskActionParsers.java @@ -0,0 +1,4 @@ +package net.momirealms.craftengine.core.plugin.script; + +public class TaskActionParsers { +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskContext.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskContext.java new file mode 100644 index 000000000..824568dec --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TaskContext.java @@ -0,0 +1,8 @@ +package net.momirealms.craftengine.core.plugin.script; + +public interface TaskContext { + + Task task(); + + +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TokenStringReader.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TokenStringReader.java new file mode 100644 index 000000000..e300dbc8a --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/TokenStringReader.java @@ -0,0 +1,18 @@ +package net.momirealms.craftengine.core.plugin.script; + +public interface TokenStringReader { + + char peek(); + + char peek(int n); + + void skip(int n); + + int index(); + + boolean hasNext(); + + String nextToken(); + + void skipWhitespace(); +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/ArgumentParser.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/ArgumentParser.java new file mode 100644 index 000000000..3965ec2a3 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/ArgumentParser.java @@ -0,0 +1,8 @@ +package net.momirealms.craftengine.core.plugin.script.argument; + +import net.momirealms.craftengine.core.plugin.script.TokenStringReader; + +public interface ArgumentParser { + + T parse(TokenStringReader reader); +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/ArgumentParsers.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/ArgumentParsers.java new file mode 100644 index 000000000..63ceaeb10 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/ArgumentParsers.java @@ -0,0 +1,19 @@ +package net.momirealms.craftengine.core.plugin.script.argument; + +public class ArgumentParsers { + public static final ArgumentParser INT_PARSER = new IntArgumentParser(); + public static final ArgumentParser LONG_PARSER = new LongArgumentParser(); + public static final ArgumentParser DOUBLE_PARSER = new DoubleArgumentParser(); + + public static ArgumentParser intParser() { + return INT_PARSER; + } + + public static ArgumentParser longParser() { + return LONG_PARSER; + } + + public static ArgumentParser doubleParser() { + return DOUBLE_PARSER; + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/DoubleArgumentParser.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/DoubleArgumentParser.java new file mode 100644 index 000000000..718e8cb8f --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/DoubleArgumentParser.java @@ -0,0 +1,12 @@ +package net.momirealms.craftengine.core.plugin.script.argument; + +import net.momirealms.craftengine.core.plugin.script.TokenStringReader; + +public class DoubleArgumentParser implements ArgumentParser { + + @Override + public Double parse(TokenStringReader reader) { + String token = reader.nextToken(); + return Double.parseDouble(token); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/IntArgumentParser.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/IntArgumentParser.java new file mode 100644 index 000000000..fd2a5c635 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/IntArgumentParser.java @@ -0,0 +1,12 @@ +package net.momirealms.craftengine.core.plugin.script.argument; + +import net.momirealms.craftengine.core.plugin.script.TokenStringReader; + +public class IntArgumentParser implements ArgumentParser { + + @Override + public Integer parse(TokenStringReader reader) { + String token = reader.nextToken(); + return Integer.parseInt(token); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/LongArgumentParser.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/LongArgumentParser.java new file mode 100644 index 000000000..b8c5b2355 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/script/argument/LongArgumentParser.java @@ -0,0 +1,12 @@ +package net.momirealms.craftengine.core.plugin.script.argument; + +import net.momirealms.craftengine.core.plugin.script.TokenStringReader; + +public class LongArgumentParser implements ArgumentParser { + + @Override + public Long parse(TokenStringReader reader) { + String token = reader.nextToken(); + return Long.parseLong(token); + } +} diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java index 59d7b9711..e52b5ba0f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/BuiltInRegistries.java @@ -22,6 +22,7 @@ import net.momirealms.craftengine.core.pack.model.select.SelectPropertyFactory; import net.momirealms.craftengine.core.pack.model.special.SpecialModelFactory; import net.momirealms.craftengine.core.pack.model.tint.TintFactory; import net.momirealms.craftengine.core.plugin.config.template.TemplateArgumentFactory; +import net.momirealms.craftengine.core.plugin.script.TaskActionParser; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceKey; @@ -49,6 +50,7 @@ public class BuiltInRegistries { public static final Registry SMITHING_RESULT_PROCESSOR_FACTORY = createRegistry(Registries.SMITHING_RESULT_PROCESSOR_FACTORY); public static final Registry HITBOX_FACTORY = createRegistry(Registries.HITBOX_FACTORY); public static final Registry RESOURCE_PACK_HOST_FACTORY = createRegistry(Registries.RESOURCE_PACK_HOST_FACTORY); + public static final Registry TASK_ACTION_PARSER = createRegistry(Registries.TASK_ACTION_PARSER); private static Registry createRegistry(ResourceKey> key) { return new MappedRegistry<>(key); diff --git a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java index 07e1e4ef8..febb757b8 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java +++ b/core/src/main/java/net/momirealms/craftengine/core/registry/Registries.java @@ -22,6 +22,7 @@ import net.momirealms.craftengine.core.pack.model.select.SelectPropertyFactory; import net.momirealms.craftengine.core.pack.model.special.SpecialModelFactory; import net.momirealms.craftengine.core.pack.model.tint.TintFactory; import net.momirealms.craftengine.core.plugin.config.template.TemplateArgumentFactory; +import net.momirealms.craftengine.core.plugin.script.TaskActionParser; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.ResourceKey; @@ -50,4 +51,5 @@ public class Registries { public static final ResourceKey> SMITHING_RESULT_PROCESSOR_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("smithing_result_processor_factory")); public static final ResourceKey> HITBOX_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("hitbox_factory")); public static final ResourceKey> RESOURCE_PACK_HOST_FACTORY = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("resource_pack_host_factory")); + public static final ResourceKey> TASK_ACTION_PARSER = new ResourceKey<>(ROOT_REGISTRY, Key.withDefaultNamespace("task_action_parser")); } diff --git a/gradle.properties b/gradle.properties index a6f31c8f8..777bd15c1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -51,7 +51,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.4 anti_grief_version=0.15 -nms_helper_version=0.61 +nms_helper_version=0.61.1 reactive_streams_version=1.0.4 amazon_awssdk_version=2.31.23 amazon_awssdk_eventstream_version=1.0.1