Skocz do zawartości
  • 1

Funkcja zwracająca entity na które się gracz patrzy


Pytanie

Dzień dobry, ma ktoś może funkcję która zwraca entity / gracza na którego się patrze?

Znalazłem coś ale jest to bardzo nieczułe - działa tylko ja się patrze na "klatkę piersiową" gracza. (Spoiler)
Najlepiej chciałbym coś takiego co daje skrypt pod funkcją targeted entity
Próbowałem go dekompilować ale jestem początkujący i nic z tego nie zrozumiałem

Spoiler

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;

public class imp{

	public static Player targetEntity(Player p) {
	    int range = 5;
	 
	    HashMap<Chunk, Set<Block>> chunks = new HashMap<>();
	 
	    for (Block b : p.getLineOfSight(null, range)) {
	        Chunk c = b.getChunk();
	     
	        Set<Block> blocks;
	        if (chunks.containsKey(c)) { // The chunk was already registered
	            blocks = chunks.get(c);
	        }
	        else { // The chunk was not yet registered
	            blocks = new HashSet<Block>();
	        }
	     
	        blocks.add(b);
	        chunks.put(c, blocks);
	    }
	 
	    Entity targetedEntity = null;
	    double distance = Double.MAX_VALUE;
	 
	    for (Chunk c : chunks.keySet()) {
	        Entity entites[] = c.getEntities();
	     
	        for (Block b : chunks.get(c)) {
	            for (Entity e : entites) {
	                if (isInBlock(e, b)) {
	                    double tmpDistance = e.getLocation().distance(p.getLocation());
	                 
	                    if (targetedEntity == null || tmpDistance < distance) {
	                        targetedEntity = e;
	                        distance = tmpDistance;
	                    }
	                 
	                 
	                }
	            }
	        }
	    }
	 
	 
	    if (targetedEntity == null) {
	        //p.sendMessage("You're not aiming at an entity that is in a range of " + range + " blocks.");
	        return null;
	    }
	    else {
	        //p.sendMessage("You're aiming at " + targetedEntity.getName() + " who is " + (int) distance + " blocks away from you.");
	        return (Player) targetedEntity;
	    }
	 
	}

	public static boolean isInBlock(Entity e, Block b) {
	    if (e.getWorld() != b.getWorld()) {
	        return false;
	    }

	    Location locationEntity = e.getLocation(), locationBlock = getCenterOfBlock(b);
	 
	    double distance = locationEntity.distance(locationBlock);
	    //System.out.println("distance: " + distance);
	    return (distance < 1);
	}


	public static Location getCenterOfBlock(Block b) {
	    Location loc = b.getLocation();
	    return loc.add(0.5, 0.5, 0.5);
	}
}

 

 

Odnośnik do komentarza
https://skript.pl/temat/24289-funkcja-zwracaj%C4%85ca-entity-na-kt%C3%B3re-si%C4%99-gracz-patrzy/
Udostępnij na innych stronach

0 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Nie udzielono jeszcze odpowiedzi na to pytanie

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...