From d57ef2b303c0fd351df7b268ee1799a47cb8af36 Mon Sep 17 00:00:00 2001 From: mmxw11 Date: Thu, 28 Sep 2017 20:44:49 +0300 Subject: [PATCH] Fix inv provider not working on 1.8 servers --- .../BukkitInvContainerItemProvider.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/providers/BukkitInvContainerItemProvider.java b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/providers/BukkitInvContainerItemProvider.java index d4e7746c1..c52256651 100644 --- a/bukkit/src/main/java/us/myles/ViaVersion/bukkit/providers/BukkitInvContainerItemProvider.java +++ b/bukkit/src/main/java/us/myles/ViaVersion/bukkit/providers/BukkitInvContainerItemProvider.java @@ -16,6 +16,7 @@ import org.bukkit.scheduler.BukkitScheduler; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.protocol.ProtocolRegistry; +import us.myles.ViaVersion.api.protocol.ProtocolVersion; import us.myles.ViaVersion.bukkit.protocol1_12to1_11_1.BukkitInvContainerUpdateTask; import us.myles.ViaVersion.bukkit.util.NMSUtil; import us.myles.ViaVersion.protocols.base.ProtocolInfo; @@ -68,6 +69,9 @@ public class BukkitInvContainerItemProvider extends InvContainerItemProvider { } InventoryView inv = p.getOpenInventory(); short slotId = storage.getSlotId(); + if (slotId < 0) { // clicked out of inv slot + return null; + } if (slotId > inv.countSlots()) { return null; // wrong container open? } @@ -85,9 +89,9 @@ public class BukkitInvContainerItemProvider extends InvContainerItemProvider { ReflectionUtil.set(cinstance, "d", storage.getActionNumber()); ReflectionUtil.set(cinstance, "item", nmsItem); int protocolId = ProtocolRegistry.SERVER_PROTOCOL; - if (protocolId == 47) { + if (protocolId == ProtocolVersion.v1_8.getId()) { ReflectionUtil.set(cinstance, "shift", 1); - } else if (protocolId >= 107) { // 1.9+ + } else if (protocolId >= ProtocolVersion.v1_9.getId()) { // 1.9+ ReflectionUtil.set(cinstance, "shift", clickTypeEnum); } } catch (Exception e) { @@ -128,14 +132,17 @@ public class BukkitInvContainerItemProvider extends InvContainerItemProvider { } try { this.wclickPacketClass = NMSUtil.nms("PacketPlayInWindowClick"); - Class eclassz = NMSUtil.nms("InventoryClickType"); - Object[] constants = eclassz.getEnumConstants(); - this.clickTypeEnum = constants[1]; // QUICK_MOVE + int protocolId = ProtocolRegistry.SERVER_PROTOCOL; + if (protocolId >= ProtocolVersion.v1_9.getId()) { + Class eclassz = NMSUtil.nms("InventoryClickType"); + Object[] constants = eclassz.getEnumConstants(); + this.clickTypeEnum = constants[1]; // QUICK_MOVE + } Class citemStack = NMSUtil.obc("inventory.CraftItemStack"); this.nmsItemMethod = citemStack.getDeclaredMethod("asNMSCopy", ItemStack.class); } catch (Exception e) { this.supported = false; - return; + throw new RuntimeException("Couldn't find required inventory classes", e); } try { this.ephandle = NMSUtil.obc("entity.CraftPlayer").getDeclaredMethod("getHandle"); @@ -159,10 +166,10 @@ public class BukkitInvContainerItemProvider extends InvContainerItemProvider { private boolean isSupported() { int protocolId = ProtocolRegistry.SERVER_PROTOCOL; - if (protocolId >= 47 && protocolId <= 316) { - return true; // 1.8 + if (protocolId >= ProtocolVersion.v1_8.getId() && protocolId <= ProtocolVersion.v1_11_1.getId()) { + return true; // 1.8-1.11.2 } - // this is not needed on 1.12+ + // this is not needed on 1.12+ servers return false; } } \ No newline at end of file