|
23 | 23 | */ |
24 | 24 | package aztech.modern_industrialization.compat.kubejs.recipe; |
25 | 25 |
|
26 | | -import aztech.modern_industrialization.machines.recipe.condition.AdjacentBlockProcessCondition; |
27 | | -import aztech.modern_industrialization.machines.recipe.condition.BiomeProcessCondition; |
28 | | -import aztech.modern_industrialization.machines.recipe.condition.CustomProcessCondition; |
29 | | -import aztech.modern_industrialization.machines.recipe.condition.DimensionProcessCondition; |
30 | | -import aztech.modern_industrialization.machines.recipe.condition.MachineProcessCondition; |
| 26 | +import aztech.modern_industrialization.machines.recipe.condition.*; |
| 27 | +import com.google.gson.JsonElement; |
| 28 | +import com.google.gson.JsonObject; |
31 | 29 | import com.mojang.datafixers.util.Either; |
| 30 | +import com.mojang.datafixers.util.Pair; |
| 31 | +import com.mojang.serialization.DataResult; |
| 32 | +import com.mojang.serialization.JsonOps; |
| 33 | +import com.mojang.serialization.MapCodec; |
| 34 | +import java.util.Map; |
32 | 35 | import net.minecraft.core.registries.Registries; |
33 | 36 | import net.minecraft.resources.ResourceKey; |
34 | 37 | import net.minecraft.resources.ResourceLocation; |
@@ -57,4 +60,36 @@ default ProcessConditionHelper biomeTag(ResourceLocation tag) { |
57 | 60 | default ProcessConditionHelper customCondition(String id) { |
58 | 61 | return processCondition(new CustomProcessCondition(id)); |
59 | 62 | } |
| 63 | + |
| 64 | + default ProcessConditionHelper registeredCondition(JsonElement condition) { |
| 65 | + if (!condition.isJsonObject()) { |
| 66 | + throw new IllegalArgumentException("Parameter must be a JsonObject"); |
| 67 | + } |
| 68 | + |
| 69 | + JsonObject obj = condition.getAsJsonObject(); |
| 70 | + if (obj.size() != 1) { |
| 71 | + throw new IllegalArgumentException("Expected only condition ID"); |
| 72 | + } |
| 73 | + |
| 74 | + Map.Entry<String, JsonElement> entry = obj.entrySet().iterator().next(); |
| 75 | + String idString = entry.getKey(); |
| 76 | + |
| 77 | + ResourceLocation id = ResourceLocation.tryParse(idString); |
| 78 | + if (id == null) { |
| 79 | + throw new IllegalArgumentException( |
| 80 | + String.format("'%s' is not registered at MachineProcessConditions. Perhaps you meant to use a customCondition?", idString)); |
| 81 | + } |
| 82 | + |
| 83 | + MapCodec<? extends MachineProcessCondition> codec = MachineProcessConditions.getCodec(id); |
| 84 | + if (codec == null) { |
| 85 | + throw new IllegalArgumentException("'%s' doesn't have a registered codec!".formatted(idString)); |
| 86 | + } |
| 87 | + |
| 88 | + DataResult<MachineProcessCondition> result = codec.codec().decode(JsonOps.INSTANCE, entry.getValue()) |
| 89 | + .map(Pair::getFirst); |
| 90 | + |
| 91 | + return processCondition(result.getOrThrow(p -> { |
| 92 | + throw new IllegalArgumentException("Couldn't parse '%s': %s".formatted(idString, p)); |
| 93 | + })); |
| 94 | + } |
60 | 95 | } |
0 commit comments