From fa1e6ce0860a717c71f453644721f3acc43fae4f Mon Sep 17 00:00:00 2001 From: gnembon Date: Wed, 16 Feb 2022 22:23:52 +0100 Subject: [PATCH] 22w07a - disabled "sample_noise" --- gradle.properties | 2 +- .../java/carpet/helpers/FeatureGenerator.java | 80 +++++++++---------- .../FlatLevelSource_structuresMixin.java | 17 ++-- ...seBasedChunkGenerator_husksSpawnMixin.java | 8 +- .../mixins/NoiseSampler_scarpetMixin.java | 14 +++- ...izedSpaghettiRarityMixin_scarpetMixin.java | 5 +- .../java/carpet/script/api/WorldAccess.java | 4 +- .../java/carpet/script/utils/WorldTools.java | 5 +- 8 files changed, 74 insertions(+), 61 deletions(-) diff --git a/gradle.properties b/gradle.properties index 754d6d88..8f186c11 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use # or better: https://modmuss50.me/fabric.html - minecraft_version=22w06a + minecraft_version=22w07a loader_version=0.12.12 fabric_version=0.46.2+1.18 diff --git a/src/main/java/carpet/helpers/FeatureGenerator.java b/src/main/java/carpet/helpers/FeatureGenerator.java index dedb7088..31f0dbee 100644 --- a/src/main/java/carpet/helpers/FeatureGenerator.java +++ b/src/main/java/carpet/helpers/FeatureGenerator.java @@ -7,11 +7,12 @@ import carpet.fakes.StructureFeatureInterface; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableMultimap; import com.mojang.datafixers.util.Pair; + import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.OptionalInt; +import java.util.Set; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -50,8 +51,8 @@ import net.minecraft.world.level.levelgen.feature.featuresize.TwoLayersFeatureSi import net.minecraft.world.level.levelgen.feature.foliageplacers.BlobFoliagePlacer; import net.minecraft.world.level.levelgen.feature.foliageplacers.FancyFoliagePlacer; import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; -import net.minecraft.world.level.levelgen.feature.structures.StructurePoolElement; -import net.minecraft.world.level.levelgen.feature.structures.StructureTemplatePool; +import net.minecraft.world.level.levelgen.structure.pools.StructurePoolElement; +import net.minecraft.world.level.levelgen.structure.pools.StructureTemplatePool; import net.minecraft.world.level.levelgen.feature.treedecorators.BeehiveDecorator; import net.minecraft.world.level.levelgen.feature.trunkplacers.FancyTrunkPlacer; import net.minecraft.world.level.levelgen.feature.trunkplacers.StraightTrunkPlacer; @@ -195,15 +196,15 @@ public class FeatureGenerator private static ConfiguredStructureFeature getDefaultFeature(StructureFeature structure, ServerLevel world, BlockPos pos, boolean tryHard) { - var definedStructures = world.getChunkSource().getGenerator().getSettings().structures(structure); - var optinalBiome = world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY).getResourceKey(world.getBiome(pos).value()); - if (optinalBiome.isPresent()) - for (ResourceKey> configureStructureKey: definedStructures.inverse().get(optinalBiome.get())) - { - var configureStructure = world.registryAccess().registryOrThrow(Registry.CONFIGURED_STRUCTURE_FEATURE_REGISTRY).get(configureStructureKey); - if (configureStructure.feature == structure) - return configureStructure; + var definedStructures = world.getChunkSource().getGenerator().getAllConfigurationsFor(structure); + Holder existingBiome = world.getBiome(pos); + + for (final Holder.Reference> featureConfig : definedStructures) { + final HolderSet biomeAllowedForStructure = featureConfig.value().biomes(); + if (biomeAllowedForStructure.contains(existingBiome)) { + return featureConfig.value(); } + } if (!tryHard) return null; return world.registryAccess().registryOrThrow(Registry.CONFIGURED_STRUCTURE_FEATURE_REGISTRY).entrySet().stream(). filter(cS -> cS.getValue().feature == structure). @@ -233,47 +234,44 @@ public class FeatureGenerator ChunkGenerator generator = world.getChunkSource().getGenerator(); StructureSettings settings = generator.getSettings(); StructurePlacement structureConfig = settings.getConfig(structure); + if (structureConfig instanceof ConcentricRingsStructurePlacement rings) { return shouldStrongholdStartAt(generator, rings, world, pos, computeBox); } - var structures = settings.structures(structure); - if (structureConfig == null || structures.isEmpty()) { + + if (structureConfig == null) + { return null; } ChunkPos chunkPos = new ChunkPos(pos); - Holder biome = world.getBiome(pos); - Registry biomeRegistry = world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY); - if (structures.values().stream().noneMatch(biomeKey -> biomeRegistry.getHolderOrThrow(biomeKey) == biome)) - { - return null; - } - if (!structureConfig.isFeatureChunk(generator, chunkPos.x, chunkPos.z)) - //ChunkPos chunkPos1 = structure.getPotentialFeatureChunk(structureConfig, seed, chunkPos.x, chunkPos.z); - //if (!chunkPos1.equals(chunkPos)) - { - return null; - } + StructureFeatureManager structureManager = world.structureFeatureManager(); StructureCheckResult isThere = structureManager.checkStructurePresence(chunkPos, structure, false); if (isThere == StructureCheckResult.START_NOT_PRESENT) { return null; } - // gen - we want to avoig, right? - //Chunk chunk = world.getChunk(chunkPos.x, chunkPos.z, ChunkStatus.STRUCTURE_STARTS); - //StructureStart start = structureManager.getStructureStart(ChunkSectionPos.from(chunk), structure, chunk); - //if (start != null && start.hasChildren()) - //{ - if (!computeBox) return StructureStart.INVALID_START; - ConfiguredStructureFeature configuredFeature = getDefaultFeature(structure, world, pos, false); - if (configuredFeature == null || configuredFeature.config == null) return null; - var biomeConfig = structures.get(ResourceKey.create(Registry.CONFIGURED_STRUCTURE_FEATURE_REGISTRY, world.registryAccess().registryOrThrow(Registry.CONFIGURED_STRUCTURE_FEATURE_REGISTRY).getKey(configuredFeature))); - StructureStart filledStructure = configuredFeature.generate(world.registryAccess(), generator, generator.getBiomeSource(), - world.getStructureManager(), seed, chunkPos, 0, world, b -> biomeRegistry.getResourceKey(b.value()).filter(biomeConfig::contains).isPresent()); - if (filledStructure != null && filledStructure.isValid()) - return filledStructure; + if (!structureConfig.isFeatureChunk(generator, chunkPos.x, chunkPos.z)) { + return null; + }; + for (final Holder.Reference> featureConfig : generator.getAllConfigurationsFor(structure)) { + final HolderSet biomeAllowedForStructure = featureConfig.value().biomes(); + if (!computeBox) { + if (biomeAllowedForStructure.contains(world.getBiome(pos))) { + return StructureStart.INVALID_START; + } + } + else { + final StructureStart filledStructure = featureConfig.value().generate( + world.registryAccess(), generator, generator.getBiomeSource(), world.getStructureManager(), + seed, chunkPos, 0, world, biomeAllowedForStructure::contains); + if (filledStructure != null && filledStructure.isValid()) { + return filledStructure; + } + } + } return null; } @@ -285,10 +283,10 @@ public class FeatureGenerator StructureSettings settings = generator.getSettings(); StructurePlacement structureConfig = settings.getConfig(StructureFeature.STRONGHOLD); if (structureConfig != null) { - final Predicate> biomeCheck = settings.structures(StructureFeature.STRONGHOLD).values().stream().collect(Collectors.toUnmodifiableSet())::contains; - final Predicate> holderCheck = b -> b.is(biomeCheck); + final List>> configurations = generator.getAllConfigurationsFor(StructureFeature.STRONGHOLD); + final Set> allowedBiomes = configurations.stream().flatMap(s -> s.value().biomes().stream()).distinct().collect(Collectors.toSet()); StructureStart filledStructure = StructureFeature.STRONGHOLD.generate(world.registryAccess(), generator, generator.getBiomeSource(), - world.getStructureManager(), world.getSeed(), new ChunkPos(pos), 0, NoneFeatureConfiguration.INSTANCE, world, holderCheck + world.getStructureManager(), world.getSeed(), new ChunkPos(pos), 0, NoneFeatureConfiguration.INSTANCE, world, allowedBiomes::contains ); if (filledStructure != null && filledStructure.isValid()) return filledStructure; diff --git a/src/main/java/carpet/mixins/FlatLevelSource_structuresMixin.java b/src/main/java/carpet/mixins/FlatLevelSource_structuresMixin.java index 3178fba5..826ee8a0 100644 --- a/src/main/java/carpet/mixins/FlatLevelSource_structuresMixin.java +++ b/src/main/java/carpet/mixins/FlatLevelSource_structuresMixin.java @@ -3,6 +3,13 @@ package carpet.mixins; import carpet.CarpetSettings; import carpet.helpers.CustomSpawnLists; import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; +import net.minecraft.world.level.levelgen.feature.NetherFortressFeature; +import net.minecraft.world.level.levelgen.feature.OceanMonumentFeature; +import net.minecraft.world.level.levelgen.feature.PillagerOutpostFeature; +import net.minecraft.world.level.levelgen.feature.StructureFeature; +import net.minecraft.world.level.levelgen.feature.SwamplandHutFeature; import org.spongepowered.asm.mixin.Mixin; import net.minecraft.core.BlockPos; @@ -15,19 +22,13 @@ import net.minecraft.world.level.biome.MobSpawnSettings; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.FlatLevelSource; import net.minecraft.world.level.levelgen.StructureSettings; -import net.minecraft.world.level.levelgen.feature.NetherFortressFeature; -import net.minecraft.world.level.levelgen.feature.OceanMonumentFeature; -import net.minecraft.world.level.levelgen.feature.PillagerOutpostFeature; -import net.minecraft.world.level.levelgen.feature.StructureFeature; -import net.minecraft.world.level.levelgen.feature.SwamplandHutFeature; @Mixin(FlatLevelSource.class) public abstract class FlatLevelSource_structuresMixin extends ChunkGenerator { - - public FlatLevelSource_structuresMixin(BiomeSource biomeSource, StructureSettings structuresConfig) + public FlatLevelSource_structuresMixin(Registry> registry, BiomeSource biomeSource, StructureSettings structureSettings) { - super(biomeSource, structuresConfig); + super(registry, biomeSource, structureSettings); } @Override diff --git a/src/main/java/carpet/mixins/NoiseBasedChunkGenerator_husksSpawnMixin.java b/src/main/java/carpet/mixins/NoiseBasedChunkGenerator_husksSpawnMixin.java index ca1d778c..e2730815 100644 --- a/src/main/java/carpet/mixins/NoiseBasedChunkGenerator_husksSpawnMixin.java +++ b/src/main/java/carpet/mixins/NoiseBasedChunkGenerator_husksSpawnMixin.java @@ -3,6 +3,8 @@ package carpet.mixins; import carpet.CarpetSettings; import carpet.helpers.CustomSpawnLists; import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -23,9 +25,9 @@ import net.minecraft.world.level.levelgen.feature.StructureFeature; @Mixin(NoiseBasedChunkGenerator.class) public abstract class NoiseBasedChunkGenerator_husksSpawnMixin extends ChunkGenerator { - public NoiseBasedChunkGenerator_husksSpawnMixin(BiomeSource biomeSource, StructureSettings structuresConfig) - { - super(biomeSource, structuresConfig); + + public NoiseBasedChunkGenerator_husksSpawnMixin(Registry> registry, BiomeSource biomeSource, StructureSettings structureSettings) { + super(registry, biomeSource, structureSettings); } @Inject(method = "getMobsAt", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/carpet/mixins/NoiseSampler_scarpetMixin.java b/src/main/java/carpet/mixins/NoiseSampler_scarpetMixin.java index 53327359..02ec89a5 100644 --- a/src/main/java/carpet/mixins/NoiseSampler_scarpetMixin.java +++ b/src/main/java/carpet/mixins/NoiseSampler_scarpetMixin.java @@ -4,9 +4,11 @@ import carpet.fakes.NoiseColumnSamplerInterface; import carpet.script.exception.InternalExpressionException; import net.minecraft.core.QuartPos; import net.minecraft.world.level.biome.Climate; -import net.minecraft.world.level.levelgen.NoiseSampler; +import net.minecraft.world.level.levelgen.NoiseRouter; +import net.minecraft.world.level.levelgen.NoiseRouterData; +//import net.minecraft.world.level.levelgen.NoiseSampler; import net.minecraft.world.level.levelgen.NoiseSettings; -import net.minecraft.world.level.levelgen.TerrainInfo; +//import net.minecraft.world.level.levelgen.TerrainInfo; import net.minecraft.world.level.levelgen.blending.Blender; import net.minecraft.world.level.levelgen.synth.BlendedNoise; import net.minecraft.world.level.levelgen.synth.NoiseUtils; @@ -17,9 +19,13 @@ import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -@Mixin(NoiseSampler.class) +@Mixin(NoiseRouterData.class) public abstract class NoiseSampler_scarpetMixin implements NoiseColumnSamplerInterface { + /* + @Shadow @Final + private NoiseRouter router; + @Shadow @Final private BlendedNoise blendedNoise; @@ -255,5 +261,5 @@ public abstract class NoiseSampler_scarpetMixin implements NoiseColumnSamplerInt } } throw new InternalExpressionException("Unknown noise type: " + name); - } + }*/ } diff --git a/src/main/java/carpet/mixins/QuantizedSpaghettiRarityMixin_scarpetMixin.java b/src/main/java/carpet/mixins/QuantizedSpaghettiRarityMixin_scarpetMixin.java index 260c7f3d..f3eed7df 100644 --- a/src/main/java/carpet/mixins/QuantizedSpaghettiRarityMixin_scarpetMixin.java +++ b/src/main/java/carpet/mixins/QuantizedSpaghettiRarityMixin_scarpetMixin.java @@ -1,11 +1,12 @@ package carpet.mixins; -import net.minecraft.world.level.levelgen.NoiseSampler; +//import net.minecraft.world.level.levelgen.NoiseRouterData; +//import net.minecraft.world.level.levelgen.NoiseSampler; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Invoker; -@Mixin(NoiseSampler.QuantizedSpaghettiRarity.class) +@Mixin(targets = "net.minecraft.world.level.levelgen.NoiseRouterData$QuantizedSpaghettiRarity") public interface QuantizedSpaghettiRarityMixin_scarpetMixin { @Invoker static double invokeGetSpaghettiRarity3D(double d) { diff --git a/src/main/java/carpet/script/api/WorldAccess.java b/src/main/java/carpet/script/api/WorldAccess.java index f6db8318..6cdcf8bb 100644 --- a/src/main/java/carpet/script/api/WorldAccess.java +++ b/src/main/java/carpet/script/api/WorldAccess.java @@ -1594,6 +1594,8 @@ public class WorldAccess { @ScarpetFunction(maxParams = -1) public Value sample_noise(Context c, @Locator.Block BlockPos pos, String... noiseQueries) { + return Value.NULL; + /* int mappedX = QuartPos.fromBlock(pos.getX()); int mappedY = QuartPos.fromBlock(pos.getY()); int mappedZ = QuartPos.fromBlock(pos.getZ()); @@ -1608,6 +1610,6 @@ public class WorldAccess { double noiseValue = ((NoiseColumnSamplerInterface) mns).getNoiseSample(noise, mappedX, mappedY, mappedZ); ret.put(new StringValue(noise), new NumericValue(noiseValue)); } - return MapValue.wrap(ret); + return MapValue.wrap(ret);*/ } } diff --git a/src/main/java/carpet/script/utils/WorldTools.java b/src/main/java/carpet/script/utils/WorldTools.java index 773b2e5f..01bd2785 100644 --- a/src/main/java/carpet/script/utils/WorldTools.java +++ b/src/main/java/carpet/script/utils/WorldTools.java @@ -114,7 +114,10 @@ public class WorldTools // return server.getRegistryManager().get(Registry.CHUNK_GENERATOR_SETTINGS_KEY).getOrThrow(ChunkGeneratorSettings.OVERWORLD); //}); - chunkGenerator2 = new NoiseBasedChunkGenerator(server.registryAccess().registryOrThrow(Registry.NOISE_REGISTRY), MultiNoiseBiomeSource.Preset.OVERWORLD.biomeSource(server.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY)), seed, + chunkGenerator2 = new NoiseBasedChunkGenerator( + server.registryAccess().registryOrThrow(Registry.NOISE_REGISTRY), + server.registryAccess().registryOrThrow(Registry.CONFIGURED_STRUCTURE_FEATURE_REGISTRY), + MultiNoiseBiomeSource.Preset.OVERWORLD.biomeSource(server.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY)), seed, Holder.direct(server.registryAccess().registryOrThrow(Registry.NOISE_GENERATOR_SETTINGS_REGISTRY).getOrThrow(NoiseGeneratorSettings.OVERWORLD)) );