diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java | 9 | ||||
-rw-r--r-- | src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java | 520 | ||||
-rw-r--r-- | src/main/resources/assets/gregtech/textures/gui/GuiButtons.png | bin | 7903 -> 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 Binary files differindex f28d991bd7..ce0652d14a 100644 --- a/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png +++ b/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png |