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

Помогите Как отследить зелье, которое кинул игрок?

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

Статус темы:
Закрыта.
  1. Автор темы
    pro100koder

    pro100koder Участник Пользователь

    Баллы:
    31
    Н-да, за сегодня я уже много тем создал... Тут же за это не банят, надеюсь? В общем, нужно, чтобы когда игрок кинул зелье, это зелье (entity) кое-куда записалось. Как я понял, прямого ивента кидания зелий нету, так что пришлось костылить. Вот то, чего я добился пока что:
    Код:
    @EventHandler
        public void interact(PlayerInteractEvent e){
            if (e.equals(EquipmentSlot.HAND)) {
                return;
            }
            Player p = e.getPlayer();
            if(e.getAction().equals(Action.RIGHT_CLICK_AIR)){
                if(p.getInventory().getItemInMainHand().getType().equals(Material.SPLASH_POTION)){
                    p.sendMessage("Ты кинул зелье. Молодец. А какое именно - забыто forever...");
                }
            }
    }
    P.S. Зелья кастомные, не с эффектами зелий, а прям с заклинаниями какими-то) Но чтобы эти заклинания работали, мне нужно занести это зелье в hashmap, чтобы при его разбивании, достать его значение из hashmap, и создать волшебство. Но я не могу получить это зелье, так что вот. Помогите.
     
  2. Mr Hosting
  3. LuckyZeeRo

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

    Баллы:
    76
    Имя в Minecraft:
    i0xHeX
    ProjectileLaunchEvent#getEntity() -> instanceof SplashPotion
     
  4. Автор темы
    pro100koder

    pro100koder Участник Пользователь

    Баллы:
    31
    Я уже закостылил... Но спасибо, пойду перекостыливать) Кстати, раз уж тема пустая... Как спавнить партиклы по своим правилам? Указывать скорость частицы, что в конце концов значат эти даблы в аргументах метода spawnParticle()?
     
  5. the3dester

    the3dester Новичок Пользователь

    Баллы:
    6
    Если отправлять пакетом, то это можно реализовать. Через spawnParticle() нельзя
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Можно.
     
  7. Автор темы
    pro100koder

    pro100koder Участник Пользователь

    Баллы:
    31
    Как?!
     
  8. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    spawnParticle это враппер над пакетом

    Документацию почитать, там extra это обычно скорость
    spawnParticle
     
  9. Автор темы
    pro100koder

    pro100koder Участник Пользователь

    Баллы:
    31
    Спасибо, не мог сам найти эту документацию (с нормальным пояснением)
     
  10. Автор темы
    pro100koder

    pro100koder Участник Пользователь

    Баллы:
    31
    Проблемка... Если так делать, не получается отследить название брошенного зелья. А его нужно отслеживать, чтобы зелья могли быть особенными.
     
  11. Blc_Dragon

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

    Баллы:
    76
    Код:
    public void onPotion(ProjectileLaunchEvent e) {
        if (e.getEntityType()==EntityType.SPLASH_POTION) {
            SplashPotion potion = (SplashPotion) e.getEntity();
            ItemStack item = potion.getItem();
            if (item.hasItemMeta()) {
                item.getItemMeta().getDisplayName(); //Может быть null          
            }
        }
    }
    на эту тему советую залезть в NBT таги, там можно хранить любую информацию, хотя задолбаешься с ними, но эффект приятный - никаких хеш мапов, как следствие повышение производительности.
     
  12. Exception_Prototype

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

    Баллы:
    76
    Особо тему не читал тему, но хочу заметить, что в hasItemMeta нет смысла. getItemMeta() всегда вернётся. По крайней мере со слов @Cool_boy
     
  13. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Там достаточно hasDisplayName проверять, с getItemMeta NullPointer никогда не вылетит.
    Метадату пропиши при броске
     
Статус темы:
Закрыта.

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