diff --git a/gradle.properties b/gradle.properties index 8fbef7b..1bd21c4 100755 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ org.gradle.jvmargs=-Xmx1G loader_version=0.11.3 # Mod Properties - mod_version = 0.2.4 + mod_version = 0.2.5 maven_group = eu.midnightdust archives_base_name = midnightlib diff --git a/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java b/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java index 134ef4c..48e5831 100755 --- a/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java +++ b/src/main/java/eu/midnightdust/core/config/MidnightLibConfig.java @@ -9,6 +9,8 @@ public class MidnightLibConfig extends MidnightConfig { public static boolean config_screen_list = !FabricLoader.getInstance().isModLoaded("modmenu"); @Entry // Change the style of the title in MidnightConfig public static TitleStyle titleStyle = MidnightConfig.useTooltipForTitle ? TitleStyle.TOOLTIP : TitleStyle.TEXT; + @Entry // Change the texture of the background in MidnightConfig + public static String background_texture = "minecraft:textures/block/deepslate.png"; @Comment public static Comment midnighthats_description; @Entry // Enable or disable event hats public static boolean event_hats = true; diff --git a/src/main/java/eu/midnightdust/core/mixin/MixinEntryListWidget.java b/src/main/java/eu/midnightdust/core/mixin/MixinEntryListWidget.java new file mode 100755 index 0000000..c1421b9 --- /dev/null +++ b/src/main/java/eu/midnightdust/core/mixin/MixinEntryListWidget.java @@ -0,0 +1,23 @@ +package eu.midnightdust.core.mixin; + +import com.mojang.blaze3d.systems.RenderSystem; +import eu.midnightdust.core.config.MidnightLibConfig; +import net.minecraft.client.gui.widget.EntryListWidget; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.Identifier; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.Locale; + +@Mixin(EntryListWidget.class) +public abstract class MixinEntryListWidget { + + @Inject(at = @At(value = "INVOKE",target = "Lcom/mojang/blaze3d/systems/RenderSystem;setShaderTexture(ILnet/minecraft/util/Identifier;)V",shift = At.Shift.AFTER), method = "render", cancellable = true) + private void custom_background(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) { + if (!MidnightLibConfig.background_texture.equals("") && this.getClass().toString().toLowerCase(Locale.ROOT).contains("midnight")) + RenderSystem.setShaderTexture(0, Identifier.tryParse(MidnightLibConfig.background_texture)); + } +} diff --git a/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java b/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java index 1dbb3eb..9dff755 100755 --- a/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java +++ b/src/main/java/eu/midnightdust/core/screen/MidnightConfigOverviewScreen.java @@ -29,6 +29,7 @@ public class MidnightConfigOverviewScreen extends Screen { this.addDrawableChild(new ButtonWidget(this.width / 2 - 100, this.height - 28, 200, 20, ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).openScreen(parent))); this.list = new MidnightOverviewListWidget(this.client, this.width, this.height, 32, this.height - 32, 25); + if (this.client != null && this.client.world != null) this.list.setRenderBackground(false); this.addSelectableChild(this.list); MidnightConfig.configClass.forEach((modid, configClass) -> { list.addButton(new ButtonWidget(this.width / 2 - 100, this.height - 28, 200, 20, new TranslatableText(modid +".midnightconfig.title"), (button) -> { diff --git a/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java b/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java index ba25cf4..e9a981c 100755 --- a/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java +++ b/src/main/java/eu/midnightdust/lib/config/MidnightConfig.java @@ -39,25 +39,28 @@ import java.util.function.Function; import java.util.function.Predicate; import java.util.regex.Pattern; -// MidnightConfig v1.0.4 -// Single class config library - feel free to copy! -// Changelog: -// - 1.0.4: -// - Number field length is now configurable -// - Fixed number fields being empty -// - 1.0.3: -// - Text field length is now configurable -// - Better separation of client and server -// - 1.0.2: -// - Update to 21w20a -// - 1.0.1: -// - Fixed buttons not working in fullscreen -// - 1.0.0: -// - The config screen no longer shows the entries of all instances of MidnightConfig -// - Compatible with servers! -// - Scrollable! -// - Comment support! -// - Fresh New Design +/* MidnightConfig v1.0.5 + Single class config library - feel free to copy! + Changelog: + - 1.0.5: + - Custom lang keys + - Transparent list background when in game + - 1.0.4: + - Number field length is now configurable + - Fixed number fields being empty + - 1.0.3: + - Text field length is now configurable + - Better separation of client and server + - 1.0.2: + - Update to 21w20a + - 1.0.1: + - Fixed buttons not working in fullscreen + - 1.0.0: + - The config screen no longer shows the entries of all instances of MidnightConfig + - Compatible with servers! + - Scrollable! + - Comment support! + - Fresh New Design */ /** Based on https://github.com/Minenash/TinyConfig * Credits to Minenash */ @@ -82,6 +85,7 @@ public class MidnightConfig { String tempValue; boolean inLimits = true; String id; + TranslatableText name; } public static final Map> configClass = new HashMap<>(); @@ -123,6 +127,7 @@ public class MidnightConfig { info.id = modid; if (e != null) { + if (!e.name().equals("")) info.name = new TranslatableText(e.name()); if (type == int.class) textField(info, Integer::parseInt, INTEGER_ONLY, e.min(), e.max(), true); else if (type == double.class) textField(info, Double::parseDouble, DECIMAL_ONLY, e.min(), e.max(), false); else if (type == String.class) { @@ -245,10 +250,11 @@ public class MidnightConfig { })); this.list = new MidnightConfigListWidget(this.client, this.width, this.height, 32, this.height - 32, 25); + if (this.client != null && this.client.world != null) this.list.setRenderBackground(false); this.addSelectableChild(this.list); for (EntryInfo info : entries) { if (info.id.equals(modid)) { - TranslatableText name = new TranslatableText(translationPrefix + info.field.getName()); + TranslatableText name = Objects.requireNonNullElseGet(info.name, () -> new TranslatableText(translationPrefix + info.field.getName())); ButtonWidget resetButton = new ButtonWidget(width - 155, 0, 40, 20, new LiteralText("Reset").formatted(Formatting.RED), (button -> { info.value = info.defaultValue; info.tempValue = info.value.toString(); @@ -378,6 +384,7 @@ public class MidnightConfig { int width() default 100; double min() default Double.MIN_NORMAL; double max() default Double.MAX_VALUE; + String name() default ""; } @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface Comment {} diff --git a/src/main/java/eu/midnightdust/lib/config/MidnightConfigExample.java b/src/main/java/eu/midnightdust/lib/config/MidnightConfigExample.java index 744ecac..91a581b 100755 --- a/src/main/java/eu/midnightdust/lib/config/MidnightConfigExample.java +++ b/src/main/java/eu/midnightdust/lib/config/MidnightConfigExample.java @@ -12,7 +12,7 @@ public class MidnightConfigExample extends MidnightConfig { @Entry public static int fabric = 16777215; // Example for a int option @Entry public static double world = 1.4D; // Example for a double option @Entry public static boolean showInfo = true; // Example for a boolean option - @Entry public static String name = "Hi"; // Example for a string option + @Entry public static String name = "Hi"; // Example for a string option @Entry public static TestEnum testEnum = TestEnum.FABRIC; // Example for a enum option public static enum TestEnum { // Enums allow the user to cycle through predefined options QUILT, FABRIC diff --git a/src/main/resources/assets/midnightlib/lang/de_de.json b/src/main/resources/assets/midnightlib/lang/de_de.json new file mode 100755 index 0000000..528ce1f --- /dev/null +++ b/src/main/resources/assets/midnightlib/lang/de_de.json @@ -0,0 +1,17 @@ +{ + "midnightlib.overview.title":"MidnightConfig Übersicht", + "midnightlib.midnightconfig.title":"MidnightLib Konfiguration", + "midnightlib.midnightconfig.midnightlib_description":"§nMidnightLib", + "midnightlib.midnightconfig.config_screen_list":"Konfigurationsliste aktivieren", + "midnightlib.midnightconfig.titleStyle":"Aussehen der Konfigurationsbildschirmtitel", + "midnightlib.midnightconfig.titleStyle.tooltip":"§cBenötigt Neustart!", + "midnightlib.midnightconfig.enum.TitleStyle.TEXT":"Text", + "midnightlib.midnightconfig.enum.TitleStyle.TOOLTIP":"Tooltip", + "midnightlib.midnightconfig.midnighthats_description":"§nMidnightHats", + "midnightlib.midnightconfig.event_hats":"Event Hüte", + "midnightlib.midnightconfig.special_hats":"Besondere Hüte", + "midnightlib.modrinth":"Modrinth", + "midnightlib.curseforge":"CurseForge", + "modmenu.descriptionTranslation.midnightlib": "Bibliothek für Mods von Team MidnightDust.\nBesitzt eine Konfigurationsschnittstelle, oft benutzten Code, und kosmetische Gegenstände.", + "modmenu.summaryTranslation.midnightlib": "Bibliothek für Mods von Team MidnightDust." +} \ No newline at end of file diff --git a/src/main/resources/midnightcore.mixins.json b/src/main/resources/midnightcore.mixins.json index 1ccff9c..49a5a32 100755 --- a/src/main/resources/midnightcore.mixins.json +++ b/src/main/resources/midnightcore.mixins.json @@ -3,7 +3,8 @@ "package": "eu.midnightdust.core.mixin", "compatibilityLevel": "JAVA_16", "client": [ - "MixinOptionsScreen" + "MixinOptionsScreen", + "MixinEntryListWidget" ], "injectors": { "defaultRequire": 1