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); } }