From a72fe4ccdedaab352ecc3076847d859f467390aa Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Sat, 26 Apr 2025 17:41:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0skript=E6=94=BE=E7=BD=AE?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=96=B9=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BukkitCompatibilityManager.java | 13 +--- .../compatibility/skript/SkriptHook.java | 20 ++++++ .../CraftEngineClasses.java | 2 +- .../skript/effect/EffPlaceCustomBlock.java | 46 ++++++++++++ .../expression/ExprCustomBlockProperty.java | 71 ------------------- .../bukkit/api/CraftEngineBlocks.java | 3 + .../bukkit/util/BukkitReflectionUtils.java | 6 ++ .../craftengine/core/plugin/CraftEngine.java | 1 - 8 files changed, 78 insertions(+), 84 deletions(-) create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/SkriptHook.java rename bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/{classes => clazz}/CraftEngineClasses.java (99%) create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/effect/EffPlaceCustomBlock.java delete 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 88e97a047..40143b6e8 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 @@ -9,11 +9,7 @@ import net.momirealms.craftengine.bukkit.compatibility.modelengine.ModelEngineMo import net.momirealms.craftengine.bukkit.compatibility.modelengine.ModelEngineUtils; import net.momirealms.craftengine.bukkit.compatibility.papi.PlaceholderAPIUtils; import net.momirealms.craftengine.bukkit.compatibility.permission.LuckPermsEventListeners; -import net.momirealms.craftengine.bukkit.compatibility.skript.classes.CraftEngineClasses; -import net.momirealms.craftengine.bukkit.compatibility.skript.condition.CondIsBlockCustomBlock; -import net.momirealms.craftengine.bukkit.compatibility.skript.event.EvtCustomBlock; -import net.momirealms.craftengine.bukkit.compatibility.skript.expression.ExprBlockCustomBlockID; -import net.momirealms.craftengine.bukkit.compatibility.skript.expression.ExprBlockCustomBlockState; +import net.momirealms.craftengine.bukkit.compatibility.skript.SkriptHook; import net.momirealms.craftengine.bukkit.compatibility.slimeworld.SlimeFormatStorageAdaptor; import net.momirealms.craftengine.bukkit.compatibility.viaversion.ViaVersionUtils; import net.momirealms.craftengine.bukkit.compatibility.worldedit.WorldEditBlockRegister; @@ -56,12 +52,7 @@ public class BukkitCompatibilityManager implements CompatibilityManager { } // skript if (this.isPluginEnabled("Skript")) { - CraftEngineClasses.register(); - EvtCustomBlock.register(); - CondIsBlockCustomBlock.register(); - ExprBlockCustomBlockID.register(); - ExprBlockCustomBlockState.register(); -// ExprCustomBlockProperty.register(); + SkriptHook.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/skript/SkriptHook.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/SkriptHook.java new file mode 100644 index 000000000..f227347e1 --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/SkriptHook.java @@ -0,0 +1,20 @@ +package net.momirealms.craftengine.bukkit.compatibility.skript; + +import net.momirealms.craftengine.bukkit.compatibility.skript.clazz.CraftEngineClasses; +import net.momirealms.craftengine.bukkit.compatibility.skript.condition.CondIsBlockCustomBlock; +import net.momirealms.craftengine.bukkit.compatibility.skript.effect.EffPlaceCustomBlock; +import net.momirealms.craftengine.bukkit.compatibility.skript.event.EvtCustomBlock; +import net.momirealms.craftengine.bukkit.compatibility.skript.expression.ExprBlockCustomBlockID; +import net.momirealms.craftengine.bukkit.compatibility.skript.expression.ExprBlockCustomBlockState; + +public class SkriptHook { + + public static void register() { + CraftEngineClasses.register(); + EvtCustomBlock.register(); + CondIsBlockCustomBlock.register(); + ExprBlockCustomBlockID.register(); + ExprBlockCustomBlockState.register(); + EffPlaceCustomBlock.register(); + } +} 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/clazz/CraftEngineClasses.java similarity index 99% rename from bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/classes/CraftEngineClasses.java rename to bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/clazz/CraftEngineClasses.java index 565c4f26b..bae36a43d 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/clazz/CraftEngineClasses.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.bukkit.compatibility.skript.classes; +package net.momirealms.craftengine.bukkit.compatibility.skript.clazz; import ch.njol.skript.classes.ClassInfo; import ch.njol.skript.classes.Parser; diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/effect/EffPlaceCustomBlock.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/effect/EffPlaceCustomBlock.java new file mode 100644 index 000000000..2594ffb55 --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/effect/EffPlaceCustomBlock.java @@ -0,0 +1,46 @@ +package net.momirealms.craftengine.bukkit.compatibility.skript.effect; + +import ch.njol.skript.Skript; +import ch.njol.skript.lang.Effect; +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.SkriptParser; +import ch.njol.skript.util.Direction; +import ch.njol.util.Kleenean; +import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks; +import net.momirealms.craftengine.core.block.ImmutableBlockState; +import org.bukkit.Location; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + +public class EffPlaceCustomBlock extends Effect { + + public static void register() { + Skript.registerEffect(EffPlaceCustomBlock.class, "place custom block %customblockstates% [%directions% %locations%]"); + } + + private Expression blocks; + private Expression locations; + + @Override + protected void execute(Event e) { + ImmutableBlockState[] os = blocks.getArray(e); + for (Location l : locations.getArray(e)) { + for (ImmutableBlockState o : os) { + CraftEngineBlocks.place(l, o, false); + } + } + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return "place " + blocks.toString(event, debug) + " " + locations.toString(event, debug); + } + + @SuppressWarnings("unchecked") + @Override + public boolean init(Expression[] expressions, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) { + blocks = (Expression) expressions[0]; + locations = Direction.combine((Expression) expressions[1], (Expression) expressions[2]); + return true; + } +} 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 deleted file mode 100644 index b2e72ace8..000000000 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/expression/ExprCustomBlockProperty.java +++ /dev/null @@ -1,71 +0,0 @@ -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/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java index 7b8467ea5..e5817c07a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/CraftEngineBlocks.java @@ -112,6 +112,8 @@ public final class CraftEngineBlocks { Object worldServer = FastNMS.INSTANCE.field$CraftWorld$ServerLevel(location.getWorld()); Object blockPos = FastNMS.INSTANCE.constructor$BlockPos(location.getBlockX(), location.getBlockY(), location.getBlockZ()); Object blockState = block.customBlockState().handle(); + System.out.println(blockPos); + System.out.println(blockState); Object oldBlockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(worldServer, blockPos); success = FastNMS.INSTANCE.method$LevelWriter$setBlock(worldServer, blockPos, blockState, option.flags()); if (success) { @@ -120,6 +122,7 @@ public final class CraftEngineBlocks { location.getWorld().playSound(location, block.sounds().placeSound().toString(), SoundCategory.BLOCKS, block.sounds().placeSound().volume(), block.sounds().placeSound().pitch()); } } + System.out.println(success); return success; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BukkitReflectionUtils.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BukkitReflectionUtils.java index 9bd26a702..68eadb3ec 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BukkitReflectionUtils.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/BukkitReflectionUtils.java @@ -1,6 +1,7 @@ package net.momirealms.craftengine.bukkit.util; import net.momirealms.craftengine.core.util.ReflectionUtils; +import net.momirealms.craftengine.core.util.VersionHelper; import org.bukkit.Bukkit; import java.lang.reflect.Method; @@ -66,4 +67,9 @@ public final class BukkitReflectionUtils { public static String assembleMCClass(String className) { return PREFIX_MC + className; } + + public static Class findReobfOrMojmapClass(String reobf, String mojmap) { + if (VersionHelper.isMojmap()) return ReflectionUtils.getClazz(BukkitReflectionUtils.assembleMCClass(mojmap)); + else return ReflectionUtils.getClazz(BukkitReflectionUtils.assembleMCClass(reobf)); + } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java index 4ad572a53..a0c9669e2 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java @@ -29,7 +29,6 @@ import net.momirealms.craftengine.core.plugin.logger.filter.LogFilter; import net.momirealms.craftengine.core.plugin.network.NetworkManager; import net.momirealms.craftengine.core.plugin.scheduler.SchedulerAdapter; import net.momirealms.craftengine.core.sound.SoundManager; -import net.momirealms.craftengine.core.util.VersionHelper; import net.momirealms.craftengine.core.world.WorldManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Logger;