From ece5555f75a34ff36ceeab8e03e437870c84704c Mon Sep 17 00:00:00 2001 From: Oier Bravo Urtasun Date: Mon, 10 Mar 2025 11:49:56 +0100 Subject: [PATCH] Recipe requirements WIP --- .../MechanicalLemonLib.java | 3 +- .../RecipeRequirementsBehaviour.java | 2 +- .../foundation/recipe/BaseRecipe.java | 15 +--- .../foundation/recipe/BaseRecipeParams.java | 2 +- .../recipe/BaseRecipeSerializer.java | 32 -------- .../recipe/IRecipeRequirementCodec.java | 7 ++ .../recipe/IRecipeRequirementType.java | 4 + .../recipe/IRecipeWithRequirements.java | 15 +++- .../foundation/recipe/RecipeRequirement.java | 26 ++++--- .../recipe/RecipeRequirementType.java | 30 ++++---- .../recipe/RecipeRequirementsUtils.java | 16 ++-- .../recipe/requirements/SpeedRequirement.java | 75 +++++++------------ .../register/LemonRecipeRequirementTypes.java | 12 +++ .../register/MechanicalLemonRegistries.java | 43 ++++++----- 14 files changed, 134 insertions(+), 148 deletions(-) create mode 100644 src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeRequirementCodec.java create mode 100644 src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeRequirementType.java create mode 100644 src/main/java/com/oierbravo/mechanical_lemon_lib/register/LemonRecipeRequirementTypes.java diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/MechanicalLemonLib.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/MechanicalLemonLib.java index 0c04542..eba8221 100644 --- a/src/main/java/com/oierbravo/mechanical_lemon_lib/MechanicalLemonLib.java +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/MechanicalLemonLib.java @@ -2,6 +2,7 @@ package com.oierbravo.mechanical_lemon_lib; import com.mojang.logging.LogUtils; import com.oierbravo.mechanical_lemon_lib.register.LemonCreativeModeTabs; +import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRegistries; import net.minecraft.resources.ResourceLocation; import net.neoforged.bus.api.IEventBus; import net.neoforged.fml.ModContainer; @@ -18,7 +19,7 @@ public class MechanicalLemonLib { public MechanicalLemonLib(IEventBus modEventBus, ModContainer modContainer) { LemonCreativeModeTabs.register(modEventBus); - //MechanicalLemonRegistries.init(); + MechanicalLemonRegistries.init(); //modEventBus.addListener(MechanicalLemonRegistries::init); } diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/blockEntity/behaviour/RecipeRequirementsBehaviour.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/blockEntity/behaviour/RecipeRequirementsBehaviour.java index a237a8b..2ad8417 100644 --- a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/blockEntity/behaviour/RecipeRequirementsBehaviour.java +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/blockEntity/behaviour/RecipeRequirementsBehaviour.java @@ -76,7 +76,7 @@ public class RecipeRequirementsBehaviour exte } private boolean checkRequirements(R pRecipe, Level pLevel, RecipeRequirementsSpecifics pSpecifics){ boolean result = true; - for (Map.Entry, RecipeRequirement> entry : pRecipe.getRecipeRequirements().entrySet()) { + for (Map.Entry> entry : pRecipe.getRecipeRequirements().entrySet()) { if(!checkRequirement(entry.getValue(), pLevel, (BlockEntity) pSpecifics)){ missingRequirements.add(entry.getKey().getId()); result = false; diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipe.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipe.java index 6816f18..865841f 100644 --- a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipe.java +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipe.java @@ -7,12 +7,8 @@ import net.minecraft.world.item.crafting.RecipeInput; import net.neoforged.neoforge.common.conditions.ICondition; import javax.annotation.ParametersAreNonnullByDefault; -import javax.swing.text.html.Option; import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Optional; - @MethodsReturnNonnullByDefault @ParametersAreNonnullByDefault @@ -20,12 +16,11 @@ public abstract class BaseRecipe, RecipeRequirement> recipeRequirements = new HashMap<>(); - - protected static List> enabledRecipeRequirements = List.of(); + protected HashMap, RecipeRequirement> recipeRequirements = new HashMap<>(); protected List conditions; + abstract public List> getEnabledRequirements(); public BaseRecipe(P params){ this.id = params.id; @@ -35,13 +30,7 @@ public abstract class BaseRecipe> getEnabledRequirements() { - return enabledRecipeRequirements; - } - public Map, RecipeRequirement> getRecipeRequirements(){ - return recipeRequirements; - } public List getConditions(){ return conditions; } diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipeParams.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipeParams.java index 615b821..5b0a452 100644 --- a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipeParams.java +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipeParams.java @@ -8,7 +8,7 @@ import java.util.List; public abstract class BaseRecipeParams implements IBaseRecipeParams { public ResourceLocation id; - public ArrayList recipeRequirements; + public ArrayList> recipeRequirements; protected List conditions; protected BaseRecipeParams(ResourceLocation id) { diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipeSerializer.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipeSerializer.java index 797d5c8..ab3e2ed 100644 --- a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipeSerializer.java +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/BaseRecipeSerializer.java @@ -17,36 +17,4 @@ public abstract class BaseRecipeSerializer, B extends public BaseRecipeSerializer(List> pEnabledRecipeRequirements) { this.enabledRecipeRequirements = pEnabledRecipeRequirements; } - - protected abstract B readFromJson(ResourceLocation recipeId, JsonObject json); - protected abstract B readFromBuffer(ResourceLocation recipeId, FriendlyByteBuf buffer); - - protected abstract void writeToJson(JsonObject json, R recipe); - protected abstract void writeToBuffer(FriendlyByteBuf buffer, R recipe); - - - public final void write(JsonObject json, R recipe) { - writeToJson(json, recipe); - - } - - //public abstract @NotNull MapCodec codec(); - - /*@Override - public @NotNull R fromJson(@NotNull ResourceLocation pRecipeId, @NotNull JsonObject pSerializedRecipe) { - return readFromJson(pRecipeId, pSerializedRecipe) - .withRequirements(RecipeRequirementsUtils.fromJson(pSerializedRecipe, enabledRecipeRequirements)) - .build(); - } - - - @Override - public @Nullable R fromNetwork(@NotNull ResourceLocation pRecipeId, @NotNull FriendlyByteBuf pBuffer) { - return readFromBuffer(pRecipeId, pBuffer).build(); - } - - @Override - public void toNetwork(@NotNull FriendlyByteBuf pBuffer, @NotNull R pRecipe) { - writeToBuffer(pBuffer, pRecipe); - }*/ } diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeRequirementCodec.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeRequirementCodec.java new file mode 100644 index 0000000..bb7b378 --- /dev/null +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeRequirementCodec.java @@ -0,0 +1,7 @@ +package com.oierbravo.mechanical_lemon_lib.foundation.recipe; + +import com.mojang.serialization.MapCodec; + +public interface IRecipeRequirementCodec> { + public MapCodec codec(); +} diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeRequirementType.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeRequirementType.java new file mode 100644 index 0000000..45f2339 --- /dev/null +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeRequirementType.java @@ -0,0 +1,4 @@ +package com.oierbravo.mechanical_lemon_lib.foundation.recipe; + +public interface IRecipeRequirementType { +} diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeWithRequirements.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeWithRequirements.java index 14a553c..7877525 100644 --- a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeWithRequirements.java +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/IRecipeWithRequirements.java @@ -1,19 +1,26 @@ package com.oierbravo.mechanical_lemon_lib.foundation.recipe; +import com.mojang.serialization.Codec; +import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRegistries; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import java.util.List; import java.util.Map; -import java.util.Optional; +import java.util.function.Function; public interface IRecipeWithRequirements { + Codec CODEC = MechanicalLemonRegistries.RECIPE_REQUIREMENT_TYPES.byNameCodec().dispatch(t -> RecipeRequirementType.codec(t), Function.identity()); + Codec> LIST_CODEC = CODEC.listOf(); - Map, RecipeRequirement> getRecipeRequirements(); + Map, RecipeRequirement> getRecipeRequirements(); List> getEnabledRequirements(); - default T getRequirement(RecipeRequirementType type) { - return (T) getRecipeRequirements().get(type); + + default > RecipeRequirement getRequirement(RRT type) { + return getRecipeRequirements().get(type); } + boolean checkRequirements(Level pLevel, BlockEntity pBlockEntity); + } diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirement.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirement.java index 4cabc57..88f737b 100644 --- a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirement.java +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirement.java @@ -1,32 +1,40 @@ package com.oierbravo.mechanical_lemon_lib.foundation.recipe; -import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; -import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRegistries; import com.oierbravo.mechanical_lemon_lib.utility.LibLang; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; -import java.util.List; -import java.util.function.Function; +import java.util.Optional; public abstract class RecipeRequirement{ - //public static Codec> CODEC = MechanicalLemonRegistries.RECIPE_REQUIREMENT_SERIALIZERS.byNameCodec().dispatch(RecipeRequirement::codec, Function.identity()); - // public static Codec> LIST_CODEC = CODEC.listOf(); public abstract RecipeRequirementType getType(); public abstract boolean test(Level pLevel, BlockEntity pBlockEntity); - public abstract V getValue(); + public abstract Optional getValue(); public abstract boolean isPresent(); public abstract String toString(); - public Component toRequirementComponent(){ + + public boolean isProcessBlocker(){ + return this instanceof IProcessBlockingRequirement; + } + + public Component toTooltipComponent(){ return LibLang.translate("ui.recipe_requirement." + getType().getId() + ".tooltip", toString()).component(); }; public Component toMissingComponent(){ return LibLang.translate("ui.recipe_requirement." + getType().getId() + ".missing", toString()).component(); } - public abstract MapCodec> codec(); + + /*public static MapCodec> typeCodec() { + }*/ + + public static MapCodec> typeCodec(RecipeRequirementType recipeRequirementType) { + + } } \ No newline at end of file diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirementType.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirementType.java index e6836d0..01f4086 100644 --- a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirementType.java +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirementType.java @@ -1,34 +1,32 @@ package com.oierbravo.mechanical_lemon_lib.foundation.recipe; -import com.google.gson.JsonObject; -import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; -import com.oierbravo.mechanical_lemon_lib.register.MechanicalLemonRegistries; import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; -import java.util.function.Function; - -public abstract class RecipeRequirementType { +public abstract class RecipeRequirementType> { private final String id; - public RecipeRequirementType(String id) { this.id = id; } - public String getId() { return id; } - public abstract RR fromJson(JsonObject pJson); - - public abstract JsonObject toJson(JsonObject pJson, RecipeRequirement pRecipeRequirement); - + public abstract void toNetwork(FriendlyByteBuf buffer, RecipeRequirement recipeRequirement); public abstract RR fromNetwork(FriendlyByteBuf buffer); - public abstract void toNetwork(FriendlyByteBuf buffer, RecipeRequirement pRecipeRequirement); - public boolean isProcessBlocker(){ - return this instanceof IProcessBlockingRequirement; + public MapCodec codec(IRecipeRequirementType t) { + return RR.typeCodec(this); + } + + public StreamCodec streamCodec(){ + return StreamCodec.of(this::toNetwork, this::fromNetwork); + }; + + public String toString() { + return getId(); } - public abstract MapCodec codec(); } diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirementsUtils.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirementsUtils.java index 9628468..07fa2a9 100644 --- a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirementsUtils.java +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/RecipeRequirementsUtils.java @@ -10,7 +10,7 @@ import java.util.List; import java.util.Map; public class RecipeRequirementsUtils { - public static ArrayList fromJson(JsonObject json, List> enabledRecipeRequirements){ + /*public static ArrayList> fromJson(JsonObject json, List> enabledRecipeRequirements){ ArrayList recipeRequirements = new ArrayList<>(); enabledRecipeRequirements.forEach(recipeRequirementType -> { @@ -19,9 +19,9 @@ public class RecipeRequirementsUtils { } }); return recipeRequirements; - } - public static ArrayList fromBuffer(FriendlyByteBuf buffer, List> enabledRecipeRequirements){ - ArrayList recipeRequirements = new ArrayList<>(); + }*/ + public static ArrayList> fromBuffer(FriendlyByteBuf buffer, List> enabledRecipeRequirements){ + ArrayList> recipeRequirements = new ArrayList<>(); enabledRecipeRequirements.forEach(recipeRequirementType -> { recipeRequirements.add(recipeRequirementType.fromNetwork(buffer)); }); @@ -29,21 +29,21 @@ public class RecipeRequirementsUtils { return recipeRequirements; } - public static JsonObject toJson(JsonObject pJson, Map, RecipeRequirement> pRecipeRequirements){ + /*public static JsonObject toJson(JsonObject pJson, Map, RecipeRequirement> pRecipeRequirements){ for (Map.Entry, RecipeRequirement> entry : pRecipeRequirements.entrySet()) { pJson = entry.getKey().toJson(pJson, entry.getValue()); } return pJson; } +*/ - - public static void toBuffer(FriendlyByteBuf buffer, IRecipeWithRequirements pRecipe){ + public static > void toBuffer(FriendlyByteBuf buffer, IRecipeWithRequirements pRecipe){ pRecipe.getEnabledRequirements().forEach(recipeRequirementType -> { recipeRequirementType.toNetwork(buffer,pRecipe.getRequirement(recipeRequirementType)); }); } - public static ArrayList checkRequirements(Map, RecipeRequirement> pRecipeRequirements, BlockEntity pBlockEntity){ + public static ArrayList checkRequirements(Map, RecipeRequirement> pRecipeRequirements, BlockEntity pBlockEntity){ ArrayList missingRequirements = new ArrayList<>(); pRecipeRequirements.forEach((recipeRequirementType, recipeRequirement) -> { if(!recipeRequirement.test(pBlockEntity.getLevel(),pBlockEntity)) diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/requirements/SpeedRequirement.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/requirements/SpeedRequirement.java index b03f40c..0d2ccc6 100644 --- a/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/requirements/SpeedRequirement.java +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/foundation/recipe/requirements/SpeedRequirement.java @@ -1,6 +1,5 @@ package com.oierbravo.mechanical_lemon_lib.foundation.recipe.requirements; -import com.google.gson.JsonObject; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -8,23 +7,29 @@ import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirement; import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirementType; import com.simibubi.create.content.kinetics.base.KineticBlockEntity; import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.util.GsonHelper; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; -import net.neoforged.neoforge.common.conditions.ModLoadedCondition; -public class SpeedRequirement extends RecipeRequirement{ - public static final RecipeRequirementType TYPE = new SpeedRequirementType(); +import java.util.Optional; + +public class SpeedRequirement extends RecipeRequirement { + public static final RecipeRequirementType TYPE = new SpeedRequirementType(); public static final SpeedRequirement EMPTY = new SpeedRequirement(); + private Float value; public SpeedRequirement() { } + public SpeedRequirement(Float value) { + this.value = value; + } - public SpeedRequirement(float pValue) { - value = pValue; + public SpeedRequirement(Optional value) { + this(value.get()); } @@ -48,13 +53,11 @@ public class SpeedRequirement extends RecipeRequirement{ return value.toString(); } - @Override - public MapCodec> codec() { - return null; - } - public Float getValue() { - return value; + public Optional getValue() { + if(value == null) + return Optional.empty(); + return Optional.of(value); } public static SpeedRequirement of(float pValue) { @@ -67,53 +70,26 @@ public class SpeedRequirement extends RecipeRequirement{ return TYPE; } + private static class SpeedRequirementType extends RecipeRequirementType { + public static MapCodec CODEC = RecordCodecBuilder.mapCodec((builder) -> builder.group(Codec.FLOAT.optionalFieldOf("min_speed").forGetter(SpeedRequirement::getValue)).apply(builder,SpeedRequirement::new)); - private static class SpeedRequirementType extends RecipeRequirementType{ - public static MapCodec CODEC = RecordCodecBuilder.mapCodec((builder) -> builder.group(Codec.FLOAT.fieldOf("min_speed").forGetter(SpeedRequirement::getValue)).apply(builder,SpeedRequirement::new)); - public SpeedRequirementType(String id) { super(id); } - public SpeedRequirementType() { - super("min_speed"); - } @Override - public SpeedRequirement fromJson(JsonObject pJson) { - if (GsonHelper.isValidNode(pJson, this.getId())) { - return of(pJson.get(this.getId()).getAsFloat()); - } - return EMPTY; - } + public void toNetwork(FriendlyByteBuf buffer, RecipeRequirement recipeRequirement) { - @Override - public JsonObject toJson(JsonObject pJson, RecipeRequirement pRecipeRequirement) { - if(!pRecipeRequirement.isPresent()) - return pJson; - pJson.addProperty(this.getId(), pRecipeRequirement.toString()); - return pJson; } @Override public SpeedRequirement fromNetwork(FriendlyByteBuf buffer) { - boolean hasRequirement = buffer.readBoolean(); - if(hasRequirement) { - return of(buffer.readFloat()); - } - return SpeedRequirement.EMPTY; + return null; } - @Override - public void toNetwork(FriendlyByteBuf buffer, RecipeRequirement pRecipeRequirement) { - if(pRecipeRequirement == null) - pRecipeRequirement = new SpeedRequirement(); - if(pRecipeRequirement instanceof SpeedRequirement){ - buffer.writeBoolean(pRecipeRequirement.isPresent()); - if(pRecipeRequirement.isPresent()) - buffer.writeFloat(((SpeedRequirement) pRecipeRequirement).getValue()); - } - + public SpeedRequirementType() { + super("min_speed"); } @Override @@ -121,5 +97,12 @@ public class SpeedRequirement extends RecipeRequirement{ return CODEC; } + @Override + public StreamCodec streamCodec() { + return null; + } + + + } } diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/register/LemonRecipeRequirementTypes.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/register/LemonRecipeRequirementTypes.java new file mode 100644 index 0000000..8c5b288 --- /dev/null +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/register/LemonRecipeRequirementTypes.java @@ -0,0 +1,12 @@ +package com.oierbravo.mechanical_lemon_lib.register; + +import com.oierbravo.mechanical_lemon_lib.foundation.recipe.requirements.SpeedRequirement; + +public class LemonRecipeRequirementTypes { + + public static void register() { + IRecipeRequirement.REGISTRY.register(SpeedRequirement.TYPE,SpeedRequirement.); + + } +} + diff --git a/src/main/java/com/oierbravo/mechanical_lemon_lib/register/MechanicalLemonRegistries.java b/src/main/java/com/oierbravo/mechanical_lemon_lib/register/MechanicalLemonRegistries.java index 03102d2..618aa37 100644 --- a/src/main/java/com/oierbravo/mechanical_lemon_lib/register/MechanicalLemonRegistries.java +++ b/src/main/java/com/oierbravo/mechanical_lemon_lib/register/MechanicalLemonRegistries.java @@ -2,34 +2,29 @@ package com.oierbravo.mechanical_lemon_lib.register; import com.mojang.serialization.MapCodec; import com.oierbravo.mechanical_lemon_lib.MechanicalLemonLib; -import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirement; -import com.simibubi.create.Create; -import net.minecraft.core.RegistrationInfo; +import com.oierbravo.mechanical_lemon_lib.foundation.recipe.IRecipeRequirementType; +import com.oierbravo.mechanical_lemon_lib.foundation.recipe.RecipeRequirementType; import net.minecraft.core.Registry; -import net.minecraft.core.WritableRegistry; -import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceKey; -import net.neoforged.neoforge.common.conditions.ICondition; import net.neoforged.neoforge.registries.RegistryBuilder; public class MechanicalLemonRegistries { - public static final Registry> RECIPE_REQUIREMENT_SERIALIZERS = simple(key("recipe_requirement_serializer")) ; + //public static final Registry>> RECIPE_REQUIREMENT_TYPES = simple(key("requirements")) ; + public static final Registry> RECIPE_REQUIREMENT_TYPES = (new RegistryBuilder(Keys.RECIPE_REQUIREMENT_TYPES)).create(); - private static Registry simple(ResourceKey> key) { - return register(key, false); - } + /*private static Registry simple(ResourceKey> key) { + return register(key); + }*/ - private static Registry withIntrusiveHolders(ResourceKey> key) { + /*private static Registry withIntrusiveHolders(ResourceKey> key) { return register(key, true); - } + }*/ @SuppressWarnings({"deprecation", "unchecked", "rawtypes"}) - private static Registry register(ResourceKey> key, boolean hasIntrusiveHolders) { + /*private static Registry register(ResourceKey> key) { RegistryBuilder builder = new RegistryBuilder<>(key) .sync(true); - if (hasIntrusiveHolders) - builder.withIntrusiveHolders(); Registry registry = builder.create(); ((WritableRegistry) BuiltInRegistries.REGISTRY) @@ -38,10 +33,24 @@ public class MechanicalLemonRegistries { } private static ResourceKey> key(String name) { return ResourceKey.createRegistryKey(MechanicalLemonLib.asResource(name)); + }*/ + public MechanicalLemonRegistries() { + } + + static { + RECIPE_REQUIREMENT_TYPES = (new RegistryBuilder(MechanicalLemonRegistries.Keys.RECIPE_REQUIREMENT_TYPES)).create(); + } + public static final class Keys { + public static final ResourceKey>>> RECIPE_REQUIREMENT_TYPES = key("requirements"); + + public Keys() { + } + + private static ResourceKey> key(String name) { + return ResourceKey.createRegistryKey(MechanicalLemonLib.asResource(name)); + } } public static void init() { - // make sure the class is loaded. - // this method is called at the tail of BuiltInRegistries, injected by BuiltInRegistriesMixin. } }