Вопрос Запретить ложить в любые инвентари кастом предмет

Версия Minecraft
1.16.X

zxcemelya

Пользователь
Сообщения
12
Как можно запретить ложить мой кастомный предмет (условно проверяется item#isCustom(itemstack). Нужно чтоб его нельзя было положить в любой инвентарь, не с помощью шифта, не с помощью кнопочек (когда наводишься на слот и нажимаешь цифру от 1-9), не обычным перетаскиванием, я пробовал, но как-то костыльно выглядит.

I tried:

Java:
    @EventHandler
    public void onInventoryClick(InventoryClickEvent event) {
        Inventory clickedInventory = event.getClickedInventory();
        if (clickedInventory != null && clickedInventory.getType() == InventoryType.PLAYER) {
            ItemStack itemStack = event.getHotbarButton() == -1 ? event.getCursor() : clickedInventory.getItem(event.getHotbarButton());
            if ((customItemService.isCustomItem(itemStack) || customItemService.isCustomItem(event.getCurrentItem())) && event.getSlotType() == InventoryType.SlotType.ARMOR) {
                event.setCancelled(true);
            }
            if (customItemService.isCustomItem(event.getCurrentItem()) && event.isShiftClick()) {
                event.setCancelled(true);
            }
            return;
        }

        Inventory inventory = event.getView().getTopInventory();
        if (inventory.getType() == InventoryType.WORKBENCH || inventory.getType() == InventoryType.CRAFTING) {
            return;
        }
        boolean found = inventory.getType() == InventoryType.CHEST;
        Location location = inventory.getLocation();
        if (location == null) {
            return;
        }
        boolean cancelled = false;
        Inventory playerInventory = event.getWhoClicked().getInventory();
        if (event.getHotbarButton() != -1 && customItemService.isCustomItem(playerInventory.getItem(event.getHotbarButton()))) {
            if (location.getBlockY() < 5 && found) {
                cancelled = true;
            }
            if (!found) {
                cancelled = true;
            }
        }
        if (customItemService.isCustomItem(event.getCurrentItem()) || customItemService.isCustomItem(event.getCursor())) {
            if (location.getBlockY() < 5) {
                cancelled = true;
            }
            if (!found) {
                cancelled = true;
            }
        }
        if (cancelled) {
            event.setCancelled(true);
            event.getWhoClicked().sendMessage(locale.get("not-allow"));
        }
    }


    @EventHandler
    public void onInventoryDrag(InventoryDragEvent event) {
        if (event.getInventory().getType() == InventoryType.PLAYER || event.getInventory().getType() == InventoryType.CRAFTING) {
            if (customItemService.isCustomItem(event.getCursor()) || customItemService.isCustomItem(event.getOldCursor())) {
                event.setCancelled(true);
            }
            return;
        }
        Inventory inventory = event.getView().getTopInventory();
        if (inventory.getType() == InventoryType.WORKBENCH) {
            return;
        }
        boolean found = inventory.getType() == InventoryType.CHEST;
        Location location = event.getView().getTopInventory().getLocation();
        if (location == null) {
            return;
        }
        boolean cancelled = false;
        if (customItemService.isCustomItem(event.getOldCursor()) || customItemService.isCustomItem(event.getCursor())) {
            if (location.getBlockY() < 5) {
                cancelled = true;
            }
            if (!found) {
                cancelled = true;
            }
        }
        if (cancelled) {
            event.setCancelled(true);
            event.getWhoClicked().sendMessage(locale.get("not-allow"));
        }
    }
 
Назад
Сверху Снизу