mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-27 02:49:15 +00:00
fix number argument
This commit is contained in:
@@ -100,7 +100,7 @@ resource-pack:
|
||||
path: "pack.mcmeta"
|
||||
resolution:
|
||||
type: merge_pack_mcmeta
|
||||
description: "<gray>CraftEngine ResourcePack"
|
||||
description: "<gray>CraftEngine ResourcePack</gray>"
|
||||
- term:
|
||||
type: exact
|
||||
path: "pack.png"
|
||||
|
||||
@@ -11,6 +11,7 @@ public class BukkitBlockBehaviors extends BlockBehaviors {
|
||||
public static final Key STRIPPABLE_BLOCK = Key.from("craftengine:strippable_block");
|
||||
public static final Key SAPLING_BLOCK = Key.from("craftengine:sapling_block");
|
||||
public static final Key ON_LIQUID_BLOCK = Key.from("craftengine:on_liquid_block");
|
||||
public static final Key CONCRETE_POWDER_BLOCK = Key.from("craftengine:concrete_powder_block");
|
||||
|
||||
public static void init() {
|
||||
register(EMPTY, (block, args) -> EmptyBlockBehavior.INSTANCE);
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package net.momirealms.craftengine.bukkit.block.behavior;
|
||||
|
||||
public class ConcretePowderBlockBehavior extends FallingBlockBehavior {
|
||||
|
||||
public ConcretePowderBlockBehavior(float hurtAmount, int maxHurt) {
|
||||
super(hurtAmount, maxHurt);
|
||||
}
|
||||
}
|
||||
@@ -77,7 +77,7 @@ public class FallingBlockBehavior extends BlockBehavior {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBrokenAfterFall(Object thisBlock, Object[] args, Callable<Object> superMethod) throws Exception {
|
||||
public void onBrokenAfterFall(Object thisBlock, Object[] args) throws Exception {
|
||||
// Use EntityRemoveEvent for 1.20.3+
|
||||
if (VersionHelper.isVersionNewerThan1_20_3()) return;
|
||||
Object level = args[0];
|
||||
|
||||
@@ -228,6 +228,15 @@ public class BukkitInjector {
|
||||
.and(ElementMatchers.takesArgument(2, Reflections.clazz$FallingBlockEntity))
|
||||
)
|
||||
.intercept(MethodDelegation.to(OnBrokenAfterFallInterceptor.INSTANCE))
|
||||
// onLand
|
||||
.method(ElementMatchers.takesArguments(5)
|
||||
.and(ElementMatchers.takesArgument(0, Reflections.clazz$Level))
|
||||
.and(ElementMatchers.takesArgument(1, Reflections.clazz$BlockPos))
|
||||
.and(ElementMatchers.takesArgument(2, Reflections.clazz$BlockState))
|
||||
.and(ElementMatchers.takesArgument(3, Reflections.clazz$BlockState))
|
||||
.and(ElementMatchers.takesArgument(4, Reflections.clazz$FallingBlockEntity))
|
||||
)
|
||||
.intercept(MethodDelegation.to(OnLandInterceptor.INSTANCE))
|
||||
// canSurvive
|
||||
.method(ElementMatchers.takesArguments(3)
|
||||
.and(ElementMatchers.takesArgument(0, Reflections.clazz$BlockState))
|
||||
@@ -754,14 +763,28 @@ public class BukkitInjector {
|
||||
}
|
||||
}
|
||||
|
||||
public static class OnLandInterceptor {
|
||||
public static final OnLandInterceptor INSTANCE = new OnLandInterceptor();
|
||||
|
||||
@RuntimeType
|
||||
public void intercept(@This Object thisObj, @AllArguments Object[] args) {
|
||||
ObjectHolder<BlockBehavior> holder = ((BehaviorHolder) thisObj).getBehaviorHolder();
|
||||
try {
|
||||
holder.value().onLand(thisObj, args);
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().severe("Failed to run onLand", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class OnBrokenAfterFallInterceptor {
|
||||
public static final OnBrokenAfterFallInterceptor INSTANCE = new OnBrokenAfterFallInterceptor();
|
||||
|
||||
@RuntimeType
|
||||
public void intercept(@This Object thisObj, @AllArguments Object[] args, @SuperCall Callable<Object> superMethod) {
|
||||
public void intercept(@This Object thisObj, @AllArguments Object[] args) {
|
||||
ObjectHolder<BlockBehavior> holder = ((BehaviorHolder) thisObj).getBehaviorHolder();
|
||||
try {
|
||||
holder.value().onBrokenAfterFall(thisObj, args, superMethod);
|
||||
holder.value().onBrokenAfterFall(thisObj, args);
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().severe("Failed to run onBrokenAfterFall", e);
|
||||
}
|
||||
|
||||
@@ -217,6 +217,8 @@ public class TemplateManagerImpl implements TemplateManager {
|
||||
} else if (rawArgument == null) {
|
||||
// 使用 null 覆写其父参数内容
|
||||
result.put(placeholder, NullTemplateArgument.INSTANCE);
|
||||
} else if (rawArgument instanceof Number number) {
|
||||
result.put(placeholder, new ObjectTemplateArgument(number));
|
||||
} else {
|
||||
// 将参数字符串化后,应用参数再放入
|
||||
Object applied = applyArgument(rawArgument.toString(), parentArguments);
|
||||
|
||||
@@ -107,10 +107,7 @@ public class CraftEngineBlock extends Block implements BehaviorHolder, ShapeHold
|
||||
@Override
|
||||
public void onBrokenAfterFall(@NotNull Level level, @NotNull BlockPos pos, @NotNull FallingBlockEntity fallingBlock) {
|
||||
try {
|
||||
behaviorHolder.value().onBrokenAfterFall(this, new Object[]{level, pos, fallingBlock}, () -> {
|
||||
Fallable.super.onBrokenAfterFall(level, pos, fallingBlock);
|
||||
return null;
|
||||
});
|
||||
behaviorHolder.value().onBrokenAfterFall(this, new Object[]{level, pos, fallingBlock});
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
Fallable.super.onBrokenAfterFall(level, pos, fallingBlock);
|
||||
@@ -209,4 +206,13 @@ public class CraftEngineBlock extends Block implements BehaviorHolder, ShapeHold
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLand(@NotNull Level level, @NotNull BlockPos pos, @NotNull BlockState state, @NotNull BlockState replaceableState, @NotNull FallingBlockEntity fallingBlock) {
|
||||
try {
|
||||
behaviorHolder.value().onLand(this, new Object[]{level, pos, state, replaceableState, fallingBlock});
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,12 +28,10 @@ public abstract class BlockBehavior {
|
||||
return (boolean) superMethod.call();
|
||||
}
|
||||
|
||||
public void onBrokenAfterFall(Object thisBlock, Object[] args, Callable<Object> superMethod) throws Exception {
|
||||
superMethod.call();
|
||||
public void onBrokenAfterFall(Object thisBlock, Object[] args) throws Exception {
|
||||
}
|
||||
|
||||
public void onLand(Object thisBlock, Object[] args, Callable<Object> superMethod) throws Exception {
|
||||
superMethod.call();
|
||||
public void onLand(Object thisBlock, Object[] args) throws Exception {
|
||||
}
|
||||
|
||||
public boolean isValidBoneMealTarget(Object thisBlock, Object[] args) throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user