9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-28 03:19:14 +00:00

调整事件, 添加ce字段, 避免和sk本身的语法冲突

This commit is contained in:
Catnies
2025-08-08 13:24:31 +08:00
parent 307724077a
commit afa328f859
6 changed files with 127 additions and 6 deletions

View File

@@ -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();

View File

@@ -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";
}
}

View File

@@ -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;
}
}

View File

@@ -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.");
}

View File

@@ -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;

View File

@@ -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.");
}