Untitled
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