From e74caf9198fda4eb5fc900b68162c667dbe5a696 Mon Sep 17 00:00:00 2001 From: Frank Date: Tue, 13 Jun 2023 17:05:20 +0200 Subject: [PATCH] [Change] Re-Enabled EMI Support --- build.gradle | 4 +- gradle.properties | 2 +- .../integration/emi/EMIBlastingRecipe.java | 76 ++--- .../integration/emi/EMIInfusionRecipe.java | 259 +++++++++--------- .../betterend/integration/emi/EMIPlugin.java | 76 ++--- .../emi/TransparentSlotWidget.java | 91 ------ 6 files changed, 210 insertions(+), 298 deletions(-) delete mode 100644 src/main/java/org/betterx/betterend/integration/emi/TransparentSlotWidget.java diff --git a/build.gradle b/build.gradle index f523cd1c..b7f69017 100644 --- a/build.gradle +++ b/build.gradle @@ -98,7 +98,9 @@ dependencies { //needed for trinkets, otherwise BetterEnd would require users to install trinkets // modApi "dev.onyxstudios.cardinal-components-api:cardinal-components-base:${project.cca_version}" // modCompileOnly "dev.emi:trinkets:${project.trinkets_version}" -// modCompileOnly "dev.emi:emi:${emi_version}" + + modCompileOnly "dev.emi:emi-fabric:${emi_version}:api" + modLocalRuntime "dev.emi:emi-fabric:${emi_version}" if (local_wunderlib) { println "Using local WunderLib" diff --git a/gradle.properties b/gradle.properties index 151f850f..0d747405 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,6 +21,6 @@ archives_base_name=better-end patchouli_version=1.19-73-FABRIC bclib_version=3.0.3 rei_version=12.0.622 -emi_version=0.7.3+1.19.4 +emi_version=1.0.2+1.20 trinkets_version=3.6.0 cca_version=5.1.0 diff --git a/src/main/java/org/betterx/betterend/integration/emi/EMIBlastingRecipe.java b/src/main/java/org/betterx/betterend/integration/emi/EMIBlastingRecipe.java index 3624c5f6..2924544d 100644 --- a/src/main/java/org/betterx/betterend/integration/emi/EMIBlastingRecipe.java +++ b/src/main/java/org/betterx/betterend/integration/emi/EMIBlastingRecipe.java @@ -1,40 +1,40 @@ package org.betterx.betterend.integration.emi; -//import org.betterx.bclib.integration.emi.EMIAbstractAlloyingRecipe; -//import org.betterx.bclib.integration.emi.EMIPlugin; -//import org.betterx.betterend.BetterEnd; -// -//import net.minecraft.resources.ResourceLocation; -//import net.minecraft.world.Container; -//import net.minecraft.world.item.crafting.BlastingRecipe; -//import net.minecraft.world.item.crafting.RecipeManager; -//import net.minecraft.world.item.crafting.RecipeType; -// -//import dev.emi.emi.api.EmiRegistry; -// -//public class EMIBlastingRecipe extends EMIAbstractAlloyingRecipe { -// public EMIBlastingRecipe(BlastingRecipe recipe) { -// super(recipe, new ResourceLocation( -// "emi", -// recipe.getId().getNamespace() + "/" + recipe.getId().getPath() + "/allloying" -// ), 1, false); -// } -// -// @Override -// protected int getSmeltTime() { -// return recipe.getCookingTime(); -// } -// -// @Override -// protected float getExperience() { -// return recipe.getExperience(); -// } -// -// -// static void addAllRecipes(EmiRegistry emiRegistry, RecipeManager manager) { -// EMIPlugin.addAllRecipes( -// emiRegistry, manager, BetterEnd.LOGGER, -// RecipeType.BLASTING, EMIBlastingRecipe::new -// ); -// } -//} +import org.betterx.bclib.integration.emi.EMIAbstractAlloyingRecipe; +import org.betterx.bclib.integration.emi.EMIPlugin; +import org.betterx.betterend.BetterEnd; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.Container; +import net.minecraft.world.item.crafting.BlastingRecipe; +import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.world.item.crafting.RecipeType; + +import dev.emi.emi.api.EmiRegistry; + +public class EMIBlastingRecipe extends EMIAbstractAlloyingRecipe { + public EMIBlastingRecipe(BlastingRecipe recipe) { + super(recipe, new ResourceLocation( + "emi", + recipe.getId().getNamespace() + "/" + recipe.getId().getPath() + "/allloying" + ), 1, false); + } + + @Override + protected int getSmeltTime() { + return recipe.getCookingTime(); + } + + @Override + protected float getExperience() { + return recipe.getExperience(); + } + + + static void addAllRecipes(EmiRegistry emiRegistry, RecipeManager manager) { + EMIPlugin.addAllRecipes( + emiRegistry, manager, BetterEnd.LOGGER, + RecipeType.BLASTING, EMIBlastingRecipe::new + ); + } +} diff --git a/src/main/java/org/betterx/betterend/integration/emi/EMIInfusionRecipe.java b/src/main/java/org/betterx/betterend/integration/emi/EMIInfusionRecipe.java index 88a6b090..3b0750cf 100644 --- a/src/main/java/org/betterx/betterend/integration/emi/EMIInfusionRecipe.java +++ b/src/main/java/org/betterx/betterend/integration/emi/EMIInfusionRecipe.java @@ -1,131 +1,132 @@ package org.betterx.betterend.integration.emi; -//import org.betterx.betterend.BetterEnd; -//import org.betterx.betterend.recipe.builders.InfusionRecipe; -//import org.betterx.ui.ColorUtil; -// -//import net.minecraft.client.Minecraft; -//import net.minecraft.network.chat.Component; -//import net.minecraft.network.chat.Style; -//import net.minecraft.resources.ResourceLocation; -//import net.minecraft.util.FormattedCharSequence; -//import net.minecraft.world.item.crafting.RecipeManager; -// -//import dev.emi.emi.api.EmiRegistry; -//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; -//import org.jetbrains.annotations.Nullable; -// -//public class EMIInfusionRecipe implements EmiRecipe { -// public final static EmiTexture BACKGROUND = new EmiTexture( -// BetterEnd.makeID("textures/gui/infusion.png"), -// 0, 0, -// 84, 84, 84, 84, 84, 84 -// ); -// -// public final Component[] ORIENTATIONS = { -// Component.translatable("betterend.infusion.north").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), -// Component.translatable("betterend.infusion.north_east").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), -// Component.translatable("betterend.infusion.east").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), -// Component.translatable("betterend.infusion.south_east").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), -// Component.translatable("betterend.infusion.south").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), -// Component.translatable("betterend.infusion.south_west").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), -// Component.translatable("betterend.infusion.west").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), -// Component.translatable("betterend.infusion.north_west").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), -// }; -// private final ResourceLocation id; -// private final List input; -// private final List output; -// -// public EMIInfusionRecipe(InfusionRecipe recipe) { -// this.id = recipe.getId(); -// this.input = recipe.getIngredients().stream().map(i -> EmiIngredient.of(i)).toList(); -// this.output = List.of(EmiStack.of(recipe.getResultItem(Minecraft.getInstance().level.registryAccess()))); -// } -// -// static void addAllRecipes(EmiRegistry emiRegistry, RecipeManager manager) { -// org.betterx.bclib.integration.emi.EMIPlugin.addAllRecipes( -// emiRegistry, manager, BetterEnd.LOGGER, -// InfusionRecipe.TYPE, EMIInfusionRecipe::new -// ); -// } -// -// -// @Override -// public EmiRecipeCategory getCategory() { -// return EMIPlugin.INFUSION_CATEGORY; -// } -// -// @Override -// public @Nullable ResourceLocation getId() { -// return id; -// } -// -// @Override -// public List getInputs() { -// return input; -// } -// -// @Override -// public List getOutputs() { -// return output; -// } -// -// @Override -// public int getDisplayWidth() { -// return 4 + 10 + 84 + 68; -// } -// -// @Override -// public int getDisplayHeight() { -// return 4 + 20 + 84; -// } -// -// @Override -// public void addWidgets(WidgetHolder widgets) { -// final int radius = 36; -// final int halfSize = 9; -// final int left = 10; -// final int top = 17; -// -// final int cx = left + 84 / 2; -// final int cy = top + 84 / 2; -// -// final int right = left + 84; -// final int bottom = top + 84; -// widgets.addTexture(BACKGROUND, left, top); -// // Add an arrow texture to indicate processing -// widgets.addTexture(EmiTexture.EMPTY_ARROW, right + 10, cy - 8); -// -// // Adds an input slot on the left -// widgets.add(new TransparentSlotWidget(input.get(0), cx - halfSize, cy - halfSize)); -// -// FormattedCharSequence str = FormattedCharSequence.forward("N", Style.EMPTY); -// widgets.addText(str, cx - Minecraft.getInstance().font.width(str) / 2, 4, ColorUtil.WHITE, true); -// double a = Math.PI; -// for (int i = 1; i < input.size(); i++) { -// widgets.add(new TransparentSlotWidget( -// input.get(i), -// cx - halfSize + (int) (Math.sin(a) * radius), -// cy - halfSize + (int) (Math.cos(a) * radius) -// )).appendTooltip(ORIENTATIONS[i - 1]); -// a -= Math.PI / 4; -// } -// -// // 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), right + 40, cy - (halfSize + 4)).output(true).recipeContext(this); -// } -// -// @Override -// public boolean supportsRecipeTree() { -// return true; -// } -//} +import org.betterx.betterend.BetterEnd; +import org.betterx.betterend.recipe.builders.InfusionRecipe; +import org.betterx.ui.ColorUtil; + +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.Style; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.FormattedCharSequence; +import net.minecraft.world.item.crafting.RecipeManager; + +import dev.emi.emi.api.EmiRegistry; +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.SlotWidget; +import dev.emi.emi.api.widget.WidgetHolder; + +import java.util.List; +import org.jetbrains.annotations.Nullable; + +public class EMIInfusionRecipe implements EmiRecipe { + public final static EmiTexture BACKGROUND = new EmiTexture( + BetterEnd.makeID("textures/gui/infusion.png"), + 0, 0, + 84, 84, 84, 84, 84, 84 + ); + + public final Component[] ORIENTATIONS = { + Component.translatable("betterend.infusion.north").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), + Component.translatable("betterend.infusion.north_east").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), + Component.translatable("betterend.infusion.east").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), + Component.translatable("betterend.infusion.south_east").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), + Component.translatable("betterend.infusion.south").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), + Component.translatable("betterend.infusion.south_west").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), + Component.translatable("betterend.infusion.west").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), + Component.translatable("betterend.infusion.north_west").setStyle(Style.EMPTY.withColor(ColorUtil.GRAY)), + }; + private final ResourceLocation id; + private final List input; + private final List output; + + public EMIInfusionRecipe(InfusionRecipe recipe) { + this.id = recipe.getId(); + this.input = recipe.getIngredients().stream().map(i -> EmiIngredient.of(i)).toList(); + this.output = List.of(EmiStack.of(recipe.getResultItem(Minecraft.getInstance().level.registryAccess()))); + } + + static void addAllRecipes(EmiRegistry emiRegistry, RecipeManager manager) { + org.betterx.bclib.integration.emi.EMIPlugin.addAllRecipes( + emiRegistry, manager, BetterEnd.LOGGER, + InfusionRecipe.TYPE, EMIInfusionRecipe::new + ); + } + + + @Override + public EmiRecipeCategory getCategory() { + return EMIPlugin.INFUSION_CATEGORY; + } + + @Override + public @Nullable ResourceLocation getId() { + return id; + } + + @Override + public List getInputs() { + return input; + } + + @Override + public List getOutputs() { + return output; + } + + @Override + public int getDisplayWidth() { + return 4 + 10 + 84 + 68; + } + + @Override + public int getDisplayHeight() { + return 4 + 20 + 84; + } + + @Override + public void addWidgets(WidgetHolder widgets) { + final int radius = 36; + final int halfSize = 9; + final int left = 10; + final int top = 17; + + final int cx = left + 84 / 2; + final int cy = top + 84 / 2; + + final int right = left + 84; + final int bottom = top + 84; + widgets.addTexture(BACKGROUND, left, top); + // Add an arrow texture to indicate processing + widgets.addTexture(EmiTexture.EMPTY_ARROW, right + 10, cy - 8); + + // Adds an input slot on the left + widgets.add(new SlotWidget(input.get(0), cx - halfSize, cy - halfSize)); + + FormattedCharSequence str = FormattedCharSequence.forward("N", Style.EMPTY); + widgets.addText(str, cx - Minecraft.getInstance().font.width(str) / 2, 4, ColorUtil.WHITE, true); + double a = Math.PI; + for (int i = 1; i < input.size(); i++) { + widgets.add(new SlotWidget( + input.get(i), + cx - halfSize + (int) (Math.sin(a) * radius), + cy - halfSize + (int) (Math.cos(a) * radius) + )).appendTooltip(ORIENTATIONS[i - 1]); + a -= Math.PI / 4; + } + + // 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), right + 40, cy - (halfSize + 4)).large(true).recipeContext(this); + } + + @Override + public boolean supportsRecipeTree() { + return true; + } +} diff --git a/src/main/java/org/betterx/betterend/integration/emi/EMIPlugin.java b/src/main/java/org/betterx/betterend/integration/emi/EMIPlugin.java index f35d59f5..c06184f3 100644 --- a/src/main/java/org/betterx/betterend/integration/emi/EMIPlugin.java +++ b/src/main/java/org/betterx/betterend/integration/emi/EMIPlugin.java @@ -1,40 +1,40 @@ package org.betterx.betterend.integration.emi; -//import org.betterx.betterend.BetterEnd; -//import org.betterx.betterend.registry.EndBlocks; -// -//import net.minecraft.world.item.crafting.RecipeManager; -// -//import dev.emi.emi.api.EmiRegistry; -//import dev.emi.emi.api.recipe.EmiRecipeCategory; -//import dev.emi.emi.api.recipe.VanillaEmiRecipeCategories; -//import dev.emi.emi.api.stack.EmiStack; -// -//public class EMIPlugin implements dev.emi.emi.api.EmiPlugin { -// public static final EmiStack INFUSION_WORKSTATION = EmiStack.of(EndBlocks.INFUSION_PEDESTAL); -// public static final EmiStack AZURE_JADESTONE_FURNACE_WORKSTATION = EmiStack.of(EndBlocks.AZURE_JADESTONE.furnace); -// public static final EmiStack SANDY_JADESTONE_FURNACE_WORKSTATION = EmiStack.of(EndBlocks.SANDY_JADESTONE.furnace); -// public static final EmiStack VIRID_JADESTONE_FURNACE_WORKSTATION = EmiStack.of(EndBlocks.VIRID_JADESTONE.furnace); -// -// public static final EmiRecipeCategory INFUSION_CATEGORY = new EmiRecipeCategory( -// BetterEnd.makeID("infusion"), -// INFUSION_WORKSTATION, -// org.betterx.bclib.integration.emi.EMIPlugin.getSprite(0, 16) -// ); -// -// @Override -// public void register(EmiRegistry emiRegistry) { -// final RecipeManager manager = emiRegistry.getRecipeManager(); -// emiRegistry.addCategory(INFUSION_CATEGORY); -// emiRegistry.addWorkstation(INFUSION_CATEGORY, INFUSION_WORKSTATION); -// -// EMIInfusionRecipe.addAllRecipes(emiRegistry, manager); -// if (org.betterx.bclib.integration.emi.EMIPlugin.END_ALLOYING_CATEGORY != null) { -// EMIBlastingRecipe.addAllRecipes(emiRegistry, manager); -// } -// -// emiRegistry.addWorkstation(VanillaEmiRecipeCategories.SMELTING, AZURE_JADESTONE_FURNACE_WORKSTATION); -// emiRegistry.addWorkstation(VanillaEmiRecipeCategories.SMELTING, SANDY_JADESTONE_FURNACE_WORKSTATION); -// emiRegistry.addWorkstation(VanillaEmiRecipeCategories.SMELTING, VIRID_JADESTONE_FURNACE_WORKSTATION); -// } -//} +import org.betterx.betterend.BetterEnd; +import org.betterx.betterend.registry.EndBlocks; + +import net.minecraft.world.item.crafting.RecipeManager; + +import dev.emi.emi.api.EmiRegistry; +import dev.emi.emi.api.recipe.EmiRecipeCategory; +import dev.emi.emi.api.recipe.VanillaEmiRecipeCategories; +import dev.emi.emi.api.stack.EmiStack; + +public class EMIPlugin implements dev.emi.emi.api.EmiPlugin { + public static final EmiStack INFUSION_WORKSTATION = EmiStack.of(EndBlocks.INFUSION_PEDESTAL); + public static final EmiStack AZURE_JADESTONE_FURNACE_WORKSTATION = EmiStack.of(EndBlocks.AZURE_JADESTONE.furnace); + public static final EmiStack SANDY_JADESTONE_FURNACE_WORKSTATION = EmiStack.of(EndBlocks.SANDY_JADESTONE.furnace); + public static final EmiStack VIRID_JADESTONE_FURNACE_WORKSTATION = EmiStack.of(EndBlocks.VIRID_JADESTONE.furnace); + + public static final EmiRecipeCategory INFUSION_CATEGORY = new EmiRecipeCategory( + BetterEnd.makeID("infusion"), + INFUSION_WORKSTATION, + org.betterx.bclib.integration.emi.EMIPlugin.getSprite(0, 16) + ); + + @Override + public void register(EmiRegistry emiRegistry) { + final RecipeManager manager = emiRegistry.getRecipeManager(); + emiRegistry.addCategory(INFUSION_CATEGORY); + emiRegistry.addWorkstation(INFUSION_CATEGORY, INFUSION_WORKSTATION); + + EMIInfusionRecipe.addAllRecipes(emiRegistry, manager); + if (org.betterx.bclib.integration.emi.EMIPlugin.END_ALLOYING_CATEGORY != null) { + EMIBlastingRecipe.addAllRecipes(emiRegistry, manager); + } + + emiRegistry.addWorkstation(VanillaEmiRecipeCategories.SMELTING, AZURE_JADESTONE_FURNACE_WORKSTATION); + emiRegistry.addWorkstation(VanillaEmiRecipeCategories.SMELTING, SANDY_JADESTONE_FURNACE_WORKSTATION); + emiRegistry.addWorkstation(VanillaEmiRecipeCategories.SMELTING, VIRID_JADESTONE_FURNACE_WORKSTATION); + } +} diff --git a/src/main/java/org/betterx/betterend/integration/emi/TransparentSlotWidget.java b/src/main/java/org/betterx/betterend/integration/emi/TransparentSlotWidget.java deleted file mode 100644 index f7b250bb..00000000 --- a/src/main/java/org/betterx/betterend/integration/emi/TransparentSlotWidget.java +++ /dev/null @@ -1,91 +0,0 @@ -package org.betterx.betterend.integration.emi; - -//import de.ambertation.wunderlib.ui.layout.components.render.RenderHelper; -// -//import com.mojang.blaze3d.systems.RenderSystem; -//import com.mojang.blaze3d.vertex.PoseStack; -//import net.minecraft.client.gui.GuiComponent; -// -//import dev.emi.emi.EmiPort; -//import dev.emi.emi.EmiRenderHelper; -//import dev.emi.emi.api.render.EmiRender; -//import dev.emi.emi.api.stack.EmiIngredient; -//import dev.emi.emi.api.widget.Bounds; -//import dev.emi.emi.api.widget.SlotWidget; -//import dev.emi.emi.config.EmiConfig; -// -//public class TransparentSlotWidget extends SlotWidget { -// -// public TransparentSlotWidget(EmiIngredient stack, int x, int y) { -// super(stack, x, y); -// } -// -// -// @Override -// public void render(PoseStack matrices, int mouseX, int mouseY, float delta) { -// Bounds bounds = this.getBounds(); -// EmiPort.setPositionTexShader(); -// RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); -// int width = bounds.width(); -// int height = bounds.height(); -// if (this.drawBack) { -// if (this.textureId != null) { -// RenderSystem.setShaderTexture(0, this.textureId); -// GuiComponent.blit( -// matrices, -// bounds.x(), bounds.y(), width, height, -// this.u, this.v, width, height, 256, 256 -// ); -// } else { -// renderSlot(matrices); -// } -// } -// -//// if (this.getRecipe() == null -//// && EmiClient.availableForCrafting.containsKey(this.getStack()) -//// && !this.getStack().isEmpty() -//// && !(Boolean) EmiClient.availableForCrafting.get(this.getStack())) { -//// GuiComponent.fill( -//// matrices, -//// bounds.x(), bounds.y(), -//// bounds.x() + bounds.width(), bounds.y() + bounds.height(), -//// 0x44FF0000 -//// ); -//// } -// -// int xOff = (width - 16) / 2; -// int yOff = (height - 16) / 2; -// this.getStack().render(matrices, bounds.x() + xOff, bounds.y() + yOff, delta); -// if (this.catalyst) { -// EmiRender.renderCatalystIcon(this.getStack(), matrices, this.x + xOff, this.y + yOff); -// } -// -// if (EmiConfig.showHoverOverlay && bounds.contains(mouseX, mouseY)) { -// EmiRenderHelper.drawSlotHightlight( -// matrices, -// bounds.x() + 1, bounds.y() + 1, -// bounds.width() - 2, bounds.height() - 2 -// ); -// } -// -// } -// -// public void renderSlot(PoseStack matrices) { -// Bounds bounds = this.getBounds(); -// int width = bounds.width(); -// int height = bounds.height(); -// -// GuiComponent.fill(matrices, bounds.x(), bounds.y(), bounds.x() + width, bounds.y() + height, 0xB08b8b8b); -// RenderHelper.outline( -// matrices, -// bounds.x(), -// bounds.y(), -// bounds.x() + width, -// bounds.y() + height, -// 0xFA373737, -// 0xFAFFFFFF -// ); -// RenderHelper.vLine(matrices, bounds.x() + width - 1, bounds.y(), bounds.y(), 0xFA8B8B8B); -// RenderHelper.hLine(matrices, bounds.x(), bounds.x(), bounds.y() + bounds.height() - 1, 0xFA8B8B8B); -// } -//}