From 83154f1bcb0f39ef14b32be058be2ebd9118ffa3 Mon Sep 17 00:00:00 2001 From: Apollo <102649729+Apollounknowndev@users.noreply.github.com> Date: Tue, 7 May 2024 11:04:14 -0700 Subject: [PATCH] Support loading a single resource condition instead of array (#3749) * Support loading a single condition instead of array * Remove extra space * Use LIST_CODEC field instead of CODEC.listOf() Co-authored-by: Juuz <6596629+Juuxel@users.noreply.github.com> --------- Co-authored-by: Juuz <6596629+Juuxel@users.noreply.github.com> --- .../api/resource/conditions/v1/ResourceCondition.java | 4 ++++ .../resource/conditions/ResourceConditionsImpl.java | 4 ++-- .../predicates/loaded.json | 11 +++-------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/api/resource/conditions/v1/ResourceCondition.java b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/api/resource/conditions/v1/ResourceCondition.java index c727f1cc6..6798f3793 100644 --- a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/api/resource/conditions/v1/ResourceCondition.java +++ b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/api/resource/conditions/v1/ResourceCondition.java @@ -38,6 +38,10 @@ public interface ResourceCondition { * A codec for a list of conditions. */ Codec<List<ResourceCondition>> LIST_CODEC = CODEC.listOf(); + /** + * A codec for parsing load conditions. Can either be an array of conditions or a single condition. + */ + Codec<ResourceCondition> CONDITION_CODEC = Codec.withAlternative(CODEC, LIST_CODEC, conditions -> ResourceConditions.and(conditions.toArray(new ResourceCondition[0]))); /** * @return the type of the condition diff --git a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/impl/resource/conditions/ResourceConditionsImpl.java b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/impl/resource/conditions/ResourceConditionsImpl.java index c69e976eb..6f2d206ed 100644 --- a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/impl/resource/conditions/ResourceConditionsImpl.java +++ b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/impl/resource/conditions/ResourceConditionsImpl.java @@ -65,10 +65,10 @@ public final class ResourceConditionsImpl implements ModInitializer { boolean debugLogEnabled = ResourceConditionsImpl.LOGGER.isDebugEnabled(); if (obj.has(ResourceConditions.CONDITIONS_KEY)) { - DataResult<List<ResourceCondition>> conditions = ResourceCondition.LIST_CODEC.parse(JsonOps.INSTANCE, obj.get(ResourceConditions.CONDITIONS_KEY)); + DataResult<ResourceCondition> conditions = ResourceCondition.CONDITION_CODEC.parse(JsonOps.INSTANCE, obj.get(ResourceConditions.CONDITIONS_KEY)); if (conditions.isSuccess()) { - boolean matched = ResourceConditionsImpl.conditionsMet(conditions.getOrThrow(), registryLookup, true); + boolean matched = conditions.getOrThrow().test(registryLookup); if (debugLogEnabled) { String verdict = matched ? "Allowed" : "Rejected"; diff --git a/fabric-resource-conditions-api-v1/src/testmod/resources/data/fabric-resource-conditions-api-v1-testmod/predicates/loaded.json b/fabric-resource-conditions-api-v1/src/testmod/resources/data/fabric-resource-conditions-api-v1-testmod/predicates/loaded.json index 65460b641..f7ed2d36d 100644 --- a/fabric-resource-conditions-api-v1/src/testmod/resources/data/fabric-resource-conditions-api-v1-testmod/predicates/loaded.json +++ b/fabric-resource-conditions-api-v1/src/testmod/resources/data/fabric-resource-conditions-api-v1-testmod/predicates/loaded.json @@ -4,12 +4,7 @@ "predicate": { "type": "minecraft:pig" }, - "fabric:load_conditions": [ - { - "condition": "fabric:all_mods_loaded", - "values": [ - "fabric-resource-conditions-api-v1" - ] - } - ] + "fabric:load_conditions": { + "condition": "fabric:true" + } }