Blickwinkel-Sensor (Befehle)

Der **Blickwinkel-Sensor** kann die Blickwinkel des Spielers sowie die von anderen Objekten erfassen. Dabei werden die Richtung (horizontal) und die Neigung (vertikal) des Objektes erfasst. Dies kann auch zum Erfassen der Bewegung durch einen Bewegungssensor benutzt werden. Ebenfalls kann ein Blickwinkel-Sensor auch genutzt werden um zu prüfen ob ein Spieler mit dem Fadenkreus ein anderen Objekt anschaut und somit Blickkontakt hat.

## Variante 1

* Grundmodule
* Befehl
* Befehlssignal
* Grund-Element (Befehle)
* Signal-Element (Befehle)
* Signalleitung (Befehle)
 * Blickwinkel
* Taktgeber (Befehle)

* 1 Redstone-Fackel
* 2 Befehlsblock
* 1 Wiederhol-Befehlsblock
* 6 Ketten-Befehlsblock

Der Blickwinkel-Sensor gibt die Richtung sowie die Neigung des Spielers über den /title-Befehl aus. Je nach dem in welche Richtung man schaut, wird die entsprechende Himmelsrichtung ausgegeben. Ebenfalls wird die Neigung angezeigt, für oben, geradeaus und unten.

Einschalten
* Befehl 1.1 Die Zeit bis ein Titel erscheint und wann er wieder verschwindet wird auf null gesetzt, damit er sofort erscheint.

Wiederholen
* Befehl 1.2 Im Selektor wird geprüft ob die Spieler die in einem Umkreis von 25 Blöcken sind, nach Süden, Westen[B1.3], Norden[B1.4] oder Osten[B1.5] schauen. Je nach Blickrichtung wird dann die entsprechende Richtung im Titel angezeigt.
* Befehl 1.6 Wie bei den Himmelsrichtungen wird auch hier im Selektor nach Spielern geprüft die in einem Umkreis von 25 Blöcken sich hier befinden und geschaut ob sie von der Neigung nach oben, geradeaus[B1.7] oder nach unten[B1.8] blicken. Dann wird der Untertitel direkt unter der Titel-Nachricht erscheinen.

Ausschalten
* Befehl 1.9 Die Zeiten wann Titel angezeigt werden, wird wieder zurück gesetzt.

```
title @a[distance=..25] times 0 20 0

```

↑ 1.2:

```
title @a[distance=..25,y_rotation=-45..45] title ["",{"text":"richtung == ","bold":true},{"bold":true,"color":"blue","text":"Süden"} ]

```

↑ 1.3:

```
title @a[distance=..25,y_rotation=45..135] title ["",{"text":"richtung == ","bold":true},{"bold":true,"color":"gold","text":"Westen"} ]

```

↑ 1.4:

```
title @a[distance=..25,y_rotation=135..-135] title ["",{"text":"richtung == ","bold":true},{"bold":true,"color":"blue","text":"Norden"} ]

```

↑ 1.5:

```
title @a[distance=..25,y_rotation=-135..-45] title ["",{"text":"richtung == ","bold":true},{"bold":true,"color":"gold","text":"Osten"} ]

```

↑ 1.6:

```
title @p[distance=..25,x_rotation=-90..-30] subtitle ["",{"text":"neigung == ","bold":true},{"bold":true,"color":"green","text":"Oben"} ]

```

↑ 1.7:

```
title @p[distance=..25,x_rotation=-30..30] subtitle ["",{"text":"neigung == ","bold":true},{"bold":true,"color":"aqua","text":"Geradeaus"} ]

```

↑ 1.8:

```
title @p[distance=..25,x_rotation=30..90] subtitle ["",{"text":"neigung == ","bold":true},{"bold":true,"color":"red","text":"Unten"} ]

```

↑ 1.9:

```
title @a[distance=..25] reset

```

## Variante 2

* Grundmodule
* Befehl
* Befehlssignal
* Grund-Element (Befehle)
* Signal-Element (Befehle)
* Signalleitung (Befehle)
 * Blickwinkel
* Taktgeber (Befehle)

* 1 Redstone-Fackel
* 2 Befehlsblock
* 1 Wiederhol-Befehlsblock
* 15 Ketten-Befehlsblock

Dieser Blickwinkel-Sensor ließt die Richtung und Neigung des Spielers aus und erkennt daran ob die Maus nach rechts oder links bewegt wird. Die Richtung und Neigung wird erfasst und als Titel-Nachricht mit Pfeilen in die entsprechende Richtung oder Neigung ausgegeben.

Einschalten
* Befehl 2.1 Es werden drei Punkte-Ziele erstellt, für die Richtung, die Neigung[B2.2] und für den Vergleich[B2.3].
* Befehl 2.4 Die Erscheinungszeit der Titel-Nachrichten wird auf null gesetzt, damit sie sofort erscheinen.

Wiederholen
* Befehl 2.5 Zuerst wird von allen Spielern im Umkreis von 25 Blöcken, der Richtungswert (von vor einem Tick) in den Vergleichswert gespeichert. Wenn beim Einschalten noch kein Richtungswert existierte wird er hierdurch auf null gesetzt.
* Befehl 2.6 Nun wird der aktuelle Richtungswert ausgelesen und in den Richtungswert gespeichert.
* Befehl 2.7 Um nun festzustellen ob der Richtungswert sich geändert hat, wird vom Vergleichswert dieser abgezogen. Wenn das Ergebnis null ist, hat der Spieler nicht die Richtung geändert, ansonsten schon.
* Befehl 2.8 Wenn der Spieler einen positiven Vergleichswert besitzt, hat er sich nach links bewegt. Einzige Ausnahme ist, wenn er sich über die 360° bewegt hat, dann liegt sein Vergleichswert im maximalen negativen. Um diese beiden Wertebereiche gleichzeitig zu testen, wird erstmal geprüft ob der Spieler im gesamten Prüfbereich liegt und der Teil der nicht dazu gehört, wird danach ausgeschlossen.
* Befehl 2.9 Gleiches gilt für die Richtung nach rechts. Wenn der Vergleichswert negativ ist, hat sich der Spieler nach rechts bewegt. Nur wenn der Spieler sich über die 360° Marker hinfort bewegt, wird sein Wert maximal positiv sein, weswegen auch das berücksichtigt werden muss.
* Befehl 2.10 Im Vergleichswert wird wieder verwendet und dient nun zur Messung des Neigungswertes. Der Neigungswert wird im Vergleichswert gespeichert.
* Befehl 2.11 Anschließend wird der aktuelle Neigunswert ausgelesen und gespeichert.
* Befehl 2.12 Nun wird der Neigungswert vom Vergleichswert abgezogen. Wenn der Wert null ist, hat sich der Spieler nicht geregt.
* Befehl 2.13 Wenn der Vergleichswert im negativen Bereich liegt, hat der Spieler sein Fadenkreuz nach unten bewegt. Dies wird im Untertitel mit einem Pfeil nach unten angezeigt.
* Befehl 2.14 Wenn der Wert im positiven Bereich liegt, hat der Spieler sein Fadenkreuz nach oben bewegt. Auch das wird im Untertitel angezeigt.

Ausschalten
* Befehl 2.15 Die drei Punkte-Ziele werden wieder entfernt[B2.16][B2.17]
* Befehl 2.18 Die Titel-Erscheinungszeit wird wieder, bei den Spielern, zurückgesetzt.

```
scoreboard objectives add PZBlWS.2Richt dummy ["Blickwinkel-Sensor.2: ",{"text":"Blickrichtung"}]

```

↑ 2.2:

```
scoreboard objectives add PZBlWS.2Neig dummy ["Blickwinkel-Sensor.2: ",{"text":"Blickneigung"}]

```

↑ 2.3:

```
scoreboard objectives add PZBlWS.2Vergl dummy ["Blickwinkel-Sensor.2: ",{"text":"Vergleichsrichtung"}]

```

↑ 2.4:

```
title @a[distance=..25] times 0 20 0

```

↑ 2.5:

```
execute as @a[distance=..25] run scoreboard players operation @s PZBlWS.2Vergl = @s PZBlWS.2Richt

```

↑ 2.6:

```
execute as @a[distance=..25] store result score @s PZBlWS.2Richt run data get entity @s Rotation[0]

```

↑ 2.7:

```
execute as @a[distance=..25] run scoreboard players operation @s PZBlWS.2Vergl -= @s PZBlWS.2Richt

```

↑ 2.8:

```
execute as @a[distance=..25,scores={PZBlWS.2Vergl=-360..350}] unless entity @s[scores={PZBlWS.2Vergl=-350..0}] run title @s title ["",{"text":"[ ","color":"gold"},{"text":"←","color":"red","bold":"true"},{"text":" ]","color":"gold"} ]

```

↑ 2.9:

```
execute as @a[distance=..25,scores={PZBlWS.2Vergl=-350..360}] unless entity @s[scores={PZBlWS.2Vergl=0..350}] run title @s title ["",{"text":"[ ","color":"gold"},{"text":"→","color":"green","bold":"true"},{"text":" ]","color":"gold"} ]

```

↑ 2.10:

```
execute as @a[distance=..25] run scoreboard players operation @s PZBlWS.2Vergl = @s PZBlWS.2Neig

```

↑ 2.11:

```
execute as @a[distance=..25] store result score @s PZBlWS.2Neig run data get entity @s Rotation[1]

```

↑ 2.12:

```
execute as @a[distance=..25] run scoreboard players operation @s PZBlWS.2Vergl -= @s PZBlWS.2Neig

```

↑ 2.13:

```
title @a[distance=..25,scores={PZBlWS.2Vergl=-90..-1}] subtitle ["",{"text":"[ ","color":"gold"},{"text":"↓","color":"red","bold":"true"},{"text":" ]","color":"gold"} ]

```

↑ 2.14:

```
title @a[distance=..25,scores={PZBlWS.2Vergl=1..90}] subtitle ["",{"text":"[ ","color":"gold"},{"text":"↑","color":"green","bold":"true"},{"text":" ]","color":"gold"} ]

```

↑ 2.15:

```
scoreboard objectives remove PZBlWS.2Richt

```

↑ 2.16:

```
scoreboard objectives remove PZBlWS.2Neig

```

↑ 2.17:

```
scoreboard objectives remove PZBlWS.2Vergl

```

↑ 2.18:

```
title @a[distance=..25] reset

```

## Variante 3

* Grundmodule
* Befehl
* Befehlssignal
* Grund-Element (Befehle)
* Signal-Element (Befehle)
* Signalleitung (Befehle)
 * Funktion
* Blickwinkel
* Koordinaten
* Taktgeber (Befehle)

* 1 Redstone-Fackel
* 2 Befehlsblock
* 1 Wiederhol-Befehlsblock

Dieser Blickwinkel-Sensor kann erfassen ob ein Spieler das Blickkontakt-Objekt anschaut. Wenn der Spieler mit dem Fadenkreuz direkt auf das Objekt schaut, wird über der Schnellleiste eine positive Titel-Nachricht ausgegeben, ansonsten eine negative. Mit Hilfe von Funktionen wird in Blickrichtung des Spielers, die Funktion nach vorne ausgeführt und solange selbst aufgerufen, bis sie das Objekt erreicht hat oder der Abstand vom Spieler zu hoch ist.

Einschalten
* Befehl 3.1 Auf dem Wiederhol-Befehlsblock befindet sich ein Hebel. Legt man ihn um, wird zuerst der Befehlsblock mit der Start-Funktion blickwinkel-sensor:v3start aktiviert.

Wiederholen
* Befehl 3.2 Gleichzeitig wird auch der Wiederhol-Befehlsblock mit der Zyklus-Funktion blickwinkel-sensor:v3zyklus aktiv.

Ausschalten
* Befehl 3.3 der Befehlsblock löst die Funktion blickwinkel-sensor:v3stopp aus.

```
function blickwinkel-sensor:v3start

```

↑ 3.2:

```
function blickwinkel-sensor:v3zyklus

```

↑ 3.3:

```
function blickwinkel-sensor:v3stopp

```

Variante 3: **Start-Funktion**

Die Start-Funktion setzt die Titel-Erscheinungszeit auf und erzeugt einen Rüstungsständer mit Beobachter im Kopfslot in der Welt und gibt weitere davon Spielern in einem Umkreis von 15 Blöcken.

```
#Die Titel-Zeiten werden so eingestellt, dass der Titel nach kürzester Zeit wieder verschwindet.
title @a[distance=..25] times 0 20 0

# Ein Rüstungsständer mit einem Beobachter im Kopfslot wird erzeugt.
summon minecraft:armor\_stand ~-10 ~ ~ {Small:true,NoGravity:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Schau auf mich!","bold":true}',Tags:["EtiBlWS.3Alle","EtiBlWS.3Anschauen"],ArmorItems:[{},{},{},{id:"minecraft:observer",Count:1b}]}

# Spielern im Umkreis von 15 Blöcken wird ein Rüstungsständer gegeben, mit dem man weitere Blickkontakt-Objekte platzieren kann.
give @a[distance=..15] minecraft:armor\_stand{EigBlWS.3Alle:true,EntityTag:{Small:true,NoGravity:true,Invisible:true,CustomNameVisible:true,CustomName:'{"text":"Schau auf mich!","bold":true}',Tags:["EtiBlWS.3Alle","EtiBlWS.3Anschauen"],ArmorItems:[{},{},{},{id:"minecraft:observer",Count:1b} ] } }

```

Variante 3: **Zyklus-Funktion**

Die Zyklus-Funktion prüft vom Rüstungsständer aus, ob sich Spieler in einem bestimmten Umkreis befinden und führt von diesen eine sich selbstaufrufende Kontakt-Funktion auf. Falls durch den Aufruf der Funktion der Spieler kein Etikett besitzt wird eine entsprechend negativ-Nachricht ausgegeben.

```
# Von der Position des Rüstungsständers wird im Umkreis von 25 Blöcken getestet ob Spieler (und keine Zuschauer) sich dort aufhalten. Von der Position dieser Spieler wird in Augenhöhe die Kontakt-Funktion aufgerufen.
execute at @e[type=minecraft:armor\_stand,tag=EtiBlWS.3Anschauen] as @a[distance=..25,gamemode=!spectator] at @s anchored eyes run function blickwinkel-sensor:v3kontakt

# Falls im Umkreis um den Rüstungsständer Spieler ohne das Etikett für den Blickkontakt hreumstehen, erhalten sie die Titel-Nachricht, dass sie keinen Blickontakt mit dem Rüstungsständer haben.
execute at @e[type=minecraft:armor\_stand,tag=EtiBlWS.3Anschauen] run title @a[distance=..25,gamemode=!spectator,tag=!EtiBlWS.3Blickkontakt] actionbar ["",{"text":"[ ","color":"gold"},{"text":"kein Blickkontakt","color":"red","bold":true},{"text":" ]","color":"gold"} ]

# Falls Spieler das Etikett besitzen, wird es wieder entfernt.
tag @a[tag=EtiBlWS.3Blickkontakt] remove EtiBlWS.3Blickkontakt

```

Variante 3: **Kontakt-Funktion**

Die Kontakt-Funktion prüft ob an der aktuell aufgerufenen Position sich der Rüstungsständer aufhält. Nur wenn das der Fall ist, bekommt der Spieler eine positive Rückmeldung und das entsprechende Etikett. Ansonsten ruft sich die Funktion vorwärts versetzt selbst auf.

```
# Um einen Block tiefer (weil die Hitbox tiefer liegt als der Beobachter) wird geprüft ob sich dort der Rüstungsständer befindet den man anschaut. Wenn das der Fall ist, wird ein Etikett vergeben.
execute positioned ~ ~-1 ~ if entity @e[distance=..0.3,type=minecraft:armor\_stand,tag=EtiBlWS.3Anschauen] run tag @s add EtiBlWS.3Blickkontakt

# Wenn der Spieler Blickkontakt hatte, wird eine Titel-Nachricht ausgegeben.
title @s[tag=EtiBlWS.3Blickkontakt] actionbar ["",{"text":"[ ","color":"gold"},{"text":"Blickkontakt","color":"green","bold":true},{"text":" ]","color":"gold"} ]

# Wenn der Spieler Blickontakt hatte, wird der Rüstungsständer ausgewählt und so teleportiert, dass er in Richtung des Spielers schaut.
execute if entity @s[tag=EtiBlWS.3Blickkontakt] positioned ~ ~-1 ~ as @e[distance=..0.3,type=minecraft:armor\_stand,tag=EtiBlWS.3Anschauen] at @s run teleport @s ~ ~ ~ facing entity @p[tag=EtiBlWS.3Blickkontakt] eyes

# Wenn der Spieler noch keinen Blickkontakt hatte und er sich innerhalb von 25 Blöcken im Umkreis befindet, wird die Kontakt-Funktion um 0.2 Blöcke vorwärts erneut aufgerufen.
execute if entity @s[distance=..25,tag=!EtiBlWS.3Blickkontakt] positioned ^ ^ ^0.2 if block ~ ~ ~ minecraft:air run function blickwinkel-sensor:v3kontakt

```

Variante 3: **Stopp-Funktion**

Die Stopp-Funktion setzt die Titel-Erscheinungszeit wieder zurück und entfernt alle Rüstungsständer, in jeglichen Orten.

```

# Im Inventar vorhandene Rüstungsständer werden entfernt.
clear @a minecraft:armor\_stand{EigBlWS.3Alle:true}

# Rüstungsständer als Objekt in der Welt oder als Drop werden entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigBlWS.3Alle:true} } }] add EtiBlWS.3Alle
kill @e[tag=EtiBlWS.3Alle]

```

*Bewegungssensor* => Befehle (erweitert);
***Blickwinkel-Sensor* =>** **Befehle**;
*Slot-Sensor* => Befehle;
*Mausklick-Sensor* => Befehle;
*Zeichen-Eingabe* => Befehle;