Technik Wiki
Registrieren
Advertisement
Gruppe: Grid Ketten-Befehlsblock
Systeme

Grid Roter Sand blass mit Mechaniken

Grid Redstone blass mit Redstone
                Hier:
Grid Befehlsblock mit Befehlen
Verfügbar in:
Wiki Mechanik-Welt Mechanik-Welt

Ein Zonen-System ermöglicht es, dem Spieler eine oder mehrere persönliche Zonen anzulegen, auf denen nur der Spieler selbst etwas bauen kann. Das Betreten oder Verlassen der Zone wird angezeigt und man kann Zonen anlegen und auch wieder löschen. Fremde Spieler können dort nicht bauen. Auch gilt auf der Zone kein PvP, sodass der Spieler selbst vor Angriffen anderer Spieler geschützt ist. Ebenfalls lässt sich die Zone auch komplett für Fremde Spieler sperren, sodass kein Zutritt möglich ist.

Variante 1[]

Zonen-System (Befehle) Bild 1.1 Zonen-System (Befehle) Bild 1.2 Zonen-System (Befehle) Bild 1.3

Dieses Zonen-System bietet eine Fülle an Möglichkeiten. Man erhält zwei Sorten von Rüstungsständer, welche für Kugel- oder Kubus-Zonen verwendet werden können. Man kann sie überall platzieren und über Chat-Nachrichten lässt sich die Größe der Zone beeinflussen und jede dieser Aktionen kostet etwas Erfahrungspunkte. Jeder Spieler kann seine eigenen Zonen platzieren und dessen Name sowie die wie vielte Zone es ist, wird im Zentrum der Zone angezeigt. Zonen können überlappen, beim gleichen Besitzer macht es keinen Unterschied, während es bei verschiedenen Spielern so geregelt ist, dass die Zone die Fläche beansprucht die zuerst da war. Besitzt man nicht genug Erfahrungspunkte, lassen sich keine weiteren Zonen platzieren. Das Zonen-System verfügt auch über die Chat-Option, die Zone für alle fremden Spieler zu sperren.

Einschalten

Um das System zu starten, legt man den Hebel auf dem Wiederhol-Befehlsblock um, der neben einem Befehlsblock liegt.

Wiederholen

Nur wenn der Spieler den Hebel umgelegt hat, wird jeden Tick der Wiederhol-Befehlsblock ausgeführt.

Ausschalten

Wird der Hebel wieder umgelegt, so wird der Befehlsblock durch die Redstone-Fackel eingeschaltet.


Befehlsblöcke mit Befehlen:


Variante 1: Start-Funktion
Die Start-Funktion erstellt alle nötigen Punkte-Ziele und Variablen und ein Team. Die Spieler erhalten die Zonen-Rüstungsständer in ihr Inventar und der Chunk wird dauerhaft aktiv geschaltet, damit auch in weiter Ferne das System funktioniert.

Editor Icon zonen-system:v1start.mcfunction
# Verschiedene Punkte-Ziele für verschiedene Aufgaben werden erstellt.
scoreboard objectives add PZZonS.1Ausl trigger ["Zonen-System.1: ",{"text":"Zonenoption angeklickt","bold":true}]
scoreboard objectives add PZZonS.1Groes dummy ["Zonen-System.1: ",{"text":"Zonen-Größe","bold":true}]
scoreboard objectives add PZZonS.1Nr dummy ["Zonen-System.1: ",{"text":"Spieler-UUID","bold":true}]
scoreboard objectives add PZZonS.1ZonenNr dummy ["Zonen-System.1: ",{"text":"Zonen-Nummer","bold":true}]
scoreboard objectives add PZZonS.1Rang minecraft.custom:minecraft.leave_game ["Zonen-System.1: ",{"text":"Rang und Spiel verlassen","bold":true}]

# Eine Konstante mit dem Wert minus eins wird erstellt und alle Spieler im Umkreis von 15 Blöcken erhalten den Wert fünf für die Größe der Zonen.
scoreboard players set KonstZonS.1MINUSEINS PZZonS.1Ausl -1
scoreboard players set @a[distance=..15] PZZonS.1Groes 5

# Ein Team wird erstellt, welches verwendet wird um Spielern die Spieler-gegen-Spieler-Regel auszuschalten.
team add TMZonS.1KeinPvP ["Zonen-System.1: ",{"text":"Kein PvP","bold":true}]
team modify TMZonS.1KeinPvP friendlyFire false

# Der Spielmodus wird auf Überleben gesetzt.
gamemode survival @a[distance=..15,gamemode=!survival]

# Spieler erhalten 30 Erfahrungslevels.
experience add @a[distance=..15] 30 levels

# Spieler im Umkreis von 15 Blöcken erhalten zwei mal 16 Rüstungsständer, zum Platzieren von Kugel- und Kubus-Zonen.
give @a[distance=..15] minecraft:armor_stand{EigZonS.1Alle:true,display:{Name:'{"text":"Kugel-Zone","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um die Zone zu erzeugen"']},EntityTag:{Small:true,Marker:true,Invisible:true,NoGravity:true,CustomNameVisible:true,CustomName:'{"text":"-Zone","color":"gold","bold":true}',Tags:["EtiZonS.1Alle","EtiZonS.1Zone","EtiZonS.1Kugel"] } } 16
give @a[distance=..15] minecraft:armor_stand{EigZonS.1Alle:true,display:{Name:'{"text":"Kubus-Zone","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um die Zone zu erzeugen"']},EntityTag:{Small:true,Marker:true,Invisible:true,NoGravity:true,CustomNameVisible:true,CustomName:'{"text":"-Zone","color":"gold","bold":true}',Tags:["EtiZonS.1Alle","EtiZonS.1Zone","EtiZonS.1Kubus"] } } 16

# Es wird eine Partikelwolke erzeugt, an deren Position ein Schild aufgestellt wird. Das wird benötigt um den Zonen-Namen zusammen zu fügen und der Zone schlussendlich übergeben zu können.
summon minecraft:area_effect_cloud ~ ~1 ~ {Duration:-1,Age:-2147483648,WaitTime:-2147483648,Particle:"minecraft:block minecraft:air",Tags:["EtiZonS.1Alle","EtiZonS.1Schild"],CustomName:'{"text":"Unbekannt","color":"red","bold":true}'}
execute at @e[tag=EtiZonS.1Schild] run setblock ~ ~ ~ minecraft:oak_sign replace

# Der Chunk wird aktiviert.
forceload add ~ ~

Variante 1: Zyklus-Funktion
Die Zyklus-Funktion sorgt für die Übertragung der UUID des Spielers in einen Punktestand, sie sorgt dafür, dass beim Auswählen der Rüstungsständer die Auslöser-Funktion aktiviert wird. Durch sie werden die Kugel- und Kubus-Funktionen geladen, damit die Zonen ihre eingestellte Größe besitzen. Es wird dafür gesorgt, dass die Flächenzugehörigkeit bei Zonen-Überlappungen stimmt und das beim Betreten oder Verlassen eine Nachricht erscheint.

Editor Icon zonen-system:v1zyklus.mcfunction
# Alle Spieler die noch nicht ihre UUID in einen Punktestand übertragen haben, übertragen von der UUID nur den Wert des ersten Feldes in den Punktestand.
execute as @a unless score @s PZZonS.1Nr = @s PZZonS.1Nr store result score @s PZZonS.1Nr run data get entity @s UUID[0]

# Alle Zonen-Rüstungsständer die augenblicklich platziert wurden, besitzen noch nicht den Spielernamen im Namen, weshalb genau diese die Zonen-Namen-Funktion aufrufen.
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone,name="-Zone"] at @s run function zonen-system:v1zone_name

# Wenn der Spieler den Rüstungsständer ausgewählt hat, erhält er ein Etikett.
tag @a[nbt={SelectedItem:{tag:{EigZonS.1Alle:true} } }] add EtiZonS.1Ausgewaehlt

# Wenn der Spieler gerade den Rüstungsständer ausgewählt hat, wird sein Auslöser-Wert gesetzt, damit er die Funktion lädt.
scoreboard players set @a[tag=EtiZonS.1Ausgewaehlt,tag=!EtiZonS.1Auswahl] PZZonS.1Ausl -99

# Wenn der Spieler gerade erst die Auswahl getroffen hat, erhält er ein Etikett. Es wird entfernt sobald er den Rüstungsständer nicht mehr ausgewählt hat.
tag @a[tag=EtiZonS.1Ausgewaehlt,tag=!EtiZonS.1Auswahl] add EtiZonS.1Auswahl
tag @a[tag=!EtiZonS.1Ausgewaehlt,tag=EtiZonS.1Auswahl] remove EtiZonS.1Auswahl

# Wenn der Spieler den Rüstungsständer ausgewählt hat und einen Auslöser-Wert besitzt, der nicht null ist, so wird die Auslöser-Funktion geladen.
execute as @a[tag=EtiZonS.1Ausgewaehlt] unless entity @s[scores={PZZonS.1Ausl=0}] at @s run function zonen-system:v1ausloeser

# Die Zonen-Namen werden unsichtbar gemacht, sofern kein Spieler der gleichen Zone in der Nähe ist, der einen Zonen-Rüstungsständer im Inventar ausgewählt hat.
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone,nbt={CustomNameVisible:true}] run data merge entity @s {CustomNameVisible:false}
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone] at @s at @a[distance=..100,tag=EtiZonS.1Ausgewaehlt] if score @s PZZonS.1ZonenNr = @p PZZonS.1Nr run data merge entity @s {CustomNameVisible:true}

# Spieler die das Spiel verlassen haben, bekommen das Etikett entfernt, damit sie beim Beitreten innerhalb einer Zone erneut die Nachricht für das Betreten der Zone erhalten.
tag @a[tag=EtiZonS.1Nachricht,scores={PZZonS.1Rang=1..}] remove EtiZonS.1Nachricht
scoreboard players set @a PZZonS.1Rang 2147483647

# Kugel-Zonen-Rüstungsständer laden die Kugel-Zonen-Funktion und Kubus-Zonen-Rüstungsständer laden die Kubus-Zonen-Funktion.
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone,tag=EtiZonS.1Kugel] at @s run function zonen-system:v1kugel_zone
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone,tag=EtiZonS.1Kubus] at @s run function zonen-system:v1kubus_zone

# Wenn der Spieler innerhalb einer Zone sich befindet, die mit einer anderen Zone überlappt, wird geprüft welche der beiden Zonen zuerst platziert wurde und falls der Spieler nicht die gleiche Nummer besitzt, wird ihm das Etikett für die Nachricht entfernt, damit er eine Nachricht für das Betreten einer anderen Zone erhält.
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone] at @s at @a[distance=..100,tag=EtiZonS.1Nachricht] if score @s PZZonS.1Rang = @p PZZonS.1Rang unless score @p PZZonS.1ZonenNr = @s PZZonS.1ZonenNr run tag @p remove EtiZonS.1Nachricht
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone] at @s at @a[distance=..100] if score @s PZZonS.1Rang = @p PZZonS.1Rang run scoreboard players operation @p PZZonS.1ZonenNr = @s PZZonS.1ZonenNr

# Von der Position der Zone aus, wird geprüft ob die Spieler noch nicht die Nachricht erhalten haben und einen Wert der kleiner als die größte Ganzzahl besitzen. Und nur wenn die Spieler den gleichen Wert wie die Zone besitzen, erhalten sie von dieser Zone eine Nachricht für das Betreten.
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone] at @s at @a[distance=..100,tag=!EtiZonS.1Nachricht,scores={PZZonS.1Rang=..2147483646}] if score @s PZZonS.1Rang = @p PZZonS.1Rang run tellraw @p ["Zonen-System.1:\n",{"text":"Sie betreten [","color":"gray","bold":true},{"entity":"@s","nbt":"CustomName","interpret":true},{"text":"]","color":"gray","bold":true}]

# Die gleichen Spieler die für das Betreten der Zone eine Nachricht erhalten, bekommen auch Regenerations-, Sättigkeits- und Resistenz-Effekte.
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone] at @s at @a[distance=..100,tag=!EtiZonS.1Nachricht,level=1..,scores={PZZonS.1Rang=..2147483646}] if score @s PZZonS.1Rang = @p PZZonS.1Rang if score @s PZZonS.1ZonenNr = @p PZZonS.1Nr run effect give @p minecraft:regeneration 10 255 true
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone] at @s at @a[distance=..100,tag=!EtiZonS.1Nachricht,level=1..,scores={PZZonS.1Rang=..2147483646}] if score @s PZZonS.1Rang = @p PZZonS.1Rang if score @s PZZonS.1ZonenNr = @p PZZonS.1Nr run effect give @p minecraft:saturation 10 255 true
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone] at @s at @a[distance=..100,tag=!EtiZonS.1Nachricht,level=1..,scores={PZZonS.1Rang=..2147483646}] if score @s PZZonS.1Rang = @p PZZonS.1Rang if score @s PZZonS.1ZonenNr = @p PZZonS.1Nr run effect give @p minecraft:resistance 10 255 true

# Damit der Spieler die Effekte nicht komplett kostenlos erhält, wird íhm ein Erfahrungspunkt abgezogen.
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone] at @s at @a[distance=..100,tag=!EtiZonS.1Nachricht,level=1..,scores={PZZonS.1Rang=..2147483646}] if score @s PZZonS.1Rang = @p PZZonS.1Rang if score @s PZZonS.1ZonenNr = @p PZZonS.1Nr run experience add @p -1 points

# Wenn Spieler im Inventar einen Zonen-Rüstungsständer ausgewählt haben, wird ihnen über der Schnellleiste eine Titel-Nachricht von der Zone angezeigt in der sie sich befinden. Und das auch, wenn das ein überlappender Teil einer Zone ist.
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone] at @s at @a[distance=..100,tag=EtiZonS.1Ausgewaehlt,scores={PZZonS.1Rang=..2147483646}] if score @s PZZonS.1Rang = @p PZZonS.1Rang run title @p actionbar ["",{"text":"[","color":"gray","bold":true},{"entity":"@s","nbt":"CustomName","interpret":true},{"text":"]","color":"gray","bold":true}]

# Alle Spieler die eine Zone betreten haben (Wert kleiner als größte Ganzzahl) und das Etikett für die Nachricht nicht besitzen, erhalten das Etikett.
tag @a[tag=!EtiZonS.1Nachricht,scores={PZZonS.1Rang=..2147483646}] add EtiZonS.1Nachricht

# Spieler die das Etikett für die Nachricht besitzen und auf keiner Zone mehr sind, erhalten die Nachricht. Anschließend wird das Etikett entfernt.
tellraw @a[tag=EtiZonS.1Nachricht,scores={PZZonS.1Rang=2147483647}] ["Zonen-System.1:\n",{"text":"Sie verlassen die Zone","color":"gray","bold":true}]
title @a[tag=EtiZonS.1Ausgewaehlt,scores={PZZonS.1Rang=2147483647}] actionbar ["",{"text":"Keine Zone","color":"gray","bold":true}]
tag @a[tag=EtiZonS.1Nachricht,scores={PZZonS.1Rang=2147483647}] remove EtiZonS.1Nachricht

# Damit beim erneuten Durchlauf das Verlassen des Spiels erkannt werden kann, wird der Wert wieder auf null gesetzt.
scoreboard players set @a[scores={PZZonS.1Rang=1..}] PZZonS.1Rang 0

# Spieler die im Abenteuermodus sind und in keiner Zone sich mehr aufhalten, werden wieder in den Überlebensmodus gesetzt.
gamemode survival @a[gamemode=adventure,tag=!EtiZonS.1InZone]

# Spieler die sich in einer Zone aufhalten werden in das Team gesteckt, während die die sich nicht in einer Zone befinden das Team wieder verlassen.
team join TMZonS.1KeinPvP @a[tag=EtiZonS.1InZone]
team leave @a[tag=!EtiZonS.1InZone,team=TMZonS.1KeinPvP]

# Etiketten der Spieler werden entfernt.
tag @a[tag=EtiZonS.1Ausgewaehlt] remove EtiZonS.1Ausgewaehlt
tag @a[tag=EtiZonS.1InZone] remove EtiZonS.1InZone

Variante 1: Zonen-Namen-Funktion
Die Zonen-Namen-Funktion sorgt dafür, dass die Zone beim erstellen, ihren Namen aus dem Spielernamen, der Zone und der Zonennummer erhält, Es wird dafür gesorgt, dass die Zone nur dann erstellt werden kann, wenn der Spieler genug Erfahrungspunkte hat, ansonsten wird sie wieder gelöscht und er erhält den Rüstungsständer zurück.

Editor Icon zonen-system:v1zone_name.mcfunction
# Für das bessere Erkennen im stationären Schild, wird dem Spieler und dem Zonen-Rüstungsständer ein Etikett gegeben.
tag @p add EtiZonS.1Spieler
tag @s add EtiZonS.1Name

# Wenn der Spieler nicht ausreichend Erfahrungspunkte besitzt werden ihm Etiketten und Werte zugewiesen die dafür sorgen, dass die Auslöser-Funktion den Rüstungsständer wieder droppt, den der Spieler gerade platziert hat.
execute unless entity @p[tag=EtiZonS.1Spieler,level=5..,scores={PZZonS.1Groes=5..}] run tag @p[tag=EtiZonS.1Spieler] add EtiZonS.1Loeschen
execute unless entity @p[tag=EtiZonS.1Spieler,level=5..,scores={PZZonS.1Groes=5..}] run tag @p[tag=EtiZonS.1Spieler] add EtiZonS.1Ausgewaehlt
execute unless entity @p[tag=EtiZonS.1Spieler,level=5..,scores={PZZonS.1Groes=5..}] run scoreboard players set @p[tag=EtiZonS.1Spieler] PZZonS.1Ausl -2

# Ebenfalls erhält der Spieler eine Titel-Nachricht, wenn die Erfahrungspunkte nicht ausreichen.
execute unless entity @p[tag=EtiZonS.1Spieler,level=5..,scores={PZZonS.1Groes=5..}] run title @p[tag=EtiZonS.1Spieler] title ["",{"text":"Zu wenig XP","color":"red","bold":true}]

# Wenn der Spieler ausreichend Erfahrungspunkte besitzt, werden ihm fünf Stufen abgezogen.
experience add @p[tag=EtiZonS.1Spieler,level=5..,scores={PZZonS.1Groes=5..}] -5 levels

# Wenn eine Zone in Form eines Rüstungsständers gerade platziert wurde, wird diesem der nächste Wert der Variablen zugewisen.
execute store result score @s PZZonS.1Rang run scoreboard players add VarZonS.1Rangfolge PZZonS.1Rang 1

# Der Zonen-Rüstungsständer erhält den Wert der Größe vom nächstgelegenen Spieler in beiden seiner Punktestände.
execute store result score @s PZZonS.1Groes run scoreboard players operation @s PZZonS.1Ausl = @p[tag=EtiZonS.1Spieler] PZZonS.1Groes

# Für Kugel-Zonen wird der Wert für die Größe quadriert.
scoreboard players operation @s PZZonS.1Groes *= @s PZZonS.1Groes

# Um zu erfassen wem die Zone gehört, wird die Spieler-Nummer in die Zonen-Nummer des Zonen-Rüstungsständers kopiert.
scoreboard players operation @s PZZonS.1ZonenNr = @p[tag=EtiZonS.1Spieler] PZZonS.1Nr

# Damit jede weitere vom selben Spieler platzierte Zone eine fortlaufende Nummer erhält, wird von allen Zonen-Rüstungsständer aus geprüft, ob sie dem Spieler angehören. Jede eigene Zone die bereits exisitert, erhöht den Wert der neusten Zone um eins, sodass diese einen Wert besitzt der um eins höher ist als der aktuelle.
execute as @e[type=minecraft:armor_stand,tag=EtiZonS.1Zone] if score @s PZZonS.1ZonenNr = @p[tag=EtiZonS.1Spieler] PZZonS.1Nr run scoreboard players add @e[type=minecraft:armor_stand,tag=EtiZonS.1Name,sort=nearest,limit=1] PZZonS.1Nr 1

# Von der Position der Partikelwolke bei der ein Schild steht, werden die Daten des Spieler-Namens und des Zonen-Rüstungsständers und der Zonen-Nummer zusammengefügt und als Text gespeichert.
execute at @e[tag=EtiZonS.1Schild,sort=nearest,limit=1] run data merge block ~ ~ ~ {Text1:'[{"selector":"@p[tag=EtiZonS.1Spieler]","color":"red","bold":true},{"text":"\'s","color":"red","bold":true},{"entity":"@e[tag=EtiZonS.1Name,sort=nearest,limit=1]","nbt":"CustomName","interpret":true},{"text":"#","color":"dark_purple","bold":true},{"score":{"name":"@e[tag=EtiZonS.1Name,sort=nearest,limit=1]","objective":"PZZonS.1Nr"},"color":"dark_purple","bold":true}]'}

# Der zusammengesetzte Namen im Schild, wird in den Namen des Rüstungsständers gespeichert.
execute at @e[tag=EtiZonS.1Schild,sort=nearest,limit=1] run data modify entity @s CustomName set from block ~ ~ ~ Text1

# Die Etiketten werden wieder entfernt.
tag @p[tag=EtiZonS.1Spieler] remove EtiZonS.1Spieler
tag @s remove EtiZonS.1Name

Variante 1: Auslöser-Funktion
Die Auslöser-Funktion gibt dem Spieler durch Chat-Nachrichten, auf die man klicken kann, die Kontrolle über die Zone. Er kann die Größe vor dem Platzieren einstellen, er kann die Zone wieder löschen und er kann die Zone zu einer Sperrzone für Fremde Spieler einrichten.

Editor Icon zonen-system:v1ausloeser.mcfunction
# Wenn der Spieler auf eine der beiden Optionen im Chat geklickt hat, wird sein Wert um eins erhöht oder erniedrigt. So kann er die Größe der Zone festlegen. Die Zonen können minimal fünf Blöcke groß sein und maximal 64 Blöcke. Hierbei werden auch Erfahrungspunkte abgezogen.
scoreboard players add @s[level=1..,scores={PZZonS.1Ausl=1,PZZonS.1Groes=..63}] PZZonS.1Groes 1
experience add @s[level=1..,scores={PZZonS.1Ausl=1,PZZonS.1Groes=..63}] -1 levels

scoreboard players remove @s[scores={PZZonS.1Ausl=-1,PZZonS.1Groes=6..}] PZZonS.1Groes 1
experience add @s[scores={PZZonS.1Ausl=-1,PZZonS.1Groes=6..}] 10 points

# Wenn der Spieler irgendeine Schaltfläche angeklickt hat, die nichts mit dem Löschen der Zone zu tun hat, wird sein Etikett wieder entfernt.
execute unless entity @s[scores={PZZonS.1Ausl=-2}] run tag @s[tag=EtiZonS.1Loeschen] remove EtiZonS.1Loeschen

# Wenn der Spieler ein zweites mal auf die Löschen-Schaltfläche geklickt hat, bekommt die zu löschende Zone ein Etikett zur Markierung.
execute at @s[tag=EtiZonS.1Loeschen,scores={PZZonS.1Ausl=-2}] as @e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Zone,sort=nearest,limit=1] if score @p PZZonS.1Nr = @s PZZonS.1ZonenNr run tag @s add EtiZonS.1Loeschen

# An der Position der zu löschende Zone wird ein Drop erzeugt, der die Daten des Rüstungsständers inne hat.
execute if entity @s[tag=EtiZonS.1Loeschen,scores={PZZonS.1Ausl=-2}] at @e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Loeschen,sort=nearest,limit=1] run summon minecraft:item ~ ~ ~ {PickupDelay:32767s,Motion:[0.0d,0.3d,0.0d],Tags:["EtiZonS.1Alle","EtiZonS.1Drop"],Item:{id:"minecraft:armor_stand",Count:1b,tag:{EigZonS.1Alle:true,display:{Name:'{"text":"Kugel-Zone","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um die Zone zu erzeugen"']},EntityTag:{Small:true,Marker:true,Invisible:true,NoGravity:true,CustomNameVisible:true,CustomName:'{"text":"-Zone","color":"gold","bold":true}',Tags:["EtiZonS.1Alle","EtiZonS.1Zone","EtiZonS.1Kugel"] } } } }

# Falls die zu löschende Zone eine Kubus-Zone war, wird der Drop daran angepasst.
execute if entity @s[tag=EtiZonS.1Loeschen,scores={PZZonS.1Ausl=-2}] as @e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Loeschen,tag=EtiZonS.1Kubus,sort=nearest,limit=1] run data modify entity @e[distance=..5,type=minecraft:item,tag=EtiZonS.1Drop,sort=nearest,limit=1] Item.tag set value {EigZonS.1Alle:true,display:{Name:'{"text":"Kubus-Zone","color":"gold","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um die Zone zu erzeugen"']},EntityTag:{Small:true,Marker:true,Invisible:true,NoGravity:true,CustomNameVisible:true,CustomName:'{"text":"-Zone","color":"gold","bold":true}',Tags:["EtiZonS.1Alle","EtiZonS.1Zone","EtiZonS.1Kubus"] } }

# Damit der Drop sofort aufgehoben werden kann, wird seine Aufhebe-Zeit auf null gesetzt.
execute if entity @s[tag=EtiZonS.1Loeschen,scores={PZZonS.1Ausl=-2}] as @e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Loeschen,sort=nearest,limit=1] run data merge entity @e[distance=..5,type=minecraft:item,tag=EtiZonS.1Drop,sort=nearest,limit=1] {PickupDelay:0s}

# Wenn der Spieler auf die Löschen-Schaltfläche zweimal zur Bestätigung geklickt hat, wird der Zonen-Rüstungsständer sofern er dem eigenen Spieler angehört gelöscht.
execute if entity @s[tag=EtiZonS.1Loeschen,scores={PZZonS.1Ausl=-2}] run kill @e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Loeschen,sort=nearest,limit=1]

# Es erscheint eine Titel-Nachricht, wenn man die Zone erfolgreich gelöscht hat.
title @s[tag=EtiZonS.1Loeschen,level=5..,scores={PZZonS.1Ausl=-2}] title ["",{"text":"Zone gelöscht","color":"red","bold":true}]

# Wenn der Spieler zweimal auf die Löschen-Schaltfläche geklickt hat, wird ihm das Etikett wieder entfernt und sein Auslöse-Wert wird auf eins gesetzt, sodass er den nachfolgenden Befehl nicht mehr aktiviert.
execute store success score @s[tag=EtiZonS.1Loeschen,scores={PZZonS.1Ausl=-2}] PZZonS.1Ausl run tag @s remove EtiZonS.1Loeschen

# Wenn der Spieler das erste mal auf die Löschen-Schaltfläche klickt (Kein Etikett vorhanden), wird geprüft ob sich ein Zonen-Rüstungsständer mit seiner Nummer in der Nähe aufhält. Wenn das der Fall ist, wird dem Spieler ein Etikett gegeben.
execute if score @s[tag=!EtiZonS.1Loeschen,scores={PZZonS.1Ausl=-2}] PZZonS.1Nr = @e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Zone,sort=nearest,limit=1] PZZonS.1ZonenNr run tag @s add EtiZonS.1Loeschen

# Der Spieler hat die Auswahl, die Sperrzone zu aktivieren oder zu deaktivieren, je nach dem wird dem Zonen-Rüstungsständer dann das Etikett dafür gegeben oder entfernt. Hierbei wird auch eine Titel-Nachricht kurz angezeigt.
execute if entity @s[scores={PZZonS.1Ausl=3}] run tag @e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Zone,sort=nearest,limit=1] add EtiZonS.1Sperrzone
execute if entity @s[scores={PZZonS.1Ausl=3}] if entity @e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Zone,tag=EtiZonS.1Sperrzone,sort=nearest,limit=1] run title @s title ["",{"text":"Zone gesperrt","color":"red","bold":true}]

execute if entity @s[scores={PZZonS.1Ausl=-3}] run tag @e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Zone,sort=nearest,limit=1] remove EtiZonS.1Sperrzone
execute if entity @s[scores={PZZonS.1Ausl=-3}] if entity @e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Zone,tag=!EtiZonS.1Sperrzone,sort=nearest,limit=1] run title @s title ["",{"text":"Zone entsperrt","color":"green","bold":true}]

# Der Spieler erhält im Chat zwei Schaltflächen zur Auswahl und kann auf diese klicken um die Größe der Zone einzustellen.
tellraw @s ["Zonen-System.1: ",{"text":"\ngroesse = ","bold":true},{"text":"groesse + 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für den Größe + 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZZonS.1Ausl set 1"} },{"text":"\ngroesse = ","bold":true},{"text":"groesse - 1","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe für den Größe - 1"} },"clickEvent":{"action":"run_command","value":"/trigger PZZonS.1Ausl set -1"} },{"text":"\ngroesse == ","bold":true},{"score":{"name":"@s","objective":"PZZonS.1Groes"},"color":"dark_purple","bold":true}]

# Nur wenn der Spieler den Zonen-Rüstungsständer im Inventar ausgewählt hat und dabei ganz nah am Zonen-Zentrum steht, erhält er eine zusätzliche Option, die Zone wieder zu löschen.
execute if entity @e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Zone,sort=nearest,limit=1] run tellraw @s ["",{"text":"zone == ","bold":true},{"entity":"@e[distance=..5,type=minecraft:armor_stand,tag=EtiZonS.1Zone,sort=nearest,limit=1]","nbt":"CustomName","interpret":true},{"text":"\nzone","bold":true},{"text":".löschen(2)","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Tippe zweimal um Zone zu löschen."} },"clickEvent":{"action":"run_command","value":"/trigger PZZonS.1Ausl set -2"} },{"text":"\nzone.sperren() == ","bold":true},{"text":"wahr","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Zone für Fremde sperren."} },"clickEvent":{"action":"run_command","value":"/trigger PZZonS.1Ausl set 3"} },{"text":"\nzone.sperren() == ","bold":true},{"text":"falsch","color":"gray","underlined":true,"bold":true,"hoverEvent":{"action":"show_text","value":{"text":"Sperre aufheben."} },"clickEvent":{"action":"run_command","value":"/trigger PZZonS.1Ausl set -3"} } ]

# Der Spieler erhält die Berechtigung den Auslöser erneut zu betätigen und sein Wert wird wieder auf null gesetzt.
scoreboard players enable @s PZZonS.1Ausl
scoreboard players set @s PZZonS.1Ausl 0

Variante 1: Kugel-Zonen-Funktion
Die Kugel-Zonen-Funktion wird von Kugel-Rüstungsständern aufgerufen. Sie weist temporären Variablen die Koordinaten der Zone zu um anschließend durch alle in der Nähe befindlichen Spieler die Kugel-Spieler-Funktion aufzurufen. Danach wird die Kugel-Markierung-Zonen-Funktion geladen.

Editor Icon zonen-system:v1kugel_zone.mcfunction
# Die Koordinaten werden ausgelesen und werden in Variablen gespeichert.
execute store result score VarZonS.1X PZZonS.1Groes run data get entity @s Pos[0]
execute store result score VarZonS.1Y PZZonS.1Groes run data get entity @s Pos[1]
execute store result score VarZonS.1Z PZZonS.1Groes run data get entity @s Pos[2]

# Alle Spieler im Umkreis von 100 Metern, laden von ihrer Position die Positions-Spieler-Funktion.
execute at @a[distance=..100,tag=!EtiZonS.1InZone] run function zonen-system:v1kugel_spieler

# Um die Zone sichtbar zu machen wird die Zonen-Funktion geladen.
scoreboard players set VarZonS.1Zahl PZZonS.1Groes 0
function zonen-system:v1kugel_markierung_zone

Variante 1: Kugel-Spieler-Funktion
Die Kugel-Spieler-Funktion berechnet mit Hilfe des Pythagoras die Strecke zwischen Zonen-Mittelpunkt und den Spielern. Hierbei wird auf die Wurzel verzichtet indem der Radius einfach quadriert wird. Wenn die Strecke kleiner ist, befindet sich der Spieler in der Zone und dann wird mit ihm entsprechend verfahren. Ansonsten wird er nicht weiter beachtet.

Editor Icon zonen-system:v1kugel_spieler.mcfunction
# Die Koordinaten des Spielers werden ausgelesen und in Variablen gespeichert.
execute store result score VarZonS.1SpielerX PZZonS.1Groes run data get entity @p Pos[0]
execute store result score VarZonS.1SpielerY PZZonS.1Groes run data get entity @p Pos[1]
execute store result score VarZonS.1SpielerZ PZZonS.1Groes run data get entity @p Pos[2]

# Um die drei Katheten zu erhalten, wird von der Spieler-Koordinate die Zonen-Koordinate abgezogen und gespeichert.
scoreboard players operation VarZonS.1SpielerX PZZonS.1Groes -= VarZonS.1X PZZonS.1Groes
scoreboard players operation VarZonS.1SpielerY PZZonS.1Groes -= VarZonS.1Y PZZonS.1Groes
scoreboard players operation VarZonS.1SpielerZ PZZonS.1Groes -= VarZonS.1Z PZZonS.1Groes

# Nach Pythagoras (a^2 + b^2 = c^2) werden die Katheten quadriert.
scoreboard players operation VarZonS.1SpielerX PZZonS.1Groes *= VarZonS.1SpielerX PZZonS.1Groes
scoreboard players operation VarZonS.1SpielerY PZZonS.1Groes *= VarZonS.1SpielerY PZZonS.1Groes
scoreboard players operation VarZonS.1SpielerZ PZZonS.1Groes *= VarZonS.1SpielerZ PZZonS.1Groes

# Nach der Quadrierung werden alle Quadrate aufsummiert und in den Punktestand des Spielers gespeichert.
scoreboard players operation @p PZZonS.1Ausl = VarZonS.1SpielerX PZZonS.1Groes
scoreboard players operation @p PZZonS.1Ausl += VarZonS.1SpielerY PZZonS.1Groes
scoreboard players operation @p PZZonS.1Ausl += VarZonS.1SpielerZ PZZonS.1Groes

# Bei der Distanz müsste die Wurzel gezogen werden, stattdessen wurde der Wert für Distanz der Zone quadriert und nun verglichen. Wenn die Distanz kleiner ist, wird der Spieler in der Zone sein und erhält ein Etikett.
execute if score @p PZZonS.1Ausl <= @s PZZonS.1Groes run tag @p add EtiZonS.1InZone
scoreboard players set @p PZZonS.1Ausl 0

# Der Rang der Zone wird nur dann in den Punktestand des Spielers gespeichert, wenn dieser kleiner ist als der vom Spieler.
scoreboard players operation @p[distance=..0.1,tag=EtiZonS.1InZone] PZZonS.1Rang < @s PZZonS.1Rang

# Wenn die Zonen-Nummer nicht mit der Spieler-Nummer übereinstimmt, ist der Spieler ein Fremder und bekommt dafür ein Etikett.
execute unless score @s PZZonS.1ZonenNr = @p[distance=..0.1,tag=EtiZonS.1InZone] PZZonS.1Nr run tag @p[distance=..0.1,tag=EtiZonS.1InZone] add EtiZonS.1Fremder

# Fremde werden in den Abenteuermodus gesetzt und erhalten den Effekt Abbaulähmung und Schwäche, damit sie absolut nichts abbauen oder beschädigen können.
gamemode adventure @p[distance=..0.1,gamemode=survival,tag=EtiZonS.1Fremder]
effect give @p[distance=..0.1,tag=EtiZonS.1Fremder] minecraft:mining_fatigue 1 255 true
effect give @p[distance=..0.1,tag=EtiZonS.1Fremder] minecraft:weakness 1 255 true

# Falls die Zone die Einstellung Sperrzone besitzt, werden Fremde der Zone verwiesen, in dem sie in entgegengesetzter Richtung des Zonen-Zentrum teleportiert werden.
execute facing entity @s[tag=EtiZonS.1Sperrzone] eyes as @p[distance=..0.1,tag=EtiZonS.1Fremder] positioned as @s run teleport @s ^ ^ ^-0.3

# Das Etikett wird anschließend wieder entfernt.
tag @p[distance=..0.1,tag=EtiZonS.1Fremder] remove EtiZonS.1Fremder


Variante 1: Kugel-Markierung-Zonen-Funktion
Die Kugel-Markierung-Zonen-Funktion ruft um 180° gedreht zweimal die Kugel-Markierung-Partikel-Funktion auf, um die Partikel anzeigen zu lassen. Damit die Partikel den gesamten Kreis entlang laufen wird der Rüstungsständer bei jedem Aufruf um drei Grad gedreht.

Editor Icon zonen-system:v1kugel_markierung_zone.mcfunction
# Die Variable für die Meter wie weit die Partikel-Funktion gehen soll, wird auf null gesetzt und im Anschluss wird die Funktion geladen. Dies erfolg ein zweites mal in 180°.
scoreboard players set VarZonS.1Meter PZZonS.1Ausl 0
execute positioned ^ ^ ^1 run function zonen-system:v1kugel_markierung_partikel

scoreboard players set VarZonS.1Meter PZZonS.1Ausl 0
execute rotated ~180 0 positioned ^ ^ ^1 run function zonen-system:v1kugel_markierung_partikel

# Der Rüstungsständer wird um drei Grad im Uhrzeigersinn rotiert.
teleport @s ~ ~ ~ ~3 0


Variante 1: Kugel-Markierung-Partikel-Funktion
Die Kugel-Markierung-Partikel-Funktion ruft sich selbst um einen Block versetzt so oft auf, bis sie den Radius der Kugel erreicht hat. Dort werden dann die Partikel erzeugt.

Editor Icon zonen-system:v1kugel_markierung_partikel.mcfunction
# Die Variable wird hochgezählt und anschließend wird geprüft ob sie gleich dem Wert der Reichweite entspricht, sodass Partikel entstehen, ansonsten wird die Partikel-Funktion in Blickrichtung um einen Meter nach vorne erneut aufgerufen.
scoreboard players add VarZonS.1Meter PZZonS.1Ausl 1
execute if score VarZonS.1Meter PZZonS.1Ausl = @s PZZonS.1Ausl run particle minecraft:totem_of_undying ~ ~0.5 ~ 0 0 0 0.1 5 force @a[distance=..50,tag=EtiZonS.1Ausgewaehlt]
execute if score VarZonS.1Meter PZZonS.1Ausl <= @s PZZonS.1Ausl positioned ^ ^ ^1 run function zonen-system:v1kugel_markierung_partikel


Variante 1: Kubus-Zonen-Funktion
Die Kubus-Zonen-Funktion speichert in sechs temporären Variablen die Ursprungs-Koordinaten und die Delta-Koordinaten der Kubus-Zone, um sie dann für jeden einzelnen Spieler in der Kubus-Spieler-Funktion anwenden zu können. Es wird auch die Kubus-Markierung-Zonen-Funktion aufgerufen um die Zone anzuzeigen.

Editor Icon zonen-system:v1kubus_zone.mcfunction
# Die Koordinaten der Zone werden ausgelesen und in jeweils zwei Variablen gespeichert.
execute store result score VarZonS.1XUrsprung PZZonS.1Groes store result score VarZonS.1XDelta PZZonS.1Groes run data get entity @s Pos[0]
execute store result score VarZonS.1YUrsprung PZZonS.1Groes store result score VarZonS.1YDelta PZZonS.1Groes run data get entity @s Pos[1]
execute store result score VarZonS.1ZUrsprung PZZonS.1Groes store result score VarZonS.1ZDelta PZZonS.1Groes run data get entity @s Pos[2]

# Um die komplette Zone abzudecken, werden Variablen für den Ursprung um die Größe der Zone reduziert.
scoreboard players operation VarZonS.1XUrsprung PZZonS.1Groes -= @s PZZonS.1Ausl
scoreboard players operation VarZonS.1YUrsprung PZZonS.1Groes -= @s PZZonS.1Ausl
scoreboard players operation VarZonS.1ZUrsprung PZZonS.1Groes -= @s PZZonS.1Ausl

# Ebenfalls werden die Variablen für das Delta der Zone um die Größe addiert.
scoreboard players operation VarZonS.1XDelta PZZonS.1Groes += @s PZZonS.1Ausl
scoreboard players operation VarZonS.1YDelta PZZonS.1Groes += @s PZZonS.1Ausl
scoreboard players operation VarZonS.1ZDelta PZZonS.1Groes += @s PZZonS.1Ausl

# Von allen Spielern im Umkreis von 100 Blöcken wird die Positions-Spieler-Funktion an deren Position geladen.
execute at @a[distance=..100,tag=!EtiZonS.1InZone] run function zonen-system:v1kubus_spieler

# Um die Zone auch visuell anzuzeigen, wird die Zonen-Funktion geladen.
scoreboard players set VarZonS.1Zahl PZZonS.1Groes 0
function zonen-system:v1kubus_markierung_zone


Variante 1: Kubus-Spieler-Funktion
Die Kubus-Spieler-Funktion speichert die Koordinaten des jeweiligen Spielers in temporäre Variablen und vergleich dann diese mit den Koordinaten der Zone. Wenn sich die Koordinaten zwischen denen der Zone befinden, so befindet sich der Spieler innerhalb der Kubus-Zone und dann wird mit ihm entsprechend verfahren.

Editor Icon zonen-system:v1kubus_spieler.mcfunction
# Die Koordinaten des Spielers werden ausgelesen und jeweils in eine Variable gespeichert.
execute store result score VarZonS.1SpielerX PZZonS.1Groes run data get entity @p Pos[0]
execute store result score VarZonS.1SpielerY PZZonS.1Groes run data get entity @p Pos[1]
execute store result score VarZonS.1SpielerZ PZZonS.1Groes run data get entity @p Pos[2]

# Wenn die Spieler-Koordinate größer als der Ursprung und kleiner als das Delta sind, wird dem Spieler der Wert um eins erhöht.
execute if score VarZonS.1SpielerX PZZonS.1Groes >= VarZonS.1XUrsprung PZZonS.1Groes if score VarZonS.1SpielerX PZZonS.1Groes <= VarZonS.1XDelta PZZonS.1Groes run scoreboard players add @p PZZonS.1Ausl 1
execute if score VarZonS.1SpielerY PZZonS.1Groes >= VarZonS.1YUrsprung PZZonS.1Groes if score VarZonS.1SpielerY PZZonS.1Groes <= VarZonS.1YDelta PZZonS.1Groes run scoreboard players add @p PZZonS.1Ausl 1
execute if score VarZonS.1SpielerZ PZZonS.1Groes >= VarZonS.1ZUrsprung PZZonS.1Groes if score VarZonS.1SpielerZ PZZonS.1Groes <= VarZonS.1ZDelta PZZonS.1Groes run scoreboard players add @p PZZonS.1Ausl 1

# Nur wenn der Spieler den Wert drei besitzt, befindet er sich in der Zone und erhält ein Etikett dafür.
tag @p[distance=..0.1,scores={PZZonS.1Ausl=3}] add EtiZonS.1InZone
scoreboard players set @p PZZonS.1Ausl 0

# Der Rang der Zone wird nur dann in den Punktestand des Spielers gespeichert, wenn dieser kleiner ist als der vom Spieler.
scoreboard players operation @p[distance=..0.1,tag=EtiZonS.1InZone] PZZonS.1Rang < @s PZZonS.1Rang

# Wenn die Zonen-Nummer nicht mit der Spieler-Nummer übereinstimmt, ist der Spieler ein Fremder und bekommt dafür ein Etikett.
execute unless score @s PZZonS.1ZonenNr = @p[distance=..0.1,tag=EtiZonS.1InZone] PZZonS.1Nr run tag @p[distance=..0.1,tag=EtiZonS.1InZone] add EtiZonS.1Fremder

# Fremde werden in den Abenteuermodus gesetzt und erhalten den Effekt Abbaulähmung und Schwäche, damit sie absolut nichts abbauen oder beschädigen können.
gamemode adventure @p[distance=..0.1,gamemode=survival,tag=EtiZonS.1Fremder]
effect give @p[distance=..0.1,tag=EtiZonS.1Fremder] minecraft:mining_fatigue 1 255 true
effect give @p[distance=..0.1,tag=EtiZonS.1Fremder] minecraft:weakness 1 255 true

# Falls die Zone die Einstellung Sperrzone besitzt, werden Fremde der Zone verwiesen, in dem sie in entgegengesetzter Richtung des Zonen-Zentrum teleportiert werden.
execute facing entity @s[tag=EtiZonS.1Sperrzone] eyes as @p[distance=..0.1,tag=EtiZonS.1Fremder] positioned as @s run teleport @s ^ ^ ^-0.3

# Das Etikett wird anschließend wieder entfernt.
tag @p[distance=..0.1,tag=EtiZonS.1Fremder] remove EtiZonS.1Fremder


Variante 1: Kubus-Markierung-Zonen-Funktion
Die Kubus-Markierung-Zonen-Funktion wird insgesamt viermal um jeweils 90° gedreht aufgerufen um in allen vier Himmelsrichtungen die Kubus-Markierung-Abstands-Funktion aufzurufen zu können.

Editor Icon zonen-system:v1kubus_markierung_zone.mcfunction
# Die Variable für den Selbstaufruf wird um eins erhöht.
scoreboard players add VarZonS.1Zahl PZZonS.1Groes 1

# Bevor die Zonen-Abstands-Funktion geladen wird, werden die Variablen dafür vorbereitet.
scoreboard players set VarZonS.1Abstand PZZonS.1Ausl 0
scoreboard players operation VarZonS.1Laenge PZZonS.1Ausl = @s PZZonS.1Ausl
scoreboard players operation VarZonS.1Laenge PZZonS.1Ausl *= KonstZonS.1MINUSEINS PZZonS.1Ausl
execute positioned ^1 ^ ^-1 run function zonen-system:v1kubus_markierung_abstand

# Diese Funktion wird dreimal sich selbst aufrufen und dabei die Rotion jeweils um 90° drehen.
execute if score VarZonS.1Zahl PZZonS.1Groes matches 1..3 rotated ~90 0 run function zonen-system:v1kubus_markierung_zone


Variante 1: Kubus-Markierung-Abstands-Funktion
Die Kubus-Markierung-Abstands-Funktion läuft diagonal solange weiter, bis sie den Eckpunkt der Kubus-Zone erreicht hat. Dort angekommen wird die Kubus-Markierung-Partikel-Funktion aufgerufen.

Editor Icon zonen-system:v1kubus_markierung_abstand.mcfunction
# Die Abstands-Variable wird um eins erhöht.
scoreboard players add VarZonS.1Abstand PZZonS.1Ausl 1

# Sobald die Variable gleich dem Wert der Einstellung entspricht, wird die Partikel-Funktion geladen, ansonsten wird die Abstands-Funktion erneut geladen, sofern der Wert kleiner ist.
execute if score VarZonS.1Abstand PZZonS.1Ausl = @s PZZonS.1Ausl run function zonen-system:v1kubus_markierung_partikel
execute if score VarZonS.1Abstand PZZonS.1Ausl < @s PZZonS.1Ausl positioned ^1 ^ ^-1 run function zonen-system:v1kubus_markierung_abstand


Variante 1: Kubus-Markierung-Partikel-Funktion
Die Kubus-Markierung-Partikel-Funktion visualisiert die Zone und wird so oft wieder aufgerufen bis sie die andere Ecke der Kubus-Zone erreicht hat.

Editor Icon zonen-system:v1kubus_markierung_partikel.mcfunction
# Das Lagerfeuer-Partikel wird erzeugt.
particle minecraft:totem_of_undying ~ ~ ~ 0 0 0 0.1 5 force @a[distance=..50,tag=EtiZonS.1Ausgewaehlt]

# Die Längen-Variable wird um eins erhöht und anschließend wird geprüft ob diese kleiner als die maximale Länge ist. Solange das der Fall ist, wird die Partikel-Funktion erneut um einen Meter in Blickrichtung versetzt selbst aufgerufen.
scoreboard players add VarZonS.1Laenge PZZonS.1Ausl 1
execute if score VarZonS.1Laenge PZZonS.1Ausl < @s PZZonS.1Ausl positioned ^ ^ ^1 run function zonen-system:v1kubus_markierung_partikel


Variante 1: Stopp-Funktion
Die Stopp-Funktion löscht alle Punkte-Ziele, das Team. Sie löscht die Rüstungsständer und Zonen und deaktiviert den dauerhaft geladenen Chunk.

Editor Icon zonen-system:v1stopp.mcfunction
# Die Punkte-Ziele werden entfernt.
scoreboard objectives remove PZZonS.1Ausl
scoreboard objectives remove PZZonS.1Groes
scoreboard objectives remove PZZonS.1Nr
scoreboard objectives remove PZZonS.1ZonenNr
scoreboard objectives remove PZZonS.1Rang

# Das Team wird wieder entfernt.
team remove TMZonS.1KeinPvP

# Der Spielmodus wird auf Kreativ gesetzt
gamemode creative @a[distance=..25,gamemode=!creative]

# Spielern werden 30 Erfahrungsstufen abgezogen.
experience add @a[distance=..25] -30 levels

# Der Rüstungsständer wird aus dem Inventar aller Spieler gelöscht.
clear @a minecraft:armor_stand{EigZonS.1Alle:true}

# Die eventuell vorhandenen Etiketten werden entfernt.
tag @a[tag=EtiZonS.1Nachricht] remove EtiZonS.1Nachricht
tag @a[tag=EtiZonS.1Auswahl] remove EtiZonS.1Auswahl
tag @a[tag=EtiZonS.1Loeschen] remove EtiZonS.1Loeschen

# Das Schild an der Position der Partikelwolke wird entfernt.
execute at @e[tag=EtiZonS.1Schild] run setblock ~ ~ ~ minecraft:air replace

# Rüstungsständer auf dem Boden oder platzierte Rüstungsständer werden entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigZonS.1Alle:true} } }] add EtiZonS.1Alle
kill @e[tag=EtiZonS.1Alle]

# Der dauerhaft geladene Chunk wird deaktiviert.
forceload remove ~ ~


Disambig color
Advertisement