Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

[Решено] Не удаляется предмет и не выводится сообщение

Тема в разделе "Разработка плагинов для новичков", создана пользователем Qtuh, 21 мар 2022.

  1. Автор темы
    Qtuh

    Qtuh Ньюби

    Баллы:
    3
    Нужно, чтоб при подборе N-го кол-ва определённого предмета игроку выдавался опыт и выводилось сообщение о количестве выданного ему опыта этому игроку в actionbar, а сам предмет при этом пропадал.
    package bwp.getexp;

    import net.md_5.bungee.api.ChatColor;
    import net.md_5.bungee.api.ChatMessageType;
    import net.md_5.bungee.api.chat.TextComponent;
    import org.bukkit.Material;
    import org.bukkit.Sound;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerPickupItemEvent;


    public class PickUpEvent implements Listener {
    @EventHandler
    public void OnPickUpItem(PlayerPickupItemEvent e) {
    Material type = e.getItem().getItemStack().getType();
    int amount = e.getItem().getItemStack().getAmount();
    switch (type) {
    case CLAY_BRICK: {
    e.getPlayer().setLevel(e.getPlayer().getLevel() + 2 * amount);
    e.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("+" + 2 * amount + " ресурсов", ChatColor.GOLD));
    break;
    }
    case IRON_INGOT: {
    e.getPlayer().setLevel(e.getPlayer().getLevel() + 25 * amount);
    break;
    }
    case GOLD_INGOT: {
    e.getPlayer().setLevel(e.getPlayer().getLevel() + 50 * amount);
    break;
    }
    default: {
    return;
    }
    }
    e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0f, 1.0f);
    e.setCancelled(true);
    e.getItem().remove();
    }
    }
    При поднимании предмета игроку опыт выдаётся, но предмет попадает к нему в инвентарь и не удаляется, а сообщение в actionbar не выводится(я попробовал реализовать это хотя бы для кирпича). В чём здесь проблема и как это осуществить? Версия spigot - 1.8.9.
     
  2. Хостинг MineCraft
    <
  3. MishaNeYT

    MishaNeYT Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    MishaNeYT
    Тебе вроде бы мешает e.setCancelled(true);
     
  4. Автор темы
    Qtuh

    Qtuh Ньюби

    Баллы:
    3
    Попробовал поставить false, а потом вообще убрал, но это не помогло. Причём на spigot 1.16.5 всё работает как нужно, но мне необходимо на 1.8.9.
     
  5. MishaNeYT

    MishaNeYT Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    MishaNeYT
    Используй это e.getPlayer().getInventory().remove(Material.CLAY_BRICK);
     
  6. MishaNeYT

    MishaNeYT Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    MishaNeYT
    Либо

    e.getPlayer().getInventory().removeItem(e.getItem().getItemStack());
    e.getPlayer().updateInventory();
     
  7. Автор темы
    Qtuh

    Qtuh Ньюби

    Баллы:
    3
    Оба варианта работают именно в момент поднятия предмета. Первый удаляет все предметы данного типа, а второй уменьшает на то количество, которые было поднято, но так или иначе поднятые предметы оказываются в инвентаре уже после удаления и остаются в нём. Я попробовал сделать задержку на выполнение команды через Thread.sleep(), но так код выдаёт ошибку на слове sleep. Как можно решить эту проблему?
     
  8. MishaNeYT

    MishaNeYT Активный участник Пользователь

    Баллы:
    68
    Имя в Minecraft:
    MishaNeYT
    Напиши мне во вконтакте https://vk.com/mishapavlovyakutsk
     

Поделиться этой страницей