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