diff --git a/omega-config-base/src/main/java/draylar/omegaconfig/OmegaConfig.java b/omega-config-base/src/main/java/draylar/omegaconfig/OmegaConfig.java index bd74c32..d354012 100644 --- a/omega-config-base/src/main/java/draylar/omegaconfig/OmegaConfig.java +++ b/omega-config-base/src/main/java/draylar/omegaconfig/OmegaConfig.java @@ -8,8 +8,6 @@ import draylar.omegaconfig.api.SyncableExclusionStrategy; import draylar.omegaconfig.exception.NoValidConstructorException; import io.netty.buffer.Unpooled; import net.fabricmc.api.ModInitializer; -import net.fabricmc.fabric.api.network.ServerSidePacketRegistry; -import net.fabricmc.fabric.api.networking.v1.ServerLoginNetworking; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.loader.api.FabricLoader; @@ -101,7 +99,7 @@ public class OmegaConfig implements ModInitializer { } } - private static void writeConfig(Class configClass, T instance) { + public static void writeConfig(Class configClass, T instance) { // Write the config to disk with the default values. String json = GSON.toJson(instance); @@ -199,7 +197,7 @@ public class OmegaConfig implements ModInitializer { } public static Path getConfigPath(Config config) { - return Paths.get(FabricLoader.getInstance().getConfigDir().toString(), String.format("%s.json", config.getFileName())); + return Paths.get(FabricLoader.getInstance().getConfigDir().toString(), String.format("%s.json", config.getName())); } public static boolean configExists(Config config) { diff --git a/omega-config-base/src/main/java/draylar/omegaconfig/mixin/ClientMixin.java b/omega-config-base/src/main/java/draylar/omegaconfig/mixin/ClientMixin.java index dc13ab7..b79c3f5 100644 --- a/omega-config-base/src/main/java/draylar/omegaconfig/mixin/ClientMixin.java +++ b/omega-config-base/src/main/java/draylar/omegaconfig/mixin/ClientMixin.java @@ -10,7 +10,6 @@ import net.minecraft.client.RunArgs; import net.minecraft.client.gui.screen.Screen; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; -import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -47,7 +46,7 @@ public class ClientMixin { // find configuration class by name for (Config config : OmegaConfig.getRegisteredConfigurations()) { - if (config.getFileName().equals(name)) { + if (config.getName().equals(name)) { // bring values from server to object Config server = OmegaConfig.GSON.fromJson(json, config.getClass()); @@ -83,7 +82,7 @@ public class ClientMixin { private void restoreConfigurations(Screen screen, CallbackInfo ci) { for(Config config : savedClientConfig) { for(Config potentiallySynced : OmegaConfig.getRegisteredConfigurations()) { - if(config.getFileName().equals(potentiallySynced.getFileName())) { + if(config.getName().equals(potentiallySynced.getName())) { boolean allConfigSyncs = Arrays.stream(config.getClass().getAnnotations()).anyMatch(annotation -> annotation instanceof Syncing); // mutate object in registered configurations diff --git a/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/OmegaConfigScreen.java b/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/OmegaConfigScreen.java index 4813d77..3341b62 100644 --- a/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/OmegaConfigScreen.java +++ b/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/OmegaConfigScreen.java @@ -50,7 +50,7 @@ public class OmegaConfigScreen extends Screen { Class unbox = TypeWidgets.unbox(field.getType()); // label - addChild(new LabelWidget(150, 5 + 20 * over, new LiteralText(field.getName()))); + addChild(new LabelWidget(150, 15 + 20 * over, new LiteralText(field.getName()))); // get value field.setAccessible(true); @@ -60,9 +60,9 @@ public class OmegaConfigScreen extends Screen { AbstractButtonWidget button; WidgetSupplier widgetSupplier = (WidgetSupplier) TypeWidgets.get(unbox); if(widgetSupplier != null) { - button = widgetSupplier.create(250, 5 + 20 * over, 50, 50, new LiteralText(field.getName()), value); + button = widgetSupplier.create(250, 5 + 25 * over, 50, 20, new LiteralText(field.getName()), value); } else { - button = new TextFieldWidget(client.textRenderer, 250, 5 + 20 * over, 50, 20, new LiteralText(field.getName())); + button = new TextFieldWidget(client.textRenderer, 250, 5 + 25 * over, 50, 20, new LiteralText(field.getName())); } fieldWidgets.put(field, new Pair<>(widgetSupplier, button)); @@ -114,9 +114,8 @@ public class OmegaConfigScreen extends Screen { @Override public void renderBackground(MatrixStack matrices) { - super.renderBackground(matrices); - - MinecraftClient.getInstance().getTextureManager().bindTexture(new Identifier("textures/block/dirt.png")); - drawTexture(matrices, 0, 0, 0, 0, 16, 16); + // TODO: option for transparent BG +// this.fillGradient(matrices, 0, 0, this.width, this.height, -1072689136, -804253680); + this.renderBackgroundTexture(0); } } diff --git a/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/widget/DoubleFieldWidget.java b/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/widget/DoubleFieldWidget.java new file mode 100644 index 0000000..e01531d --- /dev/null +++ b/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/widget/DoubleFieldWidget.java @@ -0,0 +1,27 @@ +package draylar.omegaconfiggui.api.screen.widget; + +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.widget.TextFieldWidget; +import net.minecraft.text.Text; + +public class DoubleFieldWidget extends TextFieldWidget { + + public DoubleFieldWidget(TextRenderer textRenderer, int x, int y, int width, int height, Text text) { + super(textRenderer, x, y, width, height, text); + } + + @Override + public void write(String string) { + try { + if(string.equals(".") && !getText().contains(".")) { + super.write(string); + } else { + Double.parseDouble(string); + super.write(string); + } + + } catch(NumberFormatException ignored) { + + } + } +} diff --git a/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/widget/supplier/DoubleWidgetSupplier.java b/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/widget/supplier/DoubleWidgetSupplier.java index 8846a53..57f1423 100644 --- a/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/widget/supplier/DoubleWidgetSupplier.java +++ b/omega-config-gui/src/main/java/draylar/omegaconfiggui/api/screen/widget/supplier/DoubleWidgetSupplier.java @@ -1,20 +1,34 @@ package draylar.omegaconfiggui.api.screen.widget.supplier; +import draylar.omegaconfiggui.api.screen.widget.DoubleFieldWidget; import draylar.omegaconfiggui.api.screen.widget.WidgetSupplier; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.widget.AbstractButtonWidget; -import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.text.LiteralText; -public class DoubleWidgetSupplier implements WidgetSupplier { +public class DoubleWidgetSupplier implements WidgetSupplier { @Override - public AbstractButtonWidget create(int x, int y, int width, int height, LiteralText prompt, Double value) { - return new TextFieldWidget(MinecraftClient.getInstance().textRenderer, x, y, width, height, new LiteralText(String.valueOf(value))); + public DoubleFieldWidget create(int x, int y, int width, int height, LiteralText prompt, Double value) { + LiteralText text = new LiteralText(String.valueOf(value)); + DoubleFieldWidget doubleField = new DoubleFieldWidget(MinecraftClient.getInstance().textRenderer, x, y, width, height, text); + doubleField.setText(text.asString()); + return doubleField; } @Override - public Double get(AbstractButtonWidget widget) { - return Double.parseDouble(widget.getMessage().asString()); + public Double get(DoubleFieldWidget widget) { + String message = widget.getText(); + + // if it is just a . or empty, return 0 + if(message.equals(".") || message.isEmpty()) { + return 0.0; + } + + // trim potential trailing . + if(message.indexOf(".") == message.length()) { + message = message.substring(0, message.length() - 1); + } + + return Double.parseDouble(message); } } diff --git a/src/testmod/java/draylar/omegatest/TestConfig.java b/src/testmod/java/draylar/omegatest/TestConfig.java index 73aad04..b727872 100644 --- a/src/testmod/java/draylar/omegatest/TestConfig.java +++ b/src/testmod/java/draylar/omegatest/TestConfig.java @@ -24,7 +24,7 @@ public class TestConfig implements Config { } @Override - public String getFileName() { + public String getName() { return "test-config"; }