Untitled

 avatar
unknown
plain_text
a year ago
2.5 kB
2
Indexable
package com.example.lonżowanie;

import org.bukkit.entity.Player;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Horse;
import org.bukkit.event.Listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector;

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) {
        // Sprawdzenie, czy kliknięta encja to koń
        if (!(event.getRightClicked() instanceof Horse)) {
            return;
        }

        event.setCancelled(true);
        Player player = event.getPlayer();
        Entity horse = event.getRightClicked();

        // Pobranie wartości z konfiguracji
        double radius = plugin.getConfig().getDouble("lonzowanie.radius", 5.0);
        double speed = plugin.getConfig().getDouble("lonzowanie.speed", 0.2);

        // Sprawdzenie poprawności wartości konfiguracyjnych
        if (radius <= 0 || speed <= 0) {
            player.sendMessage("Nieprawidłowa konfiguracja lonżowania.");
            return;
        }

        Vector center = player.getLocation().toVector();

        new BukkitRunnable() {
            private double angle = 0.0;

            @Override
            public void run() {
                if (!horse.isValid() || !player.isOnline()) {
                    this.cancel();
                    return;
                }

                // Obliczenie nowej pozycji na okręgu
                double x = center.getX() + radius * Math.cos(angle);
                double z = center.getZ() + radius * Math.sin(angle);
                Vector newPosition = new Vector(x, horse.getLocation().getY(), z);

                // Ustawienie kierunku i prędkości poruszania się konia
                Vector direction = newPosition.subtract(horse.getLocation().toVector()).normalize();
                horse.setVelocity(direction.multiply(speed));

                // Aktualizacja kąta
                angle += Math.toRadians(speed * 15);
                if (angle >= 2 * Math.PI) {
                    angle -= 2 * Math.PI; // Zapobiega przekroczeniu zakresu double
                }
            }
        }.runTaskTimer(plugin, 0L, 1L);
    }
}
Leave a Comment