aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/api/GregTech_API.java31
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java5
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java52
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java2
-rw-r--r--src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java2
-rw-r--r--src/main/resources/assets/gregtech/textures/gui/GuiButtons.pngbin3814 -> 9078 bytes
6 files changed, 79 insertions, 13 deletions
diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java
index e6bd089027..053d8c6236 100644
--- a/src/main/java/gregtech/api/GregTech_API.java
+++ b/src/main/java/gregtech/api/GregTech_API.java
@@ -42,6 +42,7 @@ import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
import gregtech.api.world.GT_Worldgen;
+import gregtech.common.covers.redstone.GT_Cover_AdvancedRedstoneReceiverBase;
import gregtech.common.items.GT_IntegratedCircuit_Item;
import java.util.ArrayList;
import java.util.Collection;
@@ -179,17 +180,33 @@ public class GregTech_API {
*/
public static final Map<String, Map<Integer, Map<Long, Byte>>> sAdvancedWirelessRedstone = new ConcurrentHashMap<>();
- public static Byte getAdvancedRedstone(UUID uuid, int frequency) {
+ public static Byte getAdvancedRedstone(UUID uuid, int frequency, GT_Cover_AdvancedRedstoneReceiverBase.GateMode mode) {
Map<Integer, Map<Long, Byte>> frequencies = GregTech_API.sAdvancedWirelessRedstone.get(String.valueOf(uuid));
if (frequencies == null) return 0;
- // TODO: Implement All Modes
Map<Long, Byte> signals = frequencies.get(frequency);
- if (signals == null) return 0;
-
- return (byte) (signals.values().stream()
- .map(signal -> signal > 0)
- .reduce(true, (signalA, signalB) -> signalA && signalB) ? 15 : 0);
+ if (signals == null) signals = new ConcurrentHashMap<>();
+
+ switch (mode) {
+ case AND:
+ return (byte) (signals.values().stream()
+ .map(signal -> signal > 0)
+ .reduce(true, (signalA, signalB) -> signalA && signalB) ? 15 : 0);
+ case NAND:
+ return (byte) (signals.values().stream()
+ .map(signal -> signal > 0)
+ .reduce(true, (signalA, signalB) -> signalA && signalB) ? 0 : 15);
+ case OR:
+ return (byte) (signals.values().stream()
+ .map(signal -> signal > 0)
+ .reduce(false, (signalA, signalB) -> signalA || signalB) ? 15 : 0);
+ case NOR:
+ return (byte) (signals.values().stream()
+ .map(signal -> signal > 0)
+ .reduce(false, (signalA, signalB) -> signalA || signalB) ? 0 : 15);
+ default:
+ return 0;
+ }
}
public static void resetAdvancedRedstoneFrequency(UUID uuid, int frequency) {
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 37e1a6d960..2be46dfa14 100644
--- a/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java
+++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiIcon.java
@@ -30,6 +30,11 @@ public enum GT_GuiIcon implements IGuiIcon {
GREEN_ARROW_DOWN(0, 32 * 5, 32 * 2),
CYCLIC(0, 32 * 6, 32 * 2),
+ AND_GATE(0, 0, 32 * 3),
+ NAND_GATE(0, 32, 32 * 3),
+ OR_GATE(0, 32 * 2, 32 * 3),
+ NOR_GATE(0, 32 * 3, 32 * 3),
+
SLOT_DARKGRAY(1, 176, 0, 18, 18),
SLOT_GRAY(1, 176, 18, 18, 18),
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
index 53a36cadce..8befcbfd52 100644
--- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java
+++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java
@@ -5,6 +5,7 @@ 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_GuiIconButton;
import gregtech.api.gui.widgets.GT_GuiIconCheckButton;
import gregtech.api.gui.widgets.GT_GuiIntegerTextBox;
import gregtech.api.interfaces.IGuiScreen;
@@ -106,6 +107,13 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<
return new GT_Cover_AdvancedRedstoneReceiverBase.GUI(aSide, aCoverID, aCoverVariable, aTileEntity);
}
+ public enum GateMode {
+ AND,
+ NAND,
+ OR,
+ NOR
+ }
+
public static class ReceiverData implements ISerializableObject {
private int frequency;
@@ -113,14 +121,16 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<
* If UUID is set to null, the cover frequency is public, rather than private
**/
private UUID uuid;
+ private GateMode mode;
- public ReceiverData(int frequency, UUID uuid) {
+ public ReceiverData(int frequency, UUID uuid, GateMode mode) {
this.frequency = frequency;
this.uuid = uuid;
+ this.mode = mode;
}
public ReceiverData() {
- this(0, null);
+ this(0, null, GateMode.AND);
}
public UUID getUuid() {
@@ -131,10 +141,14 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<
return frequency;
}
+ public GateMode getGateMode() {
+ return mode;
+ }
+
@Nonnull
@Override
public ISerializableObject copy() {
- return new ReceiverData(frequency, uuid);
+ return new ReceiverData(frequency, uuid, mode);
}
@Nonnull
@@ -145,6 +159,7 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<
if (uuid != null) {
tag.setString("uuid", uuid.toString());
}
+ tag.setByte("mode", (byte) mode.ordinal());
return tag;
}
@@ -157,6 +172,7 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<
aBuf.writeLong(uuid.getLeastSignificantBits());
aBuf.writeLong(uuid.getMostSignificantBits());
}
+ aBuf.writeByte(mode.ordinal());
}
@Override
@@ -166,6 +182,7 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<
if (tag.hasKey("uuid")) {
uuid = UUID.fromString(tag.getString("uuid"));
}
+ mode = GateMode.values()[tag.getByte("mode")];
}
@Nonnull
@@ -175,6 +192,7 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<
if (aBuf.readBoolean()) {
uuid = new UUID(aBuf.readLong(), aBuf.readLong());
}
+ mode = GateMode.values()[aBuf.readByte()];
return this;
}
@@ -192,6 +210,7 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<
private static final int startY = 25;
private static final int spaceX = 18;
private static final int spaceY = 18;
+ private static final int gateModeButtonIdStart = 1;
private static final String guiTexturePath = "gregtech:textures/gui/GuiCoverLong.png";
@@ -206,6 +225,15 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<
frequencyBox = new GT_Cover_AdvancedRedstoneReceiverBase.GUI.GT_GuiShortTextBox(this, 0, startX, startY + 2, spaceX * 5 - 3, 12);
privateButton = new GT_GuiIconCheckButton(this, 0, startX, startY + spaceY * 1, GT_GuiIcon.CHECKMARK, null);
+
+ 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"));
}
@Override
@@ -218,9 +246,14 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<
textColor);
this.getFontRenderer().drawString(
GT_Utility.trans("601", "Use Private Frequency"),
- startX + spaceX,
+ startX + spaceX * 5,
startY + spaceY * 1 + 4,
textColor);
+ this.getFontRenderer().drawString(
+ GT_Utility.trans("601", "Gate Mode"),
+ startX + spaceX * 5,
+ startY + spaceY * 2 + 4,
+ textColor);
}
@Override
@@ -263,12 +296,23 @@ public class GT_Cover_AdvancedRedstoneReceiverBase extends GT_CoverBehaviorBase<
private void update() {
privateButton.setChecked(coverVariable.uuid != null);
resetTextBox(frequencyBox);
+ updateButtons();
+ }
+
+ private void updateButtons() {
+ GuiButton button;
+ for (int i = gateModeButtonIdStart; i < gateModeButtonIdStart + 4; ++i) {
+ button = (GuiButton) this.buttonList.get(i);
+ button.enabled = (button.id - gateModeButtonIdStart) != coverVariable.mode.ordinal();
+ }
}
@Override
public void buttonClicked(GuiButton btn) {
if (btn == privateButton) {
coverVariable.uuid = coverVariable.uuid == null ? Minecraft.getMinecraft().thePlayer.getUniqueID() : null;
+ } else if (btn.enabled) {
+ coverVariable.mode = GateMode.values()[btn.id - gateModeButtonIdStart];
}
GT_Values.NW.sendToServer(new GT_Packet_TileEntityCoverNew(side, coverID, coverVariable, tile));
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
index bedb878295..a8601b15d0 100644
--- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java
+++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java
@@ -13,7 +13,7 @@ public class GT_Cover_AdvancedRedstoneReceiverExternal extends GT_Cover_Advanced
@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()));
+ GregTech_API.getAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), aCoverVariable.getGateMode()));
return aCoverVariable;
}
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
index 7a4d498059..ea766e9e89 100644
--- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java
+++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java
@@ -29,6 +29,6 @@ public class GT_Cover_AdvancedRedstoneReceiverInternal extends GT_Cover_Advanced
@Override
protected byte getRedstoneInputImpl(byte aSide, byte aInputRedstone, int aCoverID, ReceiverData aCoverVariable, ICoverable aTileEntity) {
- return GregTech_API.getAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency());
+ return GregTech_API.getAdvancedRedstone(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), aCoverVariable.getGateMode());
}
}
diff --git a/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png b/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png
index ce0652d14a..255bdc2aab 100644
--- a/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png
+++ b/src/main/resources/assets/gregtech/textures/gui/GuiButtons.png
Binary files differ