]> git.lizzy.rs Git - LightOverlay.git/blob - src/main/java/me/shedaniel/lightoverlay/LightOverlayCloth.java
48aec5ce87bfaa99a01571a5f10602236f122927
[LightOverlay.git] / src / main / java / me / shedaniel / lightoverlay / LightOverlayCloth.java
1 package me.shedaniel.lightoverlay;
2
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.resources.I18n;
7 import net.minecraft.util.math.MathHelper;
8 import net.minecraftforge.fml.ExtensionPoint;
9 import net.minecraftforge.fml.ModLoadingContext;
10
11 import java.util.Locale;
12 import java.util.Optional;
13
14 public class LightOverlayCloth {
15     public static void register() {
16         ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY, () -> (client, parent) -> {
17             ConfigBuilder builder = ConfigBuilder.create().setParentScreen(parent).setTitle("key.lightoverlay.category");
18             
19             ConfigEntryBuilder eb = builder.getEntryBuilder();
20             ConfigCategory general = builder.getOrCreateCategory("config.lightoverlay-forge.general");
21             general.addEntry(eb.startIntSlider("config.lightoverlay-forge.reach", LightOverlayClient.reach, 1, 64).setDefaultValue(12).setTextGetter(integer -> "Reach: " + integer + " Blocks").setSaveConsumer(integer -> LightOverlayClient.reach = integer).build());
22             general.addEntry(eb.startIntSlider("config.lightoverlay-forge.crossLevel", LightOverlayClient.crossLevel, 0, 15).setDefaultValue(7).setTextGetter(integer -> "Cross Level: " + integer).setSaveConsumer(integer -> LightOverlayClient.crossLevel = integer).build());
23             general.addEntry(eb.startBooleanToggle("config.lightoverlay-forge.showNumber", LightOverlayClient.showNumber).setDefaultValue(false).setSaveConsumer(bool -> LightOverlayClient.showNumber = bool).build());
24             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());
25             general.addEntry(eb.startStrField("config.lightoverlay-forge.yellowColor", "#" + toStringColor(LightOverlayClient.yellowColor)).setDefaultValue("#FFFF00").setSaveConsumer(str -> LightOverlayClient.yellowColor = toIntColor(str)).setErrorSupplier(s -> {
26                 if (!s.startsWith("#") || s.length() != 7 || !isInt(s.substring(1)))
27                     return Optional.of(I18n.format("config.lightoverlay-forge.invalidColor"));
28                 else
29                     return Optional.empty();
30             }).build());
31             general.addEntry(eb.startStrField("config.lightoverlay-forge.redColor", "#" + toStringColor(LightOverlayClient.redColor)).setDefaultValue("#FF0000").setSaveConsumer(str -> LightOverlayClient.redColor = toIntColor(str)).setErrorSupplier(s -> {
32                 if (!s.startsWith("#") || s.length() != 7 || !isInt(s.substring(1)))
33                     return Optional.of(I18n.format("config.lightoverlay-forge.invalidColor"));
34                 else
35                     return Optional.empty();
36             }).build());
37             
38             return builder.setSavingRunnable(() -> {
39                 try {
40                     LightOverlayClient.saveConfig(LightOverlayClient.configFile);
41                 } catch (Exception e) {
42                     e.printStackTrace();
43                 }
44                 LightOverlayClient.loadConfig(LightOverlayClient.configFile);
45             }).build();
46         });
47     }
48     
49     private static boolean isInt(String s) {
50         try {
51             Integer.parseInt(s, 16);
52             return true;
53         } catch (NumberFormatException e) {
54             return false;
55         }
56     }
57     
58     private static int toIntColor(String str) {
59         String substring = str.substring(1);
60         int r = Integer.parseInt(substring.substring(0, 2), 16);
61         int g = Integer.parseInt(substring.substring(2, 4), 16);
62         int b = Integer.parseInt(substring.substring(4, 6), 16);
63         return (r << 16) + (g << 8) + b;
64     }
65     
66     private static String toStringColor(int toolColor) {
67         String r = Integer.toHexString((toolColor >> 16) & 0xFF);
68         String g = Integer.toHexString((toolColor >> 8) & 0xFF);
69         String b = Integer.toHexString(toolColor & 0xFF);
70         if (r.length() == 1)
71             r = "0" + r;
72         if (g.length() == 1)
73             g = "0" + g;
74         if (b.length() == 1)
75             b = "0" + b;
76         return (r + g + b).toUpperCase(Locale.ROOT);
77     }
78 }