diff --git a/build.gradle b/build.gradle index 288ea231..a43ba440 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,7 @@ repositories { maven { url "https://maven.shedaniel.me/" } maven { url 'https://jitpack.io' } maven { url 'https://maven.terraformersmc.com/releases' } + maven { url = "https://maven.terraformersmc.com/" } maven { url "https://ladysnake.jfrog.io/artifactory/mods" } maven { url = "https://dvs1.progwml6.com/files/maven/" } maven { url = "https://modmaven.dev" } @@ -56,7 +57,9 @@ dependencies { modCompileOnlyApi "mezz.jei:jei-${project.minecraft_version}-common-api:${project.jei_version}" modCompileOnlyApi "mezz.jei:jei-${project.minecraft_version}-fabric-api:${project.jei_version}" // at runtime, use the full JEI jar for Fabric - modRuntimeOnly "mezz.jei:jei-${project.minecraft_version}-fabric:${project.jei_version}" + //modRuntimeOnly "mezz.jei:jei-${project.minecraft_version}-fabric:${project.jei_version}" + + modImplementation "dev.emi:emi:${emi_version}" //needed for trinkets, otherwise BetterEnd would require users to install trinkets modApi "dev.onyxstudios.cardinal-components-api:cardinal-components-base:${project.cca_version}" diff --git a/gradle.properties b/gradle.properties index 83bbae92..e5ab8067 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,5 +17,6 @@ patchouli_version=1.19-73-FABRIC bclib_version=2.0.17 rei_version=9.1.500 jei_version=11.1.0.235 +emi_version=0.3.0+1.19 trinkets_version=3.4.0 cca_version=5.0.0-beta.1 diff --git a/src/main/java/org/betterx/betterend/integration/emi/EMIAlloyingRecipe.java b/src/main/java/org/betterx/betterend/integration/emi/EMIAlloyingRecipe.java new file mode 100644 index 00000000..2627695b --- /dev/null +++ b/src/main/java/org/betterx/betterend/integration/emi/EMIAlloyingRecipe.java @@ -0,0 +1,74 @@ +package org.betterx.betterend.integration.emi; + +import org.betterx.betterend.recipe.builders.AlloyingRecipe; + +import net.minecraft.resources.ResourceLocation; + +import dev.emi.emi.api.recipe.EmiRecipe; +import dev.emi.emi.api.recipe.EmiRecipeCategory; +import dev.emi.emi.api.render.EmiTexture; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.EmiStack; +import dev.emi.emi.api.widget.WidgetHolder; + +import java.util.List; + +public class EMIAlloyingRecipe implements EmiRecipe { + private final ResourceLocation id; + private final List input; + private final List output; + + public EMIAlloyingRecipe(AlloyingRecipe recipe) { + this.id = recipe.getId(); + this.input = List.of( + EmiIngredient.of(recipe.getIngredients().get(0)), + EmiIngredient.of(recipe.getIngredients().get(1)) + ); + this.output = List.of(EmiStack.of(recipe.getResultItem())); + } + + @Override + public EmiRecipeCategory getCategory() { + return EMIPlugin.END_SMELTER_CATEGORY; + } + + @Override + public ResourceLocation getId() { + return id; + } + + @Override + public List getInputs() { + return input; + } + + @Override + public List getOutputs() { + return output; + } + + @Override + public int getDisplayWidth() { + return 76; + } + + @Override + public int getDisplayHeight() { + return 18; + } + + @Override + public void addWidgets(WidgetHolder widgets) { + // Add an arrow texture to indicate processing + widgets.addTexture(EmiTexture.EMPTY_ARROW, 46, 1); + + // Adds an input slot on the left + widgets.addSlot(input.get(0), 0, 0); + widgets.addSlot(input.get(1), 20, 0); + + // Adds an output slot on the right + // Note that output slots need to call `recipeContext` to inform EMI about their recipe context + // This includes being able to resolve recipe trees, favorite stacks with recipe context, and more + widgets.addSlot(output.get(0), 58, 0).recipeContext(this); + } +} diff --git a/src/main/java/org/betterx/betterend/integration/emi/EMIPlugin.java b/src/main/java/org/betterx/betterend/integration/emi/EMIPlugin.java new file mode 100644 index 00000000..7514fc36 --- /dev/null +++ b/src/main/java/org/betterx/betterend/integration/emi/EMIPlugin.java @@ -0,0 +1,40 @@ +package org.betterx.betterend.integration.emi; + +import org.betterx.bclib.BCLib; +import org.betterx.betterend.BetterEnd; +import org.betterx.betterend.recipe.builders.AlloyingRecipe; +import org.betterx.betterend.registry.EndBlocks; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.RecipeManager; + +import dev.emi.emi.api.EmiPlugin; +import dev.emi.emi.api.EmiRegistry; +import dev.emi.emi.api.recipe.EmiRecipeCategory; +import dev.emi.emi.api.stack.EmiStack; + +public class EMIPlugin implements EmiPlugin { + public static final ResourceLocation MY_SPRITE_SHEET = BetterEnd.makeID( + "textures/gui/emi_simplified_textures.png" + ); + + public static final EmiStack END_SMELTER_WORKSTATION = EmiStack.of(EndBlocks.END_STONE_SMELTER); + public static final EmiRecipeCategory END_SMELTER_CATEGORY = new EmiRecipeCategory( + BCLib.makeID("end_stone_smelter"), + END_SMELTER_WORKSTATION//, + //new EmiTexture(MY_SPRITE_SHEET, 0, 0, 16, 16) + ); + + @Override + public void register(EmiRegistry emiRegistry) { + emiRegistry.addCategory(END_SMELTER_CATEGORY); + + // Add all the workstations your category uses + emiRegistry.addWorkstation(END_SMELTER_CATEGORY, END_SMELTER_WORKSTATION); + + RecipeManager manager = emiRegistry.getRecipeManager(); + for (AlloyingRecipe recipe : manager.getAllRecipesFor(AlloyingRecipe.TYPE)) { + emiRegistry.addRecipe(new EMIAlloyingRecipe(recipe)); + } + } +} diff --git a/src/main/resources/assets/betterend/lang/de_de.json b/src/main/resources/assets/betterend/lang/de_de.json index 0e8a1f7b..e5340a57 100644 --- a/src/main/resources/assets/betterend/lang/de_de.json +++ b/src/main/resources/assets/betterend/lang/de_de.json @@ -619,5 +619,8 @@ "item.betterend.thallasium_shovel_head": "Thallasiumschaufelkopf", "item.betterend.thallasium_sword_blade": "Thallasiumschwertklinge", "item.betterend.thallasium_sword_handle": "Thallasiumschwertgriff", - "block.betterend.aeternium_anvil": "Ätheramboss" + "block.betterend.aeternium_anvil": "Ätheramboss", + "emi.ctegory.bclib.end_stone_smelter": "Endsteinschmelzofen", + "tag.c.barrel": "Fässer", + "tag.betterend.alloying_iron": "Eisenlegierung" } diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index edc73108..b307acf7 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -818,5 +818,8 @@ "block.betterend.pallidium_heavy": "Pallidium (Heavy Cover)", "block.betterend.pallidium_thin": "Pallidium (Thin Cover)", "block.betterend.pallidium_tiny": "Pallidium (Tiny Cover)", - "block.betterend.flammalix": "Flammalix" + "block.betterend.flammalix": "Flammalix", + "emi.ctegory.bclib.end_stone_smelter": "End Stone Smelter", + "tag.c.barrel": "Barrels", + "tag.betterend.alloying_iron": "Iron Alloys" } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index b4629ceb..f12b9928 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -33,6 +33,9 @@ ], "jei_mod_plugin": [ "org.betterx.betterend.integration.jei.JEIPlugin" + ], + "emi": [ + "org.betterx.betterend.integration.emi.EMIPlugin" ] }, "accessWidener": "betterend.accesswidener",