From 08aa6a7f525eea881a00331bc75f055c3d275c3e Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 1 Jun 2021 14:16:37 -0700 Subject: Made the redstone reciever safer to use on public servers --- .../java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java | 4 ++++ 1 file changed, 4 insertions(+) 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 49126e24cb..d5f414b565 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -22,6 +22,10 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { if (((aX > 0.375D) && (aX < 0.625D)) || ((aSide > 3) && ((aY > 0.375D) && (aY < 0.625D)))) { GregTech_API.sWirelessRedstone.put(Integer.valueOf(aCoverVariable), Byte.valueOf((byte) 0)); aCoverVariable = GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem()); + + int playerHash = aPlayer.getDisplayName().hashCode(); + aCoverVariable = playerHash << 16 | aCoverVariable >> 16; + aTileEntity.setCoverDataAtSide(aSide, aCoverVariable); GT_Utility.sendChatToPlayer(aPlayer, trans("081", "Frequency: ") + aCoverVariable); return true; -- cgit From cc5df9c1762e81535c4f91c2c077220bf4af4f8b Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 4 Jun 2021 14:18:06 -0700 Subject: User can only manually change the lower 16 bits of the coverVariable --- .../covers/GT_Cover_RedstoneWirelessBase.java | 91 +++++++++++++++------- 1 file changed, 63 insertions(+), 28 deletions(-) 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 5ad10b0edb..056f316bb1 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -3,16 +3,22 @@ package gregtech.common.covers; 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.tileentity.ICoverable; import gregtech.api.net.GT_Packet_TileEntityCover; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; +import net.minecraft.client.gui.GuiButton; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.fluids.Fluid; public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { + + private static int MAX_CHANNEL = 65535; + @Override public boolean onCoverRemoval(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, boolean aForced) { GregTech_API.sWirelessRedstone.put(Integer.valueOf(aCoverVariable), Byte.valueOf((byte) 0)); @@ -23,10 +29,10 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { if (((aX > 0.375D) && (aX < 0.625D)) || ((aSide > 3) && ((aY > 0.375D) && (aY < 0.625D)))) { GregTech_API.sWirelessRedstone.put(Integer.valueOf(aCoverVariable), Byte.valueOf((byte) 0)); - aCoverVariable = GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem()); + aCoverVariable = ((Integer)GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem())).hashCode(); int playerHash = aPlayer.getDisplayName().hashCode(); - aCoverVariable = playerHash << 16 | aCoverVariable >> 16; + aCoverVariable = playerHash & 0xffff0000 | aCoverVariable & 0x0000ffff; aTileEntity.setCoverDataAtSide(aSide, aCoverVariable); GT_Utility.sendChatToPlayer(aPlayer, trans("081", "Frequency: ") + aCoverVariable); @@ -40,18 +46,26 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { if (((aX > 0.375D) && (aX < 0.625D)) || ((aSide <= 3) || (((aY > 0.375D) && (aY < 0.625D)) || ((((aZ <= 0.375D) || (aZ >= 0.625D))))))) { GregTech_API.sWirelessRedstone.put(Integer.valueOf(aCoverVariable), Byte.valueOf((byte) 0)); float[] tCoords = GT_Utility.getClickedFacingCoords(aSide, aX, aY, aZ); + + short tAdjustVal = 0; + switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + 2 * (byte) (int) (tCoords[1] * 2.0F))) { case 0: - aCoverVariable -= 32; + tAdjustVal = -32; break; case 1: - aCoverVariable += 32; + tAdjustVal = 32; break; case 2: - aCoverVariable -= 1024; + tAdjustVal = -1024; break; case 3: - aCoverVariable += 1024; + tAdjustVal = 1024; + } + + if ((aCoverVariable & 0x0000ffff) > Short.MAX_VALUE) + { + } } GT_Utility.sendChatToPlayer(aPlayer, trans("081", "Frequency: ") + aCoverVariable); @@ -129,16 +143,19 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { this.coverID = aCoverID; this.coverVariable = aCoverVariable; - fBox = new GT_GuiIntegerTextBoxWithMinus(this, 2,startX + spaceX*0,startY+spaceY*0 + 2, spaceX*4-3,12); - fBox.setText(String.valueOf(coverVariable)); + fBox = new GT_GuiShortTextBox(this, 2,startX + spaceX*0,startY+spaceY*0 + 2, spaceX*4-3,12); + fBox.setText(String.valueOf(coverVariable & 0x0000ffff)); fBox.setMaxStringLength(12); + GuiButton b; + b = new GT_GuiIconCheckButton(this, 0, startX + spaceX * 0, startY + spaceY * 2, GT_GuiIcon.CHECKMARK, null); } @Override public void drawExtras(int mouseX, int mouseY, float parTicks) { super.drawExtras(mouseX, mouseY, parTicks); this.getFontRenderer().drawString(trans("246","Frequency" ), startX + spaceX*4, 4+startY+spaceY*0, 0xFF555555); + this.getFontRenderer().drawString(trans("601", "Use Private Frequency"), startX + spaceX * 1, startY + spaceY * 2 + 4, 0xFF555555); } @Override @@ -159,10 +176,10 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { return; } i = i + step; - if (i > Integer.MAX_VALUE) - i = Integer.MAX_VALUE; - else if (i < Integer.MIN_VALUE) - i = Integer.MIN_VALUE; + if (i > MAX_CHANNEL) + i = MAX_CHANNEL; + else if (i < 0) + i = 0; box.setText(String.valueOf(i)); return; @@ -172,42 +189,60 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { @Override public void applyTextBox(GT_GuiIntegerTextBox box) { - long i; + int i; String s = box.getText().trim(); try { - i = Long.parseLong(s); + i = Integer.parseInt(s); } catch (NumberFormatException e) { resetTextBox(box); return; } - if (i > Integer.MAX_VALUE) - i = Integer.MAX_VALUE; - else if (i < Integer.MIN_VALUE) - i = Integer.MIN_VALUE; - + if (i > MAX_CHANNEL) + i = MAX_CHANNEL; + else if (i < 0) + i = 0; - coverVariable = (int) i; - fBox.setText(String.valueOf(coverVariable)); + coverVariable = (coverVariable & 0xffff0000) | (i & 0x0000ffff); + fBox.setText(Integer.toString(coverVariable & 0x0000ffff)); GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); } @Override public void resetTextBox(GT_GuiIntegerTextBox box) { - box.setText(String.valueOf(coverVariable)); + box.setText(String.valueOf(coverVariable & 0x0000ffff)); } - private class GT_GuiIntegerTextBoxWithMinus extends GT_GuiIntegerTextBox { + private class GT_GuiShortTextBox extends GT_GuiIntegerTextBox { - public GT_GuiIntegerTextBoxWithMinus(IGuiScreen gui, int id, int x, int y, int width, int height) { + 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 validChar(char c, int key) { - if (getCursorPosition() == 0 && key == 12) // minus first allowed. - return true; - return super.validChar(c, key); + public boolean textboxKeyTyped(char c, int key) { + String tText = getText().trim(); + int tValue = 0; + + super.textboxKeyTyped(c, key); + + int cursorPos = this.getCursorPosition(); + + String newText = getText().trim(); + if (newText.length() > 0) { + try { + tValue = Integer.parseInt(newText); + } catch (NumberFormatException ignored) {} + + if (tValue > MAX_CHANNEL) + setText(String.valueOf(MAX_CHANNEL)); + else + setText(String.valueOf(tValue)); + + setCursorPosition(cursorPos); + } + + return true; } } } -- cgit From cbc4b7c8034da9c8132f733a5bdff0bd11745601 Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 4 Jun 2021 15:08:34 -0700 Subject: All covers now record which player last opened that cover's gui --- src/main/java/gregtech/api/util/GT_CoverBehavior.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/gregtech/api/util/GT_CoverBehavior.java b/src/main/java/gregtech/api/util/GT_CoverBehavior.java index 08092cd31e..ebd3a98d55 100644 --- a/src/main/java/gregtech/api/util/GT_CoverBehavior.java +++ b/src/main/java/gregtech/api/util/GT_CoverBehavior.java @@ -57,6 +57,7 @@ public abstract class GT_CoverBehavior { */ public boolean onCoverShiftRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer) { if(hasCoverGUI() && aPlayer instanceof EntityPlayerMP) { + lastPlayer = aPlayer; GT_Values.NW.sendToPlayer(new GT_Packet_TileEntityCoverGUI(aSide, aCoverID, aCoverVariable, aTileEntity, (EntityPlayerMP) aPlayer), (EntityPlayerMP) aPlayer); return true; } -- cgit From b8e5cd79991277a9e5b59fe01e5311aa8a382679 Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 4 Jun 2021 16:50:57 -0700 Subject: Private channel is now implemented --- .../covers/GT_Cover_RedstoneWirelessBase.java | 34 ++++++++++++++++++---- 1 file changed, 29 insertions(+), 5 deletions(-) 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 056f316bb1..2c9cc0555c 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -17,7 +17,10 @@ import net.minecraftforge.fluids.Fluid; public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { - private static int MAX_CHANNEL = 65535; + private static final int MAX_CHANNEL = 65535; + private static final int PRIVATE_MASK = 0xFFFE0000; + private static final int PUBLIC_MASK = 0x0000FFFF; + private static final int CHECKBOX_MASK = 0x00010000; @Override public boolean onCoverRemoval(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, boolean aForced) { @@ -144,7 +147,7 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { this.coverVariable = aCoverVariable; fBox = new GT_GuiShortTextBox(this, 2,startX + spaceX*0,startY+spaceY*0 + 2, spaceX*4-3,12); - fBox.setText(String.valueOf(coverVariable & 0x0000ffff)); + fBox.setText(String.valueOf(coverVariable & PUBLIC_MASK)); fBox.setMaxStringLength(12); GuiButton b; @@ -161,6 +164,7 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { @Override protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) { fBox.setFocused(true); + ((GT_GuiIconCheckButton) buttonList.get(0)).setChecked((coverVariable & 0x00010000) > 0); } @Override @@ -203,14 +207,34 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { else if (i < 0) i = 0; - coverVariable = (coverVariable & 0xffff0000) | (i & 0x0000ffff); - fBox.setText(Integer.toString(coverVariable & 0x0000ffff)); + coverVariable = (coverVariable & PRIVATE_MASK) | (i & PUBLIC_MASK); + fBox.setText(Integer.toString(coverVariable & PUBLIC_MASK)); GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); } @Override public void resetTextBox(GT_GuiIntegerTextBox box) { - box.setText(String.valueOf(coverVariable & 0x0000ffff)); + box.setText(String.valueOf(coverVariable & PUBLIC_MASK)); + } + + @Override + public void buttonClicked(GuiButton btn) { + + final GT_GuiIconCheckButton tBtn = (GT_GuiIconCheckButton) btn; + + tBtn.setChecked(!tBtn.isChecked()); + + if (tBtn.isChecked()) + coverVariable = coverVariable | CHECKBOX_MASK; + else + coverVariable = coverVariable & ~CHECKBOX_MASK; + + if ((coverVariable & CHECKBOX_MASK) > 0) + { + coverVariable = coverVariable & (lastPlayer.getDisplayName().hashCode() & PRIVATE_MASK); + } + + GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); } private class GT_GuiShortTextBox extends GT_GuiIntegerTextBox { -- cgit From 95478bfd682a9c78b329639139348fdc8c96b86b Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 4 Jun 2021 17:06:47 -0700 Subject: Clean ups and fixes --- .../covers/GT_Cover_RedstoneWirelessBase.java | 23 +++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) 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 2c9cc0555c..d6bf3459e8 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -32,10 +32,7 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { if (((aX > 0.375D) && (aX < 0.625D)) || ((aSide > 3) && ((aY > 0.375D) && (aY < 0.625D)))) { GregTech_API.sWirelessRedstone.put(Integer.valueOf(aCoverVariable), Byte.valueOf((byte) 0)); - aCoverVariable = ((Integer)GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem())).hashCode(); - - int playerHash = aPlayer.getDisplayName().hashCode(); - aCoverVariable = playerHash & 0xffff0000 | aCoverVariable & 0x0000ffff; + aCoverVariable &= ((Integer)GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem())).hashCode() & PUBLIC_MASK; aTileEntity.setCoverDataAtSide(aSide, aCoverVariable); GT_Utility.sendChatToPlayer(aPlayer, trans("081", "Frequency: ") + aCoverVariable); @@ -66,10 +63,14 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { tAdjustVal = 1024; } - if ((aCoverVariable & 0x0000ffff) > Short.MAX_VALUE) - { + aCoverVariable += tAdjustVal; + if ((aCoverVariable & PUBLIC_MASK) < 0) + { + aCoverVariable = 0; } + + aCoverVariable &= PUBLIC_MASK; } GT_Utility.sendChatToPlayer(aPlayer, trans("081", "Frequency: ") + aCoverVariable); return aCoverVariable; @@ -225,13 +226,17 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { tBtn.setChecked(!tBtn.isChecked()); if (tBtn.isChecked()) - coverVariable = coverVariable | CHECKBOX_MASK; + coverVariable |= CHECKBOX_MASK; else - coverVariable = coverVariable & ~CHECKBOX_MASK; + coverVariable &= ~CHECKBOX_MASK; if ((coverVariable & CHECKBOX_MASK) > 0) { - coverVariable = coverVariable & (lastPlayer.getDisplayName().hashCode() & PRIVATE_MASK); + coverVariable &= (lastPlayer.getDisplayName().hashCode() & PRIVATE_MASK); + } + else + { + coverVariable &= PUBLIC_MASK; } GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); -- cgit From 34a9f2f2802da01b076394ab7091aa977ef4d628 Mon Sep 17 00:00:00 2001 From: Matt Date: Fri, 4 Jun 2021 17:12:52 -0700 Subject: replaced another magic bitmask --- src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 d6bf3459e8..3ce03b8121 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -165,7 +165,7 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { @Override protected void onInitGui(int guiLeft, int guiTop, int gui_width, int gui_height) { fBox.setFocused(true); - ((GT_GuiIconCheckButton) buttonList.get(0)).setChecked((coverVariable & 0x00010000) > 0); + ((GT_GuiIconCheckButton) buttonList.get(0)).setChecked((coverVariable & CHECKBOX_MASK) > 0); } @Override -- cgit From aeef5100c0f603e675d17eef5b3bc63b8586ccab Mon Sep 17 00:00:00 2001 From: Matt Date: Sat, 5 Jun 2021 01:23:44 -0700 Subject: fixed some bit masking logic --- .../covers/GT_Cover_RedstoneWirelessBase.java | 32 ++++++++++++---------- 1 file changed, 18 insertions(+), 14 deletions(-) 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 3ce03b8121..c0244b1dbc 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -32,7 +32,7 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { public boolean onCoverRightclick(byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { if (((aX > 0.375D) && (aX < 0.625D)) || ((aSide > 3) && ((aY > 0.375D) && (aY < 0.625D)))) { GregTech_API.sWirelessRedstone.put(Integer.valueOf(aCoverVariable), Byte.valueOf((byte) 0)); - aCoverVariable &= ((Integer)GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem())).hashCode() & PUBLIC_MASK; + aCoverVariable = (aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | (((Integer)GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem())).hashCode() & PUBLIC_MASK); aTileEntity.setCoverDataAtSide(aSide, aCoverVariable); GT_Utility.sendChatToPlayer(aPlayer, trans("081", "Frequency: ") + aCoverVariable); @@ -67,10 +67,10 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { if ((aCoverVariable & PUBLIC_MASK) < 0) { - aCoverVariable = 0; + aCoverVariable = aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK); } - aCoverVariable &= PUBLIC_MASK; + //aCoverVariable = aCoverVariable | (aCoverVariable & PUBLIC_MASK); } GT_Utility.sendChatToPlayer(aPlayer, trans("081", "Frequency: ") + aCoverVariable); return aCoverVariable; @@ -208,7 +208,7 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { else if (i < 0) i = 0; - coverVariable = (coverVariable & PRIVATE_MASK) | (i & PUBLIC_MASK); + coverVariable = (coverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | (i & PUBLIC_MASK); fBox.setText(Integer.toString(coverVariable & PUBLIC_MASK)); GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); } @@ -225,18 +225,22 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { tBtn.setChecked(!tBtn.isChecked()); - if (tBtn.isChecked()) - coverVariable |= CHECKBOX_MASK; - else - coverVariable &= ~CHECKBOX_MASK; + if (tBtn.isChecked()) { + //set bit 16 + coverVariable = coverVariable | CHECKBOX_MASK; + } + else { + //un-set bit 16 + coverVariable = coverVariable & ~CHECKBOX_MASK; + } - if ((coverVariable & CHECKBOX_MASK) > 0) - { - coverVariable &= (lastPlayer.getDisplayName().hashCode() & PRIVATE_MASK); + if ((coverVariable & CHECKBOX_MASK) > 0) { + //clear out upper 15 bits and replace them with the upper 15 bits of the hashed player name + coverVariable = (coverVariable & (PUBLIC_MASK | CHECKBOX_MASK)) | (lastPlayer.getDisplayName().hashCode() & PRIVATE_MASK); } - else - { - coverVariable &= PUBLIC_MASK; + else { + //clear out upper 16 bits + coverVariable = coverVariable & PUBLIC_MASK; } GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); -- cgit From 51fcb8af2bd2022d9a9111e2874e508d4059d8d0 Mon Sep 17 00:00:00 2001 From: Matt Date: Sat, 5 Jun 2021 15:27:41 -0700 Subject: Made fixes based on Glease's suggestions --- .../api/net/GT_Packet_WirelessRedstoneCover.java | 75 ++++++++++++++++++++++ src/main/java/gregtech/common/GT_Network.java | 2 +- .../covers/GT_Cover_RedstoneWirelessBase.java | 11 ++-- 3 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java diff --git a/src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java b/src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java new file mode 100644 index 0000000000..c4196f17aa --- /dev/null +++ b/src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java @@ -0,0 +1,75 @@ +package gregtech.api.net; + +import com.google.common.io.ByteArrayDataInput; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +public class GT_Packet_WirelessRedstoneCover extends GT_Packet_TileEntityCover { + private static final int PRIVATE_MASK = 0xFFFE0000; + private static final int PUBLIC_MASK = 0x0000FFFF; + private static final int CHECKBOX_MASK = 0x00010000; + + protected int mX; + protected short mY; + protected int mZ; + + protected byte side; + protected int coverID, coverData, dimID; + + private EntityPlayerMP mPlayer; + + public GT_Packet_WirelessRedstoneCover() { + super(); + } + + public GT_Packet_WirelessRedstoneCover(int mX, short mY, int mZ, byte coverSide, int coverID, int coverData, int dimID) { + super(mX, mY, mZ, coverSide, coverID, coverData, dimID); + } + public GT_Packet_WirelessRedstoneCover(byte coverSide, int coverID, int coverData, ICoverable tile) { + super(coverSide, coverID, coverData, tile); + } + + @Override + public byte getPacketID() { + return 10; + } + + @Override + public void setINetHandler(INetHandler aHandler) { + if (aHandler instanceof NetHandlerPlayServer) { + mPlayer = ((NetHandlerPlayServer) aHandler).playerEntity; + } + } + + @Override + public GT_Packet_New decode(ByteArrayDataInput aData) { + return new GT_Packet_WirelessRedstoneCover( + aData.readInt(), + aData.readShort(), + aData.readInt(), + + aData.readByte(), + aData.readInt(), + aData.readInt(), + + aData.readInt()); + } + + @Override + public void process(IBlockAccess aWorld) { + World world = DimensionManager.getWorld(dimID); + if (world != null && world.blockExists(mX, mY, mZ)) { + TileEntity tile = world.getTileEntity(mX, mY, mZ); + if (tile instanceof IGregTechTileEntity && !((IGregTechTileEntity) tile).isDead()) { + ((IGregTechTileEntity) tile).receiveCoverData(side, coverID, (mPlayer.getUniqueID().hashCode() & PRIVATE_MASK) | (coverData & PUBLIC_MASK | CHECKBOX_MASK)); + } + } + } +} diff --git a/src/main/java/gregtech/common/GT_Network.java b/src/main/java/gregtech/common/GT_Network.java index b721e44eba..c9c57676ad 100644 --- a/src/main/java/gregtech/common/GT_Network.java +++ b/src/main/java/gregtech/common/GT_Network.java @@ -36,7 +36,7 @@ public class GT_Network extends MessageToMessageCodec public GT_Network() { this.mChannel = NetworkRegistry.INSTANCE.newChannel("GregTech", this, new HandlerShared()); - this.mSubChannels = new GT_Packet[]{new GT_Packet_TileEntity(), new GT_Packet_Sound(), new GT_Packet_Block_Event(), new GT_Packet_Ores(), new GT_Packet_Pollution(), new MessageSetFlaskCapacity(), new GT_Packet_TileEntityCover(), new GT_Packet_TileEntityCoverGUI(), new MessageUpdateFluidDisplayItem(), new GT_Packet_ClientPreference()}; + this.mSubChannels = new GT_Packet[]{new GT_Packet_TileEntity(), new GT_Packet_Sound(), new GT_Packet_Block_Event(), new GT_Packet_Ores(), new GT_Packet_Pollution(), new MessageSetFlaskCapacity(), new GT_Packet_TileEntityCover(), new GT_Packet_TileEntityCoverGUI(), new MessageUpdateFluidDisplayItem(), new GT_Packet_ClientPreference(), new GT_Packet_WirelessRedstoneCover()}; } @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 c0244b1dbc..e71461a817 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -63,14 +63,15 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { tAdjustVal = 1024; } - aCoverVariable += tAdjustVal; + int tCoverVariable = (aCoverVariable & PUBLIC_MASK) + tAdjustVal; - if ((aCoverVariable & PUBLIC_MASK) < 0) - { + if (tCoverVariable < 0) { aCoverVariable = aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK); } - //aCoverVariable = aCoverVariable | (aCoverVariable & PUBLIC_MASK); + if (tCoverVariable > MAX_CHANNEL) { + aCoverVariable = (aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | MAX_CHANNEL; + } } GT_Utility.sendChatToPlayer(aPlayer, trans("081", "Frequency: ") + aCoverVariable); return aCoverVariable; @@ -236,7 +237,7 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { if ((coverVariable & CHECKBOX_MASK) > 0) { //clear out upper 15 bits and replace them with the upper 15 bits of the hashed player name - coverVariable = (coverVariable & (PUBLIC_MASK | CHECKBOX_MASK)) | (lastPlayer.getDisplayName().hashCode() & PRIVATE_MASK); + coverVariable = (coverVariable & (PUBLIC_MASK | CHECKBOX_MASK)) | (lastPlayer.getUniqueID().hashCode() & PRIVATE_MASK); } else { //clear out upper 16 bits -- cgit From 5c68f72256dd5641a113a345700d307312b8693c Mon Sep 17 00:00:00 2001 From: Matt Date: Sun, 6 Jun 2021 07:54:55 -0700 Subject: Uses GT_WirelessRedstoneCover packets now --- .../api/net/GT_Packet_WirelessRedstoneCover.java | 44 ++++++++---- .../covers/GT_Cover_RedstoneWirelessBase.java | 84 +++++++++++----------- 2 files changed, 73 insertions(+), 55 deletions(-) diff --git a/src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java b/src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java index c4196f17aa..64ac09c59e 100644 --- a/src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java +++ b/src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java @@ -3,6 +3,7 @@ package gregtech.api.net; import com.google.common.io.ByteArrayDataInput; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.INetHandler; import net.minecraft.network.NetHandlerPlayServer; @@ -13,27 +14,25 @@ import net.minecraftforge.common.DimensionManager; public class GT_Packet_WirelessRedstoneCover extends GT_Packet_TileEntityCover { private static final int PRIVATE_MASK = 0xFFFE0000; - private static final int PUBLIC_MASK = 0x0000FFFF; - private static final int CHECKBOX_MASK = 0x00010000; - - protected int mX; - protected short mY; - protected int mZ; - - protected byte side; - protected int coverID, coverData, dimID; private EntityPlayerMP mPlayer; + private int mPublicChannel; + private int mCheckBoxValue; public GT_Packet_WirelessRedstoneCover() { super(); } - public GT_Packet_WirelessRedstoneCover(int mX, short mY, int mZ, byte coverSide, int coverID, int coverData, int dimID) { + public GT_Packet_WirelessRedstoneCover(int mX, short mY, int mZ, byte coverSide, int coverID, int coverData, int dimID, int publicChannel, int checkBoxValue) { super(mX, mY, mZ, coverSide, coverID, coverData, dimID); + mPublicChannel = publicChannel; + mCheckBoxValue = checkBoxValue; } - public GT_Packet_WirelessRedstoneCover(byte coverSide, int coverID, int coverData, ICoverable tile) { + + public GT_Packet_WirelessRedstoneCover(byte coverSide, int coverID, int coverData, ICoverable tile, int publicChannel, int checkBoxValue) { super(coverSide, coverID, coverData, tile); + mPublicChannel = publicChannel; + mCheckBoxValue = checkBoxValue; } @Override @@ -48,6 +47,22 @@ public class GT_Packet_WirelessRedstoneCover extends GT_Packet_TileEntityCover { } } + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(mX); + aOut.writeShort(mY); + aOut.writeInt(mZ); + + aOut.writeByte(side); + aOut.writeInt(coverID); + aOut.writeInt(coverData); + + aOut.writeInt(dimID); + + aOut.writeInt(mPublicChannel); + aOut.writeInt(mCheckBoxValue); + } + @Override public GT_Packet_New decode(ByteArrayDataInput aData) { return new GT_Packet_WirelessRedstoneCover( @@ -59,6 +74,9 @@ public class GT_Packet_WirelessRedstoneCover extends GT_Packet_TileEntityCover { aData.readInt(), aData.readInt(), + aData.readInt(), + + aData.readInt(), aData.readInt()); } @@ -68,7 +86,9 @@ public class GT_Packet_WirelessRedstoneCover extends GT_Packet_TileEntityCover { if (world != null && world.blockExists(mX, mY, mZ)) { TileEntity tile = world.getTileEntity(mX, mY, mZ); if (tile instanceof IGregTechTileEntity && !((IGregTechTileEntity) tile).isDead()) { - ((IGregTechTileEntity) tile).receiveCoverData(side, coverID, (mPlayer.getUniqueID().hashCode() & PRIVATE_MASK) | (coverData & PUBLIC_MASK | CHECKBOX_MASK)); + int tPrivateChannel = (mCheckBoxValue > 0) ? mPlayer.getUniqueID().hashCode() & PRIVATE_MASK : 0; + int tCoverData = tPrivateChannel | mCheckBoxValue | mPublicChannel; + ((IGregTechTileEntity) tile).receiveCoverData(side, coverID, tCoverData); } } } 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 e71461a817..fac6fa1d34 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -9,6 +9,7 @@ import gregtech.api.gui.widgets.GT_GuiIntegerTextBox; import gregtech.api.interfaces.IGuiScreen; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.net.GT_Packet_TileEntityCover; +import gregtech.api.net.GT_Packet_WirelessRedstoneCover; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; import net.minecraft.client.gui.GuiButton; @@ -63,15 +64,17 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { tAdjustVal = 1024; } - int tCoverVariable = (aCoverVariable & PUBLIC_MASK) + tAdjustVal; + int tPublicChannel = (aCoverVariable & PUBLIC_MASK) + tAdjustVal; - if (tCoverVariable < 0) { - aCoverVariable = aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK); + if (tPublicChannel < 0) { + aCoverVariable = aCoverVariable & ~PUBLIC_MASK; } - - if (tCoverVariable > MAX_CHANNEL) { + else if (tPublicChannel > MAX_CHANNEL) { aCoverVariable = (aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | MAX_CHANNEL; } + else { + aCoverVariable = (aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | tPublicChannel; + } } GT_Utility.sendChatToPlayer(aPlayer, trans("081", "Frequency: ") + aCoverVariable); return aCoverVariable; @@ -175,19 +178,19 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { if (box.isFocused()) { int step = Math.max(1, Math.abs(delta / 120)); step = (isShiftKeyDown() ? 1000 : isCtrlKeyDown() ? 50 : 1) * (delta > 0 ? step : -step); - long i; + long tCoverVariable; try { - i = Long.parseLong(box.getText()); + tCoverVariable = Long.parseLong(box.getText()); } catch (NumberFormatException e) { return; } - i = i + step; - if (i > MAX_CHANNEL) - i = MAX_CHANNEL; - else if (i < 0) - i = 0; + tCoverVariable = tCoverVariable + step; + if (tCoverVariable > MAX_CHANNEL) + tCoverVariable = MAX_CHANNEL; + else if (tCoverVariable < 0) + tCoverVariable = 0; - box.setText(String.valueOf(i)); + box.setText(String.valueOf(tCoverVariable)); return; } } @@ -195,28 +198,31 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { @Override public void applyTextBox(GT_GuiIntegerTextBox box) { - int i; + int tPublicChannel; String s = box.getText().trim(); try { - i = Integer.parseInt(s); + tPublicChannel = Integer.parseInt(s); } catch (NumberFormatException e) { resetTextBox(box); return; } - if (i > MAX_CHANNEL) - i = MAX_CHANNEL; - else if (i < 0) - i = 0; + if (tPublicChannel > MAX_CHANNEL) + tPublicChannel = MAX_CHANNEL; + else if (tPublicChannel < 0) + tPublicChannel = 0; + + int tCheckBoxValue = ((GT_GuiIconCheckButton)this.buttonList.get(0)).isChecked() ? CHECKBOX_MASK : 0; - coverVariable = (coverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | (i & PUBLIC_MASK); - fBox.setText(Integer.toString(coverVariable & PUBLIC_MASK)); - GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); + coverVariable = tCheckBoxValue | tPublicChannel; + + fBox.setText(Integer.toString(tPublicChannel)); + GT_Values.NW.sendToServer(new GT_Packet_WirelessRedstoneCover(side, coverID, coverVariable, tile, tPublicChannel, tCheckBoxValue)); } @Override public void resetTextBox(GT_GuiIntegerTextBox box) { - box.setText(String.valueOf(coverVariable & PUBLIC_MASK)); + box.setText(String.valueOf(0)); } @Override @@ -226,25 +232,18 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { tBtn.setChecked(!tBtn.isChecked()); - if (tBtn.isChecked()) { - //set bit 16 - coverVariable = coverVariable | CHECKBOX_MASK; - } - else { - //un-set bit 16 - coverVariable = coverVariable & ~CHECKBOX_MASK; - } + int tPublicChannel = 0; + String tText = fBox.getText().trim(); - if ((coverVariable & CHECKBOX_MASK) > 0) { - //clear out upper 15 bits and replace them with the upper 15 bits of the hashed player name - coverVariable = (coverVariable & (PUBLIC_MASK | CHECKBOX_MASK)) | (lastPlayer.getUniqueID().hashCode() & PRIVATE_MASK); - } - else { - //clear out upper 16 bits - coverVariable = coverVariable & PUBLIC_MASK; + if (tText.length() > 0) { + tPublicChannel = Integer.parseInt(tText); } - GT_Values.NW.sendToServer(new GT_Packet_TileEntityCover(side, coverID, coverVariable, tile)); + int tCheckBoxValue = tBtn.isChecked() ? CHECKBOX_MASK : 0; + + coverVariable = tCheckBoxValue | tPublicChannel; + + GT_Values.NW.sendToServer(new GT_Packet_WirelessRedstoneCover(side, coverID, coverVariable, tile, tPublicChannel, tCheckBoxValue)); } private class GT_GuiShortTextBox extends GT_GuiIntegerTextBox { @@ -255,17 +254,16 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { @Override public boolean textboxKeyTyped(char c, int key) { - String tText = getText().trim(); int tValue = 0; super.textboxKeyTyped(c, key); int cursorPos = this.getCursorPosition(); - String newText = getText().trim(); - if (newText.length() > 0) { + String tText = getText().trim(); + if (tText.length() > 0) { try { - tValue = Integer.parseInt(newText); + tValue = Integer.parseInt(tText); } catch (NumberFormatException ignored) {} if (tValue > MAX_CHANNEL) -- cgit From c970e80681704707144033ecd2f9190b67857cae Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 7 Jun 2021 08:53:23 -0700 Subject: removed covervariable as a parameter and applied proper masking --- .../gregtech/api/net/GT_Packet_WirelessRedstoneCover.java | 14 +++++++------- .../common/covers/GT_Cover_RedstoneWirelessBase.java | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java b/src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java index 64ac09c59e..3ce0b48821 100644 --- a/src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java +++ b/src/main/java/gregtech/api/net/GT_Packet_WirelessRedstoneCover.java @@ -14,6 +14,8 @@ import net.minecraftforge.common.DimensionManager; public class GT_Packet_WirelessRedstoneCover extends GT_Packet_TileEntityCover { private static final int PRIVATE_MASK = 0xFFFE0000; + private static final int PUBLIC_MASK = 0x0000FFFF; + private static final int CHECKBOX_MASK = 0x00010000; private EntityPlayerMP mPlayer; private int mPublicChannel; @@ -23,14 +25,14 @@ public class GT_Packet_WirelessRedstoneCover extends GT_Packet_TileEntityCover { super(); } - public GT_Packet_WirelessRedstoneCover(int mX, short mY, int mZ, byte coverSide, int coverID, int coverData, int dimID, int publicChannel, int checkBoxValue) { - super(mX, mY, mZ, coverSide, coverID, coverData, dimID); + public GT_Packet_WirelessRedstoneCover(int mX, short mY, int mZ, byte coverSide, int coverID, int dimID, int publicChannel, int checkBoxValue) { + super(mX, mY, mZ, coverSide, coverID, 0, dimID); mPublicChannel = publicChannel; mCheckBoxValue = checkBoxValue; } - public GT_Packet_WirelessRedstoneCover(byte coverSide, int coverID, int coverData, ICoverable tile, int publicChannel, int checkBoxValue) { - super(coverSide, coverID, coverData, tile); + public GT_Packet_WirelessRedstoneCover(byte coverSide, int coverID, ICoverable tile, int publicChannel, int checkBoxValue) { + super(coverSide, coverID, 0, tile); mPublicChannel = publicChannel; mCheckBoxValue = checkBoxValue; } @@ -55,7 +57,6 @@ public class GT_Packet_WirelessRedstoneCover extends GT_Packet_TileEntityCover { aOut.writeByte(side); aOut.writeInt(coverID); - aOut.writeInt(coverData); aOut.writeInt(dimID); @@ -72,7 +73,6 @@ public class GT_Packet_WirelessRedstoneCover extends GT_Packet_TileEntityCover { aData.readByte(), aData.readInt(), - aData.readInt(), aData.readInt(), @@ -87,7 +87,7 @@ public class GT_Packet_WirelessRedstoneCover extends GT_Packet_TileEntityCover { TileEntity tile = world.getTileEntity(mX, mY, mZ); if (tile instanceof IGregTechTileEntity && !((IGregTechTileEntity) tile).isDead()) { int tPrivateChannel = (mCheckBoxValue > 0) ? mPlayer.getUniqueID().hashCode() & PRIVATE_MASK : 0; - int tCoverData = tPrivateChannel | mCheckBoxValue | mPublicChannel; + int tCoverData = tPrivateChannel | (mCheckBoxValue & CHECKBOX_MASK) | (mPublicChannel & PUBLIC_MASK); ((IGregTechTileEntity) tile).receiveCoverData(side, coverID, tCoverData); } } 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 fac6fa1d34..7070b7ad18 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java @@ -217,7 +217,7 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { coverVariable = tCheckBoxValue | tPublicChannel; fBox.setText(Integer.toString(tPublicChannel)); - GT_Values.NW.sendToServer(new GT_Packet_WirelessRedstoneCover(side, coverID, coverVariable, tile, tPublicChannel, tCheckBoxValue)); + GT_Values.NW.sendToServer(new GT_Packet_WirelessRedstoneCover(side, coverID, tile, tPublicChannel, tCheckBoxValue)); } @Override @@ -243,7 +243,7 @@ public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { coverVariable = tCheckBoxValue | tPublicChannel; - GT_Values.NW.sendToServer(new GT_Packet_WirelessRedstoneCover(side, coverID, coverVariable, tile, tPublicChannel, tCheckBoxValue)); + GT_Values.NW.sendToServer(new GT_Packet_WirelessRedstoneCover(side, coverID, tile, tPublicChannel, tCheckBoxValue)); } private class GT_GuiShortTextBox extends GT_GuiIntegerTextBox { -- cgit