From f4b999217c9ddc5bf7d86df33795d094faa547ee Mon Sep 17 00:00:00 2001 From: games647 Date: Mon, 26 Dec 2016 10:44:09 +0100 Subject: [PATCH] Fix sending empty inventories on logout for versions above 1.11 (Fixes #1039) --- pom.xml | 10 +++++----- .../protocollib/InventoryPacketAdapter.java | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 968e44c6..0648d981 100644 --- a/pom.xml +++ b/pom.xml @@ -563,7 +563,7 @@ com.comphenix.protocol ProtocolLib-API - 4.1.0-SNAPSHOT + 4.2.0 provided @@ -906,10 +906,10 @@ compile true - - org.yaml - snakeyaml - + + org.yaml + snakeyaml + diff --git a/src/main/java/fr/xephi/authme/listener/protocollib/InventoryPacketAdapter.java b/src/main/java/fr/xephi/authme/listener/protocollib/InventoryPacketAdapter.java index c7abf96e..48cf1868 100644 --- a/src/main/java/fr/xephi/authme/listener/protocollib/InventoryPacketAdapter.java +++ b/src/main/java/fr/xephi/authme/listener/protocollib/InventoryPacketAdapter.java @@ -22,13 +22,18 @@ import com.comphenix.protocol.ProtocolManager; import com.comphenix.protocol.events.PacketAdapter; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketEvent; +import com.comphenix.protocol.reflect.StructureModifier; + import fr.xephi.authme.AuthMe; import fr.xephi.authme.data.auth.PlayerCache; + import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; + import java.lang.reflect.InvocationTargetException; import java.util.Arrays; +import java.util.List; import java.util.logging.Level; class InventoryPacketAdapter extends PacketAdapter { @@ -72,7 +77,16 @@ class InventoryPacketAdapter extends PacketAdapter { ItemStack[] blankInventory = new ItemStack[inventorySize]; Arrays.fill(blankInventory, new ItemStack(Material.AIR)); - inventoryPacket.getItemArrayModifier().write(0, blankInventory); + + //old minecraft versions + StructureModifier itemArrayModifier = inventoryPacket.getItemArrayModifier(); + if (itemArrayModifier.size() > 0) { + itemArrayModifier.write(0, blankInventory); + } else { + //minecraft versions above 1.11 + StructureModifier> itemListModifier = inventoryPacket.getItemListModifier(); + itemListModifier.write(0, Arrays.asList(blankInventory)); + } try { protocolManager.sendServerPacket(player, inventoryPacket, false);