9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-30 12:29:15 +00:00

修复folia上初始化家具碰撞的问题

This commit is contained in:
XiaoMoMi
2025-06-20 00:18:56 +08:00
parent c069be10ae
commit 199d5f8157
7 changed files with 87 additions and 91 deletions

View File

@@ -267,18 +267,23 @@ public class DoorBlockBehavior extends AbstractCanSurviveBlockBehavior {
@Override
public boolean canSurvive(Object thisBlock, Object state, Object world, Object blockPos) throws Exception {
ImmutableBlockState immutableBlockState = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockStateToId(state));
if (immutableBlockState == null || immutableBlockState.isEmpty()) return false;
if (immutableBlockState.get(this.halfProperty) == DoubleBlockHalf.UPPER) return true;
ImmutableBlockState customBlockState = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockStateToId(state));
if (customBlockState == null || customBlockState.isEmpty()) return false;
int x = FastNMS.INSTANCE.field$Vec3i$x(blockPos);
int y = FastNMS.INSTANCE.field$Vec3i$y(blockPos) - 1;
int z = FastNMS.INSTANCE.field$Vec3i$z(blockPos);
Object targetPos = FastNMS.INSTANCE.constructor$BlockPos(x, y, z);
Object blockState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(world, targetPos);
return (boolean) CoreReflections.method$BlockStateBase$isFaceSturdy.invoke(
blockState, world, targetPos, CoreReflections.instance$Direction$UP,
CoreReflections.instance$SupportType$FULL
);
Object belowPos = FastNMS.INSTANCE.constructor$BlockPos(x, y, z);
Object belowState = FastNMS.INSTANCE.method$BlockGetter$getBlockState(world, belowPos);
if (customBlockState.get(this.halfProperty) == DoubleBlockHalf.UPPER) {
ImmutableBlockState belowCustomState = BukkitBlockManager.instance().getImmutableBlockState(BlockStateUtils.blockStateToId(belowState));
if (belowCustomState == null || belowCustomState.isEmpty()) return false;
return belowCustomState.owner().value() == super.customBlock;
} else {
return (boolean) CoreReflections.method$BlockStateBase$isFaceSturdy.invoke(
belowState, world, belowPos, CoreReflections.instance$Direction$UP,
CoreReflections.instance$SupportType$FULL
);
}
}
@SuppressWarnings("unchecked")

View File

@@ -266,12 +266,6 @@ public class BukkitFurnitureManager extends AbstractFurnitureManager {
}
public void handleCollisionEntityLoadOnEntitiesLoad(Entity collisionEntity) {
// faster
if (FastNMS.INSTANCE.method$CraftEntity$getHandle(collisionEntity) instanceof CollisionEntity) {
collisionEntity.remove();
return;
}
// not a collision entity
Byte flag = collisionEntity.getPersistentDataContainer().get(FURNITURE_COLLISION, PersistentDataType.BYTE);
if (flag == null || flag != 1) {

View File

@@ -197,6 +197,7 @@ public final class BlockGenerator {
public Object intercept(@This Object thisObj, @AllArguments Object[] args, @SuperCall Callable<Object> superMethod) {
ObjectHolder<BlockBehavior> holder = ((BehaviorHolder) thisObj).getBehaviorHolder();
ChainUpdateBlockIndicator indicator = (ChainUpdateBlockIndicator) thisObj;
// todo chain updater
if (indicator.isNoteBlock()) {
if (CoreReflections.clazz$ServerLevel.isInstance(args[levelIndex])) {
startNoteBlockChain(args);