added create factory logistics

This commit is contained in:
Pyritie 2025-07-05 15:01:08 +01:00
parent cdfbf81227
commit 0e34f7295f
10 changed files with 275 additions and 47 deletions

View file

@ -213,35 +213,50 @@
"7C4807A247AF36A1"
"648BCF486E16CCB2"
]
description: ["{quests.create_logistics.stock_link.desc}"]
id: "76490E046A44BCC3"
size: 2.0d
subtitle: "{quests.create_logistics.stock_link.subtitle}"
tasks: [{
id: "724FAB95580DE519"
item: "create:stock_link"
type: "item"
}]
title: "{quests.create_logistics.stock_link.title}"
x: 5.0d
y: -1.0d
}
{
dependencies: ["76490E046A44BCC3"]
description: [
"{quests.create_logistics.stock_ticker.desc.1}"
"{@pagebreak}"
"{quests.create_logistics.stock_ticker.desc.2}"
"{@pagebreak}"
"{quests.create_logistics.stock_ticker.desc.3}"
]
id: "341E2F290344BEEE"
subtitle: "{quests.create_logistics.stock_ticker.subtitle}"
tasks: [{
id: "6D34CC70CB8465EF"
item: "create:stock_ticker"
type: "item"
}]
title: "{quests.create_logistics.stock_ticker.title}"
x: 8.5d
y: -2.5d
}
{
dependencies: ["76490E046A44BCC3"]
description: ["{quests.create_logistics.redstone_requester.desc}"]
id: "3F44CFF8A6018F3E"
subtitle: "{quests.create_logistics.redstone_requester.subtitle}"
tasks: [{
id: "3A3E75B8A2755E29"
item: "create:redstone_requester"
type: "item"
}]
title: "{quests.create_logistics.redstone_requester.title}"
x: 8.5d
y: 0.5d
}
@ -251,28 +266,68 @@
"7567E885B7166603"
"76490E046A44BCC3"
]
description: [
"{quests.create_logistics.factory_gauge.desc.1}"
"{@pagebreak}"
"{quests.create_logistics.factory_gauge.desc.2}"
"{@pagebreak}"
"{quests.create_logistics.factory_gauge.desc.3}"
"{@pagebreak}"
"{quests.create_logistics.factory_gauge.desc.4}"
]
id: "2262F1FD4EAB777F"
shape: "gear"
size: 3.0d
tasks: [{
id: "05AEAFF6BC6C21BE"
item: "create:factory_gauge"
type: "item"
}]
subtitle: "{quests.create_logistics.factory_gauge.subtitle}"
tasks: [
{
id: "05AEAFF6BC6C21BE"
item: "create:factory_gauge"
type: "item"
}
{
id: "38DC47D44D9741FC"
item: "create_factory_logistics:factory_fluid_gauge"
optional_task: true
type: "item"
}
]
title: "{quests.create_logistics.factory_gauge.title}"
x: 5.0d
y: -4.0d
}
{
dependencies: ["341E2F290344BEEE"]
description: [
"{quests.create_logistics.tablecloths.desc.1}"
"{@pagebreak}"
"{quests.create_logistics.tablecloths.desc.2}"
]
id: "546FC3BD93E54913"
subtitle: "{quests.create_logistics.tablecloths.subtitle}"
tasks: [{
id: "75930EC6F9139FD5"
item: "create:white_table_cloth"
type: "item"
}]
title: "{quests.create_logistics.tablecloths.title}"
x: 8.5d
y: -1.0d
}
{
dependencies: ["09D5BD00E3308E76"]
description: ["{quests.create_logistics.bottler.desc}"]
id: "487D05818B3E9D19"
subtitle: "{quests.create_logistics.bottler.subtitle}"
tasks: [{
id: "3D6CCC6C3853CD9C"
item: "create_factory_logistics:jar_packager"
type: "item"
}]
title: "{quests.create_logistics.bottler.title}"
x: 2.5d
y: -1.0d
}
]
subtitle: ["{quests.create_logistics.subtitle}"]
title: "{quests.create_logistics}"

View file

@ -0,0 +1,8 @@
#Whether to allow factory gauges cascade ingredient requests
factoryGaugeCascadeRequest = true
#Capacity of the jar in millibuckets
#Range: 1 ~ 999999999
jarCapacity = 1000
#Whether jar packager (bottler) should pick output tanks over combined. Useful if you want to keep basin inputs intact
jarPackagerPrefersOutputs = true

View file

@ -643,6 +643,8 @@
"tfc.recipe.barrel.tfg.barrel.cooling_water_3": "Cooling Water",
"tfc.recipe.barrel.tfg.barrel.cooling_water_4": "Cooling Water",
"tfc.recipe.barrel.tfg.sealed_barrel.prepared_leather_gloves": "Soaking Leather Gloves",
"tfc.recipe.barrel.tfg.barrel.rapeseed_to_oil": "Extracting Rapeseed Oil",
"tfc.recipe.barrel.tfg.barrel.sunflower_to_oil": "Extracting Sunflower Oil",
"gtceu.aqueous_accumulator": "Aqueous Accumulator",
"tfg.food_recipe.brining": "Brining",
"tfg.food_recipe.smoking": "Smoking",
@ -735,6 +737,9 @@
"quests.create_logistics.nbt_handling.subtitle": "Other information on packages and addresses",
"quests.create_logistics.nbt_handling.desc.1": "Here are some other important things that may be useful when trying to route packages around:\n\n&3-&r Packages are randomly created from a selection of four possible items, so stuff like Gregtech's &3Item Filters&r will be &cvery tedious to set up&r! We recommend using the &3Package Filter&r wherever you can, but...\n\n&3-&r If you really want to try using other methods to move packages around, the destination address is stored as NBT data in the tag &eAddress&r. For example, a package with the destination address \"Home\" will have in its NBT data: &e{Address:\"Home\"}&r.",
"quests.create_logistics.nbt_handling.desc.2": "&3-&r Package address filtering actually supports a simplified form of &eRegEx&r. This means you can:\n\n&e-&r Match any length string with *\n\n&e-&r Match any single character with ?\n\n&e-&r Match a single character from a group of characters surrounded by [] (e.g. A[cr]t will match 'Act' and 'Art', but not 'Ant')\n\n&e-&r Match a single character that does not belong to a group of characters surrounded by [! ] (e.g. A[!cr]t will match 'Aft' and 'Apt', but not 'Act' or 'Art')\n\n&e-&r Match a string from a list of strings given inside {}(e.g. TerraFirma{Craft,Greg} will match both TerraFirma&eCraft&r and TerraFirma&eGreg&r)\n\n&e-&r All previous symbols can be escaped; For example, A\\* will be read as A* and only match 'A*'.",
"quests.create_logistics.bottler.title": "Bottler",
"quests.create_logistics.bottler.subtitle": "A packager but for fluids",
"quests.create_logistics.bottler.desc": "The Bottler is the fluid equivalent of the packager. Place it next to any kind of fluid container (Fluid Tank, Drums, machines, and so on), and put a Frogport on top of the Bottler, and the rest will work as you'd expect! The Bottler at the destination can similarly push directly into fluid containers, no pump needed!",
"quests.create_logistics.rose_quartz.title": "Roses are red...",
"quests.create_logistics.rose_quartz.subtitle": "...But Rose Quartz is Pink",
"quests.create_logistics.rose_quartz.desc": "Moving packages around is good and all, but surely that can't be all there is? Well, you're exactly right. There's much more that can be done with packages, including &areading inventory contents&r and &ahaving things be delivered remotely&r, and later on even &aautomatically sending ingredients to be processed&r based on an item's threshold!\n\nBut before delving into &2High Logistics&r, some preparations are in order.\n\nThe &dTransmitters&r that would be required for crafting such equipment can only realistically be produced via high-energy light refracted through a very unique mineral: &dRose Quartz&r. In other words, we need both a &7Basic &3Laser Engraver&r and some way of obtaining a &dRose Quartz Lens&r, so you better get to getting these done, eh?",
@ -753,16 +758,22 @@
"quests.create_logistics.stock_link.desc": "The first &2High Logistics&r machine you can make is a &3Stock Link&r, which can be used to create a &dLogistics Network&r. When placed onto any side of a &3Packager&r, the Stock Link will &amake the inventory the Packager is attached to visible to the network&r! On its own, the Stock Link isn't super useful, but it is a core component of all the other machines yet to come...\n\nRemember to right click on an existing Stock Link before placing one down to tune the two to share the same network. To cancel this, you can simply craft the Stock Link by itself to clear its attunement.",
"quests.create_logistics.stock_ticker.title": "Stock Ticker",
"quests.create_logistics.stock_ticker.subtitle": "Waiter! Waiter! More Silty Loam Rooted Dirt, please!",
"quests.create_logistics.stock_ticker.desc.1": "If you've already used &3Stock Links&r to provide various items to a &dLogistics Network&r, the next step is to make something that can call in said items remotely... And that's where the &3Stock Ticker&r comes in. Much like the Stock Link, you first need to right click an existing link to attune the Ticker to that network. You then need to place down a &3Blaze Burner&r or any mob in a &3Seat&r next to the Stock Ticker to have them work as a &3Stock Keeper&r.\n\nNow that the poor creature is indentured for life, you can click on them to see all the items on the &dLogistics Network&r. You can even search for items in the network, and create an order to be sent to specific addresses! There's no range limitation for this, although you do need to create your own way of routing around the packages that will be ordered through the Stock Links as well as have the link in question chunkloaded for this to work.",
"quests.create_logistics.stock_ticker.desc.2": "Additionally, you can set up the Ticker so that only specific items are shown, or set up categories of items ",
"quests.create_logistics.stock_ticker.desc.1": "If you've already used &3Stock Links&r to provide various items to a &dLogistics Network&r, the next step is to make something that can call in said items remotely... And that's where the &3Stock Ticker&r comes in. Much like the Stock Link, you first need to right click an existing link to attune the Ticker to that network. You then need to place down a &3Blaze Burner&r or any mob in a &3Seat&r next to the Stock Ticker to have them work as a &3Stock Keeper&r.",
"quests.create_logistics.stock_ticker.desc.2": "Now that the poor creature is indentured for life, you can click on them to see all the items on the &dLogistics Network&r. You can even search for items in the network, and create an order to be sent to specific addresses! There's no range limitation for this, although you do need to create your own way of routing around the packages that will be ordered through the Stock Links as well as have the link in question chunkloaded for this to work.",
"quests.create_logistics.stock_ticker.desc.3": "Additionally, you can set up the Ticker so that only specific items are shown, or set up categories of items.",
"quests.create_logistics.redstone_requester.title": "Redstone Requester",
"quests.create_logistics.redstone_requester.subtitle": "Same-day Delivery",
"quests.create_logistics.redstone_requester.desc": "The &3Redstone Requester&r can be seen as a more specialized &3Stock Ticker&r. You can't view items in the &dLogistics Network&r from it, but you can set up an order to be requested automatically every time the machine gets a redstone signal. This can be very useful for setting up automated provision of specific items - consider using a &3Threshold Switch&r or &3Smart Observer&r alongside this, for example.\n\nRemember that like any other &2High Logistics&r machine, you need to right click on an existing link before placing the Requester down to attune it to that network first!",
"quests.create_logistics.tablecloths.title": "Table Cloths",
"quests.create_logistics.tablecloths.subtitle": "They paved paradise and put up a shopping mall",
"quests.create_logistics.tablecloths.desc.1": "&3Table Cloths&r are Create's system for player-owned shops! Each Table Cloth can sell one item. You'll need a small setup with a Stock Ticker, Packager, and a Stock Keeper (a Blaze Burner or mob in a seat) to get started.\n\nRight-click the Stock Keeper with your Table Cloth, then select the item to sell. Then just place the Table Cloth down on a block or some Scaffolding. After it's placed, right-click the slot in the front of the Table Cloth with an item you want as payment. Afterwards, right-click and hold to change the amount of that item.",
"quests.create_logistics.tablecloths.desc.2": "To buy items from another player's shop, right-click the Table Cloths with an empty hand to add them to a Shopping List. Once they're ready, right-click the Stock Keeper with the Shopping List to buy the items! A Shopping List can be cleared by sneak-right-clicking. Payment is then stored in the Stock Ticker, and the shop owner can collect it later or send it back to their base!",
"quests.create_logistics.factory_gauge.title": "Factory Gauge",
"quests.create_logistics.factory_gauge.subtitle": "Automation, reinvented",
"quests.create_logistics.factory_gauge.desc.1": "The &3Factory Gauge&r is the ultimate &2High Logistics&r machine, requiring you to have the technology to make both &dAluminium&r and &dDiodes&r before you can craft one - But it's extremely powerful to match.\n\nThe first thing a Factory Gauge can do is be placed on a &3Packager&r to monitor the amount of a specific item in the connected inventory. When set up like this, the gauge's outer border will be &9Blue&r and it is said to be in &9Restocker Mode&r.\n\nThe other way of using a Factory Gauge is to have it automatically ordering ingredients when the amount of target products in a &dLogistics Network&r falls below a threshold. This is the operating mode when the gauge is placed on any block that is not a Packager; the outer border will be &eYellow&r, and it is said to be in &9Recipe Mode&r.",
"quests.create_logistics.factory_gauge.desc.2": "In either mode, You can set a specific value that the Factory Gauge should attempt to maintain. You then have to set a target address in the GUI which is where the automatic order made will be directed to a target address of your choice.\n\nFor the &9Restocker Mode&r, the specified address should ideally point towards the packager the gauge has been placed on so that the incoming packages are automatically unwraped into the target inventory.\n\nFor the &9Recipe Mode&r, the specified address should point towards wherever you manufacture the product. Additionally, you need to set up one additional gauge for each type of ingredient used, then connect them to the first gauge with &a'Add New Connection'&r in the GUI.\nIf the product you are trying to craft in &9Recipe Mode&r is a normal crafting recipe, you will need to &a'Use Mechanical Crafting'&r and ensure that the package is unwraped into a 3x3 &3Mechanical Crafter&r array. &cIt is important that the package is not unwraped en route&r, as the package itself holds crafting recipe instructions - if the ingredients must come from different sources, look into using a &3Re-Packager&r to act as a buffer for the packages.",
"quests.create_logistics.factory_gauge.desc.3": "&3Note:&r Factory Gauge requests are technically 'Promises', which are guarantees by the network that the items in question &owill&r be delivered at some point in the future. This is done to prevent the items from being over-requested. By default, these promises never expire; This means the promise will remain in place forever if the items are unlikely to be delivered in the future. You can change this behavior by adjusting the bottom section of the gauge GUI, which will limit how long promises stick around for.",
"quests.create_logistics.factory_gauge.desc.2": "In either mode, You can set a specific value that the Factory Gauge should attempt to maintain. You then have to set a target address in the GUI which is where the automatic order made will be directed to a target address of your choice.\n\nFor the &9Restocker Mode&r, the specified address should ideally point towards the packager the gauge has been placed on so that the incoming packages are automatically unwrapped into the target inventory.",
"quests.create_logistics.factory_gauge.desc.3": "For the &9Recipe Mode&r, the specified address should point towards wherever you manufacture the product.\n\nAdditionally, you need to set up one additional gauge for each type of ingredient used, then connect them to the first gauge with &a'Add New Connection'&r in the GUI.\nIf the product you are trying to craft in &9Recipe Mode&r is a normal crafting recipe, you will need to &a'Use Mechanical Crafting'&r and ensure that the package is unwraped into a 3x3 &3Mechanical Crafter&r array.",
"quests.create_logistics.factory_gauge.desc.4": "&cIt is important that the package is not unwrapped en route&r, as the package itself holds crafting recipe instructions - if the ingredients must come from different sources, look into using a &3Re-Packager&r to act as a buffer for the packages.\n\n&3Note:&r Factory Gauge requests are technically 'Promises', which are guarantees by the network that the items in question &owill&r be delivered at some point in the future. This is done to prevent the items from being over-requested. By default, these promises never expire; This means the promise will remain in place forever if the items are unlikely to be delivered in the future. You can change this behavior by adjusting the bottom section of the gauge GUI, which will limit how long promises stick around for.",
"quests.development": "Progression Table",
"quests.development.subtitle": "An easy way to understand your progression on Gregtech",
"quests.development.explanation.title": "Let's do some explaining",

View file

@ -1718,6 +1718,12 @@ const registerCreateRecipes = (event) => {
F: '#tfg:metal_bars'
}).id('tfg:create/shaped/packager')
event.recipes.gtceu.assembler('tfg:create/packager')
.itemInputs('gtceu:ulv_machine_hull', '4x #forge:rods/wrought_iron', '#forge:springs/wrought_iron', '4x create:cardboard', '#forge:string', '#gtceu:circuits/ulv')
.itemOutputs('create:packager')
.duration(200)
.EUt(20)
event.shaped('create:item_hatch', [
'A',
'B',
@ -1789,7 +1795,7 @@ const registerCreateRecipes = (event) => {
}).id('tfg:create/shaped/white_table_cloth')
event.recipes.gtceu.laser_engraver('create:transmitter')
.itemInputs('#forge:double_plates/red_alloy')
.itemInputs('2x #forge:plates/red_alloy')
.notConsumable('#forge:lenses/pink')
.itemOutputs('create:transmitter')
.duration(1200)
@ -1809,14 +1815,20 @@ const registerCreateRecipes = (event) => {
G: '#forge:tools/screwdrivers'
}).id('tfg:create/shaped/stock_link')
event.recipes.gtceu.assembler('tfg:create/stock_link')
event.recipes.gtceu.assembler('create:stock_link')
.itemInputs('create:andesite_casing', 'gtceu:item_detector_cover', '#gtceu:circuits/lv', 'create:transmitter')
.circuit(1)
.inputFluids(Fluid.of('gtceu:soldering_alloy', 72))
.itemOutputs('create:stock_link')
.duration(150)
.EUt(16)
event.recipes.gtceu.assembler('create:stock_link_tin')
.itemInputs('create:andesite_casing', 'gtceu:item_detector_cover', '#gtceu:circuits/lv', 'create:transmitter')
.inputFluids(Fluid.of('gtceu:tin', 144))
.itemOutputs('create:stock_link')
.duration(150)
.EUt(16)
event.shaped('create:stock_ticker', [
' A ',
'ABA',
@ -1852,6 +1864,12 @@ const registerCreateRecipes = (event) => {
F: '#forge:plates/rose_quartz',
G: '#forge:tools/wrenches'
}).id('tfg:create/shaped/factory_gauge')
event.recipes.gtceu.assembler('create:factory_gauge')
.itemInputs('create:precision_mechanism', '2x #forge:screws/aluminium', '#gtceu:diodes', 'create:stock_link', '#gtceu:circuits/lv', '2x #forge:plates/rose_quartz')
.itemOutputs('2x create:factory_gauge')
.duration(150)
.EUt(16)
//#endregion

View file

@ -47,17 +47,6 @@ const registerCreateItemTags = (event) => {
event.add('create:blaze_burner_fuel/special', "gtceu:exquisite_coal_gem")
event.add('create:blaze_burner_fuel/special', "gtceu:coke_gem")
// Lets the basin be put on top of a charcoal forge
event.add('tfc:forge_invisible_whitelist', 'create:basin')
// Allows automation with the 3x3 Hellforge
event.add('tfc:forge_invisible_whitelist', 'tfcchannelcasting:channel')
event.add('tfc:forge_invisible_whitelist', 'tfcchannelcasting:mold_table')
event.add('tfc:forge_invisible_whitelist', 'greate:steel_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:aluminum_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:stainless_steel_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:titanium_mechanical_pump')
event.add('create:non_movable', 'gtceu:wood_crate')
event.add('create:non_movable', 'gtceu:bronze_crate')
event.add('create:non_movable', 'gtceu:black_bronze_crate')
@ -73,6 +62,11 @@ const registerCreateItemTags = (event) => {
event.add('create:non_movable', 'gtceu:hv_super_chest')
event.add('create:non_movable', 'gtceu:ev_super_chest')
event.add('c:hidden_from_recipe_viewers', 'create:cardboard_package_12x10')
event.add('c:hidden_from_recipe_viewers', 'create:cardboard_package_10x8')
event.add('c:hidden_from_recipe_viewers', 'create:cardboard_package_10x12')
event.add('c:hidden_from_recipe_viewers', 'create:cardboard_package_12x12')
event.remove('create:stone_types/deepslate', 'minecraft:deepslate')
event.remove('create:stone_types/dripstone', 'minecraft:dripstone_block')
event.remove('create:stone_types/blackstone', 'minecraft:blackstone')
@ -100,17 +94,6 @@ const registerCreateBlockTags = (event) => {
event.add('create:fan_processing_catalysts/splashing', 'tfc:fluid/river_water')
event.add('create:fan_processing_catalysts/splashing', 'tfc:fluid/salt_water')
event.add('create:fan_processing_catalysts/splashing', 'tfc:fluid/spring_water')
// Lets the basin be put on top of a charcoal forge
event.add('tfc:forge_invisible_whitelist', 'create:basin')
// Allows automation with the 3x3 Hellforge
event.add('tfc:forge_invisible_whitelist', 'tfcchannelcasting:channel')
event.add('tfc:forge_invisible_whitelist', 'tfcchannelcasting:mold_table')
event.add('tfc:forge_invisible_whitelist', 'greate:steel_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:aluminum_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:stainless_steel_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:titanium_mechanical_pump')
}

View file

@ -0,0 +1,96 @@
// priority: 0
function registerCreateFactoryLogisticsRecipes(event) {
event.remove({ mod: 'create_factory_logistics' })
event.recipes.createSequencedAssembly([
'create_factory_logistics:fluid_mechanism',
], '#forge:plates/copper', [
event.recipes.createDeploying('create_factory_logistics:incomplete_fluid_mechanism', ['create_factory_logistics:incomplete_fluid_mechanism', '#forge:small_springs/copper']),
event.recipes.createDeploying('create_factory_logistics:incomplete_fluid_mechanism', ['create_factory_logistics:incomplete_fluid_mechanism', '#forge:small_gears/brass']),
event.recipes.createDeploying('create_factory_logistics:incomplete_fluid_mechanism', ['create_factory_logistics:incomplete_fluid_mechanism', '#forge:bolts/wrought_iron']),
]).transitionalItem('create_factory_logistics:incomplete_fluid_mechanism').loops(3).id('tfg:create_factory_logistics/sequenced_assembly/fluid_mechanism')
event.recipes.gtceu.assembler('create_factory_logistics:fluid_mechanism')
.itemInputs('#forge:plates/copper', '2x #forge:small_springs/copper', '2x #forge:small_gears/brass', '2x #forge:bolts/wrought_iron')
.itemOutputs('create_factory_logistics:fluid_mechanism')
.duration(2000)
.EUt(20)
event.shaped('create_factory_logistics:jar_packager', [
'AAA',
'BCD',
'EFE'
], {
A: '#forge:rods/copper',
B: '#forge:springs/copper',
C: 'gtceu:ulv_machine_hull',
D: 'create:fluid_tank',
E: 'create:electron_tube',
F: '#tfg:metal_bars'
}).id('create_factory_logistics:shaped/jar_packager')
event.recipes.gtceu.assembler('create_factory_logistics:jar_packager')
.itemInputs('gtceu:ulv_machine_hull', '4x #forge:rods/copper', '#forge:springs/copper', 'create:fluid_tank', '#gtceu:circuits/ulv')
.itemOutputs('create_factory_logistics:jar_packager')
.duration(200)
.EUt(20)
event.shapeless('create_factory_logistics:factory_fluid_gauge', ['create_factory_logistics:factory_fluid_gauge'])
.id('create_factory_logistics:shapeless/factory_fluid_gauge_clear')
event.shaped('2x create_factory_logistics:factory_fluid_gauge', [
'ABA',
'CDE',
'FGF'
], {
A: '#forge:screws/aluminium',
B: 'create_factory_logistics:fluid_mechanism',
C: '#gtceu:diodes',
D: 'create:stock_link',
E: '#gtceu:circuits/lv',
F: '#forge:plates/rose_quartz',
G: '#forge:tools/wrenches'
}).id('create_factory_logistics:shaped/factory_fluid_gauge')
event.recipes.gtceu.assembler('create_factory_logistics:factory_fluid_gauge')
.itemInputs('create_factory_logistics:fluid_mechanism', '2x #forge:screws/aluminium', '#gtceu:diodes', 'create:stock_link', '#gtceu:circuits/lv', '2x #forge:plates/rose_quartz')
.itemOutputs('2x create_factory_logistics:factory_fluid_gauge')
.duration(150)
.EUt(16)
event.shapeless('create_factory_logistics:network_link', ['create_factory_logistics:network_link'])
.id('create_factory_logistics:shapeless/network_link_clear')
event.shaped('create_factory_logistics:network_link', [
'ABC',
'DEB',
'FG '
], {
A: '#forge:tools/wrenches',
B: '#forge:screws/steel',
C: 'gtceu:fluid_detector_cover',
D: 'create:transmitter',
E: 'create:brass_casing',
F: '#forge:tools/screwdrivers',
G: '#gtceu:circuits/lv'
}).id('create_factory_logistics:shaped/network_link')
event.recipes.gtceu.assembler('create_factory_logistics:network_link')
.itemInputs('create:brass_casing', 'gtceu:fluid_detector_cover', '#gtceu:circuits/lv', 'create:transmitter')
.inputFluids(Fluid.of('gtceu:soldering_alloy', 72))
.itemOutputs('create_factory_logistics:network_link')
.duration(150)
.EUt(16)
event.recipes.gtceu.assembler('create_factory_logistics:network_link_tin')
.itemInputs('create:brass_casing', 'gtceu:fluid_detector_cover', '#gtceu:circuits/lv', 'create:transmitter')
.inputFluids(Fluid.of('gtceu:tin', 144))
.itemOutputs('create_factory_logistics:network_link')
.duration(150)
.EUt(16)
}

View file

@ -0,0 +1,7 @@
// priority: 0
function registerCreateFactoryLogisticsItemTags(event) {
event.add('c:hidden_from_recipe_viewers', 'create_factory_logistics:incomplete_fluid_mechanism')
event.add('c:hidden_from_recipe_viewers', 'create_factory_logistics:copper_jar_package_8x8')
event.add('c:hidden_from_recipe_viewers', 'create_factory_logistics:composite_package')
}

View file

@ -21,6 +21,7 @@ ServerEvents.tags('item', event => {
registerCreateAdditionsItemTags(event)
registerCreateConnectedItemTags(event)
registerCreateDecoItemTags(event)
registerCreateFactoryLogisticsItemTags(event)
registerDiggerHelmetItemTags(event)
registerEndermanOverhaulItemTags(event)
registerEveryCompatItemTags(event)
@ -207,6 +208,7 @@ ServerEvents.recipes(event => {
registerCreateAdditionsRecipes(event)
registerCreateConnectedRecipes(event)
registerCreatedecoRecipes(event)
registerCreateFactoryLogisticsRecipes(event)
registerCreateHorsePowerBlockRecipes(event)
registerDiggerHelmetRecipes(event)
registerDomumOrnamentumRecipes(event)

View file

@ -299,6 +299,17 @@ const registerTFCItemTags = (event) => {
// Bells
event.add('tfc:bells', 'tfc:bronze_bell')
event.add('tfc:bells', 'tfc:brass_bell')
// Lets the basin be put on top of a charcoal forge
event.add('tfc:forge_invisible_whitelist', 'create:basin')
// Allows automation with the 3x3 Hellforge
event.add('tfc:forge_invisible_whitelist', 'tfcchannelcasting:channel')
event.add('tfc:forge_invisible_whitelist', 'tfcchannelcasting:mold_table')
event.add('tfc:forge_invisible_whitelist', 'greate:steel_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:aluminum_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:stainless_steel_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:titanium_mechanical_pump')
}
const registerTFCBlockTags = (event) => {
@ -389,27 +400,28 @@ const registerTFCBlockTags = (event) => {
event.add('beneath:nether_bush_plantable_on', '#tfc:dirt')
event.add('minecraft:frogs_spawnable_on', '#tfc:dirt')
event.add('minecraft:nether_carver_replaceables', 'tfc:rock/raw/gneiss')
event.add('minecraft:nether_carver_replaceables', 'tfc:rock/raw/schist')
event.add('minecraft:nether_carver_replaceables', 'tfc:rock/raw/diorite')
event.add('minecraft:nether_carver_replaceables', 'tfc:rock/raw/granite')
event.add('minecraft:nether_carver_replaceables', 'tfc:rock/raw/gabbro')
event.add('minecraft:nether_carver_replaceables', 'tfc:rock/raw/basalt')
event.add('minecraft:base_stone_nether', 'tfc:rock/raw/gneiss')
event.add('minecraft:base_stone_nether', 'tfc:rock/raw/schist')
event.add('minecraft:base_stone_nether', 'tfc:rock/raw/diorite')
event.add('minecraft:base_stone_nether', 'tfc:rock/raw/granite')
event.add('minecraft:base_stone_nether', 'tfc:rock/raw/gabbro')
event.add('minecraft:base_stone_nether', 'tfc:rock/raw/basalt')
event.add('minecraft:frogs_spawnable_on', 'tfc:rock/raw/gneiss')
event.add('minecraft:frogs_spawnable_on', 'tfc:rock/raw/schist')
event.add('minecraft:frogs_spawnable_on', 'tfc:rock/raw/diorite')
event.add('minecraft:frogs_spawnable_on', 'tfc:rock/raw/granite')
event.add('minecraft:frogs_spawnable_on', 'tfc:rock/raw/gabbro')
event.add('minecraft:nether_carver_replaceables', '#minecraft:base_stone_nether')
event.add('minecraft:frogs_spawnable_on', '#minecraft:base_stone_nether')
//#endregion
// Lets the basin be put on top of a charcoal forge
event.add('tfc:forge_invisible_whitelist', 'create:basin')
// Allows automation with the 3x3 Hellforge
event.add('tfc:forge_invisible_whitelist', 'tfcchannelcasting:channel')
event.add('tfc:forge_invisible_whitelist', 'tfcchannelcasting:mold_table')
event.add('tfc:forge_invisible_whitelist', 'greate:steel_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:aluminum_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:stainless_steel_mechanical_pump')
event.add('tfc:forge_invisible_whitelist', 'greate:titanium_mechanical_pump')
//Allows any block with the word "brick" in its id to be used as bloomery and forge insulation.
//Add blacklisted words to the const with | between.
const brick_blacklist = ('drying|slab|stairs|wall|additionalplacements');

View file

@ -2257,6 +2257,42 @@
}
]
},
{
"pakku_id": "AkHN0rdiPZGbRyXS",
"type": "MOD",
"slug": {
"curseforge": "create-factory-logistics"
},
"name": {
"curseforge": "Create Factory Logistics"
},
"id": {
"curseforge": "1218807"
},
"files": [
{
"type": "curseforge",
"file_name": "create_factory_logistics-1.20.1-1.4.4.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "beta",
"url": "https://edge.forgecdn.net/files/6697/751/create_factory_logistics-1.20.1-1.4.4.jar",
"id": "6697751",
"parent_id": "1218807",
"hashes": {
"sha1": "e300be40f0911aa318a09549f7abfb5041a55190",
"md5": "cac1d8da02f258b0b48307ad75caa207"
},
"required_dependencies": [],
"size": 1082232,
"date_published": "2025-06-26T12:50:53.563Z"
}
]
},
{
"pakku_id": "TZkCVkZyDgRfflgE",
"type": "MOD",
@ -2674,7 +2710,7 @@
{
"pakku_id": "SG15bUHPcW2KqNGd",
"type": "MOD",
"side": "BOTH",
"side": "CLIENT",
"slug": {
"curseforge": "detected-setblock-be-gone"
},