This commit is contained in:
Zoe Gidiere 2024-10-25 15:44:51 -06:00
parent d48b610b39
commit 1912d8e34c
3 changed files with 35 additions and 31 deletions

View File

@ -2,30 +2,38 @@ package com.dfsek.terra.mod.mixin.generalize;
import net.minecraft.registry.DynamicRegistryManager;
import net.minecraft.registry.Registry;
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.spawner.SpecialSpawner;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
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<World> registryRef, DynamicRegistryManager registryManager,
RegistryEntry<DimensionType> dimensionEntry, Supplier<Profiler> profiler, boolean isClient,
boolean debugWorld, long biomeAccess, int maxChainedNeighborUpdates) {
super(properties, registryRef, registryManager, dimensionEntry, profiler, isClient, debugWorld, biomeAccess,
maxChainedNeighborUpdates);
public ServerWorldMixin(MinecraftServer server, Executor workerExecutor, LevelStorage.Session session, ServerWorldProperties properties, RegistryKey<World> worldKey, DimensionOptions dimensionOptions, WorldGenerationProgressListener worldGenerationProgressListener, boolean debugWorld, long seed, List<SpecialSpawner> spawners, boolean shouldTickTime, @Nullable RandomSequencesState randomSequencesState) {
super(properties, worldKey, server.getRegistryManager(), dimensionOptions.dimensionTypeEntry(), false, debugWorld, seed, server.getMaxChainedNeighborUpdates());
}
@Redirect(method = "<init>",
@ -45,7 +53,9 @@ public abstract class ServerWorldMixin extends World {
public String nameForProxy(RegistryEntry<DimensionType> dimensionTypeEntry) {
RegistryEntry<DimensionType> entry = dimensionTypeEntry;
if(this.getRegistryKey() == World.END) {
entry = getRegistryManager().get(RegistryKeys.DIMENSION_TYPE).getEntry(DimensionTypes.THE_NETHER).orElseThrow();
Registry<DimensionType> dimensionTypeRegistry = getRegistryManager().getOrThrow(RegistryKeys.DIMENSION_TYPE);
entry = dimensionTypeRegistry.getEntry(dimensionTypeRegistry.get(DimensionTypes.THE_NETHER));
}
return RaidManager.nameFor(entry);
}

View File

@ -71,7 +71,7 @@ public final class MinecraftUtil {
}
public static void registerFlora(Registry<net.minecraft.world.biome.Biome> biomeRegistry) {
logger.info("Injecting flora into Terra biomes...");
CommonPlatform.get().getConfigRegistry().forEach(pack -> { // Register all Terra biomes.
PreLoadCompatibilityOptions compatibilityOptions = pack.getContext().get(PreLoadCompatibilityOptions.class);
if(compatibilityOptions.isInjectFlora()) {
@ -81,18 +81,16 @@ public final class MinecraftUtil {
});
}
});
logger.info("Injecting flora into Terra biomes...");
}
public static void registerFlora(com.dfsek.terra.api.world.biome.Biome biome, ConfigPack pack,
com.dfsek.terra.api.registry.key.RegistryKey id,
Registry<net.minecraft.world.biome.Biome> biomeRegistry) {
RegistryKey<net.minecraft.world.biome.Biome> vanillaKey = ((ProtoPlatformBiome) biome.getPlatformBiome()).get(biomeRegistry);
biomeRegistry.getOrEmpty(vanillaKey)
biomeRegistry.getOptionalValue(vanillaKey)
.ifPresentOrElse(vanillaBiome -> {
Identifier terraBiomeIdentifier = Identifier.of("terra", MinecraftUtil.createBiomeID(pack, id));
biomeRegistry.getOrEmpty(terraBiomeIdentifier).ifPresentOrElse(
biomeRegistry.getOptionalValue(terraBiomeIdentifier).ifPresentOrElse(
terraBiome -> {
List<ConfiguredFeature<?, ?>> flowerFeatures = List.copyOf(
vanillaBiome.getGenerationSettings()

View File

@ -146,15 +146,14 @@ public class PresetUtil {
Registry<MultiNoiseBiomeSourceParameterList> multiNoiseBiomeSourceParameterLists,
Registry<Biome> biomeRegistry, HashMap<RegistryKey<DimensionOptions>, DimensionOptions> map) {
if(!map.containsKey(DimensionOptions.OVERWORLD)) {
RegistryEntry<DimensionType> overworldDimensionType = dimensionTypeRegistry.getEntry(DimensionTypes.OVERWORLD).orElseThrow();
RegistryEntry<DimensionType> overworldDimensionType = dimensionTypeRegistry.getEntry(dimensionTypeRegistry.get(DimensionTypes.OVERWORLD));
RegistryEntry.Reference<MultiNoiseBiomeSourceParameterList> overworldChunkBiomeReference =
multiNoiseBiomeSourceParameterLists.getEntry(
MultiNoiseBiomeSourceParameterLists.OVERWORLD).orElseThrow();
RegistryEntry<MultiNoiseBiomeSourceParameterList> overworldChunkBiomeReference =
multiNoiseBiomeSourceParameterLists.getEntry(multiNoiseBiomeSourceParameterLists.get(
MultiNoiseBiomeSourceParameterLists.OVERWORLD));
RegistryEntry<ChunkGeneratorSettings> overworldChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(
ChunkGeneratorSettings.OVERWORLD)
.orElseThrow();
RegistryEntry<ChunkGeneratorSettings> overworldChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(chunkGeneratorSettingsRegistry.get(
ChunkGeneratorSettings.OVERWORLD));
DimensionOptions overworldDimensionOptions = new DimensionOptions(overworldDimensionType,
@ -162,31 +161,28 @@ public class PresetUtil {
map.put(DimensionOptions.OVERWORLD, overworldDimensionOptions);
}
if(!map.containsKey(DimensionOptions.NETHER)) {
RegistryEntry<DimensionType> netherDimensionType = dimensionTypeRegistry.getEntry(DimensionTypes.THE_NETHER).orElseThrow();
RegistryEntry<DimensionType> netherDimensionType = dimensionTypeRegistry.getEntry(dimensionTypeRegistry.get(DimensionTypes.THE_NETHER));
RegistryEntry.Reference<MultiNoiseBiomeSourceParameterList> netherChunkBiomeReference =
multiNoiseBiomeSourceParameterLists.getEntry(
MultiNoiseBiomeSourceParameterLists.NETHER).orElseThrow();
RegistryEntry<ChunkGeneratorSettings> netherChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(
ChunkGeneratorSettings.NETHER)
.orElseThrow();
RegistryEntry<MultiNoiseBiomeSourceParameterList> netherChunkBiomeReference =
multiNoiseBiomeSourceParameterLists.getEntry(multiNoiseBiomeSourceParameterLists.get(
MultiNoiseBiomeSourceParameterLists.NETHER));
RegistryEntry<ChunkGeneratorSettings> netherChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(chunkGeneratorSettingsRegistry.get(
ChunkGeneratorSettings.NETHER));
DimensionOptions overworldDimensionOptions = new DimensionOptions(netherDimensionType,
(new NoiseChunkGenerator(MultiNoiseBiomeSource.create(netherChunkBiomeReference), netherChunkGeneratorSettings)));
map.put(DimensionOptions.NETHER, overworldDimensionOptions);
}
if(!map.containsKey(DimensionOptions.END)) {
RegistryEntry<DimensionType> endDimensionType = dimensionTypeRegistry.getEntry(DimensionTypes.THE_END).orElseThrow();
RegistryEntry<DimensionType> endDimensionType = dimensionTypeRegistry.getEntry(dimensionTypeRegistry.get(DimensionTypes.THE_END));
RegistryEntry<ChunkGeneratorSettings> endChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(
ChunkGeneratorSettings.END)
.orElseThrow();
RegistryEntry<ChunkGeneratorSettings> endChunkGeneratorSettings = chunkGeneratorSettingsRegistry.getEntry(chunkGeneratorSettingsRegistry.get(
ChunkGeneratorSettings.END));
DimensionOptions overworldDimensionOptions = new DimensionOptions(endDimensionType,
(new NoiseChunkGenerator(TheEndBiomeSource.createVanilla(biomeRegistry.getReadOnlyWrapper()), endChunkGeneratorSettings)));
(new NoiseChunkGenerator(TheEndBiomeSource.createVanilla(biomeRegistry), endChunkGeneratorSettings)));
map.put(DimensionOptions.END, overworldDimensionOptions);
}
}