Skip to content

Commit 2f4ec54

Browse files
Try to improve ProcessingOutput type wrapping as well
1 parent 9b8590d commit 2f4ec54

1 file changed

Lines changed: 29 additions & 5 deletions

File tree

src/main/java/dev/latvian/mods/kubejs/create/KubeJSCreatePlugin.java

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.latvian.mods.kubejs.create;
22

3+
import com.google.gson.JsonObject;
34
import com.simibubi.create.Create;
45
import com.simibubi.create.content.processing.recipe.ProcessingOutput;
56
import com.simibubi.create.foundation.fluid.FluidIngredient;
@@ -16,6 +17,7 @@
1617
import dev.latvian.mods.kubejs.event.EventGroupRegistry;
1718
import dev.latvian.mods.kubejs.plugin.KubeJSPlugin;
1819
import dev.latvian.mods.kubejs.plugin.builtin.wrapper.ItemWrapper;
20+
import dev.latvian.mods.kubejs.plugin.builtin.wrapper.StringUtilsWrapper;
1921
import dev.latvian.mods.kubejs.recipe.component.RecipeComponentTypeRegistry;
2022
import dev.latvian.mods.kubejs.recipe.schema.RecipeSchemaRegistry;
2123
import dev.latvian.mods.kubejs.registry.BuilderTypeRegistry;
@@ -24,8 +26,15 @@
2426
import dev.latvian.mods.kubejs.script.TypeWrapperRegistry;
2527
import dev.latvian.mods.rhino.Context;
2628
import net.minecraft.core.registries.Registries;
29+
import net.minecraft.util.Mth;
30+
import net.minecraft.world.item.ItemStack;
31+
import net.minecraft.world.item.Items;
32+
import net.minecraft.world.level.ItemLike;
2733
import org.jetbrains.annotations.Nullable;
2834

35+
import java.util.Map;
36+
import java.util.function.Function;
37+
2938
public class KubeJSCreatePlugin implements KubeJSPlugin {
3039
@Override
3140
public void afterInit() {
@@ -58,13 +67,28 @@ public void registerTypeWrappers(TypeWrapperRegistry registry) {
5867
registry.register(ProcessingOutput.class, KubeJSCreatePlugin::wrapProcessingOutput);
5968
}
6069

61-
private static ProcessingOutput wrapProcessingOutput(Context cx, @Nullable Object from) {
62-
if (from instanceof ProcessingOutput p) {
63-
return p;
70+
private static ProcessingOutput fromMapLike(Context cx, Object from, Function<String, Object> getter, boolean nested) {
71+
var chance = (float) Mth.clamp(StringUtilsWrapper.parseDouble(getter.apply("chance"), 1.0), 0.0, 1.0);
72+
if (nested) {
73+
var output = ItemWrapper.wrap(cx, getter.apply("output"));
74+
return new ProcessingOutput(output, chance);
75+
} else {
76+
return new ProcessingOutput(ItemWrapper.wrap(cx, from), chance);
6477
}
78+
}
6579

66-
var stack = ItemWrapper.wrap(cx, from);
67-
return stack.isEmpty() ? ProcessingOutput.EMPTY : new ProcessingOutput(stack, 1F);
80+
private static ProcessingOutput wrapProcessingOutput(Context cx, @Nullable Object from) {
81+
return switch (from) {
82+
case null -> ProcessingOutput.EMPTY;
83+
case ProcessingOutput id -> id;
84+
case ItemStack s -> s.isEmpty() ? ProcessingOutput.EMPTY : new ProcessingOutput(s, 1F);
85+
case ItemLike i when i.asItem() == Items.AIR -> ProcessingOutput.EMPTY;
86+
case ItemLike i -> new ProcessingOutput(i.asItem(), 1, 1F);
87+
case JsonObject json when json.has("chance") -> fromMapLike(cx, json, json::get, json.has("output"));
88+
case Map<?, ?> map when map.containsKey("chance") -> fromMapLike(cx, map, map::get, map.containsKey("output"));
89+
// TODO: maybe a custom string-like type wrapper ("2x apple @ 20%" or something like that???)
90+
default -> new ProcessingOutput(ItemWrapper.wrap(cx, from), 1F);
91+
};
6892
}
6993

7094
@Override

0 commit comments

Comments
 (0)