From faa20c608e9c7ecb2c0c36fe9779033b5cc8a822 Mon Sep 17 00:00:00 2001 From: Frank Date: Sun, 22 May 2022 18:40:50 +0200 Subject: [PATCH] Layout for World customization Screen --- .../bclib/client/presets/WorldPresetsUI.java | 2 +- .../bclib/gui/screens/WorldSetupScreen.java | 149 ++++++++++++++++++ .../bclib/gui/worldgen/WorldSetupScreen.java | 69 -------- .../resources/assets/bclib/lang/de_de.json | 7 +- .../resources/assets/bclib/lang/en_us.json | 7 +- 5 files changed, 162 insertions(+), 72 deletions(-) create mode 100644 src/main/java/org/betterx/bclib/gui/screens/WorldSetupScreen.java delete mode 100644 src/main/java/org/betterx/bclib/gui/worldgen/WorldSetupScreen.java diff --git a/src/main/java/org/betterx/bclib/client/presets/WorldPresetsUI.java b/src/main/java/org/betterx/bclib/client/presets/WorldPresetsUI.java index 4b65b54d..bbaa1d29 100644 --- a/src/main/java/org/betterx/bclib/client/presets/WorldPresetsUI.java +++ b/src/main/java/org/betterx/bclib/client/presets/WorldPresetsUI.java @@ -7,7 +7,7 @@ import net.minecraft.world.level.levelgen.presets.WorldPreset; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import org.betterx.bclib.gui.worldgen.WorldSetupScreen; +import org.betterx.bclib.gui.screens.WorldSetupScreen; import org.betterx.bclib.presets.worldgen.WorldPresets; import java.util.Optional; diff --git a/src/main/java/org/betterx/bclib/gui/screens/WorldSetupScreen.java b/src/main/java/org/betterx/bclib/gui/screens/WorldSetupScreen.java new file mode 100644 index 00000000..e20da93b --- /dev/null +++ b/src/main/java/org/betterx/bclib/gui/screens/WorldSetupScreen.java @@ -0,0 +1,149 @@ +package org.betterx.bclib.gui.screens; + +import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen; +import net.minecraft.client.gui.screens.worldselection.WorldCreationContext; +import net.minecraft.core.Registry; +import net.minecraft.network.chat.CommonComponents; +import net.minecraft.network.chat.Component; +import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.dimension.LevelStem; +import net.minecraft.world.level.levelgen.FlatLevelSource; +import net.minecraft.world.level.levelgen.WorldGenSettings; +import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; +import net.minecraft.world.level.levelgen.structure.StructureSet; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; + +import org.betterx.bclib.BCLib; +import org.betterx.bclib.gui.gridlayout.GridCheckboxCell; +import org.betterx.bclib.gui.gridlayout.GridLayout; +import org.betterx.bclib.presets.worldgen.BCLChunkGenerator; + +import org.jetbrains.annotations.Nullable; + +@Environment(EnvType.CLIENT) +public class WorldSetupScreen extends BCLibScreen { + private final WorldCreationContext context; + private final CreateWorldScreen createWorldScreen; + + public WorldSetupScreen(@Nullable CreateWorldScreen parent, WorldCreationContext context) { + super(parent, Component.translatable("title.screen.bclib.worldgen.main"), 10, false); + this.context = context; + this.createWorldScreen = parent; + } + + + private GridCheckboxCell bclibEnd; + private GridCheckboxCell bclibNether; + GridCheckboxCell endLegacy; + GridCheckboxCell netherLegacy; + + @Override + protected void initLayout() { + final int netherVersion = BCLChunkGenerator.getBiomeVersionForGenerator(context + .worldGenSettings() + .dimensions() + .getOrCreateHolderOrThrow( + LevelStem.NETHER) + .value() + .generator()); + final int endVersion = BCLChunkGenerator.getBiomeVersionForGenerator(context + .worldGenSettings() + .dimensions() + .getOrCreateHolderOrThrow( + LevelStem.END) + .value() + .generator()); + + final int BUTTON_HEIGHT = 20; + grid.addSpacerRow(20); + + var row = grid.addRow(); + var colNether = row.addColumn(0.5, GridLayout.GridValueType.PERCENTAGE); + var colEnd = row.addColumn(0.5, GridLayout.GridValueType.PERCENTAGE); + + row = colNether.addRow(); + row.addString(Component.translatable("title.bclib.the_nether"), GridLayout.Alignment.CENTER, this); + colNether.addSpacerRow(15); + + var mainSettingsRow = colNether.addRow(); + mainSettingsRow.addSpacer(16); + row = colNether.addRow(); + row.addSpacer(32); + netherLegacy = row.addCheckbox(Component.translatable("title.screen.bclib.worldgen.legacy_square"), + endVersion == BCLChunkGenerator.BIOME_SOURCE_VERSION_SQUARE, + font, + (state) -> { + }); + bclibNether = mainSettingsRow.addCheckbox(Component.translatable( + "title.screen.bclib.worldgen.custom_biome_source"), + netherVersion != BCLChunkGenerator.BIOME_SOURCE_VERSION_VANILLA, + font, + (state) -> { + netherLegacy.setEnabled(state); + }); + + + row = colEnd.addRow(GridLayout.VerticalAlignment.CENTER); + row.addString(Component.translatable("title.bclib.the_end"), GridLayout.Alignment.CENTER, this); + colEnd.addSpacerRow(15); + + mainSettingsRow = colEnd.addRow(); + mainSettingsRow.addSpacer(16); + row = colEnd.addRow(); + row.addSpacer(32); + + endLegacy = row.addCheckbox(Component.translatable("title.screen.bclib.worldgen.legacy_square"), + endVersion == BCLChunkGenerator.BIOME_SOURCE_VERSION_SQUARE, + font, + (state) -> { + }); + + bclibEnd = mainSettingsRow.addCheckbox(Component.translatable( + "title.screen.bclib.worldgen.custom_biome_source"), + endVersion != BCLChunkGenerator.BIOME_SOURCE_VERSION_VANILLA, + font, + (state) -> { + endLegacy.setEnabled(state); + }); + + grid.addSpacerRow(15); + row = grid.addRow(); + row.addFiller(); + row.addButton(CommonComponents.GUI_DONE, BUTTON_HEIGHT, font, (button) -> { + updateSettings(); + onClose(); + }); + grid.addSpacerRow(10); + } + + private void updateSettings() { + int endVersion = BCLChunkGenerator.DEFAULT_BIOME_SOURCE_VERSION; + if (bclibEnd.isChecked()) { + if (endLegacy.isChecked()) endVersion = BCLChunkGenerator.BIOME_SOURCE_VERSION_SQUARE; + else endVersion = BCLChunkGenerator.BIOME_SOURCE_VERSION_HEX; + } else { + endVersion = BCLChunkGenerator.BIOME_SOURCE_VERSION_VANILLA; + } + + int netherVersion = BCLChunkGenerator.DEFAULT_BIOME_SOURCE_VERSION; + if (bclibNether.isChecked()) { + if (netherLegacy.isChecked()) netherVersion = BCLChunkGenerator.BIOME_SOURCE_VERSION_SQUARE; + else netherVersion = BCLChunkGenerator.BIOME_SOURCE_VERSION_HEX; + } else { + netherVersion = BCLChunkGenerator.BIOME_SOURCE_VERSION_VANILLA; + } + + BCLib.LOGGER.info("Custom World Versions: end=" + endVersion + ", nether=" + netherVersion); + } + + private WorldCreationContext.Updater worldConfiguration(FlatLevelGeneratorSettings flatLevelGeneratorSettings) { + + return (frozen, worldGenSettings) -> { + Registry registry = frozen.registryOrThrow(Registry.STRUCTURE_SET_REGISTRY); + ChunkGenerator chunkGenerator = new FlatLevelSource(registry, flatLevelGeneratorSettings); + return WorldGenSettings.replaceOverworldGenerator(frozen, worldGenSettings, chunkGenerator); + }; + } +} diff --git a/src/main/java/org/betterx/bclib/gui/worldgen/WorldSetupScreen.java b/src/main/java/org/betterx/bclib/gui/worldgen/WorldSetupScreen.java deleted file mode 100644 index a4620eb9..00000000 --- a/src/main/java/org/betterx/bclib/gui/worldgen/WorldSetupScreen.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.betterx.bclib.gui.worldgen; - -import net.minecraft.client.gui.screens.worldselection.CreateWorldScreen; -import net.minecraft.client.gui.screens.worldselection.WorldCreationContext; -import net.minecraft.core.Registry; -import net.minecraft.network.chat.CommonComponents; -import net.minecraft.network.chat.Component; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.FlatLevelSource; -import net.minecraft.world.level.levelgen.WorldGenSettings; -import net.minecraft.world.level.levelgen.flat.FlatLevelGeneratorSettings; -import net.minecraft.world.level.levelgen.structure.StructureSet; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; - -import org.betterx.bclib.gui.gridlayout.GridLayout; -import org.betterx.bclib.gui.gridlayout.GridScreen; - -import org.jetbrains.annotations.Nullable; - -@Environment(EnvType.CLIENT) -public class WorldSetupScreen extends GridScreen { - private final WorldCreationContext context; - private final CreateWorldScreen createWorldScreen; - - public WorldSetupScreen(@Nullable CreateWorldScreen parent, WorldCreationContext context) { - super(parent, Component.translatable("title.screen.bclib.worldgen.main"), 10, false); - this.context = context; - this.createWorldScreen = parent; - } - - @Override - protected void initLayout() { - final int BUTTON_HEIGHT = 20; - grid.addSpacerRow(); - - var row = grid.addRow(); - var colNether = row.addColumn(0.5, GridLayout.GridValueType.PERCENTAGE); - var colEnd = row.addColumn(0.5, GridLayout.GridValueType.PERCENTAGE); - - row = colNether.addRow(GridLayout.VerticalAlignment.CENTER); - row.addString(Component.literal("The Nether"), GridLayout.Alignment.CENTER, this); - - row = colEnd.addRow(GridLayout.VerticalAlignment.CENTER); - row.addString(Component.literal("The End"), GridLayout.Alignment.CENTER, this); - - grid.addSpacerRow(15); - row = grid.addRow(); - row.addFiller(); - row.addButton(CommonComponents.GUI_DONE, BUTTON_HEIGHT, font, (button) -> { - //TODO: update settings - onClose(); - }); - grid.addSpacerRow(10); - } - - private void updateSettings() { - - } - - private static WorldCreationContext.Updater worldConfiguration(FlatLevelGeneratorSettings flatLevelGeneratorSettings) { - return (frozen, worldGenSettings) -> { - Registry registry = frozen.registryOrThrow(Registry.STRUCTURE_SET_REGISTRY); - ChunkGenerator chunkGenerator = new FlatLevelSource(registry, flatLevelGeneratorSettings); - return WorldGenSettings.replaceOverworldGenerator(frozen, worldGenSettings, chunkGenerator); - }; - } -} diff --git a/src/main/resources/assets/bclib/lang/de_de.json b/src/main/resources/assets/bclib/lang/de_de.json index 450b8e20..fba406a1 100644 --- a/src/main/resources/assets/bclib/lang/de_de.json +++ b/src/main/resources/assets/bclib/lang/de_de.json @@ -50,5 +50,10 @@ "title.bclib.datafixer.error.continue": "Continue and Mark as Fixed", "title.config.bclib.main.ui.suppressExperimentalDialogOnLoad": "Disable Experimental Warning Screen on Load", "tooltip.bclib.place_on": "Lebt auf: %s", - "generator.bclib.normal": "BetterX" + "generator.bclib.normal": "BetterX", + "title.screen.bclib.worldgen.main": "Welt-Generator Eigenschaften", + "title.bclib.the_nether": "Nether", + "title.bclib.the_end": "Das Ende", + "title.screen.bclib.worldgen.custom_biome_source": "Benutzerdefinierte Biomquelle verwenden", + "title.screen.bclib.worldgen.legacy_square": "Legacy-Verteilung (1.17)" } \ No newline at end of file diff --git a/src/main/resources/assets/bclib/lang/en_us.json b/src/main/resources/assets/bclib/lang/en_us.json index 43df52e3..d4218432 100644 --- a/src/main/resources/assets/bclib/lang/en_us.json +++ b/src/main/resources/assets/bclib/lang/en_us.json @@ -51,5 +51,10 @@ "title.config.bclib.client.rendering.customFogRendering": "Custom Fog Rendering", "title.config.bclib.client.rendering.netherThickFog": "Nether Thick Fog", "tooltip.bclib.place_on": "Survives on: %s", - "generator.bclib.normal": "BetterX" + "generator.bclib.normal": "BetterX", + "title.screen.bclib.worldgen.main": "World Generator Settings", + "title.bclib.the_nether": "The Nether", + "title.bclib.the_end": "The End", + "title.screen.bclib.worldgen.custom_biome_source": "Use Custom Biome Source", + "title.screen.bclib.worldgen.legacy_square": "Use Legacy Map (1.17)" } \ No newline at end of file