diff --git a/bukkit/compatibility/legacy/build.gradle.kts b/bukkit/compatibility/legacy/build.gradle.kts index a74b0d102..6178b659e 100644 --- a/bukkit/compatibility/legacy/build.gradle.kts +++ b/bukkit/compatibility/legacy/build.gradle.kts @@ -2,6 +2,7 @@ repositories { mavenCentral() maven("https://repo.papermc.io/repository/maven-public/") maven("https://repo.rapture.pw/repository/maven-releases/") + maven("https://repo.momirealms.net/releases/") maven("https://repo.infernalsuite.com/repository/maven-snapshots/") } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/classes/CraftEngineClasses.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/classes/CraftEngineClasses.java new file mode 100644 index 000000000..3ede19963 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/classes/CraftEngineClasses.java @@ -0,0 +1,35 @@ +package net.momirealms.craftengine.bukkit.compatibility.skript.classes; + +import ch.njol.skript.classes.ClassInfo; +import ch.njol.skript.classes.Parser; +import ch.njol.skript.lang.ParseContext; +import ch.njol.skript.registrations.Classes; +import net.momirealms.craftengine.core.block.BlockStateParser; +import net.momirealms.craftengine.core.block.ImmutableBlockState; +import org.jetbrains.annotations.Nullable; + +public class CraftEngineClasses { + + public static void register() { + Classes.registerClass(new ClassInfo<>(ImmutableBlockState.class, "customblockstate") + .user("custom block state") + .name("Custom Block State") + .parser(new Parser<>() { + @Override + public String toString(ImmutableBlockState o, int flags) { + return o.toString(); + } + + @Override + public String toVariableNameString(ImmutableBlockState o) { + return "customblockstate:" + o.toString(); + } + + @Override + public @Nullable ImmutableBlockState parse(String s, ParseContext context) { + return BlockStateParser.deserialize(s); + } + }) + ); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/condition/CondIsBlockCustomBlock.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/condition/CondIsBlockCustomBlock.java new file mode 100644 index 000000000..c26bfabb9 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/condition/CondIsBlockCustomBlock.java @@ -0,0 +1,41 @@ +package net.momirealms.craftengine.bukkit.compatibility.skript.condition; + +import ch.njol.skript.Skript; +import ch.njol.skript.conditions.base.PropertyCondition; +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.api.CraftEngineBlocks; +import org.bukkit.block.Block; +import org.bukkit.event.Event; +import org.jetbrains.annotations.Nullable; + +public class CondIsBlockCustomBlock extends Condition { + + public static void register() { + Skript.registerCondition(CondIsBlockCustomBlock.class, + "%blocks% (is|are) custom block(s)", + "%blocks% (is|are)(n't| not) custom block(s)"); + } + + private Expression blocks; + + @Override + public boolean check(Event event) { + return blocks.check(event, CraftEngineBlocks::isCustomBlock, isNegated()); + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return PropertyCondition.toString(this, PropertyCondition.PropertyType.BE, event, debug, blocks, "custom block"); + } + + @SuppressWarnings("unchecked") + @Override + public boolean init(Expression[] expressions, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) { + blocks = (Expression) expressions[0]; + setNegated(matchedPattern > 1); + return false; + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/EvtCustomBlock.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomBlock.java similarity index 95% rename from bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/EvtCustomBlock.java rename to bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomBlock.java index 5494b584f..8c7febf4f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/EvtCustomBlock.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/event/EvtCustomBlock.java @@ -1,4 +1,4 @@ -package net.momirealms.craftengine.bukkit.compatibility.skript; +package net.momirealms.craftengine.bukkit.compatibility.skript.event; import ch.njol.skript.Skript; import ch.njol.skript.lang.Literal; @@ -20,7 +20,7 @@ public class EvtCustomBlock extends SkriptEvent { public static void register() { Skript.registerEvent("Break Custom Block", EvtCustomBlock.class, CustomBlockBreakEvent.class, "[customblock] (break[ing]|1¦min(e|ing)) [[of] %-strings%]") .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, CustomBlockBreakEvent.class, "[customblock] (plac(e|ing)|build[ing]) [[of] %-strings%]") + Skript.registerEvent("Place Custom Block", EvtCustomBlock.class, CustomBlockPlaceEvent.class, "[customblock] (plac(e|ing)|build[ing]) [[of] %-strings%]") .description("Called when a player places a custom block."); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/expression/ExprBlockCustomBlockID.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/expression/ExprBlockCustomBlockID.java new file mode 100644 index 000000000..6916df6a5 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/expression/ExprBlockCustomBlockID.java @@ -0,0 +1,42 @@ +package net.momirealms.craftengine.bukkit.compatibility.skript.expression; + +import ch.njol.skript.expressions.base.SimplePropertyExpression; +import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks; +import net.momirealms.craftengine.core.block.CustomBlock; +import net.momirealms.craftengine.core.block.ImmutableBlockState; +import org.bukkit.block.Block; +import org.bukkit.block.data.BlockData; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; + +public class ExprBlockCustomBlockID extends SimplePropertyExpression { + + public static void register() { + register(ExprBlockCustomBlockID.class, String.class, "block[ ]custom block id", "blocks/blockdata/customblockstates"); + } + + @Override + public @Nullable String convert(Object object) { + System.out.println(object.getClass()); + if (object instanceof ImmutableBlockState immutableBlockState) + return immutableBlockState.owner().value().id().toString(); + if (object instanceof CustomBlock customBlock) + return customBlock.id().toString(); + if (object instanceof Block block) + return Optional.ofNullable(CraftEngineBlocks.getCustomBlockState(block)).map(it -> it.owner().value().id().toString()).orElse(null); + if (object instanceof BlockData blockData) + return Optional.ofNullable(CraftEngineBlocks.getCustomBlockState(blockData)).map(it -> it.owner().value().id().toString()).orElse(null); + return null; + } + + @Override + protected String getPropertyName() { + return "custom block id"; + } + + @Override + public Class getReturnType() { + return String.class; + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/expression/ExprBlockCustomBlockState.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/expression/ExprBlockCustomBlockState.java new file mode 100644 index 000000000..00ba7c6db --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/compatibility/skript/expression/ExprBlockCustomBlockState.java @@ -0,0 +1,38 @@ +package net.momirealms.craftengine.bukkit.compatibility.skript.expression; + +import ch.njol.skript.expressions.base.SimplePropertyExpression; +import net.momirealms.craftengine.bukkit.api.CraftEngineBlocks; +import net.momirealms.craftengine.core.block.CustomBlock; +import net.momirealms.craftengine.core.block.ImmutableBlockState; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.block.data.BlockData; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; + +public class ExprBlockCustomBlockState extends SimplePropertyExpression { + + public static void register() { + register(ExprBlockCustomBlockState.class, ImmutableBlockState.class, "block[ ]custom block state", "blocks/blockdata"); + } + + @Override + public @Nullable ImmutableBlockState convert(Object object) { + if (object instanceof Block block) + return CraftEngineBlocks.getCustomBlockState(block); + if (object instanceof BlockData blockData) + return CraftEngineBlocks.getCustomBlockState(blockData); + return null; + } + + @Override + protected String getPropertyName() { + return "custom block state"; + } + + @Override + public Class getReturnType() { + return ImmutableBlockState.class; + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java index 764474e18..1d9832b38 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java @@ -1,12 +1,17 @@ package net.momirealms.craftengine.bukkit.plugin; +import ch.njol.skript.Skript; import net.momirealms.antigrieflib.AntiGriefLib; import net.momirealms.craftengine.bukkit.advancement.BukkitAdvancementManager; import net.momirealms.craftengine.bukkit.api.event.CraftEngineReloadEvent; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.block.behavior.BukkitBlockBehaviors; import net.momirealms.craftengine.bukkit.compatibility.papi.PlaceholderAPIUtils; -import net.momirealms.craftengine.bukkit.compatibility.skript.EvtCustomBlock; +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.entity.furniture.BukkitFurnitureManager; import net.momirealms.craftengine.bukkit.entity.furniture.hitbox.BukkitHitBoxTypes; import net.momirealms.craftengine.bukkit.font.BukkitFontManager; @@ -168,7 +173,11 @@ public class BukkitCraftEngine extends CraftEngine { } // skript if (this.isPluginEnabled("Skript")) { + CraftEngineClasses.register(); EvtCustomBlock.register(); + CondIsBlockCustomBlock.register(); + ExprBlockCustomBlockID.register(); + ExprBlockCustomBlockState.register(); } }