Bewegungssensor (Befehle)

Ein **Bewegungssensor** erkennt, ob sich die Position oder die Rotation des Spielers geändert hat. Abgesehen davon lassen sich auch spezielle Bewegungen wie Gehen, Sprinten oder Schleichen erfassen, dazu werden die Statistikdaten ausgewertet.

## Variante 1

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

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

Dieser Bewegungssensor erfasst durch mehrere Statistiken, die Bewegung des Spielers. Sobald eine Statistik ausschlägt und der Spieler den Sensor-Stock ausgewählt hat, wird das erkannt und dem Spieler wird eine Titel-Nachricht über der Schnellleiste angezeigt. Sobald der Spieler still steht verschwindet auch sofort diese Nachricht.

Einschalten
Wird der Hebel umgelegt, startet der Befehlsblock und führt die Start-Funktion aus.

* Befehl 1.1 Die Funktion bewegungssensor:v1start wird hierbei aktiviert.

Wiederholen
Mit dem Wiederhol-Befehlsblock führt jeden Tick die Zyklus-Funktion aus.

* Befehl 1.2 die Funktion bewegungssensor:v1zyklus wird ständig aufgerufen.

Ausschalten
Sobald der Hebel wieder in Ausgangsstellung zurück gelegt wurde, wird die Stopp-Funktion aktiviert.

* Befehl 1.3 Die Funktion bewegungssensor:v1stopp wird geladen.

```
function bewegungssensor:v1start

```

↑ 1.2:

```
function bewegungssensor:v1zyklus

```

↑ 1.3:

```
function bewegungssensor:v1stopp

```

Variante 1: **Start-Funktion**

Die Start-Funktion erstellt und verknüpft alle Punktestand-Ziele mit den entsprechenden Statistiken, die dann von alleine auslösen, wenn der Spieler eine der Tätigkeiten ausübt. Spieler erhalten den magischen Stock.

```
# Punkte-Ziele für jede Bewegungsform wird erstellt.
scoreboard objectives add PZBewS.1Gehen minecraft.custom:minecraft.walk\_one\_cm ["Bewegungssensor.1: ",{"text":"Die gegangenen Zentimeter auf Land","bold":true}]
scoreboard objectives add PZBewS.1Plansch minecraft.custom:minecraft.walk\_on\_water\_one\_cm ["Bewegungssensor.1: ",{"text":"Die gegangenen Zentimeter im Wasser","bold":true}]
scoreboard objectives add PZBewS.1Schwim minecraft.custom:minecraft.walk\_under\_water\_one\_cm ["Bewegungssensor.1: ",{"text":"Die geschwommenen Zentimeter","bold":true}]
scoreboard objectives add PZBewS.1Sprint minecraft.custom:minecraft.sprint\_one\_cm ["Bewegungssensor.1: ",{"text":"Die gelaufenen Zentimeter","bold":true}]
scoreboard objectives add PZBewS.1Schl minecraft.custom:minecraft.crouch\_one\_cm ["Bewegungssensor.1: ",{"text":"Die geschlichenen Zentimeter","bold":true}]
scoreboard objectives add PZBewS.1Sprung minecraft.custom:minecraft.jump ["Bewegungssensor.1: ",{"text":"Springen","bold":true}]

# Dem Spieler wird ein Stock mit Verzauberungsschimmer gegeben, um das Erfassen der Bewegung zu ermöglichen.
give @a[distance=..15] minecraft:stick{EigBewS.1Alle:true,EigBewS.1Sensor:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Bewegungssensor","color":"dark\_purple","bold":true}',Lore:['"Wähle den Stock aus"','"um nach der Bewegung"','"zu testen."'] } }

```

Variante 1: **Zyklus-Funktion**

Die Zyklus-Funktion setzt die Statistiken des Spielers wieder auf null und ruft vom Spieler aus die Erfassen-Funktion, wenn dieser den Stock ausgewählt hat.

```
# Spielern im Umkreis von 25 Metern wird ein Etikett gegeben, wenn diese den Stock ausgewählt haben.
tag @a[distance=..25,nbt={SelectedItem:{tag:{EigBewS.1Sensor:true} } }] add EtiBewS.1Sensor

# Wenn der Spieler den Stock nicht mehr ausgewählt hat und zuvor eine Titel-Nachricht erschien wird diese geräumt.
title @a[tag=!EtiBewS.1Sensor,tag=EtiBewS.1Titel] actionbar [""]
tag @a[tag=EtiBewS.1Sensor,tag=!EtiBewS.1Titel] add EtiBewS.1Titel
tag @a[tag=!EtiBewS.1Sensor,tag=EtiBewS.1Titel] remove EtiBewS.1Titel

# Wenn der Stock ausgewählt wurde, wird die Erfassen-Funktion durch den Spieler aufgerufen.
execute as @a[tag=EtiBewS.1Sensor] run function bewegungssensor:v1erfassen

# Bei allen Spielern wird geprüft ob sich die Werte der Bewegung geändert haben und falls das eingetreten ist, wird dieser wieder auf null gesetzt.
scoreboard players set @a[scores={PZBewS.1Gehen=1..}] PZBewS.1Gehen 0
scoreboard players set @a[scores={PZBewS.1Plansch=1..}] PZBewS.1Plansch 0
scoreboard players set @a[scores={PZBewS.1Schwim=1..}] PZBewS.1Schwim 0
scoreboard players set @a[scores={PZBewS.1Sprint=1..}] PZBewS.1Sprint 0
scoreboard players set @a[scores={PZBewS.1Schl=1..}] PZBewS.1Schl 0
scoreboard players set @a[scores={PZBewS.1Sprung=1..},nbt={OnGround:true}] PZBewS.1Sprung 0

# Das Etikett zur Erfassung der Bewegung wird wieder entfernt.
tag @a[tag=EtiBewS.1Sensor] remove EtiBewS.1Sensor

```

Variante 1: **Erfassen-Funktion**

Die Erfassen-Funktion prüft alle Statistiken und gibt eine Titel-Nachricht aus, welche der Bewegungen stattgefunden hat.

```
# Bei jeglischer Form der Bewegung erhält der Spieler das gleiche Etikett zur Markierung.
tag @s[scores={PZBewS.1Gehen=1..}] add EtiBewS.1Bewegung
tag @s[scores={PZBewS.1Plansch=1..}] add EtiBewS.1Bewegung
tag @s[scores={PZBewS.1Schwim=1..}] add EtiBewS.1Bewegung
tag @s[scores={PZBewS.1Sprint=1..}] add EtiBewS.1Bewegung
tag @s[scores={PZBewS.1Schl=1..}] add EtiBewS.1Bewegung
tag @s[scores={PZBewS.1Sprung=1..}] add EtiBewS.1Bewegung

# Nachdem keine Bewegung erfasst wurde, wird die Titel-Nachricht über der Schnellleiste geräumt.
title @s[tag=!EtiBewS.1Bewegung] actionbar [""]

# Wenn der Spieler sich bewegt hat, liegt einer der Bewegungswerte auf eins oder höher und das führt zur entsprechenden Nachricht.
title @s[tag=EtiBewS.1Bewegung,scores={PZBewS.1Gehen=1..}] actionbar ["",{"text":"Gehen","color":"dark\_purple","bold":true} ]
title @s[tag=EtiBewS.1Bewegung,scores={PZBewS.1Plansch=1..}] actionbar ["",{"text":"Planschen","color":"dark\_purple","bold":true} ]
title @s[tag=EtiBewS.1Bewegung,scores={PZBewS.1Schwim=1..}] actionbar ["",{"text":"Schwimmen","color":"dark\_purple","bold":true} ]
title @s[tag=EtiBewS.1Bewegung,scores={PZBewS.1Sprint=1..}] actionbar ["",{"text":"Sprinten","color":"dark\_purple","bold":true} ]
title @s[tag=EtiBewS.1Bewegung,scores={PZBewS.1Schl=1..}] actionbar ["",{"text":"Schleichen","color":"dark\_purple","bold":true} ]
title @s[tag=EtiBewS.1Bewegung,scores={PZBewS.1Sprung=1..}] actionbar ["",{"text":"Springen","color":"dark\_purple","bold":true} ]

# Anschließend werden die Etiketten wieder entfernt.
tag @s[tag=EtiBewS.1Bewegung] remove EtiBewS.1Bewegung

```

Variante 1: **Stopp-Funktion**

Die Stopp-Funktion löscht alle Punktestand-Ziele wieder, entfernt die Etiketten und löscht den Stock mit Verzauberungsschimmer.

```
# Die Punkte-Ziele für jede Form der Bewegung werden entfernt.
scoreboard objectives remove PZBewS.1Gehen
scoreboard objectives remove PZBewS.1Plansch
scoreboard objectives remove PZBewS.1Schwim
scoreboard objectives remove PZBewS.1Sprint
scoreboard objectives remove PZBewS.1Schl
scoreboard objectives remove PZBewS.1Sprung

# Der Stock wird wieder aus dem Inventar und auf dem Boden gelöscht.
clear @a minecraft:stick{EigBewS.1Alle:true}
kill @e[type=minecraft:item,nbt={Item:{id:"minecraft:stick",tag:{EigBewS.1Alle:true} } }]

# Die Etiketten werden entfernt, falls sie noch vorhanden sind.
tag @a[tag=EtiBewS.1Titel] remove EtiBewS.1Titel
tag @a[tag=EtiBewS.1Bewegung] remove EtiBewS.1Bewegung

```

## Variante 2

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

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

Bei diesem Bewegungssensor wird jegliche Bewegung erfasst, sobald man den Stock mit Verzauberungsschimmer ausgewählt hat. Dazu werden vom Spieler die Koordinaten sowie die Blickwinkel ausgelesen und mit denen vor einem Tick verglichen. Ändert sich die Position oder der Blickwinkel, so wird das erfasst und als Nachricht ausgegeben.

Einschalten
Wird der Hebel umgelegt, startet der Befehlsblock und führt die Start-Funktion aus.

* Befehl 2.1 Die Funktion bewegungssensor:v2start wird hierbei aktiviert.

Wiederholen
Mit dem Wiederhol-Befehlsblock führt jeden Tick die Zyklus-Funktion aus.

* Befehl 2.2 die Funktion bewegungssensor:v2zyklus wird ständig aufgerufen.

Ausschalten
Sobald der Hebel wieder in Ausgangsstellung zurück gelegt wurde, wird die Stopp-Funktion aktiviert.

* Befehl 2.3 Die Funktion bewegungssensor:v2stopp wird geladen.

```
function bewegungssensor:v2start

```

↑ 2.2:

```
function bewegungssensor:v2zyklus

```

↑ 2.3:

```
function bewegungssensor:v2stopp

```

Variante 2: **Start-Funktion**

Die Start-Funktion erstellt für alle Koordinaten und Blickwinkel Punkte-Ziele. Ebenfalls wird allen Spielern im Umkreis ein Stock mit Verzauberungsschimmer gegeben, mit dem man das Messen der Bewegung aktivieren kann.

```
# Die Punkte-Ziele für x, y und z Koordinaten, sowie für die Rotationen werden erstellt.
scoreboard objectives add PZBewS.2X dummy ["Bewegungssensor.2: ",{"text":"Die X-Koordinate","bold":true}]
scoreboard objectives add PZBewS.2Y dummy ["Bewegungssensor.2: ",{"text":"Die Y-Koordinate","bold":true}]
scoreboard objectives add PZBewS.2Z dummy ["Bewegungssensor.2: ",{"text":"Die Z-Koordinate","bold":true}]
scoreboard objectives add PZBewS.2Ric dummy ["Bewegungssensor.2: ",{"text":"Die Richtung","bold":true}]
scoreboard objectives add PZBewS.2Nei dummy ["Bewegungssensor.2: ",{"text":"Die Neigung","bold":true}]

# Spielern im Umkreis wird ein Stock mit Verzauberungsschimmer gegeben, mit dem man das Erfassen der Bewegung aktivieren kann.
give @a[distance=..15] minecraft:stick{EigBewS.2Alle:true,EigBewS.2Sensor:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Bewegungssensor","color":"dark\_purple","bold":true}',Lore:['"Wähle den Stock aus"','"um nach der Bewegung"','"zu testen."'] } }

```

Variante 2: **Zyklus-Funktion**

Die Zyklus-Funktion prüft ob der Spieler den Stock ausgewählt hat und ruft dann die Erfassen-Funktion auf. Sie sorgt auch dafür, dass die Titel-Nachricht entfernt wird, wenn der Spieler den Stock nicht mehr ausgewählt hat.

```
# Wenn Spieler den Stock ausgewählt haben, erhalten sie ein Etikett.
tag @a[distance=..25,nbt={SelectedItem:{tag:{EigBewS.2Sensor:true} } }] add EtiBewS.2Sensor

# Wenn der Spieler den Stock nicht mehr ausgewählt hat und zuvor eine Titel-Nachricht erschien wird diese geräumt.
title @a[tag=!EtiBewS.2Sensor,tag=EtiBewS.2Titel] actionbar [""]
tag @a[tag=EtiBewS.2Sensor,tag=!EtiBewS.2Titel] add EtiBewS.2Titel
tag @a[tag=!EtiBewS.2Sensor,tag=EtiBewS.2Titel] remove EtiBewS.2Titel

# Wenn der Spieler den Stock ausgewählt hat, wird von ihm aus die Erfassen-Funktion geladen.
execute as @a[tag=EtiBewS.2Sensor] run function bewegungssensor:v2erfassen

# Das Etikett wird wieder entfernt.
tag @a[tag=EtiBewS.2Sensor] remove EtiBewS.2Sensor

```

Variante 2: **Erfassen-Funktion**

Die Erfassen-Funktion speichert die letzte Position und Blickwinkel des Spielers in Variablen und vergleicht diese mit der aktuellen Position und Blickwinkel, wenn es dort Unterschiede gibt, wird eine Bewegung festgestellt.

```
# Die letzten Koordinaten und Rotationen werden in die Vergleichs-Variablen gespeichert.
scoreboard players operation VarBewS.2Position PZBewS.2X = @s PZBewS.2X
scoreboard players operation VarBewS.2Position PZBewS.2Y = @s PZBewS.2Y
scoreboard players operation VarBewS.2Position PZBewS.2Z = @s PZBewS.2Z
scoreboard players operation VarBewS.2Position PZBewS.2Ric = @s PZBewS.2Ric
scoreboard players operation VarBewS.2Position PZBewS.2Nei = @s PZBewS.2Nei

# Anschließend werden die aktuellen Koordinaten und Rotationen der Spieler gespeichert.
execute store result score @s PZBewS.2X run data get entity @s Pos[0] 1000
execute store result score @s PZBewS.2Y run data get entity @s Pos[1] 1000
execute store result score @s PZBewS.2Z run data get entity @s Pos[2] 1000
execute store result score @s PZBewS.2Ric run data get entity @s Rotation[0] 1000
execute store result score @s PZBewS.2Nei run data get entity @s Rotation[1] 1000

# Wenn sich die Koordinaten und Rotationen verändert haben, ist die letzte und die aktuelle Position, sowie die letzte und aktuelle Rotation ungleich und dann bekommt der Spieler ein Etikett.
execute unless score VarBewS.2Position PZBewS.2X = @s PZBewS.2X run tag @s[tag=!EtiBewS.2Position] add EtiBewS.2Position
execute unless score VarBewS.2Position PZBewS.2Y = @s PZBewS.2Y run tag @s[tag=!EtiBewS.2Position] add EtiBewS.2Position
execute unless score VarBewS.2Position PZBewS.2Z = @s PZBewS.2Z run tag @s[tag=!EtiBewS.2Position] add EtiBewS.2Position
execute unless score VarBewS.2Position PZBewS.2Ric = @s PZBewS.2Ric run tag @s[tag=!EtiBewS.2Rotation] add EtiBewS.2Rotation
execute unless score VarBewS.2Position PZBewS.2Nei = @s PZBewS.2Nei run tag @s[tag=!EtiBewS.2Rotation] add EtiBewS.2Rotation

# Wenn der Spieler seine Position oder Rotation geändert hat, erhält er ein neues Etikett.
execute unless entity @s[tag=!EtiBewS.2Position,tag=!EtiBewS.2Rotation] run tag @s add EtiBewS.2Bewegung

# Wenn der Spieler sich bewegt hat, erhält eine entsprechende Nachricht für Position oder Rotation.
title @s[tag=EtiBewS.2Position] actionbar ["",{"text":"Position wurde geändert","color":"dark\_purple","bold":true} ]
title @s[tag=EtiBewS.2Rotation] actionbar ["",{"text":"Rotation wurde geändert","color":"dark\_purple","bold":true} ]

# Wenn der Spieler sich nicht bewegt hat, wird seine Titel-Nachricht über der Schnellleiste geräumt.
title @s[tag=!EtiBewS.2Bewegung] actionbar [""]

# Die Etiketten zur Markierung der Bewegung werden wieder entfernt.
tag @s[tag=EtiBewS.2Bewegung] remove EtiBewS.2Position
tag @s[tag=EtiBewS.2Bewegung] remove EtiBewS.2Rotation
tag @s[tag=EtiBewS.2Bewegung] remove EtiBewS.2Bewegung

```

Variante 2: **Stopp-Funktion**

Die Stopp-Funktion löscht alle Punkte-Ziele, die Etiketten und den Stock mit Verzauberungsschimmer.

```
# Die Punkte-Ziele für x-, y- und z-Koordinate, sowie für die Rotationen werden entfernt.
scoreboard objectives remove PZBewS.2X
scoreboard objectives remove PZBewS.2Y
scoreboard objectives remove PZBewS.2Z
scoreboard objectives remove PZBewS.2Ric
scoreboard objectives remove PZBewS.2Nei

# Der Stock wird wieder aus dem Inventar und auf dem Boden gelöscht.
clear @a minecraft:stick{EigBewS.2Alle:true}
kill @e[type=minecraft:item,nbt={Item:{id:"minecraft:stick",tag:{EigBewS.2Alle:true} } }]

# Die Etiketten werden entfernt, falls sie noch vorhanden sind.
tag @a[tag=EtiBewS.2Titel] remove EtiBewS.2Titel
tag @a[tag=EtiBewS.2Bewegung] remove EtiBewS.2Bewegung

```

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