From b1f29c6c04170c322cc2f7631147a4c8f86160cd Mon Sep 17 00:00:00 2001 From: moller21 <42100910+moller21@users.noreply.github.com> Date: Sun, 3 May 2020 23:55:23 +0200 Subject: Added cover guis for pump/filter --- src/main/java/gregtech/common/GT_Client.java | 2 +- src/main/java/gregtech/common/GT_Network.java | 2 +- src/main/java/gregtech/common/GT_Proxy.java | 20 ++- .../common/covers/GT_Cover_Fluidfilter.java | 173 ++++++++++++++++++--- .../java/gregtech/common/covers/GT_Cover_Pump.java | 170 +++++++++++++++++--- 5 files changed, 318 insertions(+), 49 deletions(-) (limited to 'src/main/java/gregtech/common') diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java index 978afd9e06..9b7bdbfed6 100644 --- a/src/main/java/gregtech/common/GT_Client.java +++ b/src/main/java/gregtech/common/GT_Client.java @@ -446,7 +446,7 @@ public class GT_Client extends GT_Proxy TileEntity aTileEntity = aEvent.player.worldObj.getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); try { Class.forName("codechicken.lib.vec.Rotation"); - if (((aTileEntity instanceof BaseMetaPipeEntity)) && (((ICoverable) aTileEntity).getCoverIDAtSide((byte) aEvent.target.sideHit) == 0) && ((GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCovers.keySet())) || (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCrowbarList)) || (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWireCutterList)) || (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sScrewdriverList))|| GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sSolderingToolList))) { + if ((aTileEntity instanceof BaseMetaPipeEntity) && ((BaseMetaPipeEntity) aTileEntity).shouldDisplayWrenchGrid(aEvent.currentItem, (byte) aEvent.target.sideHit)) { drawGrid(aEvent); return; } diff --git a/src/main/java/gregtech/common/GT_Network.java b/src/main/java/gregtech/common/GT_Network.java index 1b315c3085..5fd315b7ce 100644 --- a/src/main/java/gregtech/common/GT_Network.java +++ b/src/main/java/gregtech/common/GT_Network.java @@ -35,7 +35,7 @@ public class GT_Network public GT_Network() { this.mChannel = NetworkRegistry.INSTANCE.newChannel("GregTech", new ChannelHandler[]{this, new HandlerShared()}); - this.mSubChannels = new GT_Packet[]{new GT_Packet_TileEntity(), new GT_Packet_Sound(), new GT_Packet_Block_Event(), new GT_Packet_Ores(), new GT_Packet_Pollution(), new MessageSetFlaskCapacity()}; + this.mSubChannels = new GT_Packet[]{new GT_Packet_TileEntity(), new GT_Packet_Sound(), new GT_Packet_Block_Event(), new GT_Packet_Ores(), new GT_Packet_Pollution(), new MessageSetFlaskCapacity(), new GT_Packet_TileEntityCover(), new GT_Packet_TileEntityCoverGUI()}; } protected void encode(ChannelHandlerContext aContext, GT_Packet aPacket, List aOutput) diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java index d21491adea..26b971a093 100644 --- a/src/main/java/gregtech/common/GT_Proxy.java +++ b/src/main/java/gregtech/common/GT_Proxy.java @@ -219,6 +219,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { public boolean gt6Cable = true; public boolean ic2EnergySourceCompat = true; public boolean costlyCableConnection = false; + public static final int GUI_ID_COVER_SIDE_BASE = 10; // Takes GUI ID 10 - 15 public GT_Proxy() { GameRegistry.registerFuelHandler(this); @@ -1529,6 +1530,9 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { } TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if ((tTileEntity instanceof IGregTechTileEntity)) { + if (GUI_ID_COVER_SIDE_BASE <= aID && aID < GUI_ID_COVER_SIDE_BASE+6) { + return null; + } IMetaTileEntity tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); if (tMetaTileEntity != null) { return tMetaTileEntity.getServerGUI(aID, aPlayer.inventory, (IGregTechTileEntity) tTileEntity); @@ -1553,6 +1557,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { } + @Override public Object getClientGuiElement(int aID, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ) { if(aID>=1000){ int ID = aID-1000; @@ -1585,9 +1590,20 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { } TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if ((tTileEntity instanceof IGregTechTileEntity)) { - IMetaTileEntity tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); + IGregTechTileEntity tile = (IGregTechTileEntity) tTileEntity; + + if (GUI_ID_COVER_SIDE_BASE <= aID && aID < GUI_ID_COVER_SIDE_BASE+6) { + byte side = (byte) (aID - GT_Proxy.GUI_ID_COVER_SIDE_BASE); + GT_CoverBehavior cover = tile.getCoverBehaviorAtSide(side); + + if (cover.hasCoverGUI()) { + return cover.getClientGUI(side, tile.getCoverIDAtSide(side), tile.getCoverDataAtSide(side), tile); + } + return null; + } + IMetaTileEntity tMetaTileEntity = tile.getMetaTileEntity(); if (tMetaTileEntity != null) { - return tMetaTileEntity.getClientGUI(aID, aPlayer.inventory, (IGregTechTileEntity) tTileEntity); + return tMetaTileEntity.getClientGUI(aID, aPlayer.inventory, tile); } } return null; diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java index a398f7d17f..51db541650 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java @@ -1,24 +1,32 @@ package gregtech.common.covers; +import gregtech.api.enums.GT_Values; +import gregtech.api.gui.GT_GUICover; +import gregtech.api.gui.widgets.GT_GuiFakeItemButton; +import gregtech.api.gui.widgets.GT_GuiIcon; +import gregtech.api.gui.widgets.GT_GuiIconButton; import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.net.GT_Packet_TileEntityCover; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; +import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.*; + import static gregtech.api.enums.GT_Values.E; public class GT_Cover_Fluidfilter extends GT_CoverBehavior { // Uses the lower 3 bits of the cover variable, so we have 8 options to work with (0-7) - private final int FILTER_INPUT_DENY_OUTPUT = 0; - private final int INVERT_INPUT_DENY_OUTPUT = 1; - private final int FILTER_INPUT_ANY_OUTPUT = 2; - private final int INVERT_INPUT_ANY_OUTPUT = 3; - private final int DENY_INPUT_FILTER_OUTPUT = 4; - private final int DENY_INPUT_INVERT_OUTPUT = 5; - private final int ANY_INPUT_FILTER_OUTPUT = 6; - private final int ANY_INPUT_INVERT_OUTPUT = 7; + private final int FILTER_INPUT_DENY_OUTPUT = 0; // 000 + private final int INVERT_INPUT_DENY_OUTPUT = 1; // 001 + private final int FILTER_INPUT_ANY_OUTPUT = 2; // 010 + private final int INVERT_INPUT_ANY_OUTPUT = 3; // 011 + private final int DENY_INPUT_FILTER_OUTPUT = 4; // 100 + private final int DENY_INPUT_INVERT_OUTPUT = 5; // 101 + private final int ANY_INPUT_FILTER_OUTPUT = 6; // 110 + private final int ANY_INPUT_INVERT_OUTPUT = 7; // 111 public String getDescription(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { int aFilterMode = aCoverVariable & 7; @@ -50,21 +58,6 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehavior { } - public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - int aFilterMode = aCoverVariable & 7; - aCoverVariable ^= aFilterMode; - aFilterMode = (aFilterMode + (aPlayer.isSneaking()? -1 : 1)) % 8; - if (aFilterMode < 0) { - aFilterMode = 7; - } - - GT_Utility.sendChatToPlayer(aPlayer, getFilterMode(aFilterMode)); - - aCoverVariable|=aFilterMode; - - return aCoverVariable; - } - public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { //GT_FML_LOGGER.info("rightclick"); if ( @@ -142,4 +135,138 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehavior { public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return 0; } + /** + * GUI Stuff + */ + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) { + return new GT_FluidFilterGUICover(aSide, aCoverID, coverData, aTileEntity); + } + + private class GT_FluidFilterGUICover extends GT_GUICover { + private final byte side; + private final int coverID; + private int coverVariable; + private final ICoverable tile; + private GT_GuiFakeItemButton fakeItemButton; + protected String header, filterString; + + private final static int startX = 10; + private final static int startY = 25; + private final static int spaceX = 18; + private final static int spaceY = 18; + + public GT_FluidFilterGUICover(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) + { + this.side = aSide; + this.coverID = aCoverID; + this.coverVariable = aCoverVariable; + this.tile = aTileEntity; + + ItemStack item = GT_Utility.intToStack(aCoverID); + this.header = (item != null) ? item.getDisplayName() : ""; + + GT_GuiIconButton b; + b = new GT_GuiIconButton(this, 0, startX + spaceX*0, startY+spaceY*0, GT_GuiIcon.EXPORT).setTooltipText(trans("043","Filter Input")); + b = new GT_GuiIconButton(this, 1, startX + spaceX*1, startY+spaceY*0, GT_GuiIcon.IMPORT).setTooltipText(trans("044","Filter Output")); + b = new GT_GuiIconButton(this, 2, startX + spaceX*0, startY+spaceY*2, GT_GuiIcon.BLOCK_INPUT).setTooltipText(trans("219", "Block Output")); + b = new GT_GuiIconButton(this, 3, startX + spaceX*1, startY+spaceY*2, GT_GuiIcon.ALLOW_INPUT).setTooltipText(trans("220", "Allow Output")); + b = new GT_GuiIconButton(this, 4, startX + spaceX*0, startY+spaceY*1, GT_GuiIcon.WHITELIST).setTooltipText(trans("045","Whitelist Fluid")); + b = new GT_GuiIconButton(this, 5, startX + spaceX*1, startY+spaceY*1, GT_GuiIcon.BLACKLIST).setTooltipText(trans("046","Blacklist Fluid")); + + new GT_GuiFakeItemButton(this, 5, 5, null).setItem(item); + fakeItemButton = new GT_GuiFakeItemButton(this, startX, startY+spaceY*3+2, GT_GuiIcon.SLOT_DARKGRAY); + } + + private int getNewCoverVariable(int id) { + switch (id) { + case 0: + return (coverVariable & ~0x7) | (coverVariable & 0x3); + case 1: + return (coverVariable & ~0x7) | (coverVariable | 0x4); + case 2: + return (coverVariable & ~0x7) | (coverVariable & 0x5); + case 3: + return (coverVariable & ~0x7) | (coverVariable | 0x2); + case 4: + return (coverVariable & ~0x7) | (coverVariable & 0x6); + case 5: + return (coverVariable & ~0x7) | (coverVariable | 0x1); + } + return coverVariable; + } + + private boolean getClickable(int id) { + switch (id) { + case 0: case 1: + return (coverVariable>>2 & 0x1) != (id & 0x1); + case 2: case 3: + return (coverVariable>>1 & 0x1) != (id & 0x1); + case 4: case 5: + return (coverVariable & 0x1) != (id & 0x1); + } + return false; + } + + + @Override + public void drawExtras(int mouseX, int mouseY, float parTicks) { + this.fontRendererObj.drawString(header, 25, 9, 0xFF222222); + this.fontRendererObj.drawString(trans("016","Filter Direction" ), startX + spaceX*2, 3+startY+spaceY*0, 0xFF555555); + this.fontRendererObj.drawString(trans("223", "Filter Type"), startX + spaceX*2, 3+startY+spaceY*1, 0xFF555555); + this.fontRendererObj.drawString(trans("017","Block Flow"), startX + spaceX*2, 3+startY+spaceY*2, 0xFF555555); + this.fontRendererObj.drawSplitString(filterString, startX + spaceX+3, 4+startY+spaceY*3, gui_width-40 , 0xFF222222); + } + + @Override + protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) { + updateButtons(); + } + + public void buttonClicked(GuiButton btn){ + if (getClickable(btn.id)){ + coverVariable = getNewCoverVariable(btn.id); + GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); + } + updateButtons(); + } + + private void updateButtons(){ + GT_GuiIconButton b; + for (Object o : buttonList) { + if (o instanceof GT_GuiIconButton) { + b = (GT_GuiIconButton) o; + b.enabled = getClickable(b.id); + if (getClickable(1)) { //filtering input + if (b.id == 2) + b.setTooltipText(trans("219", "Block Output")); + else if (b.id == 3) + b.setTooltipText(trans("220", "Allow Output")); + } else { + if (b.id == 2) + b.setTooltipText(trans("221", "Block Input")); + else if (b.id == 3) + b.setTooltipText(trans("222", "Allow Input")); + } + } + } + Fluid f = FluidRegistry.getFluid(coverVariable >>> 3); + if (f != null) { + ItemStack item = GT_Utility.getFluidDisplayStack(f); + if (item != null) { + fakeItemButton.setItem(item); + filterString = item.getDisplayName(); + return; + } + } + fakeItemButton.setItem(null); + filterString = trans("224", "Filter Empty"); + } + } } diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java index 466f6566c0..aeca33783b 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java @@ -1,19 +1,39 @@ package gregtech.common.covers; +import gregtech.api.enums.GT_Values; +import gregtech.api.gui.GT_GUICover; +import gregtech.api.gui.widgets.GT_GuiFakeItemButton; +import gregtech.api.gui.widgets.GT_GuiIconButton; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.net.GT_Packet_TileEntityCover; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; -import net.minecraft.entity.player.EntityPlayer; +import gregtech.api.gui.widgets.GT_GuiIcon; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidHandler; public class GT_Cover_Pump - extends GT_CoverBehavior { + extends GT_CoverBehavior{ public final int mTransferRate; + // {"006", "Export"}, + // {"007", "Import"}, + // {"008", "Export (conditional)"}, + // {"009", "Import (conditional)"}, + // {"010", "Export (invert cond)"}, + // {"011", "Import (invert cond)"}, + // {"012", "Export allow Input"}, + // {"013", "Import allow Output"}, + // {"014", "Export allow Input (conditional)"}, + // {"015", "Import allow Output (conditional)"}, + // {"016", "Export allow Input (invert cond)"}, + // {"017", "Import allow Output (invert cond)"}, + public GT_Cover_Pump(int aTransferRate) { this.mTransferRate = aTransferRate; } @@ -67,26 +87,6 @@ public class GT_Cover_Pump return aCoverVariable; } - public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + (aPlayer.isSneaking()? -1 : 1)) % 12; - if(aCoverVariable <0){aCoverVariable = 11;} - switch(aCoverVariable) { - case 0: GT_Utility.sendChatToPlayer(aPlayer, trans("006", "Export")); break; - case 1: GT_Utility.sendChatToPlayer(aPlayer, trans("007", "Import")); break; - case 2: GT_Utility.sendChatToPlayer(aPlayer, trans("008", "Export (conditional)")); break; - case 3: GT_Utility.sendChatToPlayer(aPlayer, trans("009", "Import (conditional)")); break; - case 4: GT_Utility.sendChatToPlayer(aPlayer, trans("010", "Export (invert cond)")); break; - case 5: GT_Utility.sendChatToPlayer(aPlayer, trans("011", "Import (invert cond)")); break; - case 6: GT_Utility.sendChatToPlayer(aPlayer, trans("012", "Export allow Input")); break; - case 7: GT_Utility.sendChatToPlayer(aPlayer, trans("013", "Import allow Output")); break; - case 8: GT_Utility.sendChatToPlayer(aPlayer, trans("014", "Export allow Input (conditional)")); break; - case 9: GT_Utility.sendChatToPlayer(aPlayer, trans("015", "Import allow Output (conditional)")); break; - case 10: GT_Utility.sendChatToPlayer(aPlayer, trans("016", "Export allow Input (invert cond)")); break; - case 11: GT_Utility.sendChatToPlayer(aPlayer, trans("017", "Import allow Output (invert cond)")); break; - } - return aCoverVariable; - } - public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return true; } @@ -136,4 +136,130 @@ public class GT_Cover_Pump public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return 1; } + + /** + * GUI Stuff + */ + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) { + return new GT_PumpGUICover(aSide, aCoverID, coverData, aTileEntity); + } + + private class GT_PumpGUICover extends GT_GUICover { + private final byte side; + private final int coverID; + private int coverVariable; + private final ICoverable tile; + protected String header; + + private final static int startX = 10; + private final static int startY = 25; + private final static int spaceX = 18; + private final static int spaceY = 18; + + public GT_PumpGUICover(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + this.side = aSide; + this.coverID = aCoverID; + this.coverVariable = aCoverVariable; + this.tile = aTileEntity; + + ItemStack item = GT_Utility.intToStack(aCoverID); + this.header = (item != null) ? item.getDisplayName() : ""; + new GT_GuiFakeItemButton(this, 5, 5, null).setItem(item); + + GT_GuiIconButton b; + b = new GT_GuiIconButton(this, 0, startX + spaceX*0, startY+spaceY*0, GT_GuiIcon.EXPORT).setTooltipText(trans("006","Export")); + b = new GT_GuiIconButton(this, 1, startX + spaceX*1, startY+spaceY*0, GT_GuiIcon.IMPORT).setTooltipText(trans("007","Import")); + b = new GT_GuiIconButton(this, 2, startX + spaceX*0, startY+spaceY*1, GT_GuiIcon.CHECKMARK).setTooltipText(trans("008","Ignore")); + b = new GT_GuiIconButton(this, 3, startX + spaceX*1, startY+spaceY*1, GT_GuiIcon.REDSTONE_ON).setTooltipText(trans("009","Conditional")); + b = new GT_GuiIconButton(this, 4, startX + spaceX*2, startY+spaceY*1, GT_GuiIcon.REDSTONE_OFF).setTooltipText(trans("010","Invert Condition")); + b = new GT_GuiIconButton(this, 5, startX + spaceX*0, startY+spaceY*2, GT_GuiIcon.ALLOW_INPUT).setTooltipText(trans("011","Allow Input")); + b = new GT_GuiIconButton(this, 6, startX + spaceX*1, startY+spaceY*2, GT_GuiIcon.BLOCK_INPUT).setTooltipText(trans("012","Block Input")); + } + + @Override + public void drawExtras(int mouseX, int mouseY, float parTicks) { + this.fontRendererObj.drawString(header, 25, 9, 0xFF222222); + this.fontRendererObj.drawString(trans("013","Import/Export" ), startX + spaceX*3, 3+startY+spaceY*0, 0xFF555555); + this.fontRendererObj.drawString(trans("014","Conditional"), startX + spaceX*3, 3+startY+spaceY*1, 0xFF555555); + this.fontRendererObj.drawString(trans("015", "Enable Input"), startX + spaceX*3, 3+startY+spaceY*2, 0xFF555555); + } + + @Override + protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) { + updateButtons(); + } + + public void buttonClicked(GuiButton btn){ + if (getClickable(btn.id)){ + coverVariable = getNewCoverVariable(btn.id); + GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); + } + updateButtons(); + } + + private void updateButtons(){ + GuiButton b; + for (Object o : buttonList) { + b = (GuiButton) o; + b.enabled = getClickable(b.id); + } + } + + private int getNewCoverVariable(int id) { + switch (id) { + case 0: + return coverVariable & ~0x1; + case 1: + return coverVariable | 0x1; + case 2: + if (coverVariable > 5) + return 0x6 | (coverVariable & ~0xE); + return (coverVariable & ~0xE); + case 3: + if (coverVariable > 5) + return 0x8 | (coverVariable & ~0xE); + return 0x2 | (coverVariable & ~0xE); + case 4: + if (coverVariable > 5) + return 0xA | (coverVariable & ~0xE); + return (0x4 | (coverVariable & ~0xE)); + case 5: + if (coverVariable <= 5) + return coverVariable + 6; + break; + case 6: + if (coverVariable > 5) + return coverVariable - 6; + } + return coverVariable; + } + + private boolean getClickable(int id) { + if (coverVariable < 0 | 11 < coverVariable) + return false; + + switch (id) { + case 0: case 1: + return (0x1 & coverVariable) != id; + case 2: + return (coverVariable % 6) >= 2; + case 3: + return (coverVariable % 6) < 2 | 4 <= (coverVariable % 6); + case 4: + return (coverVariable % 6) < 4; + case 5: + return coverVariable < 6; + case 6: + return coverVariable >= 6; + } + return false; + } + } } -- cgit From 4dec88757f64c0bdf4a87eff8f3d5c7ba65b7217 Mon Sep 17 00:00:00 2001 From: moller21 <42100910+moller21@users.noreply.github.com> Date: Wed, 6 May 2020 22:25:10 +0200 Subject: Cover gui: Right click to open instead take.2 --- src/main/java/gregtech/api/gui/GT_GUICover.java | 13 +++- .../api/gui/widgets/GT_GuiFakeItemButton.java | 3 +- .../gregtech/api/gui/widgets/GT_GuiIconButton.java | 2 +- .../api/metatileentity/BaseMetaPipeEntity.java | 28 +++----- .../api/metatileentity/BaseMetaTileEntity.java | 30 ++++---- .../java/gregtech/api/util/GT_CoverBehavior.java | 14 ++-- src/main/java/gregtech/common/GT_Client.java | 80 ++++++++++++++++------ .../gregtech/common/blocks/GT_Block_Machines.java | 2 +- .../common/covers/GT_Cover_Fluidfilter.java | 58 +++++++++------- .../java/gregtech/common/covers/GT_Cover_Pump.java | 60 ++++++++-------- 10 files changed, 175 insertions(+), 115 deletions(-) (limited to 'src/main/java/gregtech/common') diff --git a/src/main/java/gregtech/api/gui/GT_GUICover.java b/src/main/java/gregtech/api/gui/GT_GUICover.java index 760d888c02..b182f6f6d5 100644 --- a/src/main/java/gregtech/api/gui/GT_GUICover.java +++ b/src/main/java/gregtech/api/gui/GT_GUICover.java @@ -1,6 +1,7 @@ package gregtech.api.gui; import gregtech.api.enums.Dyes; +import gregtech.api.gui.widgets.GT_GuiFakeItemButton; import gregtech.api.gui.widgets.GT_GuiTooltip; import gregtech.api.gui.widgets.GT_GuiTooltipManager; import gregtech.api.gui.widgets.GT_GuiTooltipManager.GT_IToolTipRenderer; @@ -10,6 +11,7 @@ import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @@ -26,15 +28,20 @@ public abstract class GT_GUICover extends GuiScreen implements GT_IToolTipRender protected int guiTop, guiLeft; protected boolean drawButtons = true; private GuiButton selectedButton; + public String header; + public GT_GuiFakeItemButton headerIcon; + protected List elements = new ArrayList<>(); public GT_GUICover() { } - public GT_GUICover(int width, int height) { + public GT_GUICover(int width, int height, ItemStack cover) { this.gui_width = width; this.gui_height = height; + this.header = (cover != null) ? cover.getDisplayName() : ""; + this.headerIcon = new GT_GuiFakeItemButton(this, 5, 5, null).setItem(cover); } @Override @@ -98,7 +105,9 @@ public abstract class GT_GUICover extends GuiScreen implements GT_IToolTipRender drawTexturedModalRect(guiLeft, guiTop, 0,0, gui_width, gui_height); } - public void drawExtras(int mouseX, int mouseY, float parTicks) {} + public void drawExtras(int mouseX, int mouseY, float parTicks) { + this.fontRendererObj.drawString(header, 25, 9, 0xFF222222); + } @Override public boolean doesGuiPauseGame() diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java index 25af30965a..db7029d60f 100644 --- a/src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java +++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java @@ -26,8 +26,9 @@ public class GT_GuiFakeItemButton implements IGuiScreen.IGuiElement { gui.addElement(this); } - public void setItem(ItemStack i) { + public GT_GuiFakeItemButton setItem(ItemStack i) { item = i; + return this; } public ItemStack getItem(){ diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiIconButton.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiIconButton.java index bd1e921592..f68962f58f 100644 --- a/src/main/java/gregtech/api/gui/widgets/GT_GuiIconButton.java +++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiIconButton.java @@ -56,7 +56,7 @@ public class GT_GuiIconButton extends GuiButton implements IGuiScreen.IGuiElemen int x = xPosition; int y = yPosition; if(!this.field_146123_n) { - GL11.glColor4f(160F/255F, 170F/255F, 1, 1); + GL11.glColor4f(200F/255F, 210F/255F, 1, 1); } else GL11.glColor4f(1, 1, 1, 1); diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java index 439da50f24..0b9ec848b1 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java @@ -804,15 +804,6 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE return hasValidMetaTileEntity() && !isDead; } - public boolean shouldDisplayWrenchGrid(ItemStack heldItem, byte side) { - return (getCoverIDAtSide(side) == 0) && ( - GT_Utility.isStackInList(heldItem, GregTech_API.sCovers.keySet()) || - GT_Utility.isStackInList(heldItem, GregTech_API.sCrowbarList) || - GT_Utility.isStackInList(heldItem, GregTech_API.sWireCutterList) || - GT_Utility.isStackInList(heldItem, GregTech_API.sScrewdriverList) || - GT_Utility.isStackInList(heldItem, GregTech_API.sSolderingToolList)); - } - @Override public void doExplosion(long aAmount) { if (canAccessData()) { @@ -841,14 +832,13 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE @Override public boolean onRightclick(EntityPlayer aPlayer, byte aSide, float aX, float aY, float aZ) { if (isClientSide()) { - byte tSide = aSide; - ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); - - if (shouldDisplayWrenchGrid(tCurrentItem, aSide)) { - tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); + //Configure Cover, sneak can also be: screwdriver, wrench, side cutter, soldering iron + if (aPlayer.isSneaking()) { + byte tSide = (getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) : aSide; + return (getCoverBehaviorAtSide(tSide).hasCoverGUI()); + } else if (getCoverBehaviorAtSide(aSide).onCoverRightclickClient(aSide, this, aPlayer, aX, aY, aZ)) { + return true; } - - if (getCoverBehaviorAtSide(tSide).onCoverRightclickClient(tSide, this, aPlayer, aX, aY, aZ)) return true; } if (isServerSide()) { ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); @@ -944,6 +934,10 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE } } } + else if (aPlayer.isSneaking()) { //Sneak click, no tool -> open cover config if possible. + aSide = (getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) : aSide; + return getCoverIDAtSide(aSide) > 0 && getCoverBehaviorAtSide(aSide).onCoverShiftRightclick(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this, aPlayer); + } if (getCoverBehaviorAtSide(aSide).onCoverRightclick(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this, aPlayer, aX, aY, aZ)) return true; @@ -953,7 +947,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE return false; try { - if (hasValidMetaTileEntity()) return mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ); + if (!aPlayer.isSneaking() && hasValidMetaTileEntity()) return mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ); } catch (Throwable e) { GT_Log.err.println("Encountered Exception while rightclicking TileEntity, the Game should've crashed now, but I prevented that. Please report immediately to GregTech Intergalactical!!!"); e.printStackTrace(GT_Log.err); diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java index 52c010afbd..fa0263c28e 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java @@ -1318,19 +1318,17 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE return (mMuffler ? 1 : 0) + (mLockUpgrade ? 1 : 0) + (mSteamConverter ? 1 : 0) + mOtherUpgrades; } - public boolean shouldDisplayWrenchGrid(ItemStack heldItem, byte side) { - return (getCoverIDAtSide(side) == 0) && ( - GT_Utility.isStackInList(heldItem, GregTech_API.sCovers.keySet()) || - GT_Utility.isStackInList(heldItem, GregTech_API.sCrowbarList) || - GT_Utility.isStackInList(heldItem, GregTech_API.sWireCutterList) || - GT_Utility.isStackInList(heldItem, GregTech_API.sScrewdriverList) || - GT_Utility.isStackInList(heldItem, GregTech_API.sSolderingToolList)); - } - @Override public boolean onRightclick(EntityPlayer aPlayer, byte aSide, float aX, float aY, float aZ) { if (isClientSide()) { - if (getCoverBehaviorAtSide(aSide).onCoverRightclickClient(aSide, this, aPlayer, aX, aY, aZ)) return true; + //Configure Cover, sneak can also be: screwdriver, wrench, side cutter, soldering iron + if (aPlayer.isSneaking()) { + byte tSide = (getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) : aSide; + return (getCoverBehaviorAtSide(tSide).hasCoverGUI()); + } else if (getCoverBehaviorAtSide(aSide).onCoverRightclickClient(aSide, this, aPlayer, aX, aY, aZ)) { + return true; + } + if (!getCoverBehaviorAtSide(aSide).isGUIClickable(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this)) return false; } @@ -1415,7 +1413,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); if (getCoverIDAtSide(tSide) == 0) { if (GregTech_API.sCovers.containsKey(new GT_ItemStack(tCurrentItem))) { - if (GregTech_API.getCoverBehavior(tCurrentItem).isCoverPlaceable(tSide, new GT_ItemStack(tCurrentItem), this) && mMetaTileEntity.allowCoverOnSide(aSide, new GT_ItemStack(tCurrentItem))) { + if (GregTech_API.getCoverBehavior(tCurrentItem).isCoverPlaceable(tSide, new GT_ItemStack(tCurrentItem), this) && mMetaTileEntity.allowCoverOnSide(tSide, new GT_ItemStack(tCurrentItem))) { setCoverItemAtSide(tSide, tCurrentItem); if (!aPlayer.capabilities.isCreativeMode) tCurrentItem.stackSize--; GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord); @@ -1432,6 +1430,10 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE } } } + else if (aPlayer.isSneaking()) { //Sneak click, no tool -> open cover config if possible. + aSide = (getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) : aSide; + return getCoverIDAtSide(aSide) > 0 && getCoverBehaviorAtSide(aSide).onCoverShiftRightclick(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this, aPlayer); + } if (getCoverBehaviorAtSide(aSide).onCoverRightclick(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this, aPlayer, aX, aY, aZ)) return true; @@ -1439,7 +1441,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE if (!getCoverBehaviorAtSide(aSide).isGUIClickable(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this)) return false; - if (isUpgradable() && aPlayer.inventory.getCurrentItem() != null) {/* + if (isUpgradable() && tCurrentItem != null) {/* if (ItemList.Upgrade_SteamEngine.isStackEqual(aPlayer.inventory.getCurrentItem())) { if (addSteamEngineUpgrade()) { GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(3), 1.0F, -1, xCoord, yCoord, zCoord); @@ -1469,13 +1471,13 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE } try { - if (hasValidMetaTileEntity()) return mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ); + if (!aPlayer.isSneaking() && hasValidMetaTileEntity()) return mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ); } catch (Throwable e) { GT_Log.err.println("Encountered Exception while rightclicking TileEntity, the Game should've crashed now, but I prevented that. Please report immediately to GregTech Intergalactical!!!"); e.printStackTrace(GT_Log.err); } - return true; + return false; } @Override diff --git a/src/main/java/gregtech/api/util/GT_CoverBehavior.java b/src/main/java/gregtech/api/util/GT_CoverBehavior.java index 38c01b9d92..c0ad751add 100644 --- a/src/main/java/gregtech/api/util/GT_CoverBehavior.java +++ b/src/main/java/gregtech/api/util/GT_CoverBehavior.java @@ -46,14 +46,18 @@ public abstract class GT_CoverBehavior { * return the new Value of the Cover Variable */ public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (!hasCoverGUI()) - return aCoverVariable; + return aCoverVariable; + } - if(aPlayer instanceof EntityPlayerMP) { + /** + * Called when someone shift-rightclicks this Cover with no tool. Doesn't call @onCoverRightclick in this Case. + */ + public boolean onCoverShiftRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer) { + if(hasCoverGUI() && aPlayer instanceof EntityPlayerMP) { GT_Values.NW.sendToPlayer(new GT_Packet_TileEntityCoverGUI(aSide, aCoverID, aCoverVariable, aTileEntity, (EntityPlayerMP) aPlayer), (EntityPlayerMP) aPlayer); + return true; } - - return aCoverVariable; + return false; } public boolean hasCoverGUI() { diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java index 9b7bdbfed6..bda1852c31 100644 --- a/src/main/java/gregtech/common/GT_Client.java +++ b/src/main/java/gregtech/common/GT_Client.java @@ -130,7 +130,7 @@ public class GT_Client extends GT_Proxy }); } - private static void drawGrid(DrawBlockHighlightEvent aEvent) { + private static void drawGrid(DrawBlockHighlightEvent aEvent, boolean showCoverConnections) { GL11.glPushMatrix(); GL11.glTranslated(-(aEvent.player.lastTickPosX + (aEvent.player.posX - aEvent.player.lastTickPosX) * (double) aEvent.partialTicks), -(aEvent.player.lastTickPosY + (aEvent.player.posY - aEvent.player.lastTickPosY) * (double) aEvent.partialTicks), -(aEvent.player.lastTickPosZ + (aEvent.player.posZ - aEvent.player.lastTickPosZ) * (double) aEvent.partialTicks)); GL11.glTranslated((float) aEvent.target.blockX + 0.5F, (float) aEvent.target.blockY + 0.5F, (float) aEvent.target.blockZ + 0.5F); @@ -148,7 +148,20 @@ public class GT_Client extends GT_Proxy GL11.glVertex3d(-.25D, .0D, -.50D); GL11.glVertex3d(-.25D, .0D, +.50D); TileEntity tTile = aEvent.player.worldObj.getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); - if (tTile instanceof BaseMetaPipeEntity) { + + byte tConnections = 0; + if (tTile instanceof ICoverable){ + if (showCoverConnections) { + for (byte i = 0; i < 6; i++) { + if ( ((ICoverable) tTile).getCoverIDAtSide(i) > 0) + tConnections = (byte)(tConnections + (1 << i)); + } + } + else if (tTile instanceof BaseMetaPipeEntity) + tConnections = ((BaseMetaPipeEntity) tTile).mConnections; + } + + if (tConnections>0) { int[][] GridSwitchArr = new int[][]{ {0, 5, 3, 1, 2, 4}, {5, 0, 1, 3, 2, 4}, @@ -156,8 +169,7 @@ public class GT_Client extends GT_Proxy {3, 1, 5, 0, 2, 4}, {4, 2, 3, 1, 0, 5}, {2, 4, 3, 1, 5, 0}, - }; - int tConnections = ((BaseMetaPipeEntity) tTile).mConnections; + }; for (byte i = 0; i < 6; i++) { if ((tConnections & (1 << i)) != 0) { switch (GridSwitchArr[aEvent.target.sideHit][i]) { @@ -441,26 +453,50 @@ public class GT_Client extends GT_Proxy @SubscribeEvent public void onDrawBlockHighlight(DrawBlockHighlightEvent aEvent) { + TileEntity aTileEntity = aEvent.player.worldObj.getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); + if (aTileEntity == null) + return; + try { + Class.forName("codechicken.lib.vec.Rotation");//Whats this do, need to check every frame? + } catch (Throwable e) { + if (GT_Values.D1) { + e.printStackTrace(GT_Log.err); + } + return; + } + if (GT_Utility.isStackValid(aEvent.currentItem)) { Block aBlock = aEvent.player.worldObj.getBlock(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); - TileEntity aTileEntity = aEvent.player.worldObj.getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); - try { - Class.forName("codechicken.lib.vec.Rotation"); - if ((aTileEntity instanceof BaseMetaPipeEntity) && ((BaseMetaPipeEntity) aTileEntity).shouldDisplayWrenchGrid(aEvent.currentItem, (byte) aEvent.target.sideHit)) { - drawGrid(aEvent); - return; - } - if ((aTileEntity instanceof ITurnable || ROTATABLE_VANILLA_BLOCKS.contains(aBlock) || aTileEntity instanceof IWrenchable) && GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWrenchList)) { - drawGrid(aEvent); - return; - } - if (aTileEntity instanceof BaseTileEntity && (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWireCutterList) || GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sSolderingToolList))) { - drawGrid(aEvent); - return; - } - } catch (Throwable e) { - if (GT_Values.D1) { - e.printStackTrace(GT_Log.err); + if (((aTileEntity instanceof BaseMetaPipeEntity)) && (((ICoverable) aTileEntity).getCoverIDAtSide((byte) aEvent.target.sideHit) == 0) && ( + GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCovers.keySet()) || + GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCrowbarList) || + GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWireCutterList) || + GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sScrewdriverList)|| + GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sSolderingToolList) )) + { + drawGrid(aEvent, false); + return; + } + if ((aTileEntity instanceof ITurnable || ROTATABLE_VANILLA_BLOCKS.contains(aBlock) || aTileEntity instanceof IWrenchable) && + GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWrenchList)) + { + drawGrid(aEvent, false); + return; + } + if (aTileEntity instanceof BaseTileEntity && ( + GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWireCutterList) || + GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sSolderingToolList))) + { + drawGrid(aEvent, false); + return; + } + } else if (aEvent.currentItem == null && aEvent.player.isSneaking()) { + if (aTileEntity instanceof ICoverable && ((ICoverable) aTileEntity).getCoverIDAtSide((byte) aEvent.target.sideHit) == 0 ){ + for (byte i = 0; i < 6; i++) { + if(((ICoverable) aTileEntity).getCoverIDAtSide(i) > 0) { + drawGrid(aEvent, true); + return; + } } } } diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java index cc75124a05..0b0d065789 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java @@ -295,7 +295,7 @@ public class GT_Block_Machines if(!GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList) && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList) && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList) && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)){ return false; } - }else {return false;} + } } if ((tTileEntity instanceof IGregTechTileEntity)) { if (((IGregTechTileEntity) tTileEntity).getTimer() < 50L) { diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java index 51db541650..1fcdf9fccf 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java @@ -58,6 +58,21 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehavior { } + public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + int aFilterMode = aCoverVariable & 7; + aCoverVariable ^= aFilterMode; + aFilterMode = (aFilterMode + (aPlayer.isSneaking()? -1 : 1)) % 8; + if (aFilterMode < 0) { + aFilterMode = 7; + } + + GT_Utility.sendChatToPlayer(aPlayer, getFilterMode(aFilterMode)); + + aCoverVariable|=aFilterMode; + + return aCoverVariable; + } + public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { //GT_FML_LOGGER.info("rightclick"); if ( @@ -154,8 +169,8 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehavior { private final int coverID; private int coverVariable; private final ICoverable tile; - private GT_GuiFakeItemButton fakeItemButton; - protected String header, filterString; + private GT_GuiFakeItemButton fluidFilterButton; + protected String fluidFilterName; private final static int startX = 10; private final static int startY = 25; @@ -164,24 +179,21 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehavior { public GT_FluidFilterGUICover(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + super(176, 107, GT_Utility.intToStack(aCoverID)); this.side = aSide; this.coverID = aCoverID; this.coverVariable = aCoverVariable; this.tile = aTileEntity; - ItemStack item = GT_Utility.intToStack(aCoverID); - this.header = (item != null) ? item.getDisplayName() : ""; - GT_GuiIconButton b; - b = new GT_GuiIconButton(this, 0, startX + spaceX*0, startY+spaceY*0, GT_GuiIcon.EXPORT).setTooltipText(trans("043","Filter Input")); - b = new GT_GuiIconButton(this, 1, startX + spaceX*1, startY+spaceY*0, GT_GuiIcon.IMPORT).setTooltipText(trans("044","Filter Output")); - b = new GT_GuiIconButton(this, 2, startX + spaceX*0, startY+spaceY*2, GT_GuiIcon.BLOCK_INPUT).setTooltipText(trans("219", "Block Output")); - b = new GT_GuiIconButton(this, 3, startX + spaceX*1, startY+spaceY*2, GT_GuiIcon.ALLOW_INPUT).setTooltipText(trans("220", "Allow Output")); - b = new GT_GuiIconButton(this, 4, startX + spaceX*0, startY+spaceY*1, GT_GuiIcon.WHITELIST).setTooltipText(trans("045","Whitelist Fluid")); - b = new GT_GuiIconButton(this, 5, startX + spaceX*1, startY+spaceY*1, GT_GuiIcon.BLACKLIST).setTooltipText(trans("046","Blacklist Fluid")); - - new GT_GuiFakeItemButton(this, 5, 5, null).setItem(item); - fakeItemButton = new GT_GuiFakeItemButton(this, startX, startY+spaceY*3+2, GT_GuiIcon.SLOT_DARKGRAY); + b = new GT_GuiIconButton(this, 0, startX + spaceX*0, startY+spaceY*0, GT_GuiIcon.EXPORT).setTooltipText(trans("232","Filter Input")); + b = new GT_GuiIconButton(this, 1, startX + spaceX*1, startY+spaceY*0, GT_GuiIcon.IMPORT).setTooltipText(trans("233","Filter Output")); + b = new GT_GuiIconButton(this, 2, startX + spaceX*0, startY+spaceY*2, GT_GuiIcon.BLOCK_INPUT).setTooltipText(trans("234", "Block Output")); + b = new GT_GuiIconButton(this, 3, startX + spaceX*1, startY+spaceY*2, GT_GuiIcon.ALLOW_INPUT).setTooltipText(trans("235", "Allow Output")); + b = new GT_GuiIconButton(this, 4, startX + spaceX*0, startY+spaceY*1, GT_GuiIcon.WHITELIST).setTooltipText(trans("236","Whitelist Fluid")); + b = new GT_GuiIconButton(this, 5, startX + spaceX*1, startY+spaceY*1, GT_GuiIcon.BLACKLIST).setTooltipText(trans("237","Blacklist Fluid")); + + fluidFilterButton = new GT_GuiFakeItemButton(this, startX, startY+spaceY*3+2, GT_GuiIcon.SLOT_DARKGRAY); } private int getNewCoverVariable(int id) { @@ -217,11 +229,11 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehavior { @Override public void drawExtras(int mouseX, int mouseY, float parTicks) { - this.fontRendererObj.drawString(header, 25, 9, 0xFF222222); - this.fontRendererObj.drawString(trans("016","Filter Direction" ), startX + spaceX*2, 3+startY+spaceY*0, 0xFF555555); - this.fontRendererObj.drawString(trans("223", "Filter Type"), startX + spaceX*2, 3+startY+spaceY*1, 0xFF555555); - this.fontRendererObj.drawString(trans("017","Block Flow"), startX + spaceX*2, 3+startY+spaceY*2, 0xFF555555); - this.fontRendererObj.drawSplitString(filterString, startX + spaceX+3, 4+startY+spaceY*3, gui_width-40 , 0xFF222222); + super.drawExtras(mouseX, mouseY, parTicks); + this.fontRendererObj.drawString(trans("238","Filter Direction" ), startX + spaceX*2, 3+startY+spaceY*0, 0xFF555555); + this.fontRendererObj.drawString(trans("239", "Filter Type"), startX + spaceX*2, 3+startY+spaceY*1, 0xFF555555); + this.fontRendererObj.drawString(trans("240","Block Flow"), startX + spaceX*2, 3+startY+spaceY*2, 0xFF555555); + this.fontRendererObj.drawSplitString(fluidFilterName, startX + spaceX+3, 4+startY+spaceY*3, gui_width-40 , 0xFF222222); } @Override @@ -260,13 +272,13 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehavior { if (f != null) { ItemStack item = GT_Utility.getFluidDisplayStack(f); if (item != null) { - fakeItemButton.setItem(item); - filterString = item.getDisplayName(); + fluidFilterButton.setItem(item); + fluidFilterName = item.getDisplayName(); return; } } - fakeItemButton.setItem(null); - filterString = trans("224", "Filter Empty"); + fluidFilterButton.setItem(null); + fluidFilterName = trans("224", "Filter Empty"); } } } diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java index aeca33783b..7b98b18a31 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java @@ -2,7 +2,6 @@ package gregtech.common.covers; import gregtech.api.enums.GT_Values; import gregtech.api.gui.GT_GUICover; -import gregtech.api.gui.widgets.GT_GuiFakeItemButton; import gregtech.api.gui.widgets.GT_GuiIconButton; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IMachineProgress; @@ -11,7 +10,7 @@ import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; import gregtech.api.gui.widgets.GT_GuiIcon; import net.minecraft.client.gui.GuiButton; -import net.minecraft.item.ItemStack; +import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; @@ -21,19 +20,6 @@ public class GT_Cover_Pump extends GT_CoverBehavior{ public final int mTransferRate; - // {"006", "Export"}, - // {"007", "Import"}, - // {"008", "Export (conditional)"}, - // {"009", "Import (conditional)"}, - // {"010", "Export (invert cond)"}, - // {"011", "Import (invert cond)"}, - // {"012", "Export allow Input"}, - // {"013", "Import allow Output"}, - // {"014", "Export allow Input (conditional)"}, - // {"015", "Import allow Output (conditional)"}, - // {"016", "Export allow Input (invert cond)"}, - // {"017", "Import allow Output (invert cond)"}, - public GT_Cover_Pump(int aTransferRate) { this.mTransferRate = aTransferRate; } @@ -87,6 +73,26 @@ public class GT_Cover_Pump return aCoverVariable; } + public int onCoverScrewdriverclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = (aCoverVariable + (aPlayer.isSneaking()? -1 : 1)) % 12; + if(aCoverVariable <0){aCoverVariable = 11;} + switch(aCoverVariable) { + case 0: GT_Utility.sendChatToPlayer(aPlayer, trans("006", "Export")); break; + case 1: GT_Utility.sendChatToPlayer(aPlayer, trans("007", "Import")); break; + case 2: GT_Utility.sendChatToPlayer(aPlayer, trans("008", "Export (conditional)")); break; + case 3: GT_Utility.sendChatToPlayer(aPlayer, trans("009", "Import (conditional)")); break; + case 4: GT_Utility.sendChatToPlayer(aPlayer, trans("010", "Export (invert cond)")); break; + case 5: GT_Utility.sendChatToPlayer(aPlayer, trans("011", "Import (invert cond)")); break; + case 6: GT_Utility.sendChatToPlayer(aPlayer, trans("012", "Export allow Input")); break; + case 7: GT_Utility.sendChatToPlayer(aPlayer, trans("013", "Import allow Output")); break; + case 8: GT_Utility.sendChatToPlayer(aPlayer, trans("014", "Export allow Input (conditional)")); break; + case 9: GT_Utility.sendChatToPlayer(aPlayer, trans("015", "Import allow Output (conditional)")); break; + case 10: GT_Utility.sendChatToPlayer(aPlayer, trans("016", "Export allow Input (invert cond)")); break; + case 11: GT_Utility.sendChatToPlayer(aPlayer, trans("017", "Import allow Output (invert cond)")); break; + } + return aCoverVariable; + } + public boolean letsRedstoneGoIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return true; } @@ -156,7 +162,6 @@ public class GT_Cover_Pump private final int coverID; private int coverVariable; private final ICoverable tile; - protected String header; private final static int startX = 10; private final static int startY = 25; @@ -164,31 +169,28 @@ public class GT_Cover_Pump private final static int spaceY = 18; public GT_PumpGUICover(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + super(176, 107, GT_Utility.intToStack(aCoverID)); this.side = aSide; this.coverID = aCoverID; this.coverVariable = aCoverVariable; this.tile = aTileEntity; - ItemStack item = GT_Utility.intToStack(aCoverID); - this.header = (item != null) ? item.getDisplayName() : ""; - new GT_GuiFakeItemButton(this, 5, 5, null).setItem(item); - GT_GuiIconButton b; b = new GT_GuiIconButton(this, 0, startX + spaceX*0, startY+spaceY*0, GT_GuiIcon.EXPORT).setTooltipText(trans("006","Export")); b = new GT_GuiIconButton(this, 1, startX + spaceX*1, startY+spaceY*0, GT_GuiIcon.IMPORT).setTooltipText(trans("007","Import")); - b = new GT_GuiIconButton(this, 2, startX + spaceX*0, startY+spaceY*1, GT_GuiIcon.CHECKMARK).setTooltipText(trans("008","Ignore")); - b = new GT_GuiIconButton(this, 3, startX + spaceX*1, startY+spaceY*1, GT_GuiIcon.REDSTONE_ON).setTooltipText(trans("009","Conditional")); - b = new GT_GuiIconButton(this, 4, startX + spaceX*2, startY+spaceY*1, GT_GuiIcon.REDSTONE_OFF).setTooltipText(trans("010","Invert Condition")); - b = new GT_GuiIconButton(this, 5, startX + spaceX*0, startY+spaceY*2, GT_GuiIcon.ALLOW_INPUT).setTooltipText(trans("011","Allow Input")); - b = new GT_GuiIconButton(this, 6, startX + spaceX*1, startY+spaceY*2, GT_GuiIcon.BLOCK_INPUT).setTooltipText(trans("012","Block Input")); + b = new GT_GuiIconButton(this, 2, startX + spaceX*0, startY+spaceY*1, GT_GuiIcon.CHECKMARK).setTooltipText(trans("224","Ignore")); + b = new GT_GuiIconButton(this, 3, startX + spaceX*1, startY+spaceY*1, GT_GuiIcon.REDSTONE_ON).setTooltipText(trans("225","Conditional")); + b = new GT_GuiIconButton(this, 4, startX + spaceX*2, startY+spaceY*1, GT_GuiIcon.REDSTONE_OFF).setTooltipText(trans("226","Invert Condition")); + b = new GT_GuiIconButton(this, 5, startX + spaceX*0, startY+spaceY*2, GT_GuiIcon.ALLOW_INPUT).setTooltipText(trans("227","Allow Input")); + b = new GT_GuiIconButton(this, 6, startX + spaceX*1, startY+spaceY*2, GT_GuiIcon.BLOCK_INPUT).setTooltipText(trans("228","Block Input")); } @Override public void drawExtras(int mouseX, int mouseY, float parTicks) { - this.fontRendererObj.drawString(header, 25, 9, 0xFF222222); - this.fontRendererObj.drawString(trans("013","Import/Export" ), startX + spaceX*3, 3+startY+spaceY*0, 0xFF555555); - this.fontRendererObj.drawString(trans("014","Conditional"), startX + spaceX*3, 3+startY+spaceY*1, 0xFF555555); - this.fontRendererObj.drawString(trans("015", "Enable Input"), startX + spaceX*3, 3+startY+spaceY*2, 0xFF555555); + super.drawExtras(mouseX, mouseY, parTicks); + this.fontRendererObj.drawString(trans("229","Import/Export" ), startX + spaceX*3, 3+startY+spaceY*0, 0xFF555555); + this.fontRendererObj.drawString(trans("230","Conditional"), startX + spaceX*3, 3+startY+spaceY*1, 0xFF555555); + this.fontRendererObj.drawString(trans("231", "Enable Input"), startX + spaceX*3, 3+startY+spaceY*2, 0xFF555555); } @Override -- cgit From ea1bf1b9b362f64b3c6d82c269ce9f66c82ee559 Mon Sep 17 00:00:00 2001 From: moller21 <42100910+moller21@users.noreply.github.com> Date: Sun, 10 May 2020 15:18:48 +0200 Subject: Cover GUI: added fluid regulator, finished open on shiftrightclick. --- src/main/java/gregtech/api/gui/GT_GUICover.java | 153 ++++++++++++++++--- .../api/gui/widgets/GT_GuiIntegerTextBox.java | 50 +++++++ .../api/metatileentity/BaseMetaPipeEntity.java | 16 +- .../api/metatileentity/BaseMetaTileEntity.java | 14 +- src/main/java/gregtech/common/GT_Client.java | 86 ++++++----- .../common/covers/GT_Cover_FluidRegulator.java | 164 +++++++++++++++++++++ .../common/covers/GT_Cover_Fluidfilter.java | 6 +- .../java/gregtech/common/covers/GT_Cover_Pump.java | 4 +- 8 files changed, 416 insertions(+), 77 deletions(-) create mode 100644 src/main/java/gregtech/api/gui/widgets/GT_GuiIntegerTextBox.java (limited to 'src/main/java/gregtech/common') diff --git a/src/main/java/gregtech/api/gui/GT_GUICover.java b/src/main/java/gregtech/api/gui/GT_GUICover.java index b182f6f6d5..94346186a8 100644 --- a/src/main/java/gregtech/api/gui/GT_GUICover.java +++ b/src/main/java/gregtech/api/gui/GT_GUICover.java @@ -2,17 +2,21 @@ package gregtech.api.gui; import gregtech.api.enums.Dyes; import gregtech.api.gui.widgets.GT_GuiFakeItemButton; +import gregtech.api.gui.widgets.GT_GuiIntegerTextBox; import gregtech.api.gui.widgets.GT_GuiTooltip; import gregtech.api.gui.widgets.GT_GuiTooltipManager; import gregtech.api.gui.widgets.GT_GuiTooltipManager.GT_IToolTipRenderer; import gregtech.api.interfaces.IGuiScreen; +import gregtech.api.interfaces.tileentity.ICoverable; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @@ -30,14 +34,14 @@ public abstract class GT_GUICover extends GuiScreen implements GT_IToolTipRender private GuiButton selectedButton; public String header; public GT_GuiFakeItemButton headerIcon; + public final ICoverable tile; protected List elements = new ArrayList<>(); + protected List textBoxes = new ArrayList<>(); - public GT_GUICover() { - } - - public GT_GUICover(int width, int height, ItemStack cover) { + public GT_GUICover(ICoverable tile, int width, int height, ItemStack cover) { + this.tile = tile; this.gui_width = width; this.gui_height = height; this.header = (cover != null) ? cover.getDisplayName() : ""; @@ -50,17 +54,35 @@ public abstract class GT_GUICover extends GuiScreen implements GT_IToolTipRender guiTop = (this.height - this.gui_height) / 2; for (IGuiElement element : elements) { - element.onInit(); - if (element instanceof GuiButton) buttonList.add(element); + if (element instanceof GT_GuiIntegerTextBox) + textBoxes.add((GT_GuiIntegerTextBox) element); } onInitGui(guiLeft, guiTop, gui_width, gui_height); + + for (IGuiElement element : elements) { + element.onInit(); + } } protected abstract void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height); + public void onMouseWheel(int x, int y, int delta) { + } + + @Override + public void handleMouseInput() { + int delta = Mouse.getEventDWheel(); + if (delta != 0) { + int i = Mouse.getEventX() * this.width / this.mc.displayWidth; + int j = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; + onMouseWheel(i, j, delta); + } + super.handleMouseInput(); + } + @Override public void drawScreen(int mouseX, int mouseY, float parTicks) { drawDefaultBackground(); @@ -115,26 +137,90 @@ public abstract class GT_GUICover extends GuiScreen implements GT_IToolTipRender return false; } - public void keyTyped(char p_73869_1_, int p_73869_2_) { - if (p_73869_2_ == this.mc.gameSettings.keyBindInventory.getKeyCode()) { - this.mc.displayGuiScreen((GuiScreen) null); - this.mc.setIngameFocus(); - return; - } - super.keyTyped(p_73869_1_, p_73869_2_); + public void closeScreen() { + this.mc.displayGuiScreen((GuiScreen) null); + this.mc.setIngameFocus(); } @Override - public void addElement(IGuiElement element) { - if (elements.contains(element)) + public void updateScreen() { + super.updateScreen(); + if (!tile.isUseableByPlayer(mc.thePlayer)) { + closeScreen(); return; - elements.add(element); + } + for (GuiTextField f : textBoxes) { + f.updateCursorCounter(); + } } + + public void mouseClicked(int x, int y, int button) { + for (GT_GuiIntegerTextBox tBox : textBoxes) { + boolean hadFocus = tBox.isFocused(); + tBox.mouseClicked(x,y,button); + if (tBox.isFocused() && button == 1) //rightclick -> lcear it + tBox.setText("0"); + else if (hadFocus && !tBox.isFocused()) + applyTextBox(tBox); + } + super.mouseClicked(x, y, button); + } + @Override - public boolean removeElement(IGuiElement element) { - return elements.remove(element); + public void keyTyped(char c, int key) { + GT_GuiIntegerTextBox focusedTextBox = null; + for (GT_GuiIntegerTextBox textBox : textBoxes) { + if (textBox.isFocused()) + focusedTextBox = textBox; + } + + if (key == 1) { //esc + if(focusedTextBox != null) { + resetTextBox(focusedTextBox); + setFocusedTextBox(null); + return; + } else { + closeScreen(); + } + } + + if (c == '\t') { //tab + for (int i = 0; i < textBoxes.size(); i++) { + GT_GuiIntegerTextBox box = textBoxes.get(i); + if (box.isFocused()) { + applyTextBox(box); + setFocusedTextBox(((i+1) < textBoxes.size()) ? textBoxes.get(i+1) : null); + return; + } + } + } + + if (focusedTextBox != null && focusedTextBox.textboxKeyTyped(c, key)){ + return; + } + + if (key == 28 && focusedTextBox != null) { // enter + applyTextBox(focusedTextBox); + setFocusedTextBox(null); + return; + } + + if (key == this.mc.gameSettings.keyBindInventory.getKeyCode()) { + if (focusedTextBox != null) { + applyTextBox(focusedTextBox); + setFocusedTextBox(null); + return; + } + closeScreen(); + return; + } + super.keyTyped(c, key); } + /** + * Button + */ + public void actionPerformed(GuiButton button) { selectedButton = button; } @@ -148,8 +234,20 @@ public abstract class GT_GUICover extends GuiScreen implements GT_IToolTipRender } - public RenderItem getItemRenderer() { - return itemRender; + /** + * TextBoxes + */ + private void setFocusedTextBox(GT_GuiIntegerTextBox boxToFocus) { + for (GT_GuiIntegerTextBox textBox : textBoxes) { + textBox.setFocused(textBox.equals(boxToFocus)); + } + } + public void applyTextBox(GT_GuiIntegerTextBox box) { + + } + + public void resetTextBox(GT_GuiIntegerTextBox box) { + } /** @@ -191,4 +289,19 @@ public abstract class GT_GUICover extends GuiScreen implements GT_IToolTipRender public int getYSize() { return gui_height; } + + public RenderItem getItemRenderer() { + return itemRender; + } + + @Override + public void addElement(IGuiElement element) { + if (elements.contains(element)) + return; + elements.add(element); + } + @Override + public boolean removeElement(IGuiElement element) { + return elements.remove(element); + } } diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiIntegerTextBox.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiIntegerTextBox.java new file mode 100644 index 0000000000..3f6fe64e73 --- /dev/null +++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiIntegerTextBox.java @@ -0,0 +1,50 @@ +package gregtech.api.gui.widgets; + +import gregtech.api.interfaces.IGuiScreen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiTextField; + +import java.awt.*; + +public class GT_GuiIntegerTextBox extends GuiTextField implements IGuiScreen.IGuiElement { + private final int x0, y0; + private final IGuiScreen gui; + public final int id; + + public GT_GuiIntegerTextBox(IGuiScreen gui, int id, int x, int y, int width, int height) { + super(Minecraft.getMinecraft().fontRenderer, x, y, width, height); + super.setText(""); + this.id = id; + x0 = x; + y0 = y; + this.gui = gui; + gui.addElement(this); + } + + @Override + public void onInit() { + xPosition = x0 + gui.getGuiLeft(); + yPosition = y0 + gui.getGuiTop(); + } + + @Override + public void draw(int mouseX, int mouseY, float parTicks) { + super.drawTextBox(); + } + + public Rectangle getBounds() { + return new Rectangle(x0, y0, width, height); + } + + public boolean validChar(char c, int key) { + return Character.isDigit(c); + } + + @Override + public boolean textboxKeyTyped(char c, int key) { + if (validChar(c, key) || c == 1 || c == 3 || c == 22 || c == 24 || key == 14 || key == 199 || key == 203 || key == 205 || key == 207 || key == 211) { + return super.textboxKeyTyped(c, key); + } + return false; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java index 0b9ec848b1..b9c8641a86 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java @@ -912,13 +912,15 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE return true; } - byte cSide = tSide; - if (getCoverIDAtSide(aSide) != 0) cSide = aSide; + byte coverSide = aSide; + if (getCoverIDAtSide(aSide) == 0) coverSide = tSide; - if (getCoverIDAtSide(cSide) == 0) { + if (getCoverIDAtSide(coverSide) == 0) { if (GregTech_API.sCovers.containsKey(new GT_ItemStack(tCurrentItem))) { - if (GregTech_API.getCoverBehavior(tCurrentItem).isCoverPlaceable(cSide, new GT_ItemStack(tCurrentItem), this) && mMetaTileEntity.allowCoverOnSide(cSide, new GT_ItemStack(tCurrentItem))) { - setCoverItemAtSide(cSide, tCurrentItem); + if (GregTech_API.getCoverBehavior(tCurrentItem).isCoverPlaceable(coverSide, new GT_ItemStack(tCurrentItem), this) && + mMetaTileEntity.allowCoverOnSide(coverSide, new GT_ItemStack(tCurrentItem))) + { + setCoverItemAtSide(coverSide, tCurrentItem); if (!aPlayer.capabilities.isCreativeMode) tCurrentItem.stackSize--; GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord); } @@ -928,13 +930,13 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCrowbarList)) { if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(0), 1.0F, -1, xCoord, yCoord, zCoord); - dropCover(cSide, aSide, false); + dropCover(coverSide, aSide, false); } return true; } } } - else if (aPlayer.isSneaking()) { //Sneak click, no tool -> open cover config if possible. + else if (aPlayer.isSneaking()) { //Sneak click, no tool -> open cover config or turn back. aSide = (getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) : aSide; return getCoverIDAtSide(aSide) > 0 && getCoverBehaviorAtSide(aSide).onCoverShiftRightclick(aSide, getCoverIDAtSide(aSide), getCoverDataAtSide(aSide), this, aPlayer); } diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java index fa0263c28e..11c4ef4e6b 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java @@ -1410,11 +1410,15 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE return true; } - byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); - if (getCoverIDAtSide(tSide) == 0) { + byte coverSide = aSide; + if (getCoverIDAtSide(aSide) == 0) coverSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); + + if (getCoverIDAtSide(coverSide) == 0) { if (GregTech_API.sCovers.containsKey(new GT_ItemStack(tCurrentItem))) { - if (GregTech_API.getCoverBehavior(tCurrentItem).isCoverPlaceable(tSide, new GT_ItemStack(tCurrentItem), this) && mMetaTileEntity.allowCoverOnSide(tSide, new GT_ItemStack(tCurrentItem))) { - setCoverItemAtSide(tSide, tCurrentItem); + if (GregTech_API.getCoverBehavior(tCurrentItem).isCoverPlaceable(coverSide, new GT_ItemStack(tCurrentItem), this) && + mMetaTileEntity.allowCoverOnSide(coverSide, new GT_ItemStack(tCurrentItem))) + { + setCoverItemAtSide(coverSide, tCurrentItem); if (!aPlayer.capabilities.isCreativeMode) tCurrentItem.stackSize--; GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord); } @@ -1424,7 +1428,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCrowbarList)) { if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(0), 1.0F, -1, xCoord, yCoord, zCoord); - dropCover(tSide, aSide, false); + dropCover(coverSide, aSide, false); } return true; } diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java index bda1852c31..51f5e30c28 100644 --- a/src/main/java/gregtech/common/GT_Client.java +++ b/src/main/java/gregtech/common/GT_Client.java @@ -130,7 +130,21 @@ public class GT_Client extends GT_Proxy }); } + + private static boolean checkedForChicken = false; private static void drawGrid(DrawBlockHighlightEvent aEvent, boolean showCoverConnections) { + if (!checkedForChicken) { + try { + Class.forName("codechicken.lib.vec.Rotation"); + } catch (Throwable e) { + if (GT_Values.D1) { + e.printStackTrace(GT_Log.err); + } + return; + } + checkedForChicken = true; + } + GL11.glPushMatrix(); GL11.glTranslated(-(aEvent.player.lastTickPosX + (aEvent.player.posX - aEvent.player.lastTickPosX) * (double) aEvent.partialTicks), -(aEvent.player.lastTickPosY + (aEvent.player.posY - aEvent.player.lastTickPosY) * (double) aEvent.partialTicks), -(aEvent.player.lastTickPosZ + (aEvent.player.posZ - aEvent.player.lastTickPosZ) * (double) aEvent.partialTicks)); GL11.glTranslated((float) aEvent.target.blockX + 0.5F, (float) aEvent.target.blockY + 0.5F, (float) aEvent.target.blockZ + 0.5F); @@ -229,6 +243,10 @@ public class GT_Client extends GT_Proxy GL11.glPopMatrix(); } + private static void drawGrid(DrawBlockHighlightEvent aEvent) { + drawGrid(aEvent, false); + } + //TODO less bad //@SubscribeEvent //public void manipulateDensity(EntityViewRenderEvent.FogDensity event) { @@ -453,52 +471,44 @@ public class GT_Client extends GT_Proxy @SubscribeEvent public void onDrawBlockHighlight(DrawBlockHighlightEvent aEvent) { + Block aBlock = aEvent.player.worldObj.getBlock(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); TileEntity aTileEntity = aEvent.player.worldObj.getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); - if (aTileEntity == null) - return; - try { - Class.forName("codechicken.lib.vec.Rotation");//Whats this do, need to check every frame? - } catch (Throwable e) { - if (GT_Values.D1) { - e.printStackTrace(GT_Log.err); - } + + if (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWrenchList)) + { + if (aTileEntity instanceof ITurnable || ROTATABLE_VANILLA_BLOCKS.contains(aBlock) || aTileEntity instanceof IWrenchable) + drawGrid(aEvent, false); return; } - if (GT_Utility.isStackValid(aEvent.currentItem)) { - Block aBlock = aEvent.player.worldObj.getBlock(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); - if (((aTileEntity instanceof BaseMetaPipeEntity)) && (((ICoverable) aTileEntity).getCoverIDAtSide((byte) aEvent.target.sideHit) == 0) && ( - GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCovers.keySet()) || - GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCrowbarList) || - GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWireCutterList) || - GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sScrewdriverList)|| - GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sSolderingToolList) )) - { - drawGrid(aEvent, false); - return; - } - if ((aTileEntity instanceof ITurnable || ROTATABLE_VANILLA_BLOCKS.contains(aBlock) || aTileEntity instanceof IWrenchable) && - GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWrenchList)) - { - drawGrid(aEvent, false); - return; - } - if (aTileEntity instanceof BaseTileEntity && ( - GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWireCutterList) || - GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sSolderingToolList))) - { + if (!(aTileEntity instanceof ICoverable)) + return; + + if (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWireCutterList) || + GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sSolderingToolList) ) + { + if (((ICoverable) aTileEntity).getCoverIDAtSide((byte) aEvent.target.sideHit) == 0) drawGrid(aEvent, false); - return; - } - } else if (aEvent.currentItem == null && aEvent.player.isSneaking()) { - if (aTileEntity instanceof ICoverable && ((ICoverable) aTileEntity).getCoverIDAtSide((byte) aEvent.target.sideHit) == 0 ){ - for (byte i = 0; i < 6; i++) { - if(((ICoverable) aTileEntity).getCoverIDAtSide(i) > 0) { + return; + } + + if ((aEvent.currentItem == null && aEvent.player.isSneaking()) || + GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCrowbarList) || + GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sScrewdriverList)) + { + if (((ICoverable) aTileEntity).getCoverIDAtSide((byte) aEvent.target.sideHit) == 0) + for (byte i = 0; i < 6; i++) + if (((ICoverable) aTileEntity).getCoverIDAtSide(i) > 0) { drawGrid(aEvent, true); return; } - } - } + return; + } + + if (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCovers.keySet())) + { + if (((ICoverable) aTileEntity).getCoverIDAtSide((byte) aEvent.target.sideHit) == 0) + drawGrid(aEvent, true); } } diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java b/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java index 3587829177..39c87669f1 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java @@ -1,8 +1,15 @@ package gregtech.common.covers; +import gregtech.api.enums.GT_Values; +import gregtech.api.gui.GT_GUICover; +import gregtech.api.gui.widgets.GT_GuiIcon; +import gregtech.api.gui.widgets.GT_GuiIconButton; +import gregtech.api.gui.widgets.GT_GuiIntegerTextBox; import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.net.GT_Packet_TileEntityCover; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; +import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.Fluid; @@ -134,4 +141,161 @@ public class GT_Cover_FluidRegulator extends GT_CoverBehavior { public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return 1; } + + /** + * GUI Stuff + */ + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) { + return new GT_Cover_FluidRegulator.GUI(aSide, aCoverID, coverData, aTileEntity); + } + + private class GUI extends GT_GUICover { + private final byte side; + private final int coverID; + private GT_GuiIntegerTextBox tBox, lBox; + private int coverVariable; + + private final static int startX = 10; + private final static int startY = 25; + private final static int spaceX = 18; + private final static int spaceY = 18; + + private int speed; + private boolean export; + + public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID)); + this.side = aSide; + this.coverID = aCoverID; + this.coverVariable = aCoverVariable; + + this.speed = Math.abs(coverVariable); + this.export = coverVariable >= 0; + new GT_GuiIconButton(this, 0,startX + spaceX*0,startY+spaceY*0, GT_GuiIcon.EXPORT).setTooltipText(trans("006","Export")); + new GT_GuiIconButton(this, 1,startX + spaceX*1,startY+spaceY*0, GT_GuiIcon.IMPORT).setTooltipText(trans("007","Import")); + + tBox = new GT_GuiIntegerTextBox(this, 2,startX + spaceX*0,startY+spaceY*1 + 2, spaceX*4-3,12); + tBox.setText(String.valueOf(speed)); + tBox.setMaxStringLength(10); + + lBox = new GT_GuiIntegerTextBox(this, 3,startX + spaceX*0,startY+spaceY*2 + 2, spaceX*4-3,12); + lBox.setText(String.valueOf(speed*20L)); + lBox.setMaxStringLength(10); + } + + @Override + public void drawExtras(int mouseX, int mouseY, float parTicks) { + super.drawExtras(mouseX, mouseY, parTicks); + this.getFontRenderer().drawString(trans("229","Import/Export" ), startX + spaceX*4, 4+startY+spaceY*0, 0xFF555555); + this.getFontRenderer().drawString(trans("049", "L/tick "), startX + spaceX*4, 4+startY+spaceY*1, 0xFF555555); + this.getFontRenderer().drawString(trans("050", "L/sec"), startX + spaceX*4, 4+startY+spaceY*2, 0xFF555555); + } + + @Override + protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) { + updateButtons(); + tBox.setFocused(true); + } + + public void buttonClicked(GuiButton btn){ + if (getClickable(btn.id)){ + coverVariable = getNewCoverVariable(btn.id); + GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); + } + updateButtons(); + } + + @Override + public void onMouseWheel(int x, int y, int delta) { + for (GT_GuiIntegerTextBox box : textBoxes){ + if (box.isFocused()) { + int step = Math.max(1, Math.abs(delta / 120)); + step = (isShiftKeyDown() ? 50 : isCtrlKeyDown() ? 5 : 1) * (delta > 0 ? step : -step); + long i; + try { + i = Long.parseLong(box.getText()); + } catch (NumberFormatException e) { + return; + } + if (i > (Long.MAX_VALUE-1000)) + break; + + i = i + step; + if (i <= 0) + i = 0; + box.setText(String.valueOf(i)); + break; + } + } + } + + @Override + public void applyTextBox(GT_GuiIntegerTextBox box) { + long i; + String s = box.getText().trim(); + try { + i = Long.parseLong(s); + } catch (NumberFormatException e) { + resetTextBox(box); + return; + } + + if (box.id == 3) + i = i / 20; + + if (i > mTransferRate) + i = mTransferRate; + else if (i <= 0) + i = 0; + + speed = (int) i; + + tBox.setText(String.valueOf(speed)); + lBox.setText(String.valueOf(speed*20)); + + coverVariable = getNewCoverVariable(2); + GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); + } + + @Override + public void resetTextBox(GT_GuiIntegerTextBox box) { + box.setText(String.valueOf(speed)); + } + + private void updateButtons(){ + GuiButton b; + for (Object o : buttonList) { + b = (GuiButton) o; + b.enabled = getClickable(b.id); + } + } + + private int getNewCoverVariable(int id) { + switch (id) { + case 0: + export = true; + return speed; + case 1: + export = false; + return -speed; + case 2: + if (export) + return speed; + else + return -speed; + } + return coverVariable; + } + + private boolean getClickable(int id) { + return (id == 0) ^ (export); + } + } } diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java index 1fcdf9fccf..0a213bb844 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java @@ -168,8 +168,7 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehavior { private final byte side; private final int coverID; private int coverVariable; - private final ICoverable tile; - private GT_GuiFakeItemButton fluidFilterButton; + private final GT_GuiFakeItemButton fluidFilterButton; protected String fluidFilterName; private final static int startX = 10; @@ -179,11 +178,10 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehavior { public GT_FluidFilterGUICover(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - super(176, 107, GT_Utility.intToStack(aCoverID)); + super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID)); this.side = aSide; this.coverID = aCoverID; this.coverVariable = aCoverVariable; - this.tile = aTileEntity; GT_GuiIconButton b; b = new GT_GuiIconButton(this, 0, startX + spaceX*0, startY+spaceY*0, GT_GuiIcon.EXPORT).setTooltipText(trans("232","Filter Input")); diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java index 7b98b18a31..364229f6f8 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java @@ -161,7 +161,6 @@ public class GT_Cover_Pump private final byte side; private final int coverID; private int coverVariable; - private final ICoverable tile; private final static int startX = 10; private final static int startY = 25; @@ -169,11 +168,10 @@ public class GT_Cover_Pump private final static int spaceY = 18; public GT_PumpGUICover(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - super(176, 107, GT_Utility.intToStack(aCoverID)); + super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID)); this.side = aSide; this.coverID = aCoverID; this.coverVariable = aCoverVariable; - this.tile = aTileEntity; GT_GuiIconButton b; b = new GT_GuiIconButton(this, 0, startX + spaceX*0, startY+spaceY*0, GT_GuiIcon.EXPORT).setTooltipText(trans("006","Export")); -- cgit