From 18d29017251ebabedc9fbe37645fb95f7f4cac9f Mon Sep 17 00:00:00 2001 From: tom lee Date: Sat, 5 Feb 2022 18:11:15 +0800 Subject: [PATCH] Impl proper Mixins instead of @Overwrite to increase mod compat Did this because I wanna play Create Above and Beyond, and this is causing mixin compat issues with caveApi mod or something like that --- .../fabric/mixins/MixinChunkGenerator.java | 47 ++++++------------- .../lod/forge/mixins/MixinChunkGenerator.java | 47 ++++++------------- 2 files changed, 30 insertions(+), 64 deletions(-) diff --git a/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinChunkGenerator.java b/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinChunkGenerator.java index 90a1e2819..3a6cd79be 100644 --- a/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinChunkGenerator.java +++ b/fabric/src/main/java/com/seibel/lod/fabric/mixins/MixinChunkGenerator.java @@ -1,46 +1,29 @@ package com.seibel.lod.fabric.mixins; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; -import net.minecraft.CrashReport; -import net.minecraft.ReportedException; import net.minecraft.core.BlockPos; import net.minecraft.server.level.WorldGenRegion; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.WorldgenRandom; @Mixin(ChunkGenerator.class) public class MixinChunkGenerator { - @Shadow - @Final - protected BiomeSource biomeSource; - - @Overwrite - public void applyBiomeDecoration(WorldGenRegion worldGenRegion, StructureFeatureManager structureFeatureManager) { - int i = worldGenRegion.getCenterX(); - int j = worldGenRegion.getCenterZ(); - int k = i * 16; - int l = j * 16; - BlockPos blockPos = new BlockPos(k, 0, l); - Biome biome = this.biomeSource.getNoiseBiome((i << 2) + 2, 2, (j << 2) + 2); - WorldgenRandom worldgenRandom = new WorldgenRandom(); - long m = worldgenRandom.setDecorationSeed(worldGenRegion.getSeed(), k, l); - try { - synchronized(this) { - biome.generate(structureFeatureManager, (ChunkGenerator)(Object)this, worldGenRegion, m, worldgenRandom, blockPos); - } - } - catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Biome decoration"); - crashReport.addCategory("Generation").setDetail("CenterX", i).setDetail("CenterZ", j).setDetail("Seed", m).setDetail("Biome", biome); - throw new ReportedException(crashReport); - } - } - + @Redirect(method = "applyBiomeDecoration", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/biome/Biome;generate(Lnet/minecraft/world/level/StructureFeatureManager;" + + "Lnet/minecraft/world/level/chunk/ChunkGenerator;Lnet/minecraft/server/level/WorldGenRegion;J" + + "Lnet/minecraft/world/level/levelgen/WorldgenRandom;Lnet/minecraft/core/BlockPos;)V" + + )) + private void wrapBiomeGenerateCall(Biome biome, StructureFeatureManager structFeatManager, ChunkGenerator generator, + WorldGenRegion genRegion, long l, WorldgenRandom random, BlockPos pos) { + synchronized((ChunkGenerator)(Object)this) { + biome.generate(structFeatManager, (ChunkGenerator)(Object)this, genRegion, l, random, pos); + } + } } diff --git a/forge/src/main/java/com/seibel/lod/forge/mixins/MixinChunkGenerator.java b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinChunkGenerator.java index 367e27752..dc49fa937 100644 --- a/forge/src/main/java/com/seibel/lod/forge/mixins/MixinChunkGenerator.java +++ b/forge/src/main/java/com/seibel/lod/forge/mixins/MixinChunkGenerator.java @@ -1,46 +1,29 @@ package com.seibel.lod.forge.mixins; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; -import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; -import net.minecraft.CrashReport; -import net.minecraft.ReportedException; import net.minecraft.core.BlockPos; import net.minecraft.server.level.WorldGenRegion; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.biome.Biome; -import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.WorldgenRandom; @Mixin(ChunkGenerator.class) public class MixinChunkGenerator { - @Shadow - @Final - protected BiomeSource biomeSource; - - @Overwrite - public void applyBiomeDecoration(WorldGenRegion worldGenRegion, StructureFeatureManager structureFeatureManager) { - int i = worldGenRegion.getCenterX(); - int j = worldGenRegion.getCenterZ(); - int k = i * 16; - int l = j * 16; - BlockPos blockPos = new BlockPos(k, 0, l); - Biome biome = this.biomeSource.getNoiseBiome((i << 2) + 2, 2, (j << 2) + 2); - WorldgenRandom worldgenRandom = new WorldgenRandom(); - long m = worldgenRandom.setDecorationSeed(worldGenRegion.getSeed(), k, l); - try { - synchronized(this) { - biome.generate(structureFeatureManager, (ChunkGenerator)(Object)this, worldGenRegion, m, worldgenRandom, blockPos); - } - } - catch (Exception exception) { - CrashReport crashReport = CrashReport.forThrowable(exception, "Biome decoration"); - crashReport.addCategory("Generation").setDetail("CenterX", i).setDetail("CenterZ", j).setDetail("Seed", m).setDetail("Biome", biome); - throw new ReportedException(crashReport); - } - } - + @Redirect(method = "applyBiomeDecoration", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/world/level/biome/Biome;generate(Lnet/minecraft/world/level/StructureFeatureManager;" + + "Lnet/minecraft/world/level/chunk/ChunkGenerator;Lnet/minecraft/server/level/WorldGenRegion;J" + + "Lnet/minecraft/world/level/levelgen/WorldgenRandom;Lnet/minecraft/core/BlockPos;)V" + + )) + private void wrapBiomeGenerateCall(Biome biome, StructureFeatureManager structFeatManager, ChunkGenerator generator, + WorldGenRegion genRegion, long l, WorldgenRandom random, BlockPos pos) { + synchronized((ChunkGenerator)(Object)this) { + biome.generate(structFeatManager, (ChunkGenerator)(Object)this, genRegion, l, random, pos); + } + } }