Wooden logistics: Change compatibility to stick closer to how wooden logistics does things (breaking change)

This commit is contained in:
Simon Brodtmann 2025-12-15 22:26:42 +01:00
parent 52725edc46
commit 3115b51e4e
7 changed files with 261 additions and 238 deletions

View file

@ -9,3 +9,4 @@ require("wood-industry")
require("crushing-industry")
require("canal-excavator")
require("diversitree")
require("wood-logistics")

View file

@ -0,0 +1,125 @@
local Item = require("__cf-lib__/data/Item")
local Recipe = require("__cf-lib__/data/Recipe")
local Technology = require("__cf-lib__/data/Technology")
if not mods["wood-logistics"] then
return
end
local basic_circuit_board = settings.startup["lignumis-basic-circuit-board"].value
-- Lumber
if settings.startup["wood-logistics-lumber"].value then
Recipe:new("lumber"):addCategory("wood-processing")
end
-- Lumber mill
if settings.startup["wood-logistics-lumber-mill"].value then
local lumberMill = data.raw["assembling-machine"]["lumber-mill"]
table.assign(lumberMill, {
energy_source = {
type = "burner",
fuel_categories = { "chemical" },
effectivity = 1,
fuel_inventory_size = 3,
emissions_per_minute = { pollution = 10, noise = 100 },
},
surface_conditions = {
{
property = has_oxygen and "oxygen" or "pressure",
min = 3
},
{
property = "gravity",
min = 1
}
}
})
table.insert(lumberMill.crafting_categories, "wood-processing")
data.raw.item["lumber-mill"].default_import_location = "lignumis"
table.assign(data.raw.recipe["lumber-mill"], {
additional_categories = { "wood-processing" },
ingredients = table.trim({
{ type = "item", name = "stone-brick", amount = 40 },
{ type = "item", name = "lumber", amount = 50 },
{ type = "item", name = "wooden-gear-wheel", amount = 50 },
{ type = "item", name = "gold-plate", amount = basic_circuit_board and 20 or 40 },
basic_circuit_board and { type = "item", name = "basic-circuit-board", amount = 20 } or nil,
{ type = "item", name = "burner-assembling-machine", amount = 2 }
})
})
Recipe:new("lumber-mill")
:clone("lumber-mill-copper")
:assign({
localised_name = { "entity-name.lumber-mill" },
icons = {
{ icon = data.raw.item["lumber-mill"].icon },
{ icon = basic_circuit_board and "__base__/graphics/icons/copper-plate.png" or "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
}
})
:replaceIngredient("gold-plate", "copper-plate")
:apply()
Technology:new(basic_circuit_board and "copper-processing" or "electronics"):addRecipe("lumber-mill-copper")
end
-- Wooden belts
if settings.startup["wood-logistics-belts"].value then
Recipe:new("wood-transport-belt")
:replaceIngredient("copper-cable", "wooden-gear-wheel", 1)
:assign({
additional_categories = { "wood-processing" }
})
Recipe:new("wood-underground-belt")
:assign({
additional_categories = { "wood-processing" }
})
Recipe:new("wood-splitter")
:replaceIngredient("copper-cable", basic_circuit_board and "basic-circuit-board" or "gold-cable", basic_circuit_board and 5 or nil)
:assign({
additional_categories = { "wood-processing" }
})
if not basic_circuit_board then
Recipe:new("wood-splitter")
:clone("wood-splitter-electronic-circuit")
:replaceIngredient(basic_circuit_board and "gold-cable" or "basic-circuit-board", "electronic-circuit", 2)
:assign({
localised_name = { "entity-name.wood-splitter" },
icons = {
{ icon = data.raw.item["wood-splitter"].icon },
{ icon = "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
}
})
:unlockedByTechnology("electronics")
:apply()
end
Item:new("wood-transport-belt")
:itemsPerRocket(200)
:defaultImportLocation("lignumis")
Item:new("wood-underground-belt")
:itemsPerRocket(100)
:defaultImportLocation("lignumis")
Item:new("wood-splitter")
:itemsPerRocket(100)
:defaultImportLocation("lignumis")
Technology:new("wood-logistics"):assign({
prerequisites = { "wood-science-pack" },
unit = {
count = 10,
ingredients = { { "wood-science-pack", 1 } },
time = 10
}
})
Technology:new("logistics"):setPrerequisites({ "automation-science-pack" })
end

View file

@ -14,7 +14,10 @@ data:extend({
local has_oxygen = data.raw["surface-property"]["oxygen"] ~= nil
if not mods["wood-logistics"] then
if mods["wood-logistics"] then
return
end
LumberMill.EntityBuilder:new()
:burnerEnergySource({ emissions_per_minute = { noise = 100 } })
:baseProductivity(0.5)
@ -80,59 +83,6 @@ if not mods["wood-logistics"] then
})
Technology:new(basic_circuit_board and "copper-processing" or "electronics"):addRecipe("lumber-mill-copper")
else
table.assign(data.raw["assembling-machine"]["lumber-mill"], {
energy_source = {
type = "burner",
fuel_categories = { "chemical" },
effectivity = 1,
fuel_inventory_size = 3,
emissions_per_minute = { pollution = 10, noise = 100 },
},
crafting_categories = { "wood-processing" },
energy_usage = "1000kW",
module_slots = 4,
max_health = 500,
surface_conditions = {
{
property = has_oxygen and "oxygen" or "pressure",
min = 3
},
{
property = "gravity",
min = 1
}
}
})
data.raw.item["lumber-mill"].default_import_location = "lignumis"
table.assign(data.raw.recipe["lumber-mill"], {
additional_categories = { "wood-processing" },
ingredients = table.trim({
{ type = "item", name = "stone-brick", amount = 40 },
{ type = "item", name = "lumber", amount = 50 },
{ type = "item", name = "wooden-gear-wheel", amount = 50 },
{ type = "item", name = "gold-plate", amount = basic_circuit_board and 20 or 40 },
basic_circuit_board and { type = "item", name = "basic-circuit-board", amount = 20 } or nil,
{ type = "item", name = "burner-assembling-machine", amount = 2 }
})
})
Recipe:new("lumber-mill")
:clone("lumber-mill-copper")
:assign({
localised_name = { "entity-name.lumber-mill" },
icons = {
{ icon = data.raw.item["lumber-mill"].icon },
{ icon = basic_circuit_board and "__base__/graphics/icons/copper-plate.png" or "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
}
})
:replaceIngredient("gold-plate", "copper-plate")
:apply()
Technology:new(basic_circuit_board and "copper-processing" or "electronics"):addRecipe("lumber-mill-copper")
end
Recipe:new("wooden-chest"):addCategory("wood-processing")
Recipe:new("small-electric-pole"):addCategory("wood-processing")

View file

@ -1,8 +1,10 @@
local item_sounds = require("__base__.prototypes.item_sounds")
local Recipe = require("__cf-lib__/data/Recipe")
if not mods["wood-logistics"] then
data:extend({
if mods["wood-logistics"] and settings.startup["wood-logistics-lumber"].value then
return
end
data:extend({
{
type = "item",
name = "lumber",
@ -33,7 +35,4 @@ if not mods["wood-logistics"] then
results = { { type = "item", name = "lumber", amount = 1 } },
energy_required = 1
}
})
else
Recipe:new("lumber"):addCategory("wood-processing")
end
})

View file

@ -1,12 +1,13 @@
local BeltFactory = require(MF.logistics .. "Belts")
local Belt = BeltFactory("wood", "brown", "slow")
local Recipe = require("__cf-lib__/data/Recipe")
local Item = require("__cf-lib__/data/Item")
local basic_circuit_board = settings.startup["lignumis-basic-circuit-board"].value
if not mods["wood-logistics"] then
Belt.EntityBuilder:new()
if mods["wood-logistics"] and settings.startup["wood-logistics-belts"].value then
return
end
Belt.EntityBuilder:new()
:itemsPerSecond(7.5)
:nextTier("")
:undergroundDistance(4)
@ -35,7 +36,7 @@ if not mods["wood-logistics"] then
}
})
local splitter_item = Belt.ItemBuilder:new()
local splitter_item = Belt.ItemBuilder:new()
:itemsPerRocket("transportBelt", 200)
:itemsPerRocket("undergroundBelt", 100)
:itemsPerRocket("splitter", 100)
@ -43,7 +44,7 @@ if not mods["wood-logistics"] then
:apply()
.splitter
Belt.RecipeBuilder:new()
Belt.RecipeBuilder:new()
:beltAmount(2)
:ingredients("transportBelt", {
{ type = "item", name = "lumber", amount = 1 },
@ -71,14 +72,14 @@ if not mods["wood-logistics"] then
}
})
Belt.TechnologyBuilder:new()
Belt.TechnologyBuilder:new()
:prerequisites({ "wood-science-pack" })
:ingredients({ { "wood-science-pack", 1 } })
:count(10)
:time(10)
:apply()
if not basic_circuit_board then
if not basic_circuit_board then
data:extend({
Belt.RecipeBuilder:new()
:ingredients("splitter", {
@ -104,48 +105,4 @@ if not mods["wood-logistics"] then
type = "unlock-recipe",
recipe = "wood-splitter-electronic-circuit"
})
end
else
Recipe:new("wood-transport-belt")
:replaceIngredient("copper-cable", "wooden-gear-wheel", 1)
:assign({
additional_categories = { "wood-processing" }
})
Recipe:new("wood-underground-belt")
:assign({
additional_categories = { "wood-processing" }
})
Recipe:new("wood-splitter")
:replaceIngredient("copper-cable", basic_circuit_board and "basic-circuit-board" or "gold-cable", basic_circuit_board and 5 or nil)
:assign({
additional_categories = { "wood-processing" }
})
if not basic_circuit_board then
Recipe:new("wood-splitter")
:clone("wood-splitter-electronic-circuit")
:replaceIngredient(basic_circuit_board and "gold-cable" or "basic-circuit-board", "electronic-circuit", 2)
:assign({
localised_name = { "entity-name.wood-splitter" },
icons = {
{ icon = data.raw.item["wood-splitter"].icon },
{ icon = "__base__/graphics/icons/electronic-circuit.png", scale = 0.25, shift = { 8, 8 } }
}
})
:unlockedByTechnology("electronics")
:apply()
end
Item:new("wood-transport-belt")
:itemsPerRocket(200)
:defaultImportLocation("lignumis")
Item:new("wood-underground-belt")
:itemsPerRocket(100)
:defaultImportLocation("lignumis")
Item:new("wood-splitter")
:itemsPerRocket(100)
:defaultImportLocation("lignumis")
end

View file

@ -70,7 +70,9 @@ if settings.startup["lignumis-vanilla-lab"].value then
Recipe:new("transport-belt"):unlockedByTechnology("iron-processing")
else
Recipe:new("lab"):replaceIngredient("transport-belt", "wood-transport-belt")
if not mods["wood-logistics"] or not settings.startup["wood-logistics-belts"].value then
Recipe:new("transport-belt"):unlockedByTechnology("logistics")
end
end

View file

@ -6,15 +6,4 @@ local Settings = require("__cf-lib__/settings/Settings")
local force = Settings.force
local default = Settings.default
force("wood-logistics-lumber", true)
force("wood-logistics-lumber-mill", true)
force("wood-logistics-woodtronics", false)
force("wood-logistics-belts", true)
force("wood-logistics-belts-modify", false)
default("wood-logistics-belts-circuits", true)
force("wood-logistics-inserter", false)
default("wood-logistics-rail-cost", 0)
default("wood-logistics-cargo-wagon", false)
force("wood-logistics-assembling-machine", false)
default("wood-logistics-nerf-small-electric-pole", false)
force("wood-logistics-repair-pack-cost", 0)