diff --git a/common/build.gradle b/common/build.gradle index d1c0c021..3aad1003 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -27,6 +27,7 @@ dependencies { implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.1' implementation group: 'com.illusivesoulworks.spectrelib', name: 'spectrelib-common', version: "${spectrelib_version}" implementation group: 'com.electronwill.night-config', name: 'core', version: '3.6.5' + compileOnly "mezz.jei:jei-1.19.2-common-api:${jei_version}" } processResources { diff --git a/common/src/main/java/com/illusivesoulworks/polymorph/common/capability/PlayerRecipeData.java b/common/src/main/java/com/illusivesoulworks/polymorph/common/capability/PlayerRecipeData.java index 5391b076..114aef4c 100644 --- a/common/src/main/java/com/illusivesoulworks/polymorph/common/capability/PlayerRecipeData.java +++ b/common/src/main/java/com/illusivesoulworks/polymorph/common/capability/PlayerRecipeData.java @@ -83,6 +83,7 @@ public , C extends Container> Optional getRecipe(RecipeTy @Override public void selectRecipe(@Nonnull Recipe recipe) { + this.cachedSelection = null; super.selectRecipe(recipe); this.syncPlayerRecipeData(); } diff --git a/common/src/main/java/com/illusivesoulworks/polymorph/common/integration/PolymorphJeiPlugin.java b/common/src/main/java/com/illusivesoulworks/polymorph/common/integration/PolymorphJeiPlugin.java new file mode 100644 index 00000000..16040aa9 --- /dev/null +++ b/common/src/main/java/com/illusivesoulworks/polymorph/common/integration/PolymorphJeiPlugin.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2020-2022 Illusive Soulworks + * + * Polymorph is free software: you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * any later version. + * + * Polymorph is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with Polymorph. If not, see . + */ + +package com.illusivesoulworks.polymorph.common.integration; + +import com.illusivesoulworks.polymorph.PolymorphConstants; +import com.illusivesoulworks.polymorph.client.recipe.RecipesWidget; +import mezz.jei.api.IModPlugin; +import mezz.jei.api.JeiPlugin; +import mezz.jei.api.recipe.transfer.IRecipeTransferContext; +import mezz.jei.api.recipe.transfer.IRecipeTransferListener; +import mezz.jei.api.recipe.transfer.RecipeTransferResult; +import mezz.jei.api.registration.IRecipeTransferRegistration; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.Recipe; + +@JeiPlugin +public final class PolymorphJeiPlugin implements IModPlugin { + + @Override + public ResourceLocation getPluginUid() { + return new ResourceLocation(PolymorphConstants.MOD_ID, "recipe_transfer"); + } + + @Override + public void registerRecipeTransferHandlers(IRecipeTransferRegistration registration) { + registration.addRecipeTransferListener(new PolymorphRecipeTransferListener()); + } + + private static final class PolymorphRecipeTransferListener + implements IRecipeTransferListener { + + @Override + public void afterRecipeTransfer(IRecipeTransferContext context, + RecipeTransferResult result) { + if (result == RecipeTransferResult.SUCCESS && + context.getRecipe() instanceof Recipe recipe) { + RecipesWidget.get().ifPresent(widget -> widget.selectRecipe(recipe.getId())); + } + } + } +} diff --git a/fabric/build.gradle b/fabric/build.gradle index 6c7f934f..67abfc27 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -27,6 +27,8 @@ dependencies { implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.1' implementation project(":common") implementation group: 'com.electronwill.night-config', name: 'core', version: '3.6.5' + compileOnly "mezz.jei:jei-1.19.2-common-api:${jei_version}" + testCompileOnly "mezz.jei:jei-1.19.2-common-api:${jei_version}" include group: 'com.illusivesoulworks.spectrelib', name: 'spectrelib-fabric', version: "${spectrelib_version}" @@ -72,7 +74,7 @@ processResources { filesMatching("fabric.mod.json") { expand 'version': project.version, 'fabric_mc_version_range': project.fabric_mc_version_range, 'license': project.license, 'mod_id': project.mod_id, 'mod_author': project.mod_author, 'mod_description': project.mod_description, - 'mod_name': project.mod_name, 'issue_tracker': project.issue_tracker + 'mod_name': project.mod_name, 'issue_tracker': project.issue_tracker, 'jei_version': project.jei_version } filesMatching("pack.mcmeta") { diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 4cee39d3..7b3e85d9 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -22,6 +22,9 @@ ], "cardinal-components": [ "com.illusivesoulworks.polymorph.common.components.PolymorphFabricComponents" + ], + "jei_mod_plugin": [ + "com.illusivesoulworks.polymorph.common.integration.PolymorphJeiPlugin" ] }, "custom": { @@ -40,5 +43,8 @@ "fabric": "*", "minecraft": "${fabric_mc_version_range}", "java": ">=17" + }, + "suggests": { + "jei": ">=${jei_version}" } } diff --git a/forge/build.gradle b/forge/build.gradle index 1f4092d0..d3554f01 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -111,6 +111,8 @@ dependencies { implementation fg.deobf("curse.maven:fastfurnace-299540:${file_fastfurnace}") implementation fg.deobf("curse.maven:fastsuite-475117:${file_fastsuite}") implementation fg.deobf("curse.maven:placebo-283644:${file_placebo}") + compileOnly "mezz.jei:jei-1.19.2-common-api:${jei_version}" + testCompileOnly "mezz.jei:jei-1.19.2-common-api:${jei_version}" implementation fg.deobf(group: 'com.illusivesoulworks.spectrelib', name: 'spectrelib-forge', version: "${spectrelib_range}") jarJar fg.deobf(group: 'com.illusivesoulworks.spectrelib', name: 'spectrelib-forge', version: "${spectrelib_range}") { @@ -137,7 +139,7 @@ def replaceResources = tasks.register("replaceResources", Copy) { include "META-INF/mods.toml" expand 'version': version, 'forge_mc_version_range': forge_mc_version_range, 'forge_version_range': forge_version_range, 'license': license, 'mod_id': mod_id, 'mod_author': mod_author, 'mod_description': mod_description, - 'mod_name': mod_name, 'issue_tracker': issue_tracker + 'mod_name': mod_name, 'issue_tracker': issue_tracker, 'jei_version': jei_version } it.from(project(":common").sourceSets.main.resources) { include "pack.mcmeta" diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index 83ee6682..a2ce6efb 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -24,3 +24,9 @@ ${mod_description} versionRange="${forge_mc_version_range}" ordering="NONE" side="BOTH" +[[dependencies.polymorph]] + modId="jei" + mandatory=false + versionRange="[${jei_version},)" + ordering="NONE" + side="BOTH" diff --git a/gradle.properties b/gradle.properties index d95b795d..2fd45a94 100644 --- a/gradle.properties +++ b/gradle.properties @@ -29,6 +29,7 @@ file_fastworkbench=4029996 file_fastfurnace=4028348 file_fastsuite=4028357 file_placebo=4028341 +jei_version=11.63.0.1078 # Fabric fabric_version=0.75.1+1.19.2