Skip to content

Commit 4728f33

Browse files
committed
Fix stackoverflowerror when another plugin that relocates its channel handler is present
1 parent 2497bea commit 4728f33

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

src/main/java/com/moulberry/axiom/AxiomPaper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ public boolean hasInfiniteMaterials() {
221221
@Override
222222
public void afterInitChannel(@NonNull Channel channel) {
223223
Connection connection = (Connection) channel.pipeline().get("packet_handler");
224-
AxiomBigPayloadHandler.apply(channel.pipeline(), new AxiomBigPayloadHandler(payloadId, connection, largePayloadHandlers));
224+
AxiomBigPayloadHandler.apply(channel.pipeline(), new AxiomBigPayloadHandler(payloadId, connection, largePayloadHandlers, true));
225225
}
226226
});
227227
}

src/main/java/com/moulberry/axiom/packet/AxiomBigPayloadHandler.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@ public class AxiomBigPayloadHandler extends MessageToMessageDecoder<ByteBuf> {
3434
private final int payloadId;
3535
private final Connection connection;
3636
private final Map<String, PacketHandler> packetHandlers;
37+
private boolean handleUserEvents;
3738

38-
public AxiomBigPayloadHandler(int payloadId, Connection connection, Map<String, PacketHandler> packetHandlers) {
39+
public AxiomBigPayloadHandler(int payloadId, Connection connection, Map<String, PacketHandler> packetHandlers, boolean handleUserEvents) {
3940
this.payloadId = payloadId;
4041
this.connection = connection;
4142
this.packetHandlers = packetHandlers;
43+
this.handleUserEvents = handleUserEvents;
4244
}
4345

4446
@Override
@@ -122,9 +124,16 @@ public static void apply(ChannelPipeline pipeline, AxiomBigPayloadHandler handle
122124

123125
@Override
124126
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
125-
if (evt == ConnectionEvent.COMPRESSION_THRESHOLD_SET || evt == ConnectionEvent.COMPRESSION_DISABLED) {
126-
apply(ctx.pipeline(), new AxiomBigPayloadHandler(this.payloadId, this.connection, this.packetHandlers));
127+
if (this.handleUserEvents) {
128+
if (evt == ConnectionEvent.COMPRESSION_THRESHOLD_SET || evt == ConnectionEvent.COMPRESSION_DISABLED) {
129+
AxiomBigPayloadHandler handler = new AxiomBigPayloadHandler(this.payloadId, this.connection, this.packetHandlers, false);
130+
apply(ctx.pipeline(), handler);
131+
super.userEventTriggered(ctx, evt);
132+
handler.handleUserEvents = true;
133+
return;
134+
}
127135
}
136+
128137
super.userEventTriggered(ctx, evt);
129138
}
130139

0 commit comments

Comments
 (0)