NMS ItemStack#setMaxStackSize 1.16.5

kenuna

Пользователь
Сообщения
5
Как сделать свои ItemStackи нестакабильными?

На просторах интернета нашел данный вариант, но он работает для стандартных предметов (по типу яблок), а мне нужно сделать это именно для моего предмета с моим названием и т.п.
(1.16.5)
Java:
public void setMaxStackSize(Item item, int i){
    try {
        Field field = Item.class.getDeclaredField("maxStackSize");
        field.setAccessible(true);
        field.setInt(item, i);
    } catch (Exception e) {}
}
 
разве в параметрах не должен быть класс ItemStack?
Объединено

если этот код рабочий, то просто ввести setMaxStackSize(item, 0);
Он использует все предметы, а мне требуется именно ItemStack из баккита
 
Вот пример кода как раз на 1.16.5
Код:
@EventHandler (priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onClick (InventoryClickEvent e) {

    if (e.getClickedInventory() != null) {
        if (e.getClickedInventory().getType() == InventoryType.PLAYER) {

            ItemStack cursor = e.getCursor();
            ItemStack currentItem = e.getCurrentItem();

            int amountCursor = cursor.getAmount();
            int amountCurrent = currentItem.getAmount();

            if (currentItem != null && cursor != null) {
                if (currentItem.hasItemMeta() && cursor.hasItemMeta()) {
                    if (currentItem.getItemMeta().equals(cursor.getItemMeta())) {
                        if (cursor.getAmount() != 0) {
                            boolean stack = false;
                            int maxAmount = 0;

                            if (e.getCursor().getType() == Material.POTION) {
                                stack = getConfig().getBoolean("potion.stack");
                                maxAmount = getConfig().getInt("potion.amount-in-stack");
                            } else if (e.getCursor().getType() == Material.SPLASH_POTION) {
                                stack = getConfig().getBoolean("splash-potion.stack");
                                maxAmount = getConfig().getInt("splash-potion.amount-in-stack");
                            } else if (e.getCursor().getType() == Material.LINGERING_POTION) {
                                stack = getConfig().getBoolean("lingering.stack");
                                maxAmount = getConfig().getInt("lingering.amount-in-stack");
                            } else if (e.getCursor().getType() == Material.TIPPED_ARROW) {
                                stack = getConfig().getBoolean("tipped-arrow.stack");
                                maxAmount = getConfig().getInt("tipped-arrow.amount-in-stack");
                            }

                            if (stack) {
                                if (cursor.getAmount() + currentItem.getAmount() <= maxAmount) {
                                    currentItem.setAmount(cursor.getAmount()+currentItem.getAmount());
                                    e.setCursor(new ItemStack(Material.AIR));
                                } else {
                                    ItemStack item = currentItem;
                                    item.setAmount(amountCurrent + amountCursor - maxAmount);
                                    e.getWhoClicked().getInventory().addItem(item);

                                    currentItem.setAmount(maxAmount);
                                    e.setCursor(new ItemStack(Material.AIR));
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
 
Назад
Сверху Снизу