From fc98505f22c3a26b4a30d6bb54a4ec6179a4621e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Mon, 22 Feb 2021 22:12:52 -0300 Subject: [PATCH] even more JEI integration get ingredient from the crafting calculation GUIs --- .../java/appeng/client/gui/AEGuiHandler.java | 97 +++++++++++++++++++ .../gui/implementations/GuiCraftConfirm.java | 10 ++ .../gui/implementations/GuiCraftingCPU.java | 10 ++ .../implementations/ContainerCraftAmount.java | 6 ++ .../integration/modules/jei/JEIPlugin.java | 4 + 5 files changed, 127 insertions(+) create mode 100644 src/main/java/appeng/client/gui/AEGuiHandler.java diff --git a/src/main/java/appeng/client/gui/AEGuiHandler.java b/src/main/java/appeng/client/gui/AEGuiHandler.java new file mode 100644 index 000000000..749ae4a85 --- /dev/null +++ b/src/main/java/appeng/client/gui/AEGuiHandler.java @@ -0,0 +1,97 @@ +package appeng.client.gui; + +import javax.annotation.Nullable; +import appeng.api.storage.data.IAEItemStack; +import appeng.client.gui.implementations.GuiCraftAmount; +import appeng.client.gui.implementations.GuiCraftConfirm; +import appeng.client.gui.implementations.GuiCraftingCPU; +import appeng.client.gui.widgets.GuiCustomSlot; +import appeng.container.implementations.ContainerCraftAmount; +import mezz.jei.api.gui.IAdvancedGuiHandler; +import net.minecraft.client.renderer.RenderItem; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +import java.awt.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + + +public class AEGuiHandler implements IAdvancedGuiHandler +{ + + @Override + public Class getGuiContainerClass() + { + return AEBaseGui.class; + } + + @Nullable + @Override + public List getGuiExtraAreas( AEBaseGui guiContainer ) + { + return Collections.emptyList(); + } + + @Nullable + @Override + public Object getIngredientUnderMouse( AEBaseGui guiContainer, int mouseX, int mouseY ) + { + List visual = new ArrayList<>(); + int guiSlotIdx = 0; + Object result = null; + if( guiContainer instanceof GuiCraftConfirm ) + { + guiSlotIdx = getSlotidx( guiContainer, mouseX, mouseY, ( (GuiCraftConfirm) guiContainer ).getDisplayedRows() ); + visual = ( (GuiCraftConfirm) guiContainer ).getVisual(); + if( guiSlotIdx < visual.size() && guiSlotIdx != -1 ) + { + result = visual.get( guiSlotIdx ).getDefinition(); + } + else + { + return null; + } + } + + if( guiContainer instanceof GuiCraftingCPU ) + { + guiSlotIdx = getSlotidx( guiContainer, mouseX, mouseY, ( (GuiCraftingCPU) guiContainer ).getDisplayedRows() ); + visual = ( (GuiCraftingCPU) guiContainer ).getVisual(); + if( guiSlotIdx < visual.size() && guiSlotIdx != -1 ) + { + result = visual.get( guiSlotIdx ).getDefinition(); + } + else + { + return null; + } + } + + if( guiContainer instanceof GuiCraftAmount ) + { + if( guiContainer.getSlotUnderMouse() != null ) + { + result = guiContainer.getSlotUnderMouse().getStack(); + } + } + return result; + } + + private int getSlotidx(AEBaseGui guiContainer, int mouseX, int mouseY, int rows) + { + int guileft = guiContainer.getGuiLeft(); + int guitop = guiContainer.getGuiTop(); + int currentScroll = guiContainer.getScrollBar().getCurrentScroll(); + final int xo = 9; + final int yo = 19; + + int guiSlotx = ( mouseX - guileft - xo ) / 67; + if( guiSlotx > 2 || mouseX < guileft + xo ) return -1; + int guiSloty = ( mouseY - guitop - yo ) / 23; + if( guiSloty > ( rows - 1 ) || mouseY < guitop + yo ) return -1; + return ( guiSloty * 3 ) + guiSlotx + ( currentScroll * 3 ); + } +} diff --git a/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java b/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java index 9eb962ae5..bc15044f2 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java +++ b/src/main/java/appeng/client/gui/implementations/GuiCraftConfirm.java @@ -582,4 +582,14 @@ public class GuiCraftConfirm extends AEBaseGui } } } + + public List getVisual() + { + return visual; + } + + public int getDisplayedRows() + { + return this.rows; + } } diff --git a/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java b/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java index f51a7a9a4..6b0ff4bed 100644 --- a/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java +++ b/src/main/java/appeng/client/gui/implementations/GuiCraftingCPU.java @@ -493,4 +493,14 @@ public class GuiCraftingCPU extends AEBaseGui implements ISortSource { return ViewItems.ALL; } + + public List getVisual() + { + return visual; + } + + public int getDisplayedRows() + { + return DISPLAYED_ROWS; + } } diff --git a/src/main/java/appeng/container/implementations/ContainerCraftAmount.java b/src/main/java/appeng/container/implementations/ContainerCraftAmount.java index a0bc41207..7d91e1a04 100644 --- a/src/main/java/appeng/container/implementations/ContainerCraftAmount.java +++ b/src/main/java/appeng/container/implementations/ContainerCraftAmount.java @@ -51,6 +51,12 @@ public class ContainerCraftAmount extends AEBaseContainer this.addSlotToContainer( this.getCraftingItem() ); } + @Override + public Slot getSlot( int slotId ) + { + return super.getSlot( 0 ); + } + @Override public void detectAndSendChanges() { diff --git a/src/main/java/appeng/integration/modules/jei/JEIPlugin.java b/src/main/java/appeng/integration/modules/jei/JEIPlugin.java index 3a3dc2692..50e048d50 100644 --- a/src/main/java/appeng/integration/modules/jei/JEIPlugin.java +++ b/src/main/java/appeng/integration/modules/jei/JEIPlugin.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; +import appeng.client.gui.AEGuiHandler; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; @@ -93,6 +94,9 @@ public class JEIPlugin implements IModPlugin registry.getRecipeTransferRegistry() .addRecipeTransferHandler( new RecipeTransferHandler<>( ContainerPatternTerm.class ), Constants.UNIVERSAL_RECIPE_TRANSFER_UID ); + + AEGuiHandler aeGuiHandler = new AEGuiHandler(); + registry.addAdvancedGuiHandlers(aeGuiHandler); } private void registerDescriptions( IDefinitions definitions, IModRegistry registry )