Untitled
unknown
plain_text
2 years ago
3.3 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;
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();
// Sprawdzanie, czy kliknięto na konia
if (entity.getType() == EntityType.HORSE) {
// Anulowanie domyślnej interakcji, aby nie dosiadać konia
event.setCancelled(true);
// Tworzenie nowego zadania
new BukkitRunnable() {
final double radius = 5.0; // Promień lonżowania
double angle = 0.0; // Początkowy kąt
public void run() {
if (entity.isValid() && player.isOnline()) {
// Obliczanie nowej pozycji
double x = player.getLocation().getX() + radius * Math.sin(angle);
double z = player.getLocation().getZ() + radius * Math.cos(angle);
double y = entity.getLocation().getY();
// Aktualizacja lokacji konia
entity.teleport(new org.bukkit.Location(entity.getWorld(), x, y, z, (float) angle, 0.0F));
// Zwiększanie kąta
angle += 0.1;
// Zapętlenie kąta
if (angle > 2 * Math.PI) angle = 0.0;
} else {
// Zatrzymanie zadania, jeśli gracz jest offline lub zwierzę nie jest już dostępne
this.cancel();
}
}
}.runTaskTimer(plugin, 0L, 1L); // Uruchomienie zadania co tick (20 ticków = 1 sekunda)
}
}
}
public void run() {
if (entity.isValid() && player.isOnline()) {
// Obliczanie nowej pozycji
double x = player.getLocation().getX() + radius * Math.sin(angle);
double z = player.getLocation().getZ() + radius * Math.cos(angle);
double y = entity.getLocation().getY();
// Obliczanie kierunku, w którym koń powinien się obrócić
double dx = x - entity.getLocation().getX();
double dz = z - entity.getLocation().getZ();
float yaw = (float) Math.toDegrees(Math.atan2(-dx, dz));
// Aktualizacja lokacji konia z nowym kierunkiem (yaw)
entity.teleport(new org.bukkit.Location(entity.getWorld(), x, y, z, yaw, entity.getLocation().getPitch()));
// Zwiększanie kąta
angle += 0.1;
// Zapętlenie kąta
if (angle > 2 * Math.PI) angle = 0.0;
} else {
// Zatrzymanie zadania, jeśli gracz jest offline lub zwierzę nie jest już dostępne
this.cancel();
}
}
Editor is loading...
Leave a Comment