@@ -3,19 +3,23 @@ package com.p_nsk.replicated_integration.adapter.vanilla
33import com.buuz135.replication.calculation.MatterValue
44import com.buuz135.replication.recipe.MatterValueRecipe
55import com.p_nsk.replicated_integration.api.ExplicitMatterSource
6- import com.p_nsk.replicated_integration.api.MatterValueRecipeExtension
76import com.p_nsk.replicated_integration.api.IConversionSink
87import com.p_nsk.replicated_integration.api.LiteMatterCompound
98import com.p_nsk.replicated_integration.api.LiteResourceLocation
109import com.p_nsk.replicated_integration.api.MatterAmount
10+ import com.p_nsk.replicated_integration.api.MatterNodeKey
1111import com.p_nsk.replicated_integration.api.MatterNodes
1212import com.p_nsk.replicated_integration.api.MutableMatterDefaults
13+ import com.p_nsk.replicated_integration.api.MutableMatterSelectors
1314import com.p_nsk.replicated_integration.api.RecipeConversionMapper
1415import com.p_nsk.replicated_integration.api.ReplicationAddon
1516import com.p_nsk.replicated_integration.api.ReplicationAddonEnvironment
17+ import com.p_nsk.replicated_integration.api.MatterSelectorKey
18+ import com.p_nsk.replicated_integration.api.MatterSelectorKind
1619import com.p_nsk.replicated_integration.bridge.ForgeRecipeConversionSupport
1720import com.p_nsk.replicated_integration.bridge.ForgeReplicationAddonContext
1821import com.p_nsk.replicated_integration.data.MatterNodeValueReloadListener
22+ import com.p_nsk.replicated_integration.mixin.IngredientAccessor
1923import com.p_nsk.replicated_integration.recipe.replicatedIntegrationDenied
2024import net.minecraft.core.registries.BuiltInRegistries
2125import net.minecraft.resources.ResourceLocation
@@ -37,10 +41,13 @@ object ReplicationVanillaAddon : ReplicationAddon<ForgeReplicationAddonContext>
3741 override fun isEnabled (environment : ReplicationAddonEnvironment ): Boolean = true
3842
3943 override fun collectDefaults (context : ForgeReplicationAddonContext , defaults : MutableMatterDefaults ) {
40- importDefaults(context.defaultMatterRecipes, defaults)
4144 defaults.putAll(MatterNodeValueReloadListener .snapshot())
4245 }
4346
47+ override fun collectSelectors (context : ForgeReplicationAddonContext , selectors : MutableMatterSelectors ) {
48+ importDefaults(context.defaultMatterRecipes, selectors)
49+ }
50+
4451 override fun collectConversions (context : ForgeReplicationAddonContext , collector : IConversionSink ) {
4552 val recipes = buildList {
4653 addAll(context.recipeManager.getAllRecipesFor(RecipeType .CRAFTING ))
@@ -59,17 +66,27 @@ object ReplicationVanillaAddon : ReplicationAddon<ForgeReplicationAddonContext>
5966
6067 private fun importDefaults (
6168 recipes : List <MatterValueRecipe >,
62- defaults : MutableMatterDefaults ,
69+ selectors : MutableMatterSelectors ,
6370 ) {
6471 for (recipe in recipes) {
72+ val explicitSelector = recipe.input.explicitDefaultSelectorOrNull()
73+ if (explicitSelector != null ) {
74+ if (recipe.replicatedIntegrationDenied) {
75+ selectors.deny(explicitSelector, ExplicitMatterSource .DATAPACK )
76+ continue
77+ }
78+ val compound = recipe.matter.toLiteMatterCompound() ? : continue
79+ selectors.put(explicitSelector, compound, ExplicitMatterSource .DATAPACK )
80+ continue
81+ }
6582 for (stack in recipe.input.items) {
66- val node = BuiltinNodeResolver .itemNode(stack) ? : continue
83+ val itemNode = BuiltinNodeResolver .itemNode(stack) ? : continue
6784 if (recipe.replicatedIntegrationDenied) {
68- defaults .deny(node , ExplicitMatterSource .DATAPACK )
85+ selectors .deny(MatterSelectorKey ( MatterSelectorKind . NODE , itemNode.type, itemNode.id) , ExplicitMatterSource .DATAPACK )
6986 continue
7087 }
7188 val compound = recipe.matter.toLiteMatterCompound() ? : continue
72- defaults .put(node , compound, ExplicitMatterSource .DATAPACK )
89+ selectors .put(MatterSelectorKey ( MatterSelectorKind . NODE , itemNode.type, itemNode.id) , compound, ExplicitMatterSource .DATAPACK )
7390 }
7491 }
7592 }
@@ -131,6 +148,29 @@ object ReplicationVanillaAddon : ReplicationAddon<ForgeReplicationAddonContext>
131148 },
132149 )
133150
151+ private fun Ingredient.explicitDefaultSelectorOrNull () =
152+ explicitDefaultTagSelectorOrNull() ? : explicitDefaultItemSelectorOrNull()
153+
154+ private fun Ingredient.explicitDefaultItemSelectorOrNull () =
155+ ((this as IngredientAccessor ).`replicated_integration$getValues`().singleOrNull() as ? Ingredient .ItemValue )
156+ ?.serialize()
157+ ?.getAsJsonPrimitive(" item" )
158+ ?.asString
159+ ?.let (ResourceLocation ::parse)
160+ ?.let { itemId ->
161+ MatterSelectorKey (MatterSelectorKind .NODE , MatterNodes .ITEM , ForgeRecipeConversionSupport .run { itemId.toLite() })
162+ }
163+
164+ private fun Ingredient.explicitDefaultTagSelectorOrNull () =
165+ ((this as IngredientAccessor ).`replicated_integration$getValues`().singleOrNull() as ? Ingredient .TagValue )
166+ ?.serialize()
167+ ?.getAsJsonPrimitive(" tag" )
168+ ?.asString
169+ ?.let (ResourceLocation ::parse)
170+ ?.let { tagId ->
171+ MatterSelectorKey (MatterSelectorKind .TAG , MatterNodes .ITEM , ForgeRecipeConversionSupport .run { tagId.toLite() })
172+ }
173+
134174 private inline fun <reified R : Recipe <* >> singleOutputMapper (
135175 context : ForgeReplicationAddonContext ,
136176 crossinline extractor : ForgeReplicationAddonContext .(R ) -> ConversionInputs ? ,
0 commit comments