Skip to content

Commit e5c8da6

Browse files
authored
Improve Logging (again) for Unread Packet Data (#2705)
1 parent 8f90f80 commit e5c8da6

File tree

3 files changed

+48
-33
lines changed

3 files changed

+48
-33
lines changed

src/main/java/gregtech/api/metatileentity/MetaTileEntity.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1083,10 +1083,8 @@ public void receiveCustomData(int dataId, @NotNull PacketBuffer buf) {
10831083
if (trait == null) {
10841084
GTLog.logger.warn("Could not find MTETrait for id: {} at position {}.", traitNetworkId, getPos());
10851085
} else {
1086+
ISyncedTileEntity.addCode(internalId, trait);
10861087
trait.receiveCustomData(internalId, buf);
1087-
1088-
// this should be fine, as nothing else is read after this
1089-
ISyncedTileEntity.checkCustomData(internalId, buf, trait);
10901088
}
10911089
} else if (dataId == COVER_ATTACHED_MTE) {
10921090
CoverSaveHandler.readCoverPlacement(buf, this);
@@ -1102,10 +1100,8 @@ public void receiveCustomData(int dataId, @NotNull PacketBuffer buf) {
11021100
Cover cover = getCoverAtSide(coverSide);
11031101
int internalId = buf.readVarInt();
11041102
if (cover != null) {
1103+
ISyncedTileEntity.addCode(internalId, cover);
11051104
cover.readCustomData(internalId, buf);
1106-
1107-
// this should be fine, as nothing else is read after this
1108-
ISyncedTileEntity.checkCustomData(internalId, buf, cover);
11091105
}
11101106
} else if (dataId == UPDATE_SOUND_MUFFLED) {
11111107
this.muffled = buf.readBoolean();

src/main/java/gregtech/api/metatileentity/SyncedTileEntityBase.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package gregtech.api.metatileentity;
22

33
import gregtech.api.block.BlockStateTileEntity;
4-
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
54
import gregtech.api.metatileentity.interfaces.ISyncedTileEntity;
65
import gregtech.api.network.PacketDataList;
76

@@ -80,12 +79,9 @@ public final void onDataPacket(@NotNull NetworkManager net, @NotNull SPacketUpda
8079
for (String discriminatorKey : entryTag.getKeySet()) {
8180
ByteBuf backedBuffer = Unpooled.copiedBuffer(entryTag.getByteArray(discriminatorKey));
8281
int dataId = Integer.parseInt(discriminatorKey);
82+
ISyncedTileEntity.addCode(dataId, this);
8383
receiveCustomData(dataId, new PacketBuffer(backedBuffer));
84-
85-
MetaTileEntity mte = null;
86-
if (this instanceof IGregTechTileEntity gtte)
87-
mte = gtte.getMetaTileEntity();
88-
ISyncedTileEntity.checkCustomData(dataId, backedBuffer, mte == null ? this : mte);
84+
ISyncedTileEntity.checkData(backedBuffer);
8985
}
9086
}
9187
}
@@ -105,11 +101,8 @@ public final void handleUpdateTag(@NotNull NBTTagCompound tag) {
105101
super.readFromNBT(tag); // deserializes Forge data and capabilities
106102
byte[] updateData = tag.getByteArray("d");
107103
ByteBuf backedBuffer = Unpooled.copiedBuffer(updateData);
104+
ISyncedTileEntity.track(this);
108105
receiveInitialSyncData(new PacketBuffer(backedBuffer));
109-
110-
MetaTileEntity mte = null;
111-
if (this instanceof IGregTechTileEntity gtte)
112-
mte = gtte.getMetaTileEntity();
113-
ISyncedTileEntity.checkInitialData(backedBuffer, mte == null ? this : mte);
106+
ISyncedTileEntity.checkData(backedBuffer);
114107
}
115108
}

src/main/java/gregtech/api/metatileentity/interfaces/ISyncedTileEntity.java

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import net.minecraft.util.math.BlockPos;
1111

1212
import io.netty.buffer.ByteBuf;
13+
import it.unimi.dsi.fastutil.ints.IntArrayList;
14+
import it.unimi.dsi.fastutil.ints.IntList;
1315
import org.jetbrains.annotations.NotNull;
1416

1517
import java.util.function.Consumer;
@@ -20,6 +22,8 @@
2022
public interface ISyncedTileEntity {
2123

2224
Consumer<PacketBuffer> NO_OP = buf -> {};
25+
IntList datacodes = new IntArrayList();
26+
ThreadLocal<Object> tracked = ThreadLocal.withInitial(() -> null);
2327

2428
/**
2529
* Used to sync data from Server -> Client.
@@ -119,26 +123,25 @@ default void writeCustomData(int discriminator) {
119123
*/
120124
void receiveCustomData(int discriminator, @NotNull PacketBuffer buf);
121125

122-
static void checkCustomData(int discriminator, @NotNull ByteBuf buf, Object obj) {
123-
if (buf.readableBytes() == 0) return;
124-
125-
GTLog.logger.error(
126-
"Class {} failed to finish reading receiveCustomData with discriminator {} and {} bytes remaining",
127-
stringify(obj), GregtechDataCodes.getNameFor(discriminator), buf.readableBytes());
128-
129-
buf.clear(); // clear to prevent further logging
130-
}
131-
132-
static void checkInitialData(@NotNull ByteBuf buf, Object obj) {
133-
if (buf.readableBytes() == 0) return;
134-
135-
GTLog.logger.error("Class {} failed to finish reading initialSyncData with {} bytes remaining",
136-
stringify(obj), buf.readableBytes());
126+
static void checkData(@NotNull ByteBuf buf) {
127+
if (buf.readableBytes() != 0) {
128+
if (datacodes.isEmpty()) {
129+
GTLog.logger.error("Class {} failed to finish reading initialSyncData with {} bytes remaining",
130+
stringify(tracked.get()), buf.readableBytes());
131+
} else {
132+
GTLog.logger.error(
133+
"Class {} failed to finish reading receiveCustomData at code path [{}] with {} bytes remaining",
134+
stringify(tracked.get()), getCodePath(), buf.readableBytes());
135+
}
136+
}
137137

138-
buf.clear(); // clear to prevent further logging
138+
reset();
139139
}
140140

141141
static String stringify(Object obj) {
142+
if (obj instanceof IGregTechTileEntity gtte && gtte.getMetaTileEntity() != null)
143+
obj = gtte.getMetaTileEntity();
144+
142145
StringBuilder builder = new StringBuilder(obj.getClass().getSimpleName());
143146

144147
BlockPos pos = null;
@@ -158,4 +161,27 @@ static String stringify(Object obj) {
158161

159162
return builder.toString();
160163
}
164+
165+
static void addCode(int code, Object trackedObject) {
166+
datacodes.add(code);
167+
track(trackedObject);
168+
}
169+
170+
static void track(Object trackedObject) {
171+
tracked.set(trackedObject);
172+
}
173+
174+
static String getCodePath() {
175+
var builder = new StringBuilder();
176+
for (int i = 0; i < datacodes.size(); i++) {
177+
builder.append(GregtechDataCodes.getNameFor(datacodes.get(i)));
178+
if (i < datacodes.size() - 1) builder.append(" > ");
179+
}
180+
return builder.toString();
181+
}
182+
183+
static void reset() {
184+
datacodes.clear();
185+
tracked.remove();
186+
}
161187
}

0 commit comments

Comments
 (0)