From afa328f8598a610d7cf984e9af272d63fcc7fa82 Mon Sep 17 00:00:00 2001 From: Catnies Date: Fri, 8 Aug 2025 13:24:31 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BA=8B=E4=BB=B6,=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0ce=E5=AD=97=E6=AE=B5,=20=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E5=92=8Csk=E6=9C=AC=E8=BA=AB=E7=9A=84=E8=AF=AD=E6=B3=95?= =?UTF-8?q?=E5=86=B2=E7=AA=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../compatibility/skript/SkriptHook.java | 4 ++ .../CondIsCraftEngineHasBeenLoad.java | 45 ++++++++++++++++ .../skript/event/EvtCraftEngineReload.java | 54 +++++++++++++++++++ .../skript/event/EvtCustomBlock.java | 10 +++- .../skript/event/EvtCustomClick.java | 10 +++- .../skript/event/EvtCustomFurniture.java | 10 +++- 6 files changed, 127 insertions(+), 6 deletions(-) create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/condition/CondIsCraftEngineHasBeenLoad.java create mode 100644 bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCraftEngineReload.java 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 index 3e010e30c..bee455f92 100644 --- 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 @@ -1,12 +1,14 @@ package net.momirealms.craftengine.bukkit.compatibility.skript; import net.momirealms.craftengine.bukkit.compatibility.skript.clazz.CraftEngineClasses; +import net.momirealms.craftengine.bukkit.compatibility.skript.condition.CondIsCraftEngineHasBeenLoad; import net.momirealms.craftengine.bukkit.compatibility.skript.condition.CondIsCustomBlock; import net.momirealms.craftengine.bukkit.compatibility.skript.condition.CondIsCustomItem; import net.momirealms.craftengine.bukkit.compatibility.skript.condition.CondIsFurniture; import net.momirealms.craftengine.bukkit.compatibility.skript.effect.EffPlaceCustomBlock; import net.momirealms.craftengine.bukkit.compatibility.skript.effect.EffPlaceFurniture; import net.momirealms.craftengine.bukkit.compatibility.skript.effect.EffRemoveFurniture; +import net.momirealms.craftengine.bukkit.compatibility.skript.event.EvtCraftEngineReload; import net.momirealms.craftengine.bukkit.compatibility.skript.event.EvtCustomBlock; import net.momirealms.craftengine.bukkit.compatibility.skript.event.EvtCustomClick; import net.momirealms.craftengine.bukkit.compatibility.skript.event.EvtCustomFurniture; @@ -16,9 +18,11 @@ public class SkriptHook { public static void register() { CraftEngineClasses.register(); + EvtCraftEngineReload.register(); EvtCustomBlock.register(); EvtCustomFurniture.register(); EvtCustomClick.register(); + CondIsCraftEngineHasBeenLoad.register(); CondIsCustomBlock.register(); CondIsFurniture.register(); CondIsCustomItem.register(); diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/condition/CondIsCraftEngineHasBeenLoad.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/condition/CondIsCraftEngineHasBeenLoad.java new file mode 100644 index 000000000..39483f088 --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/condition/CondIsCraftEngineHasBeenLoad.java @@ -0,0 +1,45 @@ +package net.momirealms.craftengine.bukkit.compatibility.skript.condition; + +import ch.njol.skript.Skript; +import ch.njol.skript.doc.Description; +import ch.njol.skript.doc.Name; +import ch.njol.skript.doc.Since; +import ch.njol.skript.lang.Condition; +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.SkriptParser; +import ch.njol.util.Kleenean; +import net.momirealms.craftengine.bukkit.compatibility.skript.event.EvtCraftEngineReload; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + +@Name("CraftEngine has been load") +@Description({"Checks CraftEngine has been load."}) +@Since("1.0") +public class CondIsCraftEngineHasBeenLoad extends Condition { + + public static void register() { + Skript.registerCondition(CondIsCraftEngineHasBeenLoad.class, + "(ce|craft-engine) has been load[ed]", + "(ce|craft-engine) has not been load[ed] [yet]" + ); + } + + @Override + public boolean init(Expression[] expressions, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) { + setNegated(matchedPattern == 1); + return true; + } + + @Override + public boolean check(Event event) { + boolean beenLoad = EvtCraftEngineReload.hasBeenLoad(); + return isNegated() ? !beenLoad : beenLoad; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return "craft-engine has " + (isNegated() ? "not " : "") + "been loaded"; + } + + +} diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCraftEngineReload.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCraftEngineReload.java new file mode 100644 index 000000000..940c615f5 --- /dev/null +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCraftEngineReload.java @@ -0,0 +1,54 @@ +package net.momirealms.craftengine.bukkit.compatibility.skript.event; + +import ch.njol.skript.Skript; +import ch.njol.skript.doc.Description; +import ch.njol.skript.doc.Name; +import ch.njol.skript.doc.Since; +import ch.njol.skript.lang.Literal; +import ch.njol.skript.lang.SkriptEvent; +import ch.njol.skript.lang.SkriptParser; +import net.momirealms.craftengine.bukkit.api.event.CraftEngineReloadEvent; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + +@Name("On CraftEngine Reload") +@Description({"Fires when CraftEngine reload"}) +@Since("1.0") +public class EvtCraftEngineReload extends SkriptEvent { + + public static void register() { + Skript.registerEvent("CraftEngine Loaded", EvtCraftEngineReload.class, CraftEngineReloadEvent.class, "(ce|craft(engine|-engine)) [first] (load[ed]|reload)") + .description("Called when Craft-Engine resource loaded."); + } + + private boolean onlyCheckFirstCall; + private static boolean hasBeenCalled = false; + + @Override + public boolean init(Literal[] args, int matchedPattern, SkriptParser.ParseResult parser) { + // 检查是否包含 "first" 关键词 + String expr = parser.expr; + this.onlyCheckFirstCall = expr.contains("first"); + return true; + } + + @Override + public boolean check(Event event) { + if (event instanceof CraftEngineReloadEvent reloadEvent) return false; + if (onlyCheckFirstCall) { + if (hasBeenCalled) return false; // 如果 hasBeenCalled 已经为 true,代表已经调用过了, 故返回 false。 + hasBeenCalled = true; + return true; + } + return true; + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return onlyCheckFirstCall ? "craftengine first load" : "craftengine reload"; + } + + public static boolean hasBeenLoad() { + return hasBeenCalled; + } +} \ No newline at end of file diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomBlock.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomBlock.java index e5510c23d..d46dc3ca4 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomBlock.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomBlock.java @@ -1,6 +1,9 @@ package net.momirealms.craftengine.bukkit.compatibility.skript.event; import ch.njol.skript.Skript; +import ch.njol.skript.doc.Description; +import ch.njol.skript.doc.Name; +import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptEvent; import ch.njol.skript.lang.SkriptParser; @@ -16,12 +19,15 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; @SuppressWarnings({"unchecked"}) +@Name("On Custom Block Place And Break") +@Description({"Fires when a Custom block gets place and broken"}) +@Since("1.0") public class EvtCustomBlock extends SkriptEvent { public static void register() { - Skript.registerEvent("Break Custom Block", EvtCustomBlock.class, CustomBlockBreakEvent.class, "(break[ing]|1¦min(e|ing)) [[of] %-unsafeblockstatematchers%]") + Skript.registerEvent("Break Custom Block", EvtCustomBlock.class, CustomBlockBreakEvent.class, "(break[ing]|1¦min(e|ing)) of (custom|ce|craft-engine) block [[of] %-unsafeblockstatematchers%]") .description("Called when a custom block is broken by a player. If you use 'on mine', only events where the broken block dropped something will call the trigger."); - Skript.registerEvent("Place Custom Block", EvtCustomBlock.class, CustomBlockPlaceEvent.class, "(plac(e|ing)|build[ing]) [[of] %-unsafeblockstatematchers%]") + Skript.registerEvent("Place Custom Block", EvtCustomBlock.class, CustomBlockPlaceEvent.class, "(plac(e|ing)|build[ing]) of (custom|ce|craft-engine) block [[of] %-unsafeblockstatematchers%]") .description("Called when a player places a custom block."); } diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomClick.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomClick.java index 8c37c2a04..c5c367cf8 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomClick.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomClick.java @@ -3,6 +3,9 @@ package net.momirealms.craftengine.bukkit.compatibility.skript.event; import ch.njol.skript.Skript; import ch.njol.skript.aliases.ItemType; import ch.njol.skript.bukkitutil.ClickEventTracker; +import ch.njol.skript.doc.Description; +import ch.njol.skript.doc.Name; +import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptEvent; import ch.njol.skript.lang.SkriptParser; @@ -17,6 +20,9 @@ import org.jetbrains.annotations.Nullable; import java.util.function.Predicate; +@Name("On Click with Custom Item") +@Description({"Fires when click a custom item"}) +@Since("1.0") public class EvtCustomClick extends SkriptEvent { private final static int RIGHT = 1, LEFT = 2, ANY = RIGHT | LEFT; @@ -25,8 +31,8 @@ public class EvtCustomClick extends SkriptEvent { @SuppressWarnings("unchecked") public static void register() { Skript.registerEvent("Interact Custom Block Furniture", EvtCustomClick.class, new Class[]{CustomBlockInteractEvent.class, FurnitureInteractEvent.class}, - "[(" + RIGHT + ":right|" + LEFT + ":left)(| |-)][mouse(| |-)]click[ing] [on %-unsafeblockstatematchers/strings%] [(with|using|holding) %-itemtype%]", - "[(" + RIGHT + ":right|" + LEFT + ":left)(| |-)][mouse(| |-)]click[ing] (with|using|holding) %itemtype% on %unsafeblockstatematchers/strings%"); + "[(" + RIGHT + ":right|" + LEFT + ":left)(| |-)][mouse(| |-)]click[ing] of (custom|ce|craft-engine) item[s] [on %-unsafeblockstatematchers/strings%] [(with|using|holding) %-itemtype%]", + "[(" + RIGHT + ":right|" + LEFT + ":left)(| |-)][mouse(| |-)]click[ing] of (custom|ce|craft-engine) item[s] (with|using|holding) %itemtype% on %unsafeblockstatematchers/strings%"); } private @Nullable Literal type; diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomFurniture.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomFurniture.java index 081b72f85..c254c999c 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomFurniture.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomFurniture.java @@ -1,6 +1,9 @@ package net.momirealms.craftengine.bukkit.compatibility.skript.event; import ch.njol.skript.Skript; +import ch.njol.skript.doc.Description; +import ch.njol.skript.doc.Name; +import ch.njol.skript.doc.Since; import ch.njol.skript.lang.Literal; import ch.njol.skript.lang.SkriptEvent; import ch.njol.skript.lang.SkriptParser; @@ -12,12 +15,15 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; @SuppressWarnings({"unchecked"}) +@Name("On Custom Furniture Place And Break") +@Description({"Fires when a Custom furniture gets place and broken"}) +@Since("1.0") public class EvtCustomFurniture extends SkriptEvent { public static void register() { - Skript.registerEvent("Break Furniture", EvtCustomFurniture.class, FurnitureBreakEvent.class, "(break[ing]) [[of] %-strings%]") + Skript.registerEvent("Break Furniture", EvtCustomFurniture.class, FurnitureBreakEvent.class, "(break[ing]) of (custom|ce|craft-engine) furniture[s] [[of] %-strings%]") .description("Called when a furniture is broken by a player."); - Skript.registerEvent("Place Furniture", EvtCustomFurniture.class, FurniturePlaceEvent.class, "(plac(e|ing)|build[ing]) [[of] %-strings%]") + Skript.registerEvent("Place Furniture", EvtCustomFurniture.class, FurniturePlaceEvent.class, "(plac(e|ing)|build[ing]) of (custom|ce|craft-engine) furniture[s] [[of] %-strings%]") .description("Called when a player places a furniture."); }