mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-22 16:39:28 +00:00
添加skript家具方法
This commit is contained in:
@@ -1,20 +1,28 @@
|
|||||||
package net.momirealms.craftengine.bukkit.compatibility.skript;
|
package net.momirealms.craftengine.bukkit.compatibility.skript;
|
||||||
|
|
||||||
import net.momirealms.craftengine.bukkit.compatibility.skript.clazz.CraftEngineClasses;
|
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.condition.CondIsCustomBlock;
|
||||||
|
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.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.EvtCustomBlock;
|
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.ExprBlockCustomBlockID;
|
||||||
import net.momirealms.craftengine.bukkit.compatibility.skript.expression.ExprBlockCustomBlockState;
|
import net.momirealms.craftengine.bukkit.compatibility.skript.expression.ExprBlockCustomBlockState;
|
||||||
|
import net.momirealms.craftengine.bukkit.compatibility.skript.expression.ExprEntityFurnitureID;
|
||||||
|
|
||||||
public class SkriptHook {
|
public class SkriptHook {
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
CraftEngineClasses.register();
|
CraftEngineClasses.register();
|
||||||
EvtCustomBlock.register();
|
EvtCustomBlock.register();
|
||||||
CondIsBlockCustomBlock.register();
|
CondIsCustomBlock.register();
|
||||||
|
CondIsFurniture.register();
|
||||||
ExprBlockCustomBlockID.register();
|
ExprBlockCustomBlockID.register();
|
||||||
ExprBlockCustomBlockState.register();
|
ExprBlockCustomBlockState.register();
|
||||||
|
ExprEntityFurnitureID.register();
|
||||||
EffPlaceCustomBlock.register();
|
EffPlaceCustomBlock.register();
|
||||||
|
EffPlaceFurniture.register();
|
||||||
|
EffRemoveFurniture.register();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ import org.bukkit.block.Block;
|
|||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public class CondIsBlockCustomBlock extends Condition {
|
public class CondIsCustomBlock extends Condition {
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
Skript.registerCondition(CondIsBlockCustomBlock.class,
|
Skript.registerCondition(CondIsCustomBlock.class,
|
||||||
"%blocks% (is|are) custom block(s)",
|
"%blocks% (is|are) custom block(s)",
|
||||||
"%blocks% (is|are)(n't| not) custom block(s)");
|
"%blocks% (is|are)(n't| not) custom block(s)");
|
||||||
}
|
}
|
||||||
@@ -36,6 +36,6 @@ public class CondIsBlockCustomBlock extends Condition {
|
|||||||
public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
|
public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
|
||||||
blocks = (Expression<Block>) expressions[0];
|
blocks = (Expression<Block>) expressions[0];
|
||||||
setNegated(matchedPattern > 1);
|
setNegated(matchedPattern > 1);
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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.CraftEngineFurniture;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
public class CondIsFurniture extends Condition {
|
||||||
|
|
||||||
|
public static void register() {
|
||||||
|
Skript.registerCondition(CondIsFurniture.class,
|
||||||
|
"%entities% (is|are) furniture",
|
||||||
|
"%entities% (is|are)(n't| not) furniture");
|
||||||
|
}
|
||||||
|
|
||||||
|
private Expression<Entity> entities;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean check(Event event) {
|
||||||
|
return entities.check(event, CraftEngineFurniture::isFurniture, isNegated());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(@Nullable Event event, boolean debug) {
|
||||||
|
return PropertyCondition.toString(this, PropertyCondition.PropertyType.BE, event, debug, entities, "furniture");
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
|
||||||
|
entities = (Expression<Entity>) expressions[0];
|
||||||
|
setNegated(matchedPattern > 1);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -33,7 +33,7 @@ public class EffPlaceCustomBlock extends Effect {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString(@Nullable Event event, boolean debug) {
|
public String toString(@Nullable Event event, boolean debug) {
|
||||||
return "place " + blocks.toString(event, debug) + " " + locations.toString(event, debug);
|
return "place custom block " + blocks.toString(event, debug) + " " + locations.toString(event, debug);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
|||||||
@@ -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.CraftEngineFurniture;
|
||||||
|
import net.momirealms.craftengine.core.util.Key;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
public class EffPlaceFurniture extends Effect {
|
||||||
|
|
||||||
|
public static void register() {
|
||||||
|
Skript.registerEffect(EffPlaceFurniture.class, "place furniture %strings% [%directions% %locations%]");
|
||||||
|
}
|
||||||
|
|
||||||
|
private Expression<String> furniture;
|
||||||
|
private Expression<Location> locations;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void execute(Event e) {
|
||||||
|
String[] os = furniture.getArray(e);
|
||||||
|
for (Location l : locations.getArray(e)) {
|
||||||
|
for (String o : os) {
|
||||||
|
CraftEngineFurniture.place(l, Key.of(o));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(@Nullable Event event, boolean debug) {
|
||||||
|
return "place furniture " + furniture.toString(event, debug) + " " + locations.toString(event, debug);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
|
||||||
|
furniture = (Expression<String>) expressions[0];
|
||||||
|
locations = Direction.combine((Expression<? extends Direction>) expressions[1], (Expression<? extends Location>) expressions[2]);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
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.CraftEngineFurniture;
|
||||||
|
import net.momirealms.craftengine.bukkit.entity.furniture.LoadedFurniture;
|
||||||
|
import net.momirealms.craftengine.core.util.Key;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
public class EffRemoveFurniture extends Effect {
|
||||||
|
|
||||||
|
public static void register() {
|
||||||
|
Skript.registerEffect(EffRemoveFurniture.class, "remove furniture %entities%");
|
||||||
|
}
|
||||||
|
|
||||||
|
private Expression<Entity> entities;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void execute(Event e) {
|
||||||
|
for (Entity entity : entities.getArray(e)) {
|
||||||
|
if (CraftEngineFurniture.isFurniture(entity)) {
|
||||||
|
LoadedFurniture loadedFurniture = CraftEngineFurniture.getLoadedFurnitureByBaseEntity(entity);
|
||||||
|
if (loadedFurniture != null) {
|
||||||
|
loadedFurniture.destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(@Nullable Event event, boolean debug) {
|
||||||
|
return "remove furniture " + entities.toString(event, debug);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
@Override
|
||||||
|
public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean isDelayed, SkriptParser.ParseResult parseResult) {
|
||||||
|
this.entities = (Expression<Entity>) expressions[0];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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.bukkit.api.CraftEngineFurniture;
|
||||||
|
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.bukkit.entity.Entity;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class ExprEntityFurnitureID extends SimplePropertyExpression<Object, String> {
|
||||||
|
|
||||||
|
public static void register() {
|
||||||
|
register(ExprEntityFurnitureID.class, String.class, "entity[ ]furniture id", "entities");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable String convert(Object object) {
|
||||||
|
if (object instanceof Entity entity && CraftEngineFurniture.isFurniture(entity))
|
||||||
|
return Objects.requireNonNull(CraftEngineFurniture.getLoadedFurnitureByBaseEntity(entity)).id().toString();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getPropertyName() {
|
||||||
|
return "furniture id";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<? extends String> getReturnType() {
|
||||||
|
return String.class;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -25,7 +25,7 @@ public class WorldEditBlockRegister {
|
|||||||
private final boolean isFAWE;
|
private final boolean isFAWE;
|
||||||
|
|
||||||
public WorldEditBlockRegister(AbstractBlockManager manager, boolean isFAWE) {
|
public WorldEditBlockRegister(AbstractBlockManager manager, boolean isFAWE) {
|
||||||
field$BlockType$blockMaterial = ReflectionUtils.getDeclaredField(BlockType.class, "blockMaterial");
|
this.field$BlockType$blockMaterial = ReflectionUtils.getDeclaredField(BlockType.class, "blockMaterial");
|
||||||
this.manager = manager;
|
this.manager = manager;
|
||||||
this.isFAWE = isFAWE;
|
this.isFAWE = isFAWE;
|
||||||
CEBlockParser blockParser = new CEBlockParser(WorldEdit.getInstance());
|
CEBlockParser blockParser = new CEBlockParser(WorldEdit.getInstance());
|
||||||
@@ -34,7 +34,7 @@ public class WorldEditBlockRegister {
|
|||||||
|
|
||||||
public void register(Key id) throws ReflectiveOperationException {
|
public void register(Key id) throws ReflectiveOperationException {
|
||||||
BlockType blockType = new BlockType(id.toString(), blockState -> blockState);
|
BlockType blockType = new BlockType(id.toString(), blockState -> blockState);
|
||||||
field$BlockType$blockMaterial.set(blockType, LazyReference.from(() -> new BukkitBlockRegistry.BukkitBlockMaterial(null, Material.STONE)));
|
this.field$BlockType$blockMaterial.set(blockType, LazyReference.from(() -> new BukkitBlockRegistry.BukkitBlockMaterial(null, Material.STONE)));
|
||||||
BlockType.REGISTRY.register(id.toString(), blockType);
|
BlockType.REGISTRY.register(id.toString(), blockType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package net.momirealms.craftengine.bukkit.api;
|
||||||
|
|
||||||
|
import net.momirealms.craftengine.bukkit.entity.BukkitEntity;
|
||||||
|
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||||
|
import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer;
|
||||||
|
import net.momirealms.craftengine.bukkit.world.BukkitWorld;
|
||||||
|
import net.momirealms.craftengine.bukkit.world.BukkitWorldBlock;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public final class BukkitAdaptors {
|
||||||
|
|
||||||
|
private BukkitAdaptors() {}
|
||||||
|
|
||||||
|
public static BukkitServerPlayer adapt(final Player player) {
|
||||||
|
return BukkitCraftEngine.instance().adapt(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BukkitWorld adapt(final World world) {
|
||||||
|
return new BukkitWorld(world);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BukkitEntity adapt(final Entity entity) {
|
||||||
|
return new BukkitEntity(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BukkitWorldBlock adapt(final Block block) {
|
||||||
|
return new BukkitWorldBlock(block);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user