Added NEI input handler for fluid slots

This commit is contained in:
TheDarkDnKTv 2021-04-04 19:57:52 +03:00
parent c21229cc63
commit 50785bb041
7 changed files with 84 additions and 25 deletions

View file

@ -1,7 +1,7 @@
package gregtechmod.common.containers;
import gregtechmod.api.gui.GT_ContainerMetaTile_Machine;
import gregtechmod.api.gui.GT_Slot_Holo;
import gregtechmod.api.gui.GT_FluidSlot;
import gregtechmod.api.gui.GT_Slot_Output;
import gregtechmod.api.interfaces.IGregTechTileEntity;
@ -21,7 +21,7 @@ public class GT_Container_Electrolyzer extends GT_ContainerMetaTile_Machine {
addSlotToContainer(new GT_Slot_Output (mTileEntity, 3, 70, 16));
addSlotToContainer(new GT_Slot_Output (mTileEntity, 4, 90, 16));
addSlotToContainer(new GT_Slot_Output (mTileEntity, 5, 110, 16));
addSlotToContainer(new GT_Slot_Holo (mTileEntity, 6, 110, 46, false, false, 64));
addFluidSlot(new GT_FluidSlot(mTileEntity, 6, 110, 46, 0));
}
public int getSlotCount() {

View file

@ -0,0 +1,45 @@
package gregtechmod.mistaqur.nei;
import codechicken.nei.NEIClientConfig;
import codechicken.nei.guihook.GuiContainerManager;
import codechicken.nei.guihook.IContainerInputHandler;
import codechicken.nei.recipe.GuiCraftingRecipe;
import codechicken.nei.recipe.GuiUsageRecipe;
import gregtechmod.api.gui.GT_FluidSlot;
import gregtechmod.api.util.GT_Utility;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.inventory.Slot;
import net.minecraftforge.fluids.FluidStack;
/**
* @author TheDarkDnKTv
*
*/
public class GT_NEIInputHandler implements IContainerInputHandler {
@Override
public boolean lastKeyTyped(GuiContainer gui, char keyChar, int keyID) {
if (keyID == NEIClientConfig.getKeyBinding("gui.usage") || keyID == NEIClientConfig.getKeyBinding("gui.recipe")) {
Slot slot = GuiContainerManager.getSlotMouseOver(gui);
if (slot != null && slot instanceof GT_FluidSlot) {
FluidStack fluid = ((GT_FluidSlot) slot).getFluid();
if (GT_Utility.isFluidStackValid(fluid)) {
return keyID == NEIClientConfig.getKeyBinding("gui.usage") ? GuiUsageRecipe.openRecipeGui("liquid", fluid.copy()) : GuiCraftingRecipe.openRecipeGui("liquid", fluid.copy());
}
}
}
return false;
}
@Override public boolean mouseClicked(GuiContainer gui, int mousex, int mousey, int button) { return false; }
@Override public boolean keyTyped(GuiContainer gui, char keyChar, int keyCode) { return false; }
@Override public void onKeyTyped(GuiContainer gui, char keyChar, int keyID) {}
@Override public void onMouseClicked(GuiContainer gui, int mousex, int mousey, int button) {}
@Override public void onMouseUp(GuiContainer gui, int mousex, int mousey, int button) {}
@Override public boolean mouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) { return false; }
@Override public void onMouseScrolled(GuiContainer gui, int mousex, int mousey, int scrolled) {}
@Override public void onMouseDragged(GuiContainer gui, int mousex, int mousey, int button, long heldTime) {}
}

View file

@ -11,6 +11,7 @@ import gregtechmod.common.gui.GT_GUIContainer_PlasmaGenerator;
import gregtechmod.common.gui.GT_GUIContainer_SemifluidGenerator;
import gregtechmod.common.gui.GT_GUIContainer_ThermalGenerator;
import gregtechmod.common.recipe.RecipeMaps;
import gregtechmod.mistaqur.nei.handlers.AlloySmelterRecipeHandler;
import gregtechmod.mistaqur.nei.handlers.AssemblerRecipeHandler;
import gregtechmod.mistaqur.nei.handlers.BenderRecipeHandler;
import gregtechmod.mistaqur.nei.handlers.BlastRecipeHandler;
@ -31,6 +32,7 @@ import gregtechmod.mistaqur.nei.handlers.SawmillRecipeHandler;
import gregtechmod.mistaqur.nei.handlers.VacuumFreezerRecipeHandler;
import gregtechmod.mistaqur.nei.handlers.WiremillRecipeHandler;
import codechicken.nei.api.IConfigureNEI;
import codechicken.nei.guihook.GuiContainerManager;
public class NEI_GregTech_Config implements IConfigureNEI {
public static boolean sIsAdded = true;
@ -65,6 +67,8 @@ public class NEI_GregTech_Config implements IConfigureNEI {
new GeneratorHandler(RecipeMaps.PLASMA_FUELS , "plasma_generator" , GT_GUIContainer_PlasmaGenerator.class);
new GeneratorHandler(RecipeMaps.MAGIC_FUELS , "magic_generator" , GT_GUIContainer_MagicEnergyConverter.class);
GuiContainerManager.addInputHandler(new GT_NEIInputHandler());
try {
Class.forName("codechicken.nei.api.API");
codechicken.nei.api.API.registerGuiOverlay(GT_GUIContainer_AdvancedWorkbench.class, "crafting", 57, 22);
@ -89,6 +93,5 @@ public class NEI_GregTech_Config implements IConfigureNEI {
public String getVersion() {
return "(3.08)";
}
}

View file

@ -5,15 +5,20 @@ import java.awt.Rectangle;
import org.lwjgl.opengl.GL11;
import codechicken.lib.gui.GuiDraw;
import codechicken.nei.recipe.GuiCraftingRecipe;
import codechicken.nei.recipe.GuiUsageRecipe;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtechmod.api.GregTech_API;
import gregtechmod.api.util.GT_Utility;
import net.minecraft.client.renderer.Tessellator;
import gregtechmod.common.render.GTRenderHelper;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fluids.FluidStack;
/**
@ -22,16 +27,29 @@ import net.minecraftforge.fluids.FluidStack;
*/
public class PositionedFluidStack {
@SideOnly(Side.CLIENT)
protected static ResourceLocation DEFAULT_SLOT_OVERLAY;
protected boolean renderOverlay;
public int x;
public int y;
public FluidStack fluid;
/**
*
*/
public PositionedFluidStack(FluidStack fluid, int x, int y) {
static {
if (FMLCommonHandler.instance().getSide().isClient()) {
DEFAULT_SLOT_OVERLAY = new ResourceLocation(GregTech_API.GUI_PATH + "overlays/FluidSlot.png");
}
}
PositionedFluidStack(FluidStack fluid, int x, int y) {
this(fluid, x, y, false);
}
PositionedFluidStack(FluidStack fluid, int x, int y, boolean renderOverlay) {
this.x = x;
this.y = y;
this.fluid = fluid;
this.renderOverlay = renderOverlay;
}
public boolean transfer(boolean usage) {
@ -52,29 +70,21 @@ public class PositionedFluidStack {
@SideOnly(Side.CLIENT)
public void draw() {
if (renderOverlay) {
GTRenderHelper.bindTexture(DEFAULT_SLOT_OVERLAY);
GTRenderHelper.drawQuad(x-1, y-1, 0, 18, 18, 0.0F, 1.0F, 0.0F, 1.0F);
}
if (GT_Utility.isFluidStackValid(fluid)) {
IIcon fluidIcon = fluid.getFluid().getIcon(fluid);
fluidIcon = fluidIcon != null ? fluidIcon : fluid.getFluid().getFlowingIcon();
fluidIcon = fluidIcon != null ? fluidIcon : fluid.getFluid().getStillIcon();
if (fluidIcon == null) return;
GuiDraw.changeTexture(TextureMap.locationBlocksTexture);
GTRenderHelper.bindTexture(TextureMap.locationBlocksTexture);
int color = fluid.getFluid().getColor(fluid);
GL11.glColor3ub((byte) (color >> 16 & 0xFF), (byte) (color >> 8 & 0xFF), (byte) (color & 0xFF));
GL11.glDisable(GL11.GL_BLEND);
double minU = fluidIcon.getMinU();
double maxU = fluidIcon.getMaxU();
double minV = fluidIcon.getMinV();
double maxV = fluidIcon.getMaxV();
Tessellator.instance.startDrawingQuads();
Tessellator.instance.addVertexWithUV(x , y + 16 , 0, maxU, minV);
Tessellator.instance.addVertexWithUV(x + 16 , y + 16 , 0, minU, minV);
Tessellator.instance.addVertexWithUV(x + 16 , y , 0, minU, maxV);
Tessellator.instance.addVertexWithUV(x , y , 0, maxU, maxV);
Tessellator.instance.draw();
GTRenderHelper.drawQuad(x, y, 0, fluidIcon);
GL11.glEnable(GL11.GL_BLEND);
}
}

View file

@ -1,4 +1,4 @@
package gregtechmod.mistaqur.nei;
package gregtechmod.mistaqur.nei.handlers;
import gregtechmod.api.GregTech_API;
import gregtechmod.api.recipe.Recipe;
@ -12,6 +12,7 @@ import gregtechmod.common.gui.GT_GUIContainer_BasicMachine_Extractor;
import gregtechmod.common.gui.GT_GUIContainer_BasicMachine_Macerator;
import gregtechmod.common.gui.GT_GUIContainer_Scrapboxinator;
import gregtechmod.common.recipe.RecipeMaps;
import gregtechmod.mistaqur.nei.GT_RecipeHandler;
import java.awt.Rectangle;
import java.util.ArrayList;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB