|
12 | 12 | import net.minecraft.world.level.Level;
|
13 | 13 | import net.minecraft.world.level.LevelHeightAccessor;
|
14 | 14 | import net.minecraft.world.level.biome.Biome;
|
| 15 | +import net.minecraft.world.level.block.BaseRailBlock; |
15 | 16 | import net.minecraft.world.level.block.Block;
|
16 | 17 | import net.minecraft.world.level.block.EntityBlock;
|
17 | 18 | import net.minecraft.world.level.block.entity.BlockEntity;
|
@@ -81,7 +82,7 @@ private BlockEntity ifGetBlockEntity(LevelChunk worldChunk, BlockPos blockPos_1,
|
81 | 82 | public BlockState setBlockStateWithBlockEntity(BlockPos blockPos_1, BlockState newBlockState, BlockEntity newBlockEntity,
|
82 | 83 | int flags)
|
83 | 84 | {
|
84 |
| - boolean boolean_1 = (flags & 64) != 0; |
| 85 | + |
85 | 86 | int y = blockPos_1.getY();
|
86 | 87 |
|
87 | 88 | LevelChunkSection chunkSection = this.getSection(this.getSectionIndex(y));
|
@@ -122,37 +123,35 @@ public BlockState setBlockStateWithBlockEntity(BlockPos blockPos_1, BlockState n
|
122 | 123 | profiler.pop();
|
123 | 124 | }
|
124 | 125 |
|
125 |
| - boolean hadBlockEntity = oldBlockState.hasBlockEntity(); |
126 | 126 | boolean blockChanged = !oldBlockState.is(newBlock);
|
127 |
| - |
| 127 | + boolean boolean_1 = (flags & 64) != 0; // moved by pistons |
128 | 128 | boolean sideEffects = (flags & Block.UPDATE_SKIP_BLOCK_ENTITY_SIDEEFFECTS) == 0;
|
129 | 129 |
|
130 |
| - if (blockChanged) { |
| 130 | + if (blockChanged && oldBlockState.hasBlockEntity()) { |
131 | 131 | if (level instanceof ServerLevel serverLevel && !(oldBlockState.getBlock() instanceof MovingPistonBlock)) {
|
132 |
| - if (hadBlockEntity && sideEffects) { |
133 |
| - final BlockEntity blockEntity = level.getBlockEntity(blockPos_1); |
| 132 | + if (sideEffects) { |
| 133 | + BlockEntity blockEntity = level.getBlockEntity(blockPos_1); |
134 | 134 | if (blockEntity != null) {
|
135 |
| - blockEntity.preRemoveSideEffects(blockPos_1, oldBlockState, boolean_1); |
| 135 | + blockEntity.preRemoveSideEffects(blockPos_1, oldBlockState); |
136 | 136 | }
|
137 | 137 | }
|
| 138 | + } |
| 139 | + removeBlockEntity(blockPos_1); |
| 140 | + } |
138 | 141 |
|
139 |
| - if (hadBlockEntity) { |
140 |
| - removeBlockEntity(blockPos_1); |
141 |
| - } |
142 |
| - if ((flags & Block.UPDATE_NEIGHBORS) != 0) { // scary change // so many other places that used to call this regardless if the UPDATE_NEIGHBORS flag was set |
| 142 | + if (blockChanged || newBlock instanceof BaseRailBlock) |
| 143 | + { |
| 144 | + if (level instanceof ServerLevel serverLevel && !(oldBlockState.getBlock() instanceof MovingPistonBlock)) |
| 145 | + { |
| 146 | + if ((flags & Block.UPDATE_NEIGHBORS) != 0 || boolean_1) |
| 147 | + { |
143 | 148 | oldBlockState.affectNeighborsAfterRemoval(serverLevel, blockPos_1, boolean_1);
|
144 | 149 | }
|
145 |
| - } else if (hadBlockEntity) { |
146 |
| - removeBlockEntity(blockPos_1); |
147 | 150 | }
|
148 | 151 | }
|
149 | 152 |
|
150 | 153 |
|
151 |
| - |
152 |
| - |
153 |
| - |
154 |
| - |
155 |
| - if (chunkSection.getBlockState(x, chunkY, z).getBlock() != newBlock) |
| 154 | + if (chunkSection.getBlockState(x, chunkY, z).getBlock() != newBlock) |
156 | 155 | {
|
157 | 156 | return null;
|
158 | 157 | }
|
|
0 commit comments