Untitled
unknown
plain_text
8 months ago
3.3 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; 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(); } }
Leave a Comment