aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java9
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java520
-rw-r--r--src/main/resources/assets/gregtech/textures/gui/GuiButtons.pngbin7903 -> 3814 bytes
3 files changed, 363 insertions, 166 deletions
diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java
index 92fda43f1f..0d6c2da243 100644
--- a/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java
+++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java
@@ -29,10 +29,11 @@ public enum GT_GuiIcon implements IGuiIcon{
BLOCK_INPUT (0, 32*3, 32*2),
GREEN_ARROW_UP (0, 32*4, 32*2),
GREEN_ARROW_DOWN (0, 32*5, 32*2),
+ CYCLIC (0, 32*6, 32*2),
SLOT_DARKGRAY (1, 176,0,18,18),
SLOT_GRAY (1, 176,18,18,18),
-
+
TAB_NORMAL (2, 0, 0,18,20),
TAB_HIGHLIGHT (2, 18, 0,18,20),
TAB_DISABLED (2, 18*2, 0,18,20),
@@ -48,7 +49,7 @@ public enum GT_GuiIcon implements IGuiIcon{
TAB_INFO_GRAY (2, 220, 0,18,20),
TAB_INFO_BLUE (2,220+18, 0,18,20),
;
-
+
private static final int T_SIZE = 256;
private static ResourceLocation[] TEXTURES = {
@@ -79,7 +80,7 @@ public enum GT_GuiIcon implements IGuiIcon{
public static void render(IGuiIcon icon, double x, double y, double width, double height, double zLevel,
boolean doDraw) {
render(icon, x, y, width, height, zLevel, doDraw, false);
- }
+ }
public static void render(IGuiIcon icon, double x, double y, double width, double height, double zLevel,
boolean doDraw, boolean flipHoritontally) {
@@ -107,7 +108,7 @@ public enum GT_GuiIcon implements IGuiIcon{
/**
* This is intended to enable addon mods to register additional textures. They can then add to this enum using
* EnumHelper.addEnum or by creating your their enum that implements IGuiIcon (still requires adding a texture here)
- *
+ *
* @param location
*/
public static void addTextures(ResourceLocation... location) {
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java
index 6e77eb59f6..17eedb2c95 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java
@@ -1,282 +1,478 @@
package gregtech.common.covers;
+import com.google.common.io.ByteArrayDataInput;
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_GuiIconCheckButton;
+import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
-import gregtech.api.items.GT_MetaBase_Item;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicBatteryBuffer;
-import gregtech.api.net.GT_Packet_TileEntityCover;
-import gregtech.api.util.GT_CoverBehavior;
-import gregtech.api.util.GT_ModHandler;
+import gregtech.api.net.GT_Packet_TileEntityCoverNew;
+import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Utility;
-import ic2.api.item.IElectricItem;
+import gregtech.api.util.ISerializableObject;
+import io.netty.buffer.ByteBuf;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemStack;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.nbt.NBTBase;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.world.World;
import net.minecraftforge.fluids.Fluid;
-public class GT_Cover_EUMeter extends GT_CoverBehavior {
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import java.util.function.Function;
+
+public class GT_Cover_EUMeter extends GT_CoverBehaviorBase<GT_Cover_EUMeter.EUMeterData> {
+
+ public GT_Cover_EUMeter() {
+ super(EUMeterData.class);
+ }
+
@Override
- public boolean isRedstoneSensitive(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
- return false;
+ public EUMeterData createDataObject(int aLegacyData) {
+ return new EUMeterData(aLegacyData, 0);
}
@Override
- public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
- long tScale = 0L;
- if (aCoverVariable < 2) {
- tScale = aTileEntity.getUniversalEnergyCapacity() / 15L;
- if (tScale > 0L) {
- aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte) (int) (aTileEntity.getUniversalEnergyStored() / tScale) : (byte) (int) (15L - aTileEntity.getUniversalEnergyStored() / tScale));
- } else {
- aTileEntity.setOutputRedstoneSignal(aSide, (byte) (aCoverVariable % 2 == 0 ? 0 : 15));
- }
- } else if (aCoverVariable < 4) {
- tScale = aTileEntity.getEUCapacity() / 15L;
- if (tScale > 0L) {
- aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte) (int) (aTileEntity.getStoredEU() / tScale) : (byte) (int) (15L - aTileEntity.getStoredEU() / tScale));
- } else {
- aTileEntity.setOutputRedstoneSignal(aSide, (byte) (aCoverVariable % 2 == 0 ? 0 : 15));
- }
- } else if (aCoverVariable < 6) {
- tScale = aTileEntity.getSteamCapacity() / 15L;
- if (tScale > 0L) {
- aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte) (int) (aTileEntity.getStoredSteam() / tScale) : (byte) (int) (15L - aTileEntity.getStoredSteam() / tScale));
- } else {
- aTileEntity.setOutputRedstoneSignal(aSide, (byte) (aCoverVariable % 2 == 0 ? 0 : 15));
- }
- } else if (aCoverVariable < 8) {
- tScale = aTileEntity.getInputVoltage() * aTileEntity.getInputAmperage() / 15L;
- if (tScale > 0L) {
- aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte) (int) (aTileEntity.getAverageElectricInput() / tScale) : (byte) (int) (15L - aTileEntity.getAverageElectricInput() / tScale));
- } else {
- aTileEntity.setOutputRedstoneSignal(aSide, (byte) (aCoverVariable % 2 == 0 ? 0 : 15));
- }
- } else if (aCoverVariable < 10) {
- tScale = aTileEntity.getOutputVoltage() * aTileEntity.getOutputAmperage() / 15L;
- if (tScale > 0L) {
- aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte) (int) (aTileEntity.getAverageElectricOutput() / tScale) : (byte) (int) (15L - aTileEntity.getAverageElectricOutput() / tScale));
- } else {
- aTileEntity.setOutputRedstoneSignal(aSide, (byte) (aCoverVariable % 2 == 0 ? 0 : 15));
- }
- } else if (aCoverVariable < 12) {
- tScale = aTileEntity.getEUCapacity();
- long tStored = aTileEntity.getStoredEU();
- if (aTileEntity instanceof IGregTechTileEntity) {
- IGregTechTileEntity tTileEntity = (IGregTechTileEntity) aTileEntity;
- IMetaTileEntity mTileEntity = tTileEntity.getMetaTileEntity();
- if (mTileEntity instanceof GT_MetaTileEntity_BasicBatteryBuffer) {
- GT_MetaTileEntity_BasicBatteryBuffer buffer = (GT_MetaTileEntity_BasicBatteryBuffer) mTileEntity;
- if (buffer.mInventory != null) {
- for (ItemStack aStack : buffer.mInventory) {
- if (GT_ModHandler.isElectricItem(aStack)) {
-
- if (aStack.getItem() instanceof GT_MetaBase_Item) {
- Long[] stats = ((GT_MetaBase_Item) aStack.getItem()).getElectricStats(aStack);
- if (stats != null) {
- tScale = tScale + stats[0];
- tStored = tStored + ((GT_MetaBase_Item) aStack.getItem()).getRealCharge(aStack);
- }
- } else if (aStack.getItem() instanceof IElectricItem) {
- tStored = tStored + (long) ic2.api.item.ElectricItem.manager.getCharge(aStack);
- tScale = tScale + (long) ((IElectricItem) aStack.getItem()).getMaxCharge(aStack);
- }
- }
- }
+ public EUMeterData createDataObject() {
+ return new EUMeterData();
+ }
- }
- }
- }
- tScale = tScale / 15L;
- if (tScale > 0L) {
- aTileEntity.setOutputRedstoneSignal(aSide, aCoverVariable % 2 == 0 ? (byte) (int) (tStored / tScale) : (byte) (int) (15L - tStored / tScale));
- } else {
- aTileEntity.setOutputRedstoneSignal(aSide, (byte) (aCoverVariable % 2 == 0 ? 0 : 15));
+ @Override
+ protected EUMeterData doCoverThingsImpl(byte aSide, byte aInputRedstone, int aCoverID, EUMeterData aCoverVariable, ICoverable aTileEntity, long aTimer) {
+ final long stored = aCoverVariable.type.getTileEntityStoredEnergy(aTileEntity);
+ final long capacity = aCoverVariable.type.getTileEntityEnergyCapacity(aTileEntity);
+
+ byte redstoneSignal;
+
+ if (stored == 0L) {
+ // nothing
+ redstoneSignal = 0;
+ } else if (stored >= capacity) {
+ // full
+ redstoneSignal = 15;
+ } else {
+ // 1-14 range
+ redstoneSignal = (byte) (1 + (14 * stored) / capacity);
+ }
+
+ if (aCoverVariable.inverted) {
+ redstoneSignal = (byte) (15 - redstoneSignal);
+ }
+
+ if (aCoverVariable.threshold > 0) {
+ if (aCoverVariable.inverted && stored >= aCoverVariable.threshold) {
+ redstoneSignal = 0;
+ } else if (!aCoverVariable.inverted && stored < aCoverVariable.threshold) {
+ redstoneSignal = 0;
}
}
+
+ aTileEntity.setOutputRedstoneSignal(aSide, redstoneSignal);
return aCoverVariable;
}
@Override
- 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) {
+ protected EUMeterData onCoverScrewdriverClickImpl(byte aSide, int aCoverID, EUMeterData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ int num = (aCoverVariable.getNum() + (aPlayer.isSneaking() ? -1 : 1) + EnergyType.values().length * 2) % (EnergyType.values().length * 2);
+ switch (num) {
case 0:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("031", "Normal Universal Storage")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("031", "Normal Universal Storage"));
+ break;
case 1:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("032", "Inverted Universal Storage")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("032", "Inverted Universal Storage"));
+ break;
case 2:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("033", "Normal Electricity Storage")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("033", "Normal Electricity Storage"));
+ break;
case 3:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("034", "Inverted Electricity Storage")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("034", "Inverted Electricity Storage"));
+ break;
case 4:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("035", "Normal Steam Storage")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("035", "Normal Steam Storage"));
+ break;
case 5:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("036", "Inverted Steam Storage")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("036", "Inverted Steam Storage"));
+ break;
case 6:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("037", "Normal Average Electric Input")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("037", "Normal Average Electric Input"));
+ break;
case 7:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("038", "Inverted Average Electric Input")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("038", "Inverted Average Electric Input"));
+ break;
case 8:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("039", "Normal Average Electric Output")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("039", "Normal Average Electric Output"));
+ break;
case 9:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("040", "Inverted Average Electric Output")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("040", "Inverted Average Electric Output"));
+ break;
case 10:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("041", "Normal Electricity Storage(Including Batteries)")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("041", "Normal Electricity Storage(Including Batteries)"));
+ break;
case 11:
- GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("042", "Inverted Electricity Storage(Including Batteries)")); break;
+ GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("042", "Inverted Electricity Storage(Including Batteries)"));
+ break;
}
+ aCoverVariable.setNum(num);
return aCoverVariable;
}
+ //region Static Result Methods
+ @Override
+ protected boolean isRedstoneSensitiveImpl(byte aSide, int aCoverID, EUMeterData aCoverVariable, ICoverable aTileEntity, long aTimer) {
+ return false;
+ }
+
@Override
- public boolean letsEnergyIn(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ protected boolean letsEnergyInImpl(byte aSide, int aCoverID, EUMeterData aCoverVariable, ICoverable aTileEntity) {
return true;
}
@Override
- public boolean letsEnergyOut(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ protected boolean letsEnergyOutImpl(byte aSide, int aCoverID, EUMeterData aCoverVariable, ICoverable aTileEntity) {
return true;
}
@Override
- public boolean letsFluidIn(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ protected boolean letsFluidInImpl(byte aSide, int aCoverID, EUMeterData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
return true;
}
@Override
- public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
+ protected boolean letsFluidOutImpl(byte aSide, int aCoverID, EUMeterData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
return true;
}
@Override
- public boolean letsItemsIn(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ protected boolean letsItemsInImpl(byte aSide, int aCoverID, EUMeterData aCoverVariable, int aSlot, ICoverable aTileEntity) {
return true;
}
@Override
- public boolean letsItemsOut(byte aSide, int aCoverID, int aCoverVariable, int aSlot, ICoverable aTileEntity) {
+ protected boolean letsItemsOutImpl(byte aSide, int aCoverID, EUMeterData aCoverVariable, int aSlot, ICoverable aTileEntity) {
return true;
}
@Override
- public boolean manipulatesSidedRedstoneOutput(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ protected boolean manipulatesSidedRedstoneOutputImpl(byte aSide, int aCoverID, EUMeterData aCoverVariable, ICoverable aTileEntity) {
return true;
}
@Override
- public int getTickRate(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ protected int getTickRateImpl(byte aSide, int aCoverID, EUMeterData aCoverVariable, ICoverable aTileEntity) {
return 20;
}
+ //endregion
- /**
- * GUI Stuff
- */
-
+ //region GUI Stuff
@Override
public boolean hasCoverGUI() {
return true;
}
@Override
- public Object getClientGUI(byte aSide, int aCoverID, int coverData, ICoverable aTileEntity) {
+ public Object getClientGUIImpl(byte aSide, int aCoverID, EUMeterData coverData, ICoverable aTileEntity, EntityPlayer aPlayer, World aWorld) {
return new GUI(aSide, aCoverID, coverData, aTileEntity);
}
+ //endregion
+
+ public static class EUMeterData implements ISerializableObject {
+ private EnergyType type;
+ private boolean inverted;
+ /**
+ * The special value {@code 0} means threshold check is disabled.
+ */
+ private long threshold;
+
+
+ public EUMeterData() {
+ type = EnergyType.UNIVERSAL_STORAGE;
+ inverted = false;
+ threshold = 0;
+ }
+
+ public EUMeterData(EnergyType type, boolean inverted, long threshold) {
+ this.type = type;
+ this.inverted = inverted;
+ this.threshold = threshold;
+ }
+
+ public EUMeterData(int num, long threshold) {
+ this();
+ this.setNum(num);
+ this.threshold = threshold;
+ }
+
+ public int getNum() {
+ return type.ordinal() * 2 + (inverted ? 1 : 0);
+ }
+
+ public void setNum(int num) {
+ type = EnergyType.getEnergyType(num / 2);
+ inverted = num % 2 == 1;
+ }
+
+ @Nonnull
+ @Override
+ public ISerializableObject copy() {
+ return new EUMeterData(type, inverted, threshold);
+ }
+
+ @Nonnull
+ @Override
+ public NBTBase saveDataToNBT() {
+ NBTTagCompound tag = new NBTTagCompound();
+ tag.setInteger("typeOrdinal", type.ordinal());
+ tag.setBoolean("inverted", inverted);
+ tag.setLong("threshold", threshold);
+ return tag;
+ }
+
+ @Override
+ public void writeToByteBuf(ByteBuf aBuf) {
+ aBuf.writeInt(type.ordinal());
+ aBuf.writeBoolean(inverted);
+ aBuf.writeLong(threshold);
+ }
+
+ @Override
+ public void loadDataFromNBT(NBTBase aNBT) {
+ NBTTagCompound tag = (NBTTagCompound) aNBT;
+ int typeOrdinal = tag.getInteger("typeOrdinal");
+ type = EnergyType.getEnergyType(typeOrdinal);
+ inverted = tag.getBoolean("inverted");
+ threshold = tag.getLong("threshold");
+ }
+
+ @Nonnull
+ @Override
+ public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) {
+ int typeOrdinal = aBuf.readInt();
+ type = EnergyType.getEnergyType(typeOrdinal);
+ inverted = aBuf.readBoolean();
+ threshold = aBuf.readLong();
+ return this;
+ }
+ }
+
+ private enum EnergyType {
+ UNIVERSAL_STORAGE(
+ GT_Utility.trans("301", "Universal"),
+ GT_Utility.trans("256", "Universal Storage"),
+ ICoverable::getUniversalEnergyStored,
+ ICoverable::getUniversalEnergyCapacity
+ ),
+ ELECTRICITY_STORAGE(
+ GT_Utility.trans("302", "Int. EU"),
+ GT_Utility.trans("257", "Electricity Storage"),
+ ICoverable::getStoredEU,
+ ICoverable::getEUCapacity
+ ),
+ STEAM_STORAGE(
+ GT_Utility.trans("303", "Steam"),
+ GT_Utility.trans("258", "Steam Storage"),
+ ICoverable::getStoredSteam,
+ ICoverable::getSteamCapacity
+ ),
+ AVERAGE_ELECTRIC_INPUT(
+ GT_Utility.trans("304", "Avg. Input"),
+ GT_Utility.trans("259", "Average Electric Input"),
+ ICoverable::getAverageElectricInput,
+ (te) -> te.getInputVoltage() * te.getInputAmperage()
+ ),
+ AVERAGE_ELECTRIC_OUTPUT(
+ GT_Utility.trans("305", "Avg. Output"),
+ GT_Utility.trans("260", "Average Electric Output"),
+ ICoverable::getAverageElectricOutput,
+ (te) -> te.getOutputVoltage() * te.getOutputAmperage()
+ ),
+ ELECTRICITY_STORAGE_INCLUDING_BATTERIES(
+ GT_Utility.trans("306", "EU stored"),
+ GT_Utility.trans("261", "Electricity Storage(Including Batteries)"),
+ (te) -> {
+ if (te instanceof IGregTechTileEntity) {
+ IMetaTileEntity mte = ((IGregTechTileEntity) te).getMetaTileEntity();
+ if (mte instanceof GT_MetaTileEntity_BasicBatteryBuffer) {
+ GT_MetaTileEntity_BasicBatteryBuffer buffer = (GT_MetaTileEntity_BasicBatteryBuffer) mte;
+ return buffer.getStoredEnergy()[0];
+ }
+ }
+ return te.getStoredEU();
+ },
+ (te) -> {
+ if (te instanceof IGregTechTileEntity) {
+ IMetaTileEntity mte = ((IGregTechTileEntity) te).getMetaTileEntity();
+ if (mte instanceof GT_MetaTileEntity_BasicBatteryBuffer) {
+ GT_MetaTileEntity_BasicBatteryBuffer buffer = (GT_MetaTileEntity_BasicBatteryBuffer) mte;
+ return buffer.getStoredEnergy()[1];
+ }
+ }
+ return te.getEUCapacity();
+ }
+ );
+
+ private final String title;
+ private final String tooltip;
+ private final Function<ICoverable, Long> getTileEntityStoredEnergyFunc;
+ private final Function<ICoverable, Long> getTileEntityEnergyCapacityFunc;
+
+ EnergyType(String title, String tooltip, Function<ICoverable, Long> getTileEntityStoredEnergyFunc, Function<ICoverable, Long> getTileEntityEnergyCapacityFunc) {
+ this.title = title;
+ this.tooltip = tooltip;
+ this.getTileEntityStoredEnergyFunc = getTileEntityStoredEnergyFunc;
+ this.getTileEntityEnergyCapacityFunc = getTileEntityEnergyCapacityFunc;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public String getTooltip() {
+ return tooltip;
+ }
+
+ public long getTileEntityStoredEnergy(ICoverable aTileEntity) {
+ return getTileEntityStoredEnergyFunc.apply(aTileEntity);
+ }
+
+ public long getTileEntityEnergyCapacity(ICoverable aTileEntity) {
+ return getTileEntityEnergyCapacityFunc.apply(aTileEntity);
+ }
+
+ public EnergyType getNext() {
+ return values()[(ordinal() + 1) % values().length];
+ }
+
+ public static EnergyType getEnergyType(int ordinal) {
+ if (ordinal < 0 || values().length <= ordinal) {
+ ordinal = 0;
+ }
+ return values()[ordinal];
+ }
+ }
private class GUI extends GT_GUICover {
private final byte side;
private final int coverID;
- private int coverVariable;
+ private final GT_GuiIconButton typeButton;
+ private final GT_GuiIconCheckButton invertedButton;
+ private final GT_GuiIntegerTextBox thresholdSlot;
+ private final EUMeterData coverVariable;
private static final int startX = 10;
private static final int startY = 25;
private static final int spaceX = 18;
private static final int spaceY = 18;
- public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ private final String INVERTED = GT_Utility.trans("INVERTED", "Inverted");
+ private final String NORMAL = GT_Utility.trans("NORMAL", "Normal");
+
+ public GUI(byte aSide, int aCoverID, EUMeterData aCoverVariable, ICoverable aTileEntity) {
super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID));
this.side = aSide;
this.coverID = aCoverID;
this.coverVariable = aCoverVariable;
- GuiButton b;
- b = new GT_GuiIconCheckButton(this, 0, startX + spaceX*0, startY+spaceY*1, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(GT_Utility.trans("256", "Universal Storage"));
- b = new GT_GuiIconCheckButton(this, 1, startX + spaceX*0, startY+spaceY*0, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(GT_Utility.trans("257", "Electricity Storage"));
- b = new GT_GuiIconCheckButton(this, 2, startX + spaceX*0, startY+spaceY*2, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(GT_Utility.trans("258", "Steam Storage"));
- b = new GT_GuiIconCheckButton(this, 3, startX + spaceX*4, startY+spaceY*1, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(GT_Utility.trans("259", "Average Electric Input"));
- b = new GT_GuiIconCheckButton(this, 4, startX + spaceX*4, startY+spaceY*2, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(GT_Utility.trans("260", "Average Electric Output"));
- b = new GT_GuiIconCheckButton(this, 5, startX + spaceX*4, startY+spaceY*0, GT_GuiIcon.CHECKMARK, null)
- .setTooltipText(GT_Utility.trans("261", "Electricity Storage(Including Batteries)"));
- b = new GT_GuiIconCheckButton(this, 6, startX + spaceX*0, startY+spaceY*3+4, GT_GuiIcon.REDSTONE_ON, GT_GuiIcon.REDSTONE_OFF);
+ typeButton = new GT_GuiIconButton(this, 0, startX, startY, GT_GuiIcon.CYCLIC);
+ invertedButton = new GT_GuiIconCheckButton(this, 2, startX, startY + spaceY, GT_GuiIcon.REDSTONE_ON, GT_GuiIcon.REDSTONE_OFF, INVERTED, NORMAL);
+ thresholdSlot = new GT_GuiIntegerTextBox(this, 4, startX, startY + spaceY * 2 + 2, spaceX * 8, 12);
}
@Override
public void drawExtras(int mouseX, int mouseY, float parTicks) {
super.drawExtras(mouseX, mouseY, parTicks);
- String s2;
- if ((coverVariable & 0x1) > 0)
- s2 = GT_Utility.trans("INVERTED", "Inverted");
- else
- s2 = GT_Utility.trans("NORMAL", "Normal");
- this.fontRendererObj.drawString(s2, startX + spaceX*1, 8+startY+spaceY*3, 0xFF555555);
-
- this.fontRendererObj.drawString(GT_Utility.trans("301", "Universal"),
- startX + spaceX*1, 4+startY+spaceY*1, 0xFF555555);
- this.fontRendererObj.drawString(GT_Utility.trans("302", "Int. EU"),
- startX + spaceX*1, 4+startY+spaceY*0, 0xFF555555);
- this.fontRendererObj.drawString(GT_Utility.trans("303", "Steam"),
- startX + spaceX*1, 4+startY+spaceY*2, 0xFF555555);
- this.fontRendererObj.drawString(GT_Utility.trans("304", "Avg. Input"),
- startX + spaceX*5, 4+startY+spaceY*1, 0xFF555555);
- this.fontRendererObj.drawString(GT_Utility.trans("305", "Avg. Output"),
- startX + spaceX*5, 4+startY+spaceY*2, 0xFF555555);
- this.fontRendererObj.drawString(GT_Utility.trans("306", "EU stored"),
- startX + spaceX*5, 4+startY+spaceY*0, 0xFF555555);
+ this.getFontRenderer().drawString(coverVariable.type.getTitle(), startX + spaceX, 4 + startY, 0xFF555555);
+ this.getFontRenderer().drawString(coverVariable.inverted ? INVERTED : NORMAL, startX + spaceX, 4 + startY + spaceY, 0xFF555555);
+ this.getFontRenderer().drawString(GT_Utility.trans("222.1", "Energy threshold"), startX, startY + spaceY * 3 + 4, 0xFF555555);
}
+
@Override
protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) {
- updateButtons();
+ update();
+ thresholdSlot.setFocused(true);
}
@Override
- public void buttonClicked(GuiButton btn){
- if (btn.id == 6 || !isEnabled(btn.id)){
- coverVariable = getNewCoverVariable(btn.id, ((GT_GuiIconCheckButton) btn).isChecked());
- GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile));
+ public void buttonClicked(GuiButton btn) {
+ if (btn == typeButton) {
+ coverVariable.type = coverVariable.type.getNext();
+ }
+ if (btn == invertedButton) {
+ coverVariable.inverted = !coverVariable.inverted;
}
- updateButtons();
+ GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
+ update();
}
- private void updateButtons(){
- for (Object o : buttonList)
- ((GT_GuiIconCheckButton) o).setChecked(isEnabled(((GT_GuiIconCheckButton) o).id));
+ @Override
+ public void onMouseWheel(int x, int y, int delta) {
+ if (thresholdSlot.isFocused()) {
+ long val = parseTextBox(thresholdSlot);
+
+ long step = 1000;
+ if (isShiftKeyDown()) {
+ step *= 100;
+ }
+ if (isCtrlKeyDown()) {
+ step /= 10;
+ }
+
+ try {
+ val = Math.addExact(val, delta * step);
+ } catch (ArithmeticException e) {
+ val = Long.MAX_VALUE;
+ }
+ val = Math.max(0, val);
+ thresholdSlot.setText(Long.toString(val));
+ }
}
- private int getNewCoverVariable(int id, boolean checked) {
- if (id == 6) {
- if (checked)
- return coverVariable & ~0x1;
- else
- return coverVariable | 0x1;
+ @Override
+ public void applyTextBox(GT_GuiIntegerTextBox box) {
+ if (box == thresholdSlot) {
+ coverVariable.threshold = parseTextBox(thresholdSlot);
+ }
+
+ GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
+ update();
+ }
+
+ @Override
+ public void resetTextBox(GT_GuiIntegerTextBox box) {
+ if (box == thresholdSlot) {
+ thresholdSlot.setText(Long.toString(coverVariable.threshold));
}
- return (coverVariable & 0x1) | (id << 1) ;
}
- private boolean isEnabled(int id) {
- if (id == 6)
- return (coverVariable & 0x1) > 0;
- return (coverVariable >> 1) == id;
+ private void update() {
+ invertedButton.setChecked(coverVariable.inverted);
+ typeButton.setTooltipText(coverVariable.type.getTooltip());
+ resetTextBox(thresholdSlot);
+ }
+
+
+ private long parseTextBox(GT_GuiIntegerTextBox box) {
+ if (box == thresholdSlot) {
+ String text = box.getText();
+ if (text == null) {
+ return 0;
+ }
+ long val;
+ try {
+ val = Long.parseLong(text.trim());
+ } catch (NumberFormatException e) {
+ return 0;
+ }
+ return Math.max(0, val);
+ }
+ throw new UnsupportedOperationException("Unknown text box: " + box);
}
}
}
diff --git a/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png b/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png
index f28d991bd7..ce0652d14a 100644
--- a/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png
+++ b/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png
Binary files differ