1 package com.irtimaled.bbor.client.gui;
3 import com.irtimaled.bbor.client.ClientRenderer;
4 import com.irtimaled.bbor.client.config.ConfigManager;
5 import com.irtimaled.bbor.client.interop.ClientInterop;
6 import com.irtimaled.bbor.common.BoundingBoxType;
7 import net.minecraft.SharedConstants;
8 import net.minecraft.client.gui.screen.Screen;
9 import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
10 import net.minecraft.client.resource.language.I18n;
12 public class SettingsScreen extends ListScreen {
13 private static final String pillagerOutpostVersionPattern = "(?:1\\.1[4-9]|1\\.[2-9][0-9]|18w(?:4[7-9]|5[0-9])|19w|2[0-9]w).*";
14 private static final String bastionRemnantVersionPattern = "(?:1\\.1[6-9]|1\\.[2-9][0-9]|20w(?:1[6-9]|[2-5][0-9])|2[1-9]w).*";
15 private static final String netherFossilVersionPattern = "(?:1\\.1[6-9]|1\\.[2-9][0-9]|20w(?:1[1-9]|[2-5][0-9])|2[1-9]w).*";
17 public static void show() {
18 ClientInterop.displayScreen(new SettingsScreen(null));
21 SettingsScreen(Screen lastScreen) {
26 protected void onDoneClicked() {
27 ConfigManager.saveConfig();
28 super.onDoneClicked();
32 protected ControlList buildList(int top, int bottom) {
33 String version = SharedConstants.getGameVersion().getName();
34 ControlList controlList = new ControlList(this.width, this.height, top, bottom);
35 if (this.client.world != null) controlList.setTransparentBackground();
39 width -> new BoolButton(width, I18n.translate("bbor.options.active"), this.client.world != null) {
41 public void appendNarrations(NarrationMessageBuilder narrationMessageBuilder) {
42 this.appendDefaultNarrations(narrationMessageBuilder);
46 public void onPressed() {
47 ClientRenderer.toggleActive();
51 protected boolean getValue() {
52 return ClientRenderer.getActive();
55 width -> new BoolSettingButton(width, I18n.translate("bbor.options.outerBoxOnly"), ConfigManager.outerBoxesOnly),
56 width -> new BoolSettingButton(width, I18n.translate("bbor.options.fill"), ConfigManager.fill))
57 .section(I18n.translate("bbor.features.spawnChunks"),
58 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.spawnChunks"), BoundingBoxType.WorldSpawn),
59 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.lazyChunks"), BoundingBoxType.LazySpawnChunks),
60 width -> new MaxYSettingSlider(width, 39, ConfigManager.worldSpawnMaxY))
61 .section(I18n.translate("bbor.features.slimeChunks"),
62 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.slimeChunks"), BoundingBoxType.SlimeChunks),
63 width -> new MaxYSettingSlider(width, 39, ConfigManager.slimeChunkMaxY))
64 .section(I18n.translate("bbor.features.biomeBorders"),
65 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.biomeBorders"), BoundingBoxType.BiomeBorder),
66 width -> new MaxYSettingSlider(width, 1, ConfigManager.biomeBordersMaxY),
67 width -> new IntSettingSlider(width, 1, 3, "bbor.options.distance", ConfigManager.biomeBordersRenderDistance)
68 .addDisplayValue(1, I18n.translate("bbor.options.distance.nearest"))
69 .addDisplayValue(2, I18n.translate("bbor.options.distance.nearer"))
70 .addDisplayValue(3, I18n.translate("bbor.options.distance.normal")))
71 .section(I18n.translate("bbor.features.flowerForests"),
72 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.flowerForests"), BoundingBoxType.FlowerForest),
73 width -> new IntSettingSlider(width, 1, 3, "bbor.options.distance", ConfigManager.flowerForestsRenderDistance)
74 .addDisplayValue(1, I18n.translate("bbor.options.distance.nearest"))
75 .addDisplayValue(2, I18n.translate("bbor.options.distance.nearer"))
76 .addDisplayValue(3, I18n.translate("bbor.options.distance.normal")))
77 .section(I18n.translate("bbor.features.bedrockCeilingBlocks"),
78 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.bedrockCeilingBlocks"), BoundingBoxType.BedrockCeiling))
79 .section(I18n.translate("bbor.features.mobSpawners"),
80 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.mobSpawners"), BoundingBoxType.MobSpawner),
81 width -> new BoolSettingButton(width, I18n.translate("bbor.features.mobSpawners.spawnArea"), ConfigManager.renderMobSpawnerSpawnArea),
82 width -> new BoolSettingButton(width, I18n.translate("bbor.features.mobSpawners.activationLines"), ConfigManager.renderMobSpawnerActivationLines))
83 .section(I18n.translate("bbor.sections.beaconsAndConduits"),
84 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.beacons"), BoundingBoxType.Beacon),
85 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.conduits"), BoundingBoxType.Conduit),
86 width -> new BoolSettingButton(width, I18n.translate("bbor.features.conduits.mobHarmArea"), ConfigManager.renderConduitMobHarmArea))
87 .section(I18n.translate("bbor.features.spawnableBlocks"),
88 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.spawnableBlocks"), BoundingBoxType.SpawnableBlocks),
89 width -> new IntSettingSlider(width, 1, 3, "bbor.options.distance.y", ConfigManager.spawnableBlocksRenderHeight)
90 .addDisplayValue(1, "2")
91 .addDisplayValue(2, "4")
92 .addDisplayValue(3, "8"),
93 width -> new IntSettingSlider(width, 1, 3, "bbor.options.distance.xz", ConfigManager.spawnableBlocksRenderWidth)
94 .addDisplayValue(1, "8")
95 .addDisplayValue(2, "16")
96 .addDisplayValue(3, "32"))
97 .section(I18n.translate("bbor.features.spawningSpheres"),
98 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.spawningSpheres"), BoundingBoxType.AFKSphere),
99 width -> new BoolSettingButton(width, I18n.translate("bbor.features.spawnableBlocks"), ConfigManager.renderAFKSpawnableBlocks))
100 .section(I18n.translate("bbor.tabs.structures"),
101 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.desertTemples"), BoundingBoxType.DesertTemple),
102 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.jungleTemples"), BoundingBoxType.JungleTemple),
103 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.witchHuts"), BoundingBoxType.WitchHut),
104 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.mansions"), BoundingBoxType.Mansion),
105 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.monuments"), BoundingBoxType.OceanMonument),
106 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.igloos"), BoundingBoxType.Igloo),
107 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.oceanRuins"), BoundingBoxType.OceanRuin),
108 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.buriedTreasure"), BoundingBoxType.BuriedTreasure),
109 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.shipwrecks"), BoundingBoxType.Shipwreck),
110 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.strongholds"), BoundingBoxType.Stronghold),
111 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.mineshafts"), BoundingBoxType.MineShaft),
112 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.villages"), BoundingBoxType.Village),
113 width -> version.matches(pillagerOutpostVersionPattern) ? new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.pillagerOutposts"), BoundingBoxType.PillagerOutpost) : null,
114 width -> version.matches(bastionRemnantVersionPattern) ? new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.ruinedPortal"), BoundingBoxType.RuinedPortal) : null,
115 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.fortresses"), BoundingBoxType.NetherFortress),
116 width -> version.matches(netherFossilVersionPattern) ? new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.netherFossils"), BoundingBoxType.NetherFossil) : null,
117 width -> version.matches(bastionRemnantVersionPattern) ? new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.bastionRemnants"), BoundingBoxType.BastionRemnant) : null,
118 width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.endCities"), BoundingBoxType.EndCity));