2013-07-14 04:39:25 +02:00
|
|
|
-- Pipeworks mod by Vanessa Ezekowitz - 2013-07-13
|
2012-07-12 23:52:35 +02:00
|
|
|
--
|
2013-07-14 04:39:25 +02:00
|
|
|
-- This mod supplies various steel pipes and plastic pneumatic tubes
|
|
|
|
-- and devices that they can connect to.
|
2012-07-12 23:52:35 +02:00
|
|
|
--
|
|
|
|
|
2013-10-29 19:08:23 +01:00
|
|
|
pipeworks = {}
|
2021-04-02 21:48:28 +02:00
|
|
|
pipeworks.ui_cat_tube_list = {}
|
2013-10-29 19:08:23 +01:00
|
|
|
|
|
|
|
pipeworks.worldpath = minetest.get_worldpath()
|
|
|
|
pipeworks.modpath = minetest.get_modpath("pipeworks")
|
2020-02-18 18:34:52 +01:00
|
|
|
local S = minetest.get_translator("pipeworks")
|
2012-08-18 14:46:17 +02:00
|
|
|
|
2022-03-15 02:39:58 +01:00
|
|
|
pipeworks.liquids = {}
|
|
|
|
pipeworks.liquids.water = {
|
|
|
|
source = minetest.registered_nodes["mapgen_water_source"].name,
|
|
|
|
flowing = minetest.registered_nodes["mapgen_water_source"].liquid_alternative_flowing
|
|
|
|
}
|
|
|
|
pipeworks.liquids.river_water = {
|
|
|
|
source = minetest.registered_nodes["mapgen_river_water_source"].name,
|
|
|
|
flowing = minetest.registered_nodes["mapgen_river_water_source"].liquid_alternative_flowing
|
|
|
|
}
|
|
|
|
|
2017-04-14 03:13:30 +02:00
|
|
|
dofile(pipeworks.modpath.."/default_settings.lua")
|
2013-12-18 02:36:21 +01:00
|
|
|
-- Read the external config file if it exists.
|
2016-05-28 02:37:56 +02:00
|
|
|
local worldsettingspath = pipeworks.worldpath.."/pipeworks_settings.txt"
|
|
|
|
local worldsettingsfile = io.open(worldsettingspath, "r")
|
2016-05-23 19:52:26 +02:00
|
|
|
if worldsettingsfile then
|
|
|
|
worldsettingsfile:close()
|
|
|
|
dofile(worldsettingspath)
|
2013-07-14 04:39:25 +02:00
|
|
|
end
|
2017-10-20 23:46:51 +02:00
|
|
|
if pipeworks.toggles.pipe_mode == "pressure" then
|
2017-10-20 22:34:08 +02:00
|
|
|
minetest.log("warning", "pipeworks pressure logic mode comes with caveats and differences in behaviour, you have been warned!")
|
2017-09-27 18:37:46 +02:00
|
|
|
end
|
2022-05-25 01:13:41 +02:00
|
|
|
if pipeworks.entity_update_interval >= 0.2 and pipeworks.enable_accelerator_tube then
|
|
|
|
minetest.log("warning", "pipeworks accelerator tubes will not entirely work with an entity update interval 0.2 or above.")
|
|
|
|
end
|
2012-08-06 03:29:59 +02:00
|
|
|
|
2013-12-15 10:35:59 +01:00
|
|
|
-- Random variables
|
|
|
|
|
2013-12-15 08:53:10 +01:00
|
|
|
pipeworks.expect_infinite_stacks = true
|
2017-05-18 11:33:56 +02:00
|
|
|
if minetest.get_modpath("unified_inventory") or not minetest.settings:get_bool("creative_mode") then
|
2013-12-15 11:26:39 +01:00
|
|
|
pipeworks.expect_infinite_stacks = false
|
2013-06-08 07:00:49 +02:00
|
|
|
end
|
|
|
|
|
2013-12-15 08:53:10 +01:00
|
|
|
pipeworks.meseadjlist={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=0,y=1,z=0},{x=0,y=-1,z=0},{x=1,y=0,z=0},{x=-1,y=0,z=0}}
|
|
|
|
|
2013-12-21 09:33:06 +01:00
|
|
|
pipeworks.rules_all = {{x=0, y=0, z=1},{x=0, y=0, z=-1},{x=1, y=0, z=0},{x=-1, y=0, z=0},
|
|
|
|
{x=0, y=1, z=1},{x=0, y=1, z=-1},{x=1, y=1, z=0},{x=-1, y=1, z=0},
|
|
|
|
{x=0, y=-1, z=1},{x=0, y=-1, z=-1},{x=1, y=-1, z=0},{x=-1, y=-1, z=0},
|
|
|
|
{x=0, y=1, z=0}, {x=0, y=-1, z=0}}
|
|
|
|
|
|
|
|
pipeworks.mesecons_rules={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=1,z=0},{x=0,y=-1,z=0}}
|
2017-09-26 05:19:35 +02:00
|
|
|
pipeworks.digilines_rules={{x=0,y=0,z=1},{x=0,y=0,z=-1},{x=1,y=0,z=0},{x=-1,y=0,z=0},{x=0,y=1,z=0},{x=0,y=-1,z=0}}
|
2013-12-21 09:33:06 +01:00
|
|
|
|
2022-03-15 02:39:58 +01:00
|
|
|
pipeworks.liquid_texture = minetest.registered_nodes[pipeworks.liquids.water.flowing].tiles[1]
|
|
|
|
if type(pipeworks.liquid_texture) == "table" then pipeworks.liquid_texture = pipeworks.liquid_texture.name end
|
2013-12-15 10:35:59 +01:00
|
|
|
|
2017-04-12 01:16:21 +02:00
|
|
|
pipeworks.button_off = {text="", texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"}
|
|
|
|
pipeworks.button_on = {text="", texture="pipeworks_button_on.png", addopts="false;false;pipeworks_button_interm.png"}
|
|
|
|
pipeworks.button_base = "image_button[0,4.3;1,0.6"
|
2020-02-18 18:34:52 +01:00
|
|
|
pipeworks.button_label = "label[0.9,4.31;"..S("Allow splitting incoming stacks from tubes").."]"
|
2017-04-12 00:52:39 +02:00
|
|
|
|
2013-12-15 08:53:10 +01:00
|
|
|
-- Helper functions
|
|
|
|
|
|
|
|
function pipeworks.fix_image_names(table, replacement)
|
|
|
|
local outtable={}
|
2012-08-18 14:46:17 +02:00
|
|
|
for i in ipairs(table) do
|
|
|
|
outtable[i]=string.gsub(table[i], "_XXXXX", replacement)
|
2012-08-06 03:29:59 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
return outtable
|
|
|
|
end
|
|
|
|
|
2022-05-12 00:41:28 +02:00
|
|
|
local function overlay_tube_texture(texture)
|
|
|
|
-- The texture appears the first time to be colorized as the opaque background.
|
|
|
|
return ("(%s)^[noalpha^[colorize:#dadada^(%s)"):format(texture, texture)
|
|
|
|
end
|
|
|
|
|
|
|
|
function pipeworks.make_tube_tile(tile)
|
|
|
|
if pipeworks.use_real_entities then
|
|
|
|
return tile
|
|
|
|
elseif type(tile) == "string" then
|
|
|
|
return overlay_tube_texture(tile)
|
|
|
|
else
|
|
|
|
tile = table.copy(tile)
|
|
|
|
if tile.color then
|
|
|
|
-- Won't work 100% of the time, but good enough.
|
|
|
|
tile.name = tile.name .. "^[multiply:" .. minetest.colorspec_to_colorstring(tile.color)
|
|
|
|
tile.color = nil
|
|
|
|
end
|
|
|
|
tile.name = overlay_tube_texture(tile.name)
|
|
|
|
tile.backface_culling = nil -- The texture is opaque
|
|
|
|
return tile
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2013-12-15 10:35:59 +01:00
|
|
|
function pipeworks.add_node_box(t, b)
|
2015-01-15 12:25:41 +01:00
|
|
|
if not t or not b then return end
|
2012-08-18 14:46:17 +02:00
|
|
|
for i in ipairs(b)
|
|
|
|
do table.insert(t, b[i])
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-03-05 11:14:30 +01:00
|
|
|
function pipeworks.may_configure(pos, player)
|
|
|
|
local name = player:get_player_name()
|
|
|
|
local meta = minetest.get_meta(pos)
|
|
|
|
local owner = meta:get_string("owner")
|
|
|
|
|
2020-09-24 13:12:32 +02:00
|
|
|
if owner ~= "" and owner == name then -- wielders and filters
|
|
|
|
return true
|
2015-03-05 11:14:30 +01:00
|
|
|
end
|
|
|
|
return not minetest.is_protected(pos, name)
|
|
|
|
end
|
|
|
|
|
2013-12-15 08:53:10 +01:00
|
|
|
function pipeworks.replace_name(tbl,tr,name)
|
2013-07-14 04:39:25 +02:00
|
|
|
local ntbl={}
|
|
|
|
for key,i in pairs(tbl) do
|
|
|
|
if type(i)=="string" then
|
|
|
|
ntbl[key]=string.gsub(i,tr,name)
|
|
|
|
elseif type(i)=="table" then
|
2013-12-15 08:53:10 +01:00
|
|
|
ntbl[key]=pipeworks.replace_name(i,tr,name)
|
2013-07-14 04:39:25 +02:00
|
|
|
else
|
|
|
|
ntbl[key]=i
|
2012-08-19 04:12:29 +02:00
|
|
|
end
|
2012-08-18 14:46:17 +02:00
|
|
|
end
|
2013-07-14 04:39:25 +02:00
|
|
|
return ntbl
|
2012-08-18 14:46:17 +02:00
|
|
|
end
|
|
|
|
|
2017-10-01 17:17:35 +02:00
|
|
|
pipeworks.logger = function(msg)
|
|
|
|
print("[pipeworks] "..msg)
|
|
|
|
end
|
|
|
|
|
2013-12-15 10:35:59 +01:00
|
|
|
-------------------------------------------
|
|
|
|
-- Load the various other parts of the mod
|
2013-06-22 23:51:57 +02:00
|
|
|
|
2017-10-03 21:53:49 +02:00
|
|
|
-- early auto-detection for finite water mode if not explicitly disabled
|
|
|
|
if pipeworks.toggles.finite_water == nil then
|
|
|
|
dofile(pipeworks.modpath.."/autodetect-finite-water.lua")
|
|
|
|
end
|
|
|
|
|
2019-09-23 18:21:54 +02:00
|
|
|
if minetest.get_modpath("signs_lib") then
|
|
|
|
dofile(pipeworks.modpath.."/signs_compat.lua")
|
|
|
|
end
|
|
|
|
|
2014-08-14 16:22:03 +02:00
|
|
|
dofile(pipeworks.modpath.."/common.lua")
|
2013-12-15 10:35:59 +01:00
|
|
|
dofile(pipeworks.modpath.."/models.lua")
|
2013-11-26 05:55:52 +01:00
|
|
|
dofile(pipeworks.modpath.."/autoplace_pipes.lua")
|
|
|
|
dofile(pipeworks.modpath.."/autoplace_tubes.lua")
|
2014-08-14 16:22:03 +02:00
|
|
|
dofile(pipeworks.modpath.."/luaentity.lua")
|
2013-10-29 19:08:23 +01:00
|
|
|
dofile(pipeworks.modpath.."/item_transport.lua")
|
|
|
|
dofile(pipeworks.modpath.."/flowing_logic.lua")
|
2015-01-29 22:52:13 +01:00
|
|
|
dofile(pipeworks.modpath.."/tube_registration.lua")
|
2015-01-29 22:24:14 +01:00
|
|
|
dofile(pipeworks.modpath.."/routing_tubes.lua")
|
|
|
|
dofile(pipeworks.modpath.."/sorting_tubes.lua")
|
|
|
|
dofile(pipeworks.modpath.."/vacuum_tubes.lua")
|
|
|
|
dofile(pipeworks.modpath.."/signal_tubes.lua")
|
2015-01-31 00:06:27 +01:00
|
|
|
dofile(pipeworks.modpath.."/decorative_tubes.lua")
|
2015-01-29 19:55:00 +01:00
|
|
|
dofile(pipeworks.modpath.."/filter-injector.lua")
|
2014-07-15 01:52:33 +02:00
|
|
|
dofile(pipeworks.modpath.."/trashcan.lua")
|
2014-07-22 16:33:16 +02:00
|
|
|
dofile(pipeworks.modpath.."/wielder.lua")
|
2013-07-14 04:39:25 +02:00
|
|
|
|
2017-10-17 15:20:55 +02:00
|
|
|
local logicdir = "/pressure_logic/"
|
2017-10-01 00:55:16 +02:00
|
|
|
|
2017-10-01 19:23:58 +02:00
|
|
|
-- note that even with these files the new flow logic is not yet default.
|
|
|
|
-- registration will take place but no actual ABMs/node logic will be installed,
|
2017-10-03 21:38:56 +02:00
|
|
|
-- unless the toggle flag is specifically enabled in the per-world settings flag.
|
2017-10-01 16:18:00 +02:00
|
|
|
dofile(pipeworks.modpath..logicdir.."flowable_node_registry.lua")
|
2017-10-01 00:55:16 +02:00
|
|
|
dofile(pipeworks.modpath..logicdir.."abms.lua")
|
|
|
|
dofile(pipeworks.modpath..logicdir.."abm_register.lua")
|
2017-10-01 16:18:00 +02:00
|
|
|
dofile(pipeworks.modpath..logicdir.."flowable_node_registry_install.lua")
|
2017-09-30 21:16:00 +02:00
|
|
|
|
2013-12-15 10:43:13 +01:00
|
|
|
if pipeworks.enable_pipes then dofile(pipeworks.modpath.."/pipes.lua") end
|
|
|
|
if pipeworks.enable_teleport_tube then dofile(pipeworks.modpath.."/teleport_tube.lua") end
|
|
|
|
if pipeworks.enable_pipe_devices then dofile(pipeworks.modpath.."/devices.lua") end
|
2022-05-13 04:52:17 +02:00
|
|
|
if pipeworks.enable_redefines and (minetest.get_modpath("default") or minetest.get_modpath("hades_core")) then
|
2017-04-11 05:13:44 +02:00
|
|
|
dofile(pipeworks.modpath.."/compat-chests.lua")
|
|
|
|
dofile(pipeworks.modpath.."/compat-furnaces.lua")
|
|
|
|
end
|
2013-12-15 10:43:13 +01:00
|
|
|
if pipeworks.enable_autocrafter then dofile(pipeworks.modpath.."/autocrafter.lua") end
|
2018-12-08 21:01:47 +01:00
|
|
|
if pipeworks.enable_lua_tube and
|
|
|
|
(minetest.get_modpath("mesecons") or minetest.get_modpath("digilines")) then
|
|
|
|
dofile(pipeworks.modpath.."/lua_tube.lua")
|
|
|
|
end
|
2014-07-11 15:15:37 +02:00
|
|
|
|
2022-03-15 02:39:58 +01:00
|
|
|
dofile(pipeworks.modpath.."/crafts.lua")
|
|
|
|
|
2013-07-14 04:39:25 +02:00
|
|
|
minetest.register_alias("pipeworks:pipe", "pipeworks:pipe_110000_empty")
|
2013-02-01 00:49:47 +01:00
|
|
|
|
2021-04-02 21:48:28 +02:00
|
|
|
-- Unified Inventory categories integration
|
|
|
|
|
2021-05-13 19:57:58 +02:00
|
|
|
if minetest.global_exists("unified_inventory") and unified_inventory.registered_categories then
|
2021-04-02 21:48:28 +02:00
|
|
|
if not unified_inventory.registered_categories["automation"] then
|
|
|
|
unified_inventory.register_category("automation", {
|
|
|
|
symbol = "pipeworks:lua_tube000000",
|
|
|
|
label = "Automation components"
|
|
|
|
})
|
|
|
|
end
|
|
|
|
unified_inventory.add_category_items("automation", pipeworks.ui_cat_tube_list)
|
|
|
|
end
|
|
|
|
|
2016-02-21 09:15:43 +01:00
|
|
|
minetest.log("info", "Pipeworks loaded!")
|