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

Статус
Закрыто для дальнейших ответов.

pro100koder

Активный участник
Пользователь
Баллы
76
Н-да, за сегодня я уже много тем создал... Тут же за это не банят, надеюсь? В общем, нужно, чтобы когда игрок кинул зелье, это зелье (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, и создать волшебство. Но я не могу получить это зелье, так что вот. Помогите.
 
ProjectileLaunchEvent#getEntity() -> instanceof SplashPotion
Я уже закостылил... Но спасибо, пойду перекостыливать) Кстати, раз уж тема пустая... Как спавнить партиклы по своим правилам? Указывать скорость частицы, что в конце концов значат эти даблы в аргументах метода spawnParticle()?
 
Я уже закостылил... Но спасибо, пойду перекостыливать) Кстати, раз уж тема пустая... Как спавнить партиклы по своим правилам? Указывать скорость частицы, что в конце концов значат эти даблы в аргументах метода spawnParticle()?
Если отправлять пакетом, то это можно реализовать. Через spawnParticle() нельзя
 
ProjectileLaunchEvent#getEntity() -> instanceof SplashPotion
Проблемка... Если так делать, не получается отследить название брошенного зелья. А его нужно отслеживать, чтобы зелья могли быть особенными.
 
Код:
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          
        }
    }
}

P.S. Зелья кастомные, не с эффектами зелий, а прям с заклинаниями какими-то) Но чтобы эти заклинания работали, мне нужно занести это зелье в hashmap, чтобы при его разбивании, достать его значение из hashmap, и создать волшебство. Но я не могу получить это зелье, так что вот.
на эту тему советую залезть в NBT таги, там можно хранить любую информацию, хотя задолбаешься с ними, но эффект приятный - никаких хеш мапов, как следствие повышение производительности.
 
Код:
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 таги, там можно хранить любую информацию, хотя задолбаешься с ними, но эффект приятный - никаких хеш мапов, как следствие повышение производительности.

Особо тему не читал тему, но хочу заметить, что в hasItemMeta нет смысла. getItemMeta() всегда вернётся. По крайней мере со слов @Cool_boy
 
Особо тему не читал тему, но хочу заметить, что в hasItemMeta нет смысла. getItemMeta() всегда вернётся. По крайней мере со слов @Cool_boy
Там достаточно hasDisplayName проверять, с getItemMeta NullPointer никогда не вылетит.
Проблемка... Если так делать, не получается отследить название брошенного зелья. А его нужно отслеживать, чтобы зелья могли быть особенными.
Метадату пропиши при броске
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх