183 lines
8.1 KiB
Lua
183 lines
8.1 KiB
Lua
--- @alias setting_allowed_value
|
|
--- | 'none'
|
|
--- | 'chest'
|
|
--- | 'warehouse'
|
|
--- | 'chest-warehouse'
|
|
--- | 'trashdump'
|
|
--- | 'chest-trashdump'
|
|
--- | 'warehouse-trashdump'
|
|
--- | 'chest-warehouse-trashdump'
|
|
|
|
--- @alias register_options
|
|
--- | { disable_chest?: boolean, disable_warehouse?: boolean, disable_trashdump?: boolean }
|
|
--- | { default_value?: setting_allowed_value, order?: string }
|
|
--- | { size_settings?: boolean, inventory_settings?: boolean, threshold_setting?: boolean, circuit_connection_setting?: boolean }
|
|
|
|
--- Creates a mod setting for configuring how `chest_name` should be mergeable.
|
|
--- Also allows to configure other mod settings for each chest type separately.
|
|
--- @param chest_name string Name of the mergeable chest (for example 'wooden-chest', 'iron-chest' or 'steel-chest')
|
|
--- @param options register_options | nil
|
|
function MergingChests.create_mergeable_chest_setting(chest_name, options)
|
|
options = options or {}
|
|
|
|
local allowed_values = {
|
|
'none'
|
|
}
|
|
if not options.disable_chest then
|
|
table.insert(allowed_values, 'chest')
|
|
end
|
|
if not options.disable_warehouse then
|
|
table.insert(allowed_values, 'warehouse')
|
|
end
|
|
if not options.disable_trashdump then
|
|
table.insert(allowed_values, 'trashdump')
|
|
end
|
|
if not options.disable_chest and not options.disable_warehouse then
|
|
table.insert(allowed_values, 'chest-warehouse')
|
|
end
|
|
if not options.disable_chest and not options.disable_trashdump then
|
|
table.insert(allowed_values, 'chest-trashdump')
|
|
end
|
|
if not options.disable_warehouse and not options.disable_trashdump then
|
|
table.insert(allowed_values, 'warehouse-trashdump')
|
|
end
|
|
if not options.disable_chest and not options.disable_warehouse and not options.disable_trashdump then
|
|
table.insert(allowed_values, 'chest-warehouse-trashdump')
|
|
end
|
|
|
|
if table_size(allowed_values) <= 1 then
|
|
error('All mergeable modes are disabled for '..chest_name)
|
|
end
|
|
|
|
local has_custom_settings = options.size_settings or options.inventory_settings or options.threshold_setting or options.circuit_connection_setting
|
|
|
|
data:extend({
|
|
{
|
|
name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.mergeable_chest, chest_name),
|
|
type = 'string-setting',
|
|
setting_type = 'startup',
|
|
default_value = options.default_value or allowed_values[#allowed_values],
|
|
allowed_values = allowed_values,
|
|
order = (has_custom_settings and '99-' or '01-')..(options.order or chest_name)..'-01'
|
|
}
|
|
})
|
|
|
|
if options.size_settings then
|
|
data:extend({
|
|
{
|
|
name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_width, chest_name),
|
|
type = 'int-setting',
|
|
setting_type = 'startup',
|
|
minimum_value = 2,
|
|
default_value = 10,
|
|
order = '99-'..(options.order or chest_name)..'-02'
|
|
},
|
|
{
|
|
name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_height, chest_name),
|
|
type = 'int-setting',
|
|
setting_type = 'startup',
|
|
minimum_value = 2,
|
|
default_value = 10,
|
|
order = '99-'..(options.order or chest_name)..'-03'
|
|
},
|
|
{
|
|
name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_area, chest_name),
|
|
type = 'int-setting',
|
|
setting_type = 'startup',
|
|
minimum_value = 2,
|
|
default_value = 100,
|
|
order = '99-'..(options.order or chest_name)..'-04'
|
|
},
|
|
{
|
|
name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.whitelist, chest_name),
|
|
type = 'string-setting',
|
|
setting_type = 'startup',
|
|
default_value = 'NxN',
|
|
allow_blank = true,
|
|
order = '99-'..(options.order or chest_name)..'-05'
|
|
},
|
|
{
|
|
name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.mirror_whitelist, chest_name),
|
|
type = 'bool-setting',
|
|
setting_type = 'startup',
|
|
default_value = false,
|
|
order = '99-'..(options.order or chest_name)..'-06'
|
|
}
|
|
})
|
|
end
|
|
|
|
if options.inventory_settings then
|
|
data:extend({
|
|
{
|
|
name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.inventory_size_multiplier, chest_name),
|
|
type = 'double-setting',
|
|
setting_type = 'startup',
|
|
minimum_value = 0,
|
|
default_value = 1.0,
|
|
order = '99-'..(options.order or chest_name)..'-07'
|
|
},
|
|
{
|
|
name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.inventory_size_limit, chest_name),
|
|
type = 'int-setting',
|
|
setting_type = 'startup',
|
|
minimum_value = 1,
|
|
maximum_value = 65535,
|
|
default_value = 1000,
|
|
order = '99-'..(options.order or chest_name)..'-08'
|
|
}
|
|
})
|
|
end
|
|
|
|
if options.threshold_setting then
|
|
data:extend({
|
|
{
|
|
name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.warehouse_threshold, chest_name),
|
|
type = 'int-setting',
|
|
setting_type = 'startup',
|
|
minimum_value = 2,
|
|
default_value = 5,
|
|
order = '99-'..(options.order or chest_name)..'-09'
|
|
}
|
|
})
|
|
end
|
|
|
|
if options.circuit_connection_setting then
|
|
data:extend({
|
|
{
|
|
name = MergingChests.chest_specific_setting_name(MergingChests.setting_names.circuit_connector_position, chest_name),
|
|
type = 'string-setting',
|
|
setting_type = 'startup',
|
|
default_value = 'center-center',
|
|
allowed_values = {
|
|
'center-center',
|
|
'right-top',
|
|
'right-middle',
|
|
'right-bottom',
|
|
'left-top',
|
|
'left-middle',
|
|
'left-bottom',
|
|
'bottom-right',
|
|
'bottom-middle',
|
|
'bottom-left'
|
|
},
|
|
order = '99-'..(options.order or chest_name)..'-10'
|
|
}
|
|
})
|
|
end
|
|
end
|
|
|
|
--- Deletes specified chest name settings. Useful for other mods which remove some type of chest
|
|
--- @param chest_name string
|
|
function MergingChests.delete_chest_name_settings(chest_name)
|
|
data.raw['string-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.mergeable_chest, chest_name)] = nil
|
|
data.raw['int-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_width, chest_name)] = nil
|
|
data.raw['int-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_height, chest_name)] = nil
|
|
data.raw['int-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.max_area, chest_name)] = nil
|
|
data.raw['string-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.whitelist, chest_name)] = nil
|
|
data.raw['bool-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.mirror_whitelist, chest_name)] = nil
|
|
data.raw['int-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.inventory_size_limit, chest_name)] = nil
|
|
data.raw['double-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.inventory_size_multiplier, chest_name)] = nil
|
|
data.raw['int-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.warehouse_threshold, chest_name)] = nil
|
|
data.raw['string-setting'][MergingChests.chest_specific_setting_name(MergingChests.setting_names.circuit_connector_position, chest_name)] = nil
|
|
end
|