Помогите Ваншотный бросок снежком

MasterCapeXD

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
MasterCapeXD
Делаю большой проект (плагин). Все уже почти готово, и тут я понял, что мне надо сделать, чтобы при попадании снежком в моба, например свинью, свинья умирала.
Пробовал двумя способами, но не работают.Вот они
public void onShootBall (ProjectileHitEvent e, Material material)
{
Snowball ball = (Snowball) e.getEntity();
ItemStack is = new ItemStack(material);
ItemMeta meta = is.getItemMeta();

if(e.getEntity() == ball )
{
if(e.getEntityType() == EntityType.PIG) {

}
}

}
}
Вообще не подходит, потому что нет метода установки дамага или килл моба.
А вот еще
public void onShootBall (EntityDamageByEntityEvent e, Material material)
{
ItemStack is = new ItemStack(material);
ItemMeta meta = is.getItemMeta();
Snowball ball = (Snowball) e.getDamager();
Player p = (Player) e.getDamager();
if(e.getDamager() == p )
{
e.setDamage(200);
В предыдущем я использовал дамагера Player, а в этом - snowball
if(e.getDamager() == ball)
{
e.setDamage(200);
 
Отнимай ХП так. (Если хочешь отнять все.)

entity.setHealh(entity.getHealth() - entity.getHealth());
 
Как то так...
Java:
    @EventHandler
    public void onShootBall(EntityDamageByEntityEvent e){
        String damag = e.getDamager().getName();
        Entity entity = e.getEntity();
        if(damag.equals("Snowball")){
           ((LivingEntity)entity).setHealth(0);
        }
    }
 
Как то так...
Java:
    @EventHandler
    public void onShootBall(EntityDamageByEntityEvent e){
        String damag = e.getDamager().getName();
        Entity entity = e.getEntity();
        if(damag.equals("Snowball")){
           ((LivingEntity)entity).setHealth(0);
        }
    }
Точн... Можно ж было просто 0...
 
Омг.. Что за сбор быдлокодеров?
event.getDamager().getType() == EntityType.SNOWBALL
Проект он большой делает...
 
Да без разницы по type или name проверять...
Ну да, проверить совпадение двух интов, или же проверить совпадение массива символов, пфф, какая разница)))))
Ведь это стоит того чтобы дать себе еще одно место в котором можно ошибиться из-за банальной опечатки.

Без разницы ему...
entity.getHealth() - entity.getHealth()
Это называется ноль, но никому не говори :good:
 
Омг.. Что за сбор быдлокодеров?
event.getDamager().getType() == EntityType.SNOWBALL
Проект он большой делает...
Насчет проекта, да , делаю.Но на этом моменте я не смог закодить.Я новичок в коде плагинов, но все-таки, это не значит что я вообще нечего не умею.И все работало отлично.А вот с евентами я не очень розобрался и с их функциями.В этом деле главное - практика.Какие-то ивенты я уже знаю как юзать, другие - проблема.
Но спасибо за ваши ответы)
 
> Snowball ball = (Snowball) e.getEntity();
> if(e.getEntity() == ball )
А в моём мире это называется if(true) :-)
 
Ну да, проверить совпадение двух интов, или же проверить совпадение массива символов, пфф, какая разница)))))
Ведь это стоит того чтобы дать себе еще одно место в котором можно ошибиться из-за банальной опечатки.

Без разницы ему...

Это называется ноль, но никому не говори :good:
Это называется ноль, но никому не говори :good:
просто когда-то вроде ставил ноль, потом ошибками поливало через раз... Не помню, по этой ли причине...
 
if (e.getEntity() instanceof Snowball) ...
 
Медленнее чем сравнение типов, делает тоже самое
Ты прям замерял? Тесты скорости есть?

Я кстати, тоже так думал - ибо читал когда-то какую-то статью, на эту тему.

Но сейчас ради интереса решил замерить.

Повесил на PlayerInteractEvent вот такой код:
Код:
    @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = false)
    public void test(PlayerInteractEntityEvent event){
        Entity entity = event.getPlayer();
        long start = System.nanoTime();
        boolean check1 = entity instanceof Player;
        long checkpoint1 = System.nanoTime();
        boolean check2 = entity.getType() == EntityType.PLAYER;
        long checkpoint2 = System.nanoTime();
        log("Check1: "+(checkpoint1-start));
        log("Check2: "+(checkpoint2-checkpoint1));
    }


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

Код:
[13:54:08 INFO]: [Tester] Check1: 1811
[13:54:08 INFO]: [Tester] Check2: 2717
[13:54:08 INFO]: [Tester] Check1: 604
[13:54:08 INFO]: [Tester] Check2: 1207
[13:54:09 INFO]: [Tester] Check1: 603
[13:54:09 INFO]: [Tester] Check2: 1510
[13:54:09 INFO]: [Tester] Check1: 301
[13:54:09 INFO]: [Tester] Check2: 906
[13:54:09 INFO]: [Tester] Check1: 604
[13:54:09 INFO]: [Tester] Check2: 1208
[13:54:21 INFO]: [Tester] Check1: 906
[13:54:21 INFO]: [Tester] Check2: 906
[13:54:22 INFO]: [Tester] Check1: 2113
[13:54:22 INFO]: [Tester] Check2: 3622
[13:54:22 INFO]: [Tester] Check1: 906
[13:54:22 INFO]: [Tester] Check2: 1811
[13:54:22 INFO]: [Tester] Check1: 905
[13:54:22 INFO]: [Tester] Check2: 1812
[13:54:22 INFO]: [Tester] Check1: 1207
[13:54:22 INFO]: [Tester] Check2: 1509
[13:54:23 INFO]: [Tester] Check1: 604
[13:54:23 INFO]: [Tester] Check2: 1510
[13:54:23 INFO]: [Tester] Check1: 906
[13:54:23 INFO]: [Tester] Check2: 1811
[13:54:24 INFO]: [Tester] Check1: 302
[13:54:24 INFO]: [Tester] Check2: 905
[13:54:25 INFO]: [Tester] Check1: 302
[13:54:25 INFO]: [Tester] Check2: 1207
[13:54:25 INFO]: [Tester] Check1: 302
[13:54:25 INFO]: [Tester] Check2: 905
[13:54:25 INFO]: [Tester] Check1: 302
[13:54:25 INFO]: [Tester] Check2: 1207
[13:54:28 INFO]: [Tester] Check1: 302
[13:54:28 INFO]: [Tester] Check2: 906
[13:54:29 INFO]: [Tester] Check1: 301
[13:54:29 INFO]: [Tester] Check2: 1510

Кстати, если лупиь по одному блоку, то время бдеут одинаковое.

Это конечно нельзя назвать профайлером и может в других условиях даст обратные результаты, но мне кажется хорошо показывает, что бояться "instance of" не нужно.
 
Назад
Верх