From: Danielshe Date: Mon, 21 Oct 2019 09:48:21 +0000 (+0800) Subject: Add Cloth Config Forge X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=e2f4c59fa8afe82eda96e869163da3e9021af0c6;p=LightOverlay.git Add Cloth Config Forge --- diff --git a/build.gradle b/build.gradle index 717ec37..70c25b3 100644 --- a/build.gradle +++ b/build.gradle @@ -11,14 +11,14 @@ buildscript { apply plugin: 'net.minecraftforge.gradle' apply plugin: 'eclipse' -version = "3.4" +version = "3.6" group = "me.shedaniel" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "LightOverlay" sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' minecraft { - mappings channel: 'snapshot', version: '20190625-1.14.3' + mappings channel: 'snapshot', version: '20191019-1.14.3' runs { client { workingDirectory project.file('run') @@ -47,9 +47,13 @@ minecraft { } } -dependencies { - minecraft 'net.minecraftforge:forge:1.14.3-27.0.13' +repositories { + maven { url 'https://jitpack.io' } +} +dependencies { + minecraft 'net.minecraftforge:forge:1.14.4-28.1.61' + implementation 'com.github.shedaniel:ClothConfig:c70da9769d' } jar { diff --git a/src/main/java/me/shedaniel/lightoverlay/LightOverlay.java b/src/main/java/me/shedaniel/lightoverlay/LightOverlay.java index e214913..1c43866 100644 --- a/src/main/java/me/shedaniel/lightoverlay/LightOverlay.java +++ b/src/main/java/me/shedaniel/lightoverlay/LightOverlay.java @@ -1,20 +1,20 @@ package me.shedaniel.lightoverlay; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.loading.FMLEnvironment; @Mod("lightoverlay-forge") public class LightOverlay { public LightOverlay() { - DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { + if (FMLEnvironment.dist == Dist.CLIENT) { try { Class.forName("me.shedaniel.lightoverlay.LightOverlayClient").getDeclaredMethod("register").invoke(null); } catch (Exception e) { e.printStackTrace(); } - }); + } } } diff --git a/src/main/java/me/shedaniel/lightoverlay/LightOverlayClient.java b/src/main/java/me/shedaniel/lightoverlay/LightOverlayClient.java index f985d75..2f80849 100644 --- a/src/main/java/me/shedaniel/lightoverlay/LightOverlayClient.java +++ b/src/main/java/me/shedaniel/lightoverlay/LightOverlayClient.java @@ -1,14 +1,19 @@ package me.shedaniel.lightoverlay; import com.mojang.blaze3d.platform.GlStateManager; +import me.shedaniel.forge.clothconfig2.api.ConfigBuilder; +import me.shedaniel.forge.clothconfig2.api.ConfigCategory; +import me.shedaniel.forge.clothconfig2.impl.ConfigEntryBuilderImpl; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.player.ClientPlayerEntity; +import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.renderer.ActiveRenderInfo; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.resources.I18n; import net.minecraft.client.settings.KeyBinding; import net.minecraft.client.util.InputMappings; import net.minecraft.entity.Entity; @@ -19,6 +24,7 @@ import net.minecraft.tags.BlockTags; import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.util.text.TranslationTextComponent; @@ -31,6 +37,8 @@ import net.minecraftforge.client.settings.KeyConflictContext; import net.minecraftforge.client.settings.KeyModifier; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.ExtensionPoint; +import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.client.registry.ClientRegistry; import java.io.File; @@ -38,7 +46,10 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.text.DecimalFormat; +import java.util.Locale; +import java.util.Optional; import java.util.Properties; +import java.util.function.BiFunction; public class LightOverlayClient { @@ -69,6 +80,84 @@ public class LightOverlayClient { increaseLineWidth = registerKeybind(INCREASE_LINE_WIDTH_KEYBIND, InputMappings.Type.KEYSYM, -1, KEYBIND_CATEGORY); decreaseLineWidth = registerKeybind(DECREASE_LINE_WIDTH_KEYBIND, InputMappings.Type.KEYSYM, -1, KEYBIND_CATEGORY); MinecraftForge.EVENT_BUS.register(LightOverlayClient.class); + + ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.CONFIGGUIFACTORY, () -> (BiFunction) (client, parent) -> { + ConfigBuilder builder = ConfigBuilder.create().setParentScreen(parent).setTitle("key.lightoverlay.category"); + + ConfigEntryBuilderImpl eb = builder.getEntryBuilder(); + ConfigCategory general = builder.getOrCreateCategory("config.lightoverlay-forge.general"); + 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() + ); + 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() + ); + general.addEntry(eb.startStrField("config.lightoverlay-forge.yellowColor", "#" + toStringColor(LightOverlayClient.yellowColor)) + .setDefaultValue("#FFFF00") + .setSaveConsumer(str -> LightOverlayClient.yellowColor = toIntColor(str)) + .setErrorSupplier(s -> { + if (!s.startsWith("#") || s.length() != 7 || !isInt(s.substring(1))) + return Optional.of(I18n.format("config.lightoverlay-forge.invalidColor")); + else return Optional.empty(); + }) + .build() + ); + general.addEntry(eb.startStrField("config.lightoverlay-forge.redColor", "#" + toStringColor(LightOverlayClient.redColor)) + .setDefaultValue("#FF0000") + .setSaveConsumer(str -> LightOverlayClient.redColor = toIntColor(str)) + .setErrorSupplier(s -> { + if (!s.startsWith("#") || s.length() != 7 || !isInt(s.substring(1))) + return Optional.of(I18n.format("config.lightoverlay-forge.invalidColor")); + else return Optional.empty(); + }) + .build() + ); + + return builder.setSavingRunnable(() -> { + try { + LightOverlayClient.saveConfig(LightOverlayClient.configFile); + } catch (Exception e) { + e.printStackTrace(); + } + LightOverlayClient.loadConfig(LightOverlayClient.configFile); + }).build(); + }); + } + + private static boolean isInt(String s) { + try { + Integer.parseInt(s, 16); + return true; + } catch (NumberFormatException e) { + return false; + } + } + + private static int toIntColor(String str) { + String substring = str.substring(1); + int r = Integer.parseInt(substring.substring(0, 2), 16); + int g = Integer.parseInt(substring.substring(2, 4), 16); + int b = Integer.parseInt(substring.substring(4, 6), 16); + return (r << 16) + (g << 8) + b; + } + + private static String toStringColor(int toolColor) { + String r = Integer.toHexString((toolColor >> 16) & 0xFF); + String g = Integer.toHexString((toolColor >> 8) & 0xFF); + String b = Integer.toHexString((toolColor >> 0) & 0xFF); + if (r.length() == 1) + r = "0" + r; + if (g.length() == 1) + g = "0" + g; + if (b.length() == 1) + b = "0" + b; + return (r + g + b).toUpperCase(Locale.ROOT); } public static CrossType getCrossType(BlockPos pos, World world, PlayerEntity playerEntity) { diff --git a/src/main/resources/assets/lightoverlay-forge/lang/en_us.json b/src/main/resources/assets/lightoverlay-forge/lang/en_us.json index e1fad30..4163c9b 100755 --- a/src/main/resources/assets/lightoverlay-forge/lang/en_us.json +++ b/src/main/resources/assets/lightoverlay-forge/lang/en_us.json @@ -6,5 +6,11 @@ "key.lightoverlay-forge.increase_line_width": "Increase Light Overlay's Line Width", "key.lightoverlay-forge.decrease_line_width": "Decrease Light Overlay's Line Width", "text.lightoverlay-forge.current_reach": "The current reach is %d!", - "text.lightoverlay-forge.current_line_width": "The current line width is %s!" + "text.lightoverlay-forge.current_line_width": "The current line width is %s!", + "config.lightoverlay-forge.general": "General", + "config.lightoverlay-forge.reach": "Reach:", + "config.lightoverlay-forge.lineWidth": "Line Width:", + "config.lightoverlay-forge.yellowColor": "Yellow Color:", + "config.lightoverlay-forge.redColor": "Red Color:", + "config.lightoverlay-forge.invalidColor": "Invalid Color" } \ No newline at end of file