Move some things around

This commit is contained in:
JFronny 2021-06-10 16:07:22 +02:00
parent a3721174d9
commit 2393c48913
No known key found for this signature in database
GPG Key ID: BEC5ACBBD4EE17E5
38 changed files with 98 additions and 93 deletions

View File

@ -6,7 +6,7 @@ minecraft_version=1.17
yarn_mappings=build.1
loader_version=0.11.3
# Mod Properties
mod_version=1.4.4
mod_version=2.0.0
maven_group=io.gitlab.jfronny
archives_base_name=respackopts

View File

@ -2,14 +2,13 @@ package io.gitlab.jfronny.respackopts;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import io.gitlab.jfronny.respackopts.data.*;
import io.gitlab.jfronny.respackopts.data.in.Respackmeta;
import io.gitlab.jfronny.respackopts.filters.conditions.SyntaxError;
import io.gitlab.jfronny.respackopts.data.entry.*;
import io.gitlab.jfronny.respackopts.data.Respackmeta;
import io.gitlab.jfronny.respackopts.gson.BooleanEntrySerializer;
import io.gitlab.jfronny.respackopts.gson.ConfigBranchSerializer;
import io.gitlab.jfronny.respackopts.gson.EnumEntrySerializer;
import io.gitlab.jfronny.respackopts.gson.NumericEntrySerializer;
import io.gitlab.jfronny.respackopts.gui.GuiFactory;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@ -64,7 +63,7 @@ public class Respackopts implements ClientModInitializer {
public static void save() {
for (String s : resPackMetas.keySet()) {
s = resPackMetas.get(s).id;
LOGGER.info(s + ": " + CONFIG_BRANCH.get(s));
//LOGGER.info(s + ": " + CONFIG_BRANCH.get(s));
try (Writer writer = Files.newBufferedWriter(CONF_DIR.resolve(s + ".json"))) {
GSON.toJson(CONFIG_BRANCH.get(s), writer);
writer.flush();

View File

@ -1,7 +0,0 @@
package io.gitlab.jfronny.respackopts.abstractions;
import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
public interface JfConfigCategory {
JfConfigCategory addEntry(AbstractConfigListEntry var1);
}

View File

@ -1,4 +1,4 @@
package io.gitlab.jfronny.respackopts.data.in;
package io.gitlab.jfronny.respackopts.data;
import java.util.HashMap;

View File

@ -1,6 +1,6 @@
package io.gitlab.jfronny.respackopts.data.in;
package io.gitlab.jfronny.respackopts.data;
import io.gitlab.jfronny.respackopts.data.ConfigBranch;
import io.gitlab.jfronny.respackopts.data.entry.ConfigBranch;
public class Respackmeta {
public ConfigBranch conf;

View File

@ -1,4 +1,4 @@
package io.gitlab.jfronny.respackopts.data.in;
package io.gitlab.jfronny.respackopts.data;
import com.google.gson.JsonArray;

View File

@ -0,0 +1,7 @@
package io.gitlab.jfronny.respackopts.data;
public class RpoError extends Exception {
public RpoError(String message) {
super(message);
}
}

View File

@ -1,4 +1,4 @@
package io.gitlab.jfronny.respackopts.data;
package io.gitlab.jfronny.respackopts.data.entry;
public class ConfigBooleanEntry extends Entry<Boolean> {
public ConfigBooleanEntry(boolean v) {

View File

@ -1,8 +1,8 @@
package io.gitlab.jfronny.respackopts.data;
package io.gitlab.jfronny.respackopts.data.entry;
import com.google.common.collect.ImmutableMap;
import io.gitlab.jfronny.respackopts.Respackopts;
import io.gitlab.jfronny.respackopts.filters.conditions.SyntaxError;
import io.gitlab.jfronny.respackopts.data.RpoError;
import java.util.HashMap;
import java.util.Map;
@ -12,30 +12,31 @@ public class ConfigBranch extends Entry<Map<String, Entry<?>>> {
setValue(new HashMap<>());
}
public boolean getBoolean(String name) throws SyntaxError {
public boolean getBoolean(String name) throws RpoError {
String[] sp = name.split("\\.");
if (!super.getValue().containsKey(sp[0]))
throw new SyntaxError("Invalid path to key");
throw new RpoError("Invalid path to key");
Entry<?> e = super.getValue().get(sp[0]);
if (sp.length == 1) {
if (e instanceof ConfigBooleanEntry b)
return b.getValue();
throw new SyntaxError("Not a boolean");
throw new RpoError("Not a boolean");
}
if (sp.length == 2 && e instanceof ConfigEnumEntry en) {
for (Map.Entry<String, Integer> entry : en.values.entrySet()) {
if (entry.getKey().equals(sp[1]))
return entry.getValue().equals(en.getValue());
}
throw new SyntaxError("Could not find enum entry");
throw new RpoError("Could not find enum entry");
}
if (e instanceof ConfigBranch b)
return b.getBoolean(name.substring(name.indexOf('.') + 1));
throw new SyntaxError("Invalid path to key");
throw new RpoError("Invalid path to key");
}
@Override
public void sync(Entry<Map<String, Entry<?>>> source, SyncMode mode) {
Respackopts.LOGGER.info(this);
for (Map.Entry<String, Entry<?>> e : source.getValue().entrySet()) {
if (!has(e.getKey())) {
if (mode.isAdd)
@ -50,6 +51,7 @@ public class ConfigBranch extends Entry<Map<String, Entry<?>>> {
}
}
}
Respackopts.LOGGER.info(this);
}
@Override
@ -79,7 +81,7 @@ public class ConfigBranch extends Entry<Map<String, Entry<?>>> {
return ImmutableMap.copyOf(super.getValue());
}
public void buildShader(StringBuilder sb, String valuePrefix) throws SyntaxError {
public void buildShader(StringBuilder sb, String valuePrefix) throws RpoError {
for (Map.Entry<String, Entry<?>> e : super.getValue().entrySet()) {
if (e.getValue() instanceof ConfigNumericEntry n) {
sb.append("\n#define ");
@ -115,7 +117,7 @@ public class ConfigBranch extends Entry<Map<String, Entry<?>>> {
n.buildShader(sb, valuePrefix + e.getKey() + "_");
}
else {
throw new SyntaxError("Invalid type");
throw new RpoError("Invalid type");
}
}
}

View File

@ -1,4 +1,4 @@
package io.gitlab.jfronny.respackopts.data;
package io.gitlab.jfronny.respackopts.data.entry;
import java.util.HashMap;
import java.util.Map;

View File

@ -1,4 +1,4 @@
package io.gitlab.jfronny.respackopts.data;
package io.gitlab.jfronny.respackopts.data.entry;
public class ConfigNumericEntry extends Entry<Double> {
public Double min;

View File

@ -1,4 +1,4 @@
package io.gitlab.jfronny.respackopts.data;
package io.gitlab.jfronny.respackopts.data.entry;
public abstract class Entry<T> {
private T defaultValue;

View File

@ -1,4 +1,4 @@
package io.gitlab.jfronny.respackopts.data;
package io.gitlab.jfronny.respackopts.data.entry;
public class SyncMode {
public static final SyncMode RESPACK_LOAD = new SyncMode(false, true, true);

View File

@ -1,4 +1,4 @@
package io.gitlab.jfronny.respackopts.abstractions;
package io.gitlab.jfronny.respackopts.filters;
import java.io.IOException;
import java.io.InputStream;

View File

@ -1,15 +1,16 @@
package io.gitlab.jfronny.respackopts.filters.conditions;
import com.google.gson.JsonElement;
import io.gitlab.jfronny.respackopts.data.RpoError;
import java.util.LinkedHashSet;
import java.util.Set;
public class AndCondition implements Condition {
@Override
public boolean evaluate(JsonElement node) throws SyntaxError {
public boolean evaluate(JsonElement node) throws RpoError {
if (!node.isJsonArray())
throw new SyntaxError("\"and\" condition requires an array of conditions");
throw new RpoError("\"and\" condition requires an array of conditions");
for (JsonElement jsonElement : node.getAsJsonArray()) {
if (!ConditionEvaluator.evaluate(jsonElement))
return false;

View File

@ -1,10 +1,11 @@
package io.gitlab.jfronny.respackopts.filters.conditions;
import com.google.gson.JsonElement;
import io.gitlab.jfronny.respackopts.data.RpoError;
import java.util.Set;
public interface Condition {
boolean evaluate(JsonElement node) throws SyntaxError;
boolean evaluate(JsonElement node) throws RpoError;
Set<String> getKeys();
}

View File

@ -2,7 +2,8 @@ package io.gitlab.jfronny.respackopts.filters.conditions;
import com.google.gson.JsonElement;
import io.gitlab.jfronny.respackopts.Respackopts;
import io.gitlab.jfronny.respackopts.data.in.Respackmeta;
import io.gitlab.jfronny.respackopts.data.Respackmeta;
import io.gitlab.jfronny.respackopts.data.RpoError;
import java.util.LinkedHashSet;
import java.util.Map;
@ -20,7 +21,7 @@ public class ConditionEvaluator {
conditions.add(new NorCondition());
}
public static boolean evaluate(JsonElement condition) throws SyntaxError {
public static boolean evaluate(JsonElement condition) throws RpoError {
if (condition.isJsonPrimitive() && condition.getAsJsonPrimitive().isString())
return evaluate(condition.getAsString());
if (condition.isJsonObject() && condition.getAsJsonObject().size() == 1) {
@ -30,7 +31,7 @@ public class ConditionEvaluator {
return c.evaluate(entry.getValue());
}
}
throw new SyntaxError("Could not find condition: " + entry.getKey());
throw new RpoError("Could not find condition: " + entry.getKey());
}
}
if (condition.isJsonArray()) {
@ -40,15 +41,15 @@ public class ConditionEvaluator {
}
return true;
}
throw new SyntaxError("Condition entries may only be json objects containing one key and one value or strings");
throw new RpoError("Condition entries may only be json objects containing one key and one value or strings");
}
public static boolean evaluate(String condition) throws SyntaxError {
public static boolean evaluate(String condition) throws RpoError {
if (condition == null) {
throw new SyntaxError("Condition must not be null");
throw new RpoError("Condition must not be null");
}
if (!condition.contains(":")) {
throw new SyntaxError("You must include you resource pack ID in conditions (format: pack:some.key)");
throw new RpoError("You must include you resource pack ID in conditions (format: pack:some.key)");
}
String sourcePack = condition.split(":")[0];
@ -58,6 +59,6 @@ public class ConditionEvaluator {
return Respackopts.CONFIG_BRANCH.get(sourcePack).getBoolean(name);
}
}
throw new SyntaxError("Could not find pack with specified ID");
throw new RpoError("Could not find pack with specified ID");
}
}

View File

@ -1,6 +1,7 @@
package io.gitlab.jfronny.respackopts.filters.conditions;
import com.google.gson.JsonElement;
import io.gitlab.jfronny.respackopts.data.RpoError;
import java.util.LinkedHashSet;
import java.util.Optional;
@ -8,9 +9,9 @@ import java.util.Set;
//TODO implement equality checking for string/number variables
public class EqualityCondition implements Condition {
@Override
public boolean evaluate(JsonElement node) throws SyntaxError {
public boolean evaluate(JsonElement node) throws RpoError {
if (!node.isJsonArray())
throw new SyntaxError("\"equal\" condition requires an array of conditions");
throw new RpoError("\"equal\" condition requires an array of conditions");
Optional<Boolean> v = Optional.empty();
for (JsonElement jsonElement : node.getAsJsonArray()) {
boolean current = ConditionEvaluator.evaluate(jsonElement);

View File

@ -1,15 +1,16 @@
package io.gitlab.jfronny.respackopts.filters.conditions;
import com.google.gson.JsonElement;
import io.gitlab.jfronny.respackopts.data.RpoError;
import java.util.LinkedHashSet;
import java.util.Set;
public class NorCondition implements Condition {
@Override
public boolean evaluate(JsonElement node) throws SyntaxError {
public boolean evaluate(JsonElement node) throws RpoError {
if (!node.isJsonArray())
throw new SyntaxError("\"not\"/\"nor\" condition requires an array of conditions");
throw new RpoError("\"not\"/\"nor\" condition requires an array of conditions");
for (JsonElement jsonElement : node.getAsJsonArray()) {
if (ConditionEvaluator.evaluate(jsonElement))
return false;

View File

@ -1,15 +1,16 @@
package io.gitlab.jfronny.respackopts.filters.conditions;
import com.google.gson.JsonElement;
import io.gitlab.jfronny.respackopts.data.RpoError;
import java.util.LinkedHashSet;
import java.util.Set;
public class OrCondition implements Condition {
@Override
public boolean evaluate(JsonElement node) throws SyntaxError {
public boolean evaluate(JsonElement node) throws RpoError {
if (!node.isJsonArray())
throw new SyntaxError("\"or\" condition requires an array of conditions");
throw new RpoError("\"or\" condition requires an array of conditions");
for (JsonElement jsonElement : node.getAsJsonArray()) {
if (ConditionEvaluator.evaluate(jsonElement))
return true;

View File

@ -1,8 +1,8 @@
package io.gitlab.jfronny.respackopts.filters.conditions;
import io.gitlab.jfronny.respackopts.Respackopts;
import io.gitlab.jfronny.respackopts.abstractions.FileOpenProvider;
import io.gitlab.jfronny.respackopts.data.in.Rpo;
import io.gitlab.jfronny.respackopts.filters.FileOpenProvider;
import io.gitlab.jfronny.respackopts.data.Rpo;
import java.io.InputStream;
import java.io.InputStreamReader;

View File

@ -1,7 +0,0 @@
package io.gitlab.jfronny.respackopts.filters.conditions;
public class SyntaxError extends Exception {
public SyntaxError(String message) {
super(message);
}
}

View File

@ -1,15 +1,16 @@
package io.gitlab.jfronny.respackopts.filters.conditions;
import com.google.gson.JsonElement;
import io.gitlab.jfronny.respackopts.data.RpoError;
import java.util.LinkedHashSet;
import java.util.Set;
public class XorCondition implements Condition {
@Override
public boolean evaluate(JsonElement node) throws SyntaxError {
public boolean evaluate(JsonElement node) throws RpoError {
if (!node.isJsonArray())
throw new SyntaxError("\"xor\" condition requires an array of conditions");
throw new RpoError("\"xor\" condition requires an array of conditions");
boolean bl = false;
for (JsonElement jsonElement : node.getAsJsonArray()) {
if (ConditionEvaluator.evaluate(jsonElement))

View File

@ -1,8 +1,8 @@
package io.gitlab.jfronny.respackopts.filters.fallback;
import io.gitlab.jfronny.respackopts.Respackopts;
import io.gitlab.jfronny.respackopts.abstractions.FileOpenProvider;
import io.gitlab.jfronny.respackopts.data.in.Rpo;
import io.gitlab.jfronny.respackopts.filters.FileOpenProvider;
import io.gitlab.jfronny.respackopts.data.Rpo;
import net.minecraft.resource.ResourceNotFoundException;
import net.minecraft.util.Identifier;

View File

@ -1,7 +1,7 @@
package io.gitlab.jfronny.respackopts.gson;
import com.google.gson.*;
import io.gitlab.jfronny.respackopts.data.ConfigBooleanEntry;
import io.gitlab.jfronny.respackopts.data.entry.ConfigBooleanEntry;
import java.lang.reflect.Type;

View File

@ -1,7 +1,7 @@
package io.gitlab.jfronny.respackopts.gson;
import com.google.gson.*;
import io.gitlab.jfronny.respackopts.data.*;
import io.gitlab.jfronny.respackopts.data.entry.*;
import java.lang.reflect.Type;
import java.util.Map;

View File

@ -1,7 +1,7 @@
package io.gitlab.jfronny.respackopts.gson;
import com.google.gson.*;
import io.gitlab.jfronny.respackopts.data.ConfigEnumEntry;
import io.gitlab.jfronny.respackopts.data.entry.ConfigEnumEntry;
import java.lang.reflect.Type;
import java.util.HashMap;

View File

@ -3,11 +3,10 @@ package io.gitlab.jfronny.respackopts.gson;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import io.gitlab.jfronny.respackopts.data.ConfigBooleanEntry;
import io.gitlab.jfronny.respackopts.data.ConfigBranch;
import io.gitlab.jfronny.respackopts.data.ConfigNumericEntry;
import io.gitlab.jfronny.respackopts.data.Entry;
import io.gitlab.jfronny.respackopts.data.in.LegacyConfig;
import io.gitlab.jfronny.respackopts.data.entry.ConfigBooleanEntry;
import io.gitlab.jfronny.respackopts.data.entry.ConfigBranch;
import io.gitlab.jfronny.respackopts.data.entry.ConfigNumericEntry;
import io.gitlab.jfronny.respackopts.data.LegacyConfig;
import java.util.Map;

View File

@ -1,7 +1,7 @@
package io.gitlab.jfronny.respackopts.gson;
import com.google.gson.*;
import io.gitlab.jfronny.respackopts.data.ConfigNumericEntry;
import io.gitlab.jfronny.respackopts.data.entry.ConfigNumericEntry;
import java.lang.reflect.Type;

View File

@ -1,9 +1,10 @@
package io.gitlab.jfronny.respackopts;
package io.gitlab.jfronny.respackopts.gui;
import io.gitlab.jfronny.respackopts.abstractions.JfConfigCategory;
import io.gitlab.jfronny.respackopts.abstractions.JfConfigCategoryPrimary;
import io.gitlab.jfronny.respackopts.abstractions.JfConfigCategorySub;
import io.gitlab.jfronny.respackopts.data.*;
import io.gitlab.jfronny.respackopts.Respackopts;
import io.gitlab.jfronny.respackopts.gui.abstractions.JfConfigCategory;
import io.gitlab.jfronny.respackopts.gui.abstractions.JfConfigCategoryPrimary;
import io.gitlab.jfronny.respackopts.gui.abstractions.JfConfigCategorySub;
import io.gitlab.jfronny.respackopts.data.entry.*;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;

View File

@ -0,0 +1,7 @@
package io.gitlab.jfronny.respackopts.gui.abstractions;
import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
public interface JfConfigCategory {
void addEntry(AbstractConfigListEntry<?> var1);
}

View File

@ -1,4 +1,4 @@
package io.gitlab.jfronny.respackopts.abstractions;
package io.gitlab.jfronny.respackopts.gui.abstractions;
import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
import me.shedaniel.clothconfig2.api.ConfigCategory;
@ -10,8 +10,7 @@ public class JfConfigCategoryPrimary implements JfConfigCategory {
}
@Override
public JfConfigCategory addEntry(AbstractConfigListEntry var1) {
public void addEntry(AbstractConfigListEntry<?> var1) {
base.addEntry(var1);
return this;
}
}

View File

@ -1,4 +1,4 @@
package io.gitlab.jfronny.respackopts.abstractions;
package io.gitlab.jfronny.respackopts.gui.abstractions;
import me.shedaniel.clothconfig2.api.AbstractConfigListEntry;
import me.shedaniel.clothconfig2.impl.builders.SubCategoryBuilder;
@ -9,8 +9,7 @@ public class JfConfigCategorySub implements JfConfigCategory {
this.sc = sc;
}
@Override
public JfConfigCategory addEntry(AbstractConfigListEntry var1) {
public void addEntry(AbstractConfigListEntry<?> var1) {
sc.add(var1);
return this;
}
}

View File

@ -3,8 +3,8 @@ package io.gitlab.jfronny.respackopts.integration;
import grondag.frex.FrexInitializer;
import grondag.frex.api.config.ShaderConfig;
import io.gitlab.jfronny.respackopts.Respackopts;
import io.gitlab.jfronny.respackopts.data.ConfigBranch;
import io.gitlab.jfronny.respackopts.filters.conditions.SyntaxError;
import io.gitlab.jfronny.respackopts.data.entry.ConfigBranch;
import io.gitlab.jfronny.respackopts.data.RpoError;
import net.minecraft.util.Identifier;
import java.util.Map;
@ -18,8 +18,8 @@ public class FrexCompat implements FrexInitializer {
for (Map.Entry<String, ConfigBranch> e : Respackopts.CONFIG_BRANCH.entrySet()) {
try {
e.getValue().buildShader(sb, e.getKey() + "_");
} catch (SyntaxError syntaxError) {
Respackopts.LOGGER.error(syntaxError);
} catch (RpoError rpoError) {
Respackopts.LOGGER.error(rpoError);
}
}
sb.append("\n#define respackopts_loaded");

View File

@ -3,7 +3,7 @@ package io.gitlab.jfronny.respackopts.integration;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import io.gitlab.jfronny.respackopts.Respackopts;
import io.gitlab.jfronny.respackopts.abstractions.JfConfigCategoryPrimary;
import io.gitlab.jfronny.respackopts.gui.abstractions.JfConfigCategoryPrimary;
import me.shedaniel.clothconfig2.api.ConfigBuilder;
import me.shedaniel.clothconfig2.api.ConfigCategory;
import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;

View File

@ -2,7 +2,7 @@ package io.gitlab.jfronny.respackopts.mixin;
import com.mojang.blaze3d.systems.RenderSystem;
import io.gitlab.jfronny.respackopts.Respackopts;
import io.gitlab.jfronny.respackopts.data.in.Respackmeta;
import io.gitlab.jfronny.respackopts.data.Respackmeta;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.gui.screen.pack.PackListWidget;
@ -19,7 +19,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(PackListWidget.ResourcePackEntry.class)
public abstract class ResourcePackEntryMixin extends AlwaysSelectedEntryListWidget.Entry<PackListWidget.ResourcePackEntry> {
public abstract class ResourcePackEntryMixin {
@Final @Shadow private PackListWidget widget;
@Shadow protected abstract boolean isSelectable();

View File

@ -2,8 +2,8 @@ package io.gitlab.jfronny.respackopts.mixin;
import com.google.gson.*;
import io.gitlab.jfronny.respackopts.Respackopts;
import io.gitlab.jfronny.respackopts.data.SyncMode;
import io.gitlab.jfronny.respackopts.data.in.Respackmeta;
import io.gitlab.jfronny.respackopts.data.entry.SyncMode;
import io.gitlab.jfronny.respackopts.data.Respackmeta;
import net.minecraft.resource.ResourcePackManager;
import net.minecraft.resource.ResourcePackProfile;
import net.minecraft.resource.ResourceType;

View File

@ -9,8 +9,7 @@
"OptionsScreenMixin",
"ResourcePackEntryMixin",
"ResourcePackManagerMixin",
"conditions.DirectoryResourcePackMixin",
"conditions.ZipResourcePackMixin"
"ResourcePackConditionMixin"
],
"injectors": {
"defaultRequire": 1