Java 类net.minecraft.server.PacketPlayOutSetSlot 实例源码

项目:CraftBukkit    文件:CraftEventFactory.java   
public static void handleEditBookEvent(EntityPlayer player, ItemStack newBookItem) {
    int itemInHandIndex = player.inventory.itemInHandIndex;

    PlayerEditBookEvent editBookEvent = new PlayerEditBookEvent(player.getBukkitEntity(), player.inventory.itemInHandIndex, (BookMeta) CraftItemStack.getItemMeta(player.inventory.getItemInHand()), (BookMeta) CraftItemStack.getItemMeta(newBookItem), newBookItem.getItem() == Items.WRITTEN_BOOK);
    player.world.getServer().getPluginManager().callEvent(editBookEvent);
    ItemStack itemInHand = player.inventory.getItem(itemInHandIndex);

    // If they've got the same item in their hand, it'll need to be updated.
    if (itemInHand != null && itemInHand.getItem() == Items.BOOK_AND_QUILL) {
        if (!editBookEvent.isCancelled()) {
            CraftItemStack.setItemMeta(itemInHand, editBookEvent.getNewBookMeta());
            if (editBookEvent.isSigning()) {
                itemInHand.setItem(Items.WRITTEN_BOOK);
            }
        }

        // Client will have updated its idea of the book item; we need to overwrite that
        Slot slot = player.activeContainer.getSlot(player.inventory, itemInHandIndex);
        player.playerConnection.sendPacket(new PacketPlayOutSetSlot(player.activeContainer.windowId, slot.rawSlotIndex, itemInHand));
    }
}
项目:Tweakkit-Server    文件:CraftEventFactory.java   
public static void handleEditBookEvent(EntityPlayer player, ItemStack newBookItem) {
    int itemInHandIndex = player.inventory.itemInHandIndex;

    PlayerEditBookEvent editBookEvent = new PlayerEditBookEvent(player.getBukkitEntity(), player.inventory.itemInHandIndex, (BookMeta) CraftItemStack.getItemMeta(player.inventory.getItemInHand()), (BookMeta) CraftItemStack.getItemMeta(newBookItem), newBookItem.getItem() == Items.WRITTEN_BOOK);
    player.world.getServer().getPluginManager().callEvent(editBookEvent);
    ItemStack itemInHand = player.inventory.getItem(itemInHandIndex);

    // If they've got the same item in their hand, it'll need to be updated.
    if (itemInHand != null && itemInHand.getItem() == Items.BOOK_AND_QUILL) {
        if (!editBookEvent.isCancelled()) {
            CraftItemStack.setItemMeta(itemInHand, editBookEvent.getNewBookMeta());
            if (editBookEvent.isSigning()) {
                itemInHand.setItem(Items.WRITTEN_BOOK);
            }
        }

        // Client will have updated its idea of the book item; we need to overwrite that
        Slot slot = player.activeContainer.getSlot(player.inventory, itemInHandIndex);
        player.playerConnection.sendPacket(new PacketPlayOutSetSlot(player.activeContainer.windowId, slot.rawSlotIndex, itemInHand));
    }
}
项目:Craftbukkit    文件:CraftInventoryPlayer.java   
@Override
public void setItem(int index, ItemStack item) {
    super.setItem(index, item);
    if (this.getHolder() == null) return;
    EntityPlayer player = ((CraftPlayer) this.getHolder()).getHandle();
    if (player.playerConnection == null) return;
    // PacketPlayOutSetSlot places the items differently than setItem()
    //
    // Between, and including, index 9 (the first index outside of the hotbar) and index 35 (the last index before
    // armor slots) both PacketPlayOutSetSlot and setItem() places the items in the player's inventory the same way.
    // Index 9 starts at the upper left corner of the inventory and moves to the right as it increases. When it
    // reaches the end of the line it goes back to the left side of the new line in the inventory. Basically, it
    // follows the path your eyes would follow as you read a book.
    //
    // The player's hotbar is indexed 0-8 in setItem(). The order goes: 0-8 hotbar, 9-35 normal inventory, 36 boots,
    // 37 leggings, 38 chestplate, and 39 helmet. For indexes > 39 an ArrayIndexOutOfBoundsException will be thrown.
    //
    // PacketPlayOutSetSlot works very differently. Slots 0-8 are as follows: 0 crafting output, 1-4 crafting input,
    // 5 helmet, 6 chestplate, 7 leggings, and 8 boots. Then, 9-35 work exactly the same as setItem(). The hotbar
    // for PacketPlayOutSetSlot starts at index 36, and continues to index 44. Items placed where index is < 0 or
    // > 44 have no action. Basically, the upper part of the player's inventory (crafting area and armor slots) is
    // the first "row" of 9 slots for PacketPlayOutSetSlot. From there the rows work as normal, from left to right
    // all the way down, including the hotbar.
    //
    // With this in mind, we have to modify the index we give PacketPlayOutSetSlot to match the index we intended
    // with setItem(). First, if the index is 0-8, we need to add 36, or 4 rows worth of slots, to the index. This
    // will push the item down to the correct spot in the hotbar.
    //
    // Now when index is > 35 (if index > 39 an ArrayIndexOutOfBoundsException will be thrown, so we need not worry
    // about it) then we need to reset the index, and then count backwards  from the "top" of the inventory. That is
    // to say, we first find (index - 36), which will give us the index required for the armor slots. Now, we need
    // to reverse the order of the index from 8. That means we need 0 to correspond to 8, 1 to correspond to 7,
    // 2 to correspond to 6, and 3 to correspond to 5. We do this simply by taking the result of (index - 36) and
    // subtracting that value from 8.
    if (index < PlayerInventory.getHotbarSize())
        index = index + 36;
    else if (index > 35)
        index = 8 - (index - 36);
    player.playerConnection.sendPacket(new PacketPlayOutSetSlot(player.defaultContainer.windowId, index, CraftItemStack.asNMSCopy(item)));
}
项目:SpigotSource    文件:CraftInventoryPlayer.java   
@Override
public void setItem(int index, ItemStack item) {
    super.setItem(index, item);
    if (this.getHolder() == null) return;
    EntityPlayer player = ((CraftPlayer) this.getHolder()).getHandle();
    if (player.playerConnection == null) return;
    // PacketPlayOutSetSlot places the items differently than setItem()
    //
    // Between, and including, index 9 (the first index outside of the hotbar) and index 35 (the last index before
    // armor slots) both PacketPlayOutSetSlot and setItem() places the items in the player's inventory the same way.
    // Index 9 starts at the upper left corner of the inventory and moves to the right as it increases. When it
    // reaches the end of the line it goes back to the left side of the new line in the inventory. Basically, it
    // follows the path your eyes would follow as you read a book.
    //
    // The player's hotbar is indexed 0-8 in setItem(). The order goes: 0-8 hotbar, 9-35 normal inventory, 36 boots,
    // 37 leggings, 38 chestplate, and 39 helmet. For indexes > 39 an ArrayIndexOutOfBoundsException will be thrown.
    //
    // PacketPlayOutSetSlot works very differently. Slots 0-8 are as follows: 0 crafting output, 1-4 crafting input,
    // 5 helmet, 6 chestplate, 7 leggings, and 8 boots. Then, 9-35 work exactly the same as setItem(). The hotbar
    // for PacketPlayOutSetSlot starts at index 36, and continues to index 44. Items placed where index is < 0 or
    // > 44 have no action. Basically, the upper part of the player's inventory (crafting area and armor slots) is
    // the first "row" of 9 slots for PacketPlayOutSetSlot. From there the rows work as normal, from left to right
    // all the way down, including the hotbar.
    //
    // With this in mind, we have to modify the index we give PacketPlayOutSetSlot to match the index we intended
    // with setItem(). First, if the index is 0-8, we need to add 36, or 4 rows worth of slots, to the index. This
    // will push the item down to the correct spot in the hotbar.
    //
    // Now when index is > 35 (if index > 39 an ArrayIndexOutOfBoundsException will be thrown, so we need not worry
    // about it) then we need to reset the index, and then count backwards  from the "top" of the inventory. That is
    // to say, we first find (index - 36), which will give us the index required for the armor slots. Now, we need
    // to reverse the order of the index from 8. That means we need 0 to correspond to 8, 1 to correspond to 7,
    // 2 to correspond to 6, and 3 to correspond to 5. We do this simply by taking the result of (index - 36) and
    // subtracting that value from 8.
    if (index < PlayerInventory.getHotbarSize()) {
        index += 36;
    } else if (index > 39) {
        index += 5; // Off hand
    } else if (index > 35) {
        index = 8 - (index - 36);
    }
    player.playerConnection.sendPacket(new PacketPlayOutSetSlot(player.defaultContainer.windowId, index, CraftItemStack.asNMSCopy(item)));
}