diff options
Diffstat (limited to 'src/main/java/gregtech/common')
16 files changed, 1965 insertions, 134 deletions
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 82dffaf7a8..c894857b32 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java @@ -74,66 +74,47 @@ public class GT_Cover_ItemMeter extends GT_CoverBehaviorBase<GT_Cover_ItemMeter. return false; } - @Override - protected ItemMeterData doCoverThingsImpl( - byte aSide, - byte aInputRedstone, - int aCoverID, - ItemMeterData aCoverVariable, - ICoverable aTileEntity, - long aTimer) { - long tMax = 0; - long tUsed = 0; - IMetaTileEntity mte = ((IGregTechTileEntity) aTileEntity).getMetaTileEntity(); + public static byte computeSignalBasedOnItems( + ICoverable tileEntity, boolean inverted, int threshold, int slot, int side) { + long max = 0; + long used = 0; + IMetaTileEntity mte = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); if (mte instanceof GT_MetaTileEntity_DigitalChestBase) { GT_MetaTileEntity_DigitalChestBase dc = (GT_MetaTileEntity_DigitalChestBase) mte; - tMax = dc.getMaxItemCount(); // currently it is limited by int, but there is not much reason for that - ItemStack[] inv = dc.getStoredItemData(); - if (inv != null && inv.length > 1 && inv[1] != null) tUsed = inv[1].stackSize; + max = dc.getMaxItemCount(); + used = dc.getProgresstime(); } else if (GregTech_API.mAE2 && mte instanceof GT_MetaTileEntity_Hatch_OutputBus_ME) { if (((GT_MetaTileEntity_Hatch_OutputBus_ME) mte).isLastOutputFailed()) { - tMax = 64; - tUsed = 64; + max = 64; + used = 64; } } else { - int[] tSlots = aCoverVariable.slot >= 0 - ? new int[] {aCoverVariable.slot} - : aTileEntity.getAccessibleSlotsFromSide(aSide); - - 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(); + int[] slots = slot >= 0 ? new int[] {slot} : tileEntity.getAccessibleSlotsFromSide(side); + + for (int i : slots) { + if (i >= 0 && i < tileEntity.getSizeInventory()) { + max += 64; + ItemStack stack = tileEntity.getStackInSlot(i); + if (stack != null) used += ((long) stack.stackSize << 6) / stack.getMaxStackSize(); } } } - long redstoneSignal; - if (tUsed == 0L) { - // nothing - redstoneSignal = 0; - } else if (tUsed >= tMax) { - // full - redstoneSignal = 15; - } else { - // 1-14 range - redstoneSignal = 1 + (14 * tUsed) / tMax; - } - - if (aCoverVariable.inverted) { - redstoneSignal = 15 - redstoneSignal; - } + return GT_Utility.convertRatioToRedstone(used, max, threshold, inverted); + } - if (aCoverVariable.threshold > 0) { - if (aCoverVariable.inverted && tUsed >= aCoverVariable.threshold) { - redstoneSignal = 0; - } else if (!aCoverVariable.inverted && tUsed < aCoverVariable.threshold) { - redstoneSignal = 0; - } - } + @Override + protected ItemMeterData doCoverThingsImpl( + byte aSide, + byte aInputRedstone, + int aCoverID, + ItemMeterData aCoverVariable, + ICoverable aTileEntity, + long aTimer) { + byte signal = computeSignalBasedOnItems( + aTileEntity, aCoverVariable.inverted, aCoverVariable.threshold, aCoverVariable.slot, aSide); + aTileEntity.setOutputRedstoneSignal(aSide, signal); - aTileEntity.setOutputRedstoneSignal(aSide, (byte) redstoneSignal); return aCoverVariable; } diff --git a/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java index ce795bdd09..48304d3fed 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java @@ -53,6 +53,29 @@ public class GT_Cover_LiquidMeter extends GT_CoverBehaviorBase<GT_Cover_LiquidMe return false; } + public static byte computeSignalBasedOnFluid(ICoverable tileEntity, boolean inverted, int threshold) { + if (tileEntity instanceof IFluidHandler) { + FluidTankInfo[] tanks = ((IFluidHandler) tileEntity).getTankInfo(ForgeDirection.UNKNOWN); + long max = 0; + long used = 0; + if (tanks != null) { + for (FluidTankInfo tank : tanks) { + if (tank != null) { + max += tank.capacity; + FluidStack tLiquid = tank.fluid; + if (tLiquid != null) { + used += tLiquid.amount; + } + } + } + } + + return GT_Utility.convertRatioToRedstone(used, max, threshold, inverted); + } else { + return 0; + } + } + @Override protected LiquidMeterData doCoverThingsImpl( byte aSide, @@ -61,50 +84,9 @@ public class GT_Cover_LiquidMeter extends GT_CoverBehaviorBase<GT_Cover_LiquidMe LiquidMeterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - if ((aTileEntity instanceof IFluidHandler)) { - FluidTankInfo[] tTanks = ((IFluidHandler) aTileEntity).getTankInfo(ForgeDirection.UNKNOWN); - long tMax = 0; - long tUsed = 0; - if (tTanks != null) { - for (FluidTankInfo tTank : tTanks) { - if (tTank != null) { - tMax += tTank.capacity; - FluidStack tLiquid = tTank.fluid; - if (tLiquid != null) { - tUsed += tLiquid.amount; - } - } - } - } - - long redstoneSignal; - if (tUsed == 0L) { - // nothing - redstoneSignal = 0; - } else if (tUsed >= tMax) { - // full - redstoneSignal = 15; - } else { - // 1-14 range - redstoneSignal = 1 + (14 * tUsed) / tMax; - } - - if (aCoverVariable.inverted) { - redstoneSignal = 15 - redstoneSignal; - } - - if (aCoverVariable.threshold > 0) { - if (aCoverVariable.inverted && tUsed >= aCoverVariable.threshold) { - redstoneSignal = 0; - } else if (!aCoverVariable.inverted && tUsed < aCoverVariable.threshold) { - redstoneSignal = 0; - } - } + byte signal = computeSignalBasedOnFluid(aTileEntity, aCoverVariable.inverted, aCoverVariable.threshold); + aTileEntity.setOutputRedstoneSignal(aSide, signal); - aTileEntity.setOutputRedstoneSignal(aSide, (byte) redstoneSignal); - } else { - aTileEntity.setOutputRedstoneSignal(aSide, (byte) 0); - } return aCoverVariable; } 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 369778ef12..2ea5a2c951 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java @@ -32,11 +32,11 @@ public class GT_Cover_NeedMaintainance extends GT_CoverBehavior { super(coverTexture); } - private boolean isRotor(ItemStack aRotor) { - return !(aRotor == null - || !(aRotor.getItem() instanceof GT_MetaGenerated_Tool) - || aRotor.getItemDamage() < 170 - || aRotor.getItemDamage() > 176); + public static boolean isRotor(ItemStack rotor) { + return (rotor != null + && rotor.getItem() instanceof GT_MetaGenerated_Tool + && rotor.getItemDamage() >= 170 + && rotor.getItemDamage() <= 176); } @Override diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java index a942d39b57..a024400094 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -15,6 +15,7 @@ import gregtech.api.util.GT_Utility; import gregtech.api.util.ISerializableObject; import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; import net.minecraftforge.fluids.Fluid; public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { @@ -198,10 +199,13 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { private static final int spaceX = 18; private static final int spaceY = 18; + private static final String guiTexturePath = "gregtech:textures/gui/GuiCoverLong.png"; + private final int textColor = this.getTextColorOrDefault("text", 0xFF555555); public GUI(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - super(aTileEntity, 176, 107, GT_Utility.intToStack(aCoverID)); + super(aTileEntity, 250, 107, GT_Utility.intToStack(aCoverID)); + this.mGUIbackgroundLocation = new ResourceLocation(guiTexturePath); this.side = aSide; this.coverID = aCoverID; this.coverVariable = aCoverVariable; diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java new file mode 100644 index 0000000000..233be511a3 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java @@ -0,0 +1,193 @@ +package gregtech.common.covers.redstone; + +import com.google.common.io.ByteArrayDataInput; +import gregtech.api.gui.widgets.GT_GuiIcon; +import gregtech.api.gui.widgets.GT_GuiIconButton; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.ISerializableObject; +import io.netty.buffer.ByteBuf; +import java.util.UUID; +import javax.annotation.Nonnull; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public abstract class GT_Cover_AdvancedRedstoneReceiverBase + extends GT_Cover_AdvancedWirelessRedstoneBase<GT_Cover_AdvancedRedstoneReceiverBase.ReceiverData> { + + public GT_Cover_AdvancedRedstoneReceiverBase(ITexture coverTexture) { + super(ReceiverData.class, coverTexture); + } + + @Override + public ReceiverData createDataObject() { + return new ReceiverData(); + } + + @Override + public ReceiverData createDataObject(int aLegacyData) { + return createDataObject(); + } + + /** + * GUI Stuff + */ + @Override + public Object getClientGUIImpl( + byte aSide, + int aCoverID, + ReceiverData aCoverVariable, + ICoverable aTileEntity, + EntityPlayer aPlayer, + World aWorld) { + return new ReceiverGUI(aSide, aCoverID, aCoverVariable, aTileEntity); + } + + public enum GateMode { + AND, + NAND, + OR, + NOR, + SINGLE_SOURCE + } + + public static class ReceiverData extends GT_Cover_AdvancedWirelessRedstoneBase.WirelessData { + private GateMode mode; + + public ReceiverData(int frequency, UUID uuid, GateMode mode) { + super(frequency, uuid); + this.mode = mode; + } + + public ReceiverData() { + this(0, null, GateMode.AND); + } + + public GateMode getGateMode() { + return mode; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new ReceiverData(frequency, uuid, mode); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); + tag.setByte("mode", (byte) mode.ordinal()); + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + super.writeToByteBuf(aBuf); + aBuf.writeByte(mode.ordinal()); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + super.loadDataFromNBT(aNBT); + + NBTTagCompound tag = (NBTTagCompound) aNBT; + mode = GateMode.values()[tag.getByte("mode")]; + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + super.readFromPacket(aBuf, aPlayer); + mode = GateMode.values()[aBuf.readByte()]; + + return this; + } + } + + private static class ReceiverGUI extends WirelessGUI<ReceiverData> { + + private static final int gateModeButtonIdStart = 1; + + public ReceiverGUI(byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) { + super(aSide, aCoverID, aCoverVariable, aTileEntity); + + new GT_GuiIconButton( + this, + gateModeButtonIdStart + 0, + startX + spaceX * 0, + startY + spaceY * 2, + GT_GuiIcon.AND_GATE) + .setTooltipText(GT_Utility.trans("006", "AND Gate")); + new GT_GuiIconButton( + this, + gateModeButtonIdStart + 1, + startX + spaceX * 1, + startY + spaceY * 2, + GT_GuiIcon.NAND_GATE) + .setTooltipText(GT_Utility.trans("006", "NAND Gate")); + new GT_GuiIconButton( + this, + gateModeButtonIdStart + 2, + startX + spaceX * 2, + startY + spaceY * 2, + GT_GuiIcon.OR_GATE) + .setTooltipText(GT_Utility.trans("006", "OR Gate")); + new GT_GuiIconButton( + this, + gateModeButtonIdStart + 3, + startX + spaceX * 3, + startY + spaceY * 2, + GT_GuiIcon.NOR_GATE) + .setTooltipText(GT_Utility.trans("006", "NOR Gate")); + new GT_GuiIconButton( + this, + gateModeButtonIdStart + 4, + startX + spaceX * 4, + startY + spaceY * 2, + GT_GuiIcon.ANALOG_MODE) + .setTooltipText( + "ANALOG Mode", "Only use this mode with ONE transmitter in total,", "no logic involved"); + } + + @Override + public void drawExtras(int mouseX, int mouseY, float parTicks) { + super.drawExtras(mouseX, mouseY, parTicks); + this.getFontRenderer() + .drawString( + GT_Utility.trans("601", "Gate Mode"), + startX + spaceX * 5, + 4 + startY + spaceY * 2, + textColor); + } + + @Override + protected void update() { + super.update(); + updateButtons(); + } + + private void updateButtons() { + GuiButton button; + for (int i = gateModeButtonIdStart; i < gateModeButtonIdStart + 5; ++i) { + button = (GuiButton) this.buttonList.get(i); + button.enabled = (button.id - gateModeButtonIdStart) != coverVariable.mode.ordinal(); + } + } + + @Override + public void buttonClicked(GuiButton btn) { + if (btn.id >= gateModeButtonIdStart && btn.enabled) { + coverVariable.mode = GateMode.values()[btn.id - gateModeButtonIdStart]; + } + + super.buttonClicked(btn); + } + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java new file mode 100644 index 0000000000..56b7fadd24 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java @@ -0,0 +1,38 @@ +package gregtech.common.covers.redstone; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; + +public class GT_Cover_AdvancedRedstoneReceiverExternal extends GT_Cover_AdvancedRedstoneReceiverBase { + + public GT_Cover_AdvancedRedstoneReceiverExternal(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public ReceiverData doCoverThingsImpl( + byte aSide, + byte aInputRedstone, + int aCoverID, + ReceiverData aCoverVariable, + ICoverable aTileEntity, + long aTimer) { + aTileEntity.setOutputRedstoneSignal( + aSide, + getSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), aCoverVariable.getGateMode())); + + return aCoverVariable; + } + + @Override + protected boolean isRedstoneSensitiveImpl( + byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity, long aTimer) { + return false; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl( + byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) { + return true; + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java new file mode 100644 index 0000000000..c3537350a6 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java @@ -0,0 +1,40 @@ +package gregtech.common.covers.redstone; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; + +public class GT_Cover_AdvancedRedstoneReceiverInternal extends GT_Cover_AdvancedRedstoneReceiverBase { + + public GT_Cover_AdvancedRedstoneReceiverInternal(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public ReceiverData doCoverThingsImpl( + byte aSide, + byte aInputRedstone, + int aCoverID, + ReceiverData aCoverVariable, + ICoverable aTileEntity, + long aTimer) { + if (aTileEntity instanceof IMachineProgress) { + IMachineProgress machine = ((IMachineProgress) aTileEntity); + if (getRedstoneInput(aSide, aInputRedstone, aCoverID, aCoverVariable, aTileEntity) > 0) { + machine.enableWorking(); + } else { + machine.disableWorking(); + } + + machine.setWorkDataValue(aInputRedstone); + } + + return aCoverVariable; + } + + @Override + protected byte getRedstoneInputImpl( + byte aSide, byte aInputRedstone, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) { + return getSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), aCoverVariable.getGateMode()); + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java new file mode 100644 index 0000000000..07592a00dc --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java @@ -0,0 +1,192 @@ +package gregtech.common.covers.redstone; + +import com.google.common.io.ByteArrayDataInput; +import gregtech.api.gui.widgets.GT_GuiIcon; +import gregtech.api.gui.widgets.GT_GuiIconCheckButton; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.ISerializableObject; +import io.netty.buffer.ByteBuf; +import java.util.Objects; +import java.util.UUID; +import javax.annotation.Nonnull; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public abstract class GT_Cover_AdvancedRedstoneTransmitterBase< + T extends GT_Cover_AdvancedRedstoneTransmitterBase.TransmitterData> + extends GT_Cover_AdvancedWirelessRedstoneBase<T> { + + public GT_Cover_AdvancedRedstoneTransmitterBase(Class<T> typeToken, ITexture coverTexture) { + super(typeToken, coverTexture); + } + + private static void unregisterSignal(byte aSide, TransmitterData aCoverVariable, ICoverable aTileEntity) { + long hash = hashCoverCoords(aTileEntity, aSide); + removeSignalAt(aCoverVariable.uuid, aCoverVariable.frequency, hash); + } + + @Override + public boolean onCoverRemovalImpl( + byte aSide, int aCoverID, TransmitterData aCoverVariable, ICoverable aTileEntity, boolean aForced) { + unregisterSignal(aSide, aCoverVariable, aTileEntity); + return true; + } + + @Override + protected void onBaseTEDestroyedImpl( + byte aSide, int aCoverID, TransmitterData aCoverVariable, ICoverable aTileEntity) { + unregisterSignal(aSide, aCoverVariable, aTileEntity); + } + + @Override + protected T onCoverScrewdriverClickImpl( + byte aSide, + int aCoverID, + T aCoverVariable, + ICoverable aTileEntity, + EntityPlayer aPlayer, + float aX, + float aY, + float aZ) { + aCoverVariable.invert = !aCoverVariable.invert; + GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("055", aCoverVariable.invert ? "Inverted" : "Normal")); + + return aCoverVariable; + } + + @Override + protected void preDataChangedImpl( + byte aSide, int aCoverID, int aNewCoverId, T aCoverVariable, T aNewCoverVariable, ICoverable aTileEntity) { + if (aCoverVariable.frequency != aNewCoverVariable.frequency + || !Objects.equals(aCoverVariable.uuid, aNewCoverVariable.uuid)) { + unregisterSignal(aSide, aCoverVariable, aTileEntity); + } + } + + public static class TransmitterData extends GT_Cover_AdvancedWirelessRedstoneBase.WirelessData { + protected boolean invert; + + public TransmitterData(int frequency, UUID uuid, boolean invert) { + super(frequency, uuid); + this.invert = invert; + } + + public TransmitterData() { + this(0, null, false); + } + + public boolean isInvert() { + return invert; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new TransmitterData(frequency, uuid, invert); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); + tag.setBoolean("invert", invert); + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + super.writeToByteBuf(aBuf); + aBuf.writeBoolean(invert); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + super.loadDataFromNBT(aNBT); + + NBTTagCompound tag = (NBTTagCompound) aNBT; + invert = tag.getBoolean("invert"); + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + super.readFromPacket(aBuf, aPlayer); + invert = aBuf.readBoolean(); + + return this; + } + } + + /** + * GUI Stuff + */ + @Override + public Object getClientGUIImpl( + byte aSide, + int aCoverID, + TransmitterData aCoverVariable, + ICoverable aTileEntity, + EntityPlayer aPlayer, + World aWorld) { + return new TransmitterGUI<>(aSide, aCoverID, aCoverVariable, aTileEntity); + } + + protected class TransmitterGUI<X extends TransmitterData> extends WirelessGUI<X> { + + private final GT_GuiIconCheckButton invertButton; + + private final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); + private final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); + + public TransmitterGUI( + byte aSide, int aCoverID, X aCoverVariable, ICoverable aTileEntity, int frequencyRow, int buttonRow) { + super(aSide, aCoverID, aCoverVariable, aTileEntity, frequencyRow, buttonRow, true); + invertButton = new GT_GuiIconCheckButton( + this, + 1, + startX + spaceX * 9, + startY + spaceY * buttonRow, + GT_GuiIcon.REDSTONE_ON, + GT_GuiIcon.REDSTONE_OFF, + INVERTED, + NORMAL); + } + + public TransmitterGUI(byte aSide, int aCoverID, X aCoverVariable, ICoverable aTileEntity) { + this(aSide, aCoverID, aCoverVariable, aTileEntity, 0, 1); + } + + @Override + public void drawExtras(int mouseX, int mouseY, float parTicks) { + super.drawExtras(mouseX, mouseY, parTicks); + this.getFontRenderer() + .drawString( + coverVariable.invert ? INVERTED : NORMAL, + startX + spaceX * 10, + 4 + startY + spaceY * buttonRow, + textColor); + } + + @Override + protected void update() { + super.update(); + invertButton.setChecked(coverVariable.invert); + } + + @Override + public void buttonClicked(GuiButton btn) { + if (btn == invertButton) { + coverVariable.invert = !coverVariable.invert; + } + + super.buttonClicked(btn); + } + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java new file mode 100644 index 0000000000..aaa526e565 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java @@ -0,0 +1,48 @@ +package gregtech.common.covers.redstone; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; + +public class GT_Cover_AdvancedRedstoneTransmitterExternal + extends GT_Cover_AdvancedRedstoneTransmitterBase<GT_Cover_AdvancedRedstoneTransmitterBase.TransmitterData> { + + public GT_Cover_AdvancedRedstoneTransmitterExternal(ITexture coverTexture) { + super(TransmitterData.class, coverTexture); + } + + @Override + public TransmitterData createDataObject() { + return new TransmitterData(); + } + + @Override + public TransmitterData createDataObject(int aLegacyData) { + return createDataObject(); + } + + @Override + public TransmitterData doCoverThingsImpl( + byte aSide, + byte aInputRedstone, + int aCoverID, + TransmitterData aCoverVariable, + ICoverable aTileEntity, + long aTimer) { + byte outputRedstone = aInputRedstone; + if (aCoverVariable.isInvert()) { + if (outputRedstone > 0) outputRedstone = 0; + else outputRedstone = 15; + } + + long hash = hashCoverCoords(aTileEntity, aSide); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, outputRedstone); + + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoInImpl( + byte aSide, int aCoverID, TransmitterData aCoverVariable, ICoverable aTileEntity) { + return true; + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java new file mode 100644 index 0000000000..1d21b7060f --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java @@ -0,0 +1,53 @@ +package gregtech.common.covers.redstone; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; + +public class GT_Cover_AdvancedRedstoneTransmitterInternal + extends GT_Cover_AdvancedRedstoneTransmitterBase<GT_Cover_AdvancedRedstoneTransmitterBase.TransmitterData> { + + public GT_Cover_AdvancedRedstoneTransmitterInternal(ITexture coverTexture) { + super(TransmitterData.class, coverTexture); + } + + @Override + public TransmitterData createDataObject() { + return new TransmitterData(); + } + + @Override + public TransmitterData createDataObject(int aLegacyData) { + return createDataObject(); + } + + @Override + public TransmitterData doCoverThingsImpl( + byte aSide, + byte aInputRedstone, + int aCoverID, + TransmitterData aCoverVariable, + ICoverable aTileEntity, + long aTimer) { + byte outputRedstone = aTileEntity.getOutputRedstoneSignal(aSide); + if (aCoverVariable.isInvert()) { + if (outputRedstone > 0) outputRedstone = 0; + else outputRedstone = 15; + } + + long hash = hashCoverCoords(aTileEntity, aSide); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, outputRedstone); + return aCoverVariable; + } + + @Override |
