Technik Wiki
Advertisement
Gruppe: Grid Trichter.png
Maschinen

Grid Roter Sand blass.png mit Mechaniken

Grid Redstone.png mit Redstone
                Hier:
Grid Befehlsblock.png mit Befehlen
Verfügbar in:
Wiki Mechanik-Welt.png Mechanik-Welt
Wiki Mechanik-Welt.png
Alle neuen oder überarbeiteten Techniken auf dieser Seite sind noch nicht in der aktuellen Mechanik-Welt vorhanden.
In einem der nächsten Updates werden sie dort hinzugefügt werden.

Eine Tauschmaschine bietet dem Spieler den Tausch von Waren an. Hierbei können beliebige Gegenstände getauscht werden. Für den Tauschhandel wird dem Spieler eine Eingabe zur Verfügung gestellt, diese zeigt den zu tauschbaren Gegenstand an und der Spieler muss nur noch bestätigen, das er den Gegenstand tauschen möchte. Hierbei wird auch immer geprüft ob der Spieler überhaupt in der Lage ist, den Gegenwert der Ware zu bezahlen. Falls er nicht im Stande dazu ist, findet der Tausch gar nicht erst statt.

Variante 1[]

Tauschmaschine (Befehle) Bild 1.1.png Tauschmaschine (Befehle) Bild 1.2.png Tauschmaschine (Befehle) Bild 1.3.png

Mit dieser Tauschmaschine ist man in der Lage, mit einem Rüstungsständer, den man beim Einschalten erhält, Schilder aufzustellen die Angebote anbieten. Dazu platziert man den Rüstungsständer an der gewünschten Position und nimmt dann den Gegenstand in die Hand den man als Preisware haben möchte und klickt damit auf das Schild, danach klickt man mit einem anderen Gegenstand, den man als Tauschware haben möchte erneut auf das Schild und das Angebot ist erstellt. Nun muss man die richtige Ware ausgewählt haben und diese muss auch von der Stapelgröße passen. Klickt man dann damit auf das Schild wird der Handel durchgeführt und man bekommt in das Inventar den Gegenstand, den man ertauschen wollte.


Befehlsblöcke mit Befehlen:
Datenpaket


Variante 1: Start-Funktion
Die Start-Funktion erstellt das Punkte-Ziel, den Datenspeicher und gibt den Spielern die Rüstungsständer mit denen man die Automaten erstellen kann.

Editor Icon.png tauschmaschine:v1start.mcfunction
# Ein Punkte-Ziel wird erstellt um den Auslöser zu ermöglichen.
scoreboard objectives add PZTausM.1Ausl trigger ["Tauschmaschine.1: ",{"text":"Auslöser","bold":true}]

# Ein Datenspeicher wird angelegt in dem Daten-Vergleiche durchgeführt werden können.
data merge storage tauschmaschine:v1daten {EigTausM.1Handel:{} }

# Spieler erhalten 16 Rüstungsständer um die Tauschmaschine zu erstellen.
give @a[distance=..15] minecraft:armor_stand{EigTausM.1Alle:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Tauschautomat","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um ein Schild zu erzeugen"','"auf dem man Angebote festlegen kann"'] },EntityTag:{Small:true,Marker:true,Invisible:true,ShowArms:true,Pose:{LeftArm:[270.0f,0.0f,0.0f],RightArm:[270.0f,0.0f,0.0f]},Tags:["EtiTausM.1Alle","EtiTausM.1Schild","EtiTausM.1Erstellen","EtiTausM.1Ware","EtiTausM.1ErsteWare"] } } 16

Variante 1: Zyklus-Funktion
Die Zyklus-Funktion ruft je nach Situation die Erstellen-, die Handels- oder die Waren-Funktion auf und sorgt dafür, dass der Spieler immer wieder die Berechtigung erhält den Auslöser zu aktivieren.

Editor Icon.png tauschmaschine:v1zyklus.mcfunction
# Wenn der Rüstungsständer gerade erst gesetzt wurde, wird die Erstellen-Funktion geladen.
execute as @e[type=minecraft:armor_stand,tag=EtiTausM.1Erstellen] at @s run function tauschmaschine:v1erstellen

# Hat der Spieler auf das Schild geklickt, wird die Handels-Funktion geladen.
execute as @a[scores={PZTausM.1Ausl=2}] at @s at @e[distance=..3,type=minecraft:armor_stand,tag=EtiTausM.1Automat,sort=nearest,limit=1] run function tauschmaschine:v1handel

# Wenn der Spieler Ware in die Tauschmaschine einbringen will, wird die Waren-Funktion geladen.
execute at @a[scores={PZTausM.1Ausl=-1}] as @e[distance=..3,type=minecraft:armor_stand,tag=EtiTausM.1Ware,sort=nearest,limit=1] at @s run function tauschmaschine:v1ware

# Wenn kein Schild mehr am Automaten ist, wird dieser entfernt.
execute as @e[type=minecraft:armor_stand,tag=EtiTausM.1Schild] at @s unless block ~ ~ ~ minecraft:oak_sign run kill @s

# Damit die spieler immer den Auslöser aktiveren können, wird dieser bei ihnen auf null gesetzt und sie erhalten die Berechtigung.
execute at @e[type=minecraft:armor_stand,tag=EtiTausM.1Schild] run scoreboard players set @a[distance=..5] PZTausM.1Ausl 0
execute at @e[type=minecraft:armor_stand,tag=EtiTausM.1Schild] run scoreboard players enable @a[distance=..5] PZTausM.1Ausl

Variante 1: Erstellen-Funktion
Die Erstellen-Funktion richtet den Rüstungsständer aus und platziert das Schild.

Editor Icon.png tauschmaschine:v1erstellen.mcfunction
# Das Etikett wird entfernt.
tag @s remove EtiTausM.1Erstellen

# Je nach Ausrichtung wird der Rüstungsständer in eine der vier Himmelsrichtungen exakt ausgerichtet.
execute if entity @p[y_rotation=-45..44.9] run teleport @s ~ ~ ~0.2 180 0
execute if entity @p[y_rotation=45..134.9] run teleport @s ~-0.2 ~ ~ 270 0
execute if entity @p[y_rotation=135..-134.9] run teleport @s ~ ~ ~-0.2 0 0
execute if entity @p[y_rotation=-135..-44.9] run teleport @s ~0.2 ~ ~ 90 0

# Je nach Ausrichtung wird das Schild entsprechend platziert.
execute if entity @s[y_rotation=-45..44.9] run setblock ~ ~ ~ minecraft:oak_sign[rotation=0]
execute if entity @s[y_rotation=45..134.9] run setblock ~ ~ ~ minecraft:oak_sign[rotation=4]
execute if entity @s[y_rotation=135..-134.9] run setblock ~ ~ ~ minecraft:oak_sign[rotation=8]
execute if entity @s[y_rotation=-135..-44.9] run setblock ~ ~ ~ minecraft:oak_sign[rotation=12]

# Das Schild bekommt Text zugeteilt.
data merge block ~ ~ ~ {Text1:'{"text":"Ware tauschen","bold":true}',Text2:'{"text":"?x","color":"white","bold":true}',Text3:'{"text":"","clickEvent":{"action":"run_command","value":"/trigger PZTausM.1Ausl set -1"} }',Text4:'{"text":"?x","color":"white","bold":true}'}

# Der Spieler bekommt Infos wie er der Maschine Angebote gibt.
tellraw @p[distance=..5] ["Tauschmaschine.1:\n",{"text":"Nimm eine Ware mit einer bestimmten Stapel-Anzahl in die Hand und rechtsklicke auf das Schild um die Angebote festzulegen.","bold":true}]

Variante 1: Waren-Funktion
Die Waren-Funktion wird benutzt um die Angebote zu erstellen, in dem man mit der Ware auf das Schild klickt.

Editor Icon.png tauschmaschine:v1ware.mcfunction
# Zuerst wird geprüft ob der Spieler überhaupt einen Gegenstand in der Hand hält. Wenn das der Fall ist, erhält er selbst ein Etikett und der Automat den Wert eins.
execute store success score @s PZTausM.1Ausl run tag @p[distance=..5,scores={PZTausM.1Ausl=-1},nbt={SelectedItem:{} }] add EtiTausM.1WareInHand

# Damit de Preis im Schild angezeigt werden kann, wird die Stapel-Größe in eine Variable gespeichert.
execute store result score VarTausM.1Preis PZTausM.1Ausl run data get entity @p[distance=..5,tag=EtiTausM.1WareInHand] SelectedItem.Count

# Wenn der Spieler einen Gegenstand in der Hand hält, wird der Text des Schildes so angepasst, dass der Preis sichtbar wird.
execute if entity @s[scores={PZTausM.1Ausl=1}] run data merge block ~ ~ ~ {Text4:'["",{"score":{"name":"VarTausM.1Preis","objective":"PZTausM.1Ausl"},"color":"white","bold":true},{"text":"x","color":"white","bold":true}]'}

# Der Automat bekommt in die erste Hand den zu handelnden Gegenstand kopiert.
item replace entity @s[tag=!EtiTausM.1ErsteWare,scores={PZTausM.1Ausl=1}] weapon.offhand from entity @p[distance=..5,tag=EtiTausM.1WareInHand] weapon.mainhand

# Wenn der Automat seinen zweiten Gegenstand erhalten hat, bekommt der Spieler eine Nachricht, das Schild einen weiteren Auslöse-Wert und der Automat bekommt seine Etiketten geändert.
execute if entity @s[tag=EtiTausM.1Ware,tag=!EtiTausM.1ErsteWare,scores={PZTausM.1Ausl=1}] run tellraw @a[distance=..5] ["Tauschmaschine.1:\n",{"text":"Nimm eine Ware mit der geforderten Stapel-Anzahl in die Hand und rechtsklicke auf das Schild um den Handel zu beginnen.","bold":true}]
execute if entity @s[tag=EtiTausM.1Ware,tag=!EtiTausM.1ErsteWare,scores={PZTausM.1Ausl=1}] run data merge block ~ ~ ~ {Text3:'{"text":"","clickEvent":{"action":"run_command","value":"/trigger PZTausM.1Ausl set 2"} }'}
tag @s[tag=EtiTausM.1Ware,tag=!EtiTausM.1ErsteWare,scores={PZTausM.1Ausl=1}] add EtiTausM.1Automat
tag @s[tag=EtiTausM.1Ware,tag=!EtiTausM.1ErsteWare,scores={PZTausM.1Ausl=1}] remove EtiTausM.1Ware

# Bei der ersten Ware, wird der Gegenstand vom Spieler in die erste Hand des Automaten gelegt.
item replace entity @s[tag=EtiTausM.1ErsteWare,scores={PZTausM.1Ausl=1}] weapon.mainhand from entity @p[distance=..5,tag=EtiTausM.1WareInHand] weapon.mainhand
execute if entity @s[tag=EtiTausM.1ErsteWare,scores={PZTausM.1Ausl=1}] run data modify block ~ ~ ~ Text2 set from block ~ ~ ~ Text4
tag @s[tag=EtiTausM.1ErsteWare,scores={PZTausM.1Ausl=1}] remove EtiTausM.1ErsteWare

# Der Spieler bekommt das Etikett entfernt und erhält den Wert eins dafür.
execute as @p[distance=..5,tag=EtiTausM.1WareInHand] store success score @s PZTausM.1Ausl run tag @s remove EtiTausM.1WareInHand

Variante 1: Handels-Funktion
Die Handels-Funktion führt den eigentlichen Handel durch. Sie prüft dabei ob alles stimmt und tauscht auch nur dann die Ware.

Editor Icon.png tauschmaschine:v1handel.mcfunction
# Die ID des ersten Gegenstands vom Automaten wird in den Datenspeicher kopiert.
data modify storage tauschmaschine:v1daten "EigTausM.1Handel" set from entity @e[type=minecraft:armor_stand,tag=EtiTausM.1Automat,sort=nearest,limit=1] HandItems[0].id

# Die Anzahl des ersten Gegenstands wird in die Preis-Variable gespeichert.
execute store result score VarTausM.1Preis PZTausM.1Ausl run data get entity @e[type=minecraft:armor_stand,tag=EtiTausM.1Automat,sort=nearest,limit=1] HandItems[0].Count

# Die ID vom Spieler gehaltenen Gegenstand wird in den Datenspeicher kopiert und das Ergebnis davon in eine Variable. Nur wenn es der gleiche Gegenstand war, war das Kopieren ein Fehlschlag.
execute store success score VarTausM.1Ungleich PZTausM.1Ausl run data modify storage tauschmaschine:v1daten "EigTausM.1Handel" set from entity @s SelectedItem.id

# Die Stapel-Größe des in der Hand gehaltenen Gegenstandes wird in eine Variable gespeichert.
execute store result score VarTausM.1Stapel PZTausM.1Ausl run data get entity @s SelectedItem.Count

# Nur wenn der Spieler den gleichen Gegenstand wie im Angebot hält und auch die Stapel-Größe passt, wird die Handels-Variable auf eins gesetzt.
scoreboard players set VarTausM.1Handel PZTausM.1Ausl 0
execute if score VarTausM.1Ungleich PZTausM.1Ausl matches 0 if score VarTausM.1Stapel PZTausM.1Ausl >= VarTausM.1Preis PZTausM.1Ausl run scoreboard players set VarTausM.1Handel PZTausM.1Ausl 1

# Wenn der Spieler den Handel nicht durchführen kann, wird ihm eine Fehlermeldung ausgegeben.
execute if score VarTausM.1Handel PZTausM.1Ausl matches 0 run title @s actionbar ["",{"entity":"@s","nbt":"SelectedItem.id","color":"dark_purple","bold":true},{"text":" konnte nicht getauscht werden!","color":"red","bold":true}]

# Wenn er den Handel erfolgreich durchführen kann, wird ihm das mitgeteilt.
execute if score VarTausM.1Handel PZTausM.1Ausl matches 1 as @e[type=minecraft:armor_stand,tag=EtiTausM.1Automat,sort=nearest,limit=1] run title @p[distance=..3,scores={PZTausM.1Ausl=2}] actionbar ["",{"entity":"@s","nbt":"HandItems[0].id","color":"dark_purple","bold":true},{"text":" getauscht gegen ","bold":true},{"entity":"@s","nbt":"HandItems[1].id","color":"dark_purple","bold":true}]

# Der Preis wird vom aktuellen Stapel abgezogen. Anschließend wird durch einen Modifizierer die neue Stapel-Größe im Hand-Slot übertragen.
scoreboard players operation VarTausM.1Stapel PZTausM.1Ausl -= VarTausM.1Preis PZTausM.1Ausl
execute if score VarTausM.1Handel PZTausM.1Ausl matches 1 run item modify entity @s weapon.mainhand tauschmaschine:v1stapel

# Der Gegenstand, den der Spieler im Tausch erhält, wird zuerst als Drop an der Spieler-Position erzeugt, sodass er aber noch nicht aufgehoben werden kann.
execute if score VarTausM.1Handel PZTausM.1Ausl matches 1 at @s run summon minecraft:item ~ ~ ~ {PickupDelay:32767s,Item:{id:"minecraft:stone",Count:1b},Tags:["EtiTausM.1Alle","EtiTausM.1Ware"]}

# Danach werden die Daten des Gegenstands in den Drop übertragen.
execute if score VarTausM.1Handel PZTausM.1Ausl matches 1 run data modify entity @e[type=minecraft:item,tag=EtiTausM.1Ware,sort=nearest,limit=1] Item set from entity @e[type=minecraft:armor_stand,tag=EtiTausM.1Automat,sort=nearest,limit=1] HandItems[1]

# Als letztes wird die Aufhebezeit des Drops auf null gesetzt.
execute store success score @s PZTausM.1Ausl run data modify entity @e[type=minecraft:item,tag=EtiTausM.1Ware,sort=nearest,limit=1] PickupDelay set value 0
JSON Icon.png tauschmaschine:v1stapel.json
{
  "function": "minecraft:set_count",
  "count": {
    "type": "minecraft:score",
    "target": {
      "type": "minecraft:fixed",
      "name": "VarTausM.1Stapel"
    },
    "score": "PZTausM.1Ausl"
  }
}

Variante 1: Stopp-Funktion
Die Stopp-Funktion löscht das Punkte-Ziel und den Datenspeicher. Ebenso werden die aufgestellten Rüstungsständer entfernt und auch alles im Inventar oder auf dem Boden.

Editor Icon.png tauschmaschine:v1stopp.mcfunction
# Das Punkte-Ziel wird entfernt.
scoreboard objectives remove PZTausM.1Ausl

# Der datenspeicher wird geleert.
data remove storage tauschmaschine:v1daten "EigTausM.1Handel"

# Der Rüstungsständer wird aus dem Inventar entfernt.
clear @a minecraft:armor_stand{EigTausM.1Alle:true}

# An der Position des Automaten wird das Schild entfernt.
execute at @e[type=minecraft:armor_stand,tag=EtiTausM.1Schild] run setblock ~ ~ ~ minecraft:air replace

# Gegenstände und die Tauschmaschinen werden entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigTausM.1Alle:true} } }] add EtiTausM.1Alle
kill @e[tag=EtiTausM.1Alle]

Variante 2[]

Tauschmaschine (Befehle) Bild 2.1.png Tauschmaschine (Befehle) Bild 2.2.png Tauschmaschine (Befehle) Bild 2.3.png

Diese Tauschmaschine ermöglicht das Tauschen von Gegenständen mit Hilfe einer Benutzeroberfläche die in dem Inventar einer Güterlore erzeugt wurde. Beim Einschalten erhält man einen Rüstungsständer den man an beliebiger Stelle platzieren kann. Wird er platziert erscheint eine Güterlore, so fern man in der Nähe ist. Klickt man auf die Güterlore, öffnet sich ein Inventar, bei dem die meisten Slots mit schwarzen Glasscheiben belegt sind, um so die freien Slots besser darzustellen. In die zwei freien Slots kann man die Waren hineinlegen. Hat man das getan, muss man anschließend auf den Trichter klicken um das Angebot zu speichern. Wenn man auf den Slot mit der Güterlore klickt, wird das nächste Angebot angezeigt, sofern weitere vorhanden sind. Möchte man das Angebot annehmen und durchführen, klickt man auf die Truhe darunter. Dann wird geprüft ob man die Gegenstände ausgewählt hat und nur dann werden sie getauscht.


Befehlsblöcke mit Befehlen:
Datenpaket


Variante 2: Start-Funktion
Die Start-Funktion erstellt das Punkte-Ziel, den Datenspeicher und gibt den Spielern den Rüstungsständer.

Editor Icon.png tauschmaschine:v2start.mcfunction
# Das Punkte-Ziel für die verschiedenen Werte wird erstellt.
scoreboard objectives add PZTausM.2Wert dummy ["Tauschmaschine.2: ",{"text":"Wert der Variablen","bold":true}]

# Der Datenspeicher für das Vergleichen von Daten wird angelegt.
data merge storage tauschmaschine:v2daten {EigTausM.2Handel:{} }

# Spieler im Umkreis von 15 Blöcken erhalten einen Rüstungsständer, mit dem sie Tauschmaschinen platzieren können.
give @a[distance=..15] minecraft:armor_stand{EigTausM.2Alle:true,Enchantments:[{id:-1}],display:{Name:'{"text":"Tauschautomat","bold":true}',Lore:['"Platziere den Rüstungsständer"','"um einen Tauschautomat"','"zu erstellen."']},EntityTag:{Small:true,Invisible:true,Marker:true,NoGravity:true,CustomNameVisible:true,CustomName:'{"text":"Tauschautomat","color":"gold","bold":true}',Tags:["EtiTausM.2Alle","EtiTausM.2Erstellen","EtiTausM.2Automat"],ArmorItems:[{},{},{},{id:"minecraft:chest",Count:1b} ] } } 16

Variante 2: Zyklus-Funktion
Die Zyklus-Funktion sorgt für die Funktionalität des Automaten und prüft ob der Spieler im Menü etwas angeklickt hat. Nur dann wird die Menü-funktion geladen.

Editor Icon.png tauschmaschine:v2zyklus.mcfunction
# Wenn an der Position des Automaten noch kein Markierer erzeugt wurde, wird einer erzeugt und der Automat bekommt den Wert eins.
execute as @e[type=minecraft:armor_stand,tag=EtiTausM.2Automat] at @s unless entity @s[scores={PZTausM.2Wert=1}] store result score @s PZTausM.2Wert run summon minecraft:marker ~ ~ ~ {Tags:["EtiTausM.2Alle","EtiTausM.2Handel"],data:{EigTausM.2Handel:[[{Slot:11b},{Slot:15b}]]} }

# Wenn in der Nähe des Automaten ein Spieler ist, bekommt dieser ein Etikett.
execute as @e[type=minecraft:armor_stand,tag=EtiTausM.2Automat] at @s if entity @p[distance=..5] run tag @s add EtiTausM.2Anwesend

# Wenn der Spieler gerade erst dabei ist, wird ein Rüstungsständer mit der Güterlore erzeugt. Dieser trägt die Lore, da sie alleine sonst verschiebbar wäre.
execute at @e[type=minecraft:armor_stand,tag=EtiTausM.2Anwesend,tag=!EtiTausM.2Dabei] run summon minecraft:armor_stand ~ ~0.5 ~ {Small:true,Invisible:true,Marker:true,NoGravity:true,Tags:["EtiTausM.2Alle","EtiTausM.2Menu"],Passengers:[{id:"minecraft:chest_minecart",NoGravity:true,Tags:["EtiTausM.2Alle","EtiTausM.2Menu"] } ] }

# Wenn kein Spieler mehr anwesend ist, wird die Güterlore wieder entfernt.
execute at @e[type=minecraft:armor_stand,tag=!EtiTausM.2Anwesend,tag=EtiTausM.2Dabei] run data remove entity @e[distance=..1,type=minecraft:chest_minecart,tag=EtiTausM.2Menu,sort=nearest,limit=1] Items
execute at @e[type=minecraft:armor_stand,tag=!EtiTausM.2Anwesend,tag=EtiTausM.2Dabei] run kill @e[distance=..1,tag=EtiTausM.2Menu,sort=nearest,limit=2]

# Die Anzahl der Gegenstände wird ausgelesen und nur wenn die Güterlore nicht exakt die Anzahl hat, die normalerweise immer darin enthalten ist, wird die Menü-Funktion geladen.
execute as @e[type=minecraft:chest_minecart,tag=EtiTausM.2Menu] store result score @s PZTausM.2Wert run data get entity @s Items
execute as @e[type=minecraft:chest_minecart,tag=EtiTausM.2Menu] unless entity @s[scores={PZTausM.2Wert=25}] unless entity @s[scores={PZTausM.2Wert=27}] at @s run function tauschmaschine:v2menu

# Das Etikett wird abhängig der Situation hinzugefügt oder entfernt.
tag @e[type=minecraft:armor_stand,tag=EtiTausM.2Anwesend,tag=!EtiTausM.2Dabei] add EtiTausM.2Dabei
tag @e[type=minecraft:armor_stand,tag=!EtiTausM.2Anwesend,tag=EtiTausM.2Dabei] remove EtiTausM.2Dabei

# Das Etikett wird wieder entfernt.
tag @e[type=minecraft:armor_stand,tag=EtiTausM.2Anwesend] remove EtiTausM.2Anwesend

Variante 2: Menü-Funktion
Die Menü-Funktion prüft ob der Spieler eine der drei Schaltflächen angeklickt hat und reagiert entsprechend darauf. Ebenso werden alle anderen Slots mit schwarzen Scheiben belegt.

Editor Icon.png tauschmaschine:v2menu.mcfunction
# Wenn der Spieler in das Menü geklickt hat, werden die Gegenstände aus seinem Inventar entfernt. Ebenso werden Gegenstände gelöscht, falls er sie gedroppt hat.
execute as @a[distance=..5] store success score @s PZTausM.2Wert run clear @s #tauschmaschine:v2menu{EigTausM.2Alle:true}
execute as @a[distance=..5,scores={PZTausM.2Wert=0}] store success score @s PZTausM.2Wert run kill @e[distance=..5,type=minecraft:item,nbt={Item:{tag:{EigTausM.2Alle:true} } }]

# Nur, wenn die Lore gerade erzeugt wurde, hat sie keine Gegenstände in sich und nur dann erhält der Spieler eine Nachricht in der erklärt wird, wie er die Güterlore benutzen kann.
execute if entity @s[scores={PZTausM.2Wert=0}] run tellraw @p[distance=..5] ["Tauschmaschine.2:\n",{"text":"Tätige einen Rechtsklick auf die Güterlore und lege zwei verschiedene Gegenstände in die zwei leeren Felder und tippe dann den Trichter an um Handelsangebote hinzuzufügen.","bold":true}]

# Wenn der Spieler auf den Trichter geklickt hat, wird die Hinzufügen-Funktion geladen.
execute if entity @p[distance=..5,scores={PZTausM.2Wert=1}] if entity @s[nbt=!{Items:[{Slot:4b,id:"minecraft:hopper",Count:1b}]}] run function tauschmaschine:v2hinzufuegen

# Wenn der Spieler auf die Güterlore geklickt hat, wird die Nächstes-Funktion geladen.
execute if entity @p[distance=..5,scores={PZTausM.2Wert=1}] if entity @s[nbt=!{Items:[{Slot:13b,id:"minecraft:chest_minecart",Count:1b}]}] run function tauschmaschine:v2naechstes

# Wenn der Spieler auf die Truhe geklickt hat, wird die Handels-Funktion geladen.
execute if entity @p[distance=..5,scores={PZTausM.2Wert=1}] if entity @s[nbt=!{Items:[{Slot:22b,id:"minecraft:chest",Count:1b}]}] run function tauschmaschine:v2handel

# Alle Slots die nicht gebraucht werden, werden mit schwarzen Glasscheiben belegt. Die Menü-Schaltflächen werden mit entsprechenden Gegenstände ausgestattet.
item replace entity @s container.0 with minecraft:black_stained_glass_pane
item replace entity @s container.1 with minecraft:black_stained_glass_pane
item replace entity @s container.2 with minecraft:black_stained_glass_pane
item replace entity @s container.3 with minecraft:black_stained_glass_pane

item replace entity @s container.4 with minecraft:hopper{EigTausM.2Alle:true,EigTausM.2Menu:true,display:{Name:'{"text":"Tauschangebot hinzufügen","color":"red","bold":true}'} }

item replace entity @s container.5 with minecraft:black_stained_glass_pane
item replace entity @s container.6 with minecraft:black_stained_glass_pane
item replace entity @s container.7 with minecraft:black_stained_glass_pane
item replace entity @s container.8 with minecraft:black_stained_glass_pane
item replace entity @s container.9 with minecraft:black_stained_glass_pane
item replace entity @s container.10 with minecraft:black_stained_glass_pane
item replace entity @s container.12 with minecraft:black_stained_glass_pane

item replace entity @s container.13 with minecraft:chest_minecart{EigTausM.2Alle:true,EigTausM.2Menu:true,display:{Name:'{"text":"Nächstes Tauschangebot","color":"yellow","bold":true}'} }

item replace entity @s container.14 with minecraft:black_stained_glass_pane
item replace entity @s container.16 with minecraft:black_stained_glass_pane
item replace entity @s container.17 with minecraft:black_stained_glass_pane
item replace entity @s container.18 with minecraft:black_stained_glass_pane
item replace entity @s container.19 with minecraft:black_stained_glass_pane
item replace entity @s container.20 with minecraft:black_stained_glass_pane
item replace entity @s container.21 with minecraft:black_stained_glass_pane

item replace entity @s container.22 with minecraft:chest{EigTausM.2Alle:true,EigTausM.2Menu:true,display:{Name:'{"text":"Angebot annehmen","color":"green","bold":true}'} }

item replace entity @s container.23 with minecraft:black_stained_glass_pane
item replace entity @s container.24 with minecraft:black_stained_glass_pane
item replace entity @s container.25 with minecraft:black_stained_glass_pane
item replace entity @s container.26 with minecraft:black_stained_glass_pane

data modify entity @s Items[{id:"minecraft:black_stained_glass_pane"}].tag merge value {EigTausM.2Alle:true,EigTausM.2Menu:true,display:{Name:'{"text":""}'} }
JSON Icon.png tauschmaschine:v2menu.json
{
  "values": [
    "minecraft:black_stained_glass_pane",
    "minecraft:chest_minecart",
    "minecraft:chest",
    "minecraft:hopper"
  ]
}

Variante 2: Hinzufügen-Funktion
Die Hinzufügen-Funktion prüft ob ein Angebot hinzugefügt werden kann. Wenn das der Fall ist, wird das Angebot in eine Liste gespeichert.

Editor Icon.png tauschmaschine:v2hinzufuegen.mcfunction
# Nur wenn beide Slots belegt sind, wird das Etikett vergeben.
tag @s[nbt={Items:[{Slot:11b},{Slot:15b}]}] add EtiTausM.2Hinzufuegen

# Falls das Etikett nicht vorhanden ist, wird eine Fehlermeldung ausgegeben.
execute if entity @s[tag=!EtiTausM.2Hinzufuegen] run tellraw @p[distance=..3] ["Tauschmaschine.2:\n",{"text":"Angebot konnte nicht hinzugefügt werden!","color":"red","bold":true}]

# Zuerst wird in die Felderreihe ein neues Feld hinzugefügt.
execute if entity @s[tag=EtiTausM.2Hinzufuegen] run data modify entity @e[distance=..2,type=minecraft:marker,tag=EtiTausM.2Handel,sort=nearest,limit=1] data."EigTausM.2Handel" prepend value []

# Anschließend wird in das erste Feld der erste Gegenstand hinzugefügt.
execute if entity @s[tag=EtiTausM.2Hinzufuegen] run data modify entity @e[distance=..2,type=minecraft:marker,tag=EtiTausM.2Handel,sort=nearest,limit=1] data."EigTausM.2Handel"[0] append from entity @s Items[{Slot:11b}]

# Danach kommt der zweite Gegenstand und wird auch in die Felderreihe hinzugefügt.
execute if entity @s[tag=EtiTausM.2Hinzufuegen] run data modify entity @e[distance=..2,type=minecraft:marker,tag=EtiTausM.2Handel,sort=nearest,limit=1] data."EigTausM.2Handel"[0] append from entity @s Items[{Slot:15b}]

# Wenn das Angebot hinzugefügt werden konnte, wird eine Nachricht ausgegeben.
execute if entity @s[tag=EtiTausM.2Hinzufuegen] run tellraw @p[distance=..3] ["Tauschmaschine.2:\n",{"text":"Angebot hinzugefügt.","bold":true}]

# Das Etikett wird anschließend wieder entfernt.
tag @s[tag=EtiTausM.2Hinzufuegen] remove EtiTausM.2Hinzufuegen

Variante 2: Nächstes-Funktion
Die Nächstes-Funktion prüft ob es weitere Angebote gibt und nur dann wird das nächste Angebot aus der Liste geladen.

Editor Icon.png tauschmaschine:v2naechstes.mcfunction
# Als erstes wird geprüft ob es überhaupt Handelsangebote gibt, nur dann wird ein Etikett vergeben.
execute if data entity @e[distance=..2,type=minecraft:marker,tag=EtiTausM.2Handel,sort=nearest,limit=1] data."EigTausM.2Handel"[0][0] run tag @s add EtiTausM.2Naechstes

# Falls es keine Handelsangebote gibt, wird eine Fehlermeldung ausgegeben.
execute if entity @s[tag=!EtiTausM.2Naechstes] run tellraw @p[distance=..3] ["Tauschmaschine.2:\n",{"text":"Es gibt keine Angebote, daher konnte nicht das nächste aufgerufen werden!","color":"red","bold":true}]

# Zuerst wird das erste Angebot nach ganz hinten kopiert, bevor anschließend das erste Angebot gelöscht wird.
execute if entity @s[tag=EtiTausM.2Naechstes] as @e[distance=..2,type=minecraft:marker,tag=EtiTausM.2Handel,sort=nearest,limit=1] run data modify entity @s data."EigTausM.2Handel" append from entity @s data."EigTausM.2Handel"[0]
execute if entity @s[tag=EtiTausM.2Naechstes] run data remove entity @e[distance=..2,type=minecraft:marker,tag=EtiTausM.2Handel,sort=nearest,limit=1] data."EigTausM.2Handel"[0]

# Das nun aktuelle Handelsangebot wird in die Güterlore kopiert.
data modify entity @s[tag=EtiTausM.2Naechstes] Items append from entity @e[distance=..2,type=minecraft:marker,tag=EtiTausM.2Handel,sort=nearest,limit=1] data."EigTausM.2Handel"[0][]

# Wenn das nächste Angebot aufgerufen werden konnte, wird eine Nachricht ausgegeben.
execute if entity @s[tag=EtiTausM.2Naechstes] run tellraw @p[distance=..3] ["Tauschmaschine.2:\n",{"text":"Nächstes Angebot.","bold":true}]

# Anschließend wird das Etikett nicht gebraucht und dementsprechend gelöscht.
tag @s[tag=EtiTausM.2Naechstes] remove EtiTausM.2Naechstes

Variante 2: Handels-Funktion
Die Handels-Funktion führt den Handel durch und prüft dabei ob der Spieler überhaupt die richtige Ware mit richtiger Stapel-Anzahl bei sich hat.

Editor Icon.png tauschmaschine:v2handel.mcfunction
# Zuerst wird das Angebot nochmal vom Markierer in die Güterlore kopiert.
data modify entity @s Items append from entity @e[distance=..2,type=minecraft:marker,tag=EtiTausM.2Handel,sort=nearest,limit=1] data."EigTausM.2Handel"[0][]

# Anschließend wird der Tauschgegenstand in einen Datenspeicher kopiert.
data modify storage tauschmaschine:v2daten "EigTausM.2Handel" set from entity @s Items[{Slot:11b}].id

# Die Stapel-Größe wird ebenfalls in eine Variable kopiert.
execute store result score VarTausM.2Preis PZTausM.2Wert run data get entity @s Items[{Slot:11b}].Count

# Nur wenn die beiden Gegenstände identisch sind, wird die Variable den Wert null besitzen, ansonsten eins.
execute store success score VarTausM.2Ungleich PZTausM.2Wert run data modify storage tauschmaschine:v2daten "EigTausM.2Handel" set from entity @p[distance=..3] SelectedItem.id

# Die Stapel-Größe die der Spieler in der Hand hält wird ausgelesen und in eine weitere Variable kopiert.
execute store result score VarTausM.2Stapel PZTausM.2Wert run data get entity @p[distance=..3] SelectedItem.Count

# Die Handels-Variable wird auf null gesetzt und nur wenn der zu tauschende Gegenstand identisch ist und dessen stapelgröße mindestens so viel ist wie vorgegeben, wird die Handels-Variable auf eins gesetzt.
scoreboard players set VarTausM.2Handel PZTausM.2Wert 0
execute if score VarTausM.2Ungleich PZTausM.2Wert matches 0 if score VarTausM.2Stapel PZTausM.2Wert >= VarTausM.2Preis PZTausM.2Wert run scoreboard players set VarTausM.2Handel PZTausM.2Wert 1

# Wenn der Handel nicht durchgeführt werden kann, wird eine Fehlermeldung ausgegeben.
execute if score VarTausM.2Handel PZTausM.2Wert matches 0 as @p[distance=..3] run tellraw @s ["Tauschmaschine.2:\n",{"entity":"@s","nbt":"SelectedItem.id","color":"dark_purple","bold":true},{"text":" konnte nicht getauscht werden!","color":"red","bold":true}]

# Wenn der Handel durchgeführt werden kann, wird dem Spieler angezeigt, welche Waren er getuscht hat.
execute if score VarTausM.2Handel PZTausM.2Wert matches 1 run tellraw @p[distance=..3] ["Tauschmaschine.2:\n",{"entity":"@s","nbt":"Items[{Slot:11b}].id","color":"dark_purple","bold":true},{"text":" getauscht gegen ","bold":true},{"entity":"@s","nbt":"Items[{Slot:15b}].id","color":"dark_purple","bold":true}]

# Von dem aktuellen Stapel wird der Preis abgezogen und anschließend wird mit dem Modifizierer die Stapel-Größe im Spieler-Inventar angepasst.
scoreboard players operation VarTausM.2Stapel PZTausM.2Wert -= VarTausM.2Preis PZTausM.2Wert
execute if score VarTausM.2Handel PZTausM.2Wert matches 1 run item modify entity @p[distance=..3] weapon.mainhand tauschmaschine:v2stapel

# Wenn der Handel erfolgreich ist, wird dem Spieler eine Gegenstand vor die Füße gelegt, der noch nicht aufgehoben werden kann.
execute if score VarTausM.2Handel PZTausM.2Wert matches 1 at @p[distance=..3] run summon minecraft:item ~ ~ ~ {PickupDelay:32767s,Item:{id:"minecraft:stone",Count:1b},Tags:["EtiTausM.2Alle","EtiTausM.2Ware"]}

# Anschließend werden die Daten des Gegenstands in den Drop kopiert.
execute if score VarTausM.2Handel PZTausM.2Wert matches 1 run data modify entity @e[type=minecraft:item,tag=EtiTausM.2Ware,sort=nearest,limit=1] Item set from entity @s Items[{Slot:15b}]

# Damit der Spieler nun den Drop aufheben kann, wird die Aufhebezeit auf null gesetzt.
execute store success score @s PZTausM.2Wert run data modify entity @e[type=minecraft:item,tag=EtiTausM.2Ware,sort=nearest,limit=1] PickupDelay set value 0
JSON Icon.png tauschmaschine:v2stapel.json
{
  "function": "minecraft:set_count",
  "count": {
    "type": "minecraft:score",
    "target": {
      "type": "minecraft:fixed",
      "name": "VarTausM.2Stapel"
    },
    "score": "PZTausM.2Wert"
  }
}

Variante 2: Stopp-Funktion
Die Stopp-Funktion löscht das Punkte-Ziel, den Datenspeicher und alle Gegenstände im Inventar oder auf den Boden.

Editor Icon.png tauschmaschine:v2stopp.mcfunction
# Das Punkte-Ziel wird gelöscht.
scoreboard objectives remove PZTausM.2Wert

# Der Datenspeicher wird geleert.
data remove storage tauschmaschine:v2daten "EigTausM.2Handel"

# Alle Gegenstände die durch die Tauschmaschine gegeben wurden, werden entfernt.
clear @a #tauschmaschine:v2menu{EigTausM.2Alle:true}
clear @a minecraft:armor_stand{EigTausM.2Alle:true}

# Die Güterlore wird geleert, bevor sie gelöscht wird, damit sie nichts droppt.
execute as @e[type=minecraft:chest_minecart,tag=EtiTausM.2Menu] run data remove entity @s Items

# Gegenstände die auf den Boden geworfen sind, werden mit einem Etikett ausgestattet und alle Objekte mit diesem Etikett werden entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigTausM.2Alle:true} } }] add EtiTausM.2Alle
kill @e[tag=EtiTausM.2Alle]


Disambig color.svg
Grid Grasblock.png
Auch im Minecraft Wiki wird das Thema dieser Technik behandelt:
Handel
Advertisement