aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authormoller21 <42100910+moller21@users.noreply.github.com>2020-05-03 23:55:23 +0200
committermoller21 <42100910+moller21@users.noreply.github.com>2020-05-04 20:15:20 +0200
commitb1f29c6c04170c322cc2f7631147a4c8f86160cd (patch)
tree997691e945186e69a68db33e2226e663233bf06a /src/main/java
parent0d59868a668a62d0d05c3ea6efbbeb3e9fc80c59 (diff)
downloadGT5-Unofficial-b1f29c6c04170c322cc2f7631147a4c8f86160cd.tar.gz
GT5-Unofficial-b1f29c6c04170c322cc2f7631147a4c8f86160cd.tar.bz2
GT5-Unofficial-b1f29c6c04170c322cc2f7631147a4c8f86160cd.zip
Added cover guis for pump/filter
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUICover.java185
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java63
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java77
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiIconButton.java111
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiTooltip.java37
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiTooltipManager.java71
-rw-r--r--src/main/java/gregtech/api/interfaces/IGuiScreen.java35
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java5
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java24
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java24
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_TileEntityCover.java99
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java125
-rw-r--r--src/main/java/gregtech/api/util/GT_CoverBehavior.java18
-rw-r--r--src/main/java/gregtech/common/GT_Client.java2
-rw-r--r--src/main/java/gregtech/common/GT_Network.java2
-rw-r--r--src/main/java/gregtech/common/GT_Proxy.java20
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java173
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Pump.java170
18 files changed, 1187 insertions, 54 deletions
diff --git a/src/main/java/gregtech/api/gui/GT_GUICover.java b/src/main/java/gregtech/api/gui/GT_GUICover.java
new file mode 100644
index 0000000000..760d888c02
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/GT_GUICover.java
@@ -0,0 +1,185 @@
+package gregtech.api.gui;
+
+import gregtech.api.enums.Dyes;
+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 net.minecraft.client.gui.FontRenderer;
+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.util.ResourceLocation;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL12;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class GT_GUICover extends GuiScreen implements GT_IToolTipRenderer, IGuiScreen {
+
+ protected GT_GuiTooltipManager ttManager = new GT_GuiTooltipManager();
+
+ protected int gui_width = 176;
+ protected int gui_height = 107;
+ protected int guiTop, guiLeft;
+ protected boolean drawButtons = true;
+ private GuiButton selectedButton;
+
+ protected List<IGuiElement> elements = new ArrayList<>();
+
+ public GT_GUICover() {
+ }
+
+ public GT_GUICover(int width, int height) {
+ this.gui_width = width;
+ this.gui_height = height;
+ }
+
+ @Override
+ public void initGui() {
+ guiLeft = (this.width - this.gui_width) / 2;
+ guiTop = (this.height - this.gui_height) / 2;
+
+ for (IGuiElement element : elements) {
+ element.onInit();
+
+ if (element instanceof GuiButton)
+ buttonList.add(element);
+ }
+
+ onInitGui(guiLeft, guiTop, gui_width, gui_height);
+ }
+
+ protected abstract void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height);
+
+ @Override
+ public void drawScreen(int mouseX, int mouseY, float parTicks) {
+ drawDefaultBackground();
+
+ drawBackground(mouseX, mouseY, parTicks);
+
+ RenderHelper.disableStandardItemLighting();
+ GL11.glDisable(GL11.GL_LIGHTING);
+ GL11.glDisable(GL11.GL_DEPTH_TEST);
+ GL11.glDisable(GL12.GL_RESCALE_NORMAL);
+ if (drawButtons) {
+ RenderHelper.enableGUIStandardItemLighting();
+ for (IGuiElement e : elements)
+ e.draw(mouseX, mouseY, parTicks);
+ }
+ GL11.glEnable(GL12.GL_RESCALE_NORMAL);
+
+ GL11.glPushMatrix();
+ GL11.glTranslatef(guiLeft, guiTop, 0.0F);
+ GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+
+ GL11.glDisable(GL11.GL_LIGHTING);
+ drawForegroundLayer(mouseX, mouseY, parTicks);
+ GL11.glEnable(GL11.GL_LIGHTING);
+
+ GL11.glPopMatrix();
+
+ GL11.glEnable(GL11.GL_LIGHTING);
+ GL11.glEnable(GL11.GL_DEPTH_TEST);
+ RenderHelper.enableStandardItemLighting();
+ }
+
+ public void drawForegroundLayer(int mouseX, int mouseY, float parTicks) {
+ drawExtras(mouseX, mouseY, parTicks);
+ ttManager.onTick(this, mouseX, mouseY);
+ }
+
+ public void drawBackground(int mouseX, int mouseY, float parTicks) {
+ short[] color = Dyes.MACHINE_METAL.getRGBA();
+ GL11.glColor3ub((byte) color[0], (byte) color[1], (byte) color[2]);
+ this.mc.renderEngine.bindTexture(new ResourceLocation("gregtech:textures/gui/GuiCover.png"));
+ drawTexturedModalRect(guiLeft, guiTop, 0,0, gui_width, gui_height);
+ }
+
+ public void drawExtras(int mouseX, int mouseY, float parTicks) {}
+
+ @Override
+ public boolean doesGuiPauseGame()
+ {
+ 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_);
+ }
+
+ @Override
+ public void addElement(IGuiElement element) {
+ if (elements.contains(element))
+ return;
+ elements.add(element);
+ }
+ @Override
+ public boolean removeElement(IGuiElement element) {
+ return elements.remove(element);
+ }
+
+ public void actionPerformed(GuiButton button) {
+ selectedButton = button;
+ }
+
+ public void clearSelectedButton() {
+ selectedButton = null;
+ }
+ public GuiButton getSelectedButton(){return selectedButton;}
+
+ public void buttonClicked(GuiButton button) {
+
+ }
+
+ public RenderItem getItemRenderer() {
+ return itemRender;
+ }
+
+ /**
+ * GT_IToolTipRenderer
+ */
+ @Override
+ public void drawHoveringText(List par1List, int par2, int par3, FontRenderer render) {
+ super.drawHoveringText(par1List, par2, par3, render);
+ }
+ @Override
+ public FontRenderer getFontRenderer() {
+ return super.fontRendererObj;
+ }
+ @Override
+ public void addToolTip(GT_GuiTooltip toolTip) {
+ ttManager.addToolTip(toolTip);
+ }
+ @Override
+ public boolean removeToolTip(GT_GuiTooltip toolTip) {
+ return ttManager.removeToolTip(toolTip);
+ }
+
+ /**
+ * Junk
+ */
+ @Override
+ public int getGuiTop() {
+ return guiTop;
+ }
+ @Override
+ public int getGuiLeft() {
+ return guiLeft;
+ }
+ @Override
+ public int getXSize() {
+ return gui_width;
+ }
+ @Override
+ public int getYSize() {
+ return gui_height;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java
new file mode 100644
index 0000000000..25af30965a
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiFakeItemButton.java
@@ -0,0 +1,63 @@
+package gregtech.api.gui.widgets;
+
+import gregtech.api.interfaces.IGuiScreen;
+import net.minecraft.client.Minecraft;
+import net.minecraft.item.ItemStack;
+import org.lwjgl.opengl.GL11;
+
+import java.awt.*;
+
+public class GT_GuiFakeItemButton implements IGuiScreen.IGuiElement {
+
+ private final GT_GuiIcon bgIcon;
+ private ItemStack item;
+ private IGuiScreen gui;
+ private int x0, y0, xPosition, yPosition;
+ private int width, height;
+
+ public GT_GuiFakeItemButton(IGuiScreen gui, int x, int y, GT_GuiIcon bgIcon) {
+ this.gui = gui;
+ this.x0 = x;
+ this.y0 = y;
+ this.bgIcon = bgIcon;
+ item = null;
+ width = 18;
+ height = 18;
+ gui.addElement(this);
+ }
+
+ public void setItem(ItemStack i) {
+ item = i;
+ }
+
+ public ItemStack getItem(){
+ return item;
+ }
+
+ @Override
+ public void onInit() {
+ xPosition = x0 + gui.getGuiLeft();
+ yPosition = y0 + gui.getGuiTop();
+ }
+
+ @Override
+ public void draw(int mouseX, int mouseY, float parTicks) {
+ GL11.glColor4f(1, 1, 1, 1);
+ GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+
+ if (bgIcon != null){
+ GT_GuiIcon.render(bgIcon, xPosition-1, yPosition-1, 18, 18,0,true);
+ }
+
+ if (item != null)
+ gui.getItemRenderer().renderItemAndEffectIntoGUI(gui.getFontRenderer(), Minecraft.getMinecraft().getTextureManager(), item, xPosition, yPosition);
+
+ GL11.glPopAttrib();
+ }
+
+ public Rectangle getBounds() {
+ return new Rectangle(x0, y0, width, height);
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java
new file mode 100644
index 0000000000..1c31462e62
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java
@@ -0,0 +1,77 @@
+package gregtech.api.gui.widgets;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.util.ResourceLocation;
+
+public enum GT_GuiIcon {
+ BUTTON_NORMAL (0, 0, 0),
+ BUTTON_DOWN (0, 32, 0),
+ BUTTON_HIGHLIGHT (0, 32*2, 0),
+ BUTTON_HIGHLIGHT_DOWN (0, 32*3, 0),
+ BUTTON_DISABLED (0, 32*4, 0),
+
+ DISABLE (0, 0, 32),
+ REDSTONE_OFF (0, 32, 32),
+ REDSTONE_ON (0, 32*2, 32),
+ CHECKMARK (0, 32*3, 32),
+ CROSS (0, 32*4, 32),
+ WHITELIST (0, 32*5, 32),
+ BLACKLIST (0, 32*6, 32),
+
+ EXPORT (0, 0, 32*2),
+ IMPORT (0, 32, 32*2),
+ ALLOW_INPUT (0, 32*2, 32*2),
+ BLOCK_INPUT (0, 32*3, 32*2),
+
+ SLOT_DARKGRAY (1, 176,0,18,18),
+ SLOT_GRAY (1, 176,18,18,18);
+
+ private static final int T_SIZE = 256;
+ private static final ResourceLocation[] TEXTURES = {
+ new ResourceLocation("gregtech", "textures/gui/GuiButtons.png"),
+ new ResourceLocation("gregtech", "textures/gui/GuiCover.png")
+ };
+
+ public final int x, y, width, height;
+ public final GT_GuiIcon overlay;
+ private final int texID;
+
+ GT_GuiIcon(int texID, int x, int y, int width, int height, GT_GuiIcon overlay) {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ this.overlay = overlay;
+ this.texID = texID;
+ }
+
+ GT_GuiIcon(int texID, int x, int y) {
+ this(texID, x, y,32,32,null);
+ }
+ GT_GuiIcon(int texID, int x, int y, int width, int height) {
+ this(texID, x, y, width, height,null);
+ }
+
+ public static void render(GT_GuiIcon icon, double x, double y, double width, double height, double zLevel, boolean doDraw) {
+ Tessellator tess = Tessellator.instance;
+ if (doDraw) {
+ Minecraft.getMinecraft().renderEngine.bindTexture(TEXTURES[icon.texID]);
+ tess.startDrawingQuads();
+ }
+ double minU = (double) icon.x / T_SIZE;
+ double maxU = (double) (icon.x + icon.width) / T_SIZE;
+ double minV = (double) icon.y / T_SIZE;
+ double maxV = (double) (icon.y + icon.height) / T_SIZE;
+ tess.addVertexWithUV(x, y + height, zLevel, minU, maxV);
+ tess.addVertexWithUV(x + width, y + height, zLevel, maxU, maxV);
+ tess.addVertexWithUV(x + width, y + 0, zLevel, maxU, minV);
+ tess.addVertexWithUV(x, y + 0, zLevel, minU, minV);
+
+ if (icon.overlay != null)
+ render(icon.overlay, x, y, width, height, zLevel, false);
+
+ if (doDraw)
+ tess.draw();
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiIconButton.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiIconButton.java
new file mode 100644
index 0000000000..bd1e921592
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiIconButton.java
@@ -0,0 +1,111 @@
+package gregtech.api.gui.widgets;
+
+import gregtech.api.interfaces.IGuiScreen;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+import org.lwjgl.opengl.GL11;
+import java.awt.Rectangle;
+
+public class GT_GuiIconButton extends GuiButton implements IGuiScreen.IGuiElement {
+ public static final int DEFAULT_WIDTH = 16;
+ public static final int DEFAULT_HEIGHT = 16;
+
+ protected GT_GuiIcon icon;
+ private int x0, y0;
+ private IGuiScreen gui;
+ private String[] tooltipText;
+
+ private GT_GuiTooltip tooltip;
+
+
+ public GT_GuiIconButton(IGuiScreen gui, int id, int x, int y, GT_GuiIcon icon) {
+ super(id, x, y, DEFAULT_WIDTH, DEFAULT_HEIGHT, "");
+ this.gui = gui;
+ this.icon = icon;
+ this.x0 = x;
+ this.y0 = y;
+ gui.addElement(this);
+ }
+
+ public void onInit() {
+ if (tooltip != null)
+ gui.addToolTip(tooltip);
+ xPosition = x0 + gui.getGuiLeft();
+ yPosition = y0 + gui.getGuiTop();
+ }
+
+ @Override
+ public void draw(int mouseX, int mouseY, float parTicks) {
+ drawButton(Minecraft.getMinecraft(), mouseX, mouseY);
+ }
+
+ public void drawButton(Minecraft mc, int mouseX, int mouseY) {
+ if (this.tooltip != null)
+ this.tooltip.enabled = true;
+
+ if (this.visible) {
+ //moused over
+ this.field_146123_n = mouseX >= this.xPosition && mouseY >= this.yPosition && mouseX < this.xPosition + width && mouseY < this.yPosition + height;
+
+ mouseDragged(mc, mouseX, mouseY);
+
+ GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
+ GL11.glEnable(GL11.GL_BLEND);
+ GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+
+ int x = xPosition;
+ int y = yPosition;
+ if(!this.field_146123_n) {
+ GL11.glColor4f(160F/255F, 170F/255F, 1, 1);
+ }
+ else
+ GL11.glColor4f(1, 1, 1, 1);
+
+ GT_GuiIcon.render(getButtonTexture(this.field_146123_n), x, y, width, height, 0, true);
+
+ GL11.glColor4f(1, 1, 1, 1);
+ if (icon != null) {
+ GT_GuiIcon.render(icon, x, y, width, height , 0, true);
+ }
+
+ GL11.glPopAttrib();
+ }
+ }
+
+ @Override
+ public void mouseReleased(int mouseX, int mouseY) {
+ this.gui.clearSelectedButton();
+ if(mousePressed(Minecraft.getMinecraft(), mouseX, mouseY))
+ this.gui.buttonClicked(this);
+ }
+
+ public GT_GuiIcon getButtonTexture(boolean mouseOver) {
+ if (!enabled)
+ return GT_GuiIcon.BUTTON_DISABLED;
+ if (this.equals(this.gui.getSelectedButton()))
+ return mouseOver ? GT_GuiIcon.BUTTON_HIGHLIGHT_DOWN : GT_GuiIcon.BUTTON_DOWN;
+ else
+ return mouseOver ? GT_GuiIcon.BUTTON_HIGHLIGHT : GT_GuiIcon.BUTTON_NORMAL;
+ }
+
+ public GT_GuiIcon getIcon() {
+ return icon;
+ }
+
+ public GT_GuiTooltip getTooltip() {
+ return tooltip;
+ }
+
+ public GT_GuiIconButton setTooltipText(String... text) {
+ if (tooltip == null)
+ tooltip = new GT_GuiTooltip(getBounds(), text);
+ else
+ tooltip.setToolTipText(text);
+ this.tooltipText = text;
+ return this;
+ }
+
+ public Rectangle getBounds() {
+ return new Rectangle(x0, y0, width, height);
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltip.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltip.java
new file mode 100644
index 0000000000..d24437f018
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltip.java
@@ -0,0 +1,37 @@
+package gregtech.api.gui.widgets;
+
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.List;
+
+public class GT_GuiTooltip {
+
+ protected Rectangle bounds;
+ private List<String> text;
+ public boolean enabled = true;
+
+ public GT_GuiTooltip(Rectangle bounds, String... text) {
+ this.bounds = bounds;
+ setToolTipText(text);
+ }
+
+ protected void updateText() {
+ }
+
+ public void setToolTipText(String... text) {
+ if (text != null) {
+ this.text = new ArrayList<>(text.length);
+ for (int i = 0; i < text.length; i++) {
+ if (i == 0)
+ this.text.add("\u00a7f" + text[i]);
+ else
+ this.text.add("\u00a77" + text[i]);
+ }
+ } else
+ this.text = new ArrayList<>();
+ }
+
+ public List<String> getToolTipText() {
+ return text;
+ }
+}
diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltipManager.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltipManager.java
new file mode 100644
index 0000000000..d0e6964abc
--- /dev/null
+++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiTooltipManager.java
@@ -0,0 +1,71 @@
+package gregtech.api.gui.widgets;
+
+import net.minecraft.client.gui.FontRenderer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class GT_GuiTooltipManager {
+ public interface GT_IToolTipRenderer {
+ int getGuiLeft();
+ int getGuiTop();
+ int getXSize();
+ FontRenderer getFontRenderer();
+ void drawHoveringText(List<String> par1List, int par2, int par3, FontRenderer font);
+ }
+
+ private static final long DELAY = 5;
+ private int mouseStopped;
+ private int lastMouseX = -1;
+ private int lastMouseY = -1;
+ private final List<GT_GuiTooltip> tips = new ArrayList<>();
+
+ public void addToolTip(GT_GuiTooltip tip) {
+ if (!tips.contains(tip)) tips.add(tip);
+ }
+
+ public boolean removeToolTip(GT_GuiTooltip tip) {
+ return tips.remove(tip);
+ }
+
+ public final void onTick(GT_IToolTipRenderer render, int mouseX, int mouseY) {
+ if ((Math.abs(mouseX-lastMouseX) < 2 ) && (Math.abs(mouseY-lastMouseY) < 2 ))
+ mouseStopped = Math.min(mouseStopped+1, 50);
+ else
+ mouseStopped = 0;
+
+ lastMouseX = mouseX;
+ lastMouseY = mouseY;
+
+ if (mouseStopped > DELAY)
+ mouseX -= render.getGuiLeft();
+ mouseY -= render.getGuiTop();
+ for (GT_GuiTooltip tip : tips) {
+ if(tip.enabled && tip.bounds.contains(mouseX, mouseY)){
+ tip.updateText();
+ drawTooltip(tip, mouseX, mouseY, render);
+ break;
+ }
+ }
+ }
+
+ private void drawTooltip(GT_GuiTooltip tip, int mouseX, int mouseY, GT_IToolTipRenderer render) {
+ List<String> text = tip.getToolTipText();
+ if (text == null)
+ return;
+
+ if (mouseX > render.getGuiLeft() + render.getXSize()/2) {
+ int maxWidth = 0;
+ for (String s : text) {
+ int w = render.getFontRenderer().getStringWidth(s);
+ if (w > maxWidth) {
+ maxWidth = w;
+ }
+ }
+ mouseX -= (maxWidth + 18);
+ }
+
+ render.drawHoveringText(text, mouseX, mouseY, render.getFontRenderer());
+ }
+
+}
diff --git a/src/main/java/gregtech/api/interfaces/IGuiScreen.java b/src/main/java/gregtech/api/interfaces/IGuiScreen.java
new file mode 100644
index 0000000000..d0089afbb8
--- /dev/null
+++ b/src/main/java/gregtech/api/interfaces/IGuiScreen.java
@@ -0,0 +1,35 @@
+package gregtech.api.interfaces;
+
+import gregtech.api.gui.widgets.GT_GuiTooltip;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.renderer.entity.RenderItem;
+
+
+public interface IGuiScreen {
+
+ interface IGuiElement {
+ void onInit();
+ void draw(int mouseX, int mouseY, float parTicks);
+ }
+
+ void addToolTip(GT_GuiTooltip toolTip);
+
+ boolean removeToolTip(GT_GuiTooltip toolTip);
+
+ GuiButton getSelectedButton();
+ void clearSelectedButton();
+ void buttonClicked(GuiButton button);
+
+ int getGuiLeft();
+ int getGuiTop();
+
+ int getXSize();
+ int getYSize();
+
+ void addElement(IGuiElement element);
+ boolean removeElement(IGuiElement element);
+
+ RenderItem getItemRenderer();
+ FontRenderer getFontRenderer();
+}
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
index 912dc554c0..76d121b8da 100644
--- a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
+++ b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
@@ -41,4 +41,9 @@ public interface ICoverable extends IRedstoneTileEntity, IHasInventory, IBasicEn
* Sends 6 Integers to Client + causes @issueTextureUpdate()
*/
void issueCoverUpdate(byte aSide);
+
+ /**
+ * Receiving a packet with cover data.
+ */
+ void receiveCoverData(byte coverSide, int coverID, int coverData);
} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
index ae8fc7324d..439da50f24 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
@@ -462,6 +462,12 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
}
@Override
+ public void receiveCoverData(byte coverSide, int coverID, int coverData) {
+ if ((coverSide >= 0 && coverSide < 6) && (mCoverSides[coverSide] == coverID))
+ setCoverDataAtSide(coverSide, coverData);
+ }
+
+ @Override
public byte getStrongestRedstone() {
return (byte) Math.max(getInternalInputRedstoneSignal((byte) 0), Math.max(getInternalInputRedstoneSignal((byte) 1), Math.max(getInternalInputRedstoneSignal((byte) 2), Math.max(getInternalInputRedstoneSignal((byte) 3), Math.max(getInternalInputRedstoneSignal((byte) 4), getInternalInputRedstoneSignal((byte) 5))))));
}
@@ -798,6 +804,15 @@ 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()) {
@@ -826,7 +841,14 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
@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;
+ byte tSide = aSide;
+ ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem();
+
+ if (shouldDisplayWrenchGrid(tCurrentItem, aSide)) {
+ tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ);
+ }
+
+ if (getCoverBehaviorAtSide(tSide).onCoverRightclickClient(tSide, this, aPlayer, aX, aY, aZ)) return true;
}
if (isServerSide()) {
ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem();
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
index 1ae88ade41..52c010afbd 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
@@ -782,6 +782,12 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
}
@Override
+ public void receiveCoverData(byte coverSide, int coverID, int coverData) {
+ if ((coverSide >= 0 && coverSide < 6) && (mCoverSides[coverSide] == coverID))
+ setCoverDataAtSide(coverSide, coverData);
+ }
+
+ @Override
public byte getStrongestRedstone() {
return (byte) Math.max(getInternalInputRedstoneSignal((byte) 0), Math.max(getInternalInputRedstoneSignal((byte) 1), Math.max(getInternalInputRedstoneSignal((byte) 2), Math.max(getInternalInputRedstoneSignal((byte) 3), Math.max(getInternalInputRedstoneSignal((byte) 4), getInternalInputRedstoneSignal((byte) 5))))));
}
@@ -1312,6 +1318,15 @@ 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()) {
@@ -1397,10 +1412,11 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
return true;
}
- if (getCoverIDAtSide(aSide) == 0) {
+ 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(aSide, new GT_ItemStack(tCurrentItem), this) && mMetaTileEntity.allowCoverOnSide(aSide, new GT_ItemStack(tCurrentItem))) {
- setCoverItemAtSide(aSide, tCurrentItem);
+ if (GregTech_API.getCoverBehavior(tCurrentItem).isCoverPlaceable(tSide, new GT_ItemStack(tCurrentItem), this) && mMetaTileEntity.allowCoverOnSide(aSide, 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);
}
@@ -1410,7 +1426,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(aSide, aSide, false);
+ dropCover(tSide, aSide, false);
}
return true;
}
diff --git a/src/main/java/gregtech/api/net/GT_Packet_TileEntityCover.java b/src/main/java/gregtech/api/net/GT_Packet_TileEntityCover.java
new file mode 100644
index 0000000000..bc688f47ed
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GT_Packet_TileEntityCover.java
@@ -0,0 +1,99 @@
+package gregtech.api.net;
+
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteArrayDataOutput;
+import com.google.common.io.ByteStreams;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import net.minecraftforge.common.DimensionManager;
+
+/**
+ * Client -> Server: Update cover data
+ */
+
+public class GT_Packet_TileEntityCover extends GT_Packet {
+ protected int mX;
+ protected short mY;
+ protected int mZ;
+
+ protected byte side;
+ protected int coverID, coverData, dimID;
+
+ public GT_Packet_TileEntityCover() {
+ super(true);
+ }
+
+ public GT_Packet_TileEntityCover(int mX, short mY, int mZ, byte coverSide, int coverID, int coverData, int dimID) {
+ super(false);
+ this.mX = mX;
+ this.mY = mY;
+ this.mZ = mZ;
+
+ this.side = coverSide;
+ this.coverID = coverID;
+ this.coverData = coverData;
+
+ this.dimID = dimID;
+ }
+ public GT_Packet_TileEntityCover(byte coverSide, int coverID, int coverData, ICoverable tile) {
+ super(false);
+ this.mX = tile.getXCoord();
+ this.mY = tile.getYCoord();
+ this.mZ = tile.getZCoord();
+
+ this.side = coverSide;
+ this.coverID = coverID;
+ this.coverData = coverData;
+
+ this.dimID = tile.getWorld().provider.dimensionId;
+ }
+
+ @Override
+ public byte getPacketID() {
+ return 6;
+ }
+
+ @Override
+ public byte[] encode() {
+ ByteArrayDataOutput tOut = ByteStreams.newDataOutput(4+2+4+1+4+4+4);
+ tOut.writeInt(mX);
+ tOut.writeShort(mY);
+ tOut.writeInt(mZ);
+
+ tOut.writeByte(side);
+ tOut.writeInt(coverID);
+ tOut.writeInt(coverData);
+
+ tOut.writeInt(dimID);
+
+ return tOut.toByteArray();
+ }
+
+ @Override
+ public GT_Packet decode(ByteArrayDataInput aData) {
+ return new GT_Packet_TileEntityCover(
+ aData.readInt(),
+ aData.readShort(),
+ aData.readInt(),
+
+ aData.readByte(),
+ aData.readInt(),
+ aData.readInt(),
+
+ aData.readInt());
+ }
+
+ @Override
+ public void process(IBlockAccess aWorld) {
+ World world = DimensionManager.getWorld(dimID);
+ if (world != null) {
+ TileEntity tile = world.getTileEntity(mX, mY, mZ);
+ if (tile instanceof IGregTechTileEntity && !((IGregTechTileEntity) tile).isDead()) {
+ ((IGregTechTileEntity) tile).receiveCoverData(side, coverID, coverData);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java b/src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java
new file mode 100644
index 0000000000..58ebf95ac6
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java
@@ -0,0 +1,125 @@
+package gregtech.api.net;
+
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteArrayDataOutput;
+import com.google.common.io.ByteStreams;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.common.GT_Proxy;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.EntityClientPlayerMP;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+
+/**
+ * Server -> Client: Show GUI
+ */
+
+public class GT_Packet_TileEntityCoverGUI extends GT_Packet {
+ protected int mX;
+ protected short mY;
+ protected int mZ;
+
+ protected byte side;
+ protected int coverID, coverData, dimID, playerID;
+
+ public GT_Packet_TileEntityCoverGUI() {
+ super(true);
+ }
+
+ public GT_Packet_TileEntityCoverGUI(int mX, short mY, int mZ, byte coverSide, int coverID, int coverData, int dimID, int playerID) {
+ super(false);
+ this.mX = mX;
+ this.mY = mY;
+ this.mZ = mZ;
+
+ this.side = coverSide;
+ this.coverID = coverID;
+ this.coverData = coverData;
+
+ this.dimID = dimID;
+ this.playerID = playerID;
+ }
+
+
+ public GT_Packet_TileEntityCoverGUI(byte side, int coverID, int coverData, ICoverable tile, EntityPlayerMP aPlayer) {
+ super(false);
+
+ this.mX = tile.getXCoord();
+ this.mY = tile.getYCoord();
+ this.mZ = tile.getZCoord();
+
+ this.side = side;
+ this.coverID = coverID;
+ this.coverData = coverData;
+
+ this.dimID = tile.getWorld().provider.dimensionId;
+ this.playerID = aPlayer.getEntityId();
+ }
+
+ public GT_Packet_TileEntityCoverGUI(byte coverSide, int coverID, int coverData, IGregTechTileEntity tile) {
+ super(false);
+ this.mX = tile.getXCoord();
+ this.mY = tile.getYCoord();
+ this.mZ = tile.getZCoord();
+
+ this.side = coverSide;
+ this.coverID = coverID;
+ this.coverData = coverData;
+
+ this.dimID = tile.getWorld().provider.dimensionId;
+ }
+
+ @Override
+ public byte getPacketID() {
+ return 7;
+ }
+
+ @Override
+ public byte[] encode() {
+ ByteArrayDataOutput tOut = ByteStreams.newDataOutput(4+2+4+1+4+4+4+4);
+ tOut.writeInt(mX);
+ tOut.writeShort(mY);
+ tOut.writeInt(mZ);
+
+ tOut.writeByte(side);
+ tOut.writeInt(coverID);
+ tOut.writeInt(coverData);
+
+ tOut.writeInt(dimID);
+ tOut.writeInt(playerID);
+
+ return tOut.toByteArray();
+ }
+
+ @Override
+ public GT_Packet decode(ByteArrayDataInput aData) {
+ return new GT_Packet_TileEntityCoverGUI(
+ aData.readInt(),
+ aData.readShort(),
+ aData.readInt(),
+
+ aData.readByte(),
+ aData.readInt(),
+ aData.readInt(),
+
+ aData.readInt(),
+ aData.readInt());
+ }
+
+ @Override
+ public void process(IBlockAccess aWorld) {
+ if (aWorld instanceof World) {
+ EntityClientPlayerMP a = Minecraft.getMinecraft().thePlayer;
+ TileEntity tile = aWorld.getTileEntity(mX, mY, mZ);
+ if (tile instanceof IGregTechTileEntity && !((IGregTechTileEntity) tile).isDead()) {
+
+ ((IGregTechTileEntity) tile).setCoverDataAtSide(side, coverData); //Set it client side to read later.
+ a.openGui(GT_Values.GT, GT_Proxy.GUI_ID_COVER_SIDE_BASE + side, a.worldObj, mX, mY, mZ);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/util/GT_CoverBehavior.java b/src/main/java/gregtech/api/util/GT_CoverBehavior.java
index a540601dd1..38c01b9d92 100644
--- a/src/main/java/gregtech/api/util/GT_CoverBehavior.java
+++ b/src/main/java/gregtech/api/util/GT_CoverBehavior.java
@@ -1,8 +1,11 @@
package gregtech.api.util;
+import gregtech.api.enums.GT_Values;
import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.net.GT_Packet_TileEntityCoverGUI;
import gregtech.api.objects.GT_ItemStack;
import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
@@ -43,9 +46,24 @@ 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;
+
+ if(aPlayer instanceof EntityPlayerMP) {
+ GT_Values.NW.sendToPlayer(new GT_Packet_TileEntityCoverGUI(aSide, aCoverID, aCoverVariable, aTileEntity, (EntityPlayerMP) aPlayer), (EntityPlayerMP) aPlayer);
+ }
+
return aCoverVariable;
}
+ public boolean hasCoverGUI() {
+ return false;
+ }
+
+ public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
+ return null;
+ }
+
/**
* Checks if the Cover can be placed on this.
*/
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<Object> 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;
+ }
+ }
}