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

View File

@ -3,7 +3,8 @@ package org.adde0109.ambassador.forge.packet;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
public class ModDataPacket extends GenericForgeLoginWrapperPacket<Context> { 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: case 5:
if (FML3) { if (FML3) {
buf.readerIndex(originalReaderIndex); buf.readerIndex(originalReaderIndex);
out.add(ModDataPacket.create(buf.retain(), context)); out.add(ModDataPacket.read(buf, context));
break; break;
} }
default: default:
@ -80,7 +80,7 @@ public class ForgeLoginWrapperCodec extends MessageToMessageCodec<DeferredByteBu
} }
} catch (DecoderException e) { } catch (DecoderException e) {
buf.readerIndex(originalReaderIndex); 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.writeString(wrapped, "fml:handshake");
ProtocolUtils.writeVarInt(wrapped, encoded.readableBytes()); ProtocolUtils.writeVarInt(wrapped, encoded.readableBytes());
wrapped.writeBytes(encoded); wrapped.writeBytes(encoded);
encoded.release();
} }
if (msg.getContext() instanceof Context.ClientContext clientContext) { if (msg.getContext() instanceof Context.ClientContext clientContext) {

View File

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