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

fix number argument

This commit is contained in:
XiaoMoMi
2025-03-23 23:32:29 +08:00
parent 1b2936d53e
commit 0c4a0a4e3d
8 changed files with 50 additions and 12 deletions

View File

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

View File

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

View File

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

View File

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