9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-30 20:39:10 +00:00

好玩哦

This commit is contained in:
XiaoMoMi
2025-04-25 04:55:08 +08:00
parent bee4ed2767
commit a381b425d7
7 changed files with 169 additions and 3 deletions

View File

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

View File

@@ -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<Block> 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<Block>) expressions[0];
setNegated(matchedPattern > 1);
return false;
}
}

View File

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

View File

@@ -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<Object, String> {
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<? extends String> getReturnType() {
return String.class;
}
}

View File

@@ -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<Object, ImmutableBlockState> {
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<? extends ImmutableBlockState> getReturnType() {
return ImmutableBlockState.class;
}
}

View File

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