Revert "merge"

This commit is contained in:
Redeix 2025-06-17 00:56:25 -05:00 committed by GitHub
parent c211aed518
commit 2e5295614c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
66 changed files with 898 additions and 1087 deletions

View file

@ -3,13 +3,7 @@
## [Unreleased]
### New features
### Bug fixes
- Fixed double ingots not having a temperature (#1165) @Pyritie
- Removed a few recipes that had unobtainable create-related materials @Pyritie
- Fixed the color of placed zinc ingots and plated blocks to match the material @Pyritie
### Changes
- Changed pineapple yarn recipe from assembler to wiremill & coiling machine, like the other strings (#1162) @Pyritie
- Lowered durability of wooden tongs @Pyritie
- Streamlined the Metallurgy Age quest chapter a bit @Pyritie
## [0.9.11] - 13.06.2025
### New features

View file

@ -1401,7 +1401,7 @@
subtitle: "{quests.low_voltage.lv_greenhouse.subtitle}"
tasks: [{
id: "3EB01235ED295080"
item: "tfg:electric_greenhouse"
item: "gtceu:greenhouse"
type: "item"
}]
title: "{quests.low_voltage.lv_greenhouse.title}"

View file

@ -48,16 +48,6 @@
]
dependency_requirement: "one_completed"
description: ["{quests.ore_proc.crushed_ores.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:crushed_copper_ore"
}
id: "28419A1010EEE93A"
subtitle: "{quests.ore_proc.crushed_ores.subtitle}"
tasks: [
@ -233,7 +223,6 @@
description: ["{quests.ore_proc.mercury.desc}"]
id: "68AC3E2C9093FCFE"
optional: true
shape: "heart"
subtitle: "{quests.ore_proc.mercury.subtitle}"
tasks: [
{
@ -284,7 +273,6 @@
description: ["{quests.ore_proc.sodium_ores.desc}"]
id: "0502E478E27D4B73"
optional: true
shape: "heart"
subtitle: "{quests.ore_proc.sodium_ores.subtitle}"
tasks: [
{
@ -315,29 +303,26 @@
]
dependency_requirement: "one_completed"
description: ["{quests.ore_proc.purified_ores.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "create:crushed_raw_copper"
}
id: "544EA7FF98FDCFB7"
subtitle: "{quests.ore_proc.purified_ores.subtitle}"
tasks: [{
id: "4C6F60AC9C803D7B"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item_tag(forge:purified_ores))"
tasks: [
{
id: "4C6F60AC9C803D7B"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item_tag(forge:purified_ores))"
}
}
optional_task: true
type: "item"
}
type: "item"
}]
{
id: "3C194AEB554DA4CA"
type: "checkmark"
}
]
title: "{quests.ore_proc.purified_ores.title}"
x: 0.5d
y: -0.5d
@ -355,6 +340,12 @@
optional_task: true
type: "item"
}
{
id: "0373F4E380F2A0BC"
item: "gtceu:indium_concentrate_bucket"
optional_task: true
type: "item"
}
{
id: "246799A19B9A47B6"
item: {
@ -377,15 +368,8 @@
type: "item"
}
{
id: "475C90F0EA16C2F9"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "only_one(item(gtceu:indium_concentrate_bucket)nbt(fuzzy:{fluid:{Amount:1000,FluidName:\"gtceu:indium_concentrate\"}}))"
}
}
type: "item"
id: "52FCA464BD827E37"
type: "checkmark"
}
]
title: "{quests.ore_proc.indium.title}"
@ -643,30 +627,25 @@
]
dependency_requirement: "one_completed"
description: ["{quests.ore_proc.dust_processed.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:copper_dust"
}
id: "22C1D541452D4AD4"
size: 1.5d
subtitle: "{quests.ore_proc.dust_processed.subtitle}"
tasks: [{
id: "3EA3BABECE52085B"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item_tag(forge:dusts))"
tasks: [
{
id: "3EA3BABECE52085B"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item_tag(forge:dusts))"
}
}
type: "item"
}
type: "item"
}]
{
id: "1A1B2762EFD6C6B0"
type: "checkmark"
}
]
title: "{quests.ore_proc.dust_processed.title}"
x: 0.5d
y: 3.5d

View file

@ -31,21 +31,10 @@
y: -34.0d
}
{
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "tfc:metal/lamp/blue_steel"
}
id: "227B6C88FFE99435"
linked_quest: "4EBABACAB444244D"
shape: "heart"
x: 16.5d
y: -24.5d
y: -23.0d
}
{
id: "19CF6D922179DFF9"
@ -69,7 +58,7 @@
}]
title: "{quests.metal_age.this_is_a_bucket.title}"
x: 13.5d
y: -26.0d
y: -24.5d
}
{
dependencies: ["56CA2EB7812529C5"]
@ -93,7 +82,7 @@
]
title: "{quests.metal_age.redblu_buckets.title}"
x: 16.5d
y: -26.0d
y: -24.5d
}
{
dependencies: ["7E0239E9CC73F09F"]
@ -109,11 +98,11 @@
weak_nbt_match: true
}]
title: "{quests.metal_age.black_steel_anvil.title}"
x: 26.5d
y: -26.0d
x: 27.5d
y: -24.5d
}
{
dependencies: ["5996A3A0D475B8A6"]
dependencies: ["4310B619B57276ED"]
description: ["{quests.metal_age.steel_anvil.desc}"]
id: "04DE7C58F20B535A"
shape: "octagon"
@ -126,11 +115,11 @@
weak_nbt_match: true
}]
title: "{quests.metal_age.steel_anvil.title}"
x: 26.5d
x: 27.5d
y: -32.0d
}
{
dependencies: ["0A92F5C4BB6AF972"]
dependencies: ["358571B6E692F198"]
description: ["{quests.metal_age.wrought_iron_anvil.desc}"]
id: "174DA15847665CF8"
shape: "octagon"
@ -274,10 +263,29 @@
y: -32.0d
}
{
dependencies: [
"0A92F5C4BB6AF972"
"021D3DEEB15A3D17"
]
dependency_requirement: "one_completed"
description: ["{quests.metal_age.weld_wrought_iron_ingots.desc}"]
id: "358571B6E692F198"
subtitle: "{quests.metal_age.weld_wrought_iron_ingots.subtitle}"
tasks: [{
id: "05AD17F66DFE3C56"
item: "gtceu:wrought_iron_double_ingot"
type: "item"
weak_nbt_match: true
}]
title: "{quests.metal_age.weld_wrought_iron_ingots.title}"
x: 7.0d
y: -32.0d
}
{
dependencies: ["48A8E3210B2BAE1C"]
description: ["{quests.metal_age.bellows.desc}"]
hide_dependency_lines: true
id: "021D3DEEB15A3D17"
shape: "rsquare"
subtitle: "{quests.metal_age.bellows.subtitle}"
tasks: [{
id: "588EB07E980386F9"
@ -289,12 +297,31 @@
y: -34.0d
}
{
dependencies: ["5A936E9BCF30AA3D"]
dependencies: ["5996A3A0D475B8A6"]
dependency_requirement: "one_completed"
description: ["{quests.metal_age.weld_steel_ingots.desc}"]
id: "4310B619B57276ED"
subtitle: "{quests.metal_age.weld_steel_ingots.subtitle}"
tasks: [{
id: "0EDB1D851E198274"
item: "gtceu:steel_double_ingot"
type: "item"
weak_nbt_match: true
}]
title: "{quests.metal_age.weld_steel_ingots.title}"
x: 25.5d
y: -32.0d
}
{
dependencies: [
"061116CF508D54F6"
"68B7D07D57A103BE"
]
dependency_requirement: "one_completed"
description: ["{quests.metal_age.kaolin_clay.desc}"]
id: "72F1C122FC26229C"
shape: "octagon"
size: 2.0d
size: 3.0d
subtitle: "{quests.metal_age.kaolin_clay.subtitle}"
tasks: [{
id: "673D38EB62FFD65F"
@ -312,8 +339,8 @@
weak_nbt_match: true
}]
title: "{quests.metal_age.kaolin_clay.title}"
x: 14.0d
y: -33.0d
x: 13.5d
y: -36.0d
}
{
dependencies: ["5A936E9BCF30AA3D"]
@ -322,24 +349,25 @@
icon: "tfc:ore/graphite/gabbro"
id: "53E1383F12EC6765"
optional: true
shape: "diamond"
subtitle: "{quests.metal_age.overworld_graphite.subtitle}"
tasks: [{
id: "25A552657AFA7BC2"
type: "checkmark"
}]
title: "{quests.metal_age.overworld_graphite.title}"
x: 11.0d
x: 13.0d
y: -30.5d
}
{
dependencies: ["5A936E9BCF30AA3D"]
dependencies: [
"53E1383F12EC6765"
"2DB82986FE176CD7"
]
dependency_requirement: "one_completed"
description: ["{quests.metal_age.graphite.desc}"]
icon: "tfc:powder/graphite"
id: "31CE13462759950C"
shape: "octagon"
size: 2.0d
size: 3.0d
subtitle: "{quests.metal_age.graphite.subtitle}"
tasks: [{
id: "6B0C9D862BFD27BC"
@ -354,13 +382,14 @@
type: "item"
}]
title: "{quests.metal_age.graphite.title}"
x: 14.0d
y: -31.0d
x: 13.5d
y: -28.5d
}
{
dependencies: [
"72F1C122FC26229C"
"31CE13462759950C"
"5A936E9BCF30AA3D"
]
description: ["{quests.metal_age.fire_clay.desc}"]
id: "2C76EE197C14B0DC"
@ -374,7 +403,7 @@
weak_nbt_match: true
}]
title: "{quests.metal_age.fire_clay.title}"
x: 17.0d
x: 17.5d
y: -32.0d
}
{
@ -437,7 +466,6 @@
description: ["{quests.metal_age.beneath_kaolin.desc}"]
id: "061116CF508D54F6"
optional: true
shape: "diamond"
subtitle: "{quests.metal_age.beneath_kaolin.subtitle}"
tasks: [
{
@ -464,7 +492,7 @@
}
]
title: "{quests.metal_age.beneath_kaolin.title}"
x: 12.0d
x: 14.0d
y: -33.5d
}
{
@ -568,7 +596,7 @@
}
]
title: "{quests.metal_age.fire_clay_products.title}"
x: 17.0d
x: 17.5d
y: -34.0d
}
{
@ -638,14 +666,12 @@
}]
title: "{quests.metal_age.red_blu.title}"
x: 24.0d
y: -26.0d
y: -24.5d
}
{
dependencies: ["56CA2EB7812529C5"]
description: ["{quests.metal_age.red_steel_flask.desc}"]
id: "30D49878F3CEB08A"
optional: true
shape: "heart"
subtitle: "{quests.metal_age.red_steel_flask.subtitle}"
tasks: [{
id: "7394672B4D19B0B2"
@ -654,7 +680,7 @@
}]
title: "{quests.metal_age.red_steel_flask.title}"
x: 16.5d
y: -27.5d
y: -26.0d
}
{
dependencies: [
@ -680,7 +706,7 @@
}]
title: "{quests.metal_age.redblu_anvil.title}"
x: 18.5d
y: -26.0d
y: -24.5d
}
{
dependencies: ["3C173357029AB649"]
@ -724,15 +750,13 @@
type: "checkmark"
}]
title: "{quests.metal_age.fire_clay_ingredients.title}"
x: 11.5d
x: 13.5d
y: -32.0d
}
{
dependencies: ["5A936E9BCF30AA3D"]
description: ["{quests.metal_age.beneath_graphite.desc}"]
id: "2DB82986FE176CD7"
optional: true
shape: "diamond"
subtitle: "{quests.metal_age.beneath_graphite.subtitle}"
tasks: [
{
@ -752,7 +776,7 @@
}
]
title: "{quests.metal_age.beneath_graphite.title}"
x: 12.0d
x: 14.0d
y: -30.5d
}
{
@ -760,8 +784,6 @@
description: ["{quests.metal_age.overworld_kaolin.desc}"]
icon: "tfc:plant/tree_fern"
id: "68B7D07D57A103BE"
optional: true
shape: "diamond"
subtitle: "{quests.metal_age.overworld_kaolin.subtitle}"
tasks: [{
id: "14DF5B1544AB9BA9"
@ -769,7 +791,7 @@
type: "checkmark"
}]
title: "{quests.metal_age.overworld_kaolin.title}"
x: 11.0d
x: 13.0d
y: -33.5d
}
{
@ -791,8 +813,8 @@
weak_nbt_match: true
}]
title: "{quests.metal_age.blast_furnace_fuel.title}"
x: 20.5d
y: -32.0d
x: 23.5d
y: -30.0d
}
{
dependencies: ["04DE7C58F20B535A"]
@ -806,8 +828,8 @@
type: "checkmark"
}]
title: "{quests.metal_age.steel_goodies.title}"
x: 26.5d
y: -34.0d
x: 29.5d
y: -30.0d
}
{
dependencies: ["52DAF93E2F3D688A"]
@ -823,8 +845,8 @@
type: "checkmark"
}]
title: "{quests.metal_age.black_steel_goodies.title}"
x: 26.5d
y: -23.5d
x: 25.5d
y: -22.5d
}
{
dependencies: [
@ -832,16 +854,6 @@
"04DE7C58F20B535A"
]
description: ["{quests.metal_age.highcarb_black_steel.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "tfc:metal/ingot/black_steel"
}
id: "7E0239E9CC73F09F"
subtitle: "{quests.metal_age.highcarb_black_steel.subtitle}"
tasks: [
@ -875,22 +887,12 @@
}
]
title: "{quests.metal_age.highcarb_black_steel.title}"
x: 26.5d
x: 27.5d
y: -30.0d
}
{
dependencies: ["5996A3A0D475B8A6"]
description: ["{quests.metal_age.weak_steel.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "tfc:metal/ingot/weak_steel"
}
id: "1CE0FF455668C145"
subtitle: "{quests.metal_age.weak_steel.subtitle}"
tasks: [
@ -898,60 +900,53 @@
id: "543388DB123E7328"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item(gtceu:nickel_ingot)item(gtceu:nickel_dust))"
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:nickel_ingot"
}
title: "{quests.metal_age.weak_steel.task1}"
type: "item"
weak_nbt_match: true
}
{
count: 2L
id: "7F829BA244BC77D5"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item(gtceu:steel_ingot)item(gtceu:steel_dust))"
Count: 2
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:steel_ingot"
}
title: "{quests.metal_age.weak_steel.task2}"
type: "item"
weak_nbt_match: true
}
{
id: "3271DD5653C52CAB"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item(gtceu:black_bronze_ingot)item(gtceu:black_bronze_dust))"
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:black_bronze_ingot"
}
title: "{quests.metal_age.weak_steel.task3}"
type: "item"
weak_nbt_match: true
}
]
title: "{quests.metal_age.weak_steel.title}"
x: 23.5d
x: 25.5d
y: -30.0d
}
{
dependencies: ["27FF92982A24BC4E"]
description: ["{quests.metal_age.highcarb_red_steel.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "tfc:metal/ingot/red_steel"
}
id: "5088768AAA28FCBA"
subtitle: "{quests.metal_age.highcarb_red_steel.subtitle}"
tasks: [
@ -986,21 +981,11 @@
]
title: "{quests.metal_age.highcarb_red_steel.title}"
x: 20.5d
y: -27.0d
y: -25.5d
}
{
dependencies: ["5792DDAA82895E67"]
description: ["{quests.metal_age.weak_red_steel.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "tfc:metal/ingot/weak_red_steel"
}
id: "27FF92982A24BC4E"
subtitle: "{quests.metal_age.weak_red_steel.subtitle}"
tasks: [
@ -1008,70 +993,68 @@
id: "2A22B3EA8DC577CE"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item(create:brass_ingot)item(gtceu:brass_dust))"
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "create:brass_ingot"
}
title: "{quests.metal_age.weak_red_steel.brass}"
type: "item"
}
{
count: 2L
id: "2F0648CE3D1723DF"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item(gtceu:steel_ingot)item(gtceu:steel_dust))"
Count: 2
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:steel_ingot"
}
title: "{quests.metal_age.weak_red_steel.steel}"
type: "item"
}
{
id: "47F346E1C0F41655"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item(gtceu:rose_gold_ingot)item(gtceu:rose_gold_dust))"
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:rose_gold_ingot"
}
title: "{quests.metal_age.weak_red_steel.rose_gold}"
type: "item"
}
{
count: 4L
id: "21434FAAA69D5BE0"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item(tfc:metal/ingot/black_steel)item(gtceu:black_steel_dust))"
Count: 4
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "tfc:metal/ingot/black_steel"
}
title: "{quests.metal_age.weak_red_steel.black_steel}"
type: "item"
}
]
title: "{quests.metal_age.weak_red_steel.title}"
x: 22.0d
y: -27.0d
y: -25.5d
}
{
dependencies: ["5792DDAA82895E67"]
description: ["{quests.metal_age.weak_blu_steel.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "tfc:metal/ingot/weak_blue_steel"
}
id: "64F8A358EC3FEF45"
subtitle: "{quests.metal_age.weak_blu_steel.subtitle}"
tasks: [
@ -1079,70 +1062,68 @@
count: 2L
id: "5331A323780B4B11"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item(gtceu:steel_ingot)item(gtceu:steel_dust))"
Count: 2
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:steel_ingot"
}
title: "{quests.metal_age.weak_blue_steel.steel}"
type: "item"
}
{
count: 4L
id: "2809FD951B82C54F"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item(tfc:metal/ingot/black_steel)item(gtceu:black_steel_dust))"
Count: 4
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "tfc:metal/ingot/black_steel"
}
title: "{quests.metal_age.weak_blue_steel.black_steel}"
type: "item"
}
{
id: "401EC1A9FBC759B8"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item(gtceu:bismuth_bronze_ingot)item(gtceu:bismuth_bronze_dust))"
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:bismuth_bronze_ingot"
}
title: "{quests.metal_age.weak_blue_steel.bismuth_bronze}"
type: "item"
}
{
id: "7350ECE723ABE8F4"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "or(item(gtceu:sterling_silver_ingot)item(gtceu:sterling_silver_dust))"
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "gtceu:sterling_silver_ingot"
}
title: "{quests.metal_age.weak_blue_steel.sterling_silver}"
type: "item"
}
]
title: "{quests.metal_age.weak_blu_steel.title}"
x: 22.0d
y: -25.0d
y: -23.5d
}
{
dependencies: ["64F8A358EC3FEF45"]
description: ["{quests.metal_age.highcarb_blu_steel.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "tfc:metal/ingot/blue_steel"
}
id: "6D04BAC5B215F90F"
subtitle: "{quests.metal_age.highcarb_blu_steel.subtitle}"
tasks: [
@ -1177,7 +1158,7 @@
]
title: "{quests.metal_age.highcarb_blu_steel.title}"
x: 20.5d
y: -25.0d
y: -23.5d
}
{
dependencies: ["3C173357029AB649"]

View file

@ -684,7 +684,6 @@
tasks: [{
id: "5A6EF9EBF232601C"
item: "gtceu:copper_double_ingot"
match_nbt: false
type: "item"
weak_nbt_match: true
}]

View file

@ -1602,26 +1602,12 @@
]
dependency_requirement: "one_completed"
description: ["{quests.tfg_tips.passive_preservation.desc}"]
disable_toast: true
icon: {
Count: 1
ForgeCaps: {
Parent: {
heat: 0.0f
ticks: 0L
}
}
id: "tfc:ceramic/vessel"
tag: { }
}
id: "13F7066858E923FF"
subtitle: "{quests.tfg_tips.passive_preservation.subtitle}"
tasks: [{
dimension: "minecraft:overworld"
icon: "gtceu:overworld_marker"
id: "5BAF5F5343C3E42A"
title: "{quests.stone_age.temperature.task}"
type: "dimension"
id: "54AAB9886964A160"
title: "{quests.tasktype.checkmark}"
type: "checkmark"
}]
title: "{quests.tfg_tips.passive_preservation.title}"
x: 6.5d
@ -2250,7 +2236,10 @@
y: 9.5d
}
{
dependencies: ["2D959136A5FC5F46"]
dependencies: [
"2D959136A5FC5F46"
"56CA2EB7812529C5"
]
description: ["{quests.tfg_tips.lamps.desc}"]
id: "037CDA933FBE2CBE"
subtitle: "{quests.tfg_tips.lamps.subtitle}"
@ -2288,8 +2277,8 @@
}
]
title: "{quests.tfg_tips.lamps.title}"
x: -5.5d
y: 11.5d
x: -5.0d
y: 11.0d
}
{
dependencies: [
@ -2297,16 +2286,6 @@
"56CA2EB7812529C5"
]
description: ["{quests.tfg_tips.lava_lamp.desc}"]
icon: {
Count: 1
ForgeCaps: {
"tfc:item_heat": {
heat: 0.0f
ticks: 0L
}
}
id: "tfc:metal/lamp/blue_steel"
}
id: "4EBABACAB444244D"
optional: true
shape: "heart"
@ -2333,8 +2312,8 @@
}
]
title: "{quests.tfg_tips.lava_lamp.title}"
x: -5.5d
y: 13.0d
x: -5.0d
y: 12.5d
}
{
dependencies: ["037CDA933FBE2CBE"]
@ -2354,8 +2333,8 @@
type: "item"
}]
title: "{quests.tfg_tips.creosote.title}"
x: -6.5d
y: 12.5d
x: -6.0d
y: 12.0d
}
{
dependencies: ["037CDA933FBE2CBE"]
@ -2375,8 +2354,8 @@
type: "item"
}]
title: "{quests.tfg_tips.olive_oil.title}"
x: -4.5d
y: 12.5d
x: -4.0d
y: 12.0d
}
{
dependencies: ["2D959136A5FC5F46"]
@ -3483,8 +3462,8 @@
type: "item"
}]
title: "{quests.tfg_tips.tallow.title}"
x: -7.0d
y: 11.5d
x: -6.5d
y: 11.0d
}
{
dependencies: ["150B7C5CD152E1BA"]
@ -5397,26 +5376,6 @@
x: 7.5d
y: -18.0d
}
{
dependencies: ["037CDA933FBE2CBE"]
description: ["{quests.tfg_tips.glowstone_lamp.desc}"]
id: "61F58B402F1AE40B"
subtitle: "{quests.tfg_tips.glowstone_lamp.subtitle}"
tasks: [{
id: "71D52011F8BE66F0"
item: {
Count: 1
id: "ftbfiltersystem:smart_filter"
tag: {
"ftbfiltersystem:filter": "only_one(item(gtceu:glowstone_bucket)nbt(fuzzy:{fluid:{Amount:1000,FluidName:\"gtceu:glowstone\"}}))"
}
}
type: "item"
}]
title: "{quests.tfg_tips.glowstone_lamp.title}"
x: -6.5d
y: 10.5d
}
]
subtitle: ["{quests.tfg_tips.subtitle}"]
title: "{quests.tfg_tips}"

View file

@ -31,7 +31,7 @@
itemDamageTimeInterval = 60
#Durability for wooden tongs.
#Range: > 0
woodenTongsDurability = 100
woodenTongsDurability = 250
#Durability for potholders.
#Range: > 0
potholderDurability = 600

View file

@ -15,8 +15,6 @@
"gtceu.end_dome": "Enderarium",
"gtceu.greenhouse": "Electric Greenhouse",
"gtceu.steam_bloomery": "Steam Bloomery",
"gtceu.food_oven": "Food Oven",
"gtceu.food_processor": "Food Processor",
"item.gtceu.tiny_wood_dust": "Tiny Pile of Softwood Pulp",
"item.gtceu.small_wood_dust": "Small Pile of Softwood Pulp",
"item.gtceu.wood_dust": "Softwood Pulp",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 B

View file

@ -1,5 +0,0 @@
{
"animation":{
"frametime":1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 380 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 919 B

View file

@ -1,5 +0,0 @@
{
"animation":{
"frametime": 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 659 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 683 B

View file

@ -1,5 +0,0 @@
{
"animation":{
"frametime": 2
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 348 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 542 B

View file

@ -1,5 +0,0 @@
{
"animation":{
"frametime": 2
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 504 B

View file

@ -1,5 +0,0 @@
{
"animation":{
"frametime": 1
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 313 B

View file

@ -167,19 +167,6 @@
"block.tfg.mv_aqueous_accumulator": "§bAdvanced Aqueous Accumulator§r",
"block.tfg.hv_aqueous_accumulator": "§6Advanced Aqueous Accumulator II§r",
"block.tfg.ev_aqueous_accumulator": "§5Advanced Aqueous Accumulator III§r",
"block.tfg.electric_greenhouse": "Electric Greenhouse",
"block.tfg.lv_food_processor": "Basic Food Processor",
"block.tfg.mv_food_processor": "§bAdvanced Food Processor§r",
"block.tfg.hv_food_processor": "§6Advanced Food Processor II§r",
"block.tfg.ev_food_processor": "§5Advanced Food Processor III§r",
"block.tfg.lv_food_oven": "Basic Electric Oven",
"block.tfg.mv_food_oven": "§bAdvanced Electric Oven§r",
"block.tfg.hv_food_oven": "§6Advanced Electric Oven II§r",
"block.tfg.ev_food_oven": "§5Advanced Electric Oven III§r",
"block.tfg.lv_food_refrigerator": "Basic Refrigerator",
"block.tfg.mv_food_refrigerator": "§bAdvanced Refrigerator",
"block.tfg.hv_food_refrigerator": "§6Advanced Refrigerator II§r",
"block.tfg.ev_food_refrigerator": "§5Advanced Refrigerator III§r",
"item.tfg.antipoison_pill": "Antipoison Pill",
"item.tfg.haste_pill": "Haste Pill",
"item.tfg.night_vision_pill": "Night Vision Pill",
@ -300,7 +287,6 @@
"material.gtceu.thermochemically_treated_hardwood": "Thermochemically Treated Hardwood",
"material.gtceu.hardwood": "Hardwood",
"tfg.disabled_portal": "Portal magic seems to be blocked by an unknown force, try reaching another dimension by going down or up",
"tfg.tooltip.food_trait.refrigerating": "§9Refrigerating",
"item.treetap.tap": "Deprecated Item, Craft to Upgrade",
"item.gtceu.zinc_ingot": "Deprecated Item, Craft to Upgrade",
"item.gtceu.brass_ingot": "Deprecated Item, Craft to Upgrade",
@ -1229,6 +1215,9 @@
"quests.metal_age.mining.title": "Mining in the Metallurgy Age",
"quests.metal_age.mining.subtitle": "ROCK AND STONE!",
"quests.metal_age.mining.desc": "Extracting valuable resources from the ground is a major part of this modpack, and the Metallurgy Age is no exception! You will consume a &llot&r of metal to progress, and one way to mine a lot of it at once is with a Mining Hammer! This is a tool that can mine blocks in a 3x3x1 area at the cost of a slower mining speed. You can also hold sneak to break single blocks at a time.",
"quests.metal_age.weld_wrought_iron_ingots.title": "Welding Wrought Iron",
"quests.metal_age.weld_wrought_iron_ingots.subtitle": "CLANG CLANG CLANG",
"quests.metal_age.weld_wrought_iron_ingots.desc": "Obtain at least 14 Ingots of Wrought Iron, then weld them together in a Bronze Anvil. Careful you don't melt your Wrought Iron, otherwise it will turn back into Cast Iron and you'll have to run it through the Bloomery again!",
"quests.metal_age.bellows.title": "Bellows",
"quests.metal_age.bellows.subtitle": "Higher temperatures can be reached, at a small price.",
"quests.metal_age.bellows.desc": "The Bellows is a device that can force extra air into a fire or forge in front of it, allowing the heat produced by the fuel inside to reach higher temperatures than usual, at the cost of fuel duration.\n\nThese higher temperatures are required to fire pottery with charcoal or melt certain metals.\n\nCoal and Coke can also reach higher temperatures without it.",
@ -1287,6 +1276,9 @@
"quests.metal_age.blast_furnace.title": "Blast Furnace",
"quests.metal_age.blast_furnace.subtitle": "Then I started Blastin'",
"quests.metal_age.blast_furnace.desc": "The Blast Furnace is a multiblock structure that allows you to create Pig Iron. Placing a combination of Iron, Flux and fuel (see the adjacent quest) inside the Blast Furnace produces Pig Iron, which can be worked into Steel.\n\nIn order for the Blast Furnace to reach its required high temperatures, it will need its own Bellows, used to force air through a Tuyere which you place inside the blast furnace.\n\nThe Field Guide contains an entry on how the Blast Furnace works and how to build one.",
"quests.metal_age.weld_steel_ingots.title": "Welding Steel",
"quests.metal_age.weld_steel_ingots.subtitle": "Again?",
"quests.metal_age.weld_steel_ingots.desc": "You know the drill by this point. Create 14 Steel Ingots, then weld them to get 7 Double Steel Ingots. We'll stop reminding you about this now.\n\nDid you know that the Helve Hammer can also process your pig iron into steel?",
"quests.metal_age.steel_anvil.title": "T4 Anvil: Steel",
"quests.metal_age.steel_anvil.subtitle": "A huge leap from wrought iron",
"quests.metal_age.steel_anvil.desc": "With the Steel Anvil, you'll be able to work Steel Ingots into different forms.\n\nSteel tools and equipment have a significant boost over their bronze and wrought iron counterparts, so they're worth making if your existing ones are about to break. You'll be needing to create a lot of alloys soon, so some new mining equipment would be a wise investment.",
@ -1296,9 +1288,6 @@
"quests.metal_age.weak_steel.title": "Weak Steel Ingredients",
"quests.metal_age.weak_steel.subtitle": "Hope you like math",
"quests.metal_age.weak_steel.desc": "Weak Steel is one part of the necessary metals to create Black Steel. You can alloy it with 2 parts Steel, 1 part Nickel and 1 part Black Bronze.\n\nYou can check the liquid weak steel's recipe for more precise alloying percentage rates.",
"quests.metal_age.weak_steel.task1": "1 Part Nickel",
"quests.metal_age.weak_steel.task2": "2 Parts Steel",
"quests.metal_age.weak_steel.task3": "1 Part Black Bronze",
"quests.metal_age.highcarb_black_steel.title": "Black Steel Ingredients",
"quests.metal_age.highcarb_black_steel.subtitle": "Conservation of matter does not apply",
"quests.metal_age.highcarb_black_steel.desc": "The final two anvils are made out of complex alloys that will require a lot of metal to be created. Weak Steel and Pig Iron can be welded to create High Carbon Black Steel, which can then be worked on an anvil into Black Steel.",
@ -1314,23 +1303,15 @@
"quests.metal_age.weak_red_steel.title": "Weak Red Steel Ingredients",
"quests.metal_age.weak_red_steel.subtitle": "This is getting a little ridiculous",
"quests.metal_age.weak_red_steel.desc": "Like before, Weak Red Steel is the first step of Red Steel's creation. Its alloy is made from 4 parts Black Steel, 2 parts Steel, 1 part Brass, and 1 part Rose Gold.\n\nYou can check the liquid Weak Red Steel's recipe for more precise alloying percentage rates.",
"quests.metal_age.weak_red_steel.steel": "2 Parts Steel",
"quests.metal_age.weak_red_steel.black_steel": "4 Parts Black Steel",
"quests.metal_age.weak_red_steel.brass": "1 Part Brass",
"quests.metal_age.weak_red_steel.rose_gold": "1 Part Rose Gold",
"quests.metal_age.weak_blu_steel.title": "Weak Blue Steel Ingredients",
"quests.metal_age.weak_blu_steel.subtitle": "This is getting out of hand.",
"quests.metal_age.weak_blu_steel.desc": "Like before, Weak Blue Steel is the first step of Blue Steel's creation. Its alloy is made from 4 parts Black Steel, 2 parts Steel, 1 part Bismuth Bronze, and 1 part Sterling Silver.\n\nYou can check the liquid Weak Blue Steel's recipe for more precise alloying percentage rates.",
"quests.metal_age.weak_blue_steel.steel": "2 Parts Steel",
"quests.metal_age.weak_blue_steel.black_steel": "4 Parts Black Steel",
"quests.metal_age.weak_blue_steel.sterling_silver": "1 Part Sterling Silver",
"quests.metal_age.weak_blue_steel.bismuth_bronze": "1 Part Bismuth Bronze",
"quests.metal_age.weak_blu_steel.desc": "Like before, Weak Blue Steel is the first step of Blue Steel's creation. Its alloy is made from 4 parts Black Steel, 2 parts Steel, 1 part Bismuth Bronze, and 1 part Sterling Silver.\n\bYou can check the liquid Weak Blue Steel's recipe for more precise alloying percentage rates.",
"quests.metal_age.highcarb_red_steel.title": "Red Steel Ingredients",
"quests.metal_age.highcarb_red_steel.subtitle": "Could deleting matter like this power a nuclear bomb?",
"quests.metal_age.highcarb_red_steel.desc": "Red Steel first starts as High Carbon Red Steel, which is made by welding Weak Red Steel and Black Steel. It needs to be worked on the Anvil to turn it into Red Steel",
"quests.metal_age.highcarb_blu_steel.title": "Blue Steel Ingredients",
"quests.metal_age.highcarb_blu_steel.subtitle": "Lavoisier is rolling in his grave",
"quests.metal_age.highcarb_blu_steel.desc": "Blue Steel first starts as High Carbon Blue Steel, which is made by welding Weak Blue Steel and Black Steel. It needs to be worked on the Anvil to turn it into Blue Steel",
"quests.metal_age.highcarb_blu_steel.desc": "Blue Steel first starts as High Carbon Blue Steel, whcih is made by welding Weak Blue Steel and Black Steel. It needs to be worked on the Anvil to turn it into Blue Steel",
"quests.metal_age.redblu_anvil.title": "T6 Anvil: Red or Blue Steel",
"quests.metal_age.redblu_anvil.subtitle": "It's over",
"quests.metal_age.redblu_anvil.desc": "The final tier of Anvil! With the Tier 6 Anvil you'll be able to work both Red and Blue Steel Ingots into different items.\n\nThis marks the end of TerraFirmaCraft's progression. Now it's time to finish the Industrial Age and create your very first Low Voltage circuitry.",
@ -1557,7 +1538,7 @@
"quests.steam_age.centrifuge.desc": "Ore processing will always be an important part of this modpack, and this machine is another (optional) part of that. By following a different route of ore processing steps (check the Ore Processing Diagram tab in JEI), you can use this centrifuge to get some bonus byproducts out of your ores! The next upgrade to your ores won't be until the LV Thermal Centrifuge, so whether or not this is a worthwhile investment is up to you.",
"quests.steam_age.steam_engine.title": "Steam Engine",
"quests.steam_age.steam_engine.subtitle": "Time for some real steam power",
"quests.steam_age.steam_engine.desc": "Water wheels and windmills not cutting it any more? It wouldn't be a steam age without a proper steam engine! Each steam engine can output a whole 256 SU, giving you much more power to play with.\n\nBlaze Burners can be crafted without leaving your house, and you can use a Mechanical Arm to automatically feed them solid fuel, or liquid fuel in a bucket (such as creosote). Coal Gems, Anthracite, and Coke can also be used to superheat them.",
"quests.steam_age.steam_engine.desc": "Water wheels and windmills not cutting it any more? It wouldn't be a steam age without a proper steam engine! Each steam engine can output a whole 512 SU, giving you much more power to play with.\n\nBlaze Burners can be crafted without leaving your house, and you can use a Mechanical Arm to automatically feed them solid fuel, or liquid fuel in a bucket. Coal Gems and Coke can also be used to superheat them.",
"quests.steam_age.deployers.title": "Deployers",
"quests.steam_age.deployers.subtitle": "Primitive Assembly Line",
"quests.steam_age.deployers.desc": "While you could use a single deployer for the rest your time in this chapter, we &3really&r don't recommend it. Setting up a line of deployers along a belt will save heaps of time and sanity, and it's not like you'll be wasting materials either, because you can always reuse them to upgrade your tree farm later.\n\nThese will also make electron tubes significantly cheaper!",

View file

@ -27,9 +27,10 @@ const registerTooltips = (event) =>
event.addAdvanced(['create:blaze_burner'], (item, advanced, text) => {
text.add(1, text.of('§cSuperheat§r with Coke, Anthracite, or Flawless and Exquisite coal gems.'))
})
event.addAdvanced(['tfg:electric_greenhouse'], (item, advanced, text) => {
event.addAdvanced(['gtceu:greenhouse'], (item, advanced, text) => {
text.add(1, text.of('This machine has a §2Perfect Overclock§r!')),
text.add(2, text.of(`The interior is customizable! Check the multiblock preview in JEI.`))
text.add(2, text.of('Currently, due to a bug, sometimes outputs rotten food.'))
text.add(3, text.of(`The interior is customizable! Check the multiblock preview in JEI.`))
})
event.addAdvanced(['gtceu:nether_dome'], (item, advanced, text) => {
text.add(1, text.of('Artificial enviroment to simulate the Nether.')),

View file

@ -42,7 +42,6 @@ const registerCreateRecipes = (event) => {
})
event.remove({ type: 'minecraft:stonecutting', input: 'create:andesite_alloy' })
event.remove({ type: 'minecraft:stonecutting', input: 'create:rose_quartz' })
// Train Station
event.shapeless('2x create:track_station', [

View file

@ -95,8 +95,16 @@ const registerFirmaLifeRecipes = (event) => {
.duration(50)
.EUt(2)
// Pineapple Fiber
event.recipes.gtceu.assembler(`tfg:firmalife/pineapple_fiber`)
.itemInputs('firmalife:food/pineapple')
.circuit(1)
.itemOutputs('firmalife:pineapple_fiber')
.duration(50)
.EUt(7)
// Pineapple Yarn
event.recipes.gtceu.wiremill(`tfg:firmalife/pineapple_yarn`)
event.recipes.gtceu.assembler(`tfg:firmalife/pineapple_yarn`)
.itemInputs('firmalife:pineapple_fiber')
.circuit(1)
.itemOutputs('8x firmalife:pineapple_yarn')
@ -446,6 +454,276 @@ const registerFirmaLifeRecipes = (event) => {
//#endregion
//#region Рецепты муки
global.FIRMALIFE_QUERN_FLOUR_RECIPE_COMPONENTS.forEach(element => {
event.recipes.gtceu.macerator(`tfg:${element.name}`)
.itemInputs(element.input)
.itemOutputs(element.output)
.duration(200)
.EUt(2)
})
//#endregion
//#region Рецепты теста
global.FIRMALIFE_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS.forEach(element => {
event.recipes.gtceu.mixer(element.name)
.itemInputs(element.input, '#tfc:sweetener')
.inputFluids(Fluid.of('firmalife:yeast_starter', 100))
.itemOutputs(element.output)
.duration(300)
.EUt(16)
.circuit(2)
})
//#endregion
//#region Рецепты плоского хлеба
global.FIRMALIFE_FURNACE_FLATBREAD_RECIPE_COMPONENTS.forEach(element => {
event.smelting(element.output, element.input)
.id(`tfg:smelting/${element.name}`)
})
//#endregion
//#region Смешивание в миске
// Тесто для пиццы
event.recipes.gtceu.mixer('firmalife:food/pizza_dough_olive_oil')
.itemInputs('firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt')
.inputFluids(Fluid.of('tfc:olive_oil', 1000))
.itemOutputs('4x firmalife:food/pizza_dough')
.duration(300)
.EUt(16)
event.recipes.gtceu.mixer('firmalife:food/pizza_dough_soybean_oil')
.itemInputs('firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt')
.inputFluids(Fluid.of('firmalife:soybean_oil', 1000))
.itemOutputs('4x firmalife:food/pizza_dough')
.duration(300)
.EUt(16)
// Vanilla Ice Cream
event.recipes.gtceu.mixer('firmalife:food/vanilla_ice_cream')
.itemInputs('firmalife:ice_shavings', '#tfc:sweetener', 'firmalife:spice/vanilla')
.inputFluids(Fluid.of('firmalife:cream', 1000))
.itemOutputs('2x firmalife:food/vanilla_ice_cream')
.duration(300)
.EUt(16)
// Pumpkin Pie Dough
event.recipes.gtceu.mixer('firmalife:food/pumpkin_pie_dough')
.itemInputs('#tfc:sweetener', '#forge:eggs', '2x tfc:food/pumpkin_chunks', '#tfc:foods/flour')
.inputFluids(Fluid.of('minecraft:water', 1000))
.itemOutputs('firmalife:food/pumpkin_pie_dough')
.duration(300)
.EUt(16)
.circuit(2)
// Butter
event.recipes.gtceu.mixer('firmalife:food/butter')
.itemInputs('tfc:powder/salt')
.inputFluids(Fluid.of('firmalife:cream', 1000))
.itemOutputs('firmalife:food/butter')
.duration(300)
.EUt(16)
// Pie Dough
event.recipes.gtceu.mixer('firmalife:food/pie_dough')
.itemInputs('#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour')
.inputFluids(Fluid.of('minecraft:water', 1000))
.itemOutputs('firmalife:food/pie_dough')
.duration(300)
.EUt(16)
.circuit(2)
// Cookie Dough
event.recipes.gtceu.mixer('firmalife:food/cookie_dough')
.itemInputs('#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour', '#forge:eggs', 'firmalife:spice/vanilla')
.itemOutputs('4x firmalife:food/cookie_dough')
.duration(300)
.EUt(16)
// Hardtack Dough
event.recipes.gtceu.mixer('firmalife:food/hardtack_dough')
.itemInputs('tfc:powder/salt', '#tfc:foods/flour')
.inputFluids(Fluid.of('minecraft:water', 1000))
.itemOutputs('4x firmalife:food/hardtack_dough')
.duration(300)
.EUt(16)
.circuit(2)
// Yeast starter
event.recipes.gtceu.mixer('firmalife:yeast_starter')
.inputFluids(Fluid.of('firmalife:yeast_starter', 100))
.itemInputs('#tfc:foods/flour')
.outputFluids(Fluid.of('firmalife:yeast_starter', 600))
.duration(1200)
.EUt(8)
.circuit(1)
// Cocoa Powder
event.recipes.gtceu.macerator('firmalife:food/cocoa_powder')
.itemInputs('gtceu:cocoa_dust')
.itemOutputs('4x firmalife:food/cocoa_powder')
.duration(100)
.EUt(2)
event.recipes.tfc.quern('4x firmalife:food/cocoa_powder', 'gtceu:cocoa_dust')
.id(`tfg:quern/cocoa_powder`)
event.recipes.tfc.quern('gtceu:cocoa_dust', 'firmalife:food/roasted_cocoa_beans')
.id('tfg:quern/cocoa_dust');
// Chocolate Ice Cream
event.recipes.gtceu.mixer('firmalife:food/chocolate_ice_cream')
.itemInputs('firmalife:food/vanilla_ice_cream')
.inputFluids(Fluid.of('firmalife:chocolate', 1000))
.itemOutputs('firmalife:food/chocolate_ice_cream')
.duration(300)
.EUt(16)
// White Chocolate Blend
event.recipes.gtceu.mixer('firmalife:food/white_chocolate_blend/milk')
.itemInputs('2x firmalife:food/cocoa_butter', '#tfc:sweetener')
.inputFluids(Fluid.of('minecraft:milk', 1000))
.itemOutputs('2x firmalife:food/white_chocolate_blend')
.duration(300)
.EUt(16)
event.recipes.gtceu.mixer('firmalife:food/white_chocolate_blend/yak_milk')
.itemInputs('2x firmalife:food/cocoa_butter', '#tfc:sweetener')
.inputFluids(Fluid.of('firmalife:yak_milk', 1000))
.itemOutputs('2x firmalife:food/white_chocolate_blend')
.duration(300)
.EUt(16)
event.recipes.gtceu.mixer('firmalife:food/white_chocolate_blend/goat_milk')
.itemInputs('2x firmalife:food/cocoa_butter', '#tfc:sweetener')
.inputFluids(Fluid.of('firmalife:goat_milk', 1000))
.itemOutputs('2x firmalife:food/white_chocolate_blend')
.duration(300)
.EUt(16)
event.recipes.gtceu.mixer('firmalife:food/white_chocolate_blend/coconut_milk')
.itemInputs('2x firmalife:food/cocoa_butter', '#tfc:sweetener')
.inputFluids(Fluid.of('firmalife:coconut_milk', 1000))
.itemOutputs('2x firmalife:food/white_chocolate_blend')
.duration(300)
.EUt(16)
event.smelting('firmalife:food/white_chocolate', 'firmalife:food/white_chocolate_blend')
// Dark Chocolate Blend
event.recipes.gtceu.mixer('firmalife:food/dark_chocolate_blend/milk')
.itemInputs('2x firmalife:food/cocoa_powder', '#tfc:sweetener')
.inputFluids(Fluid.of('minecraft:milk', 1000))
.itemOutputs('2x firmalife:food/dark_chocolate_blend')
.duration(300)
.EUt(16)
event.recipes.gtceu.mixer('firmalife:food/dark_chocolate_blend/yak_milk')
.itemInputs('2x firmalife:food/cocoa_powder', '#tfc:sweetener')
.inputFluids(Fluid.of('firmalife:yak_milk', 1000))
.itemOutputs('2x firmalife:food/dark_chocolate_blend')
.duration(300)
.EUt(16)
event.recipes.gtceu.mixer('firmalife:food/dark_chocolate_blend/goat_milk')
.itemInputs('2x firmalife:food/cocoa_powder', '#tfc:sweetener')
.inputFluids(Fluid.of('firmalife:goat_milk', 1000))
.itemOutputs('2x firmalife:food/dark_chocolate_blend')
.duration(300)
.EUt(16)
event.recipes.gtceu.mixer('firmalife:food/dark_chocolate_blend/coconut_milk')
.itemInputs('2x firmalife:food/cocoa_powder', '#tfc:sweetener')
.inputFluids(Fluid.of('firmalife:coconut_milk', 1000))
.itemOutputs('2x firmalife:food/dark_chocolate_blend')
.duration(300)
.EUt(16)
event.smelting('firmalife:food/dark_chocolate', 'firmalife:food/dark_chocolate_blend')
// Milk Chocolate Blend
event.recipes.gtceu.mixer('firmalife:food/milk_chocolate_blend/milk')
.itemInputs('firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener')
.inputFluids(Fluid.of('minecraft:milk', 1000))
.itemOutputs('2x firmalife:food/milk_chocolate_blend')
.duration(300)
.EUt(16)
event.recipes.gtceu.mixer('firmalife:food/milk_chocolate_blend/yak_milk')
.itemInputs('firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener')
.inputFluids(Fluid.of('firmalife:yak_milk', 1000))
.itemOutputs('2x firmalife:food/milk_chocolate_blend')
.duration(300)
.EUt(16)
event.recipes.gtceu.mixer('firmalife:food/milk_chocolate_blend/goat_milk')
.itemInputs('firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener')
.inputFluids(Fluid.of('firmalife:goat_milk', 1000))
.itemOutputs('2x firmalife:food/milk_chocolate_blend')
.duration(300)
.EUt(16)
event.recipes.gtceu.mixer('firmalife:food/milk_chocolate_blend/coconut_milk')
.itemInputs('firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener')
.inputFluids(Fluid.of('firmalife:coconut_milk', 1000))
.itemOutputs('2x firmalife:food/milk_chocolate_blend')
.duration(300)
.EUt(16)
event.smelting('firmalife:food/milk_chocolate', 'firmalife:food/milk_chocolate_blend')
// Strawberry Ice Cream
event.recipes.gtceu.mixer('firmalife:food/strawberry_ice_cream')
.itemInputs('firmalife:food/vanilla_ice_cream', '2x tfc:food/strawberry')
.itemOutputs('firmalife:food/strawberry_ice_cream')
.duration(300)
.EUt(16)
// Hardtack Dough
event.recipes.gtceu.mixer('firmalife:food/chocolate_chip_cookie_dough')
.itemInputs('4x firmalife:food/cookie_dough', '#firmalife:chocolate_blends')
.itemOutputs('4x firmalife:food/chocolate_chip_cookie_dough')
.duration(300)
.EUt(16)
//#endregion
//#region Обжарка некоторой еды
// Cooked Pizza
event.smelting('firmalife:food/cooked_pizza', 'firmalife:food/raw_pizza')
// Taco Shell
event.smelting('firmalife:food/taco_shell', 'firmalife:food/corn_tortilla')
// Sugar Cookie
event.smelting('firmalife:food/sugar_cookie', 'firmalife:food/cookie_dough')
// Chocolate Chip Cookie
event.smelting('firmalife:food/chocolate_chip_cookie', 'firmalife:food/chocolate_chip_cookie_dough')
// Hardtack
event.smelting('firmalife:food/hardtack', 'firmalife:food/hardtack_dough')
// Cooked Pie
event.smelting('firmalife:food/cooked_pie', 'firmalife:food/filled_pie')
// Roasted Cocoa Beans
event.smelting('firmalife:food/roasted_cocoa_beans', 'firmalife:food/cocoa_beans')
// Pumpkin Pie
event.smelting('minecraft:pumpkin_pie', 'firmalife:food/raw_pumpkin_pie')
//#endregion
//#region Sticky Resin by Vat
event.recipes.firmalife.vat()
@ -481,6 +759,28 @@ const registerFirmaLifeRecipes = (event) => {
// #endregion
// #region Smashed food
event.recipes.gtceu.forge_hammer('firmalife:soybean_paste')
.itemInputs('firmalife:food/dehydrated_soybeans')
.itemOutputs('firmalife:food/soybean_paste')
.duration(20)
.EUt(7)
event.recipes.gtceu.forge_hammer('firmalife:red_grapes')
.itemInputs('firmalife:food/red_grapes')
.itemOutputs('firmalife:food/smashed_red_grapes')
.duration(20)
.EUt(7)
event.recipes.gtceu.forge_hammer('firmalife:white_grapes')
.itemInputs('firmalife:food/white_grapes')
.itemOutputs('firmalife:food/smashed_white_grapes')
.duration(20)
.EUt(7)
// #endregion
// #region Drying mat alternatives
event.shaped('firmalife:drying_mat', ['AAA'], { A: 'tfc:plant/leafy_kelp' }).id('tfg:shaped/drying_mat_leafy_kelp')
@ -495,4 +795,13 @@ const registerFirmaLifeRecipes = (event) => {
.circuit(5)
.EUt(GTValues.VA[GTValues.ULV])
.duration(200)
event.smelting('firmalife:food/dehydrated_soybeans', 'tfc:food/soybean')
event.recipes.gtceu.fermenter('soybean_oil')
.itemInputs('firmalife:food/soybean_paste')
.inputFluids(Fluid.of('minecraft:water', 100))
.outputFluids(Fluid.of('firmalife:soybean_oil', 250))
.EUt(GTValues.VA[GTValues.ULV])
.duration(600)
}

View file

@ -27,7 +27,6 @@ function removeGreateRecipes(event) {
event.remove({ id: 'greate:shaped/titanium_mechanical_saw' })
event.remove({ id: 'greate:splashing/dough' })
event.remove({ id: 'gtceu:electrolyzer/decomposition_electrolyzing_chromatic_compound' })
event.remove({ mod: 'greate', type: 'create:deploying' });
event.remove({ mod: 'greate', type: 'create:sequenced_assembly' });

View file

@ -744,6 +744,18 @@ function registerGTCEuMachineRecipes(event) {
// #endregion
// Контроллер теплицы
event.shaped('gtceu:greenhouse', [
'ABA',
'CDC',
'BCB'
], {
A: '#gtceu:circuits/mv',
B: 'gtceu:copper_single_cable',
C: 'tfc:compost',
D: 'gtceu:solid_machine_casing'
}).id('tfg:shaped/greenhouse')
// Drums
const DRUMS_AND_CRATES = [
'bismuth_bronze',

View file

@ -139,7 +139,7 @@ function registerGTCEUMetalRecipes(event) {
let matAmount = TagPrefix.block.getMaterialAmount(material) / GTValues.M;
if (!plateStack.isEmpty() && !ingotStack.hasTag('c:hidden_from_recipe_viewers')) {
if (!plateStack.isEmpty()) {
event.custom({
type: "createaddition:rolling",
@ -149,6 +149,7 @@ function registerGTCEUMetalRecipes(event) {
}).id(`tfg:rolling/${material.getName()}_plate`)
if (!blockStack.isEmpty() && GTMaterials.Stone != material) {
// 9х Слиток -> Блок
event.recipes.createCompacting(blockStack, ingotStack.withCount(matAmount))
.heated()
@ -157,6 +158,7 @@ function registerGTCEUMetalRecipes(event) {
}
else {
if (!blockStack.isEmpty()) {
// Блок из гемов -> 9 Пластин
event.recipes.createCutting(plateStack.withCount(matAmount).withChance(0.65), blockStack)
.id(`tfg:cutting/${material.getName()}_plate`)
@ -190,7 +192,7 @@ function registerGTCEUMetalRecipes(event) {
const foilItem = ChemicalHelper.get(TagPrefix.foil, material, 4)
const plateItem = ChemicalHelper.get(TagPrefix.plate, material, 1)
if (plateItem != null && foilItem != null && !plateItem.hasTag('c:hidden_from_recipe_viewers')) {
if (plateItem != null && foilItem != null) {
event.custom({
type: "createaddition:rolling",
input: plateItem,

View file

@ -1028,5 +1028,4 @@ const registerMinecraftRecipes = (event) => {
}).id('tfg:shaped/stonecutter');
event.stonecutting('minecraft:smooth_quartz', 'minecraft:quartz_block')
event.stonecutting('create:cut_deepslate', 'minecraft:polished_deepslate')
}

View file

@ -56,7 +56,6 @@ const registerMinecraftItemTags = (event) => {
event.remove('forge:gems', 'minecraft:charcoal')
event.remove('forge:gems', 'minecraft:coal')
event.remove('forge:gems', 'minecraft:flint')
event.add('tfc:compost_greens_high', 'minecraft:red_mushroom_block')
event.add('tfc:compost_greens_high', 'minecraft:brown_mushroom_block')

View file

@ -69,7 +69,6 @@ const registerTFCHeats = (event) => {
makeItemHeatByTagPrefix(TagPrefix.rodLong, material, tfcProperty, 1.429)
makeItemHeatByTagPrefix(TagPrefix.ingot, material, tfcProperty, 1.429)
makeItemHeatByTagPrefix(TFGTagPrefix.ingotDouble, material, tfcProperty, 2.875)
makeItemHeatByTagPrefix(TagPrefix.rawOre, material, tfcProperty, 1.429)
makeItemHeatByTagPrefix(TFGTagPrefix.richRawOre, material, tfcProperty, 1.429)

View file

@ -34,6 +34,44 @@ const registerTFCRecipes = (event) => {
//#endregion
//#region Рецепты зерен
global.TFC_QUERN_GRAIN_RECIPE_COMPONENTS.forEach(element => {
event.recipes.gtceu.macerator(`tfg:${element.name}`)
.itemInputs(element.input)
.itemOutputs(element.output)
.chancedOutput('tfc:straw', 7000, 500)
.duration(200)
.EUt(2)
event.recipes.tfc.quern(element.output, element.input)
.id(`tfg:quern/${element.name}`)
})
//#endregion
//#region Рецепты муки
global.TFC_QUERN_FLOUR_RECIPE_COMPONENTS.forEach(element => {
event.recipes.gtceu.macerator(`tfg:${element.name}`)
.itemInputs(element.input)
.itemOutputs(element.output)
.duration(200)
.EUt(2)
})
//#endregion
//#region Рецепты обжарки мяса
global.TFC_FURNACE_MEAT_RECIPE_COMPONENTS.forEach(element => {
event.smelting(element.output, element.input)
.id(`tfg:smelting/${element.name}`)
})
//#endregion
//#region Рецепты обжарки форм
global.TFC_FURNACE_MOLD_RECIPE_COMPONENTS.forEach(element => {
@ -88,6 +126,15 @@ const registerTFCRecipes = (event) => {
//#endregion
//#region Рецепты хлеба
global.TFC_FURNACE_BREAD_RECIPE_COMPONENTS.forEach(element => {
event.smelting(element.output, element.input)
.id(`tfg:smelting/${element.name}`)
})
//#endregion
event.shapeless('tfc:crucible', ['tfc:crucible']).id('tfg:empty_crucible')
event.shapeless('2x minecraft:stick', ['#minecraft:saplings', '#forge:tools/knives']).id('tfg:strip_saplings')

View file

@ -117,6 +117,20 @@ function registerTFCMachineRecipes(event) {
.duration(3200)
.EUt(16)
//#region Рецепты плоского теста
global.TFC_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS.forEach(element => {
event.recipes.gtceu.mixer(element.name)
.itemInputs(element.input)
.inputFluids(Fluid.of('minecraft:water', 100))
.itemOutputs(element.output)
.duration(300)
.EUt(16)
.circuit(3)
})
//#endregion
//#region Молды в ассемблере
for (let i = 0; i < global.TFC_CLAY_TO_UNFIRED_MOLD_RECIPE_COMPONENTS.length; i++) {
@ -160,9 +174,158 @@ function registerTFCMachineRecipes(event) {
.duration(2400)
.EUt(16)
// Curdled milk
event.recipes.gtceu.fermenter('tfg:fermenter/curdled_milk')
.inputFluids(Fluid.of('minecraft:milk', 2000))
.itemInputs('firmalife:rennet')
.outputFluids(Fluid.of('tfc:curdled_milk', 2000))
.duration(2400)
.EUt(16)
event.recipes.gtceu.fermenter('tfg:fermenter/curdled_yak_milk')
.inputFluids(Fluid.of('firmalife:yak_milk', 2000))
.itemInputs('firmalife:rennet')
.outputFluids(Fluid.of('firmalife:curdled_yak_milk', 2000))
.duration(2400)
.EUt(16)
event.recipes.gtceu.fermenter('tfg:fermenter/curdled_goat_milk')
.inputFluids(Fluid.of('firmalife:goat_milk', 2000))
.itemInputs('firmalife:rennet')
.outputFluids(Fluid.of('firmalife:curdled_goat_milk', 2000))
.duration(2400)
.EUt(16)
//Curds
event.recipes.gtceu.fermenter('tfg:fermenter/milk_curd')
.inputFluids(Fluid.of('tfc:curdled_milk', 1000))
.itemOutputs('firmalife:food/milk_curd')
.duration(1200)
.EUt(16)
event.recipes.gtceu.fermenter('tfg:fermenter/yak_curd')
.inputFluids(Fluid.of('firmalife:curdled_yak_milk', 1000))
.itemOutputs('firmalife:food/yak_curd')
.duration(1200)
.EUt(16)
event.recipes.gtceu.fermenter('tfg:fermenter/goat_curd')
.inputFluids(Fluid.of('firmalife:curdled_goat_milk', 1000))
.itemOutputs('firmalife:food/goat_curd')
.duration(1200)
.EUt(16)
// Cheese wheels
event.recipes.gtceu.fermenter('tfg:fermenter/gouda_wheel')
.inputFluids(Fluid.of('tfc:salt_water', 750))
.itemInputs('3x firmalife:food/milk_curd')
.itemOutputs('firmalife:gouda_wheel')
.duration(12000)
.EUt(24)
event.recipes.gtceu.fermenter('tfg:fermenter/shosha_wheel')
.inputFluids(Fluid.of('tfc:salt_water', 750))
.itemInputs('3x firmalife:food/yak_curd')
.itemOutputs('firmalife:shosha_wheel')
.duration(12000)
.EUt(24)
event.recipes.gtceu.fermenter('tfg:fermenter/feta_wheel')
.inputFluids(Fluid.of('tfc:salt_water', 750))
.itemInputs('3x firmalife:food/goat_curd')
.itemOutputs('firmalife:feta_wheel')
.duration(12000)
.EUt(24)
// Cutting
event.recipes.gtceu.cutter('tfg:cutter/gouda')
.itemInputs('firmalife:gouda_wheel')
.itemOutputs('4x firmalife:food/gouda')
.duration(40)
.EUt(7)
event.recipes.gtceu.cutter('tfg:cutter/shosha')
.itemInputs('firmalife:shosha_wheel')
.itemOutputs('4x firmalife:food/shosha')
.duration(40)
.EUt(7)
event.recipes.gtceu.cutter('tfg:cutter/feta')
.itemInputs('firmalife:feta_wheel')
.itemOutputs('4x firmalife:food/feta')
.duration(40)
.EUt(7)
event.recipes.gtceu.cutter('tfg:cutter/cheddar')
.itemInputs('firmalife:cheddar_wheel')
.itemOutputs('4x firmalife:food/cheddar')
.duration(40)
.EUt(7)
event.recipes.gtceu.cutter('tfg:cutter/chevre')
.itemInputs('firmalife:chevre_wheel')
.itemOutputs('4x firmalife:food/chevre')
.duration(40)
.EUt(7)
event.recipes.gtceu.cutter('tfg:cutter/rajya_metok')
.itemInputs('firmalife:rajya_metok_wheel')
.itemOutputs('4x firmalife:food/rajya_metok')
.duration(40)
.EUt(7)
// Misc
global.TFC_MILKS.forEach(milk => {
event.recipes.gtceu.fermenter(`tfg:fermenter/cream_from_${milk.id.replace(':', '_')}`)
.inputFluids(Fluid.of(milk.id, 1000))
.outputFluids(Fluid.of('firmalife:cream'))
.circuit(6)
.duration(1200)
.EUt(24)
})
event.recipes.gtceu.mixer('tfg:mixer/tomato_sauce')
.itemInputs('firmalife:food/tomato_sauce_mix')
.inputFluids(Fluid.of('minecraft:water', 200))
.itemOutputs('firmalife:food/tomato_sauce')
.duration(200)
.EUt(24)
//#endregion
// Brine
//#region Оливки
event.recipes.gtceu.macerator(`tfg:tfc/olive_paste`)
.itemInputs('tfc:food/olive')
.itemOutputs('2x tfc:olive_paste')
.duration(60)
.EUt(2)
event.recipes.gtceu.mixer('tfg:tfc/olive_oil_water')
.inputFluids(Fluid.of('water', 200))
.itemInputs('1x tfc:olive_paste')
.outputFluids(Fluid.of('tfc:olive_oil_water', 200))
.duration(200)
.EUt(28)
event.recipes.gtceu.distillery('tfg:tfc/olive_oil')
.inputFluids(Fluid.of('tfc:olive_oil_water', 250))
.outputFluids(Fluid.of('tfc:olive_oil', 50))
.duration(600)
.EUt(28)
//#endregion
// Vinegar and Brine
global.TFC_ALCOHOL.forEach(alcohol => {
event.recipes.gtceu.fermenter(`tfg:tfc/vinegar/${alcohol.id.replace(':', '_')}`)
.itemInputs('#tfc:foods/fruits')
.inputFluids(Fluid.of(alcohol.id, 250))
.outputFluids(Fluid.of('tfc:vinegar', 250))
.duration(600)
.EUt(28)
})
event.recipes.gtceu.mixer('tfg:tfc/brine')
.inputFluids(Fluid.of('tfc:salt_water', 900))

View file

@ -1114,15 +1114,6 @@ function registerTFCMaterialsRecipes(event) {
let tongPartStack = Item.of(`tfchotornot:tong_part/${material.getName()}`)
if (!tongsStack.isEmpty() && !tongPartStack.isEmpty()) {
event.shaped(tongsStack, [
'AA',
'BC'
], {
A: tongPartStack,
B: '#forge:bolts',
C: '#forge:tools/hammers'
}).id(`tfchotornot:crafting/tongs/${material.getName()}`)
// Ручка щипцов
event.recipes.tfc.heating(tongPartStack, tfcProperty.getMeltTemp())
.resultFluid(Fluid.of(outputMaterial.getFluid(), 144))

View file

@ -47,13 +47,13 @@ function registerTFCLunchBoxRecipes(event) {
event.recipes.gtceu.canner('tfclunchbox:fill_capsule_with_ice')
.itemInputs('tfclunchbox:universal_capsule')
.inputFluids(Fluid.of('gtceu:ice', 45 * 144))
.itemOutputs(Item.of('tfclunchbox:universal_capsule', '{Durability:1000}').withName(Text.translate('item.tfclunchbox.universal_capsule.filled')))
.itemOutputs(Item.of('tfclunchbox:universal_capsule', '{Durability:500}').withName(Text.translate('item.tfclunchbox.universal_capsule.filled')))
.duration(100)
.EUt(GTValues.VA[GTValues.LV])
event.recipes.gtceu.canner('tfclunchbox:fill_capsule_with_ice_solid')
.itemInputs('tfclunchbox:universal_capsule', '5x minecraft:packed_ice')
.itemOutputs(Item.of('tfclunchbox:universal_capsule', '{Durability:1000}').withName(Text.translate('item.tfclunchbox.universal_capsule.filled')))
.itemOutputs(Item.of('tfclunchbox:universal_capsule', '{Durability:500}').withName(Text.translate('item.tfclunchbox.universal_capsule.filled')))
.duration(100)
.EUt(GTValues.VA[GTValues.LV])
}

View file

@ -1,620 +0,0 @@
// priority: 0
/**
* @param {Internal.RecipesEventJS} event
*/
function registerTFGFoodRecipes(event) {
const $ISPRecipeLogic = Java.loadClass("su.terrafirmagreg.core.common.data.machines.ISPOutputRecipeLogic")
const $SizedIngredient = Java.loadClass("com.gregtechceu.gtceu.api.recipe.ingredient.SizedIngredient")
const Sized = (ing, amount) => $SizedIngredient.create(ing, amount)
/**
* @typedef {Object} FoodRecipeData
* @property {number?} circuit
* @property {Internal.GTRecipeComponents$FluidIngredientJS_[]?} fluidInputs
* @property {Internal.FluidStackJS[]?} fluidOutputs
* @property {(string | [string, Internal.Ingredient])[]?} itemInputs
* @property {string[]?} itemOutputs Ingredient outputs - first output is replaced with ISP output if defined
* @property {Internal.ItemStackProviderJS?} itemOutputProvider ItemStackProvider which provides the recipe output.
*
* **NOTE:** TFC Ingredients do not support item counts higher than 1. Do `Sized(TFCIngredient('item:item'), count)` instead of `TFCIngredient('[count]x item:item')`
*/
//#region Helper funcs
/**
* @param {"food_oven"|"food_processor"} type
* @param {string} id
* @param {string} duration
* @param {string} EUt
* @param {FoodRecipeData} data
*/
function registerFoodRecipe(type, id, duration, EUt, data) {
if (data.itemInputs === undefined) data.itemInputs = []
if (data.itemOutputs === undefined) data.itemOutputs = []
if (data.fluidInputs === undefined) data.fluidInputs = []
if (data.fluidOutputs === undefined) data.fluidOutputs = []
let gregInputs = [], inputs= []
let outputFirstIndex = (data.itemOutputProvider === undefined) ? 0 : 1
data.itemInputs.forEach(item => {
if (typeof item === "string") {
gregInputs.push(item)
const match = item.match(/^(\d+)\s*x\s*/i);
let count = 1
if (match) {
count = parseInt(match[1]);
item = item.slice(match[0].length);
}
inputs.push($SizedIngredient.create(item, count))
} else {
gregInputs.push(item[0])
inputs.push(item[1])
}
})
$ISPRecipeLogic.RegisterRecipeData(type + "/" + id, inputs, (data.itemOutputProvider === undefined) ? null : data.itemOutputProvider.asCanonClass(), data.itemOutputs.slice(outputFirstIndex).map(i => Item.of(i)))
let r = event.recipes.gtceu[type](id)
.duration(duration)
.EUt(EUt)
if (data.circuit) r.circuit(data.circuit)
if (data.itemOutputs.length > 0) r.itemOutputs(data.itemOutputs)
if (data.itemInputs.length > 0) r.itemInputs(data.itemInputs)
if (data.fluidInputs.length > 0) r.inputFluids(data.fluidInputs);
if (data.fluidOutputs.length > 0) r.outputFluids(data.fluidOutputs);
}
/**
* @param {string} id
* @param {number} duration
* @param {EUt} EUt
* @param {FoodRecipeData} data
*/
const processorRecipe = (id, duration, EUt, data) => registerFoodRecipe("food_processor", id, duration, EUt, data)
/**
* @param {string} id
* @param {string} input
* @param {string} out
* @param {Internal.FluidIngredient?} fluid
* @param {boolean?} isFirmaDynamic
*/
function cookingRecipe(id, input, out, fluid, isFirmaDynamic) {
registerFoodRecipe("food_oven", id, 300, 32, {
itemInputs: [input],
itemOutputs: [out],
fluidInputs: (fluid === undefined) ? [] : [fluid],
itemInputs: [input],
itemOutputProvider: (isFirmaDynamic) ? TFC.isp.of(out).firmaLifeCopyDynamicFood() : TFC.isp.of(out).copyFood().addTrait("firmalife:oven_baked")
})
}
//#endregion
//#region ================= Meat cooking =================
global.TFC_MEAT_RECIPE_COMPONENTS.forEach(item => {
cookingRecipe(item.name, item.input, item.output)
})
//#endregion
//#region ================= TFC Grains =================
global.TFC_GRAINS.forEach(grain => {
// Raw crop to grain
processorRecipe(`${grain}_grain`, 100, 8, {
itemInputs: [`tfc:food/${grain}`],
itemOutputs: [`tfc:food/${grain}_grain`],
itemOutputProvider: TFC.isp.of(`tfc:food/${grain}_grain`).copyOldestFood()
})
// Grain to flour
processorRecipe(`${grain}_flour`, 100, 8, {
itemInputs: [`tfc:food/${grain}_grain`],
itemOutputs: [`2x tfc:food/${grain}_flour`],
itemOutputProvider: TFC.isp.of(`2x tfc:food/${grain}_flour`).copyOldestFood()
})
// Flatbread dough
processorRecipe(`${grain}_flatbread_dough`, 300, 8, {
itemInputs: [`tfc:food/${grain}_flour`],
itemOutputs: [`2x tfc:food/${grain}_dough`],
fluidInputs: [Fluid.of('minecraft:water', 100)],
itemOutputProvider: TFC.isp.of(`2x tfc:food/${grain}_dough`).copyFood()
})
// Firmalife dough
processorRecipe(`${grain}_dough`, 300, 16, {
itemInputs: [`tfc:food/${grain}_flour`, `#tfc:sweetener`],
itemOutputs: [`4x firmalife:food/${grain}_dough`],
fluidInputs: [Fluid.of('firmalife:yeast_starter', 200)],
itemOutputProvider: TFC.isp.of(`4x firmalife:food/${grain}_dough`).copyFood()
})
// Bread baking
cookingRecipe(`${grain}_flatbread`, `tfc:food/${grain}_dough`, `firmalife:food/${grain}_flatbread`)
cookingRecipe(`${grain}_bread`, `firmalife:food/${grain}_dough`, `tfc:food/${grain}_bread`)
processorRecipe(`${grain}_bread_slice`, 10, 8, {
circuit: 1,
itemInputs: [`tfc:food/${grain}_bread`],
itemOutputs: [`2x firmalife:food/${grain}_slice`],
itemOutputProvider: TFC.isp.of(`2x firmalife:food/${grain}_slice`).copyOldestFood()
})
//Sandwich making
let breadTypes = [["bread", `tfc:food/${grain}_bread`], ["flatbread", `firmalife:food/${grain}_flatbread`], ["slice", `firmalife:food/${grain}_slice`]]
breadTypes.forEach((type) => {
processorRecipe(`${grain}_${type[0]}_sandwich`, 100, 16, {
circuit: 3,
itemInputs: [`2x ${type[1]}`, "3x #tfc:foods/usable_in_sandwich"],
itemOutputs: [`2x tfc:food/${grain}_bread_sandwich`],
itemOutputProvider: TFC.isp.of(`2x tfc:food/${grain}_bread_sandwich`).meal(
(food => food.hunger(4).water(0.5).saturation(1).decayModifier(4.5)), [
(portion) => portion.ingredient(Ingredient.of('#tfc:sandwich_bread')).nutrientModifier(0.5).saturationModifier(0.5).waterModifier(0.5),
(portion) => portion.nutrientModifier(0.8).saturationModifier(0.8).waterModifier(0.8),
])
})
//Note: Jam needs to be first in the recipe code or else it will consider it as the usable_in_jam_sandwhich ingredients.
processorRecipe(`${grain}_${type[0]}_jam_sandwich`, 100, 16, {
circuit: 4,
itemInputs: [`2x ${type[1]}`, '#tfc:foods/preserves', '2x #tfc:foods/usable_in_jam_sandwich'],
itemOutputs: [`2x tfc:food/${grain}_bread_jam_sandwich`, 'tfc:empty_jar'],
itemOutputProvider: TFC.isp.of(`2x tfc:food/${grain}_bread_jam_sandwich`).meal(
(food => food.hunger(4).water(0.5).saturation(1).decayModifier(4.5)), [
(portion) => portion.ingredient(Ingredient.of('#tfc:sandwich_bread')).nutrientModifier(0.5).saturationModifier(0.5).waterModifier(0.5),
(portion) => portion.nutrientModifier(0.8).saturationModifier(0.8).waterModifier(0.8),
]),
})
})
})
//#endregion
//#region ================= Firmalife =================
global.FIRMALIFE_COOKING_RECIPE_COMPONENTS.forEach(item => {
cookingRecipe(item.name, item.input, item.output, undefined, true)
})
//#endregion
//#region ================= Dairy =================
global.TFC_CURDS_AND_CHEESES.forEach(item => {
processorRecipe(`${item.curd}_curd`, 1200, 16, {
itemOutputs: [item.curd],
fluidInputs: [Fluid.of(item.input_fluid, 1000)],
itemOutputProvider: TFC.isp.of(item.curd).resetFood()
})
processorRecipe(`${item.cheese1}_cheese_wheel_1`, 8000, 16, {
itemInputs: [`3x ${item.curd}`],
itemOutputs: [`firmalife:${item.cheese1}_wheel`],
fluidInputs: [Fluid.of('tfc:salt_water', 750)],
itemOutputProvider: TFC.isp.of(`firmalife:${item.cheese1}_wheel`).copyOldestFood()
})
processorRecipe(`${item.cheese2}_cheese_wheel_2`, 1000, 16, {
circuit: 2,
itemInputs: [`3x ${item.curd}`, `6x tfc:powder/salt`],
itemOutputs: [`firmalife:${item.cheese2}_wheel`],
itemOutputProvider: TFC.isp.of(`firmalife:${item.cheese2}_wheel`).copyOldestFood()
})
processorRecipe(`${item.cheese1}_cheese_cutting_1`, 100, 8, {
itemInputs: [`firmalife:${item.cheese1}_wheel`],
itemOutputs: [`4x firmalife:food/${item.cheese1}`],
itemOutputProvider: TFC.isp.of(`4x firmalife:food/${item.cheese1}`).copyOldestFood()
})
processorRecipe(`${item.cheese2}_cheese_cutting_2`, 100, 8, {
itemInputs: [`firmalife:${item.cheese2}_wheel`],
itemOutputs: [`4x firmalife:food/${item.cheese2}`],
itemOutputProvider: TFC.isp.of(`4x firmalife:food/${item.cheese2}`).copyOldestFood()
})
})
global.TFC_MILKS.forEach(milk => {
const milkID = milk.id.split(':')[1];
processorRecipe(`white_chocolate_blend_from_${milkID}`, 300, 16, {
circuit: 3,
itemInputs: ['2x firmalife:food/cocoa_butter', '#tfc:sweetener'],
itemOutputs: ['2x firmalife:food/white_chocolate_blend'],
fluidInputs: [Fluid.of(milk.id, 1000)],
itemOutputProvider: TFC.isp.of('2x firmalife:food/white_chocolate_blend').resetFood(),
})
processorRecipe(`dark_chocolate_blend_from_${milkID}`, 300, 16, {
circuit: 2,
itemInputs: ['2x firmalife:food/cocoa_powder', '#tfc:sweetener'],
itemOutputs: ['2x firmalife:food/dark_chocolate_blend'],
fluidInputs: [Fluid.of(milk.id, 1000)],
itemOutputProvider: TFC.isp.of('2x firmalife:food/dark_chocolate_blend').resetFood(),
})
processorRecipe(`milk_chocolate_blend_from_${milkID}`, 300, 16, {
circuit: 1,
itemInputs: ['firmalife:food/cocoa_powder', 'firmalife:food/cocoa_butter', '#tfc:sweetener'],
itemOutputs: ['2x firmalife:food/milk_chocolate_blend'],
fluidInputs: [Fluid.of(milk.id, 1000)],
itemOutputProvider: TFC.isp.of('2x firmalife:food/milk_chocolate_blend').resetFood(),
})
processorRecipe(`egg_noodles_from_${milkID}`, 50, 8, {
circuit: 6,
itemInputs: ["#tfc:foods/flour", 'tfc:powder/salt', '#forge:eggs'],
itemOutputs: ['firmalife:food/raw_egg_noodles'],
fluidInputs: [Fluid.of(milk.id, 1000)],
itemOutputProvider: TFC.isp.of("firmalife:food/raw_egg_noodles").copyOldestFood(),
})
processorRecipe(`rice_noodles_from_${milkID}`, 50, 8, {
itemInputs: ["tfc:food/rice_flour", 'tfc:food/maize_flour', 'tfc:powder/salt'],
fluidInputs: [Fluid.of(milk.id, 1000)],
itemOutputs: ['2x firmalife:food/raw_rice_noodles'],
itemOutputProvider: TFC.isp.of('2x firmalife:food/raw_rice_noodles').copyOldestFood()
})
// No ISP needed here
event.recipes.gtceu.fermenter(`tfg:fermenter/cream_from_${milkID}`)
.inputFluids(Fluid.of(milk.id, 1000))
.outputFluids(Fluid.of('firmalife:cream'))
.circuit(6)
.duration(1200)
.EUt(24)
})
//#endregion
//#region ================= Food preservation =================
const smoking_meats = Ingredient.of('#tfc:foods/raw_meats').itemIds;
const brining_veg = Ingredient.of('#firmalife:foods/pizza_ingredients').itemIds;
const brining_ingredients = smoking_meats.concat(brining_veg);
brining_ingredients.forEach(item => {
processorRecipe(`${item}/brining`, 200, 16, {
circuit: 5,
itemInputs: [item],
itemOutputs: [item],
fluidInputs: [Fluid.of("tfc:brine", 100)],
itemOutputProvider: TFC.isp.of(item).copyOldestFood().addTrait('tfc:brined')
})
})
smoking_meats.forEach(item => {
processorRecipe(`${item}/smoking`, 200, 16, {
circuit: 6,
itemInputs: [[item, TFC.ingredient.lacksTrait(item, "firmalife:smoked")]],
itemOutputs: [item],
fluidInputs: [Fluid.of('gtceu:wood_gas', 50)],
itemOutputProvider: TFC.isp.of(item).copyOldestFood().addTrait("firmalife:smoked")
})
})
//#endregion
//#region ================= Misc =================
global.TFC_JAMS.forEach(name => {
processorRecipe(`${name}_jam`, 200, 8, {
circuit: 15,
itemInputs: [`4x tfc:food/${name}`, "#tfg:sugars", "#tfc:empty_jar_with_lid"],
itemOutputs: [`4x tfc:jar/${name}`],
fluidInputs: [Fluid.of("minecraft:water", 100)],
itemOutputProvider: TFC.isp.of(`4x tfc:jar/${name}`).copyFood()
})
processorRecipe(`${name}_jam_no_seal`, 200, 8, {
circuit: 16,
itemInputs: [`4x tfc:food/${name}`, "#tfg:sugars", "tfc:empty_jar"],
itemOutputs: [`4x tfc:jar/${name}_unsealed`],
fluidInputs: [Fluid.of("minecraft:water", 100)],
itemOutputProvider: TFC.isp.of(`4x tfc:jar/${name}_unsealed`).copyFood()
})
})
cookingRecipe("pasta", "firmalife:food/raw_egg_noodles", "firmalife:food/cooked_pasta", Fluid.of("minecraft:water", 100))
cookingRecipe("corn_tortilla", "firmalife:food/masa", "firmalife:food/corn_tortilla")
cookingRecipe("boiled_egg", "#firmalife:foods/raw_eggs", "tfc:food/boiled_egg", Fluid.of("minecraft:water", 200))
cookingRecipe("cooked_rice", "tfc:food/rice_grain", "tfc:food/cooked_rice", Fluid.of("minecraft:water", 200))
processorRecipe("pasta_tomato_sauce", 60, 8, {
itemInputs: ["firmalife:food/cooked_pasta", "firmalife:food/tomato_sauce"],
itemOutputs: ["firmalife:food/pasta_with_tomato_sauce"],
itemOutputProvider: TFC.isp.of('firmalife:food/pasta_with_tomato_sauce').copyFood()
})
processorRecipe('firmalife_masa', 300, 2, {
itemInputs: ["firmalife:food/masa_flour"],
itemOutputs: ["2x firmalife:food/masa"],
fluidInputs: [Fluid.of('minecraft:water', 100)],
itemOutputProvider: TFC.isp.of("2x firmalife:food/masa").copyFood()
})
processorRecipe("tortilla_chips", 40, 16, {
itemInputs: ["firmalife:food/taco_shell", "tfc:powder/salt"],
itemOutputs: ["firmalife:food/tortilla_chips"],
itemOutputProvider: TFC.isp.of("firmalife:food/tortilla_chips").copyFood()
})
processorRecipe("tomato_sauce_mix", 600, 8, {
itemInputs: ['tfc:food/tomato', 'tfc:powder/salt', 'tfc:food/garlic'],
itemOutputs: ['5x firmalife:food/tomato_sauce_mix'],
itemOutputProvider: TFC.isp.of('5x firmalife:food/tomato_sauce_mix').copyOldestFood(),
})
processorRecipe("tomato_sauce_from_mix", 200, 8, {
itemInputs: ['firmalife:food/tomato_sauce_mix'],
itemOutputs: ['firmalife:food/tomato_sauce'],
fluidInputs: [Fluid.of('minecraft:water', 200)],
itemOutputProvider: TFC.isp.of('firmalife:food/tomato_sauce').copyOldestFood(),
})
processorRecipe("olive_paste", 60, 8, {
itemInputs: ['tfc:food/olive'],
itemOutputs: ['2x tfc:olive_paste'],
itemOutputProvider: TFC.isp.of('2x tfc:olive_paste'),
})
processorRecipe("soybean_paste", 60, 8, {
itemInputs: ['firmalife:food/dehydrated_soybeans'],
itemOutputs: ['firmalife:food/soybean_paste'],
itemOutputProvider: TFC.isp.of('firmalife:food/soybean_paste').copyOldestFood(),
})
// Vinegar
global.TFC_ALCOHOL.forEach(alcohol => {
let name = `vinegar_${alcohol.id.replace(':', '_')}`;
processorRecipe(name, 600, 32, {
circuit: 5,
itemInputs: ['#tfc:foods/fruits'],
fluidInputs: [Fluid.of(alcohol.id, 250)],
fluidOutputs: [Fluid.of('tfc:vinegar', 250)],
})
})
processorRecipe("pizza_no_extra", 600, 16, {
itemInputs: ["firmalife:food/pizza_dough", "firmalife:food/tomato_sauce", "firmalife:food/shredded_cheese"],
itemOutputs: ["firmalife:food/raw_pizza"],
itemOutputProvider: TFC.isp.of("firmalife:food/raw_pizza").meal(
(food) => food.hunger(4).saturation(1).grain(1).dairy(0.25).decayModifier(4.5),
[(portion) => portion.nutrientModifier(0.8).waterModifier(0.8).saturationModifier(0.8)]
)
})
processorRecipe("pizza_1_extra", 600, 16, {
circuit: 1,
itemInputs: ["firmalife:food/pizza_dough", "firmalife:food/tomato_sauce", "firmalife:food/shredded_cheese", "#firmalife:foods/pizza_ingredients"],
itemOutputs: ["firmalife:food/raw_pizza"],
itemOutputProvider: TFC.isp.of("firmalife:food/raw_pizza").meal(
(food) => food.hunger(4).saturation(1).grain(1).dairy(0.25).decayModifier(4.5),
[(portion) => portion.nutrientModifier(0.8).waterModifier(0.8).saturationModifier(0.8)]
)
})
processorRecipe("pizza_2_extra", 600, 16, {
circuit: 2,
itemInputs: ["firmalife:food/pizza_dough", "firmalife:food/tomato_sauce", "firmalife:food/shredded_cheese", "2x #firmalife:foods/pizza_ingredients"],
itemOutputs: ["firmalife:food/raw_pizza"],
itemOutputProvider: TFC.isp.of("firmalife:food/raw_pizza").meal(
(food) => food.hunger(4).saturation(1).grain(1).dairy(0.25).decayModifier(4.5),
[(portion) => portion.nutrientModifier(0.8).waterModifier(0.8).saturationModifier(0.8)]
)
})
processorRecipe("pizza_dough_olive_oil", 300, 16, {
itemInputs: ['firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt'],
itemOutputs: ['4x firmalife:food/pizza_dough'],
fluidInputs: [Fluid.of('tfc:olive_oil', 1000)],
itemOutputProvider: TFC.isp.of("4x firmalife:food/pizza_dough").copyOldestFood()
})
processorRecipe("pizza_dough_soybean_oil", 300, 16, {
itemInputs: ['firmalife:spice/basil_leaves', '#tfc:foods/dough', 'tfc:powder/salt'],
itemOutputs: ['4x firmalife:food/pizza_dough'],
fluidInputs: [Fluid.of('firmalife:soybean_oil', 1000)],
itemOutputProvider: TFC.isp.of("4x firmalife:food/pizza_dough").copyOldestFood()
})
processorRecipe("vanilla_ice_cream", 300, 16, {
itemInputs: ['firmalife:ice_shavings', '#tfc:sweetener', 'firmalife:spice/vanilla'],
itemOutputs: ['2x firmalife:food/vanilla_ice_cream'],
fluidInputs: [Fluid.of('firmalife:cream', 1000)],
itemOutputProvider: TFC.isp.of("2x firmalife:food/vanilla_ice_cream").resetFood()
})
processorRecipe("chocolate_ice_cream", 300, 16, {
itemInputs: ['firmalife:food/vanilla_ice_cream'],
itemOutputs: ['firmalife:food/chocolate_ice_cream'],
fluidInputs: [Fluid.of('firmalife:chocolate', 1000)],
itemOutputProvider: TFC.isp.of("firmalife:food/chocolate_ice_cream").resetFood()
})
processorRecipe("strawberry_ice_cream", 300, 16, {
itemInputs: ['firmalife:food/vanilla_ice_cream', '2x tfc:food/strawberry'],
itemOutputs: ['firmalife:food/strawberry_ice_cream'],
itemOutputProvider: TFC.isp.of("firmalife:food/strawberry_ice_cream").resetFood()
})
processorRecipe("cookie_dough_ice_cream", 300, 16, {
itemInputs: [`firmalife:food/vanilla_ice_cream`, `firmalife:food/chocolate_chip_cookie_dough`],
itemOutputs: [`firmalife:food/cookie_dough_ice_cream`],
itemOutputProvider: TFC.isp.of("firmalife:food/cookie_dough_ice_cream").resetFood()
})
processorRecipe("butter", 300, 16, {
itemInputs: ["tfc:powder/salt"],
itemOutputs: ["firmalife:food/butter"],
fluidInputs: [Fluid.of('firmalife:cream', 1000)],
itemOutputProvider: TFC.isp.of('firmalife:food/butter').resetFood()
})
processorRecipe("pie_dough", 300, 16, {
circuit: 2,
itemInputs: ['#tfc:sweetener', 'firmalife:food/butter', '#tfc:foods/flour'],
itemOutputs: ['firmalife:food/pie_dough'],
fluidInputs: [Fluid.of('minecraft:water', 1000)],
itemOutputProvider: TFC.isp.of('firmalife:food/pie_dough').copyOldestFood()
})
processorRecipe("pumpkin_pie_dough", 300, 16, {
circuit: 2,
itemInputs: ['#tfc:sweetener', '#forge:eggs', '2x tfc:food/pumpkin_chunks', '#tfc:foods/flour'],
itemOutputs: ['firmalife:food/pumpkin_pie_dough'],
fluidInputs: [Fluid.of('minecraft:water', 1000)],
itemOutputProvider: TFC.isp.of('firmalife:food/pumpkin_pie_dough').copyOldestFood()
})
processorRecipe("raw_pumpkin_pie", 20, 8, {
itemInputs: ["firmalife:food/pumpkin_pie_dough", "firmalife:pie_pan"],
itemOutputs: ["firmalife:raw_pumpkin_pie"],
itemOutputProvider: TFC.isp.of("firmalife:food/raw_pumpkin_pie").copyFood()
})
processorRecipe("cookie_dough", 300, 16, {
itemInputs: ['#tfc:sweetener', '#forge:eggs', 'firmalife:food/butter', '#tfc:foods/flour', "firmalife:spice/vanilla"],
itemOutputs: ['4x firmalife:food/cookie_dough'],
itemOutputProvider: TFC.isp.of('4x firmalife:food/cookie_dough').copyOldestFood()
})
processorRecipe("chocolate_chip_cookie_dough", 300, 16, {
itemInputs: ['4x firmalife:food/cookie_dough', '#firmalife:chocolate_blends'],
itemOutputs: ['4x firmalife:food/chocolate_chip_cookie_dough'],
itemOutputProvider: TFC.isp.of('4x firmalife:food/chocolate_chip_cookie_dough').copyOldestFood()
})
processorRecipe("hardtack_dough", 300, 16, {
itemInputs: ['tfc:powder/salt', '#tfc:foods/flour'],
itemOutputs: ['4x firmalife:food/hardtack_dough'],
fluidInputs: [Fluid.of('minecraft:water', 1000)],
itemOutputProvider: TFC.isp.of('4x firmalife:food/hardtack_dough').copyOldestFood()
})
processorRecipe("yeast_starter", 1200, 8, {
circuit: 1,
fluidInputs: [Fluid.of('firmalife:yeast_starter', 100)],
fluidOutputs: [Fluid.of('firmalife:yeast_starter', 600)],
itemInputs: ['#tfc:foods/flour'],
})
processorRecipe("yeast_starter_from_water", 7200, 8, {
circuit: 10,
fluidInputs: [Fluid.of('minecraft:water', 100)],
fluidOutputs: [Fluid.of('firmalife:yeast_starter', 600)],
itemInputs: ['#tfc:foods/fruits'],
})
processorRecipe("cocoa_dust", 100, 4, {
itemInputs: ["firmalife:food/roasted_cocoa_beans"],
itemOutputs: ["gtceu:cocoa_dust"],
itemOutputProvider: TFC.isp.of("gtceu:cocoa_dust")
})
processorRecipe("red_grapes", 50, 8, {
itemInputs: ["firmalife:food/red_grapes"],
itemOutputs: ["firmalife:food/smashed_red_grapes"],
itemOutputProvider: TFC.isp.of('firmalife:food/smashed_red_grapes').copyOldestFood()
})
processorRecipe("white_grapes", 50, 8, {
itemInputs: ["firmalife:food/white_grapes"],
itemOutputs: ["firmalife:food/smashed_white_grapes"],
itemOutputProvider: TFC.isp.of('firmalife:food/smashed_white_grapes').copyOldestFood()
})
processorRecipe("cured_maize", 300, 8, {
itemInputs: ["tfc:food/maize_grain"],
itemOutputs: ["firmalife:food/cured_maize"],
itemOutputProvider: TFC.isp.of('firmalife:food/cured_maize').copyOldestFood()
})
processorRecipe("soy_mixture", 300, 8, {
itemInputs: ["tfc:food/soybean", 'tfc:powder/salt'],
itemOutputs: ["firmalife:food/soy_mixture"],
fluidInputs: [Fluid.of('minecraft:water', 50)],
itemOutputProvider: TFC.isp.of('firmalife:food/soy_mixture').copyOldestFood(),
})
// These don't need the ISP handling, they're just here to keep all the food recipes together
event.recipes.gtceu.mixer('tfg:tfc/olive_oil_water')
.inputFluids(Fluid.of('water', 200))
.itemInputs('1x tfc:olive_paste')
.outputFluids(Fluid.of('tfc:olive_oil_water', 200))
.duration(200)
.EUt(28)
event.recipes.gtceu.distillery('tfg:tfc/olive_oil')
.inputFluids(Fluid.of('tfc:olive_oil_water', 250))
.outputFluids(Fluid.of('tfc:olive_oil', 50))
.duration(600)
.EUt(28)
event.recipes.gtceu.fermenter('soybean_oil')
.itemInputs('firmalife:food/soybean_paste')
.inputFluids(Fluid.of('minecraft:water', 100))
.outputFluids(Fluid.of('firmalife:soybean_oil', 250))
.EUt(GTValues.VA[GTValues.ULV])
.duration(600)
event.recipes.gtceu.fermenter('tfg:fermenter/curdled_milk')
.inputFluids(Fluid.of('minecraft:milk', 2000))
.itemInputs('firmalife:rennet')
.outputFluids(Fluid.of('tfc:curdled_milk', 2000))
.duration(2400)
.EUt(16)
event.recipes.gtceu.fermenter('tfg:fermenter/curdled_yak_milk')
.inputFluids(Fluid.of('firmalife:yak_milk', 2000))
.itemInputs('firmalife:rennet')
.outputFluids(Fluid.of('firmalife:curdled_yak_milk', 2000))
.duration(2400)
.EUt(16)
event.recipes.gtceu.fermenter('tfg:fermenter/curdled_goat_milk')
.inputFluids(Fluid.of('firmalife:goat_milk', 2000))
.itemInputs('firmalife:rennet')
.outputFluids(Fluid.of('firmalife:curdled_goat_milk', 2000))
.duration(2400)
.EUt(16)
// GT cocoa dust compat
event.recipes.gtceu.macerator('firmalife:food/cocoa_powder')
.itemInputs('gtceu:cocoa_dust')
.itemOutputs('4x firmalife:food/cocoa_powder')
.duration(100)
.EUt(2)
event.recipes.tfc.quern('4x firmalife:food/cocoa_powder', 'gtceu:cocoa_dust')
.id(`tfg:quern/cocoa_powder`)
event.recipes.tfc.quern('gtceu:cocoa_dust', 'firmalife:food/roasted_cocoa_beans')
.id('tfg:quern/cocoa_dust');
//#endregion
event.replaceInput({id: 'gtceu:shaped/lv_food_processor'}, 'gtceu:lv_electric_piston', 'gtceu:steel_whisk')
event.replaceInput({id: 'gtceu:shaped/mv_food_processor'}, 'gtceu:mv_electric_piston', 'gtceu:aluminium_whisk')
event.replaceInput({id: 'gtceu:shaped/hv_food_processor'}, 'gtceu:hv_electric_piston', 'gtceu:stainless_steel_whisk')
event.replaceInput({id: 'gtceu:shaped/ev_food_processor'}, 'gtceu:ev_electric_piston', 'gtceu:titanium_whisk')
event.replaceInput({id: 'gtceu:shaped/lv_food_oven'}, 'gtceu:lv_electric_piston', '#tfg:metal_bars')
event.replaceInput({id: 'gtceu:shaped/mv_food_oven'}, 'gtceu:mv_electric_piston', '#tfg:metal_bars')
event.replaceInput({id: 'gtceu:shaped/hv_food_oven'}, 'gtceu:hv_electric_piston', '#tfg:metal_bars')
event.replaceInput({id: 'gtceu:shaped/ev_food_oven'}, 'gtceu:ev_electric_piston', '#tfg:metal_bars')
}

View file

@ -14,5 +14,4 @@ const registerTFGRecipes = (event) => {
registerTFGSupportRecipes(event)
registerTFGFishingNetsRecipes(event)
registerTFGConvertingRecipes(event)
registerTFGFoodRecipes(event)
}

View file

@ -287,4 +287,4 @@ function registerTFGRockRecipes(event) {
.EUt(GTValues.VA[GTValues.LV])
})
//#endregion
}
}

View file

@ -293,10 +293,6 @@ function registerVintageImprovementsRecipes(event) {
forEachMaterial(material => {
const ingotItem = ChemicalHelper.get(TagPrefix.ingot, material, 1);
if (ingotItem == null || ingotItem.hasTag('c:hidden_from_recipe_viewers'))
return;
// #region Coiling
if (material.hasFlag(MaterialFlags.GENERATE_ROD) && material.hasFlag(MaterialFlags.GENERATE_SPRING_SMALL)) {
@ -631,13 +627,6 @@ function registerVintageImprovementsRecipes(event) {
processingTime: 100 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER
}).id(`tfg:vi/coiling/phantom_thread`)
event.custom({
type: 'vintageimprovements:coiling',
ingredients: [{ item: 'firmalife:pineapple_fiber' }],
results: [{ item: 'firmalife:pineapple_yarn', count: 8 }],
processingTime: 100 * global.VINTAGE_IMPROVEMENTS_DURATION_MULTIPLIER
}).id(`tfg:vi/coiling/pineapple_yarn`)
event.custom({
type: 'vintageimprovements:coiling',
ingredients: [ChemicalHelper.get(TagPrefix.ingot, GTMaterials.Polycaprolactam, 1)],

View file

@ -1,15 +1,15 @@
// priority: 0
const registerAE2TagPrefixes = (event) => {
const $AE_BLOCKS = Java.loadClass('appeng.core.definitions.AEBlocks');
const $AE_ITEMS = Java.loadClass('appeng.core.definitions.AEItems');
const Fluix = GTCEuAPI.materialManager.getMaterial('tfg:fluix')
// Blocks have to be handled in java because ae2 is weird
TagPrefix.block.setIgnored(Fluix, $AE_BLOCKS.FLUIX_BLOCK);
TagPrefix.dust.setIgnored(Fluix, $AE_ITEMS.FLUIX_DUST);
TagPrefix.gem.setIgnored(Fluix, $AE_ITEMS.FLUIX_CRYSTAL);
;
TagPrefix.dust.setIgnored(GTMaterials.CertusQuartz, $AE_ITEMS.CERTUS_QUARTZ_DUST);
TagPrefix.gem.setIgnored(GTMaterials.CertusQuartz, $AE_ITEMS.CERTUS_QUARTZ_CRYSTAL);

View file

@ -188,6 +188,9 @@ global.CREATE_DISABLED_ITEMS = [
// Blocks
'create:andesite_alloy_block',
'create:experience_block',
'create:rose_quartz_block',
'create:rose_quartz_tiles',
'create:small_rose_quartz_tiles',
// Other
'create:honey_bucket',
@ -202,6 +205,7 @@ global.CREATE_DISABLED_ITEMS = [
'create:blaze_cake_base',
'create:sturdy_sheet',
'create:polished_rose_quartz',
'create:rose_quartz',
'create:cinder_flour',
'create:dough',
'create:bar_of_chocolate',

View file

@ -84,13 +84,6 @@ global.FIRMALIFE_ORE_MATERIALS = [
'chromite'
];
global.FIRMALIFE_JAMS = [
"fig",
"pineapple",
"red_grapes",
"white_grapes"
]
global.FIRMALIFE_GREENHOUSE_FRUIT_RECIPE_COMPONENTS = [
{ input: 'firmalife:plant/cocoa_sapling', fluid_amount: 8000, output: '3x firmalife:food/cocoa_beans', name: 'cocoa_beans' },
{ input: 'firmalife:plant/fig_sapling', fluid_amount: 8000, output: '3x firmalife:food/fig', name: 'fig' },
@ -101,20 +94,26 @@ global.FIRMALIFE_GREENHOUSE_BERRY_RECIPE_COMPONENTS = [
{ input: 'firmalife:plant/nightshade_bush', fluid_amount: 6000, output: '3x firmalife:food/nightshade_berry', name: 'nightshade' },
];
global.FIRMALIFE_COOKING_RECIPE_COMPONENTS = [
{ input: 'firmalife:food/white_chocolate_blend', output: 'firmalife:food/white_chocolate', name: 'white_chocolate' },
{ input: 'firmalife:food/dark_chocolate_blend', output: 'firmalife:food/dark_chocolate', name: 'dark_chocolate' },
{ input: 'firmalife:food/milk_chocolate_blend', output: 'firmalife:food/milk_chocolate', name: 'milk_chocolate' },
{ input: 'firmalife:food/raw_pizza', output: 'firmalife:food/cooked_pizza', name: 'cooked_pizza' },
{ input: 'firmalife:food/corn_tortilla', output: 'firmalife:food/taco_shell', name: 'taco_shell' },
{ input: 'firmalife:food/cookie_dough', output: 'firmalife:food/sugar_cookie', name: 'sugar_cookie' },
{ input: 'firmalife:food/chocolate_chip_cookie_dough', output: 'firmalife:food/chocolate_chip_cookie', name: 'chocolate_chip_cookie' },
{ input: 'firmalife:food/hardtack_dough', output: 'firmalife:food/hardtack', name: 'hardtack' },
{ input: 'firmalife:food/filled_pie', output: 'firmalife:food/cooked_pie', name: 'cooked_pie' },
{ input: 'firmalife:food/cocoa_beans', output: 'firmalife:food/roasted_cocoa_beans', name: 'roasted_cocoa_beans' },
{ input: 'firmalife:food/raw_pumpkin_pie', output: 'minecraft:pumpkin_pie', name: 'pumpkin_pie' },
{ input: 'tfc:food/soybean', output: 'firmalife:food/dehydrated_soybeans', name: 'dehydrated_soybeans' },
{ input: 'firmalife:food/raw_lasagna', output: 'firmalife:food/cooked_lasagna', name: 'cooked_lasagna' },
{ input: 'firmalife:food/bacon', output: 'firmalife:food/cooked_bacon', name: 'cooked_bacon' },
{ input: '#firmalife:foods/slices', output: 'firmalife:food/toast', name: 'toast' }
];
global.FIRMALIFE_QUERN_FLOUR_RECIPE_COMPONENTS = [
{ input: 'firmalife:food/nixtamal', output: '2x firmalife:food/masa_flour', name: 'masa_flour' },
];
global.FIRMALIFE_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS = [
{ input: 'tfc:food/barley_flour', output: '4x firmalife:food/barley_dough', name: 'firmalife_barley_dough' },
{ input: 'tfc:food/maize_flour', output: '4x firmalife:food/maize_dough', name: 'firmalife_maize_dough' },
{ input: 'tfc:food/oat_flour', output: '4x firmalife:food/oat_dough', name: 'firmalife_oat_dough' },
{ input: 'tfc:food/rye_flour', output: '4x firmalife:food/rye_dough', name: 'firmalife_rye_dough' },
{ input: 'tfc:food/rice_flour', output: '4x firmalife:food/rice_dough', name: 'firmalife_rice_dough' },
{ input: 'tfc:food/wheat_flour', output: '4x firmalife:food/wheat_dough', name: 'firmalife_wheat_dough' },
{ input: 'firmalife:food/masa_flour', output: '2x firmalife:food/masa', name: 'firmalife_masa' },
];
global.FIRMALIFE_FURNACE_FLATBREAD_RECIPE_COMPONENTS = [
{ input: 'tfc:food/barley_dough', output: 'firmalife:food/barley_flatbread', name: 'barley_flatbread' },
{ input: 'tfc:food/maize_dough', output: 'firmalife:food/maize_flatbread', name: 'maize_flatbread' },
{ input: 'tfc:food/oat_dough', output: 'firmalife:food/oat_flatbread', name: 'oat_flatbread' },
{ input: 'tfc:food/rye_dough', output: 'firmalife:food/rye_flatbread', name: 'rye_flatbread' },
{ input: 'tfc:food/rice_dough', output: 'firmalife:food/rice_flatbread', name: 'rice_flatbread' },
{ input: 'tfc:food/wheat_dough', output: 'firmalife:food/wheat_flatbread', name: 'wheat_flatbread' },
{ input: 'firmalife:food/masa', output: 'firmalife:food/corn_tortilla', name: 'corn_tortilla' },
];

View file

@ -1,5 +1,7 @@
// priority: 0
//#region Greenhouse
const registerGTCEuMachines = (event) => {
GTMachineUtils.registerCrate(GTMaterials.BismuthBronze, 54, "Bismuth Bronze Crate");
@ -10,6 +12,66 @@ const registerGTCEuMachines = (event) => {
const $SteamMulti = Java.loadClass('com.gregtechceu.gtceu.common.machine.multiblock.steam.SteamParallelMultiblockMachine');
const $Tags = Java.loadClass("dev.latvian.mods.kubejs.util.Tags")
event.create('greenhouse', 'multiblock')
.rotationState(RotationState.NON_Y_AXIS)
.recipeType('greenhouse')
.recipeModifiers([GTRecipeModifiers.OC_PERFECT])
.appearanceBlock(GTBlocks.CASING_STEEL_SOLID)
.pattern(definition => FactoryBlockPattern.start()
.aisle("CCCCCCC", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", " F ")
.aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ")
.aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ")
.aisle("CDDDDDC", "F#####F", "F#####F", "F#####F", "F#####F", "F#####F", "F#####F", "F#####F", "FFFFFFF")
.aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ")
.aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ")
.aisle("CCCYCCC", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", " F ")
.where('X', Predicates.blocks('ae2:quartz_glass'))
.where('F', Predicates.frames('steel'))
.where('D', Predicates.blocks('tfc:grass/silt')
.or(Predicates.blocks('tfc:dirt/loam'))
.or(Predicates.blocks('tfc:dirt/sandy_loam'))
.or(Predicates.blocks('tfc:dirt/silty_loam'))
.or(Predicates.blocks('tfc:grass/silt'))
.or(Predicates.blocks('tfc:grass/loam'))
.or(Predicates.blocks('tfc:grass/sandy_loam'))
.or(Predicates.blocks('tfc:grass/silty_loam')))
.where('C', Predicates.blocks('gtceu:steel_machine_casing').or(Predicates.autoAbilities(definition.getRecipeTypes())))
.where('#', Predicates.air()
.or(Predicates.blockTag($Tags.block("minecraft:logs")))
.or(Predicates.blockTag($Tags.block("minecraft:leaves"))))
.where(' ', Predicates.any())
.where('Y', Predicates.controller(Predicates.blocks(definition.get())))
.build()
)
.shapeInfo(controller => MultiblockShapeInfo.builder()
.aisle("CCCCCCC", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", " F ")
.aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ")
.aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X##L##X", "X#LLL#X", "X##L##X", "X#####X", " XXFXX ")
.aisle("CDDDDDC", "F##W##F", "F##W##F", "F##W##F", "F#LWL#F", "F#LWL#F", "F#LLL#F", "F#####F", "FFFFFFF")
.aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X##L##X", "X#LLL#X", "X##L##X", "X#####X", " XXFXX ")
.aisle("CDDDDDC", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", "X#####X", " XXFXX ")
.aisle("CitYfeC", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", "XXXFXXX", " F ")
.where('Y', controller, Direction.SOUTH)
.where('C', GTBlocks.STEEL_HULL.get())
.where('D', Block.getBlock('tfc:grass/silt'))
.where('F', Block.getBlock('gtceu:steel_frame'))
.where('X', Block.getBlock('ae2:quartz_glass'))
.where('W', Block.getBlock('tfc:wood/log/oak'))
.where('L', Block.getBlock('tfc:wood/leaves/oak'))
.where(' ', Block.getBlock('minecraft:air'))
.where('i', GTMachines.ITEM_IMPORT_BUS[GTValues.ULV], Direction.SOUTH)
.where('t', GTMachines.ITEM_EXPORT_BUS[GTValues.ULV], Direction.SOUTH)
.where('f', GTMachines.FLUID_IMPORT_HATCH[GTValues.ULV], Direction.SOUTH)
.where('e', GTMachines.ENERGY_INPUT_HATCH[GTValues.LV], Direction.SOUTH)
.build()
)
.workableCasingRenderer(
'gtceu:block/casings/solid/machine_casing_solid_steel',
'gtceu:block/multiblock/implosion_compressor', false
)
//#endregion
//#region Nether Dome
event.create('nether_dome', 'multiblock')

View file

@ -280,7 +280,7 @@ const registerGTCEuMaterialModification = (event) => {
GTMaterials.IronMagnetic.setMaterialARGB(0x503d32)
GTMaterials.IronMagnetic.setMaterialSecondaryARGB(0x131212)
GTMaterials.Zinc.setMaterialARGB(0xd6ffdc)
GTMaterials.Zinc.setMaterialSecondaryARGB(0xA3BE9E)
GTMaterials.Zinc.setMaterialSecondaryARGB(0x213b3f)
GTMaterials.Graphite.setMaterialARGB(0x889BA8)
GTMaterials.Graphite.setMaterialSecondaryARGB(0x30383E)
GTMaterials.Amethyst.setMaterialARGB(0xCC9EF0)

View file

@ -1,6 +1,13 @@
// priority: 0
const registerGTCEuRecipeTypes = (event) => {
event.create('greenhouse')
.category('greenhouse')
.setEUIO('in')
.setMaxIOSize(3, 4, 1, 0)
.setProgressBar(GuiTextures.PROGRESS_BAR_ARROW, FillDirection.LEFT_TO_RIGHT)
.setSound(GTSoundEntries.BATH)
event.create('nether_dome')
.category('nether_dome')
.setEUIO('in')

View file

@ -852,7 +852,7 @@ global.TFC_BATCH_TO_BOTTLE_ASSEMBLING_RECIPE_COMPONENTS = [
{ input: 'tfc:volcanic_glass_batch', output: 'tfc:volcanic_glass_bottle', name: 'volcanic_glass_bottle' },
];
global.TFC_MEAT_RECIPE_COMPONENTS = [
global.TFC_FURNACE_MEAT_RECIPE_COMPONENTS = [
{ input: 'tfc:food/horse_meat', output: 'tfc:food/cooked_horse_meat', name: 'cooked_horse_meat' },
{ input: 'tfc:food/bear', output: 'tfc:food/cooked_bear', name: 'cooked_bear' },
{ input: 'tfc:food/mutton', output: 'tfc:food/cooked_mutton', name: 'cooked_mutton' },
@ -924,39 +924,41 @@ global.TFC_QUERN_POWDER_RECIPE_COMPONENTS = [
{ input: 'firmalife:ore/small_chromite', output: 'gtceu:small_chromite_dust', name: 'chromite' }
];
global.TFC_GRAINS = [
"barley",
"maize",
"oat",
"rye",
"rice",
"wheat",
]
global.TFC_QUERN_GRAIN_RECIPE_COMPONENTS = [
{ input: 'tfc:food/barley', output: 'tfc:food/barley_grain', name: 'barley_grain' },
{ input: 'tfc:food/maize', output: 'tfc:food/maize_grain', name: 'maize_grain' },
{ input: 'tfc:food/oat', output: 'tfc:food/oat_grain', name: 'oat_grain' },
{ input: 'tfc:food/rye', output: 'tfc:food/rye_grain', name: 'rye_grain' },
{ input: 'tfc:food/rice', output: 'tfc:food/rice_grain', name: 'rice_grain' },
{ input: 'tfc:food/wheat', output: 'tfc:food/wheat_grain', name: 'wheat_grain' },
];
global.TFC_JAMS = [
"blackberry",
"blueberry",
"bunchberry",
"cloudberry",
"cranberry",
"elderberry",
"gooseberry",
"raspberry",
"snowberry",
"strawberry",
"wintergreen_berry",
"banana",
"cherry",
"green_apple",
"lemon",
"olive",
"orange",
"peach",
"plum",
"red_apple",
"pumpkin_chunks",
"melon_slice",
]
global.TFC_QUERN_FLOUR_RECIPE_COMPONENTS = [
{ input: 'tfc:food/barley_grain', output: '2x tfc:food/barley_flour', name: 'barley_flour' },
{ input: 'tfc:food/maize_grain', output: '2x tfc:food/maize_flour', name: 'maize_flour' },
{ input: 'tfc:food/oat_grain', output: '2x tfc:food/oat_flour', name: 'oat_flour' },
{ input: 'tfc:food/rye_grain', output: '2x tfc:food/rye_flour', name: 'rye_flour' },
{ input: 'tfc:food/rice_grain', output: '2x tfc:food/rice_flour', name: 'rice_flour' },
{ input: 'tfc:food/wheat_grain', output: '2x tfc:food/wheat_flour', name: 'wheat_flour' },
];
global.TFC_MIXER_FLATBREAD_DOUGH_RECIPE_COMPONENTS = [
{ input: 'tfc:food/barley_flour', output: '2x tfc:food/barley_dough', name: 'tfc_barley_dough' },
{ input: 'tfc:food/maize_flour', output: '2x tfc:food/maize_dough', name: 'tfc_maize_dough' },
{ input: 'tfc:food/oat_flour', output: '2x tfc:food/oat_dough', name: 'tfc_oat_dough' },
{ input: 'tfc:food/rye_flour', output: '2x tfc:food/rye_dough', name: 'tfc_rye_dough' },
{ input: 'tfc:food/rice_flour', output: '2x tfc:food/rice_dough', name: 'tfc_rice_dough' },
{ input: 'tfc:food/wheat_flour', output: '2x tfc:food/wheat_dough', name: 'tfc_wheat_dough' },
];
global.TFC_FURNACE_BREAD_RECIPE_COMPONENTS = [
{ input: 'firmalife:food/barley_dough', output: 'tfc:food/barley_bread', name: 'barley_bread' },
{ input: 'firmalife:food/maize_dough', output: 'tfc:food/maize_bread', name: 'maize_bread' },
{ input: 'firmalife:food/oat_dough', output: 'tfc:food/oat_bread', name: 'oat_bread' },
{ input: 'firmalife:food/rye_dough', output: 'tfc:food/rye_bread', name: 'rye_bread' },
{ input: 'firmalife:food/rice_dough', output: 'tfc:food/rice_bread', name: 'rice_bread' },
{ input: 'firmalife:food/wheat_dough', output: 'tfc:food/wheat_bread', name: 'wheat_bread' },
];
global.TFC_GREENHOUSE_FRUIT_RECIPE_COMPONENTS = [
{ input: 'tfc:plant/cherry_sapling', fluid_amount: 8000, output: '32x tfc:food/cherry', name: 'cherry' },
@ -1014,14 +1016,7 @@ global.TFC_MILKS = [
{id: 'minecraft:milk'},
{id: 'firmalife:yak_milk'},
{id: 'firmalife:goat_milk'},
// Uncomment this if firmalife ever makes this obtainable
//{id: 'firmalife:coconut_milk'},
];
global.TFC_CURDS_AND_CHEESES = [
{ id: 'milk', input_fluid: 'tfc:curdled_milk', curd: 'firmalife:food/milk_curd', cheese1: 'gouda', cheese2: 'cheddar' },
{ id: 'yak', input_fluid: 'firmalife:curdled_yak_milk', curd: 'firmalife:food/yak_curd', cheese1: 'shosha', cheese2: 'rajya_metok' },
{ id: 'goat', input_fluid: 'firmalife:curdled_goat_milk', curd: 'firmalife:food/goat_curd', cheese1: 'feta', cheese2: 'chevre' },
{id: 'firmalife:coconut_milk'},
];
global.TFC_ALCOHOL = [