From 50ba1c6eabc85f7284f9de11e1357c8db7484b8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zo=C3=AB=20Gidiere?= Date: Thu, 21 Dec 2023 08:47:52 -0700 Subject: [PATCH] push changes --- .../java/com/dfsek/terra/mod/ModPlatform.java | 1 + .../mod/config/VanillaWorldProperties.java | 10 ++- .../java/com/dfsek/terra/mod/data/Codecs.java | 5 +- .../mod/generation/GenerationSettings.java | 2 +- .../MinecraftChunkGeneratorWrapper.java | 17 +++-- .../mixin/generalize/ServerWorldMixin.java | 62 +++++++++++++++++++ .../com/dfsek/terra/mod/util/PresetUtil.java | 3 +- .../com/dfsek/terra/mod/util/TagUtil.java | 2 +- .../main/resources/terra.common.mixins.json | 1 + 9 files changed, 91 insertions(+), 12 deletions(-) create mode 100644 platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/generalize/ServerWorldMixin.java diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java index cb988d1a5..eb5eecd21 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/ModPlatform.java @@ -5,6 +5,7 @@ import com.dfsek.tectonic.api.depth.DepthTracker; import com.dfsek.tectonic.api.exception.LoadException; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnGroup; +import net.minecraft.entity.boss.dragon.EnderDragonFight; import net.minecraft.registry.Registry; import net.minecraft.server.MinecraftServer; import net.minecraft.sound.BiomeAdditionsSound; diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaWorldProperties.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaWorldProperties.java index d712bc49d..d8273cc82 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaWorldProperties.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/config/VanillaWorldProperties.java @@ -82,7 +82,11 @@ public class VanillaWorldProperties implements ConfigTemplate, Properties { @Value("minecraft.sealevel") @Default - private Integer sealevel = 62; //TODO AUTO PULL DEFAULT + private Integer sealevel = null; + + @Value("minecraft.spawn-height") + @Default + private Integer spawnHeight = 64; public String getVanillaDimension() { return vanillaDimension; @@ -160,4 +164,8 @@ public class VanillaWorldProperties implements ConfigTemplate, Properties { public Integer getSealevel() { return sealevel; } + + public Integer getSpawnHeight() { + return spawnHeight; + } } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/data/Codecs.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/data/Codecs.java index 562238ced..a05f78413 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/data/Codecs.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/data/Codecs.java @@ -48,8 +48,9 @@ public final class Codecs { public static final Codec TERRA_GENERATION_SETTINGS = RecordCodecBuilder .create(instance -> instance.group( TERRA_CONSTANT_RANGE.fieldOf("height").stable().forGetter(GenerationSettings::height), - Codec.INT.fieldOf("sealevel").forGetter(GenerationSettings::sealevel), - Codec.BOOL.fieldOf("mob_generation").forGetter(GenerationSettings::mobGeneration)) + Codec.INT.fieldOf("sea_level").forGetter(GenerationSettings::sealevel), + Codec.BOOL.fieldOf("mob_generation").forGetter(GenerationSettings::mobGeneration), + Codec.INT.fieldOf("spawn_height").forGetter(GenerationSettings::sealevel)) .apply(instance, instance.stable(GenerationSettings::new))); diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/GenerationSettings.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/GenerationSettings.java index 7c8bdc5bc..e3cfb83c8 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/GenerationSettings.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/GenerationSettings.java @@ -3,5 +3,5 @@ package com.dfsek.terra.mod.generation; import com.dfsek.terra.api.util.ConstantRange; -public record GenerationSettings(ConstantRange height, Integer sealevel, Boolean mobGeneration) { +public record GenerationSettings(ConstantRange height, Integer sealevel, Boolean mobGeneration, Integer spawnHeight) { } diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/MinecraftChunkGeneratorWrapper.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/MinecraftChunkGeneratorWrapper.java index 233ec9285..b227a948a 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/MinecraftChunkGeneratorWrapper.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/generation/MinecraftChunkGeneratorWrapper.java @@ -35,6 +35,7 @@ import net.minecraft.world.StructureWorldAccess; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.source.BiomeAccess; import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.dimension.NetherPortal; import net.minecraft.world.gen.GenerationStep.Carver; import net.minecraft.world.gen.StructureAccessor; import net.minecraft.world.gen.StructureWeightSampler; @@ -105,12 +106,6 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun } } - @Override - public int getWorldHeight() { - return settings.height().getRange(); - } - - @Override public CompletableFuture populateNoise(Executor executor, Blender blender, NoiseConfig noiseConfig, StructureAccessor structureAccessor, Chunk chunk) { @@ -165,6 +160,11 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun }); } + @Override + public int getWorldHeight() { + return settings.height().getRange(); + } + @Override public int getSeaLevel() { return settings.sealevel(); @@ -175,6 +175,11 @@ public class MinecraftChunkGeneratorWrapper extends net.minecraft.world.gen.chun return settings.height().getMin(); } + @Override + public int getSpawnHeight(HeightLimitView world) { + return settings.spawnHeight(); + } + @Override public int getHeight(int x, int z, Type heightmap, HeightLimitView height, NoiseConfig noiseConfig) { WorldProperties properties = MinecraftAdapter.adapt(height, SeedHack.getSeed(noiseConfig.getMultiNoiseSampler())); diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/generalize/ServerWorldMixin.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/generalize/ServerWorldMixin.java new file mode 100644 index 000000000..d82e81304 --- /dev/null +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/mixin/generalize/ServerWorldMixin.java @@ -0,0 +1,62 @@ +package com.dfsek.terra.mod.mixin.generalize; + + +import net.minecraft.block.entity.SignText; +import net.minecraft.client.render.DimensionEffects; +import net.minecraft.registry.DynamicRegistryManager; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.WorldGenerationProgressListener; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.random.RandomSequencesState; +import net.minecraft.util.profiler.Profiler; +import net.minecraft.village.raid.RaidManager; +import net.minecraft.world.MutableWorldProperties; +import net.minecraft.world.World; +import net.minecraft.world.dimension.DimensionOptions; +import net.minecraft.world.dimension.DimensionType; +import net.minecraft.world.dimension.DimensionTypes; +import net.minecraft.world.level.ServerWorldProperties; +import net.minecraft.world.level.storage.LevelStorage; +import net.minecraft.world.level.storage.LevelStorage.Session; +import net.minecraft.world.spawner.SpecialSpawner; +import org.jetbrains.annotations.Nullable; +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 java.util.List; +import java.util.concurrent.Executor; +import java.util.function.Supplier; + + +@Mixin(ServerWorld.class) +public abstract class ServerWorldMixin extends World { + protected ServerWorldMixin(MutableWorldProperties properties, RegistryKey registryRef, DynamicRegistryManager registryManager, + RegistryEntry dimensionEntry, Supplier profiler, boolean isClient, + boolean debugWorld, long biomeAccess, int maxChainedNeighborUpdates) { + super(properties, registryRef, registryManager, dimensionEntry, profiler, isClient, debugWorld, biomeAccess, + maxChainedNeighborUpdates); + } + + @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/registry/entry/RegistryEntry;matchesKey(Lnet/minecraft/registry/RegistryKey;)Z")) + public boolean matchesKeyProxy(RegistryEntry instance, RegistryKey tRegistryKey) { + if (tRegistryKey == DimensionTypes.THE_END) { + return (this.getRegistryKey() == World.END); + } + return instance.matchesKey(tRegistryKey); + } + + @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/village/raid/RaidManager;nameFor(Lnet/minecraft/registry/entry/RegistryEntry;)Ljava/lang/String;")) + public String nameForProxy(RegistryEntry dimensionTypeEntry) { + RegistryEntry entry = dimensionTypeEntry; + if (this.getRegistryKey() == World.END) { + entry = getRegistryManager().get(RegistryKeys.DIMENSION_TYPE).getEntry(DimensionTypes.THE_NETHER).orElseThrow(); + } + return RaidManager.nameFor(entry); + } +} diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/PresetUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/PresetUtil.java index 3aa6e9ba3..ce6cdbb84 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/PresetUtil.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/PresetUtil.java @@ -130,7 +130,8 @@ public class PresetUtil { : vanillaWorldProperties.getSealevel(), vanillaWorldProperties.getMobGeneration() == null ? !defaultGeneratorSettings.value().mobGenerationDisabled() - : vanillaWorldProperties.getMobGeneration()); + : vanillaWorldProperties.getMobGeneration(), + vanillaWorldProperties.getSpawnHeight()); ChunkGenerator generator = new MinecraftChunkGeneratorWrapper(biomeSource, pack, generatorSettings); diff --git a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/TagUtil.java b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/TagUtil.java index 36ed6afea..2324e14ee 100644 --- a/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/TagUtil.java +++ b/platforms/mixin-common/src/main/java/com/dfsek/terra/mod/util/TagUtil.java @@ -33,7 +33,7 @@ public final class TagUtil { } public static void registerWorldPresetTags(Registry registry) { - logger.info("Doing preset tag garbage...."); + logger.info("Registering Preset Tags."); Map, List>> collect = tagsToMutableMap(registry); PresetUtil diff --git a/platforms/mixin-common/src/main/resources/terra.common.mixins.json b/platforms/mixin-common/src/main/resources/terra.common.mixins.json index c795b0246..8feed3a96 100644 --- a/platforms/mixin-common/src/main/resources/terra.common.mixins.json +++ b/platforms/mixin-common/src/main/resources/terra.common.mixins.json @@ -10,6 +10,7 @@ "access.StructureAccessorAccessor", "access.VillagerTypeAccessor", "fix.BeeMoveGoalsUnsynchronizedRandomAccessFix", + "generalize.ServerWorldMixin", "implementations.compat.GenerationSettingsFloraFeaturesMixin", "implementations.terra.BiomeMixin", "implementations.terra.HandleImplementationMixin",