1 package me.shedaniel.lightoverlay;
3 import me.shedaniel.forge.clothconfig2.api.ConfigBuilder;
4 import me.shedaniel.forge.clothconfig2.api.ConfigCategory;
5 import me.shedaniel.forge.clothconfig2.api.ConfigEntryBuilder;
6 import net.minecraft.client.Minecraft;
7 import net.minecraft.client.gui.screen.Screen;
8 import net.minecraft.client.resources.I18n;
9 import net.minecraft.util.math.MathHelper;
10 import net.minecraftforge.fml.ExtensionPoint;
11 import net.minecraftforge.fml.ModLoadingContext;
13 import java.util.Locale;
14 import java.util.Optional;
15 import java.util.function.BiFunction;
17 public class LightOverlayCloth {
18 public static void register() {
19 ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY, () -> (BiFunction<Minecraft, Screen, Screen>) (client, parent) -> {
20 ConfigBuilder builder = ConfigBuilder.create().setParentScreen(parent).setTitle("key.lightoverlay.category");
22 ConfigEntryBuilder eb = builder.getEntryBuilder();
23 ConfigCategory general = builder.getOrCreateCategory("config.lightoverlay-forge.general");
24 general.addEntry(eb.startIntSlider("config.lightoverlay-forge.reach", LightOverlayClient.reach, 1, 50).setDefaultValue(7).setTextGetter(integer -> "Reach: " + integer + " Blocks").setSaveConsumer(integer -> LightOverlayClient.reach = integer).build());
25 general.addEntry(eb.startIntSlider("config.lightoverlay-forge.lineWidth", MathHelper.floor(LightOverlayClient.lineWidth * 100), 100, 700).setDefaultValue(100).setTextGetter(integer -> "Light Width: " + LightOverlayClient.FORMAT.format(integer / 100d)).setSaveConsumer(integer -> LightOverlayClient.lineWidth = integer / 100f).build());
26 general.addEntry(eb.startStrField("config.lightoverlay-forge.yellowColor", "#" + toStringColor(LightOverlayClient.yellowColor)).setDefaultValue("#FFFF00").setSaveConsumer(str -> LightOverlayClient.yellowColor = toIntColor(str)).setErrorSupplier(s -> {
27 if (!s.startsWith("#") || s.length() != 7 || !isInt(s.substring(1)))
28 return Optional.of(I18n.format("config.lightoverlay-forge.invalidColor"));
30 return Optional.empty();
32 general.addEntry(eb.startStrField("config.lightoverlay-forge.redColor", "#" + toStringColor(LightOverlayClient.redColor)).setDefaultValue("#FF0000").setSaveConsumer(str -> LightOverlayClient.redColor = toIntColor(str)).setErrorSupplier(s -> {
33 if (!s.startsWith("#") || s.length() != 7 || !isInt(s.substring(1)))
34 return Optional.of(I18n.format("config.lightoverlay-forge.invalidColor"));
36 return Optional.empty();
39 return builder.setSavingRunnable(() -> {
41 LightOverlayClient.saveConfig(LightOverlayClient.configFile);
42 } catch (Exception e) {
45 LightOverlayClient.loadConfig(LightOverlayClient.configFile);
50 private static boolean isInt(String s) {
52 Integer.parseInt(s, 16);
54 } catch (NumberFormatException e) {
59 private static int toIntColor(String str) {
60 String substring = str.substring(1);
61 int r = Integer.parseInt(substring.substring(0, 2), 16);
62 int g = Integer.parseInt(substring.substring(2, 4), 16);
63 int b = Integer.parseInt(substring.substring(4, 6), 16);
64 return (r << 16) + (g << 8) + b;
67 private static String toStringColor(int toolColor) {
68 String r = Integer.toHexString((toolColor >> 16) & 0xFF);
69 String g = Integer.toHexString((toolColor >> 8) & 0xFF);
70 String b = Integer.toHexString((toolColor >> 0) & 0xFF);
77 return (r + g + b).toUpperCase(Locale.ROOT);