Skip to content

Commit fcbcb15

Browse files
authored
Add registeredCondition to ProcessConditionHelper (#1149)
1 parent 278d4ee commit fcbcb15

File tree

2 files changed

+57
-5
lines changed

2 files changed

+57
-5
lines changed

docs/ADDING_RECIPES.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,23 @@ ServerEvents.recipes(event => {
9090
});
9191
```
9292

93+
## Registered process conditions
94+
If a process condition doesn't have direct KubeJS support (like from an addon mod), you can manually write its parameters using `registeredCondition(JsonObject)`:
95+
96+
```js
97+
// Manually adding a dimension condition - of course, this is just an example and you don't have a reason to actually do it this way.
98+
ServerEvents.recipes(event => {
99+
event.recipes.modern_industrialization.compressor(2, 200)
100+
.itemIn("dirt")
101+
.itemOut("diamond")
102+
.registeredCondition({
103+
"modern_industrialization:dimension": {
104+
"dimension": "minecraft:the_nether"
105+
}
106+
})
107+
});
108+
```
109+
93110
## Adding multiblock slots
94111
Multiblock machines always have an unlimited number of input and output slots
95112
(provided the recipe type allows the relevant input/output types).

src/main/java/aztech/modern_industrialization/compat/kubejs/recipe/ProcessConditionHelper.java

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,15 @@
2323
*/
2424
package aztech.modern_industrialization.compat.kubejs.recipe;
2525

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;
3129
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;
3235
import net.minecraft.core.registries.Registries;
3336
import net.minecraft.resources.ResourceKey;
3437
import net.minecraft.resources.ResourceLocation;
@@ -57,4 +60,36 @@ default ProcessConditionHelper biomeTag(ResourceLocation tag) {
5760
default ProcessConditionHelper customCondition(String id) {
5861
return processCondition(new CustomProcessCondition(id));
5962
}
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+
}
6095
}

0 commit comments

Comments
 (0)