Помогите Получение опыта в бутыльки

  • Автор темы Автор темы swat1x
  • Дата начала Дата начала

swat1x

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
swat1x
При пкм на пустую бутылку нужно получить бутылёк с опытом.
Код:
public int getEmptySlots(Player player) {
        int count = 0;
        for (int i = 0; i < 36; i++) {
            if (player.getInventory().getStorageContents()[i] == null)
                count++;
        }
        return count;
    }
    
    @SuppressWarnings("deprecation")
    @EventHandler
    public void onClick(PlayerInteractEvent e) {
        Action action = e.getAction();
        if(action == Action.RIGHT_CLICK_AIR && e.getPlayer().getItemInHand().getType() == Material.GLASS_BOTTLE){
            int exp = e.getPlayer().getTotalExperience();
            if(exp < (float)1){
                e.getPlayer().sendMessage("§c§l<X> §fУ вас слишком мало опыта");
                return;
            }
            if(getEmptySlots(e.getPlayer()) == 0) {
                e.getPlayer().sendMessage("§c§l<X> §fУ вас недостаточно места в инвентаре");
                return;
            }
            int itog = exp - 1;
            e.getPlayer().setExp((float)itog);
            ItemStack item = new ItemStack(Material.EXP_BOTTLE, 1, (byte) 0);
            ItemStack oldBottle = new ItemStack(Material.GLASS_BOTTLE, 1, (byte) 0);
            e.getPlayer().getInventory().addItem(item);
            e.getPlayer().getInventory().removeItem(oldBottle);
            e.getPlayer().sendMessage("§c§l<X> §fБутылочка с опытом получена");
        }
        return;
    }
Пробовал с player.setTotalExp(int); , но именно на той строчке выдаёт ошибку.
 
Я уже понял что setExp. это выставление для активной полоски опыта, и таким образом сам уровень меняться не будет
 
Код:
int exp = e.getPlayer().getTotalExperience();
Это уже неправильно. Это возвращает весь опыт, полученный за всё время игры. Он не уменьшается, даже если ты умрёшь, что-то зачаришь или починишь.
Код:
e.getPlayer().setExp((float)itog);
Это так же не выглядит правильным. setExp работает в пределах 0-1. Типо 0.5 - это 50% от полоски опыта. То есть числом опыт напрямую не задать.

Вопрос: какое количество опыта складывается в бутылочку?
Весь? Посмотри в эти сорцы, там если пораскинуть мозгами, можно как-то к тебе применить (там уже реализованы функции добавления/удаления опыта через команды).
У меня была примерно такая же ситуация, но проще - 1 уровень всегда равен 100 опыта (типо как валюта используется) и формулы гораздо проще. Но даже так, пришлось неплохо так по эвентам пройтись, чтобы везде нормально всё работало.

upload_2021-4-15_14-28-59.png
 
Назад
Верх