From ba765fb4a4e855f3f84bd5f485b765ef83ff139d Mon Sep 17 00:00:00 2001 From: Steveplays28 Date: Mon, 29 Apr 2024 23:31:32 +0200 Subject: [PATCH] fix: Fix crash with Ad Astra and other dimension mods This code is also slightly faster and more concise, since it's no longer creating an array, but instead using the chunk sections array provided by the chunk. --- .../noisium/mixin/NoiseChunkGeneratorMixin.java | 13 ++++--------- .../lithium/LithiumNoiseChunkGeneratorMixin.java | 13 ++++--------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/common/src/main/java/io/github/steveplays28/noisium/mixin/NoiseChunkGeneratorMixin.java b/common/src/main/java/io/github/steveplays28/noisium/mixin/NoiseChunkGeneratorMixin.java index 869e72e..338ae84 100644 --- a/common/src/main/java/io/github/steveplays28/noisium/mixin/NoiseChunkGeneratorMixin.java +++ b/common/src/main/java/io/github/steveplays28/noisium/mixin/NoiseChunkGeneratorMixin.java @@ -51,16 +51,11 @@ public NoiseChunkGeneratorMixin(BiomeSource biomeSource) { return blockState; } - @SuppressWarnings("ForLoopReplaceableByForEach") @Inject(method = "populateNoise(Ljava/util/concurrent/Executor;Lnet/minecraft/world/gen/chunk/Blender;Lnet/minecraft/world/gen/noise/NoiseConfig;Lnet/minecraft/world/gen/StructureAccessor;Lnet/minecraft/world/chunk/Chunk;)Ljava/util/concurrent/CompletableFuture;", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/chunk/Chunk;getSectionIndex(I)I", ordinal = 1), cancellable = true) private void noisium$populateNoiseInject(Executor executor, Blender blender, NoiseConfig noiseConfig, StructureAccessor structureAccessor, Chunk chunk, CallbackInfoReturnable> cir, @Local(ordinal = 1) int minimumYFloorDiv, @Local(ordinal = 2) int generationShapeHeightFloorDiv, @Local(ordinal = 3) int startingChunkSectionIndex, @Local(ordinal = 4) int minimumYChunkSectionIndex) { - ChunkSection[] chunkSections = new ChunkSection[startingChunkSectionIndex - minimumYChunkSectionIndex + 1]; - + var chunkSections = chunk.getSectionArray(); for (int chunkSectionIndex = startingChunkSectionIndex; chunkSectionIndex >= minimumYChunkSectionIndex; --chunkSectionIndex) { - ChunkSection chunkSection = chunk.getSection(chunkSectionIndex); - - chunkSection.lock(); - chunkSections[chunkSectionIndex] = chunkSection; + chunkSections[chunkSectionIndex].lock(); } cir.setReturnValue(CompletableFuture.supplyAsync( @@ -71,8 +66,8 @@ public NoiseChunkGeneratorMixin(BiomeSource biomeSource) { ) ), Util.getMainWorkerExecutor()).whenCompleteAsync((chunk2, throwable) -> { // Replace an enhanced for loop with a fori loop - for (int i = 0; i < chunkSections.length; i++) { - chunkSections[i].unlock(); + for (int chunkSectionIndex = startingChunkSectionIndex; chunkSectionIndex >= minimumYChunkSectionIndex; --chunkSectionIndex) { + chunkSections[chunkSectionIndex].unlock(); } }, executor)); } diff --git a/common/src/main/java/io/github/steveplays28/noisium/mixin/compat/lithium/LithiumNoiseChunkGeneratorMixin.java b/common/src/main/java/io/github/steveplays28/noisium/mixin/compat/lithium/LithiumNoiseChunkGeneratorMixin.java index aa78fc2..4ffa20e 100644 --- a/common/src/main/java/io/github/steveplays28/noisium/mixin/compat/lithium/LithiumNoiseChunkGeneratorMixin.java +++ b/common/src/main/java/io/github/steveplays28/noisium/mixin/compat/lithium/LithiumNoiseChunkGeneratorMixin.java @@ -42,16 +42,11 @@ public LithiumNoiseChunkGeneratorMixin(BiomeSource biomeSource) { return blockState; } - @SuppressWarnings("ForLoopReplaceableByForEach") @Inject(method = "populateNoise(Ljava/util/concurrent/Executor;Lnet/minecraft/world/gen/chunk/Blender;Lnet/minecraft/world/gen/noise/NoiseConfig;Lnet/minecraft/world/gen/StructureAccessor;Lnet/minecraft/world/chunk/Chunk;)Ljava/util/concurrent/CompletableFuture;", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/chunk/Chunk;getSectionIndex(I)I", ordinal = 1), cancellable = true) private void noisium$populateNoiseInject(Executor executor, Blender blender, NoiseConfig noiseConfig, StructureAccessor structureAccessor, Chunk chunk, CallbackInfoReturnable> cir, @Local(ordinal = 1) int minimumYFloorDiv, @Local(ordinal = 2) int generationShapeHeightFloorDiv, @Local(ordinal = 3) int startingChunkSectionIndex, @Local(ordinal = 4) int minimumYChunkSectionIndex) { - ChunkSection[] chunkSections = new ChunkSection[startingChunkSectionIndex - minimumYChunkSectionIndex + 1]; - + var chunkSections = chunk.getSectionArray(); for (int chunkSectionIndex = startingChunkSectionIndex; chunkSectionIndex >= minimumYChunkSectionIndex; --chunkSectionIndex) { - ChunkSection chunkSection = chunk.getSection(chunkSectionIndex); - - chunkSection.lock(); - chunkSections[chunkSectionIndex] = chunkSection; + chunkSections[chunkSectionIndex].lock(); } cir.setReturnValue(CompletableFuture.supplyAsync( @@ -63,8 +58,8 @@ public LithiumNoiseChunkGeneratorMixin(BiomeSource biomeSource) { ), Util.getMainWorkerExecutor()).whenCompleteAsync((chunk2, throwable) -> { // Replace an enhanced for loop with a fori loop // Also run calculateCounts() on every chunk section to add Lithium compatibility - for (int i = 0; i < chunkSections.length; i++) { - var chunkSection = chunkSections[i]; + for (int chunkSectionIndex = startingChunkSectionIndex; chunkSectionIndex >= minimumYChunkSectionIndex; --chunkSectionIndex) { + var chunkSection = chunkSections[chunkSectionIndex]; chunkSection.calculateCounts(); chunkSection.unlock();