(Neu erstellt: Variante 1 und 2 hinzugefügt) Markierung: Neuanlage |
(In Downloadwelt enthalten: Mechanik-Welt 1.16a) |
||
Zeile 1: | Zeile 1: | ||
{{Unterseite|gruppe=Maschinen| |
{{Unterseite|gruppe=Maschinen| |
||
− | {{Seitenkopf}} |
+ | {{Seitenkopf|dw=m}} |
− | {{Neue Technik|m|artikel}} |
||
}} |
}} |
||
Eine '''Ofen-Rezeptmaschine''' wird für das angepasste {{mcw|Erhitzen}} von Gegenständen verwendet. Mit {{mcw|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 {{mcw|NBT}} ausgeben lassen. |
Eine '''Ofen-Rezeptmaschine''' wird für das angepasste {{mcw|Erhitzen}} von Gegenständen verwendet. Mit {{mcw|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 {{mcw|NBT}} ausgeben lassen. |
||
Zeile 243: | Zeile 242: | ||
;Einschalten |
;Einschalten |
||
− | *{{bb|2|1}} Auf dem Wiederhol-Befehlsblock befindet sich ein Hebel. Legt man ihn um, wird zuerst der Befehlsblock mit der Start-Funktion {{f|link= |
+ | *{{bb|2|1}} Auf dem Wiederhol-Befehlsblock befindet sich ein Hebel. Legt man ihn um, wird zuerst der Befehlsblock mit der Start-Funktion {{f|link=v2start}} aktiviert. |
;Wiederholen |
;Wiederholen |
||
− | *{{bb|2|2}} Gleichzeitig wird auch der Wiederhol-Befehlsblock mit der Zyklus-Funktion {{f|link= |
+ | *{{bb|2|2}} Gleichzeitig wird auch der Wiederhol-Befehlsblock mit der Zyklus-Funktion {{f|link=v2zyklus}} aktiv. |
;Ausschalten |
;Ausschalten |
||
− | *{{bb|2|3}} der Befehlsblock löst die Funktion {{f|link= |
+ | *{{bb|2|3}} der Befehlsblock löst die Funktion {{f|link=v2stopp}} aus. |
{{Ausklappmenü|offen=1|{{bb}}| |
{{Ausklappmenü|offen=1|{{bb}}| |
||
Zeile 431: | Zeile 430: | ||
{{fü|2|name=Rezepte}} |
{{fü|2|name=Rezepte}} |
||
− | Die Rezepte- |
+ | Die Rezepte-Funktion schaut 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. |
− | |||
{{f|name=ofen-rezeptmaschine:v2rezepte|1= |
{{f|name=ofen-rezeptmaschine:v2rezepte|1= |
Version vom 17. Mai 2021, 17:59 Uhr
Gruppe: Maschinen |
mit Mechaniken |
mit Redstone |
Hier: mit Befehlen |
Verfügbar in: Mechanik-Welt |
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
Hier werden vier Beispiele von Rezeptdateien gezeigt:
ofen-rezeptmaschine:v0antiker_schrott.json
|
{ "type": "smelting", "ingredient": { "item": "minecraft:diamond_block" }, "result": "minecraft:ancient_debris", "experience": 0.8, "cookingtime": 800 } |
ofen-rezeptmaschine:v0brot.json
|
{ "type": "smelting", "ingredient": { "item": "minecraft:hay_block" }, "result": "minecraft:bread", "experience": 0.1, "cookingtime": 200 } |
ofen-rezeptmaschine:v0eisenfalltür.json
|
{ "type": "smelting", "ingredient": { "item": "minecraft:iron_door" }, "result": "minecraft:iron_trapdoor", "experience": 0.5, "cookingtime": 100 } |
ofen-rezeptmaschine:v0leder.json
|
{ "type": "smelting", "ingredient": { "item": "minecraft:rotten_flesh" }, "result": "minecraft:leather", "experience": 0.01, "cookingtime": 250 } |
Variante 1
Folgende Voraussetzungen werden benötigt: | ||
---|---|---|
|
Folgende Materialien werden benötigt: | |
---|---|
|
YouTube-Videos zu diesem Thema: | |
---|---|
|
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
- Befehl 1.1 Auf dem Wiederhol-Befehlsblock befindet sich ein Hebel. Legt man ihn um, wird zuerst der Befehlsblock mit der Start-Funktion ofen-rezeptmaschine:v1start aktiviert.
- Wiederholen
- Befehl 1.2 Gleichzeitig wird auch der Wiederhol-Befehlsblock mit der Zyklus-Funktion ofen-rezeptmaschine:v1zyklus aktiv.
- Ausschalten
- Befehl 1.3 der Befehlsblock löst die Funktion ofen-rezeptmaschine:v1stopp aus.
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.
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.
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.
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.
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] |
ofen-rezeptmaschine:v1rezepte.json
|
{ "values": [ "minecraft:item_frame", "minecraft:furnace", "minecraft:fire_charge", "minecraft:lava_bucket", "minecraft:bucket", "minecraft:cobblestone", "minecraft:nether_gold_ore", "minecraft:acacia_log", "minecraft:stone", "minecraft:gold_ingot", "minecraft:charcoal" ] } |
Variante 2
Folgende Voraussetzungen werden benötigt: | ||
---|---|---|
|
Folgende Materialien werden benötigt: | |
---|---|
|
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
- Befehl 2.1 Auf dem Wiederhol-Befehlsblock befindet sich ein Hebel. Legt man ihn um, wird zuerst der Befehlsblock mit der Start-Funktion ofen-rezeptmaschine:v2start aktiviert.
- Wiederholen
- Befehl 2.2 Gleichzeitig wird auch der Wiederhol-Befehlsblock mit der Zyklus-Funktion ofen-rezeptmaschine:v2zyklus aktiv.
- Ausschalten
- Befehl 2.3 der Befehlsblock löst die Funktion ofen-rezeptmaschine:v2stopp aus.
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.
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.
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.
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.
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.
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.
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-Funktion schaut 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.
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.
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] |
ofen-rezeptmaschine:v2rezepte.json
|
{ "values": [ "#ofen-rezeptmaschine:v2menu", "minecraft:dropper", "minecraft:item_frame", "minecraft:furnace", "minecraft:coal", "minecraft:coal_block", "minecraft:lava_bucket", "minecraft:bucket", "minecraft:iron_door", "minecraft:basalt", "minecraft:diamond_block", "minecraft:ancient_debris", "minecraft:iron_trapdoor", "minecraft:blackstone" ] } |
Drop-Förderband => Mechanik, Redstone, Befehle; Drop-Aufzug => Mechanik, Redstone, Befehle; Kartenleser => Redstone; Zollstelle => Redstone; Silo => Mechanik, Redstone; Spendermaschine => Redstone; Filtermaschine => Redstone; Sortiermaschine => Redstone; Verteilmaschine => Redstone; Kisten-Beladestation => Redstone; Kisten-Entladestation => Redstone; Lagermaschine => Redstone; Tauschmaschine => Redstone, Befehle; Handelshalle => Redstone; Bankautomat => Befehle; Ofenmaschine => Mechanik, Redstone; Braumaschine => Redstone; Werkbank-Rezeptmaschine => Befehle; Ofen-Rezeptmaschine => Befehle; Braustand-Rezeptmaschine => Befehle; Zaubertischmaschine => Redstone; Rüstungsmaschine => Redstone; Feuerwerksmaschine => Redstone; Glücksspielmaschine => Redstone; Kampfmaschine => Redstone; Kampfschiff => Redstone; |
|