Block-Sensor (Befehle)

Ein **Block-Sensor** erfasst an der Position des Spielers einen Block oder eine kleine aus Blöcken bestehende Konstruktion und prüft ob der Block der gesuchte Block ist. Wenn es sich um den gesuchten Block handelt wird eine Nachricht einmalig gesendet, solange der Spieler nicht den Block wechselt. Ein Block-Sensor ist ebenfalls in der Lage beliebige Blöcke zu erfassen und diese per Nachricht auszugeben.

## Variante 1

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

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

Mit Hilfe dieses Block-Sensors kann man prüfen, ob der Spieler auf Sandstein steht. Immer wenn er das tut, wird eine einmalig Nachricht ausgegeben.

Wiederholen
* Befehl 1.1 In einem Umkreis von 25 Blöcken, wird von allen Spielern geprüft ob sie auf einem Sandsteinblock stehen und nur wenn sie das Etikett nicht besitzen, erhalten sie eine tellraw-Nachricht im Chat.
* Befehl 1.2 Wenn Spieler im Umkreis von 25 Blöcken auf Sandstein stehen und noch nicht das Etikett besitzen, erhalten sie es, damit die tellraw-Nachricht nur einmalig gesendet wird.
* Befehl 1.3 Wenn Spieler im Umkreis von 25 Blöcken nicht auf Sandstein stehen, jedoch das Etikett dafür besitzen, wird es wieder entfernt.

Ausschalten
* Befehl 1.4 Falls Spieler noch das Etikett besitzen, wird es entfernt.

```
execute as @a[distance=..25,tag=!EtiBlockS.1Sandstein] at @s if block ~ ~-1 ~ minecraft:sandstone run tellraw @s ["Block-Sensor.1: ",{"text":"Du befindest sich auf Sandstein","bold":true}]

```

↑ 1.2:

```
execute as @a[distance=..25,tag=!EtiBlockS.1Sandstein] at @s if block ~ ~-1 ~ minecraft:sandstone run tag @s add EtiBlockS.1Sandstein

```

↑ 1.3:

```
execute as @a[distance=..25,tag=EtiBlockS.1Sandstein] at @s unless block ~ ~-1 ~ minecraft:sandstone run tag @s remove EtiBlockS.1Sandstein

```

↑ 1.4:

```
tag @a[tag=EtiBlockS.1Sandstein] remove EtiBlockS.1Sandstein

```

## Variante 2

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

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

Dieser Block-Sensor kann erfassen, ob der Spieler sich auf Sandstein, rotem Sandstein und in der Luft befindet. Je nach dem auf welchen Block er sich befindet, wird eine Nachricht jeweils einmalig ausgesendet. Jeder Block bekommt eine Nummer zugewiesen und anhand dieser wird der Block erkannt. Es lassen weitere Blöcke in diese Liste aufnehmen, in dem man neue Nummern vergibt und abfragt.

Einschalten
* Befehl 2.1 Es wird ein Punkte-Ziel erstellt, das die Block-Nummer speichert.

Wiederholen
* Befehl 2.2 Spieler im Umkreis von 25 Blöckenbekommen eine tellraw-Nachricht im Chat ausgegeben, wenn sie die Block-Nummer für Luft noch nicht besitzen, aber bereits in der Luft sind.
* Befehl 2.3 Spieler im Umkreis von 25 Blöckenbekommen eine tellraw-Nachricht im Chat ausgegeben, wenn sie die Block-Nummer für Sandstein noch nicht besitzen, aber bereits auf diesem stehen.
* Befehl 2.4 Spieler im Umkreis von 25 Blöckenbekommen eine tellraw-Nachricht im Chat ausgegeben, wenn sie die Block-Nummer für roten Sandstein noch nicht besitzen, aber bereits auf diesem stehen.
* Befehl 2.5 Die Spieler erhalten für Luft, Sandstein[B2.6] und roten Sandstein[B2.7] jeweils einen Punktewert.

Ausschalten
* Befehl 2.8 Das Punkte-Ziel wird entfernt.

```
scoreboard objectives add PZBlockS.2Block dummy ["Block-Sensor.2: ",{"text":"Jeder Block bekommt eine bestimmte Nummer","bold":true}]

```

↑ 2.2:

```
execute as @a[distance=..25] unless score @s PZBlockS.2Block matches 0 at @s if block ~ ~-1 ~ minecraft:air run tellraw @s ["Block-Sensor.2: ",{"text":"Du befindest dich in der Luft","color":"aqua","bold":true}]

```

↑ 2.3:

```
execute as @a[distance=..25] unless score @s PZBlockS.2Block matches 1 at @s if block ~ ~-1 ~ minecraft:sandstone run tellraw @s ["Block-Sensor.2: ",{"text":"Du stehst auf Sandstein","color":"yellow","bold":true}]

```

↑ 2.4:

```
execute as @a[distance=..25] unless score @s PZBlockS.2Block matches 2 at @s if block ~ ~-1 ~ minecraft:red_sandstone run tellraw @s ["Block-Sensor.2: ",{"text":"Du stehst auf roten Sandstein","color":"gold","bold":true}]

```

↑ 2.5:

```
execute as @a[distance=..25] at @s if block ~ ~-1 ~ minecraft:air run scoreboard players set @s PZBlockS.2Block 0

```

↑ 2.6:

```
execute as @a[distance=..25] at @s if block ~ ~-1 ~ minecraft:sandstone run scoreboard players set @s PZBlockS.2Block 1

```

↑ 2.7:

```
execute as @a[distance=..25] at @s if block ~ ~-1 ~ minecraft:red_sandstone run scoreboard players set @s PZBlockS.2Block 2

```

↑ 2.8:

```
scoreboard objectives remove PZBlockS.2Block

```

## Variante 3

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

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

Mit Hilfe dieses Block-Sensors kann man eine kleine Konstruktion erfassen. Wenn sich der Spieler in der Mitte der Konstruktion befindet, erhält er einmalig eine Nachricht, dass die Konstruktion erfasst wurde. Die Konstruktion wird mit Hilfe eines Konstruktionsblockes geladen.

Einschalten
* Befehl 3.1 Mit einem Konstruktionsblock wird eine kleine Konstruktion geladen, auf die der Spieler laufen kann.
* Befehl 3.2 Damit die Konstruktion geladen wird, wird ein Redstone-Block neben dran platziert.

Wiederholen
* Befehl 3.3 Falls der Spieler bereits das Etikett besitzt, wird es ihm entfernt.
* Befehl 3.4 An der Position von Spielern im Umkreis von 25 Blöcken wird nach jedem einzelnen Block der Konstruktion getestet und nur wenn die vollständige Konstruktion vorliegt, erhält der jeweilige Spieler das Etikett.
* Befehl 3.5 Falls Spieler das Etikett für die Nachricht bereits haben aber das Etikett für die Konstruktion nicht,so wird ihnen das Nachrichten-Etikett entfernt.
* Befehl 3.6 Wenn Spieler auf der Konstruktion stehen und es erfasst wurde, aber noch keine Nachricht erhalten haben, erhalten sie diese.
* Befehl 3.7 Spieler die auf der Konstruktion stehen und noch nicht das Etikett für die Nachricht besitzen, erhalten es.

Ausschalten
* Befehl 3.8 Die Konstruktion wird komplett entfernt.
* Befehl 3.9 Die beiden Etiketten werden entfernt[B3.10], sofern sie noch vorhanden sind.

```
setblock ~-5 ~ ~ minecraft:structure_block{mode:"LOAD",posX:-1,posY:0,posZ:-1,name:"block-sensor:v3konstruktion"} replace

```

↑ 3.2:

```
setblock ~-5 ~-1 ~1 minecraft:redstone_block replace

```

↑ 3.3:

```
tag @a[distance=..25,tag=EtiBlockS.3KonstruktionBetreten] remove EtiBlockS.3KonstruktionBetreten

```

↑ 3.4:

```
execute as @a[distance=..25,tag=!EtiBlockS.3KonstruktionBetreten] at @s if block ~ ~-1 ~ minecraft:piston[extended=false,facing=up] if block ~-1 ~-1 ~ minecraft:piston[extended=false,facing=east] if block ~ ~-1 ~-1 minecraft:piston[extended=false,facing=south] if block ~1 ~-1 ~ minecraft:piston[extended=false,facing=west] if block ~ ~-1 ~1 minecraft:piston[extended=false,facing=north] if block ~-1 ~-1 ~-1 minecraft:iron_block if block ~1 ~-1 ~-1 minecraft:iron_block if block ~-1 ~-1 ~1 minecraft:iron_block if block ~1 ~-1 ~1 minecraft:iron_block run tag @s add EtiBlockS.3KonstruktionBetreten

```

↑ 3.5:

```
tag @a[tag=EtiBlockS.3Nachricht,tag=!EtiBlockS.3KonstruktionBetreten] remove EtiBlockS.3Nachricht

```

↑ 3.6:

```
tellraw @a[tag=EtiBlockS.3KonstruktionBetreten,tag=!EtiBlockS.3Nachricht] ["Block-Sensor.3: ",{"text":"Du befindest dich mitten auf der Konstruktion","color":"gray","bold":true}]

```

↑ 3.7:

```
tag @a[tag=EtiBlockS.3KonstruktionBetreten,tag=!EtiBlockS.3Nachricht] add EtiBlockS.3Nachricht

```

↑ 3.8:

```
fill ~-3 ~ ~1 ~-5 ~ ~-1 minecraft:air replace

```

↑ 3.9:

```
tag @a[tag=EtiBlockS.3KonstruktionBetreten] remove EtiBlockS.3KonstruktionBetreten

```

↑ 3.10:

```
tag @a[tag=EtiBlockS.3Nachricht] remove EtiBlockS.3Nachricht

```

## Variante 4

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

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

Der Block-Sensor gibt die ID des Blockes über der Schnelleiste aus, auf dem man sich gerade befindet. Dazu wird eine Güterlore erzeugt, in der der Drop des Blockes auf dem man steht hineingefüllt wird. Der title-Befehl ließt dann die NBT-Pfade aus und zeigt einem die ID an. Nur Blöcke die eine Beutetabelle besitzen, können mit diesem Sensor erfasst werden.

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

Wiederholen
* Befehl 4.2 Gleichzeitig wird auch der Wiederhol-Befehlsblock mit der Zyklus-Funktion block-sensor:v4zyklus aktiv.

Ausschalten
* Befehl 4.3 der Befehlsblock löst die Funktion block-sensor:v4stopp aus.

```
function block-sensor:v4start

```

↑ 4.2:

```
function block-sensor:v4zyklus

```

↑ 4.3:

```
function block-sensor:v4stopp

```

Variante 4: **Start-Funktion**

Die Start-Funktion erstellt die Güterlore in der später die Blöcke eingelagert werden, auf denen der Spieler steht und es wird ein Sensor-Stock gegeben, der zum Aktivieren des Sensor benötigt wird.

```
# Ein Rüstungsständer wird erstellt, auf dem eine Güterlore platz findet.
summon minecraft:armor\_stand ~ ~1 ~ {Small:true,Invisible:true,NoGravity:true,Tags:["EtiBlockS.4Alle"],Passengers:[{id:"minecraft:chest\_minecart",NoGravity:true,Tags:["EtiBlockS.4Alle","EtiBlockS.4Sensor"]}]}

# Dem erst gelegenen Spieler wird ein Etikett, zur Identifizierung gegeben. Er bekommt einen Stock, der für das Anzeigen der Blöcken benutzt werden kann.
tag @p[distance=..25] add EtiBlockS.4Spieler
give @p[tag=EtiBlockS.4Spieler] minecraft:stick{EigBlockS.4Alle:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Block-Sensor","color":"dark\_purple","bold":true}',Lore:['"Wähle den Stock aus"','"um den Block unter dir zu anzuzeigen."'] } }

```

Variante 4: **Zyklus-Funktion**

Die Zyklus-Funktion prüft in erster Linie ob der Spieler den Sensor-Stock in der Schnellleiste ausgewählt hat. Wenn das der Fall ist, wird der Erfassungsteil abgearbeitet und der Spieler erhält über der Schnellleiste die ID des Blockes auf dem er steht.

```
# Wenn der Spieler auf dem Boden steht und den Stock ausgewählt hat, erhaält er ein Etikett.
tag @p[tag=EtiBlockS.4Spieler,nbt={OnGround:true,SelectedItem:{id:"minecraft:stick",tag:{EigBlockS.4Alle:true} } }] add EtiBlockS.4BlockErfassen

# Wenn der Spieler den Stock ausgewählt hat, wird die Güterlore geleert um anschließend sie mit dem Block-Gegenstand zu füllen auf dem der Spieler aktuell steht.
execute if entity @p[tag=EtiBlockS.4BlockErfassen] run data remove entity @e[type=minecraft:chest\_minecart,tag=EtiBlockS.4Sensor,sort=nearest,limit=1] Items
execute at @p[tag=EtiBlockS.4BlockErfassen] run loot replace entity @e[type=minecraft:chest\_minecart,tag=EtiBlockS.4Sensor] container.0 mine ~ ~-0.5 ~

# Wenn der Spieler den Stock abgewählt hat, wird seine Titel-Nachricht entfernt, ansonsten bekommt er die ID des Blockes angezeigt, auf dem er aktuell steht.
title @p[tag=EtiBlockS.4Spieler,tag=!EtiBlockS.4BlockErfassen] actionbar [""]
title @p[tag=EtiBlockS.4BlockErfassen] actionbar ["",{"entity":"@e[type=minecraft:chest\_minecart,tag=EtiBlockS.4Sensor]","nbt":"Items[0].id","color":"dark\_purple","bold":true}]

# Das Etikett wird wieder entfernt.
tag @p[tag=EtiBlockS.4BlockErfassen] remove EtiBlockS.4BlockErfassen

```

Variante 4: **Stopp-Funktion**

Die Stopp-Funktion räumt alles wieder auf und löscht den Stock aus dem Inventar und auf dem Boden, löscht die Güterlore samt Inhalt und entfernt alle eventuell noch vorhandenen Etiketten.

```
# Der Stock wird wieder entfernt.
clear @a minecraft:stick{EigBlockS.4Alle:true}

# Die Etiketten werden entfernt.
tag @a[tag=EtiBlockS.4Spieler] remove EtiBlockS.4Spieler
tag @a[tag=EtiBlockS.4BlockErfassen] remove EtiBlockS.4BlockErfassen

# Damit die Güterlore nichts droppt, wird ihr Inhalt gelöscht.
data remove entity @e[type=minecraft:chest\_minecart,tag=EtiBlockS.4Sensor,sort=nearest,limit=1] Items

# Alle Objekte mit dem Etikett werden gelöscht.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigBlockS.4Alle:true} } }] add EtiBlockS.4Alle
kill @e[tag=EtiBlockS.4Alle]

```

***Block-Sensor* =>** **Befehle**;
*Block-Tauschanlage* => Redstone;
*Block-Transportanlage* => Redstone;
*Block-Speicher* => Redstone;
*Konstruktionsgerüst* => Befehle;