mirror of https://github.com/Minestom/Minestom.git
36 lines
1.3 KiB
Java
36 lines
1.3 KiB
Java
package net.minestom.server.listener;
|
|
|
|
import net.minestom.server.entity.Player;
|
|
import net.minestom.server.inventory.PlayerInventory;
|
|
import net.minestom.server.item.ItemStack;
|
|
import net.minestom.server.network.packet.client.play.ClientCreativeInventoryActionPacket;
|
|
import net.minestom.server.utils.inventory.PlayerInventoryUtils;
|
|
|
|
import java.util.Objects;
|
|
|
|
public final class CreativeInventoryActionListener {
|
|
public static void listener(ClientCreativeInventoryActionPacket packet, Player player) {
|
|
if (!player.isCreative()) return;
|
|
short slot = packet.slot();
|
|
final ItemStack item = packet.item();
|
|
if (slot == -1) {
|
|
// Drop item
|
|
player.dropItem(item);
|
|
return;
|
|
}
|
|
// Bounds check
|
|
// 0 is crafting result inventory slot, ignore attempts to place into it
|
|
if (slot < 1 || slot > PlayerInventoryUtils.OFFHAND_SLOT) {
|
|
return;
|
|
}
|
|
// Set item
|
|
slot = (short) PlayerInventoryUtils.convertPlayerInventorySlot(slot, PlayerInventoryUtils.OFFSET);
|
|
PlayerInventory inventory = player.getInventory();
|
|
if (Objects.equals(inventory.getItemStack(slot), item)) {
|
|
// Item is already present, ignore
|
|
return;
|
|
}
|
|
inventory.setItemStack(slot, item);
|
|
}
|
|
}
|