From 3ae53a4200eab3eff29392f213f198b9c3acd835 Mon Sep 17 00:00:00 2001 From: JFronny <33260128+jfronny@users.noreply.github.com> Date: Wed, 25 Nov 2020 21:58:21 +0100 Subject: [PATCH] Frex --- build.gradle | 4 +++ .../jfronny/respackopts/GuiFactory.java | 11 ++++---- .../io/gitlab/jfronny/respackopts/MMI.java | 2 +- .../jfronny/respackopts/Respackopts.java | 9 ++++++- .../respackopts/integration/FrexCompat.java | 26 +++++++++++++++++++ .../{ => integration}/LibCDCompat.java | 3 ++- .../mixin/ResourcePackEntryMixin.java | 15 +---------- src/main/resources/fabric.mod.json | 5 +++- 8 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java rename src/main/java/io/gitlab/jfronny/respackopts/{ => integration}/LibCDCompat.java (94%) diff --git a/build.gradle b/build.gradle index 544ecba..3672ddc 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,8 @@ group = project.maven_group repositories { maven { url = 'https://server.bbkr.space/artifactory/libs-release'; name = "Cotton" } + maven { url = "https://maven.dblsaiko.net/"; name = "dblsaiko" } + maven { url = "https://minecraft.curseforge.com/api/maven"; name = "CurseForge" } } dependencies { @@ -34,6 +36,8 @@ dependencies { } modApi "io.github.cottonmc:LibCD:3.0.3+1.16.3" + modCompile "grondag:frex-mc116:4.0+" + modCompile "grondag:canvas-mc116:1.0.+" } processResources { diff --git a/src/main/java/io/gitlab/jfronny/respackopts/GuiFactory.java b/src/main/java/io/gitlab/jfronny/respackopts/GuiFactory.java index f104cf1..db2a027 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/GuiFactory.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/GuiFactory.java @@ -42,7 +42,6 @@ public class GuiFactory { config.addEntry(entryBuilder.startBooleanToggle(getText(n, b), currentValue) .setDefaultValue(defaultValue) .setSaveConsumer(v -> { - Respackopts.updateShaders(); Respackopts.boolVals.get(screenId).put(n, v); }) .build()); @@ -57,7 +56,6 @@ public class GuiFactory { config.addEntry(entryBuilder.startDoubleField(getText(n, b), currentValue) .setDefaultValue(defaultValue) .setSaveConsumer(v -> { - Respackopts.updateShaders(); Respackopts.numVals.get(screenId).put(n, v); }) .build()); @@ -72,7 +70,6 @@ public class GuiFactory { config.addEntry(entryBuilder.startStrField(getText(n, b), currentValue) .setDefaultValue(defaultValue) .setSaveConsumer(v -> { - Respackopts.updateShaders(); Respackopts.strVals.get(screenId).put(n, v); }) .build()); @@ -84,14 +81,18 @@ public class GuiFactory { } } - public Screen buildGui(JsonObject source, String resourcepackid, Screen parent, Runnable respackReload) { + public Screen buildGui(JsonObject source, String resourcepackid, Screen parent) { try { ConfigBuilder builder; builder = ConfigBuilder.create() .setParentScreen(parent) .setTitle(getText(resourcepackid, "respackopts.title")); ConfigEntryBuilder entryBuilder = builder.entryBuilder(); - builder.setSavingRunnable(respackReload); + builder.setSavingRunnable(() -> { + System.out.println("Save"); + Respackopts.updateShaders(); + Respackopts.save(); + }); ConfigCategory config = builder.getOrCreateCategory(getText(resourcepackid, "respackopts.category")); buildCategory(source, resourcepackid, config, entryBuilder); return builder.build(); diff --git a/src/main/java/io/gitlab/jfronny/respackopts/MMI.java b/src/main/java/io/gitlab/jfronny/respackopts/MMI.java index 958f03c..9d0d90f 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/MMI.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/MMI.java @@ -19,7 +19,7 @@ public class MMI implements ModMenuApi { .setTitle(new TranslatableText("respackopts.mainconfig")); ConfigEntryBuilder entryBuilder = builder.entryBuilder(); builder.setSavingRunnable(() -> { - //TODO implement reload + Respackopts.updateShaders(); Respackopts.save(); }); Respackopts.resPackMetas.forEach((s, v) -> { diff --git a/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java b/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java index 1c54cd8..b0b518a 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/Respackopts.java @@ -12,6 +12,8 @@ import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.util.HashMap; +import java.util.HashSet; +import java.util.function.Consumer; @Environment(EnvType.CLIENT) public class Respackopts implements ClientModInitializer { @@ -24,10 +26,13 @@ public class Respackopts implements ClientModInitializer { public static HashMap resPackMetas = new HashMap<>(); public static final String ID = "respackopts"; static final Path p = FabricLoader.getInstance().getConfigDir().resolve("respackopts"); + public static final HashSet> shaderConsumers = new HashSet<>(); @Override public void onInitializeClient() { load(); Respackopts.updateShaders(); + if (FabricLoader.getInstance().isDevelopmentEnvironment()) + shaderConsumers.add(System.out::println); } public static void save() { @@ -114,6 +119,8 @@ public class Respackopts implements ClientModInitializer { sb.append(s1); } })); - System.out.println(sb.toString()); + for (Consumer consumer : shaderConsumers) { + consumer.accept(sb.toString()); + } } } diff --git a/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java b/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java new file mode 100644 index 0000000..f926db0 --- /dev/null +++ b/src/main/java/io/gitlab/jfronny/respackopts/integration/FrexCompat.java @@ -0,0 +1,26 @@ +package io.gitlab.jfronny.respackopts.integration; + +import grondag.frex.FrexInitializer; +import grondag.frex.api.config.ShaderConfig; +import io.gitlab.jfronny.respackopts.Respackopts; +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.util.Identifier; + +public class FrexCompat implements FrexInitializer { + String currentShaderCode = ""; + @Override + public void onInitalizeFrex() { + System.out.println("[respackopts] enabling canvas support"); + ShaderConfig.registerShaderConfigSupplier(new Identifier(Respackopts.ID, "config_supplier"), () -> currentShaderCode); + Respackopts.shaderConsumers.add((s) -> { + currentShaderCode = s; + try { + ShaderConfig.invalidateShaderConfig(); + } + catch (Throwable e) { + if (FabricLoader.getInstance().isDevelopmentEnvironment()) + e.printStackTrace(); + } + }); + } +} diff --git a/src/main/java/io/gitlab/jfronny/respackopts/LibCDCompat.java b/src/main/java/io/gitlab/jfronny/respackopts/integration/LibCDCompat.java similarity index 94% rename from src/main/java/io/gitlab/jfronny/respackopts/LibCDCompat.java rename to src/main/java/io/gitlab/jfronny/respackopts/integration/LibCDCompat.java index d886eb9..00b608e 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/LibCDCompat.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/integration/LibCDCompat.java @@ -1,8 +1,9 @@ -package io.gitlab.jfronny.respackopts; +package io.gitlab.jfronny.respackopts.integration; import io.github.cottonmc.libcd.api.CDSyntaxError; import io.github.cottonmc.libcd.api.condition.ConditionManager; import io.github.cottonmc.libcd.api.init.ConditionInitializer; +import io.gitlab.jfronny.respackopts.Respackopts; import net.minecraft.util.Identifier; import java.util.HashMap; diff --git a/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackEntryMixin.java b/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackEntryMixin.java index f560f2b..e0c63b8 100644 --- a/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackEntryMixin.java +++ b/src/main/java/io/gitlab/jfronny/respackopts/mixin/ResourcePackEntryMixin.java @@ -1,23 +1,14 @@ package io.gitlab.jfronny.respackopts.mixin; import com.mojang.blaze3d.systems.RenderSystem; -import io.github.prospector.modmenu.ModMenu; -import io.github.prospector.modmenu.gui.ModListEntry; -import io.github.prospector.modmenu.gui.ModMenuTexturedButtonWidget; -import io.github.prospector.modmenu.gui.ModsScreen; import io.gitlab.jfronny.respackopts.Respackopts; -import io.gitlab.jfronny.respackopts.TexturedButtonWidget; import io.gitlab.jfronny.respackopts.data.Respackmeta; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.pack.PackListWidget; import net.minecraft.client.gui.screen.pack.ResourcePackOrganizer; import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; -import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.resource.ResourceManager; -import net.minecraft.text.TranslatableText; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -27,8 +18,6 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.util.Objects; - @Mixin(PackListWidget.ResourcePackEntry.class) public abstract class ResourcePackEntryMixin extends AlwaysSelectedEntryListWidget.Entry { @Shadow private PackListWidget widget; @@ -57,9 +46,7 @@ public abstract class ResourcePackEntryMixin extends AlwaysSelectedEntryListWidg if (Respackopts.resPackMetas.containsKey(k) && respackopts$selected) { Respackmeta meta = Respackopts.resPackMetas.get(k); MinecraftClient c = MinecraftClient.getInstance(); - c.openScreen(Respackopts.factory.buildGui(meta.conf, meta.id, c.currentScreen, () -> { - Respackopts.save(); - })); + c.openScreen(Respackopts.factory.buildGui(meta.conf, meta.id, c.currentScreen)); } //TODO mark resource packs as changed if config modified } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index b0cc8d2..8924a5e 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -19,7 +19,10 @@ "io.gitlab.jfronny.respackopts.MMI" ], "libcd:conditions": [ - "io.gitlab.jfronny.respackopts.LibCDCompat" + "io.gitlab.jfronny.respackopts.integration.LibCDCompat" + ], + "frex": [ + "io.gitlab.jfronny.respackopts.integration.FrexCompat" ] }, "mixins": [