diff --git a/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java b/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java index 5ef68334f..9fa56fc9b 100644 --- a/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java +++ b/src/main/java/us/myles/ViaVersion/transformers/IncomingTransformer.java @@ -2,7 +2,10 @@ package us.myles.ViaVersion.transformers; import io.netty.buffer.ByteBuf; import io.netty.channel.Channel; + +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; + import us.myles.ViaVersion.*; import us.myles.ViaVersion.handlers.ViaVersionInitializer; import us.myles.ViaVersion.packets.PacketType; @@ -89,11 +92,8 @@ public class IncomingTransformer { throw new CancelException(); } output.writeByte(status); - // read position - Long pos = input.readLong(); - output.writeLong(pos); - short face = input.readUnsignedByte(); - output.writeByte(face); + // write remaining bytes + output.writeBytes(input); return; } if (packet == PacketType.PLAY_CLICK_WINDOW) { @@ -205,16 +205,30 @@ public class IncomingTransformer { } if (packet == PacketType.PLAY_USE_ITEM) { output.clear(); - PacketUtil.writeVarInt(PacketType.PLAY_PLAYER_BLOCK_PLACEMENT.getPacketID(), output); - // Simulate using item :) - output.writeLong(-1L); - output.writeByte(-1); - // write item in hand - output.writeShort(-1); - - output.writeByte(-1); - output.writeByte(-1); - output.writeByte(-1); + PacketUtil.writeVarInt(PacketType.PLAY_PLAYER_BLOCK_PLACEMENT.getPacketID(), output); + // Simulate using item :) + output.writeLong(-1L); + output.writeByte(255); + // write item in hand + ItemStack inHand = Core.getHandItem(info); + Object item = null; + try { + Method m = ReflectionUtil.obc("inventory.CraftItemStack").getDeclaredMethod("asNMSCopy", ItemStack.class); + item = m.invoke(null, inHand); + } catch (NoSuchMethodException e) { + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (InvocationTargetException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + PacketUtil.writeItem(item, output); + + output.writeByte(-1); + output.writeByte(-1); + output.writeByte(-1); return; } output.writeBytes(input); diff --git a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java index 95d3dfc83..7a40a28ff 100644 --- a/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java +++ b/src/main/java/us/myles/ViaVersion/transformers/OutgoingTransformer.java @@ -237,12 +237,16 @@ public class OutgoingTransformer { int data = input.readInt(); output.writeInt(data); - - short vX = input.readableBytes() >= 16 ? input.readShort() : 0; + + short vX = 0, vY = 0, vZ = 0; + if(data > 0) + { + vX = input.readShort(); + vY = input.readShort(); + vZ = input.readShort(); + } output.writeShort(vX); - short vY = input.readableBytes() >= 16 ? input.readShort() : 0; output.writeShort(vY); - short vZ = input.readableBytes() >= 16 ? input.readShort() : 0; output.writeShort(vZ); return;