From 53a1c6c8c95601902999c5f59bec609b4d84d771 Mon Sep 17 00:00:00 2001 From: Chris Sanders Date: Sun, 4 Aug 2019 11:51:45 -0500 Subject: [PATCH] Fix mod incompatibility with mods that redirect generateChunk. Since NotEnoughIDs isn't changing generateChunk and, instead, is only changing the biome array, we can safely inject afterwards. Addresses incompatibility with SpongeForge. Signed-off-by: Chris Sanders --- .../jeid/mixin/core/MixinChunkProviderServer.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/dimdev/jeid/mixin/core/MixinChunkProviderServer.java b/src/main/java/org/dimdev/jeid/mixin/core/MixinChunkProviderServer.java index 5d92e6f..fcbad9c 100644 --- a/src/main/java/org/dimdev/jeid/mixin/core/MixinChunkProviderServer.java +++ b/src/main/java/org/dimdev/jeid/mixin/core/MixinChunkProviderServer.java @@ -4,13 +4,14 @@ import net.minecraft.world.biome.Biome; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.gen.ChunkProviderServer; -import net.minecraft.world.gen.IChunkGenerator; import org.dimdev.jeid.INewChunk; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(ChunkProviderServer.class) public class MixinChunkProviderServer { @@ -18,9 +19,8 @@ public class MixinChunkProviderServer { private Biome[] reusableBiomeList = new Biome[256]; /** @reason Return an empty biome byte array if the chunk is using an int biome array. **/ - @Redirect(method = "provideChunk", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/gen/IChunkGenerator;generateChunk(II)Lnet/minecraft/world/chunk/Chunk;")) - private Chunk generateChunk(IChunkGenerator generator, int x, int z) { - Chunk chunk = generator.generateChunk(x, z); + @Inject(method = "provideChunk", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/gen/IChunkGenerator;generateChunk(II)Lnet/minecraft/world/chunk/Chunk;"), locals = LocalCapture.CAPTURE_FAILHARD) + private void initializeBiomeArray(int x, int z, CallbackInfoReturnable cir, Chunk chunk) { Biome[] biomes = world.getBiomeProvider().getBiomes(reusableBiomeList, x * 16, z * 16, 16, 16); INewChunk newChunk = (INewChunk) chunk; @@ -28,6 +28,5 @@ private Chunk generateChunk(IChunkGenerator generator, int x, int z) { for (int i = 0; i < intBiomeArray.length; ++i) { intBiomeArray[i] = Biome.getIdForBiome(biomes[i]); } - return chunk; } }