diff options
Diffstat (limited to 'src')
16 files changed, 892 insertions, 1 deletions
diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java index 7a52021eea..fefbe06518 100644 --- a/src/main/java/gregtech/api/GregTech_API.java +++ b/src/main/java/gregtech/api/GregTech_API.java @@ -53,6 +53,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.TreeMap; +import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiFunction; import java.util.function.IntFunction; @@ -173,6 +174,29 @@ public class GregTech_API { */ public static final Map<Integer, Byte> sWirelessRedstone = new ConcurrentHashMap<>(); /** + * The Advanced Redstone Frequencies + */ + public static final Map<String, Map<Integer, Byte>> sAdvancedWirelessRedstone = new ConcurrentHashMap<>(); + + public static Byte getAdvancedRedstone(UUID uuid, int frequency) { + Map<Integer, Byte> frequencies = GregTech_API.sAdvancedWirelessRedstone.get(String.valueOf(uuid)); + if (frequencies == null) return 0; + return frequencies.getOrDefault(frequency, (byte) 0); + } + + public static void removeAdvancedRedstone(UUID uuid, int frequency) { + Map<Integer, Byte> frequencies = GregTech_API.sAdvancedWirelessRedstone.get(String.valueOf(uuid)); + if (frequencies == null) return; + frequencies.remove(frequency); + } + + public static void setAdvancedRedstone(UUID uuid, int frequency, byte value) { + String key = String.valueOf(uuid); + Map<Integer, Byte> frequencies = GregTech_API.sAdvancedWirelessRedstone.computeIfAbsent(key, k -> new ConcurrentHashMap<>()); + frequencies.put(frequency, value); + } + + /** * The IDSU Frequencies */ public static final Map<Integer, Integer> sIDSUList = new ConcurrentHashMap<>(); diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index 279233d101..b8b457ad16 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -1529,6 +1529,11 @@ public enum ItemList implements IItemContainer { Hatch_Output_Bus_ME, NULL, + Cover_AdvancedRedstoneTransmitterExternal, + Cover_AdvancedRedstoneTransmitterInternal, + Cover_AdvancedRedstoneReceiverExternal, + Cover_AdvancedRedstoneReceiverInternal, + Cover_RedstoneTransmitterExternal, Cover_RedstoneTransmitterInternal, Cover_RedstoneReceiverExternal, diff --git a/src/main/java/gregtech/api/gui/GT_GUIScreen.java b/src/main/java/gregtech/api/gui/GT_GUIScreen.java index 281be1e55d..d39a6b738e 100644 --- a/src/main/java/gregtech/api/gui/GT_GUIScreen.java +++ b/src/main/java/gregtech/api/gui/GT_GUIScreen.java @@ -28,8 +28,8 @@ public abstract class GT_GUIScreen extends GuiScreen implements GT_IToolTipRende protected int gui_height = 107; protected int guiTop, guiLeft; protected boolean drawButtons = true; + protected ResourceLocation mGUIbackgroundLocation; - private ResourceLocation mGUIbackgroundLocation; private GuiButton selectedButton; private GT_GUIColorOverride colorOverride; private final int textColor; 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..ccd0ea0b8f --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java @@ -0,0 +1,319 @@ +package gregtech.common.covers.redstone; + +import com.google.common.io.ByteArrayDataInput; +import gregtech.api.GregTech_API; +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_GuiIconCheckButton; +import gregtech.api.gui.widgets.GT_GuiIntegerTextBox; +import gregtech.api.interfaces.IGuiScreen; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.net.GT_Packet_TileEntityCoverNew; +import gregtech.api.util.GT_CoverBehaviorBase; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.ISerializableObject; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.Minecraft; +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.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fluids.Fluid; + +import javax.annotation.Nonnull; +import java.util.UUID; + +public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<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(); + } + + @Override + public boolean onCoverRemovalImpl(byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity, + boolean aForced) { + GregTech_API.removeAdvancedRedstone(aCoverVariable.uuid, aCoverVariable.frequency); + return true; + } + + @Override + public boolean letsEnergyInImpl(byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOutImpl(byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidInImpl(byte aSide, int aCoverID, ReceiverData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOutImpl(byte aSide, int aCoverID, ReceiverData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsInImpl(byte aSide, int aCoverID, ReceiverData aCoverVariable, int aSlot, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOutImpl(byte aSide, int aCoverID, ReceiverData aCoverVariable, int aSlot, ICoverable aTileEntity) { + return true; + } + + @Override + public String getDescriptionImpl(byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) { + return GT_Utility.trans("081", "Frequency: ") + aCoverVariable.frequency + ", Transmission: " + (aCoverVariable.uuid == null ? "Public" : "Private"); + } + + @Override + public int getTickRateImpl(byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) { + return 5; + } + + /** + * GUI Stuff + */ + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public Object getClientGUIImpl(byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, World aWorld) { + return new GT_Cover_AdvancedRedstoneReceiverBase.GUI(aSide, aCoverID, aCoverVariable, aTileEntity); + } + + public static class ReceiverData implements ISerializableObject { + private int frequency; + + /** + * If UUID is set to null, the cover frequency is public, rather than private + **/ + private UUID uuid; + + public ReceiverData(int frequency, UUID uuid) { + this.frequency = frequency; + this.uuid = uuid; + } + + public ReceiverData() { + this(0, null); + } + + public UUID getUuid() { + return uuid; + } + + public int getFrequency() { + return frequency; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new ReceiverData(frequency, uuid); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("frequency", frequency); + if (uuid != null) { + tag.setString("uuid", uuid.toString()); + } + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeInt(frequency); + aBuf.writeBoolean(uuid != null); + if (uuid != null) { + aBuf.writeLong(uuid.getLeastSignificantBits()); + aBuf.writeLong(uuid.getMostSignificantBits()); + } + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + NBTTagCompound tag = (NBTTagCompound) aNBT; + frequency = tag.getInteger("frequency"); + if (tag.hasKey("uuid")) { + uuid = UUID.fromString(tag.getString("uuid")); + } + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + frequency = aBuf.readInt(); + if (aBuf.readBoolean()) { + uuid = new UUID(aBuf.readLong(), aBuf.readLong()); + } + + return this; + } + } + + private class GUI extends GT_GUICover { + + private final byte side; + private final int coverID; + private final GT_GuiIntegerTextBox frequencyBox; + private final GT_GuiIconCheckButton privateButton; + private final ReceiverData 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; + + private static final String guiTexturePath = "gregtech:textures/gui/GuiCoverLong.png"; + + private final int textColor = this.getTextColorOrDefault("text", 0xFF555555); + + public GUI(byte aSide, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) { + super(aTileEntity, 250, 107, GT_Utility.intToStack(aCoverID)); + this.mGUIbackgroundLocation = new ResourceLocation(guiTexturePath); + this.side = aSide; + this.coverID = aCoverID; + this.coverVariable = aCoverVariable; + + frequencyBox = new GT_Cover_AdvancedRedstoneReceiverBase.GUI.GT_GuiShortTextBox(this, 2, startX, startY + 2, spaceX * 5 - 3, 12); + privateButton = new GT_GuiIconCheckButton(this, 0, startX, startY + spaceY * 1, GT_GuiIcon.CHECKMARK, null); + } + + @Override + public void drawExtras(int mouseX, int mouseY, float parTicks) { + super.drawExtras(mouseX, mouseY, parTicks); + this.getFontRenderer().drawString( + GT_Utility.trans("246", "Frequency"), + startX + spaceX * 5, + 4 + startY, + textColor); + this.getFontRenderer().drawString( + GT_Utility.trans("601", "Use Private Frequency"), + startX + spaceX, + startY + spaceY * 1 + 4, + textColor); + } + + @Override + protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) { + update(); + frequencyBox.setFocused(true); + } + + @Override + public void onMouseWheel(int x, int y, int delta) { + if (frequencyBox.isFocused()) { + long step = Math.max(1, Math.abs(delta / 120)); + step = (isShiftKeyDown() ? 1000 : isCtrlKeyDown() ? 50 : 1) * (delta > 0 ? step : -step); + + long frequency = parseTextBox(frequencyBox) + step; + if (frequency > Integer.MAX_VALUE) frequency = Integer.MAX_VALUE; + else if (frequency < 0) frequency = 0; + + frequencyBox.setText(Long.toString(frequency)); + } + } + + @Override + public void applyTextBox(GT_GuiIntegerTextBox box) { + if (box == frequencyBox) { + coverVariable.frequency = parseTextBox(frequencyBox); + } + + GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile)); + update(); + } + + @Override + public void resetTextBox(GT_GuiIntegerTextBox box) { + if (box == frequencyBox) { + frequencyBox.setText(Integer.toString(coverVariable.frequency)); + } + } + + private void update() { + privateButton.setChecked(coverVariable.uuid != null); + resetTextBox(frequencyBox); + } + + @Override + public void buttonClicked(GuiButton btn) { + if (btn == privateButton) { + coverVariable.uuid = coverVariable.uuid == null ? Minecraft.getMinecraft().thePlayer.getUniqueID() : null; + } + + GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile)); + update(); + } + + private int parseTextBox(GT_GuiIntegerTextBox box) { + if (box == frequencyBox) { + String text = box.getText(); + if (text == null) { + return 0; + } + + long frequency; + try { + frequency = Long.parseLong(text.trim()); + } catch (NumberFormatException e) { + return 0; + } + + if (frequency > Integer.MAX_VALUE) frequency = Integer.MAX_VALUE; + else if (frequency < 0) frequency = 0; + + return (int) frequency; + } + + throw new UnsupportedOperationException("Unknown text box: " + box); + } + + private class GT_GuiShortTextBox extends GT_GuiIntegerTextBox { + + public GT_GuiShortTextBox(IGuiScreen gui, int id, int x, int y, int width, int height) { + super(gui, id, x, y, width, height); + } + + @Override + public boolean textboxKeyTyped(char c, int key) { + if (!super.textboxKeyTyped(c, key)) return false; + + String text = getText().trim(); + if (text.length() > 0) { + setText(String.valueOf(parseTextBox(this))); + } + + return true; + } + } + } +} 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..bedb878295 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java @@ -0,0 +1,30 @@ +package gregtech.common.covers.redstone; + +import gregtech.api.GregTech_API; +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, + GregTech_API.getAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency())); + + 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..7a4d498059 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java @@ -0,0 +1,34 @@ +package gregtech.common.covers.redstone; + +import gregtech.api.GregTech_API; +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 GregTech_API.getAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency()); + } +} 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..a71cea094a --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java @@ -0,0 +1,342 @@ +package gregtech.common.covers.redstone; + +import com.google.common.io.ByteArrayDataInput; +import gregtech.api.GregTech_API; +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_GuiIconCheckButton; +import gregtech.api.gui.widgets.GT_GuiIntegerTextBox; +import gregtech.api.interfaces.IGuiScreen; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.net.GT_Packet_TileEntityCoverNew; +import gregtech.api.util.GT_CoverBehaviorBase; +import gregtech.api.util.GT_Utility; +import gregtech.api.util.ISerializableObject; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.Minecraft; +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.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.fluids.Fluid; + +import javax.annotation.Nonnull; +import java.util.UUID; + +public class GT_Cover_AdvancedRedstoneTransmitterBase extends GT_CoverBehaviorBase<GT_Cover_AdvancedRedstoneTransmitterBase.TransmitterData> { + + public GT_Cover_AdvancedRedstoneTransmitterBase(ITexture coverTexture) { + super(TransmitterData.class, coverTexture); + } + + @Override + public TransmitterData createDataObject() { + return new TransmitterData(); + } + + @Override + public TransmitterData createDataObject(int aLegacyData) { + return createDataObject(); + } + + @Override + public boolean onCoverRemovalImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, ICoverable aTileEntity, + boolean aForced) { + GregTech_API.removeAdvancedRedstone(aCoverVariable.uuid, aCoverVariable.frequency); + return true; + } + + @Override + public boolean letsEnergyInImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOutImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidInImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOutImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsInImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, int aSlot, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOutImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, int aSlot, ICoverable aTileEntity) { + return true; + } + + @Override + public String getDescriptionImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, ICoverable aTileEntity) { + return GT_Utility.trans("081", "Frequency: ") + aCoverVariable.frequency + ", Transmission: " + (aCoverVariable.uuid == null ? "Public" : "Private"); + } + + @Override + public int getTickRateImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, ICoverable aTileEntity) { + return 5; + } + + /** + * GUI Stuff + */ + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public Object getClientGUIImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, World aWorld) { + return new GT_Cover_AdvancedRedstoneTransmitterBase.GUI(aSide, aCoverID, aCoverVariable, aTileEntity); + } + + public static class TransmitterData implements ISerializableObject { + private int frequency; + + /** + * If UUID is set to null, the cover frequency is public, rather than private + **/ + private UUID uuid; + private boolean invert; + + public TransmitterData(int frequency, UUID uuid, boolean invert) { + this.frequency = frequency; + this.uuid = uuid; + this.invert = invert; + } + + public TransmitterData() { + this(0, null, false); + } + + public UUID getUuid() { + return uuid; + } + + public int getFrequency() { + return frequency; + } + + public boolean isInvert() { + return invert; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new TransmitterData(frequency, uuid, invert); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("frequency", frequency); + if (uuid != null) { + tag.setString("uuid", uuid.toString()); + } + tag.setBoolean("invert", invert); + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeInt(frequency); + aBuf.writeBoolean(uuid != null); + if (uuid != null) { + aBuf.writeLong(uuid.getLeastSignificantBits()); + aBuf.writeLong(uuid.getMostSignificantBits()); + } + aBuf.writeBoolean(invert); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + NBTTagCompound tag = (NBTTagCompound) aNBT; + frequency = tag.getInteger("frequency"); + if (tag.hasKey("uuid")) { + uuid = UUID.fromString(tag.getString("uuid")); + } + invert = tag.getBoolean("invert"); + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + frequency = aBuf.readInt(); + if (aBuf.readBoolean()) { + uuid = new UUID(aBuf.readLong(), aBuf.readLong()); + } + invert = aBuf.readBoolean(); + + return this; + } + } + + private class GUI extends GT_GUICover { + + private final byte side; + private final int coverID; + private final GT_GuiIntegerTextBox frequencyBox; + private final GT_GuiIconCheckButton privateButton; + private final GT_GuiIconCheckButton invertButton; + private final TransmitterData 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; + + private final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); + private final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); + + private static final String guiTexturePath = "gregtech:textures/gui/GuiCoverLong.png"; + + private final int textColor = this.getTextColorOrDefault("text", 0xFF555555); + + public GUI(byte aSide, int aCoverID, TransmitterData aCoverVariable, ICoverable aTileEntity) { + super(aTileEntity, 250, 107, GT_Utility.intToStack(aCoverID)); + this.mGUIbackgroundLocation = new ResourceLocation(guiTexturePath); + this.side = aSide; + this.coverID = aCoverID; + this.coverVariable = aCoverVariable; + + privateButton = new GT_GuiIconCheckButton(this, 0, startX, startY + spaceY * 1, GT_GuiIcon.CHECKMARK, null); + invertButton = new GT_GuiIconCheckButton(this, 0, startX, startY + spaceY * 2, GT_GuiIcon.REDSTONE_ON, GT_GuiIcon.REDSTONE_OFF, INVERTED, NORMAL); + frequencyBox = new GT_Cover_AdvancedRedstoneTransmitterBase.GUI.GT_GuiShortTextBox(this, 2, startX, startY + 2, spaceX * 5 - 3, 12); + } + + @Override + public void drawExtras(int mouseX, int mouseY, float parTicks) { + super.drawExtras(mouseX, mouseY, parTicks); + this.getFontRenderer().drawString( + GT_Utility.trans("246", "Frequency"), + startX + spaceX * 5, + 4 + startY, + textColor); + this.getFontRenderer().drawString( + GT_Utility.trans("601", "Use Private Frequency"), + startX + spaceX, + startY + spaceY * 1 + 4, + textColor); + this.getFontRenderer().drawString( + coverVariable.invert ? INVERTED : NORMAL, + startX + spaceX, + startY + spaceY * 2 + 4, + textColor); + } + + @Override + protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) { + update(); + frequencyBox.setFocused(true); + } + + @Override + public void onMouseWheel(int x, int y, int delta) { + if (frequencyBox.isFocused()) { + long step = Math.max(1, Math.abs(delta / 120)); + step = (isShiftKeyDown() ? 1000 : isCtrlKeyDown() ? 50 : 1) * (delta > 0 ? step : -step); + + long frequency = parseTextBox(frequencyBox) + step; + if (frequency > Integer.MAX_VALUE) frequency = Integer.MAX_VALUE; + else if (frequency < 0) frequency = 0; + + frequencyBox.setText(Long.toString(frequency)); + } + } + + @Override + public void applyTextBox(GT_GuiIntegerTextBox box) { + if (box == frequencyBox) { + coverVariable.frequency = parseTextBox(frequencyBox); + } + + GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile)); + update(); + } + + @Override + public void resetTextBox(GT_GuiIntegerTextBox box) { + if (box == frequencyBox) { + frequencyBox.setText(Integer.toString(coverVariable.frequency)); + } + } + + private void update() { + privateButton.setChecked(coverVariable.uuid != null); + invertButton.setChecked(coverVariable.invert); + resetTextBox(frequencyBox); + } + + @Override + public void buttonClicked(GuiButton btn) { + if (btn == privateButton) { + coverVariable.uuid = coverVariable.uuid == null ? Minecraft.getMinecraft().thePlayer.getUniqueID() : null; + } else if (btn == invertButton) { + coverVariable.invert = !coverVariable.invert; + } + + GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile)); + update(); + } + + private int parseTextBox(GT_GuiIntegerTextBox box) { + if (box == frequencyBox) { + String text = box.getText(); + if (text == null) { + return 0; + } + + long frequency; + try { + frequency = Long.parseLong(text.trim()); + } catch (NumberFormatException e) { + return 0; + } + + if (frequency > Integer.MAX_VALUE) frequency = Integer.MAX_VALUE; + else if (frequency < 0) frequency = 0; + + return (int) frequency; + } + + throw new UnsupportedOperationException("Unknown text box: " + box); + } + + private class GT_GuiShortTextBox extends GT_GuiIntegerTextBox { + + public GT_GuiShortTextBox(IGuiScreen gui, int id, int x, int y, int width, int height) { + super(gui, id, x, y, width, height); + } + + @Override + public boolean textboxKeyTyped(char c, int key) { + if (!super.textboxKeyTyped(c, key)) return false; + + String text = getText().trim(); + if (text.length() > 0) { + setText(String.valueOf(parseTextBox(this))); + } + + return true; + } + } + } +} 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..51533c2b98 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java @@ -0,0 +1,30 @@ +package gregtech.common.covers.redstone; + +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; + +public class GT_Cover_AdvancedRedstoneTransmitterExternal extends GT_Cover_AdvancedRedstoneTransmitterBase { + + public GT_Cover_AdvancedRedstoneTransmitterExternal(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public TransmitterData doCoverThingsImpl(byte aSide, byte aInputRedstone, int aCoverID, + TransmitterData aCoverVariable, ICoverable tile, long aTimer) { + byte outputRedstone = aInputRedstone; + if (aCoverVariable.isInvert()) { + if (outputRedstone > 0) outputRedstone = 0; + else outputRedstone = 15; + } + + GregTech_API.setAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), 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..058081fd13 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java @@ -0,0 +1,37 @@ +package gregtech.common.covers.redstone; + +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; + +public class GT_Cover_AdvancedRedstoneTransmitterInternal extends GT_Cover_AdvancedRedstoneTransmitterBase { + + public GT_Cover_AdvancedRedstoneTransmitterInternal(ITexture coverTexture) { + super(coverTexture); + } + + @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; + } + + GregTech_API.setAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), outputRedstone); + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoOutImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(byte aSide, int aCoverID, TransmitterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } +} diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java index af5c1dc457..53ed73ae5a 100644 --- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java +++ b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java @@ -8,6 +8,7 @@ import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.SubTag; import gregtech.api.enums.TC_Aspects; +import gregtech.api.interfaces.ITexture; import gregtech.api.items.GT_MetaGenerated_Item_X32; import gregtech.api.objects.ItemData; import gregtech.api.render.TextureFactory; @@ -16,6 +17,11 @@ import gregtech.api.util.GT_Log; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; +import gregtech.common.covers.GT_Cover_RedstoneReceiverExternal; +import gregtech.common.covers.redstone.GT_Cover_AdvancedRedstoneReceiverExternal; +import gregtech.common.covers.redstone.GT_Cover_AdvancedRedstoneReceiverInternal; +import gregtech.common.covers.redstone.GT_Cover_AdvancedRedstoneTransmitterExternal; +import gregtech.common.covers.redstone.GT_Cover_AdvancedRedstoneTransmitterInternal; import gregtech.common.items.behaviors.Behaviour_Arrow; import net.minecraft.dispenser.IBlockSource; import net.minecraft.enchantment.Enchantment; @@ -32,6 +38,8 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; import net.minecraft.world.World; +import static gregtech.api.enums.Textures.BlockIcons.*; + public class GT_MetaGenerated_Item_02 extends GT_MetaGenerated_Item_X32 { public static GT_MetaGenerated_Item_02 INSTANCE; private static final String aTextCover = "Usable as Cover"; @@ -2297,6 +2305,68 @@ public class GT_MetaGenerated_Item_02 extends GT_MetaGenerated_Item_X32 { new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); + + + ItemList.Cover_AdvancedRedstoneTransmitterExternal.set(addItem( + tLastID = 577, + "Advanced Redstone Transmitter (External)", + "Transfers Redstone signals wirelessly", + new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), + new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L))); + ItemList.Cover_AdvancedRedstoneTransmitterInternal.set(addItem( + tLastID = 578, + "Advanced Redstone Transmitter (Internal)", + "Transfers Redstone signals wirelessly", + new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), + new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L))); + ItemList.Cover_AdvancedRedstoneReceiverExternal.set(addItem( + tLastID = 579, + "Advanced Redstone Receiver (External)", + "Transfers Redstone signals wirelessly", + new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), + new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L))); + ItemList.Cover_AdvancedRedstoneReceiverInternal.set(addItem( + tLastID = 580, + "Advanced Redstone Receiver (Internal)", + "Transfers Redstone signals wirelessly", + new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), + new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L))); + + final ITexture redstoneTransmitterExternalCoverTexture = TextureFactory.of( + TextureFactory.of(OVERLAY_ACTIVITYDETECTOR), + TextureFactory.builder() + .addIcon(OVERLAY_ACTIVITYDETECTOR_GLOW) + .glow() + .build()); + + final ITexture redstoneTransmitterInternalCoverTexture = TextureFactory.of( + TextureFactory.of(OVERLAY_ACTIVITYDETECTOR), + TextureFactory.builder() + .addIcon(OVERLAY_ACTIVITYDETECTOR_GLOW) + .glow() + .build()); + + GregTech_API.registerCover( + ItemList.Cover_AdvancedRedstoneTransmitterExternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], redstoneTransmitterExternalCoverTexture), + new GT_Cover_AdvancedRedstoneTransmitterExternal(redstoneTransmitterExternalCoverTexture)); + + GregTech_API.registerCover( + ItemList.Cover_AdvancedRedstoneTransmitterInternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], redstoneTransmitterInternalCoverTexture), + new GT_Cover_AdvancedRedstoneTransmitterInternal(redstoneTransmitterInternalCoverTexture)); + + GregTech_API.registerCover( + ItemList.Cover_AdvancedRedstoneReceiverExternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_FLUIDDETECTOR)), + new GT_Cover_AdvancedRedstoneReceiverExternal(TextureFactory.of(OVERLAY_FLUIDDETECTOR))); + + GregTech_API.registerCover( + ItemList.Cover_AdvancedRedstoneReceiverInternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_FLUIDDETECTOR)), + new GT_Cover_AdvancedRedstoneReceiverInternal(TextureFactory.of(OVERLAY_FLUIDDETECTOR))); + + GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 0), new ItemStack(Items.dye, 2, 1)); GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 1), new ItemStack(Items.dye, 2, 12)); GT_ModHandler.addExtractionRecipe(new ItemStack(Blocks.red_flower, 1, 2), new ItemStack(Items.dye, 2, 13)); diff --git a/src/main/resources/assets/gregtech/textures/gui/GuiCover.png b/src/main/resources/assets/gregtech/textures/gui/GuiCover.png Binary files differindex 95353c79ca..8a3f69e06c 100644 --- a/src/main/resources/assets/gregtech/textures/gui/GuiCover.png +++ b/src/main/resources/assets/gregtech/textures/gui/GuiCover.png diff --git a/src/main/resources/assets/gregtech/textures/gui/GuiCoverLong.png b/src/main/resources/assets/gregtech/textures/gui/GuiCoverLong.png Binary files differnew file mode 100644 index 0000000000..1b9a18f691 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/gui/GuiCoverLong.png diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/577.png b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/577.png Binary files differnew file mode 100644 index 0000000000..7e7f44eba1 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/577.png diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/578.png b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/578.png Binary files differnew file mode 100644 index 0000000000..7e7f44eba1 --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/578.png diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/579.png b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/579.png Binary files differnew file mode 100644 index 0000000000..dd0bae6bab --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/579.png diff --git a/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/580.png b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/580.png Binary files differnew file mode 100644 index 0000000000..dd0bae6bab --- /dev/null +++ b/src/main/resources/assets/gregtech/textures/items/gt.metaitem.02/580.png |