Wie kann ich herausfinden ob ein Spieler hinter einem anderen steht?
Ich programmiere gerade mit Java ein Plugin für einen Sponge Minecraft Server, und möchte es dem Assassinen ermöglichen, anderen in den Rücken zu stechen. Dazu mus ich feststellen, ob beim Damage Event der Schadensverursacher hinter der anderen Person steht. Wie mache ich das am besten? Ich habe die beiden Richtungen der Spieler als vector3d Variable, weiß aber nicht wie ich das machen soll, da ich nicht weiß wie man mit 3D Vektoren rechnet.
Code bist jetzt:
Player atk = p; Entity victim = p2; Vector3d position = atk.getRotation(); Vector3d location = victim.getRotation();
2 Antworten
Das ganze ist nur sehr schwer möglich, denn die Richtung des Rückens in Minecraft wird nicht vom Server bestimmt, sondern vom Client. Man kann also nur mit der Richtung des Kopfes arbeiten.
Mit dem Kopf ist das gar nicht mal so schwierig. Der Yaw-Wert beschreibt schon die horizontale Blickrichtung als Winkel. Dann musst du nur noch die Differenz der Yaw-Werte der Spieler berechnen und auf einen Maximalwert prüfen.
Also mir fällt da gerade auch keine wesentlich schönere Lösung ein.
Ein Vektor gibt keine Auskunft über eine Position, nur über die Richtung. (1|2|3) wäre zum Beispiel 1 Schritt in x(x1)-Richtung, 2 Schritte in y(x2)-Richtung und 3 Schritte in z(x3)-Richtung (je nachdem, ob (x|y|z) oder (x1|x2|x3)).
Wenn 2 Spieler die selbe Richtung haben, kann man ja eindeutig sagen, dass sie hintereinander stehen wenn ein Damage Event zustande kommt.
Ich habe ein Problem: Teilweise ist die Drehung -358 Grad und wenn die andere Person dann 0 hat, ist es ja hinter einem, aber die Differenz beträgt ja mit der Berechnung 358...
Das ist der Code:
Und meine Frage ist: wie behebe ich das am besten? Einfach testen ob die Differenz kleiner 40 oder größer 320 ist, ist nicht schön aber funktioniert, aber es geht doch sicher auch besser, oder?