Bewegungssensor (Befehle, erweitert)

Der **erweiterte Bewegungssensor**  kann feststellen ob der Spieler sich vorwärts, rückwärts oder seitwärts bewegt. Man kann sich mit den Tasten `W`, `A`, `S` und `D` entsprechend bewegen, jedoch sind die Pfeiltasten auch möglich. Über Prädikate können spezielle Bewegungen wie Schleichen, Sprinten oder Schwimmen abgefragt werden.

## Variante 1

* Grundmodule
* Befehl
* Befehlssignal
* Grund-Element (Befehle)
* Signal-Element (Befehle)
* Signalleitung (Befehle)
 * Vergleicher (Befehle)
* Anzeigetafel
* Blickwinkel
* JSON-Text
* Prädikate
* Funktion
* NBT

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

Mit diesem Bewegungssensor lassen sich die Bewegungen nach vorne, hinten oder zur Seite erfassen. Ebenfalls kann damit erfasst werden ob der Spieler springt, schleicht, sprintet oder schwimmt. Dazu muss der Spieler einen speziellen Stock auswählen und dann die Bewegung durchführen.

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

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

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

* Befehl 1.2 die Funktion bewegungssensor:vp1zyklus 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:vp1stopp wird geladen.

```
function bewegungssensor:vp1start

```

↑ 1.2:

```
function bewegungssensor:vp1zyklus

```

↑ 1.3:

```
function bewegungssensor:vp1stopp

```

Variante 1: **Start-Funktion**

Die Start-Funktion gibt Spielern im Umkreis einen speziellen Stock mit Verzauberungsschimmer. Wenn man diesen auswählt, wird der Sensor aktiv.

```
# Spielern im Umkreis von 15 Blöcken wird ein Stock mit Verzauberungsschimmer gegeben.
give @a[distance=..15] minecraft:stick{EigBewS.p1Alle:true,EigBewS.p1Sensor: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 prüft ob der Spieler den Stock mit Verzauberungsschimmer ausgewählt hat und ruft dann die Erfassen-Funktion auf. Ebenfalls sorgt sie dafür, dass die Titel-Nachricht sofort verschwindet, wenn der Stock nicht mehr ausgewählt ist.

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

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

# Wenn der Spieler den Stock ausgewählt hat, wird von diesem die Erfassen-Funktion aufgerufen, dabei wird die Neigung auf gerade aus gestellt.
execute as @a[tag=EtiBewS.p1Sensor] at @s rotated ~ 0 run function bewegungssensor:vp1erfassen

# Das Etikett für das Auswählen des Stockes wird wieder entfernt.
tag @a[tag=EtiBewS.p1Sensor] remove EtiBewS.p1Sensor

```

Variante 1: **Erfassen-Funktion**

Die Erfassen-Funktion erstellt für jede Richtung aus Sicht des Spielers eine Partikelwolke. Jede Partikelwolke erfasst eine andere Bewegung des Spielers und sie existieren auch nur einen Tick. Mit Hilfe der Prädikate werden spezielle Bewegungen erfasst.

```
# Es wird für jede Richtung eine Partikelwolek erzeugt, die genau einen Tick lang existiert.
execute positioned ^ ^ ^0.2 unless entity @s[distance=..0.1] run summon minecraft:area\_effect\_cloud ~ ~ ~ {Duration:2,Tags:["EtiBewS.p1Alle","EtiBewS.p1Vorwaerts"]}
execute positioned ^ ^ ^-0.2 unless entity @s[distance=..0.1] run summon minecraft:area\_effect\_cloud ~ ~ ~ {Duration:2,Tags:["EtiBewS.p1Alle","EtiBewS.p1Rueckwaerts"]}
execute positioned ^0.2 ^ ^ unless entity @s[distance=..0.1] run summon minecraft:area\_effect\_cloud ~ ~ ~ {Duration:2,Tags:["EtiBewS.p1Alle","EtiBewS.p1Links"]}
execute positioned ^-0.2 ^ ^ unless entity @s[distance=..0.1] run summon minecraft:area\_effect\_cloud ~ ~ ~ {Duration:2,Tags:["EtiBewS.p1Alle","EtiBewS.p1Rechts"]}

# Für die Ecken werden ebenfalls vier Partikelwolken erzeugt, die einen Tick lang existieren.
execute positioned ^0.2 ^ ^0.2 unless entity @s[distance=..0.1] run summon minecraft:area\_effect\_cloud ~ ~ ~ {Duration:2,Tags:["EtiBewS.p1Alle","EtiBewS.p1Vorwaerts"]}
execute positioned ^0.2 ^ ^-0.2 unless entity @s[distance=..0.1] run summon minecraft:area\_effect\_cloud ~ ~ ~ {Duration:2,Tags:["EtiBewS.p1Alle","EtiBewS.p1Rueckwaerts"]}
execute positioned ^-0.2 ^ ^0.2 unless entity @s[distance=..0.1] run summon minecraft:area\_effect\_cloud ~ ~ ~ {Duration:2,Tags:["EtiBewS.p1Alle","EtiBewS.p1Vorwaerts"]}
execute positioned ^-0.2 ^ ^-0.2 unless entity @s[distance=..0.1] run summon minecraft:area\_effect\_cloud ~ ~ ~ {Duration:2,Tags:["EtiBewS.p1Alle","EtiBewS.p1Rueckwaerts"]}

# Für nach oben wird eine extra Partikelwolke erzeugt.
execute positioned ~ ~0.9 ~ unless entity @s[distance=..0.1] run summon minecraft:area\_effect\_cloud ~ ~ ~ {Duration:2,Tags:["EtiBewS.p1Alle","EtiBewS.p1Oben"]}

# Damit die Titel-Nachricht für die Bewegungen nur solange erscheint wie eine Bewegung stattfindet, wird sie vorher immer geräumt.
title @s actionbar [""]

# Wenn der Spieler springt oder nach oben läuft, so wird er von der Partikelwolke mit einem Etikett markiert, das er erst verliert wenn er wieder auf dem Boden ist.
execute at @e[type=minecraft:area\_effect\_cloud,tag=EtiBewS.p1Oben,sort=nearest,limit=1] run tag @s[distance=..0.5] add EtiBewS.p1Oben
title @s[tag=EtiBewS.p1Oben] actionbar ["",{"text":"oben","color":"red","bold":true}]
tag @s[tag=EtiBewS.p1Oben,nbt={OnGround:true}] remove EtiBewS.p1Oben

# Mit Hilfe von Prädikaten wird das Schleichen, das Sprinten oder das Schmimmen des Spielers erfasst.
title @s[predicate=bewegungssensor:vp1schleichen] actionbar ["",{"text":"unten","color":"red","bold":true}]
title @s[predicate=bewegungssensor:vp1sprinten] actionbar ["",{"text":"sprinten","color":"red","bold":true}]
title @s[predicate=bewegungssensor:vp1schwimmen] actionbar ["",{"text":"schwimmen","color":"red","bold":true}]

# Nur wenn eine Partikelwolke nah genug beim Spieler ist, wird die Bewegung in eine bestimmte Richtung erfasst und als Titel-Nachricht ausgegeben.
execute at @e[type=minecraft:area\_effect\_cloud,tag=EtiBewS.p1Vorwaerts,sort=nearest,limit=3] run title @s[distance=..0.1] actionbar ["",{"text":"vorwärts","color":"red","bold":true}]
execute at @e[type=minecraft:area\_effect\_cloud,tag=EtiBewS.p1Rueckwaerts,sort=nearest,limit=3] run title @s[distance=..0.1] actionbar ["",{"text":"rückwärts","color":"red","bold":true}]
execute at @e[type=minecraft:area\_effect\_cloud,tag=EtiBewS.p1Links,sort=nearest,limit=1] run title @s[distance=..0.1] actionbar ["",{"text":"links","color":"red","bold":true}]
execute at @e[type=minecraft:area\_effect\_cloud,tag=EtiBewS.p1Rechts,sort=nearest,limit=1] run title @s[distance=..0.1] actionbar ["",{"text":"rechts","color":"red","bold":true}]

```

```
{
 "condition": "minecraft:entity\_properties",
 "entity": "this",
 "predicate": {
 "flags": {
 "is\_sneaking": true
 }
 }
}

```

```
{
 "condition": "minecraft:entity\_properties",
 "entity": "this",
 "predicate": {
 "flags": {
 "is\_sprinting": true
 }
 }
}

```

```
{
 "condition": "minecraft:entity\_properties",
 "entity": "this",
 "predicate": {
 "flags": {
 "is\_swimming": true
 }
 }
}

```

Variante 1: **Stopp-Funktion**

Die Stopp-Funktion löscht den Stock mit Verzauberungsschimmer aus dem Inventar und falls auf den Boden geworfen auch als Drop in der Welt.

```
# Der Stock wird aus dem Inventar und auf dem Boden entfernt.
clear @a minecraft:stick{EigBewS.p1Alle:true}
kill @e[type=minecraft:item,nbt={Item:{id:"minecraft:stick",tag:{EigBewS.p1Alle:true} } }]

# Die eventuell noch vorhandenen Etiketten werden entfernt.
tag @a[tag=EtiBewS.p1Oben] remove EtiBewS.p1Oben
tag @a[tag=EtiBewS.p1Titel] remove EtiBewS.p1Titel

```

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