ApplicationLobby/src/main/java/net/voltexstudios/applicationLobby/util/EyeTrace.java
2025-01-01 17:29:43 +01:00

67 lines
2.1 KiB
Java

package net.voltexstudios.applicationLobby.util;
import net.voltexstudios.applicationLobby.holograms.HologramService;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.RayTraceResult;
import org.bukkit.util.Vector;
public class EyeTrace extends BukkitRunnable {
private static final double MAX_DISTANCE = 15.0;
private final Player player;
public EyeTrace(Player player) {
this.player = player;
}
@Override
public void run() {
if (player == null || !player.isOnline()) {
cancel();
return;
}
Location eyeLocation = player.getEyeLocation();
Location closestHologramLocation = HologramService.getInstance().getClosestHologramLocation(player);
if (closestHologramLocation == null || eyeLocation.getWorld() != closestHologramLocation.getWorld()) {
return;
}
if (eyeLocation.distance(closestHologramLocation) > MAX_DISTANCE) {
//unhover if player is too far away
HologramService.getInstance().handleHologramHover(player, null);
return;
}
checkPlayerLookingAtEntity(player);
}
private void checkPlayerLookingAtEntity(Player player) {
Location eyeLocation = player.getEyeLocation();
Vector direction = eyeLocation.getDirection();
// RayTrace durchführen
RayTraceResult rayTraceResult = player.getWorld().rayTraceEntities(
eyeLocation,
direction,
MAX_DISTANCE,
entity -> entity != player && HologramService.getInstance().isHologram(entity.getUniqueId())
);
if (rayTraceResult != null) {
Entity targetEntity = rayTraceResult.getHitEntity();
if (targetEntity != null) {
// Spieler betrachtet ein Interaktions-Entity
HologramService.getInstance().handleHologramHover(player, targetEntity);
return;
}
}
HologramService.getInstance().handleHologramHover(player, null);
}
}