Skip to content

Commit 1839d3c

Browse files
committed
fix: ghost mushroom attempt 5
Related to #336
1 parent 3eb1b5e commit 1839d3c

File tree

1 file changed

+32
-0
lines changed
  • c2me-rewrites-chunk-system/src/main/java/com/ishland/c2me/rewrites/chunksystem/common/statuses

1 file changed

+32
-0
lines changed

c2me-rewrites-chunk-system/src/main/java/com/ishland/c2me/rewrites/chunksystem/common/statuses/ServerAccessible.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,21 @@
1212
import com.ishland.c2me.rewrites.chunksystem.common.fapi.LifecycleEventInvoker;
1313
import com.ishland.flowsched.scheduler.ItemHolder;
1414
import com.ishland.flowsched.scheduler.KeyStatusPair;
15+
import it.unimi.dsi.fastutil.shorts.ShortList;
16+
import it.unimi.dsi.fastutil.shorts.ShortListIterator;
17+
import net.minecraft.block.BlockState;
18+
import net.minecraft.block.Blocks;
1519
import net.minecraft.entity.EntityType;
1620
import net.minecraft.nbt.NbtCompound;
1721
import net.minecraft.server.world.ChunkLevels;
1822
import net.minecraft.server.world.ServerChunkLoadingManager;
1923
import net.minecraft.server.world.ServerWorld;
24+
import net.minecraft.util.math.BlockPos;
2025
import net.minecraft.util.math.ChunkPos;
26+
import net.minecraft.world.ChunkRegion;
2127
import net.minecraft.world.chunk.Chunk;
28+
import net.minecraft.world.chunk.ChunkGenerationStep;
29+
import net.minecraft.world.chunk.ChunkGenerationSteps;
2230
import net.minecraft.world.chunk.ChunkStatus;
2331
import net.minecraft.world.chunk.ProtoChunk;
2432
import net.minecraft.world.chunk.WorldChunk;
@@ -55,6 +63,30 @@ public CompletionStage<Void> upgradeToThis(ChunkLoadingContext context) {
5563
final Chunk chunk = context.holder().getItem().get().chunk();
5664
Preconditions.checkState(chunk instanceof ProtoChunk, "Chunk must be a proto chunk");
5765
ProtoChunk protoChunk = (ProtoChunk) chunk;
66+
{
67+
ServerWorld serverWorld = ((IThreadedAnvilChunkStorage) context.tacs()).getWorld();
68+
ChunkRegion chunkRegion = new ChunkRegion(serverWorld, context.chunks(), ChunkGenerationSteps.GENERATION.get(ChunkStatus.FULL), chunk);
69+
70+
ChunkPos chunkPos = context.holder().getKey();
71+
72+
ShortList[] postProcessingLists = protoChunk.getPostProcessingLists();
73+
for (int i = 0; i < postProcessingLists.length; i++) {
74+
if (postProcessingLists[i] != null) {
75+
for (ShortListIterator iterator = postProcessingLists[i].iterator(); iterator.hasNext(); ) {
76+
short short_ = iterator.nextShort();
77+
BlockPos blockPos = ProtoChunk.joinBlockPos(short_, protoChunk.sectionIndexToCoord(i), chunkPos);
78+
BlockState blockState = protoChunk.getBlockState(blockPos);
79+
80+
if (blockState.getBlock() == Blocks.BROWN_MUSHROOM || blockState.getBlock() == Blocks.RED_MUSHROOM) {
81+
if (!blockState.canPlaceAt(chunkRegion, blockPos)) {
82+
protoChunk.setBlockState(blockPos, Blocks.AIR.getDefaultState(), false); // TODO depends on the fact that the chunk system always locks the current chunk
83+
}
84+
}
85+
}
86+
}
87+
}
88+
}
89+
5890
return CompletableFuture.runAsync(() -> {
5991
ServerWorld serverWorld = ((IThreadedAnvilChunkStorage) context.tacs()).getWorld();
6092
final WorldChunk worldChunk = toFullChunk(protoChunk, serverWorld);

0 commit comments

Comments
 (0)