Technik Wiki
Advertisement
Diese Seite stammt ursprünglich aus de.minecraft.wiki und wurde von der Quelle abweichend verändert.


Gruppe:
Systeme

mit Mechaniken

mit Redstone
                Hier:
mit Befehlen
Verfügbar in:
Mechanik-Welt

Ein Kamera-System dient dazu, bestimmte Orte oder Bereiche zu überwachen. Meist verfügen die Kameras über einen zentralen Monitor über den man die Sicht der Kameras sehen kann. Die Kameras sind so geartet, dass sie dem am nächsten gelegenen Spieler in einem bestimmten Umkreis folgen.

Variante 1[]

Dieses Kamera-System bietet dem Spieler die Möglichkeit überall Kameras aufzuhängen und die Sicht der Kameras durch einen Monitor zu sehen. Mit Hilfe von Rüstungsständern platziert man die Kameras direkt unter einem Hebel, der als Ständer für die Kamera fungiert. Ebenfalls platziert man den Monitor durch einen Rüstungsständer, den man in der Hand hält. Hat man den Monitor platziert, wählt man in der Schnellleiste den Stock aus und erhält so im Chat die Möglichkeit eine Schaltfläche anzuklicken, die es einem ermöglicht die Sicht der Kameras einzunehmen. Man wechselt durch alle Kameras hindurch und landet am Ende wieder beim Monitor.

Einschalten
  • Befehl 1.1 Wenn der Hebel umgelegt wird, wird die Start-Funktion gestartet.
Wiederholen
  • Befehl 1.2 Beim Einschalten wird auch der Wiederhol-Befehlsblock gestartet, der jeden Tick die Zyklus-Funktion lädt.
Ausschalten
  • Befehl 1.3 Wenn der Hebel wieder in Ausgangsstellung zurück gelegt wird, wird die Stopp-Funktion ausgelöst und schaltet alles wieder ab.

Befehlsblöcke mit Befehlen:


Variante 1: Start-Funktion
Die Start-Funktion erstellt die Punkte-Ziele für das Auslösen der Chat-Schaltfläche und für die Kamera-Nummern, ebenfalls werden den Spielern die Kameras und Monitore gegeben.

kamera-system:v1start.mcfunction
# Es werden zwei Punkte-Ziele erstellt, das erste für das Auslösen und das zweite speichert die Nummern der Kameras.
scoreboard objectives add PZKamS.1Ausl trigger ["Kamera-System.1: ",{"text":"Auslöser","bold":true}]
scoreboard objectives add PZKamS.1Nr dummy ["Kamera-System.1: ",{"text":"Nummer der Kamera","bold":true}]

# Ein Hebel, der an die Wand platziert werden kann um die Kamera zu halten.
give @a[distance=..15] minecraft:lever{EigKamS.1Alle:true,display:{Name:'{"text":"Kamera-Ständer","color":"aqua","bold":true}',Lore:['"Platziere den Hebel an die Wand"','"um anschließend die Kamera"','"daran zu befestigen."'] } } 16

# Die Kamera die man per Rüstungsständer an einem Halter platzieren kann.
give @a[distance=..15] minecraft:armor_stand{EigKamS.1Alle:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Kamera","color":"aqua","bold":true}',Lore:['"Platziere den Rüstungsständer"','"unter einem Kamera-Ständer"','"um die Kamera zu erzeugen."']},EntityTag:{Invisible:true,NoGravity:true,Tags:["EtiKamS.1Alle","EtiKamS.1Erstellen"] } } 16

# Der Kamera-Tisch, den man ebenfalls per Rüstungsständer platzieren kann.
give @a[distance=..15] minecraft:armor_stand{EigKamS.1Alle:true,display:{Name:'{"text":"Kamera-Tisch","color":"aqua","bold":true}',Lore:['"Platziere den Rüstungsständer"','"unter einem Kamera-Ständer"','"um die Kamera zu erzeugen."']},EntityTag:{Invisible:true,NoGravity:true,Tags:["EtiKamS.1Alle","EtiKamS.1Bauwerk"] } } 16

Variante 1: Zyklus-Funktion
Die Zyklus-Funktion ruft die entsprechende Funktion auf, wenn die Kamera oder Monitor platziert wurden. Durch sie schwengt ebenfalls die Kamera immer zum Spieler und das Halten des Stockes wird erfasst.

kamera-system:v1zyklus.mcfunction
# Wurde ein Kamera-Rüstungsständer platziert, wird von diesem aus die Erstellen-Funktion geladen.
execute as @e[type=minecraft:armor_stand,tag=EtiKamS.1Erstellen] at @s run function kamera-system:v1erstellen

# Wurde der Tisch-Rüstungsständer platziert, wird von ihm aus die Bauwerks-Funktion geladen.
execute as @e[type=minecraft:armor_stand,tag=EtiKamS.1Bauwerk] at @s run function kamera-system:v1bauwerk

# Der Kamera-Rüstungsständer blickt immer zum nächst gelegenen Spieler und damit sich die Kamera auch horizontal nach unten oder oben bewegt, wird die aktuelle Rotation in die Kopf-Rotation übertragen.
execute as @e[type=minecraft:armor_stand,tag=EtiKamS.1Kamera] at @s run teleport @s ~ ~ ~ facing entity @p[distance=..15,gamemode=!spectator] feet
execute as @e[type=minecraft:armor_stand,tag=EtiKamS.1Kamera] run data modify entity @s Pose.Head[0] set from entity @s Rotation[1]

# Wenn Spieler den Stock ausgewählt haben, wird ein Etikett vergeben.
tag @a[nbt={SelectedItem:{tag:{EigKamS.1Monitor:true} } }] add EtiKamS.1Ausgewaehlt

# Wenn Spieler gerade erst den Stock ausgewählt haben, wird ihnen der Auslöser-Wert auf einen Wert gesetzt der nicht null ist.
scoreboard players set @a[tag=EtiKamS.1Ausgewaehlt,tag=!EtiKamS.1Auswahl] PZKamS.1Ausl -99

# Wenn Spieler den Stock ausgewählt haben und ihr Auslöser-Wert nicht null ist dann müssen sie den Auslöser betätigt haben und die Auslöser-Funktion wird geladen.
execute as @a[tag=EtiKamS.1Ausgewaehlt] unless entity @s[scores={PZKamS.1Ausl=0}] run function kamera-system:v1ausloeser

# Spieler die die Sicht der Kamera besitzen, bekommen den Nachtischteffekt und schauen aus der Sicht der Kamera auf den Standort.
effect give @a[gamemode=spectator,tag=EtiKamS.1Ausgewaehlt] minecraft:night_vision 1 1 true
execute as @a[gamemode=spectator,tag=EtiKamS.1Ausgewaehlt] at @s run spectate @e[type=minecraft:armor_stand,tag=EtiKamS.1Kamera,sort=nearest,limit=1] @s

# Um zu erfassen ob Spieler gerade erst den Stock ausgewählt haben, wird ihnen ein zusätzliches Etikett gegeben oder entfernt.
tag @a[tag=EtiKamS.1Ausgewaehlt,tag=!EtiKamS.1Auswahl] add EtiKamS.1Auswahl
tag @a[tag=!EtiKamS.1Ausgewaehlt,tag=EtiKamS.1Auswahl] remove EtiKamS.1Auswahl

# Das Etikett wird wieder entfernt.
tag @a[tag=EtiKamS.1Ausgewaehlt] remove EtiKamS.1Ausgewaehlt

Variante 1: Erstellen-Funktion
Die Erstellen-Funktion sorgt für den Kamera-Kopf im Rüstungsständer und sorgt für entsprechende Fehlermeldungen, wenn nicht alle Voraussetzungen stimmen.

kamera-system:v1erstellen.mcfunction
# Wenn noch kein Monitor mit Tisch platziert wurde, wird dem Kamera-Rüstungsständer ein Etikett gegeben.
execute unless entity @e[type=minecraft:armor_stand,tag=EtiKamS.1Monitor] run tag @s add EtiKamS.1MonitorFehlt

# Ebenfalls wird geprüft ob sich an der Position der neuen Kamera auch ein Halter befindet, nur dann wird das Etikett vergeben.
execute if block ~ ~1 ~ minecraft:lever[face=wall,powered=false] run tag @s[tag=!EtiKamS.1MonitorFehlt] add EtiKamS.1Kamera

# Wenn die Kamera einen Halter hat, wird ihm Kopfslot des Rüstungsständers ein Spielerkopf kopiert mit der Textur einer Kamera.
data modify entity @s[tag=EtiKamS.1Kamera] ArmorItems[3] set value {id:"minecraft:player_head",Count:1b,tag:{display:{Name:'{"text":"Kamera"}'},SkullOwner:{Id:[I;797692767,214648518,-2094961131,-1410769773],Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTQ0MjJhODJjODk5YTljMTQ1NDM4NGQzMmNjNTRjNGFlN2ExYzRkNzI0MzBlNmU0NDZkNTNiOGIzODVlMzMwIn19fQ=="} ] } } } }

# Die Kamera wird etwas nach oben teleportiert und bekommt eine Nummer, die höher ist, als die letzte.
teleport @s[tag=EtiKamS.1Kamera] ~ ~0.5 ~
execute store result score @s[tag=EtiKamS.1Kamera] PZKamS.1Nr run scoreboard players add VarKamS.1Nummer PZKamS.1Nr 1

# Das Etikett wird entfernt, wenn die Kamera einen Halter hat.
tag @s[tag=EtiKamS.1Kamera] remove EtiKamS.1Erstellen

# Falls keine Kamer-Halterung vorhanden war, wird ein Drop erzeugt der die Kamera beinhaltet.
execute if entity @s[tag=!EtiKamS.1Kamera] run summon minecraft:item ~ ~ ~ {Item:{id:"minecraft:armor_stand",Count:1b,tag:{EigKamS.1Alle:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Kamera","color":"aqua","bold":true}',Lore:['"Platziere den Rüstungsständer"','"unter einem Kamera-Ständer"','"um die Kamera zu erzeugen."']},EntityTag:{Invisible:true,NoGravity:true,Tags:["EtiKamS.1Alle","EtiKamS.1Erstellen"] } } } }

# Es wird eine Fehlermeldung ausgegeben, wenn es keine Halterung gibt.
execute if entity @s[tag=!EtiKamS.1Kamera,tag=!EtiKamS.1MonitorFehlt] run tellraw @a[distance=..5] ["Kamera-System.1:\n",{"text":"Ein Kamera-Ständer konnte an der Position der Kamera nicht gefunden werden werden.","color":"red","bold":true}]

# Es wird eine Fehlermeldung ausgegeben, wenn es keinen Monitor gibt.
execute if entity @s[tag=EtiKamS.1MonitorFehlt] run tellraw @a[distance=..5] ["Kamera-System.1:\n",{"text":"Die Kamera konnte nicht an einem Kamera-Ständer aufgehängt werden, da es keinen Kamera-Tisch gibt.","color":"red","bold":true}]

# Falls die Kamera nicht erstellt werden konnte, wird der Rüstungsständer gelöscht.
kill @s[tag=!EtiKamS.1Kamera]

Variante 1: Bauwerk-Funktion
Die Bauwerk-Funktion erstellt den Monitor und den Tisch dazu, abhängig der Blickrichtung und gibt dem Spieler den Stock.

kamera-system:v1bauwerk.mcfunction
# Es wird geprüft ob der Rüstungsstäner in Richtung der Himmelsrichtungen die in Richtung des Äquators liegen schaut und dann bekommt der Rüstungsständer ein Etikett.
execute if entity @s[y_rotation=-135..135] unless entity @s[y_rotation=-45..45] run tag @s add EtiKamS.1Aequator

# Die Holztreppen werden entsprechend der Richtung des Rüstungsständers platziert.
execute if entity @s[tag=EtiKamS.1Aequator] run setblock ~ ~ ~-1 minecraft:oak_stairs[half=top,facing=north] replace
execute if entity @s[tag=EtiKamS.1Aequator] run setblock ~ ~ ~1 minecraft:oak_stairs[half=top,facing=south] replace

execute if entity @s[tag=!EtiKamS.1Aequator] run setblock ~-1 ~ ~ minecraft:oak_stairs[half=top,facing=west] replace
execute if entity @s[tag=!EtiKamS.1Aequator] run setblock ~1 ~ ~ minecraft:oak_stairs[half=top,facing=east] replace

# In der Mitte des Tischs, wird eine Holzstufe gebaut.
setblock ~ ~ ~ minecraft:oak_slab[type=top] replace

# Der Rüstungsständer bekommt in seinen Kopfslot einen Spielerkopf mit der Textur eines Monitors.
data modify entity @s ArmorItems[3] set value {id:"minecraft:player_head",Count:1b,tag:{display:{Name:'{"text":"Monitor"}'},SkullOwner:{Id:[I;-436341191,-514502777,-1204312239,-1125098671],Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTg0MmRjM2I5MTdiMWE3OTZjMzAzZTE1MTA1NDc0YThlMzE1ZGU3OTgyYjZjYTU0ZmVhZmI1YTRkMTNkNGU5NSJ9fX0="} ] } } } }

# Damit der Spieler die Kameras ansteuern kann, bekommt er einen Stock, den er dazu auswählen muss.
give @p[distance=..5] minecraft:stick{EigKamS.1Alle:true,EigKamS.1Monitor:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Kamera-Sicht","color":"dark_purple","bold":true}',Lore:['"Wähle den Stock aus"','"um die Sicht der Kameras"','"zu übernehmen."'] } }

# Der Monitor wird noch etwas nach unten teleportiert und blickt dabei zum Spieler.
teleport @s ~ ~-0.4 ~ facing entity @p

# Etiketten werden entfernt und gegeben.
tag @s remove EtiKamS.1Bauwerk
tag @s add EtiKamS.1Monitor

Variante 1: Auslöser-Funktion
Die Auslöser-Funktion sorgt dafür, dass Spieler die am Monitor stehen und die Kamera-Ansicht sehen möchten, in den Zuschauermodus gelangen und durch die Kameras durchwechseln können. Sie sorgt auch dafür, dass die Spieler wieder zum Monitor gelangen, wenn sie alle Kameras durch gegangen sind.

kamera-system:v1ausloeser.mcfunction
# Wenn der Spieler nicht gerade in der Kamerasicht ist (kein Zuschauer), dann wird seine Nummer auf null gesetzt und anschließend wird sein Wert um eins erhöht.
scoreboard players set @s[gamemode=!spectator,scores={PZKamS.1Ausl=1}] PZKamS.1Nr 0
scoreboard players add @s[scores={PZKamS.1Ausl=1}] PZKamS.1Nr 1

# Wenn der Spieler zur nächsten Kamera möchte, es jedoch keine weitere Kamera gibt, wird ihm ein Etikett vergeben.
execute if score @s[gamemode=spectator,scores={PZKamS.1Ausl=1}] PZKamS.1Nr > VarKamS.1Nummer PZKamS.1Nr run tag @s add EtiKamS.1ZumMonitor

# Der Spieler wird zum nächst gelegenen Monitor teleportiert, sein Auslöser-Wert wird geändert und er bekommt die Nachtsicht wieder entfernt und wird in den Überlebensmodus gesetzt.
execute if entity @s[tag=EtiKamS.1ZumMonitor] at @e[type=minecraft:armor_stand,tag=EtiKamS.1Monitor,sort=nearest,limit=1] rotated ~ 0 run teleport @s ^ ^0.4 ^1 facing entity @e[type=minecraft:armor_stand,tag=EtiKamS.1Monitor,sort=nearest,limit=1]
scoreboard players set @s[tag=EtiKamS.1ZumMonitor] PZKamS.1Ausl -99
effect clear @s[tag=EtiKamS.1ZumMonitor] minecraft:night_vision
gamemode survival @s[tag=EtiKamS.1ZumMonitor]

# Das Etikett wird entfernt.
tag @s[tag=EtiKamS.1ZumMonitor] remove EtiKamS.1ZumMonitor

# Wenn der Spieler nicht bereits in der Kamera-Ansicht ist, wird geprüft ob ein Monitor in der Nähe ist und nur dann wird ein Etikett vergeben.
execute at @s[gamemode=!spectator,scores={PZKamS.1Ausl=1}] if entity @e[distance=..5,type=minecraft:armor_stand,tag=EtiKamS.1Monitor] run tag @s add EtiKamS.1BeimMonitor

# Falls der Spieler beim Monitor ist und es Kameras gibt, wird ihm ein weiteres Etikett vergeben.
execute if entity @s[tag=EtiKamS.1BeimMonitor] if entity @e[type=minecraft:armor_stand,tag=EtiKamS.1Kamera] run tag @s add EtiKamS.1KameraVorhanden
gamemode spectator @s[tag=EtiKamS.1KameraVorhanden]

# Der Spieler der bereits im Zuschauermodus ist und zur nächsten Kamera gelangen will, wird zu dieser teleportiert.
execute at @s[gamemode=spectator,scores={PZKamS.1Ausl=1}] as @e[type=minecraft:armor_stand,tag=EtiKamS.1Kamera] if score @s PZKamS.1Nr = @p PZKamS.1Nr run teleport @p @s

# Falls der Spieler zur Kamera-Ansicht kommen möchte, aber kein Monitor in der Nähe ist, wird ihm eine Fehlermeldung ausgegeben.
tellraw @s[gamemode=!spectator,tag=!EtiKamS.1BeimMonitor,scores={PZKamS.1Ausl=1}] ["Kamera-System.1:\n",{"text":"Es konnte nicht zur Sicht der Kamera gewechselt werden, da sich in der Nähe kein Monitor befindet.","color":"red","bold":true}]

# Falls zwar ein Monitor vorhanden ist, aber keine Kameras, wird dem Spieler auch hier eine Fehlermeldung ausgegeben.
tellraw @s[gamemode=!spectator,tag=EtiKamS.1BeimMonitor,tag=!EtiKamS.1KameraVorhanden,scores={PZKamS.1Ausl=1}] ["Kamera-System.1:\n",{"text":"Es existiert noch keine Kamera, um sich deren Sicht anzuschauen.","color":"red","bold":true}]

# Die Etiketten werden wieder entfernt.
tag @s[tag=EtiKamS.1BeimMonitor] remove EtiKamS.1BeimMonitor
tag @s[tag=EtiKamS.1KameraVorhanden] remove EtiKamS.1KameraVorhanden

# Der Spieler erhält im Chat eine anklickbare Nachricht auf die er klicken kann um den Auslöser zu betätigen.
tellraw @s ["Kamera-System.1:\n",{"text":"Drücke T und tippe 'nächste Kamera'","bold":true},"\n",{"text":"Nächste Kamera","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für nächste Kamera"} },"clickEvent":{"action":"run_command","value":"/trigger PZKamS.1Ausl set 1"} }]

# Damit der Spieler den Auslöser immer wieder betätigen kann, wird ihm die Berechtigung gegeben und sein Wert wird auf null gesetzt.
scoreboard players enable @s PZKamS.1Ausl
scoreboard players set @s PZKamS.1Ausl 0

Variante 1: Stopp-Funktion
Die Stopp-Funktion löscht die Punkte-Ziele, die Etiketten und Gegenstände aus den Inventaren. Es werden auch alle Kameras und Monitore entfernt.

kamera-system:v1stopp.mcfunction
# Die Punkte-Ziele werden entfernt.
scoreboard objectives remove PZKamS.1Ausl
scoreboard objectives remove PZKamS.1Nr

# Die einzelnen Gegenstände die für die Kameras benötigt werden, werden entfernt.
clear @a minecraft:lever{EigKamS.1Alle:true}
clear @a minecraft:stick{EigKamS.1Alle:true}
clear @a minecraft:armor_stand{EigKamS.1Alle:true}

# Das eventuell noch vorhandene Etikett wird entfernt.
tag @a[tag=EtiKamS.1Auswahl] remove EtiKamS.1Auswahl

# Die Kamera-Halter und die Tische werden entfernt.
execute at @e[type=minecraft:armor_stand,tag=EtiKamS.1Kamera] align y run setblock ~ ~1 ~ minecraft:air replace
execute at @e[type=minecraft:armor_stand,tag=EtiKamS.1Monitor] align y run fill ~-1 ~1 ~-1 ~1 ~1 ~1 minecraft:air replace

# Eventuell auf den Boden gedroppte Gegenstände werden etikettiert und alle Objekte mit dem Etikett werden entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigKamS.1Alle:true} } }] add EtiKamS.1Alle
kill @e[tag=EtiKamS.1Alle]
Advertisement