Untitled

mail@pastecode.io avatar
unknown
plain_text
8 months ago
3.3 kB
2
Indexable
Never
package com.example.lonżowanie;

import org.bukkit.entity.Player;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.scheduler.BukkitRunnable;

public class LonżowanieListener implements Listener {
    private final LonżowaniePlugin plugin;

    public LonżowanieListener(LonżowaniePlugin plugin) {
        this.plugin = plugin;
    }

    @EventHandler
    public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
        Player player = event.getPlayer();
        Entity entity = event.getRightClicked();

        // Sprawdzanie, czy kliknięto na konia
        if (entity.getType() == EntityType.HORSE) {
            // Anulowanie domyślnej interakcji, aby nie dosiadać konia
            event.setCancelled(true);

            // Tworzenie nowego zadania
            new BukkitRunnable() {
                final double radius = 5.0; // Promień lonżowania
                double angle = 0.0; // Początkowy kąt

                public void run() {
                    if (entity.isValid() && player.isOnline()) {
                        // Obliczanie nowej pozycji
                        double x = player.getLocation().getX() + radius * Math.sin(angle);
                        double z = player.getLocation().getZ() + radius * Math.cos(angle);
                        double y = entity.getLocation().getY();

                        // Aktualizacja lokacji konia
                        entity.teleport(new org.bukkit.Location(entity.getWorld(), x, y, z, (float) angle, 0.0F));

                        // Zwiększanie kąta
                        angle += 0.1;

                        // Zapętlenie kąta
                        if (angle > 2 * Math.PI) angle = 0.0;
                    } else {
                        // Zatrzymanie zadania, jeśli gracz jest offline lub zwierzę nie jest już dostępne
                        this.cancel();
                    }
                }
            }.runTaskTimer(plugin, 0L, 1L); // Uruchomienie zadania co tick (20 ticków = 1 sekunda)
        }
    }
}



public void run() {
    if (entity.isValid() && player.isOnline()) {
        // Obliczanie nowej pozycji
        double x = player.getLocation().getX() + radius * Math.sin(angle);
        double z = player.getLocation().getZ() + radius * Math.cos(angle);
        double y = entity.getLocation().getY();

        // Obliczanie kierunku, w którym koń powinien się obrócić
        double dx = x - entity.getLocation().getX();
        double dz = z - entity.getLocation().getZ();
        float yaw = (float) Math.toDegrees(Math.atan2(-dx, dz));

        // Aktualizacja lokacji konia z nowym kierunkiem (yaw)
        entity.teleport(new org.bukkit.Location(entity.getWorld(), x, y, z, yaw, entity.getLocation().getPitch()));

        // Zwiększanie kąta
        angle += 0.1;

        // Zapętlenie kąta
        if (angle > 2 * Math.PI) angle = 0.0;
    } else {
        // Zatrzymanie zadania, jeśli gracz jest offline lub zwierzę nie jest już dostępne
        this.cancel();
    }
}
Leave a Comment