9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-26 02:19:23 +00:00

fix(bukkit): 修复行为

This commit is contained in:
jhqwqmc
2025-06-22 21:04:57 +08:00
parent f6a042aea4
commit 18c9e339fe
4 changed files with 25 additions and 8 deletions

View File

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

View File

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

View File

@@ -39,7 +39,13 @@ public class PlaceBlockBehavior extends FacingTriggerableBlockBehavior {
public void tick(Object thisBlock, Object[] args, Callable<Object> 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<Object, Boolean> 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)) {

View File

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