Store data using byte array

This commit is contained in:
Adrian Bergqvist 2023-11-27 21:03:31 +01:00
parent fa97806e2e
commit ba3132c1bd
No known key found for this signature in database
GPG Key ID: FAE7D8EDE225E686
4 changed files with 20 additions and 12 deletions

View File

@ -1,24 +1,30 @@
package org.adde0109.ambassador.forge.packet;
import com.velocitypowered.proxy.protocol.util.DeferredByteBufHolder;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
public class GenericForgeLoginWrapperPacket<T extends Context> extends DeferredByteBufHolder implements IForgeLoginWrapperPacket<T> {
public class GenericForgeLoginWrapperPacket<T extends Context> implements IForgeLoginWrapperPacket<T> {
private final byte[] content;
private final T context;
GenericForgeLoginWrapperPacket(ByteBuf input, T context) {
super(input);
GenericForgeLoginWrapperPacket(byte[] content, T context) {
this.content = content;
this.context = context;
}
static public GenericForgeLoginWrapperPacket<Context> create(ByteBuf input, Context context) {
return new GenericForgeLoginWrapperPacket<>(input.retain(), context);
static public GenericForgeLoginWrapperPacket<?> read(ByteBuf input, Context context) {
byte[] content = new byte[input.readableBytes()];
input.readBytes(content);
return new GenericForgeLoginWrapperPacket<>(content, context);
}
@Override
public ByteBuf encode() {
return content();
ByteBuf buf = Unpooled.buffer();
buf.writeBytes(content);
return buf;
}
@Override

View File

@ -3,7 +3,8 @@ package org.adde0109.ambassador.forge.packet;
import io.netty.buffer.ByteBuf;
public class ModDataPacket extends GenericForgeLoginWrapperPacket<Context> {
ModDataPacket(ByteBuf input, Context context) {
super(input, context);
ModDataPacket(byte[] content, Context context) {
super(content, context);
}
}

View File

@ -70,7 +70,7 @@ public class ForgeLoginWrapperCodec extends MessageToMessageCodec<DeferredByteBu
case 5:
if (FML3) {
buf.readerIndex(originalReaderIndex);
out.add(ModDataPacket.create(buf.retain(), context));
out.add(ModDataPacket.read(buf, context));
break;
}
default:
@ -80,7 +80,7 @@ public class ForgeLoginWrapperCodec extends MessageToMessageCodec<DeferredByteBu
}
} catch (DecoderException e) {
buf.readerIndex(originalReaderIndex);
out.add(GenericForgeLoginWrapperPacket.create(buf.retain(), context));
out.add(GenericForgeLoginWrapperPacket.read(buf, context));
}
}
@ -95,6 +95,7 @@ public class ForgeLoginWrapperCodec extends MessageToMessageCodec<DeferredByteBu
ProtocolUtils.writeString(wrapped, "fml:handshake");
ProtocolUtils.writeVarInt(wrapped, encoded.readableBytes());
wrapped.writeBytes(encoded);
encoded.release();
}
if (msg.getContext() instanceof Context.ClientContext clientContext) {

View File

@ -27,7 +27,7 @@ public class FML2CRPMResetCompleteDecoder extends ChannelInboundHandlerAdapter {
boolean success = buf.readBoolean();
if (id == 98) {
try {
ctx.fireChannelRead(GenericForgeLoginWrapperPacket.create(
ctx.fireChannelRead(GenericForgeLoginWrapperPacket.read(
Unpooled.EMPTY_BUFFER, Context.createContext(id, success)));
} finally {
buf.release();