From 7c40a073d8b173dde3f7c13985b5b587e6158894 Mon Sep 17 00:00:00 2001 From: Patrick Seidel Date: Thu, 27 Dec 2012 16:30:08 -0500 Subject: [PATCH] Add ability to change player item in hand. Adds BUKKIT-3318 --- src/main/java/net/minecraft/server/PlayerConnection.java | 4 ++++ .../craftbukkit/inventory/CraftInventoryPlayer.java | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java index 13c27051ad..00c6861528 100644 --- a/src/main/java/net/minecraft/server/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/PlayerConnection.java @@ -760,6 +760,10 @@ public class PlayerConnection extends Connection { if (packet16blockitemswitch.itemInHandIndex >= 0 && packet16blockitemswitch.itemInHandIndex < PlayerInventory.getHotbarSize()) { PlayerItemHeldEvent event = new PlayerItemHeldEvent(this.getPlayer(), this.player.inventory.itemInHandIndex, packet16blockitemswitch.itemInHandIndex); this.server.getPluginManager().callEvent(event); + if (event.isCancelled()) { + this.sendPacket(new Packet16BlockItemSwitch(this.player.inventory.itemInHandIndex)); + return; + } // CraftBukkit end this.player.inventory.itemInHandIndex = packet16blockitemswitch.itemInHandIndex; diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java index 9c9594942e..50ae773a84 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryPlayer.java @@ -1,7 +1,10 @@ package org.bukkit.craftbukkit.inventory; +import net.minecraft.server.Packet16BlockItemSwitch; import net.minecraft.server.PlayerInventory; +import org.apache.commons.lang.Validate; +import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.entity.HumanEntity; import org.bukkit.inventory.EntityEquipment; import org.bukkit.inventory.ItemStack; @@ -33,6 +36,12 @@ public class CraftInventoryPlayer extends CraftInventory implements org.bukkit.i return getInventory().itemInHandIndex; } + public void setHeldItemSlot(int slot) { + Validate.isTrue(slot >= 0 && slot < PlayerInventory.getHotbarSize(), "Slot is not between 0 and 8 inclusive"); + this.getInventory().itemInHandIndex = slot; + ((CraftPlayer) this.getHolder()).getHandle().playerConnection.sendPacket(new Packet16BlockItemSwitch(slot)); + } + public ItemStack getHelmet() { return getItem(getSize() + 3); }