Skocz do zawartości
  • 0

Powtarzanie czynności


Xemixd
 Udostępnij

Pytanie

6 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
15 minut temu, LeviBoyPL napisał:

Co tak właściwie chcesz zrobić? Bo z tego kodu ciężko jest się domyślić 

Gdy gracz będzie w obrębie 10 kratek od zombie to  zombie wystrzeliwuje śnieżki.

Gdy gracz zabije zombie to ten te śnieżki nadal się wystrzeliwują w miejscu gdy zombie zostało zabite. 

Chce zrobić to tak, że jeżeli zombie nie żyje to śnieżki nie będą strzelały.

Edytowane przez Xemixd
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
    @EventHandler
    public void onEntityTargetEvent(EntityTargetEvent event) {
        if(!(event.getEntity() instanceof Zombie)) return;

        Zombie zombie = (Zombie) event.getEntity();
        new TargetEventZombieRunnable(zombie).runTaskTimer(main, 1, 15);
    }

Lepiej było by zrobić sobie nową klasę z kodem taska, wtedy kod będzie wyglądał schludniej i wygodniej będzie dodawać kolejne rzeczy do listenera, wyżej tworzysz sobie nową klasę, która rozszerza BukkitRunnable i od razu uruchamiasz task.

 

public class TargetEventZombieRunnable extends BukkitRunnable {

    private final Zombie zombie;

    public TargetEventZombieRunnable(Zombie zombie) {
        this.zombie = zombie;
    }

    @Override
    public void run() {
        if(zombie.isDead()) cancel();
        List<Entity> nearbyEntities = zombie.getNearbyEntities(10, 10, 10);
        if(nearbyEntities.size() == 0) cancel();
        for(Entity loopEntity : nearbyEntities) {
            if(loopEntity instanceof Player) {
                Player player = ((Player) loopEntity).getPlayer();
                Vector vector = zombie.getLocation().getDirection();
                Snowball snowball = zombie.launchProjectile(Snowball.class);
                zombie.setTarget(player);
                snowball.setVelocity(vector);
            }
        }
    }
}

Musisz tylko pamiętać że zombie często traci zainteresowanie graczem i idzie w innym kierunku, jeżeli nagle znów zacznie śledzić gracza powstanie nowy task i będzie działał podwójnie. Aktualny cel zombie możesz sprawdzić poprzez Zombie#getTarget()

Odnośnik do komentarza
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...