make more default options platform specific

This commit is contained in:
Relentless 2022-09-16 16:34:29 +02:00
parent f730fa0929
commit 8df653de54
No known key found for this signature in database
GPG key ID: 759D97B8C6F25265
4 changed files with 47 additions and 28 deletions

View file

@ -10,9 +10,11 @@ and this project adheres to [Semantic Versioning].
### Added
- more materials and another tag to defaults
- back up your `unify.json` config and let it regenerate to get the new default or add it yourself
- `fabric:conditions` to default duplicate ignore list
### Changed
- ignore lists in `unify.json` and `duplicates.json` now support regular expressions
- default configs are now more platform specific
### Fixed
- a compat issue on Fabric when REI is present

View file

@ -1,7 +1,10 @@
package com.almostreliable.unified.config;
import com.almostreliable.unified.Platform;
import com.almostreliable.unified.utils.JsonCompare;
import net.minecraft.resources.ResourceLocation;
import java.util.LinkedHashMap;
import java.util.List;
@SuppressWarnings("SpellCheckingInspection")
@ -68,7 +71,6 @@ public final class Defaults {
"uranium",
"zinc"
);
public static final List<String> IGNORED_RECIPE_TYPES = List.of("cucumber:shaped_tag");
private Defaults() {}
@ -85,7 +87,7 @@ public final class Defaults {
"forge:plates/{material}",
"forge:rods/{material}",
"forge:storage_blocks/{material}",
"forge:storage_blocks/raw_{material}"
"forge:storage_blocks/raw_{material}"
);
case FABRIC -> List.of(
"c:nuggets/{material}",
@ -98,7 +100,7 @@ public final class Defaults {
"c:plates/{material}",
"c:rods/{material}",
"c:storage_blocks/{material}",
// Modder's just can't decide
// Modders just can't decide
"c:{material}_nuggets",
"c:{material}_dusts",
"c:{material}_gears",
@ -112,4 +114,38 @@ public final class Defaults {
);
};
}
public static List<String> getIgnoredRecipeTypes(Platform platform) {
return switch (platform) {
case FORGE -> List.of("cucumber:shaped_tag");
case FABRIC -> List.of();
};
}
public static JsonCompare.CompareSettings getDefaultDuplicateRules(Platform platform) {
JsonCompare.CompareSettings result = new JsonCompare.CompareSettings();
result.ignoreField(switch (platform) {
case FORGE -> "conditions";
case FABRIC -> "fabric:conditions";
});
result.ignoreField("group");
result.addRule("cookingtime", new JsonCompare.HigherRule());
result.addRule("energy", new JsonCompare.HigherRule());
result.addRule("experience", new JsonCompare.HigherRule());
return result;
}
public static LinkedHashMap<ResourceLocation, JsonCompare.CompareSettings> getDefaultDuplicateOverrides(Platform platform) {
JsonCompare.CompareSettings result = new JsonCompare.CompareSettings();
result.ignoreField(switch (platform) {
case FORGE -> "conditions";
case FABRIC -> "fabric:conditions";
});
result.ignoreField("group");
result.ignoreField("pattern");
result.ignoreField("key");
LinkedHashMap<ResourceLocation, JsonCompare.CompareSettings> resultMap = new LinkedHashMap<>();
resultMap.put(new ResourceLocation("minecraft", "crafting_shaped"), result);
return resultMap;
}
}

View file

@ -1,5 +1,6 @@
package com.almostreliable.unified.config;
import com.almostreliable.unified.AlmostUnifiedPlatform;
import com.almostreliable.unified.recipe.RecipeLink;
import com.almostreliable.unified.utils.JsonCompare;
import com.google.gson.JsonObject;
@ -50,14 +51,15 @@ public class DuplicationConfig extends Config {
@Override
public DuplicationConfig deserialize(JsonObject json) {
var platform = AlmostUnifiedPlatform.INSTANCE.getPlatform();
Set<Pattern> ignoreRecipeTypes = deserializePatterns(json,
IGNORED_RECIPE_TYPES,
Defaults.IGNORED_RECIPE_TYPES);
Defaults.getIgnoredRecipeTypes(platform));
Set<Pattern> ignoreRecipes = deserializePatterns(json, IGNORED_RECIPES, List.of());
JsonCompare.CompareSettings defaultRules = safeGet(() -> createCompareSet(json.getAsJsonObject(
DEFAULT_DUPLICATE_RULES)),
defaultSettings());
Defaults.getDefaultDuplicateRules(platform));
LinkedHashMap<ResourceLocation, JsonCompare.CompareSettings> overrideRules = safeGet(() -> json
.getAsJsonObject(OVERRIDE_DUPLICATE_RULES)
.entrySet()
@ -65,33 +67,12 @@ public class DuplicationConfig extends Config {
.collect(Collectors.toMap(entry -> new ResourceLocation(entry.getKey()),
entry -> createCompareSet(entry.getValue().getAsJsonObject()),
(a, b) -> b,
LinkedHashMap::new)), defaultOverrides());
LinkedHashMap::new)), Defaults.getDefaultDuplicateOverrides(platform));
boolean strictMode = safeGet(() -> json.get(STRICT_MODE).getAsBoolean(), false);
return new DuplicationConfig(defaultRules, overrideRules, ignoreRecipeTypes, ignoreRecipes, strictMode);
}
private JsonCompare.CompareSettings defaultSettings() {
JsonCompare.CompareSettings result = new JsonCompare.CompareSettings();
result.ignoreField("conditions");
result.ignoreField("group");
result.addRule("cookingtime", new JsonCompare.HigherRule());
result.addRule("energy", new JsonCompare.HigherRule());
result.addRule("experience", new JsonCompare.HigherRule());
return result;
}
private LinkedHashMap<ResourceLocation, JsonCompare.CompareSettings> defaultOverrides() {
JsonCompare.CompareSettings result = new JsonCompare.CompareSettings();
result.ignoreField("conditions");
result.ignoreField("group");
result.ignoreField("pattern");
result.ignoreField("key");
LinkedHashMap<ResourceLocation, JsonCompare.CompareSettings> resultMap = new LinkedHashMap<>();
resultMap.put(new ResourceLocation("minecraft", "crafting_shaped"), result);
return resultMap;
}
private JsonCompare.CompareSettings createCompareSet(JsonObject rules) {
JsonCompare.CompareSettings result = new JsonCompare.CompareSettings();
result.deserialize(rules);

View file

@ -105,7 +105,7 @@ public class UnifyConfig extends Config {
.collect(Collectors.toSet()), new HashSet<>());
Set<Pattern> ignoredRecipeTypes = deserializePatterns(json,
IGNORED_RECIPE_TYPES,
Defaults.IGNORED_RECIPE_TYPES);
Defaults.getIgnoredRecipeTypes(AlmostUnifiedPlatform.INSTANCE.getPlatform()));
Set<Pattern> ignoredRecipes = deserializePatterns(json, IGNORED_RECIPES, List.of());
boolean hideJeiRei = safeGet(() -> json.getAsJsonPrimitive(HIDE_JEI_REI).getAsBoolean(), true);