From 4c272de77fd2e06c6c4b00f4de649fec0aa8914f Mon Sep 17 00:00:00 2001 From: Gunther De Wachter Date: Wed, 19 Jul 2017 13:50:21 +0200 Subject: [PATCH] Temporary fix for serverside JEI and valueconfig packets. It's not pretty but should do until we rewrite the packet/network handler. --- .../java/appeng/core/sync/AppEngPacket.java | 24 +++++++++++++++++++ .../core/sync/packets/PacketJEIRecipe.java | 2 +- .../core/sync/packets/PacketValueConfig.java | 3 +-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/appeng/core/sync/AppEngPacket.java b/src/main/java/appeng/core/sync/AppEngPacket.java index bdc35c1cb..ed402dae8 100644 --- a/src/main/java/appeng/core/sync/AppEngPacket.java +++ b/src/main/java/appeng/core/sync/AppEngPacket.java @@ -19,6 +19,7 @@ package appeng.core.sync; +import java.io.ByteArrayInputStream; import java.io.IOException; import io.netty.buffer.ByteBuf; @@ -93,6 +94,29 @@ public abstract class AppEngPacket implements Packet throw new RuntimeException( "Not Implemented" ); } + // TODO: Figure out why Forge/Minecraft on the server sets the stream data buffer to PooledUnsafeDirectByteBuf + + public ByteArrayInputStream getPacketByteArray ( ByteBuf stream, int readerIndex, int readableBytes ) + { + final ByteArrayInputStream bytes; + if( stream.hasArray() ) + { + bytes = new ByteArrayInputStream( stream.array(), readerIndex, readableBytes ); + } + else + { + byte[] data = new byte[stream.capacity()]; + stream.getBytes( readerIndex, data, 0, readableBytes ); + bytes = new ByteArrayInputStream( data ); + } + return bytes; + } + + public ByteArrayInputStream getPacketByteArray ( ByteBuf stream ) + { + return getPacketByteArray( stream, 0, stream.readableBytes() ); + } + public void setCallParam( final PacketCallState call ) { this.caller = call; diff --git a/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java b/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java index c11cf1da5..31d417893 100644 --- a/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java +++ b/src/main/java/appeng/core/sync/packets/PacketJEIRecipe.java @@ -70,7 +70,7 @@ public class PacketJEIRecipe extends AppEngPacket // automatic. public PacketJEIRecipe( final ByteBuf stream ) throws IOException { - final ByteArrayInputStream bytes = new ByteArrayInputStream( stream.array() ); + final ByteArrayInputStream bytes = this.getPacketByteArray( stream ); bytes.skip( stream.readerIndex() ); final NBTTagCompound comp = CompressedStreamTools.readCompressed( bytes ); if( comp != null ) diff --git a/src/main/java/appeng/core/sync/packets/PacketValueConfig.java b/src/main/java/appeng/core/sync/packets/PacketValueConfig.java index d3c784c28..67f8f9e87 100644 --- a/src/main/java/appeng/core/sync/packets/PacketValueConfig.java +++ b/src/main/java/appeng/core/sync/packets/PacketValueConfig.java @@ -19,7 +19,6 @@ package appeng.core.sync.packets; -import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; @@ -66,7 +65,7 @@ public class PacketValueConfig extends AppEngPacket // automatic. public PacketValueConfig( final ByteBuf stream ) throws IOException { - final DataInputStream dis = new DataInputStream( new ByteArrayInputStream( stream.array(), stream.readerIndex(), stream.readableBytes() ) ); + final DataInputStream dis = new DataInputStream( this.getPacketByteArray( stream, stream.readerIndex(), stream.readableBytes() ) ); this.Name = dis.readUTF(); this.Value = dis.readUTF(); // dis.close();