minecraft-src/net/minecraft/client/gui/screens/worldselection/WorldCreationContext.java
2025-07-04 02:49:36 +03:00

120 lines
3.8 KiB
Java

package net.minecraft.client.gui.screens.worldselection;
import java.util.Set;
import java.util.function.BiFunction;
import java.util.function.UnaryOperator;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.screens.worldselection.WorldCreationUiState.SelectedGameMode;
import net.minecraft.core.LayeredRegistryAccess;
import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess;
import net.minecraft.core.registries.Registries;
import net.minecraft.server.RegistryLayer;
import net.minecraft.server.ReloadableServerResources;
import net.minecraft.world.level.WorldDataConfiguration;
import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.WorldDimensions;
import net.minecraft.world.level.levelgen.WorldGenSettings;
import net.minecraft.world.level.levelgen.WorldOptions;
@Environment(EnvType.CLIENT)
public record WorldCreationContext(
WorldOptions options,
Registry<LevelStem> datapackDimensions,
WorldDimensions selectedDimensions,
LayeredRegistryAccess<RegistryLayer> worldgenRegistries,
ReloadableServerResources dataPackResources,
WorldDataConfiguration dataConfiguration,
InitialWorldCreationOptions initialWorldCreationOptions
) {
public WorldCreationContext(
WorldGenSettings worldGenSettings,
LayeredRegistryAccess<RegistryLayer> worldGenRegistries,
ReloadableServerResources dataPackResources,
WorldDataConfiguration dataConfiguration
) {
this(
worldGenSettings.options(),
worldGenSettings.dimensions(),
worldGenRegistries,
dataPackResources,
dataConfiguration,
new InitialWorldCreationOptions(SelectedGameMode.SURVIVAL, Set.of(), null)
);
}
public WorldCreationContext(
WorldOptions worldOptions,
WorldDimensions worldDimensions,
LayeredRegistryAccess<RegistryLayer> worldGenRegistries,
ReloadableServerResources dataPackResources,
WorldDataConfiguration dataConfiguration,
InitialWorldCreationOptions initialWorldCreationOptions
) {
this(
worldOptions,
worldGenRegistries.getLayer(RegistryLayer.DIMENSIONS).lookupOrThrow(Registries.LEVEL_STEM),
worldDimensions,
worldGenRegistries.replaceFrom(RegistryLayer.DIMENSIONS),
dataPackResources,
dataConfiguration,
initialWorldCreationOptions
);
}
public WorldCreationContext withSettings(WorldOptions options, WorldDimensions selectedDimensions) {
return new WorldCreationContext(
options,
this.datapackDimensions,
selectedDimensions,
this.worldgenRegistries,
this.dataPackResources,
this.dataConfiguration,
this.initialWorldCreationOptions
);
}
public WorldCreationContext withOptions(WorldCreationContext.OptionsModifier optionsModifier) {
return new WorldCreationContext(
(WorldOptions)optionsModifier.apply(this.options),
this.datapackDimensions,
this.selectedDimensions,
this.worldgenRegistries,
this.dataPackResources,
this.dataConfiguration,
this.initialWorldCreationOptions
);
}
public WorldCreationContext withDimensions(WorldCreationContext.DimensionsUpdater dimensionsUpdater) {
return new WorldCreationContext(
this.options,
this.datapackDimensions,
(WorldDimensions)dimensionsUpdater.apply(this.worldgenLoadContext(), this.selectedDimensions),
this.worldgenRegistries,
this.dataPackResources,
this.dataConfiguration,
this.initialWorldCreationOptions
);
}
public RegistryAccess.Frozen worldgenLoadContext() {
return this.worldgenRegistries.compositeAccess();
}
public void validate() {
for (LevelStem levelStem : this.datapackDimensions()) {
levelStem.generator().validate();
}
}
@FunctionalInterface
@Environment(EnvType.CLIENT)
public interface DimensionsUpdater extends BiFunction<RegistryAccess.Frozen, WorldDimensions, WorldDimensions> {
}
@Environment(EnvType.CLIENT)
public interface OptionsModifier extends UnaryOperator<WorldOptions> {
}
}