Помогите EnchantItemEvent либо не вызывается, либо я накосячил

HauserGrim

Активный участник
Пользователь
Баллы
96
Задумка такова, когда игрок чарит предмет, у него тратится не 1, 2 или 3 уровня, а необходимый для зачара минус (1, 2 или 3) которые уже потрачены. В общем, как в более ранних версиях.
Вот код:
Код:
package levelenchant;

import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.enchantment.EnchantItemEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin
{

 @Override
  public void onLoad() {
  }

  @Override
  public void onDisable() {
  }

  @Override
  public void onEnable() {
  }
  @EventHandler(priority = EventPriority.MONITOR)
  public void Ench(EnchantItemEvent event){
    Bukkit.broadcastMessage("Enchanted");
    Player player = event.getEnchanter();
    int buffer = event.whichButton() + 1;
    if(event.getExpLevelCost() <= buffer) return;

    int expLoss = event.getExpLevelCost() - buffer;
    player.setLevel(player.getLevel() - expLoss);

  }

}
 
Забыл зарегать ивент, но теперь суть в другом, оно иногда криво чарит, а точнее снимает уровень, но предмет остаётся без чара.

Устанавливает необходимый уровень для зачара, а не тот, который будет сниматься.
 
снимает уровень, но предмет остаётся без чара
На сколько я понял, при клике снимает expLoss и у игрока уже нет необходимого уровня, в итоге вещь остаётся без чара, а игрок уровней ( из expLoss).

В общем, теперь нужна помощь с этим.

Тут есть тема типа нубятника, только для говнокодеров?

UPD
Теперь вот так:

Код:
  @EventHandler(priority = EventPriority.MONITOR)
  public void Ench(EnchantItemEvent event){
    int buffer = event.whichButton() + 1;
    if(event.getExpLevelCost() <= buffer) return;
    int expLoss = event.getExpLevelCost() - buffer;
    event.getEnchanter().giveExpLevels(expLoss *= -1);
  }
 
Последнее редактирование:
Код:
@EventHandler(priority = EventPriority.MONITOR)
  public void Ench(EnchantItemEvent event){
    int buffer = event.whichButton()++;
    if(event.getExpLevelCost() <= buffer) {
        return;
        e.setCancelled(true);
    }
    int expLoss = event.getExpLevelCost() - buffer;
    event.getEnchanter().giveExpLevels(expLoss *= -1);
  }
Если я правильно понял что тебе надо..
 
Плагин, в котором я подсматривал, заработал на 1.14, кое что подправил и юзаю.
https://github.com/XDMAN500/OldEnchant

Никак не научусь нормально плагины писать, везде столько готовых решений...
 
Код:
@EventHandler(priority = EventPriority.MONITOR)
  public void Ench(EnchantItemEvent event){
    int buffer = event.whichButton()++;
    if(event.getExpLevelCost() <= buffer) {
        return;
        e.setCancelled(true);
    }
    int expLoss = event.getExpLevelCost() - buffer;
    event.getEnchanter().giveExpLevels(expLoss *= -1);
  }
Если я правильно понял что тебе надо..
Ахахах, молодец дурачок, скопировал код с поста выше, добавил пару скобок и cancellable ahahahhaahahah
 
Назад
Верх