aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/common/covers
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/common/covers')
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java164
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java196
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java158
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java110
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Pump.java128
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_SolarPanel.java4
6 files changed, 617 insertions, 143 deletions
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 f9f3c64b7d..0a213bb844 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java
@@ -1,30 +1,63 @@
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;
+ int aFilterFluid = aCoverVariable >>> 3;
+ final Fluid fluid = FluidRegistry.getFluid(aFilterFluid);
+ if(fluid == null) return E;
+
+ final FluidStack sFluid = new FluidStack(fluid, 1000);
+ return(String.format("Filtering Fluid: %s Mode: %s", sFluid.getLocalizedName(), getFilterMode(aFilterMode)));
+ }
+
+
public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
return aCoverVariable;
}
+ public String getFilterMode(int aFilterMode) {
+ switch(aFilterMode) {
+ case FILTER_INPUT_DENY_OUTPUT: return(trans("043", "Filter input, Deny output"));
+ case INVERT_INPUT_DENY_OUTPUT: return(trans("044", "Invert input, Deny output"));
+ case FILTER_INPUT_ANY_OUTPUT: return(trans("045", "Filter input, Permit any output"));
+ case INVERT_INPUT_ANY_OUTPUT: return(trans("046", "Invert input, Permit any output"));
+ case DENY_INPUT_FILTER_OUTPUT: return(trans("219", "Deny input, Filter output"));
+ case DENY_INPUT_INVERT_OUTPUT: return(trans("220", "Deny input, Invert output"));
+ case ANY_INPUT_FILTER_OUTPUT: return(trans("221", "Permit any input, Filter output"));
+ case ANY_INPUT_INVERT_OUTPUT: return(trans("222", "Permit any input, Invert output"));
+ default: return("UNKNOWN");
+ }
+
+ }
+
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;
@@ -32,17 +65,11 @@ public class GT_Cover_Fluidfilter extends GT_CoverBehavior {
if (aFilterMode < 0) {
aFilterMode = 7;
}
- switch(aFilterMode) {
- case FILTER_INPUT_DENY_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("043", "Filter input, Deny output")); break;
- case INVERT_INPUT_DENY_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("044", "Invert input, Deny output")); break;
- case FILTER_INPUT_ANY_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("045", "Filter input, Permit any output")); break;
- case INVERT_INPUT_ANY_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("046", "Invert input, Permit any output")); break;
- case DENY_INPUT_FILTER_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("219", "Deny input, Filter output")); break;
- case DENY_INPUT_INVERT_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("220", "Deny input, Invert output")); break;
- case ANY_INPUT_FILTER_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("221", "Permit any input, Filter output")); break;
- case ANY_INPUT_INVERT_OUTPUT: GT_Utility.sendChatToPlayer(aPlayer, trans("222", "Permit any input, Invert output")); break;
- }
+
+ GT_Utility.sendChatToPlayer(aPlayer, getFilterMode(aFilterMode));
+
aCoverVariable|=aFilterMode;
+
return aCoverVariable;
}
@@ -123,4 +150,133 @@ 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 GT_GuiFakeItemButton fluidFilterButton;
+ protected String fluidFilterName;
+
+ 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)
+ {
+ super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
+ this.side = aSide;
+ this.coverID = aCoverID;
+ this.coverVariable = aCoverVariable;
+
+ GT_GuiIconButton b;
+ 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) {
+ 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) {
+ 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
+ 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) {
+ fluidFilterButton.setItem(item);
+ fluidFilterName = item.getDisplayName();
+ return;
+ }
+ }
+ fluidFilterButton.setItem(null);
+ fluidFilterName = trans("224", "Filter Empty");
+ }
+ }
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java
index 83bac2a9ad..40706721c9 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java
@@ -1,79 +1,79 @@
-package gregtech.common.covers;
-
-import gregtech.api.interfaces.tileentity.ICoverable;
-import gregtech.api.util.GT_CoverBehavior;
-import gregtech.api.util.GT_Utility;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.Fluid;
-
-public class GT_Cover_ItemMeter
- extends GT_CoverBehavior {
- public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
- int[] tSlots;
- if (aCoverVariable < 2) {
- tSlots = aTileEntity.getAccessibleSlotsFromSide(aSide);
- } else {
- tSlots = new int[]{aCoverVariable - 2};
- }
- int tMax = 0;
- int tUsed = 0;
- for (int i : tSlots) {
- if (i >= 0 && i < aTileEntity.getSizeInventory()) {
- tMax+=64;
- ItemStack tStack = aTileEntity.getStackInSlot(i);
- if (tStack != null)
- tUsed += (tStack.stackSize<<6)/tStack.getMaxStackSize();
- }
- }
- if(tUsed==0)//nothing
- aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable == 1 ? 15 : 0));
- else if(tUsed >= tMax)//full
- aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable == 1 ? 0 : 15));
- else//1-14 range
- aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable == 1 ? 14-((14*tUsed)/tMax) : 1+((14*tUsed)/tMax)) );
- 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)) % (2 + aTileEntity.getSizeInventory());
- switch(aCoverVariable) {
- case 0: GT_Utility.sendChatToPlayer(aPlayer, trans("051", "Normal")); break;
- case 1: GT_Utility.sendChatToPlayer(aPlayer, trans("052", "Inverted")); break;
- default: GT_Utility.sendChatToPlayer(aPlayer, trans("053", "Slot: ") + (aCoverVariable - 2)); break;
- }
- return aCoverVariable;
- }
-
- public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- return true;
- }
-
- public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- return true;
- }
-
- public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
- return true;
- }
-
- public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
- return true;
- }
-
- public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
- return true;
- }
-
- public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
- return true;
- }
-
- public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- return true;
- }
-
- public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
- return 5;
- }
-}
+package gregtech.common.covers;
+
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehavior;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+
+public class GT_Cover_ItemMeter
+ extends GT_CoverBehavior {
+ public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
+ int[] tSlots;
+ if (aCoverVariable < 2) {
+ tSlots = aTileEntity.getAccessibleSlotsFromSide(aSide);
+ } else {
+ tSlots = new int[]{aCoverVariable - 2};
+ }
+ int tMax = 0;
+ int tUsed = 0;
+ for (int i : tSlots) {
+ if (i >= 0 && i < aTileEntity.getSizeInventory()) {
+ tMax+=64;
+ ItemStack tStack = aTileEntity.getStackInSlot(i);
+ if (tStack != null)
+ tUsed += (tStack.stackSize<<6)/tStack.getMaxStackSize();
+ }
+ }
+ if(tUsed==0)//nothing
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable == 1 ? 15 : 0));
+ else if(tUsed >= tMax)//full
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable == 1 ? 0 : 15));
+ else//1-14 range
+ aTileEntity.setOutputRedstoneSignal(aSide, (byte)(aCoverVariable == 1 ? 14-((14*tUsed)/tMax) : 1+((14*tUsed)/tMax)) );
+ 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)) % (2 + aTileEntity.getSizeInventory());
+ switch(aCoverVariable) {
+ case 0: GT_Utility.sendChatToPlayer(aPlayer, trans("051", "Normal")); break;
+ case 1: GT_Utility.sendChatToPlayer(aPlayer, trans("052", "Inverted")); break;
+ default: GT_Utility.sendChatToPlayer(aPlayer, trans("053", "Slot: ") + (aCoverVariable - 2)); break;
+ }
+ return aCoverVariable;
+ }
+
+ public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return true;
+ }
+
+ public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ return 5;
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java b/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java
index e61324ff44..3316b204dc 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java
@@ -7,13 +7,16 @@ import gregtech.api.items.GT_MetaGenerated_Tool;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
-import gregtech.common.items.GT_MetaGenerated_Tool_01;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.fluids.Fluid;
public class GT_Cover_NeedMaintainance extends GT_CoverBehavior {
+ private boolean isRotor(ItemStack aRotor) {
+ return !(aRotor == null || !(aRotor.getItem() instanceof GT_MetaGenerated_Tool) || aRotor.getItemDamage() < 170 || aRotor.getItemDamage() > 176);
+ }
+
public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
boolean needsRepair = false;
if (aTileEntity instanceof IGregTechTileEntity) {
@@ -23,31 +26,24 @@ public class GT_Cover_NeedMaintainance extends GT_CoverBehavior {
GT_MetaTileEntity_MultiBlockBase multi = (GT_MetaTileEntity_MultiBlockBase) mTileEntity;
int ideal = multi.getIdealStatus();
int real = multi.getRepairStatus();
- if ((aCoverVariable == 0 || aCoverVariable == 1) && (ideal - real > 0)) {
- needsRepair = true;
- }
- if ((aCoverVariable == 2 || aCoverVariable == 3) && (ideal - real > 1)) {
- needsRepair = true;
- }
- if ((aCoverVariable == 4 || aCoverVariable == 5) && (ideal - real > 2)) {
- needsRepair = true;
- }
- if ((aCoverVariable == 6 || aCoverVariable == 7) && (ideal - real > 3)) {
- needsRepair = true;
- }
- if ((aCoverVariable == 8 || aCoverVariable == 9) && (ideal - real > 4)) {
- needsRepair = true;
- }
- if(aCoverVariable == 10 || aCoverVariable == 11){
- if(multi.getRealInventory()[1]==null || multi.getRealInventory()[1].getItem()!=GT_MetaGenerated_Tool_01.INSTANCE && multi.getRealInventory()[1].getItemDamage()<170){needsRepair = true;}
- else{
- ItemStack tTurbine = multi.getRealInventory()[1];
- long tMax = GT_MetaGenerated_Tool.getToolMaxDamage(tTurbine);
- long tCur = GT_MetaGenerated_Tool.getToolDamage(tTurbine);
- if(tCur < tMax*2/10)
- needsRepair = true;
- }
-
+ ItemStack tRotor = multi.getRealInventory()[1];
+ int coverVar = aCoverVariable >>> 1;
+ if (coverVar < 5) {
+ if (ideal - real > coverVar)
+ needsRepair = true;
+ } else if (coverVar == 5 || coverVar == 6) {
+ if (isRotor(tRotor)) {
+ long tMax = GT_MetaGenerated_Tool.getToolMaxDamage(tRotor);
+ long tCur = GT_MetaGenerated_Tool.getToolDamage(tRotor);
+ if (coverVar == 5) {
+ needsRepair = (tCur >= tMax * 8 / 10);
+ } else {
+ long mExpectedDamage = Math.round(Math.min(multi.mEUt / multi.damageFactorLow, Math.pow(multi.mEUt, multi.damageFactorHigh)));
+ needsRepair = tCur + mExpectedDamage * 2 >= tMax;
+ }
+ } else {
+ needsRepair = true;
+ }
}
}
}
@@ -61,21 +57,53 @@ public class GT_Cover_NeedMaintainance extends GT_CoverBehavior {
}
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("056", "Emit if 1 Maintenance Needed")); break;
- case 1: GT_Utility.sendChatToPlayer(aPlayer, trans("057", "Emit if 1 Maintenance Needed(inverted)")); break;
- case 2: GT_Utility.sendChatToPlayer(aPlayer, trans("058", "Emit if 2 Maintenance Needed")); break;
- case 3: GT_Utility.sendChatToPlayer(aPlayer, trans("059", "Emit if 2 Maintenance Needed(inverted)")); break;
- case 4: GT_Utility.sendChatToPlayer(aPlayer, trans("060", "Emit if 3 Maintenance Needed")); break;
- case 5: GT_Utility.sendChatToPlayer(aPlayer, trans("061", "Emit if 3 Maintenance Needed(inverted)")); break;
- case 6: GT_Utility.sendChatToPlayer(aPlayer, trans("062", "Emit if 4 Maintenance Needed")); break;
- case 7: GT_Utility.sendChatToPlayer(aPlayer, trans("063", "Emit if 4 Maintenance Needed(inverted)")); break;
- case 8: GT_Utility.sendChatToPlayer(aPlayer, trans("064", "Emit if 5 Maintenance Needed")); break;
- case 9: GT_Utility.sendChatToPlayer(aPlayer, trans("065", "Emit if 5 Maintenance Needed(inverted)")); break;
- case 10: GT_Utility.sendChatToPlayer(aPlayer, trans("066", "Emit if rotor needs maintenance")); break;
- case 11: GT_Utility.sendChatToPlayer(aPlayer, trans("067", "Emit if rotor needs maintenance(inverted)")); break;
+ aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 14;
+ if (aCoverVariable < 0) {
+ aCoverVariable = 13;
+ }
+ switch (aCoverVariable) {
+ case 0:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("056", "Emit if 1 Maintenance Needed"));
+ break;
+ case 1:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("057", "Emit if 1 Maintenance Needed(inverted)"));
+ break;
+ case 2:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("058", "Emit if 2 Maintenance Needed"));
+ break;
+ case 3:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("059", "Emit if 2 Maintenance Needed(inverted)"));
+ break;
+ case 4:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("060", "Emit if 3 Maintenance Needed"));
+ break;
+ case 5:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("061", "Emit if 3 Maintenance Needed(inverted)"));
+ break;
+ case 6:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("062", "Emit if 4 Maintenance Needed"));
+ break;
+ case 7:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("063", "Emit if 4 Maintenance Needed(inverted)"));
+ break;
+ case 8:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("064", "Emit if 5 Maintenance Needed"));
+ break;
+ case 9:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("065", "Emit if 5 Maintenance Needed(inverted)"));
+ break;
+ case 10:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("066", "Emit if rotor needs maintenance low accuracy mod"));
+ break;
+ case 11:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("067", "Emit if rotor needs maintenance low accuracy mod(inverted)"));
+ break;
+ case 12:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("068", "Emit if rotor needs maintenance high accuracy mod"));
+ break;
+ case 13:
+ GT_Utility.sendChatToPlayer(aPlayer, trans("069", "Emit if rotor needs maintenance high accuracy mod(inverted)"));
+ break;
}
return aCoverVariable;
}
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..364229f6f8 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java
@@ -1,9 +1,15 @@
package gregtech.common.covers;
+import gregtech.api.enums.GT_Values;
+import gregtech.api.gui.GT_GUICover;
+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 gregtech.api.gui.widgets.GT_GuiIcon;
+import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
@@ -11,7 +17,7 @@ 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;
public GT_Cover_Pump(int aTransferRate) {
@@ -136,4 +142,124 @@ 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 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) {
+ super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
+ this.side = aSide;
+ this.coverID = aCoverID;
+ this.coverVariable = aCoverVariable;
+
+ 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("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) {
+ 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
+ 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: