diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FacingTriggerableBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FacingTriggerableBlockBehavior.java index 3079daa42..b512c5f24 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FacingTriggerableBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/FacingTriggerableBlockBehavior.java @@ -31,7 +31,8 @@ public abstract class FacingTriggerableBlockBehavior extends BukkitBlockBehavior if (blockState == null || blockState.isEmpty()) return; boolean triggeredValue = blockState.get(this.triggeredProperty); if (hasNeighborSignal && !triggeredValue) { - FastNMS.INSTANCE.method$LevelAccessor$scheduleBlockTick(level, pos, thisBlock, 1, this.getTickPriority()); + // FastNMS.INSTANCE.method$LevelAccessor$scheduleBlockTick(level, pos, thisBlock, 1, this.getTickPriority()); // 鬼知道为什么这个无法触发 tick + tick(state, level, pos); FastNMS.INSTANCE.method$LevelWriter$setBlock(level, pos, blockState.with(this.triggeredProperty, true).customBlockState().handle(), 2); } else if (!hasNeighborSignal && triggeredValue) { FastNMS.INSTANCE.method$LevelWriter$setBlock(level, pos, blockState.with(this.triggeredProperty, false).customBlockState().handle(), 2); @@ -44,4 +45,6 @@ public abstract class FacingTriggerableBlockBehavior extends BukkitBlockBehavior } protected abstract Object getTickPriority(); + + protected abstract void tick(Object state, Object level, Object pos); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PickaxeBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PickaxeBlockBehavior.java index 8e40c8025..301cbd217 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PickaxeBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PickaxeBlockBehavior.java @@ -10,6 +10,7 @@ import net.momirealms.craftengine.core.block.CustomBlock; import net.momirealms.craftengine.core.block.ImmutableBlockState; import net.momirealms.craftengine.core.block.behavior.BlockBehaviorFactory; import net.momirealms.craftengine.core.block.properties.Property; +import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.util.Direction; import net.momirealms.craftengine.core.util.ResourceConfigUtils; @@ -30,9 +31,15 @@ public class PickaxeBlockBehavior extends FacingTriggerableBlockBehavior { @Override public void tick(Object thisBlock, Object[] args, Callable superMethod) throws Exception { + CraftEngine.instance().logger().warn("PickaxeBlockBehavior.tick"); Object state = args[0]; Object level = args[1]; Object pos = args[2]; + tick(state, level, pos); + } + + @Override + public void tick(Object state, Object level, Object pos) { ImmutableBlockState blockState = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockStateToId(state)); if (blockState == null || blockState.isEmpty()) return; Object blockPos = FastNMS.INSTANCE.method$BlockPos$relative(pos, DirectionUtils.toNMSDirection(blockState.get(this.facingProperty))); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PlaceBlockBehavior.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PlaceBlockBehavior.java index 0f2944a7c..7b55beec3 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PlaceBlockBehavior.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/behavior/PlaceBlockBehavior.java @@ -39,7 +39,13 @@ public class PlaceBlockBehavior extends FacingTriggerableBlockBehavior { public void tick(Object thisBlock, Object[] args, Callable superMethod) throws Exception { Object state = args[0]; Object level = args[1]; - BlockPos pos = LocationUtils.fromBlockPos(args[2]); + Object pos = args[2]; + tick(state, level, pos); + } + + @Override + public void tick(Object state, Object level, Object nmsBlockPos) { + BlockPos pos = LocationUtils.fromBlockPos(nmsBlockPos); ImmutableBlockState blockState = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockStateToId(state)); if (blockState == null || blockState.isEmpty()) return; Direction direction = blockState.get(this.facingProperty); @@ -50,11 +56,11 @@ public class PlaceBlockBehavior extends FacingTriggerableBlockBehavior { if (FastNMS.INSTANCE.method$ItemStack$isEmpty(itemStack)) { return false; } else { - Object itemStack1 = FastNMS.INSTANCE.method$ItemEntity$getItem(itemStack); + Object itemStack1 = FastNMS.INSTANCE.method$ItemStack$getItem(itemStack); boolean flag = CoreReflections.clazz$BlockItem.isInstance(itemStack1) && FastNMS.INSTANCE.method$InteractionResult$consumesAction(FastNMS.INSTANCE.method$BlockItem$place( - itemStack1, FastNMS.INSTANCE.constructor$PlaceBlockBlockPlaceContext( - level, CoreReflections.instance$InteractionHand$MAIN_HAND, itemStack, + itemStack1, FastNMS.INSTANCE.constructor$PlaceBlockBlockPlaceContext( + level, CoreReflections.instance$InteractionHand$MAIN_HAND, itemStack, FastNMS.INSTANCE.constructor$BlockHitResult( FastNMS.INSTANCE.method$BlockPos$getCenter(LocationUtils.toBlockPos(blockPos1)), DirectionUtils.toNMSDirection(opposite), @@ -75,11 +81,12 @@ public class PlaceBlockBehavior extends FacingTriggerableBlockBehavior { return true; } }); + } private static boolean getItemAndDoThings(Object level, BlockPos blockPos, Direction direction, Function function) { for (Object container : getContainersAt(level, blockPos)) { - boolean flag = FastNMS.INSTANCE.method$HopperBlockEntity$getSlots(container, direction).anyMatch(i -> { + boolean flag = FastNMS.INSTANCE.method$HopperBlockEntity$getSlots(container, DirectionUtils.toNMSDirection(direction)).anyMatch(i -> { Object itemStack = FastNMS.INSTANCE.method$Container$removeItem(container, i, 1); if (!FastNMS.INSTANCE.method$ItemStack$isEmpty(itemStack)) { boolean flag1 = function.apply(FastNMS.INSTANCE.method$ItemStack$copy(itemStack)); @@ -98,7 +105,7 @@ public class PlaceBlockBehavior extends FacingTriggerableBlockBehavior { return true; } } - Object itemAt = getItemAt(level, blockPos); + Object itemAt = getItemAt(level, LocationUtils.toBlockPos(blockPos)); if (itemAt != null) { Object item = FastNMS.INSTANCE.method$ItemEntity$getItem(itemAt); if (!FastNMS.INSTANCE.method$ItemStack$isEmpty(item)) { diff --git a/gradle.properties b/gradle.properties index b75d9d182..f7d0b6556 100644 --- a/gradle.properties +++ b/gradle.properties @@ -51,7 +51,7 @@ byte_buddy_version=1.17.5 ahocorasick_version=0.6.3 snake_yaml_version=2.4 anti_grief_version=0.17 -nms_helper_version=0.67.35 +nms_helper_version=0.67.36 evalex_version=3.5.0 reactive_streams_version=1.0.4 amazon_awssdk_version=2.31.23