]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/gui/SettingsScreen.java
Rewrite line renderer
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / gui / SettingsScreen.java
1 package com.irtimaled.bbor.client.gui;
2
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;
11
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).*";
16
17     public static void show() {
18         ClientInterop.displayScreen(new SettingsScreen(null));
19     }
20
21     SettingsScreen(Screen lastScreen) {
22         super(lastScreen);
23     }
24
25     @Override
26     protected void onDoneClicked() {
27         ConfigManager.saveConfig();
28         super.onDoneClicked();
29     }
30
31     @Override
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();
36
37         controlList
38                 .section(null,
39                         width -> new BoolButton(width, I18n.translate("bbor.options.active"), this.client.world != null) {
40                             @Override
41                             public void appendNarrations(NarrationMessageBuilder narrationMessageBuilder) {
42                                 this.appendDefaultNarrations(narrationMessageBuilder);
43                             }
44
45                             @Override
46                             public void onPressed() {
47                                 ClientRenderer.toggleActive();
48                             }
49
50                             @Override
51                             protected boolean getValue() {
52                                 return ClientRenderer.getActive();
53                             }
54                         },
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                         width -> new IntSettingSlider(width, 1, 25, I18n.translate("bbor.options.lineWidthModifier"), ConfigManager.lineWidthModifier)
58                                 .addDisplayValueRange(1, 25))
59                 .section(I18n.translate("bbor.features.spawnChunks"),
60                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.spawnChunks"), BoundingBoxType.WorldSpawn),
61                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.lazyChunks"), BoundingBoxType.LazySpawnChunks),
62                         width -> new MaxYSettingSlider(width, 39, ConfigManager.worldSpawnMaxY))
63                 .section(I18n.translate("bbor.features.slimeChunks"),
64                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.slimeChunks"), BoundingBoxType.SlimeChunks),
65                         width -> new MaxYSettingSlider(width, 39, ConfigManager.slimeChunkMaxY))
66                 .section(I18n.translate("bbor.features.biomeBorders"),
67                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.biomeBorders"), BoundingBoxType.BiomeBorder),
68                         width -> new MaxYSettingSlider(width, 1, ConfigManager.biomeBordersMaxY),
69                         width -> new IntSettingSlider(width, 1, 3, "bbor.options.distance", ConfigManager.biomeBordersRenderDistance)
70                                 .addDisplayValue(1, I18n.translate("bbor.options.distance.nearest"))
71                                 .addDisplayValue(2, I18n.translate("bbor.options.distance.nearer"))
72                                 .addDisplayValue(3, I18n.translate("bbor.options.distance.normal")))
73                 .section(I18n.translate("bbor.features.flowerForests"),
74                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.flowerForests"), BoundingBoxType.FlowerForest),
75                         width -> new IntSettingSlider(width, 1, 3, "bbor.options.distance", ConfigManager.flowerForestsRenderDistance)
76                                 .addDisplayValue(1, I18n.translate("bbor.options.distance.nearest"))
77                                 .addDisplayValue(2, I18n.translate("bbor.options.distance.nearer"))
78                                 .addDisplayValue(3, I18n.translate("bbor.options.distance.normal")))
79                 .section(I18n.translate("bbor.features.bedrockCeilingBlocks"),
80                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.bedrockCeilingBlocks"), BoundingBoxType.BedrockCeiling))
81                 .section(I18n.translate("bbor.features.mobSpawners"),
82                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.mobSpawners"), BoundingBoxType.MobSpawner),
83                         width -> new BoolSettingButton(width, I18n.translate("bbor.features.mobSpawners.spawnArea"), ConfigManager.renderMobSpawnerSpawnArea),
84                         width -> new BoolSettingButton(width, I18n.translate("bbor.features.mobSpawners.activationLines"), ConfigManager.renderMobSpawnerActivationLines))
85                 .section(I18n.translate("bbor.sections.beaconsAndConduits"),
86                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.beacons"), BoundingBoxType.Beacon),
87                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.conduits"), BoundingBoxType.Conduit),
88                         width -> new BoolSettingButton(width, I18n.translate("bbor.features.conduits.mobHarmArea"), ConfigManager.renderConduitMobHarmArea))
89                 .section(I18n.translate("bbor.features.spawnableBlocks"),
90                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.spawnableBlocks"), BoundingBoxType.SpawnableBlocks),
91                         width -> new IntSettingSlider(width, 1, 3, "bbor.options.distance.y", ConfigManager.spawnableBlocksRenderHeight)
92                                 .addDisplayValue(1, "2")
93                                 .addDisplayValue(2, "4")
94                                 .addDisplayValue(3, "8"),
95                         width -> new IntSettingSlider(width, 1, 3, "bbor.options.distance.xz", ConfigManager.spawnableBlocksRenderWidth)
96                                 .addDisplayValue(1, "8")
97                                 .addDisplayValue(2, "16")
98                                 .addDisplayValue(3, "32"))
99                 .section(I18n.translate("bbor.features.spawningSpheres"),
100                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.features.spawningSpheres"), BoundingBoxType.AFKSphere),
101                         width -> new BoolSettingButton(width, I18n.translate("bbor.features.spawnableBlocks"), ConfigManager.renderAFKSpawnableBlocks))
102                 .section(I18n.translate("bbor.tabs.structures"),
103                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.desertTemples"), BoundingBoxType.DesertTemple),
104                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.jungleTemples"), BoundingBoxType.JungleTemple),
105                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.witchHuts"), BoundingBoxType.WitchHut),
106                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.mansions"), BoundingBoxType.Mansion),
107                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.monuments"), BoundingBoxType.OceanMonument),
108                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.igloos"), BoundingBoxType.Igloo),
109                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.oceanRuins"), BoundingBoxType.OceanRuin),
110                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.buriedTreasure"), BoundingBoxType.BuriedTreasure),
111                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.shipwrecks"), BoundingBoxType.Shipwreck),
112                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.strongholds"), BoundingBoxType.Stronghold),
113                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.mineshafts"), BoundingBoxType.MineShaft),
114                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.villages"), BoundingBoxType.Village),
115                         width -> version.matches(pillagerOutpostVersionPattern) ? new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.pillagerOutposts"), BoundingBoxType.PillagerOutpost) : null,
116                         width -> version.matches(bastionRemnantVersionPattern) ? new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.ruinedPortal"), BoundingBoxType.RuinedPortal) : null,
117                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.fortresses"), BoundingBoxType.NetherFortress),
118                         width -> version.matches(netherFossilVersionPattern) ? new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.netherFossils"), BoundingBoxType.NetherFossil) : null,
119                         width -> version.matches(bastionRemnantVersionPattern) ? new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.bastionRemnants"), BoundingBoxType.BastionRemnant) : null,
120                         width -> new BoundingBoxTypeButton(width, I18n.translate("bbor.structures.endCities"), BoundingBoxType.EndCity));
121         return controlList;
122     }
123 }