2020-04-24 03:25:58 +02:00
|
|
|
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;
|
|
|
|
|
2021-08-13 23:37:40 +02:00
|
|
|
import java.util.Objects;
|
|
|
|
|
2021-08-13 20:41:59 +02:00
|
|
|
public final class CreativeInventoryActionListener {
|
2020-04-24 03:25:58 +02:00
|
|
|
public static void listener(ClientCreativeInventoryActionPacket packet, Player player) {
|
2021-08-13 20:41:59 +02:00
|
|
|
if (!player.isCreative()) return;
|
2021-11-30 17:49:41 +01:00
|
|
|
short slot = packet.slot();
|
|
|
|
final ItemStack item = packet.item();
|
2021-08-13 23:37:40 +02:00
|
|
|
if (slot == -1) {
|
2020-05-22 18:51:03 +02:00
|
|
|
// Drop item
|
|
|
|
player.dropItem(item);
|
2021-08-13 23:37:40 +02:00
|
|
|
return;
|
|
|
|
}
|
2024-03-25 06:47:12 +01:00
|
|
|
// Bounds check
|
|
|
|
// 0 is crafting result inventory slot, ignore attempts to place into it
|
|
|
|
if (slot < 1 || slot > PlayerInventoryUtils.OFFHAND_SLOT) {
|
|
|
|
return;
|
|
|
|
}
|
2021-08-13 23:37:40 +02:00
|
|
|
// 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;
|
2020-05-22 18:51:03 +02:00
|
|
|
}
|
2021-08-13 23:37:40 +02:00
|
|
|
inventory.setItemStack(slot, item);
|
2020-04-24 03:25:58 +02:00
|
|
|
}
|
|
|
|
}
|