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