Untitled
unknown
plain_text
2 years ago
2.5 kB
7
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);
}
}
Editor is loading...
Leave a Comment