This commit is contained in:
JFronny 2020-11-25 21:58:21 +01:00
parent b638df9fa6
commit 3ae53a4200
8 changed files with 52 additions and 23 deletions

View File

@ -12,6 +12,8 @@ group = project.maven_group
repositories { repositories {
maven { url = 'https://server.bbkr.space/artifactory/libs-release'; name = "Cotton" } 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 { dependencies {
@ -34,6 +36,8 @@ dependencies {
} }
modApi "io.github.cottonmc:LibCD:3.0.3+1.16.3" modApi "io.github.cottonmc:LibCD:3.0.3+1.16.3"
modCompile "grondag:frex-mc116:4.0+"
modCompile "grondag:canvas-mc116:1.0.+"
} }
processResources { processResources {

View File

@ -42,7 +42,6 @@ public class GuiFactory {
config.addEntry(entryBuilder.startBooleanToggle(getText(n, b), currentValue) config.addEntry(entryBuilder.startBooleanToggle(getText(n, b), currentValue)
.setDefaultValue(defaultValue) .setDefaultValue(defaultValue)
.setSaveConsumer(v -> { .setSaveConsumer(v -> {
Respackopts.updateShaders();
Respackopts.boolVals.get(screenId).put(n, v); Respackopts.boolVals.get(screenId).put(n, v);
}) })
.build()); .build());
@ -57,7 +56,6 @@ public class GuiFactory {
config.addEntry(entryBuilder.startDoubleField(getText(n, b), currentValue) config.addEntry(entryBuilder.startDoubleField(getText(n, b), currentValue)
.setDefaultValue(defaultValue) .setDefaultValue(defaultValue)
.setSaveConsumer(v -> { .setSaveConsumer(v -> {
Respackopts.updateShaders();
Respackopts.numVals.get(screenId).put(n, v); Respackopts.numVals.get(screenId).put(n, v);
}) })
.build()); .build());
@ -72,7 +70,6 @@ public class GuiFactory {
config.addEntry(entryBuilder.startStrField(getText(n, b), currentValue) config.addEntry(entryBuilder.startStrField(getText(n, b), currentValue)
.setDefaultValue(defaultValue) .setDefaultValue(defaultValue)
.setSaveConsumer(v -> { .setSaveConsumer(v -> {
Respackopts.updateShaders();
Respackopts.strVals.get(screenId).put(n, v); Respackopts.strVals.get(screenId).put(n, v);
}) })
.build()); .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 { try {
ConfigBuilder builder; ConfigBuilder builder;
builder = ConfigBuilder.create() builder = ConfigBuilder.create()
.setParentScreen(parent) .setParentScreen(parent)
.setTitle(getText(resourcepackid, "respackopts.title")); .setTitle(getText(resourcepackid, "respackopts.title"));
ConfigEntryBuilder entryBuilder = builder.entryBuilder(); 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")); ConfigCategory config = builder.getOrCreateCategory(getText(resourcepackid, "respackopts.category"));
buildCategory(source, resourcepackid, config, entryBuilder); buildCategory(source, resourcepackid, config, entryBuilder);
return builder.build(); return builder.build();

View File

@ -19,7 +19,7 @@ public class MMI implements ModMenuApi {
.setTitle(new TranslatableText("respackopts.mainconfig")); .setTitle(new TranslatableText("respackopts.mainconfig"));
ConfigEntryBuilder entryBuilder = builder.entryBuilder(); ConfigEntryBuilder entryBuilder = builder.entryBuilder();
builder.setSavingRunnable(() -> { builder.setSavingRunnable(() -> {
//TODO implement reload Respackopts.updateShaders();
Respackopts.save(); Respackopts.save();
}); });
Respackopts.resPackMetas.forEach((s, v) -> { Respackopts.resPackMetas.forEach((s, v) -> {

View File

@ -12,6 +12,8 @@ import java.io.*;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.function.Consumer;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class Respackopts implements ClientModInitializer { public class Respackopts implements ClientModInitializer {
@ -24,10 +26,13 @@ public class Respackopts implements ClientModInitializer {
public static HashMap<String, Respackmeta> resPackMetas = new HashMap<>(); public static HashMap<String, Respackmeta> resPackMetas = new HashMap<>();
public static final String ID = "respackopts"; public static final String ID = "respackopts";
static final Path p = FabricLoader.getInstance().getConfigDir().resolve("respackopts"); static final Path p = FabricLoader.getInstance().getConfigDir().resolve("respackopts");
public static final HashSet<Consumer<String>> shaderConsumers = new HashSet<>();
@Override @Override
public void onInitializeClient() { public void onInitializeClient() {
load(); load();
Respackopts.updateShaders(); Respackopts.updateShaders();
if (FabricLoader.getInstance().isDevelopmentEnvironment())
shaderConsumers.add(System.out::println);
} }
public static void save() { public static void save() {
@ -114,6 +119,8 @@ public class Respackopts implements ClientModInitializer {
sb.append(s1); sb.append(s1);
} }
})); }));
System.out.println(sb.toString()); for (Consumer<String> consumer : shaderConsumers) {
consumer.accept(sb.toString());
}
} }
} }

View File

@ -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();
}
});
}
}

View File

@ -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.CDSyntaxError;
import io.github.cottonmc.libcd.api.condition.ConditionManager; import io.github.cottonmc.libcd.api.condition.ConditionManager;
import io.github.cottonmc.libcd.api.init.ConditionInitializer; import io.github.cottonmc.libcd.api.init.ConditionInitializer;
import io.gitlab.jfronny.respackopts.Respackopts;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import java.util.HashMap; import java.util.HashMap;

View File

@ -1,23 +1,14 @@
package io.gitlab.jfronny.respackopts.mixin; package io.gitlab.jfronny.respackopts.mixin;
import com.mojang.blaze3d.systems.RenderSystem; 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.Respackopts;
import io.gitlab.jfronny.respackopts.TexturedButtonWidget;
import io.gitlab.jfronny.respackopts.data.Respackmeta; import io.gitlab.jfronny.respackopts.data.Respackmeta;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawableHelper; 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.PackListWidget;
import net.minecraft.client.gui.screen.pack.ResourcePackOrganizer; import net.minecraft.client.gui.screen.pack.ResourcePackOrganizer;
import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.resource.ResourceManager;
import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin; 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.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Objects;
@Mixin(PackListWidget.ResourcePackEntry.class) @Mixin(PackListWidget.ResourcePackEntry.class)
public abstract class ResourcePackEntryMixin extends AlwaysSelectedEntryListWidget.Entry<PackListWidget.ResourcePackEntry> { public abstract class ResourcePackEntryMixin extends AlwaysSelectedEntryListWidget.Entry<PackListWidget.ResourcePackEntry> {
@Shadow private PackListWidget widget; @Shadow private PackListWidget widget;
@ -57,9 +46,7 @@ public abstract class ResourcePackEntryMixin extends AlwaysSelectedEntryListWidg
if (Respackopts.resPackMetas.containsKey(k) && respackopts$selected) { if (Respackopts.resPackMetas.containsKey(k) && respackopts$selected) {
Respackmeta meta = Respackopts.resPackMetas.get(k); Respackmeta meta = Respackopts.resPackMetas.get(k);
MinecraftClient c = MinecraftClient.getInstance(); MinecraftClient c = MinecraftClient.getInstance();
c.openScreen(Respackopts.factory.buildGui(meta.conf, meta.id, c.currentScreen, () -> { c.openScreen(Respackopts.factory.buildGui(meta.conf, meta.id, c.currentScreen));
Respackopts.save();
}));
} }
//TODO mark resource packs as changed if config modified //TODO mark resource packs as changed if config modified
} }

View File

@ -19,7 +19,10 @@
"io.gitlab.jfronny.respackopts.MMI" "io.gitlab.jfronny.respackopts.MMI"
], ],
"libcd:conditions": [ "libcd:conditions": [
"io.gitlab.jfronny.respackopts.LibCDCompat" "io.gitlab.jfronny.respackopts.integration.LibCDCompat"
],
"frex": [
"io.gitlab.jfronny.respackopts.integration.FrexCompat"
] ]
}, },
"mixins": [ "mixins": [