package net.minecraft.world.level.levelgen.presets; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; import com.mojang.serialization.Codec; import com.mojang.serialization.DataResult; import com.mojang.serialization.Lifecycle; import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder.Instance; import java.util.Map; import java.util.Optional; import net.minecraft.core.Holder; import net.minecraft.core.registries.Registries; import net.minecraft.resources.RegistryFileCodec; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.levelgen.WorldDimensions; public class WorldPreset { public static final Codec DIRECT_CODEC = RecordCodecBuilder.create( p_259011_ -> p_259011_.group( Codec.unboundedMap(ResourceKey.codec(Registries.LEVEL_STEM), LevelStem.CODEC) .fieldOf("dimensions") .forGetter(p_226430_ -> p_226430_.dimensions) ) .apply(p_259011_, WorldPreset::new) ) .validate(WorldPreset::requireOverworld); public static final Codec> CODEC = RegistryFileCodec.create(Registries.WORLD_PRESET, DIRECT_CODEC); private final Map, LevelStem> dimensions; public WorldPreset(Map, LevelStem> p_226419_) { this.dimensions = p_226419_; } private ImmutableMap, LevelStem> dimensionsInOrder() { Builder, LevelStem> builder = ImmutableMap.builder(); WorldDimensions.keysInOrder(this.dimensions.keySet().stream()).forEach(p_327474_ -> { LevelStem levelstem = this.dimensions.get(p_327474_); if (levelstem != null) { builder.put((ResourceKey)p_327474_, levelstem); } }); return builder.build(); } public WorldDimensions createWorldDimensions() { return new WorldDimensions(this.dimensionsInOrder()); } public Optional overworld() { return Optional.ofNullable(this.dimensions.get(LevelStem.OVERWORLD)); } private static DataResult requireOverworld(WorldPreset p_238379_) { return p_238379_.overworld().isEmpty() ? DataResult.error(() -> "Missing overworld dimension") : DataResult.success(p_238379_, Lifecycle.stable()); } }