From eb266f2506e80154341c3f767986cd877147e4b4 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 4 Nov 2016 16:06:54 +0100 Subject: [PATCH] Implement support for JEI R and U keys, fixes #484 --- .../refinedstorage/gui/GuiBase.java | 4 ++ .../refinedstorage/gui/grid/GuiGrid.java | 2 +- .../gui/grid/stack/ClientStackFluid.java | 5 +++ .../gui/grid/stack/ClientStackItem.java | 5 +++ .../gui/grid/stack/IClientStack.java | 2 + .../integration/jei/GuiHandlerGrid.java | 44 +++++++++++++++++++ .../integration/jei/RSJEIPlugin.java | 2 + 7 files changed, 63 insertions(+), 1 deletion(-) create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/integration/jei/GuiHandlerGrid.java diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java index c7dae6d8a..ece1612b7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiBase.java @@ -66,6 +66,10 @@ public abstract class GuiBase extends GuiContainer { this.ySize = height; } + public Scrollbar getScrollbar() { + return scrollbar; + } + @Override public void initGui() { super.initGui(); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java index f4af2a0e5..15b09dbc7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/GuiGrid.java @@ -257,7 +257,7 @@ public class GuiGrid extends GuiBase { return slotNumber >= 0; } - private boolean isOverSlotArea(int mouseX, int mouseY) { + public boolean isOverSlotArea(int mouseX, int mouseY) { return inBounds(7, 19, 162, 18 * getVisibleRows(), mouseX, mouseY); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackFluid.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackFluid.java index 488bace2c..ab9fc96ef 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackFluid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackFluid.java @@ -50,6 +50,11 @@ public class ClientStackFluid implements IClientStack { gui.drawQuantity(x, y, RSUtils.QUANTITY_FORMATTER.format((float) stack.amount / 1000F)); } + @Override + public Object getIngredient() { + return stack; + } + @Override public boolean equals(Object obj) { return obj instanceof ClientStackFluid && ((ClientStackFluid) obj).getStack().isFluidEqual(stack); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java index af1512419..5cdb530bb 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/ClientStackItem.java @@ -88,6 +88,11 @@ public class ClientStackItem implements IClientStack { gui.drawItem(x, y, stack, true, getQuantityForDisplay(isOverWithShift)); } + @Override + public Object getIngredient() { + return stack; + } + @Override public boolean equals(Object obj) { return obj instanceof IClientStack && ((ClientStackItem) obj).getHash() == hash; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/IClientStack.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/IClientStack.java index bf74fe651..653ef756f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/IClientStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/grid/stack/IClientStack.java @@ -14,4 +14,6 @@ public interface IClientStack { int getQuantity(); void draw(GuiBase gui, int x, int y, boolean isOverWithShift); + + Object getIngredient(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/GuiHandlerGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/GuiHandlerGrid.java new file mode 100755 index 000000000..f9e54f00b --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/GuiHandlerGrid.java @@ -0,0 +1,44 @@ +package com.raoulvdberge.refinedstorage.integration.jei; + +import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; +import mezz.jei.api.gui.IAdvancedGuiHandler; + +import javax.annotation.Nullable; +import java.awt.*; +import java.util.List; + +public class GuiHandlerGrid implements IAdvancedGuiHandler { + @Override + public Class getGuiContainerClass() { + return GuiGrid.class; + } + + @Nullable + @Override + public List getGuiExtraAreas(GuiGrid guiContainer) { + return null; + } + + @Nullable + @Override + public Object getIngredientUnderMouse(GuiGrid guiContainer, int mouseX, int mouseY) { + mouseX -= guiContainer.getGuiLeft(); + mouseY -= guiContainer.getGuiTop(); + + if (guiContainer.isOverSlotArea(mouseX, mouseY)) { + mouseX -= 7; + mouseY -= 19; + + int x = mouseX / 18; + int y = mouseY / 18; + + y += guiContainer.getScrollbar().getOffset(); + + int slot = y * 9 + x; + + return slot >= 0 && slot < GuiGrid.STACKS.size() ? GuiGrid.STACKS.get(slot).getIngredient() : null; + } + + return null; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RSJEIPlugin.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RSJEIPlugin.java index 718bd58b2..482b4a778 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RSJEIPlugin.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/jei/RSJEIPlugin.java @@ -29,6 +29,8 @@ public class RSJEIPlugin extends BlankModPlugin { registry.addRecipes(RecipeMakerSolderer.getRecipes()); registry.addRecipeCategoryCraftingItem(new ItemStack(RSBlocks.SOLDERER), RecipeCategorySolderer.ID); + + registry.addAdvancedGuiHandlers(new GuiHandlerGrid()); } @Override