Вопрос Изменение максимального количества определенного предмета в стаке

Kluffy

Пользователь
Сообщения
795
Решения
27
Здравствуйте, нужен плагин который позволит изменить максимальное количество определенных предметов на свое, на пример жемчуг можно будет стакать до 32 в одном слоте, а тотем до 2
 
основной класс
Java:
package org.cmurfik.emstackmodifier;

import org.bukkit.plugin.java.JavaPlugin;
import org.cmurfik.emstackmodifier.listeners.EventListener;

public class EmStackModifier extends JavaPlugin {

    @Override
    public void onEnable() {
        getLogger().info("EmStackModifier с треском и парой ошибок решил запустится!");
        getServer().getPluginManager().registerEvents(new EventListener(this), this);
        saveDefaultConfig();
    }

    @Override
    public void onDisable() {
        getLogger().info("EmStackModifier уходит в небытие, увидимся!");
    }
}
Слушатель

Java:
package org.cmurfik.emstackmodifier.listeners;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

public class EventListener implements Listener {

    private JavaPlugin plugin;

    public EventListener(JavaPlugin plugin) {
        this.plugin = plugin;
    }

    @EventHandler
    public void onPlayerPickupItem(PlayerPickupItemEvent event) {
        ItemStack item = event.getItem().getItemStack();
        int maxAmount;

        if (item.getType() == Material.ENDER_PEARL) {
            maxAmount = plugin.getConfig().getInt("settings.stack-ender-pearl", 32);
            if (item.getAmount() < maxAmount) {
                handleStacking(event, item, maxAmount);
            }
        }

        else if (item.getType() == Material.TOTEM_OF_UNDYING) {
            maxAmount = plugin.getConfig().getInt("settings.stack-totem", 2);
            if (item.getAmount() < maxAmount) {
                handleStacking(event, item, maxAmount);
            }
        }
    }

    private void handleStacking(PlayerPickupItemEvent event, ItemStack item, int maxAmount) {
        Player player = event.getPlayer();
        Inventory inventory = player.getInventory();

        for (int i = 0; i < inventory.getSize(); i++) {
            ItemStack stack = inventory.getItem(i);

            if (stack != null && stack.isSimilar(item) && stack.getAmount() < maxAmount) {
                int space = maxAmount - stack.getAmount();
                int amount = item.getAmount();

                if (amount <= space) {
                    stack.setAmount(stack.getAmount() + amount);
                    event.setCancelled(true);
                    event.getItem().remove();
                    break;
                }

                stack.setAmount(maxAmount);
                item.setAmount(amount - space);
            }
        }
    }

    @EventHandler
    public void onInventoryClick(InventoryClickEvent event) {
        ItemStack cursorItem = event.getCursor();
        ItemStack currentItem = event.getCurrentItem();

        if (currentItem != null && (currentItem.getType() == Material.ENDER_PEARL || currentItem.getType() == Material.TOTEM_OF_UNDYING)
                && cursorItem != null && (cursorItem.getType() == Material.ENDER_PEARL || cursorItem.getType() == Material.TOTEM_OF_UNDYING)
                && cursorItem.getAmount() > 1) {
            event.setCancelled(true);
        }
    }
}
 

Вложения

  • emStackModifier.jar
    3.8 KB · Просмотры: 0
основной класс
Java:
package org.cmurfik.emstackmodifier;

import org.bukkit.plugin.java.JavaPlugin;
import org.cmurfik.emstackmodifier.listeners.EventListener;

public class EmStackModifier extends JavaPlugin {

    @Override
    public void onEnable() {
        getLogger().info("EmStackModifier с треском и парой ошибок решил запустится!");
        getServer().getPluginManager().registerEvents(new EventListener(this), this);
        saveDefaultConfig();
    }

    @Override
    public void onDisable() {
        getLogger().info("EmStackModifier уходит в небытие, увидимся!");
    }
}
Слушатель

Java:
package org.cmurfik.emstackmodifier.listeners;

import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerPickupItemEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

public class EventListener implements Listener {

    private JavaPlugin plugin;

    public EventListener(JavaPlugin plugin) {
        this.plugin = plugin;
    }

    @EventHandler
    public void onPlayerPickupItem(PlayerPickupItemEvent event) {
        ItemStack item = event.getItem().getItemStack();
        int maxAmount;

        if (item.getType() == Material.ENDER_PEARL) {
            maxAmount = plugin.getConfig().getInt("settings.stack-ender-pearl", 32);
            if (item.getAmount() < maxAmount) {
                handleStacking(event, item, maxAmount);
            }
        }

        else if (item.getType() == Material.TOTEM_OF_UNDYING) {
            maxAmount = plugin.getConfig().getInt("settings.stack-totem", 2);
            if (item.getAmount() < maxAmount) {
                handleStacking(event, item, maxAmount);
            }
        }
    }

    private void handleStacking(PlayerPickupItemEvent event, ItemStack item, int maxAmount) {
        Player player = event.getPlayer();
        Inventory inventory = player.getInventory();

        for (int i = 0; i < inventory.getSize(); i++) {
            ItemStack stack = inventory.getItem(i);

            if (stack != null && stack.isSimilar(item) && stack.getAmount() < maxAmount) {
                int space = maxAmount - stack.getAmount();
                int amount = item.getAmount();

                if (amount <= space) {
                    stack.setAmount(stack.getAmount() + amount);
                    event.setCancelled(true);
                    event.getItem().remove();
                    break;
                }

                stack.setAmount(maxAmount);
                item.setAmount(amount - space);
            }
        }
    }

    @EventHandler
    public void onInventoryClick(InventoryClickEvent event) {
        ItemStack cursorItem = event.getCursor();
        ItemStack currentItem = event.getCurrentItem();

        if (currentItem != null && (currentItem.getType() == Material.ENDER_PEARL || currentItem.getType() == Material.TOTEM_OF_UNDYING)
                && cursorItem != null && (cursorItem.getType() == Material.ENDER_PEARL || cursorItem.getType() == Material.TOTEM_OF_UNDYING)
                && cursorItem.getAmount() > 1) {
            event.setCancelled(true);
        }
    }
}
Уже нашел, я забыл решение поставить
 
Назад
Сверху Снизу