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:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)));
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user