From 72ee81d95111dc71fc56c8fb1d81578cccf1fe1a Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Fri, 25 Apr 2025 23:21:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=85=E7=90=86=E5=9E=83=E5=9C=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BukkitCompatibilityManager.java | 1 + .../permission/LuckPermsEventListeners.java | 1 - .../skript/classes/CraftEngineClasses.java | 21 ------ .../expression/ExprCustomBlockProperty.java | 71 +++++++++++++++++++ .../craftengine/core/plugin/Plugin.java | 1 - 5 files changed, 72 insertions(+), 23 deletions(-) create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/expression/ExprCustomBlockProperty.java diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java index 99d0eb014..cb1aa63e7 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java @@ -61,6 +61,7 @@ public class BukkitCompatibilityManager implements CompatibilityManager { CondIsBlockCustomBlock.register(); ExprBlockCustomBlockID.register(); ExprBlockCustomBlockState.register(); +// ExprCustomBlockProperty.register(); logHook("Skript"); Plugin skriptPlugin = getPlugin("Skript"); for (BukkitTask task : Bukkit.getScheduler().getPendingTasks()) { diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/permission/LuckPermsEventListeners.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/permission/LuckPermsEventListeners.java index 8db447fff..aa47edb92 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/permission/LuckPermsEventListeners.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/permission/LuckPermsEventListeners.java @@ -16,7 +16,6 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; -import java.util.logging.Level; public class LuckPermsEventListeners { private final JavaPlugin plugin; diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/classes/CraftEngineClasses.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/classes/CraftEngineClasses.java index 30aa48e4b..565c4f26b 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/classes/CraftEngineClasses.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/classes/CraftEngineClasses.java @@ -68,26 +68,5 @@ public class CraftEngineClasses { } }) ); - -// Classes.registerClass(new ClassInfo<>(CustomBlock.class, "customblocks") -// .user("custom block") -// .name("Custom Block") -// .parser(new Parser<>() { -// @Override -// public String toString(CustomBlock o, int flags) { -// return o.id().toString(); -// } -// -// @Override -// public String toVariableNameString(CustomBlock o) { -// return "customblock:" + o.id(); -// } -// -// @Override -// public @Nullable CustomBlock parse(String s, ParseContext context) { -// return BuiltInRegistries.BLOCK.getValue(Key.of(s)); -// } -// }) -// ); } } diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/expression/ExprCustomBlockProperty.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/expression/ExprCustomBlockProperty.java new file mode 100644 index 000000000..b2e72ace8 --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/expression/ExprCustomBlockProperty.java @@ -0,0 +1,71 @@ +package net.momirealms.craftengine.bukkit.compatibility.skript.expression; + +import ch.njol.skript.Skript; +import ch.njol.skript.expressions.base.PropertyExpression; +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.ExpressionType; +import ch.njol.skript.lang.SkriptParser; +import ch.njol.util.Kleenean; +import net.momirealms.craftengine.core.block.ImmutableBlockState; +import net.momirealms.craftengine.core.block.properties.Property; +import org.bukkit.event.Event; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; + +public class ExprCustomBlockProperty extends PropertyExpression { + + public static void register() { + Skript.registerExpression( + ExprCustomBlockProperty.class, + String.class, + ExpressionType.PROPERTY, + "[the] custom block %strings% propert(y|ies) of %customblockstates%", + "%customblockstates%'[s] custom block %strings% propert(y|ies)" + ); + } + + private Expression properties; + + @Override + public @NotNull Class getReturnType() { + return String.class; + } + + @Override + protected String[] get(Event event, ImmutableBlockState[] source) { + String[] props = this.properties.getArray(event); + List results = new ArrayList<>(); + + for (ImmutableBlockState state : source) { + for (String propName : props) { + Property property = state.owner().value().getProperty(propName); + if (property != null) { + results.add(state.get(property).toString()); + } + } + } + return results.toArray(new String[0]); + } + + @SuppressWarnings("unchecked") + @Override + public boolean init(Expression[] exprs, int matchedPattern, @NotNull Kleenean isDelayed, SkriptParser.@NotNull ParseResult parseResult) { + if (matchedPattern == 0) { + properties = (Expression) exprs[0]; + setExpr((Expression) exprs[1]); + } else { + properties = (Expression) exprs[1]; + setExpr((Expression) exprs[0]); + } + return true; + } + + @Override + public @NotNull String toString(@Nullable Event event, boolean debug) { + return "custom block state " + getExpr().toString(event, debug) + + "'s " + properties.toString(event, debug) + " property"; + } +} \ No newline at end of file diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java index bcd5c874e..d7d693264 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/Plugin.java @@ -3,7 +3,6 @@ package net.momirealms.craftengine.core.plugin; import net.momirealms.craftengine.core.advancement.AdvancementManager; import net.momirealms.craftengine.core.block.BlockManager; import net.momirealms.craftengine.core.entity.furniture.FurnitureManager; -import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.font.FontManager; import net.momirealms.craftengine.core.item.ItemManager; import net.momirealms.craftengine.core.item.recipe.RecipeManager;