Ofen-Rezeptmaschine (Befehle)

Aus Technik Wiki
Wechseln zu: Navigation, Suche
Gruppe: Grid Trichter.png
Maschinen

Grid Roter Sand blass.png mit Mechaniken

Grid Redstone blass.png mit Redstone
                Hier:
Grid Befehlsblock.png mit Befehlen
Noch in keiner
Download-Welt enthalten.
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 Ofen-Rezeptmaschine wird für das angepasste Erhitzen von Gegenständen verwendet. Mit Rezeptdaten lassen sich die Ausgabe-Gegenstände und die dafür erzielte Erfahrung anpassen. Mit einer Ofen-Rezeptmaschine lassen sich darüber hinaus auch die Geschwindigkeit des Erhitzungsfortschrittes beschleunigen und die Stapelzahl wie viele Gegenstände auf einmal erhitzt werden sollen. Ebenfalls kann man mit dem simulierten Ofen auch in den Ausgabe-Slot Gegenstände mit NBT ausgeben lassen.

Was hier nicht gezeigt wird, aber auch theoretisch gemacht werden könnte, wäre die Anzahl der Ein- und Ausgabe-Slots zu erhöhen, sodass man mehr als einen Gegenstand gleichzeitig erhitzen kann und ein Gegenstand könnte auch mehrere Ausgabe-Gegenstände erzeugen.

Rezeptdaten[Bearbeiten | Quelltext bearbeiten]

Hier werden vier Beispiele von Rezeptdateien gezeigt:

Variante 1[Bearbeiten | Quelltext bearbeiten]

Ofen-Rezeptmaschine (Befehle) Bild 1.1.png Ofen-Rezeptmaschine (Befehle) Bild 1.2.png Ofen-Rezeptmaschine (Befehle) Bild 1.3.png

Mit dieser Ofen-Rezeptmaschine lassen sich normale Öfen in Schnellheizer verwandeln. Man platziert einen Rahmen auf einen Ofen und legt in diesen Rahmen einen Ofen hinein. Anschließend legt man Feuerkugeln und einen Lavaeimer im die beiden Slots des Ofens rein und die Feuerkugeln landen dann auf dem Platz des Lavaeimers, wo sie dann als Brennstoff verwendet werden. Der Ofen erhitzt dann beliebige Gegenstände im rasanten Tempo, und die Ausgabe-Gegenstände erscheinen im Ausgabe-Slot.

Einschalten
Wiederholen
Ausschalten

Befehlsblöcke mit Befehlen:


Variante 1: Start-Funktion
Die Start-Funktion erstellt das Punkte-Ziel um die Rezepte einzuordnen zu können, es werden alle wichtigen Gegenstände den Spielern gegeben und die Vorgehensweise wie man den Ofen aktiviert wird mit einem Beispiel-Ofen gezeigt.

Editor Icon.png ofen-rezeptmaschine:v1start.mcfunction
# Ein Punkte-Ziel wird erstellt, um den Erhitzungsfortschritt speichern zu können.
scoreboard objectives add PZOfRezM.1Fort dummy ["Ofen-Rezeptmaschine.1: ",{"text":"Fortschritt des Erhitzungsvorgangs","bold":true}]

# Zwei Öfen und ein Rahmen wird dem Spieler gegeben. Damit kann er den präparierten Ofen konstruieren.
give @a[distance=..15] minecraft:furnace{EigOfRezM.1Alle:true,display:{Lore:['"Platziere den Ofen,"','"platziere den Rahmen darauf"','"und lege in diesen ebenfalls einen Ofen."']} } 2
give @a[distance=..15] minecraft:item_frame{EigOfRezM.1Alle:true,display:{Lore:['"Platziere den Ofen,"','"platziere den Rahmen darauf"','"und lege in diesen ebenfalls einen Ofen."']} } 1

# Um den präparierten Ofen zu aktivieren wird ein Lavaeimer und eine beliebige Anzahl Feuerkugeln benötigt.
give @a[distance=..15] minecraft:fire_charge{EigOfRezM.1Alle:true,display:{Lore:['"Rezept-Gegenstand"']} } 64
give @a[distance=..15] minecraft:lava_bucket{EigOfRezM.1Alle:true,display:{Lore:['"Rezept-Gegenstand"']} } 3

# Den Spielern werden Erhitzungsgegenstände gegeben, die im Ofen verwendet werden können.
give @a[distance=..15] minecraft:cobblestone{EigOfRezM.1Alle:true,display:{Lore:['"Rezept-Gegenstand"']} } 64
give @a[distance=..15] minecraft:nether_gold_ore{EigOfRezM.1Alle:true,display:{Lore:['"Rezept-Gegenstand"']} } 64
give @a[distance=..15] minecraft:acacia_log{EigOfRezM.1Alle:true,display:{Lore:['"Rezept-Gegenstand"']} } 64

# Damit man das Rezept für den Ofen nachschauen kann, wird ein Ofen mit der richtigen Anordnung der Gegenstände platziert.
setblock ~ ~1 ~ minecraft:furnace[facing=south]{Items:[{Slot:0b,id:"minecraft:fire_charge",Count:64b},{Slot:1b,id:"minecraft:lava_bucket",Count:1b}]} replace

Variante 1: Zyklus-Funktion
Die Zyklus-Funktion prüft ob man einen Ofen platziert hat, auf den man einen Rahmen mit Ofen drin befestigt hat und nur dann wird die Rezeptblock-Funktion geladen.

Editor Icon.png ofen-rezeptmaschine:v1zyklus.mcfunction
# Unter einem Rahmen der mit einem Ofen beinhaltet, wird geprüft ob sich dort ein Ofen befindet, der noch leer ist. Nur dann bekommt der Rahmen zwei Etiketten.
execute as @e[type=minecraft:item_frame,tag=!EtiOfRezM.1Ofen,nbt={Facing:1b,Item:{id:"minecraft:furnace"} }] at @s if block ~ ~-1 ~ minecraft:furnace{Items:[]} run data merge entity @s {Tags:["EtiOfRezM.1Alle","EtiOfRezM.1Ofen"]}

# Rahmen mit Etikett speichern in ihrem Punktestand ob kein Ofen mehr unter ihnen ist, falls es so ist bekommen sie den Wert eins.
execute as @e[type=minecraft:item_frame,tag=EtiOfRezM.1Ofen] at @s store success score @s PZOfRezM.1Fort unless block ~ ~-1 ~ minecraft:furnace

# Wenn kein Ofen mehr unter dem Rahmen ist, wird er gelöscht.
kill @e[type=minecraft:item_frame,tag=EtiOfRezM.1Ofen,scores={PZOfRezM.1Fort=1}]

# Von der Position des Rahmens aus, wird die Rezeptblock-Funktion geladen.
execute as @e[type=minecraft:item_frame,tag=EtiOfRezM.1Ofen,scores={PZOfRezM.1Fort=0}] at @s positioned ~ ~-1 ~ run function ofen-rezeptmaschine:v1rezeptblock

Variante 1: Rezeptblock-Funktion
Die Rezeptblock-Funktion prüft ob man den Ofen mit einem Lavaeimer und Feuerkugeln aktiviert hat und nur dann sorgt sie dafür, dass der Ofen beliebige Gegenstände im rasanten Tempo erhitzt.

Editor Icon.png ofen-rezeptmaschine:v1rezeptblock.mcfunction
# Falls eine Feuerkugel bereits im unteren Slot liegt, erhält der Rahmen ein entsprechendes Etikett.
execute if data block ~ ~ ~ {Items:[{Slot:1b,id:"minecraft:fire_charge"}]} run tag @s add EtiOfRezM.1Feuerkugel

# Um den Ofen zu aktivieren, muss im oberen Slot ein Stapel Feuerkugeln liegen und im unteren ein Lavaeimer, dann bekommt der Rahmen das Etikett.
execute if entity @s[tag=!EtiOfRezM.1Feuerkugel] if data block ~ ~ ~ {Items:[{Slot:0b,id:"minecraft:fire_charge"},{Slot:1b,id:"minecraft:lava_bucket"}]} run tag @s add EtiOfRezM.1Rezept

# Mit Etikett wird der Ofen so präpariert, dass die Feuerkugeln in den unteren Slot gelegt werden.
execute if entity @s[tag=EtiOfRezM.1Rezept] run data modify block ~ ~ ~ Items[{Slot:1b}] set value {Slot:1b,id:"minecraft:fire_charge",Count:1b}
execute if entity @s[tag=EtiOfRezM.1Rezept] run data modify block ~ ~ ~ Items[{Slot:1b}].Count set from block ~ ~ ~ Items[{Slot:0b}].Count
execute if entity @s[tag=EtiOfRezM.1Rezept] run data remove block ~ ~ ~ Items[{Slot:0b}]

# Da der Lavaeimer ersetzt wurde, wird der leere Eimer als Drop erzeugt und es ertönt ein Geräusch.
execute if entity @s[tag=EtiOfRezM.1Rezept] run summon minecraft:item ~ ~1 ~ {Item:{id:"minecraft:bucket",Count:1b},Motion:[0.0d,0.3d,0.0d]}
execute if entity @s[tag=EtiOfRezM.1Rezept] run playsound minecraft:entity.wither.spawn master @a[distance=..15] ~ ~ ~ 1 1 0.1

# Danach wird das Etikett wieder entfernt.
tag @s[tag=EtiOfRezM.1Rezept] remove EtiOfRezM.1Rezept

# Falls noch keine Feuerkugel im unteren Slot liegt und er noch nicht in den Schnellheizmodus gelangt ist, wird seine Brennzeit ausgelesen.
execute unless entity @s[tag=!EtiOfRezM.1Feuerkugel,tag=!EtiOfRezM.1Schnellheizen] store result score @s PZOfRezM.1Fort run data get block ~ ~ ~ BurnTime

# Falls der Ofen keine Feuerkugel mehr besitzt aber noch im Schnellheizen ist und keine Brennzeit mehr besitzt, wird ihm das Etikett entfernt.
tag @s[tag=!EtiOfRezM.1Feuerkugel,tag=EtiOfRezM.1Schnellheizen,scores={PZOfRezM.1Fort=..0}] remove EtiOfRezM.1Schnellheizen

# Falls sich eine Feuerkugel im unteren Slot befindet und seine Brennzeit null erreicht hat, wird geprüft ob sich irgend ein Gegenstand im oberen Slot befindet. Falls ja, wird ein Etikett für den weiteren Verlauf gegeben.
execute if entity @s[tag=EtiOfRezM.1Feuerkugel,scores={PZOfRezM.1Fort=..0}] if data block ~ ~ ~ Items[{Slot:0b}] run tag @s add EtiOfRezM.1Stapel

# Wenn sich ein Stapel im Ofen befindet, wird die Brennzeit wieder auf das Maximum gestellt und die Stapelzahl wird um eins reduziert.
execute if entity @s[tag=EtiOfRezM.1Stapel] run data merge block ~ ~ ~ {BurnTime:1000s}
execute store result score @s[tag=EtiOfRezM.1Stapel] PZOfRezM.1Fort run data get block ~ ~ ~ Items[{Slot:1b}].Count
execute if entity @s[tag=EtiOfRezM.1Stapel] store result block ~ ~ ~ Items[{Slot:1b}].Count byte 1 run scoreboard players remove @s PZOfRezM.1Fort 1

# Wenn ein Gegenstand im oberen Slot liegt und noch nicht das Etikett fürs Schnellheizen vergeben wurde, wird es gesetzt.
tag @s[tag=EtiOfRezM.1Stapel,tag=!EtiOfRezM.1Schnellheizen] add EtiOfRezM.1Schnellheizen

# Die beiden Etikette werden jeden Tick neu vergeben, weswegen sie auch wieder gelöscht werden müssen.
tag @s[tag=EtiOfRezM.1Stapel] remove EtiOfRezM.1Stapel
tag @s[tag=EtiOfRezM.1Feuerkugel] remove EtiOfRezM.1Feuerkugel

# Wenn der Ofen schnellheizen soll, wird die Brenndauer ausgelesen und um 21 erhöht.
execute store result score @s[tag=EtiOfRezM.1Schnellheizen] PZOfRezM.1Fort run data get block ~ ~ ~ CookTime
execute if entity @s[tag=EtiOfRezM.1Schnellheizen,scores={PZOfRezM.1Fort=..180}] store result block ~ ~ ~ CookTime short 1 run scoreboard players add @s PZOfRezM.1Fort 21

# Wenn die Brenndauer Werte zwischen und einschließlich von 168 und 179 erreicht, werden Rauchpartikel und Geräusche erzeugt.
execute if entity @s[tag=EtiOfRezM.1Schnellheizen,scores={PZOfRezM.1Fort=168..179}] run particle minecraft:smoke ~ ~1 ~ 0 0 0 0.01 10 force @a[distance=..15]
execute if entity @s[tag=EtiOfRezM.1Schnellheizen,scores={PZOfRezM.1Fort=168..179}] run particle minecraft:flame ~ ~1 ~ 0 0 0 0.01 10 force @a[distance=..15]
execute if entity @s[tag=EtiOfRezM.1Schnellheizen,scores={PZOfRezM.1Fort=168..179}] run playsound minecraft:block.furnace.fire_crackle master @a[distance=..15] ~ ~ ~ 1 1 0.1

Variante 1: Stopp-Funktion
Die Stopp-Funktion löscht das Punkte-Ziel und die Gegenstände wieder. Ebenfalls werden die Öfen entfernt.

Editor Icon.png ofen-rezeptmaschine:v1stopp.mcfunction
# Das Punkte-Ziel wird entfernt.
scoreboard objectives remove PZOfRezM.1Fort

# Spieler die irgend einen Gegenstand für den Ofen im Inventar besitzen, bekommen alle Gegenstände aus der Aliasliste entfernt.
clear @a[nbt={Inventory:[{tag:{EigOfRezM.1Alle:true} } ] }] #ofen-rezeptmaschine:v1rezepte

# Der Ofen wird entfernt.
setblock ~ ~1 ~1 minecraft:air replace

# Damit der Ofen beim entfernen nichts droppt werden zuerst die Gegenstände gelöscht und danach die Erfahrungspunkte.
execute at @e[type=minecraft:item_frame,tag=EtiOfRezM.1Ofen] run data remove block ~ ~-1 ~ Items
execute at @e[type=minecraft:item_frame,tag=EtiOfRezM.1Ofen] run data merge block ~ ~-1 ~ {RecipesUsed:{"minecraft:stone":0} }
execute at @e[type=minecraft:item_frame,tag=EtiOfRezM.1Ofen] if block ~ ~-1 ~ minecraft:furnace run setblock ~ ~-1 ~ minecraft:air replace

# Alle gedroppten Gegenstände bekommen das Etikett und alle Rahmen und gedroppten Gegenstände werden gelöscht.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigOfRezM.1Alle:true} } }] add EtiOfRezM.1Alle
kill @e[tag=EtiOfRezM.1Alle]

Variante 2[Bearbeiten | Quelltext bearbeiten]

Ofen-Rezeptmaschine (Befehle) Bild 2.1.png Ofen-Rezeptmaschine (Befehle) Bild 2.2.png Ofen-Rezeptmaschine (Befehle) Bild 2.3.png

Diese Ofen-Rezeptmaschine simuliert mit Hilfe eines Spenders einen Ofen. Um den Ofen zu erstellen muss man einen nach oben gerichteten Spender platzieren und auf ihm einen Rahmen mit Ofen legen. Dann ist der simulierte Ofen bereit. Man legt das Material wie gewohnt in den oberen Slot hinein und in den unteren kommt das Brennmaterial. Anschließend zeigt die rote Glasscheibe die Brenndauer und die grüne Glasscheibe den Erhitzungsfortschritt an. mit diesem Ofen lassen sich zwei Diamantblöcke in einen antiken Schrott erhitzen oder Basalt in Schwarzstein. Man kann in den Funktionen auch selbst weitere Rezepte hinzufügen.

Einschalten
Wiederholen
Ausschalten

Befehlsblöcke mit Befehlen:


Variante 2: Start-Funktion
Die Start-Funktion erstellt die drei Punkte-Ziele für den Fortschritt, die Dauer und das Material. Es werden alle wichtigen Gegenstände den Spielern gegeben.

Editor Icon.png ofen-rezeptmaschine:v2start.mcfunction
# Es werden drei Punkte-Ziele erstellt.
scoreboard objectives add PZOfRezM.2Fort dummy ["Ofen-Rezeptmaschine.2: ",{"text":"Fortschritt der Erhitzung","bold":true}]
scoreboard objectives add PZOfRezM.2Dau dummy ["Ofen-Rezeptmaschine.2: ",{"text":"Dauer der Erhitzung","bold":true}]
scoreboard objectives add PZOfRezM.2Mat dummy ["Ofen-Rezeptmaschine.2: ",{"text":"Material","bold":true}]

# Es wird eine Konstante mit dem festen Wert 20 erstellt.
scoreboard players set KonstOfRezM.2ZWANZIG PZOfRezM.2Fort 20

# Ein Spender, ein Rahmen und ein Ofen werden für den simulierten Ofen benötigt, weswegen sie an die Spieler ausgegeben werden.
give @a[distance=..15] minecraft:dropper{EigOfRezM.2Alle:true,display:{Lore:['"Platziere den Spender,"','"platziere den Rahmen darauf"','"und lege in diesen den Ofen."']} } 1
give @a[distance=..15] minecraft:item_frame{EigOfRezM.2Alle:true,display:{Lore:['"Platziere den Spender,"','"platziere den Rahmen darauf"','"und lege in diesen den Ofen."']} } 1
give @a[distance=..15] minecraft:furnace{EigOfRezM.2Alle:true,display:{Lore:['"Platziere den Spender,"','"platziere den Rahmen darauf"','"und lege in diesen den Ofen."']} } 1

# An die Spieler wird Brennmaterial verteilt.
give @a[distance=..15] minecraft:coal{EigOfRezM.2Alle:true,display:{Lore:['"Rezept-Gegenstand"']} } 64
give @a[distance=..15] minecraft:coal_block{EigOfRezM.2Alle:true,display:{Lore:['"Rezept-Gegenstand"']} } 64
give @a[distance=..15] minecraft:lava_bucket{EigOfRezM.2Alle:true,display:{Lore:['"Rezept-Gegenstand"']} } 3

# An die Spieler wird Material ausgeliefert, dass erhitzt werden kann.
give @a[distance=..15] minecraft:iron_door{EigOfRezM.2Alle:true,display:{Lore:['"Rezept-Gegenstand"']} } 64
give @a[distance=..15] minecraft:basalt{EigOfRezM.2Alle:true,display:{Lore:['"Rezept-Gegenstand"']} } 64
give @a[distance=..15] minecraft:diamond_block{EigOfRezM.2Alle:true,display:{Lore:['"Rezept-Gegenstand"']} } 64

Variante 2: Zyklus-Funktion
Die Zyklus-Funktion prüft ob ein nach oben gestellter Spender von einem Rahmen mit Ofen begleitet wird und ruft nur dann die Menü-Funktion auf.

Editor Icon.png ofen-rezeptmaschine:v2zyklus.mcfunction
# Es wird geprüft ob ein Rahmen einen Ofen inne hat und von diesem aus wird geprüft ob sich unter ihm ein leerer Spender nach oben ausgerichtet befindet, nur dann werden die Etiketten vergeben.
execute as @e[type=minecraft:item_frame,tag=!EtiOfRezM.2Spender,nbt={Facing:1b,Item:{id:"minecraft:furnace"} }] at @s if block ~ ~-1 ~ minecraft:dropper[facing=up]{Items:[]} run data merge entity @s {Tags:["EtiOfRezM.2Alle","EtiOfRezM.2Spender","EtiOfRezM.2Werte"]}

# Wenn der Ofen zum ersten mal platziert wurde, erhält der Rahmen für beide seiner Punktestände den Wert null und das Etikett wird entfernt.
execute as @e[type=minecraft:item_frame,tag=EtiOfRezM.2Werte] run scoreboard players operation @s PZOfRezM.2Dau = @s PZOfRezM.2Fort
tag @e[type=minecraft:item_frame,tag=EtiOfRezM.2Werte] remove EtiOfRezM.2Werte

# Wenn unter dem Rahmen kein Spender mehr ist, wird er entfernt.
execute as @e[type=minecraft:item_frame,tag=EtiOfRezM.2Spender] at @s unless block ~ ~-1 ~ minecraft:dropper[facing=up] run kill @s

# Einen Block unter der Position des Rahmens wird die Menü-Funktion aufgerufen.
execute as @e[type=minecraft:item_frame,tag=EtiOfRezM.2Spender] at @s positioned ~ ~-1 ~ run function ofen-rezeptmaschine:v2menu

Variante 2: Menü-Funktion
Die Menü-Funktion prüft das Inventar des Spender-Ofens und nur, wenn alles stimmt, wird die Material- und Rezeptblock-Funktion aufgerufen.

Editor Icon.png ofen-rezeptmaschine:v2menu.mcfunction
# Falls der Spieler Gegenstände aus dem Spender-Ofen-Menü gedroppt hat oder ins Inventar geholt hat, werden diese gelöscht.
clear @a[distance=..5] #ofen-rezeptmaschine:v2menu{EigOfRezM.2Menu:true}
kill @e[distance=..2,type=minecraft:item,nbt={Item:{tag:{EigOfRezM.2Menu:true} } },sort=nearest]

# Bevor die Anzahl der belegten Slots ausgelesen werden kann, werden alle Menü-Gegenstände entfernt.
data remove block ~ ~ ~ Items[{tag:{EigOfRezM.2Menu:true} }]
execute store result score VarOfRezM.2Slots PZOfRezM.2Fort run data get block ~ ~ ~ Items

# Die schwarzen Glasscheiben markieren die gesperrten Slots.
replaceitem block ~ ~ ~ container.1 minecraft:black_stained_glass_pane{EigOfRezM.2Alle:true,EigOfRezM.2Menu:true,display:{Name:'{"text":""}'} }
replaceitem block ~ ~ ~ container.2 minecraft:black_stained_glass_pane{EigOfRezM.2Alle:true,EigOfRezM.2Menu:true,display:{Name:'{"text":""}'} }

replaceitem block ~ ~ ~ container.7 minecraft:black_stained_glass_pane{EigOfRezM.2Alle:true,EigOfRezM.2Menu:true,display:{Name:'{"text":""}'} }
replaceitem block ~ ~ ~ container.8 minecraft:black_stained_glass_pane{EigOfRezM.2Alle:true,EigOfRezM.2Menu:true,display:{Name:'{"text":""}'} }

# Die rote Glasscheibe, zeigt mit ihrer Stapelzahl die im späteren Verlauf variert die Brenndauer an.
replaceitem block ~ ~ ~ container.3 minecraft:red_stained_glass_pane{EigOfRezM.2Alle:true,EigOfRezM.2Menu:true,display:{Name:'{"text":"Dauer","color":"red","bold":true}'} }

# Die grüne Glasscheibe zeigt mit ihrer Stapelzahl den Erhitzungsfortschritt an.
replaceitem block ~ ~ ~ container.4 minecraft:green_stained_glass_pane{EigOfRezM.2Alle:true,EigOfRezM.2Menu:true,display:{Name:'{"text":"Fortschritt","color":"green","bold":true}'} }

# Wenn mindestens ein Slot von den nicht gesperrten Slots belegt ist, wird geprüft ob der untere Slot belegt ist und nur dann erhält der Rahmen ein Etikett. Falls die Brenndauer mindestens noch bei eins liegt, erhält er ebenfalls das Etikett. Anschließend wird der Wert vom Rahmen in eine Variable gespeichert.
execute if score VarOfRezM.2Slots PZOfRezM.2Fort matches 1.. if data block ~ ~ ~ Items[{Slot:6b}] run tag @s add EtiOfRezM.2Material
execute if score VarOfRezM.2Slots PZOfRezM.2Fort matches 1.. run tag @s[tag=!EtiOfRezM.2Material,scores={PZOfRezM.2Dau=1..}] add EtiOfRezM.2Material
scoreboard players operation VarOfRezM.2Material PZOfRezM.2Mat = @s PZOfRezM.2Mat

# Falls der Rahmen das Etikett besitzt, wird die Material-Funktion geladen.
execute if entity @s[tag=EtiOfRezM.2Material] run function ofen-rezeptmaschine:v2material

# Wenn ein bestimmtes Material im Ofen liegt, aber diese nicht mehr mit der aktuellen Material-Nummer übereinstimmt, wird ein entsprechendes Etikett vergeben. Das Etikett fürs Material wird dann entfernt und das Etikett für das andere Material auch, falls im Ausgabe-Slot kein Gegenstand mehr liegt.
execute if score VarOfRezM.2Material PZOfRezM.2Mat matches 1.. unless score VarOfRezM.2Material PZOfRezM.2Mat = @s PZOfRezM.2Mat run tag @s add EtiOfRezM.2AnderesMaterial
tag @s[tag=EtiOfRezM.2Material,tag=EtiOfRezM.2AnderesMaterial] remove EtiOfRezM.2Material
execute if entity @s[tag=EtiOfRezM.2AnderesMaterial] unless data block ~ ~ ~ Items[{Slot:5b}] run tag @s remove EtiOfRezM.2AnderesMaterial

# Wenn Slots belegt sind und entsprechendes Material vorliegt, wird die Rezeptblock-Funktion aufgerufen, ansonsten wird der Erhitzungsfortschritt auf null zurück gesetzt.
execute if score VarOfRezM.2Slots PZOfRezM.2Fort matches 1.. if entity @s[tag=EtiOfRezM.2Material,scores={PZOfRezM.2Mat=1..}] run function ofen-rezeptmaschine:v2rezeptblock
execute if entity @s[tag=!EtiOfRezM.2Material] run scoreboard players set @s PZOfRezM.2Fort 0

# Das Etikett wird bei jedem Durchlauf erneut vergeben, weswegen es wieder gelöscht wird.
tag @s[tag=EtiOfRezM.2Material] remove EtiOfRezM.2Material

Variante 2: Material-Funktion
Die Material-Funktion prüft das Material, welches erhitzt werden soll und nur wenn es in der Liste vorkommt, bekommt das Material eine Nummer ab eins aufwärts.

Editor Icon.png ofen-rezeptmaschine:v2material.mcfunction
# Es wird auf das entsprechende Material getestet und nur dann bekommt der Rahmen die entsprechende Nummer zugewiesen.
execute store success score @s PZOfRezM.2Mat if data block ~ ~ ~ {Items:[{Slot:0b,id:"minecraft:iron_door"}]}
execute if entity @s[scores={PZOfRezM.2Mat=0}] if data block ~ ~ ~ {Items:[{Slot:0b,id:"minecraft:basalt"}]} run scoreboard players set @s PZOfRezM.2Mat 2
execute if entity @s[scores={PZOfRezM.2Mat=0}] if data block ~ ~ ~ {Items:[{Slot:0b,id:"minecraft:diamond_block"}]} unless data block ~ ~ ~ {Items:[{Slot:0b,Count:1b}]} run scoreboard players set @s PZOfRezM.2Mat 3

Variante 2: Rezeptblock-Funktion
Die Rezeptblock-Funktion sorgt für die Visualisierung der Brenndauer und des Fortschrittes im Spender-Ofen, in dem die gefärbten Glasscheiben ihre Stapel-Anzahl entsprechend geändert bekommen. Ebenfalls wird die Brennstoff- und Rezepte-Funktion aufgerufen.

Editor Icon.png ofen-rezeptmaschine:v2rezeptblock.mcfunction
# Solange noch eine Brenndauer vorhanden ist, wird sie um eins reduziert.
scoreboard players remove @s[scores={PZOfRezM.2Dau=1..}] PZOfRezM.2Dau 1

# Die Erhitzungsdauer wird in zwei Variablen gespeichert, damit man diese Variablen ändern kann, ohne die originalen Werte zu ändern.
execute store result score VarOfRezM.2Ton PZOfRezM.2Dau run scoreboard players operation VarOfRezM.2Dauer PZOfRezM.2Dau = @s PZOfRezM.2Dau

# Die erste der beiden Variablen wird durch 20 geteilt und anschließend in die rote Glasscheiben-Anzahl gespeichert.
scoreboard players operation VarOfRezM.2Dauer PZOfRezM.2Dau /= KonstOfRezM.2ZWANZIG PZOfRezM.2Fort
execute store result block ~ ~ ~ Items[{Slot:3b}].Count byte 1 run scoreboard players add VarOfRezM.2Dauer PZOfRezM.2Dau 1

# Damit ein Ofen-Geräusch immer mal wieder entsteht, wenn der Ofen erhitzt, wird die zweite Variable mit modulus geteilt und übrig bleibt der Rest einer Division und immer wenn der Rest bei genau eins liegt, wird ein Ofen-Geräusch abgespielt.
scoreboard players operation VarOfRezM.2Ton PZOfRezM.2Dau %= KonstOfRezM.2ZWANZIG PZOfRezM.2Fort
execute if score VarOfRezM.2Ton PZOfRezM.2Dau matches 1 run playsound minecraft:block.furnace.fire_crackle master @a[distance=..15] ~ ~ ~ 1 1 0.1

# Wenn die Brenndauer bei null liegt und sich im oberen wie auch unteren Slot jeweils ein Gegenstand aufhält, wird die Brennstoff-Funktion aufgerufen.
execute if entity @s[scores={PZOfRezM.2Dau=..0}] if data block ~ ~ ~ {Items:[{Slot:0b},{Slot:6b}]} run function ofen-rezeptmaschine:v2brennstoff

# Wenn die Brenndauer bei null liegt, wird auch der Erhitzungsfortschritt auf null gesetzt.
scoreboard players set @s[scores={PZOfRezM.2Dau=..0}] PZOfRezM.2Fort 0

# Solange die Brenndauer nicht bei null liegt, wird der Erhitzungsfortschritt um eins erhöht, bis er 200 erreicht.
scoreboard players add @s[scores={PZOfRezM.2Dau=1..,PZOfRezM.2Fort=..200}] PZOfRezM.2Fort 1

# Der Erhitzungsfortschritt wird vom Rahmen in eine Variable gespeichert, um nicht den originalen Wert zu ändern. Der Wert der Variable wird durch 20 geteilt und anschließend wird der Wert der Variable um eins erhöht und dieser Wert wird anschließend in die grüne Glascheiben-Anzahl gespeichert.
scoreboard players operation VarOfRezM.2Fortschritt PZOfRezM.2Fort = @s PZOfRezM.2Fort
scoreboard players operation VarOfRezM.2Fortschritt PZOfRezM.2Fort /= KonstOfRezM.2ZWANZIG PZOfRezM.2Fort
execute store result block ~ ~ ~ Items[{Slot:4b}].Count byte 1 run scoreboard players add VarOfRezM.2Fortschritt PZOfRezM.2Fort 1

# Wenn der Erhitzungsfortschritt bei 200 liegt und auch ein Material im oberen Slot liegt, wird die Rezepte-Funktion aufgerufen. Danach wird der Wert wieder auf null gesetzt.
execute if entity @s[scores={PZOfRezM.2Fort=200..}] if data block ~ ~ ~ Items[{Slot:0b}] run function ofen-rezeptmaschine:v2rezepte
scoreboard players set @s[scores={PZOfRezM.2Fort=200..}] PZOfRezM.2Fort 0

Variante 2: Brennstoff-Funktion
Die Brennstoff-Funktion schaut danach, welcher Brennstoff für die Erhitzung verwendet wird und gibt dann entsprechende Brenndauer-Vorgaben. Sie reagiert auch in Ausname-Situationen wie beim Lavaeimer und gibt einen leeren Eimer aus.

Editor Icon.png ofen-rezeptmaschine:v2brennstoff.mcfunction
# Der Wert der Variable wird erstmal auf null gesetzt, bevor er auf einen neuen Wert gesetzt wird.
scoreboard players set VarOfRezM.2Brennstoff PZOfRezM.2Dau 0

# Wenn Kohle in den Spender-Ofen gelegt wurde, wird die Brenndauer auf 140 gesetzt. Beim Kohleblock auf 1280.
execute if data block ~ ~ ~ {Items:[{Slot:6b,id:"minecraft:coal"}]} store success score VarOfRezM.2Brennstoff PZOfRezM.2Dau run scoreboard players add @s PZOfRezM.2Dau 140
execute if data block ~ ~ ~ {Items:[{Slot:6b,id:"minecraft:coal_block"}]} if score VarOfRezM.2Brennstoff PZOfRezM.2Dau matches 0 store success score VarOfRezM.2Brennstoff PZOfRezM.2Dau run scoreboard players add @s PZOfRezM.2Dau 1280

# wurde ein Lavaeimer hineingelegt, wird die Brenndauer auf 1280 gesetzt und der Lavaeimer wird durch einen leeren Eimer ersetzt.
execute if data block ~ ~ ~ {Items:[{Slot:6b,id:"minecraft:lava_bucket"}]} if score VarOfRezM.2Brennstoff PZOfRezM.2Dau matches 0 store success score VarOfRezM.2Brennstoff PZOfRezM.2Dau run tag @s add EtiOfRezM.2Eimer
scoreboard players add @s[tag=EtiOfRezM.2Eimer] PZOfRezM.2Dau 1280
#execute if entity @s[tag=EtiOfRezM.2Eimer] run scoreboard players add VarOfRezM.2Stapel PZOfRezM.2Dau 1
execute if entity @s[tag=EtiOfRezM.2Eimer] run data modify block ~ ~ ~ Items[{Slot:6b}] set value {Slot:6b,id:"minecraft:bucket",Count:2b}
tag @s[tag=EtiOfRezM.2Eimer] remove EtiOfRezM.2Eimer

# Wenn ein Brennstoff gefunden wurde, wird die aktuelle Stapel-Anzahl des Brennmaterials ausgelesen und um eins verringert.
execute if score VarOfRezM.2Brennstoff PZOfRezM.2Dau matches 1 store result score VarOfRezM.2Stapel PZOfRezM.2Dau run data get block ~ ~ ~ Items[{Slot:6b}].Count
execute if score VarOfRezM.2Brennstoff PZOfRezM.2Dau matches 1 if data block ~ ~ ~ Items[{Slot:0b}] store result block ~ ~ ~ Items[{Slot:6b}].Count byte 1 run scoreboard players remove VarOfRezM.2Stapel PZOfRezM.2Dau 1

Variante 2: Rezepte-Funktion
Die Rezepte-Funktionschaut nach, welches Material erhitzt wird und reagiert darauf entsprechend. Wie viel Erhitzungs-Material soll beim erhitzen erzeugt werden und wie viel Material soll abgezogen werden.


Editor Icon.png ofen-rezeptmaschine:v2rezepte.mcfunction
# Wenn der Ausgabe-Slot belegt ist, wird ein Etikett vergeben.
execute if data block ~ ~ ~ Items[{Slot:5b}] run tag @s add EtiOfRezM.2Belegt

# Der Wert der Variable wird auf eins gesetzt und nur wenn das Material (Nummer 1 = Eisentür) ist, wird der Wert auf zwei geändert.
scoreboard players set VarOfRezM.2NeuerStapel PZOfRezM.2Dau 1
execute if entity @s[tag=EtiOfRezM.2Belegt,scores={PZOfRezM.2Mat=1}] run scoreboard players set VarOfRezM.2NeuerStapel PZOfRezM.2Dau 2

# Die Stapel-Anzahl aus dem Ausgabe-Slot wird ausgelesen und in eine Variable gespeichert. Anschließend wird dieser Wert um die Anzahl der neu dazukommenden Gegenstände erhöht und wieder zurück in den Ausgabe-Slot gespeichert.
execute store result score VarOfRezM.2Stapel PZOfRezM.2Dau run data get block ~ ~ ~ Items[{Slot:5b}].Count
execute store result block ~ ~ ~ Items[{Slot:5b}].Count byte 1 run scoreboard players operation VarOfRezM.2Stapel PZOfRezM.2Dau += VarOfRezM.2NeuerStapel PZOfRezM.2Dau

# Wenn der Ausgabe-Slot belegt ist, wird der Wert der Variable auf eins gesetzt, ansonsten auf null.
execute store success score VarOfRezM.2Erfahrung PZOfRezM.2Dau if entity @s[tag=EtiOfRezM.2Belegt]

# Wenn der Ausgabe-Slot noch nicht belegt ist, wird der Ausgabe-Slot abhängig vom erhitzten Material belegt.
execute if entity @s[tag=!EtiOfRezM.2Belegt,scores={PZOfRezM.2Mat=1}] if score VarOfRezM.2Erfahrung PZOfRezM.2Dau matches 0 store success score VarOfRezM.2Erfahrung PZOfRezM.2Dau run data modify block ~ ~ ~ Items append value {Slot:5b,id:"minecraft:iron_trapdoor",Count:2b}
execute if entity @s[tag=!EtiOfRezM.2Belegt,scores={PZOfRezM.2Mat=2}] if score VarOfRezM.2Erfahrung PZOfRezM.2Dau matches 0 store success score VarOfRezM.2Erfahrung PZOfRezM.2Dau run data modify block ~ ~ ~ Items append value {Slot:5b,id:"minecraft:blackstone",Count:1b}
execute if entity @s[tag=!EtiOfRezM.2Belegt,scores={PZOfRezM.2Mat=3}] if score VarOfRezM.2Erfahrung PZOfRezM.2Dau matches 0 store success score VarOfRezM.2Erfahrung PZOfRezM.2Dau run data modify block ~ ~ ~ Items append value {Slot:5b,id:"minecraft:ancient_debris",Count:1b}

# Falls der Wert der Variable bei eins liegt, wird Erfahrung erzeugt und ein Geräusch erklingt.
execute if score VarOfRezM.2Erfahrung PZOfRezM.2Dau matches 1 run summon minecraft:experience_orb ~ ~ ~ {Value:1}
execute if score VarOfRezM.2Erfahrung PZOfRezM.2Dau matches 1 run playsound minecraft:block.lava.pop master @a[distance=..15] ~ ~ ~ 1 1 0.1

# Das Etikett wird wieder entfernt.
tag @s[tag=EtiOfRezM.2Belegt] remove EtiOfRezM.2Belegt

# Die Variable für neue Stapel wird wiederverwendet und auf eins gesetzt. Wenn es sich um Diamantblöcke handelt (Nummer 3), dann wird die Variable auf den Wert zwei gesetzt.
scoreboard players set VarOfRezM.2NeuerStapel PZOfRezM.2Dau 1
execute if entity @s[scores={PZOfRezM.2Mat=3}] run scoreboard players set VarOfRezM.2NeuerStapel PZOfRezM.2Dau 2

# Damit die Gegenstände im oberen Slot bei einem erfolgreichen Erhitzungsvorgangs veringert werden, wird die Stapel-Anzahl ausgelesen und um den vorher eingestellten Wert verringert und zurück in die Stapel-Anzahl gespeichert.
execute store result score VarOfRezM.2Stapel PZOfRezM.2Dau run data get block ~ ~ ~ Items[{Slot:0b}].Count
execute store result block ~ ~ ~ Items[{Slot:0b}].Count byte 1 run scoreboard players operation VarOfRezM.2Stapel PZOfRezM.2Dau -= VarOfRezM.2NeuerStapel PZOfRezM.2Dau

Variante 2: Stopp-Funktion
Die Stopp-Funktion löscht die drei Punkte-Ziele wieder und löscht alle Gegenstände aus dem Inventar und vom Boden und löscht alle simulierten Öfen.

Editor Icon.png ofen-rezeptmaschine:v2stopp.mcfunction
# Die drei Punkte-Ziele werden gelöscht.
scoreboard objectives remove PZOfRezM.2Fort
scoreboard objectives remove PZOfRezM.2Dau
scoreboard objectives remove PZOfRezM.2Mat

# Falls sich bestimmte Gegenstände für den Ofen im Inventar befinden, werden alle Ofen-Gegenstände entfernt.
clear @a[nbt={Inventory:[{tag:{EigOfRezM.2Alle:true} } ] }] #ofen-rezeptmaschine:v2rezepte

# Damit der Spender-Ofen nicht droppt, wenn er entfernt wird, werden die Gegenstände zuvor gelöscht.
execute at @e[type=minecraft:item_frame,tag=EtiOfRezM.2Spender] run data remove block ~ ~-1 ~ Items
execute at @e[type=minecraft:item_frame,tag=EtiOfRezM.2Spender] if block ~ ~-1 ~ minecraft:dropper run setblock ~ ~-1 ~ minecraft:air replace

# Gedroppte Gegenstände erhalten das Etikett und alle Objekte mit diesem Etikett werden entfernt.
tag @e[type=minecraft:item,nbt={Item:{tag:{EigOfRezM.2Alle:true} } }] add EtiOfRezM.2Alle
kill @e[tag=EtiOfRezM.2Alle]


Disambig color.svg