Untitled

mail@pastecode.io avatar
unknown
plain_text
8 months ago
2.4 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;
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) {
        Player player = event.getPlayer();
        Entity entity = event.getRightClicked();

        if (entity.getType() == EntityType.HORSE) {
            event.setCancelled(true);

            double radius = plugin.getConfig().getDouble("lonzowanie.radius", 5.0);
            // Prędkość, z jaką zwierzę będzie się poruszać po okręgu
            double speed = plugin.getConfig().getDouble("lonzowanie.speed", 0.2);
            Vector center = player.getLocation().toVector();

            new BukkitRunnable() {
                double angle = 0.0;

                public void run() {
                    if (entity.isValid() && player.isOnline()) {
                        // Obliczanie nowej pozycji na okręgu
                        double x = radius * Math.cos(angle);
                        double z = radius * Math.sin(angle);

                        // Obliczanie wektora od centrum do nowej pozycji
                        Vector position = center.clone().add(new Vector(x, 0, z));
                        Vector direction = position.subtract(entity.getLocation().toVector()).normalize();

                        // Ustawianie prędkości entity, aby poruszało się płynnie
                        entity.setVelocity(direction.multiply(speed));

                        // Zwiększanie kąta dla kolejnego obiegu
                        angle += Math.toRadians(speed * 15); // Regulacja prędkości obrotu

                        if (angle >= 2 * Math.PI) angle = 0.0;
                    } else {
                        this.cancel();
                    }
                }
            }.runTaskTimer(plugin, 0L, 1L);
        }
    }
}
Leave a Comment