From 6b63be32b0b8f7dfc643b7b4cc3306893e15fa44 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 7 Dec 2021 18:12:09 +0100 Subject: [PATCH] Fixed some bootup errors --- .../interfaces/StructureFeaturesAccessor.java | 9 ++++++ .../mixin/common/EndCityFeatureMixin.java | 32 ++++++++++++------- .../common/NoiseBasedChunkGeneratorMixin.java | 27 ++++++++-------- .../mixin/common/StructureFeaturesMixin.java | 19 +++++++++++ .../ru/betterend/world/biome/EndBiome.java | 3 +- .../resources/betterend.mixins.common.json | 4 +-- 6 files changed, 66 insertions(+), 28 deletions(-) create mode 100644 src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java create mode 100644 src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java diff --git a/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java new file mode 100644 index 00000000..4d466609 --- /dev/null +++ b/src/main/java/ru/betterend/interfaces/StructureFeaturesAccessor.java @@ -0,0 +1,9 @@ +package ru.betterend.interfaces; + +import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; +import net.minecraft.world.level.levelgen.feature.StructureFeature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public interface StructureFeaturesAccessor { + ConfiguredStructureFeature> getEND_CITY(); +} diff --git a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java index 6ec5f02f..1895cd72 100644 --- a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java @@ -1,13 +1,17 @@ package ru.betterend.mixin.common; +import java.util.Optional; +import java.util.Random; + import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.LevelHeightAccessor; -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.LegacyRandomSource; import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.feature.EndCityFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGenerator; +import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -17,20 +21,24 @@ import ru.betterend.world.generator.GeneratorOptions; @Mixin(EndCityFeature.class) public class EndCityFeatureMixin { - @Inject(method = "isFeatureChunk", at = @At("HEAD"), cancellable = true) - private void be_isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration defaultFeatureConfig, LevelHeightAccessor levelHeightAccessor, CallbackInfoReturnable info) { + @Inject(method = "pieceGeneratorSupplier", at = @At("HEAD"), cancellable = true) + private static void be_isFeatureChunk(PieceGeneratorSupplier.Context context, CallbackInfoReturnable>> info) { + final ChunkPos pos = context.chunkPos(); + final ChunkGenerator chunkGenerator = context.chunkGenerator(); + final LevelHeightAccessor levelHeightAccessor = context.heightAccessor(); + //TODO: 1.18 that is a different random source! + Random chunkRandom = new WorldgenRandom(new LegacyRandomSource(pos.x*pos.z)); + if (GeneratorOptions.useNewGenerator()) { int chance = GeneratorOptions.getEndCityFailChance(); - if (chance == 0) { - info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); - info.cancel(); - } - else if (chunkRandom.nextInt(chance) == 0) { - info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); - info.cancel(); + if (chance == 0 || chunkRandom.nextInt(chance) == 0) { + if (!(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60)){ + info.cancel(); + info.setReturnValue(Optional.empty()); + } } else { - info.setReturnValue(false); + info.setReturnValue(Optional.empty()); info.cancel(); } } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java index aa8b7619..4e98411e 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java @@ -1,5 +1,8 @@ package ru.betterend.mixin.common; +import java.util.function.Supplier; + +import net.minecraft.core.Registry; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; @@ -11,11 +14,8 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.TerrainGenerator; -import java.util.function.Supplier; - @Mixin(NoiseBasedChunkGenerator.class) public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { @Final @@ -26,16 +26,17 @@ public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { super(populationSource, biomeSource, structuresConfig, worldSeed); } - @Inject(method = "(Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) - private void beOnInit(BiomeSource populationSource, BiomeSource biomeSource, long seed, Supplier settings, CallbackInfo info) { + @Inject(method = "(Lnet/minecraft/core/Registry;Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) + private void beOnInit(Registry registry, BiomeSource biomeSource, BiomeSource biomeSource2, long seed, Supplier supplier, CallbackInfo ci) { TerrainGenerator.initNoise(seed); } - - @Inject(method = "fillNoiseColumn([DIIII)V", at = @At("HEAD"), cancellable = true, allow = 2) - private void be_fillNoiseColumn(double[] buffer, int x, int z, int k, int l, CallbackInfo info) { - if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { - TerrainGenerator.fillTerrainDensity(buffer, x, z, getBiomeSource()); - info.cancel(); - } - } + + //TODO: 1.18 Find anothe rplace for this +// @Inject(method = "fillNoiseColumn([DIIII)V", at = @At("HEAD"), cancellable = true, allow = 2) +// private void be_fillNoiseColumn(double[] buffer, int x, int z, int k, int l, CallbackInfo info) { +// if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { +// TerrainGenerator.fillTerrainDensity(buffer, x, z, getBiomeSource()); +// info.cancel(); +// } +// } } diff --git a/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java new file mode 100644 index 00000000..bad4c781 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/StructureFeaturesMixin.java @@ -0,0 +1,19 @@ +package ru.betterend.mixin.common; + +import net.minecraft.data.worldgen.StructureFeatures; +import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; +import net.minecraft.world.level.levelgen.feature.StructureFeature; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import ru.betterend.interfaces.StructureFeaturesAccessor; + +@Mixin(StructureFeatures.class) +public class StructureFeaturesMixin implements StructureFeaturesAccessor { + @Shadow @Final private static ConfiguredStructureFeature> END_CITY; + + public ConfiguredStructureFeature> getEND_CITY(){ + return END_CITY; + } +} diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 17b115a1..0aabcfef 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -9,9 +9,9 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.SurfaceRules; import ru.bclib.api.biomes.BCLBiomeBuilder; -import ru.bclib.interfaces.StructureFeaturesAccessor; import ru.bclib.world.biomes.BCLBiome; import ru.betterend.BetterEnd; +import ru.betterend.interfaces.StructureFeaturesAccessor; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndSounds; @@ -62,6 +62,7 @@ public class EndBiome extends BCLBiome { biomeConfig.addCustomBuildData(builder); EndFeatures.addDefaultFeatures(builder, biomeConfig.hasCaves()); + EndBiome biome = builder.build(biomeConfig.getSupplier()); biome.addCustomData("has_caves", biomeConfig.hasCaves()); diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index 3640ff46..006ceeee 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -4,7 +4,6 @@ "package": "ru.betterend.mixin.common", "compatibilityLevel": "JAVA_16", "mixins": [ - "BiomeGenerationSettingsAccessor", "NoiseBasedChunkGeneratorMixin", "ChorusPlantFeatureMixin", "PlayerAdvancementsMixin", @@ -25,7 +24,8 @@ "MonsterMixin", "EntityMixin", "PlayerMixin", - "SlimeMixin" + "SlimeMixin", + "StructureFeaturesMixin" ], "injectors": { "defaultRequire": 1