forked from mtcontrib/pipeworks
		
	Compare commits
	
		
			15 Commits
		
	
	
		
			ba2e4333c5
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					6e11868d1b | ||
| 
						 | 
					2ebc4ac92d | ||
| 
						 | 
					d39ff8a097 | ||
| 
						 | 
					1b77b64c08 | ||
| 
						 | 
					e23a2fda3d | ||
| 
						 | 
					ad8984c72b | ||
| 
						 | 
					e657d0476a | ||
| 
						 | 
					8d34ff9079 | ||
| 
						 | 
					999b43baea | ||
| 
						 | 
					c8bccec038 | ||
| 
						 | 
					b0496fcd41 | ||
| 
						 | 
					858154cb78 | ||
| 
						 | 
					dd660c3c1c | ||
| 
						 | 
					dcc62eb231 | ||
| 
						 | 
					222a865e17 | 
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,4 @@
 | 
				
			|||||||
## Files related to minetest development cycle
 | 
					## Files related to luanti development cycle
 | 
				
			||||||
/*.patch
 | 
					/*.patch
 | 
				
			||||||
# GNU Patch reject file
 | 
					# GNU Patch reject file
 | 
				
			||||||
*.rej
 | 
					*.rej
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,8 +9,10 @@ globals = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
read_globals = {
 | 
					read_globals = {
 | 
				
			||||||
 | 
						-- remove after luacheck release: https://github.com/lunarmodules/luacheck/issues/121
 | 
				
			||||||
 | 
						"core",
 | 
				
			||||||
	-- mods
 | 
						-- mods
 | 
				
			||||||
	"default", "mesecon", "digiline",
 | 
						"default", "mesecon", "digilines",
 | 
				
			||||||
	"screwdriver", "unified_inventory",
 | 
						"screwdriver", "unified_inventory",
 | 
				
			||||||
	"i3", "mcl_experience", "awards",
 | 
						"i3", "mcl_experience", "awards",
 | 
				
			||||||
	"xcompat", "fakelib", "vizlib"
 | 
						"xcompat", "fakelib", "vizlib"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
-- cache some recipe data to avoid calling the slow function
 | 
					-- cache some recipe data to avoid calling the slow function
 | 
				
			||||||
-- minetest.get_craft_result() every second
 | 
					-- core.get_craft_result() every second
 | 
				
			||||||
local autocrafterCache = {}
 | 
					local autocrafterCache = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local craft_time = 1
 | 
					local craft_time = 1
 | 
				
			||||||
@@ -20,7 +20,7 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local function get_item_info(stack)
 | 
					local function get_item_info(stack)
 | 
				
			||||||
	local name = stack:get_name()
 | 
						local name = stack:get_name()
 | 
				
			||||||
	local def = minetest.registered_items[name]
 | 
						local def = core.registered_items[name]
 | 
				
			||||||
	local description = def and def.description or S("Unknown item")
 | 
						local description = def and def.description or S("Unknown item")
 | 
				
			||||||
	return description, name
 | 
						return description, name
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@@ -28,7 +28,7 @@ end
 | 
				
			|||||||
-- Get best matching recipe for what user has put in crafting grid.
 | 
					-- Get best matching recipe for what user has put in crafting grid.
 | 
				
			||||||
-- This function does not consider crafting method (mix vs craft)
 | 
					-- This function does not consider crafting method (mix vs craft)
 | 
				
			||||||
local function get_matching_craft(output_name, example_recipe)
 | 
					local function get_matching_craft(output_name, example_recipe)
 | 
				
			||||||
	local recipes = minetest.get_all_craft_recipes(output_name)
 | 
						local recipes = core.get_all_craft_recipes(output_name)
 | 
				
			||||||
	if not recipes then
 | 
						if not recipes then
 | 
				
			||||||
		return example_recipe
 | 
							return example_recipe
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -49,7 +49,7 @@ local function get_matching_craft(output_name, example_recipe)
 | 
				
			|||||||
			elseif recipe_item_name:sub(1, 6) == "group:" then
 | 
								elseif recipe_item_name:sub(1, 6) == "group:" then
 | 
				
			||||||
				group = recipe_item_name:sub(7)
 | 
									group = recipe_item_name:sub(7)
 | 
				
			||||||
				for example_item_name, _ in pairs(index_example) do
 | 
									for example_item_name, _ in pairs(index_example) do
 | 
				
			||||||
					if minetest.get_item_group(
 | 
										if core.get_item_group(
 | 
				
			||||||
						example_item_name, group) ~= 0
 | 
											example_item_name, group) ~= 0
 | 
				
			||||||
					then
 | 
										then
 | 
				
			||||||
						score = score + 1
 | 
											score = score + 1
 | 
				
			||||||
@@ -68,12 +68,12 @@ local function get_matching_craft(output_name, example_recipe)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function get_craft(pos, inventory, hash)
 | 
					local function get_craft(pos, inventory, hash)
 | 
				
			||||||
	local hash = hash or minetest.hash_node_position(pos)
 | 
						local hash = hash or core.hash_node_position(pos)
 | 
				
			||||||
	local craft = autocrafterCache[hash]
 | 
						local craft = autocrafterCache[hash]
 | 
				
			||||||
	if craft then return craft end
 | 
						if craft then return craft end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local example_recipe = inventory:get_list("recipe")
 | 
						local example_recipe = inventory:get_list("recipe")
 | 
				
			||||||
	local output, decremented_input = minetest.get_craft_result({
 | 
						local output, decremented_input = core.get_craft_result({
 | 
				
			||||||
		method = "normal", width = 3, items = example_recipe
 | 
							method = "normal", width = 3, items = example_recipe
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -132,7 +132,7 @@ local function calculate_consumption(inv_index, consumption_with_groups)
 | 
				
			|||||||
		local found = 0
 | 
							local found = 0
 | 
				
			||||||
		local count_ingredient_groups = #ingredient_groups
 | 
							local count_ingredient_groups = #ingredient_groups
 | 
				
			||||||
		for i = 1, count_ingredient_groups do
 | 
							for i = 1, count_ingredient_groups do
 | 
				
			||||||
			if minetest.get_item_group(name,
 | 
								if core.get_item_group(name,
 | 
				
			||||||
				ingredient_groups[i]) ~= 0
 | 
									ingredient_groups[i]) ~= 0
 | 
				
			||||||
			then
 | 
								then
 | 
				
			||||||
				found = found + 1
 | 
									found = found + 1
 | 
				
			||||||
@@ -241,7 +241,7 @@ local function autocraft(inventory, craft)
 | 
				
			|||||||
	for i = 1, 9 do
 | 
						for i = 1, 9 do
 | 
				
			||||||
		leftover = inventory:add_item("dst", craft.decremented_input[i])
 | 
							leftover = inventory:add_item("dst", craft.decremented_input[i])
 | 
				
			||||||
		if leftover and not leftover:is_empty() then
 | 
							if leftover and not leftover:is_empty() then
 | 
				
			||||||
			minetest.log("warning", "[pipeworks] autocrafter didn't " ..
 | 
								core.log("warning", "[pipeworks] autocrafter didn't " ..
 | 
				
			||||||
				"calculate output space correctly.")
 | 
									"calculate output space correctly.")
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -252,7 +252,7 @@ end
 | 
				
			|||||||
-- is started only from start_autocrafter(pos) after sanity checks and
 | 
					-- is started only from start_autocrafter(pos) after sanity checks and
 | 
				
			||||||
-- recipe is cached
 | 
					-- recipe is cached
 | 
				
			||||||
local function run_autocrafter(pos, elapsed)
 | 
					local function run_autocrafter(pos, elapsed)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	local inventory = meta:get_inventory()
 | 
						local inventory = meta:get_inventory()
 | 
				
			||||||
	local craft = get_craft(pos, inventory)
 | 
						local craft = get_craft(pos, inventory)
 | 
				
			||||||
	local output_item = craft.output.item
 | 
						local output_item = craft.output.item
 | 
				
			||||||
@@ -270,9 +270,9 @@ local function run_autocrafter(pos, elapsed)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function start_crafter(pos)
 | 
					local function start_crafter(pos)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	if meta:get_int("enabled") == 1 then
 | 
						if meta:get_int("enabled") == 1 then
 | 
				
			||||||
		local timer = minetest.get_node_timer(pos)
 | 
							local timer = core.get_node_timer(pos)
 | 
				
			||||||
		if not timer:is_started() then
 | 
							if not timer:is_started() then
 | 
				
			||||||
			timer:start(craft_time)
 | 
								timer:start(craft_time)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
@@ -286,12 +286,12 @@ end
 | 
				
			|||||||
-- note, that this function assumes allready being updated to virtual items
 | 
					-- note, that this function assumes allready being updated to virtual items
 | 
				
			||||||
-- and doesn't handle recipes with stacksizes > 1
 | 
					-- and doesn't handle recipes with stacksizes > 1
 | 
				
			||||||
local function after_recipe_change(pos, inventory)
 | 
					local function after_recipe_change(pos, inventory)
 | 
				
			||||||
	local hash = minetest.hash_node_position(pos)
 | 
						local hash = core.hash_node_position(pos)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	autocrafterCache[hash] = nil
 | 
						autocrafterCache[hash] = nil
 | 
				
			||||||
	-- if we emptied the grid, there's no point in keeping it running or cached
 | 
						-- if we emptied the grid, there's no point in keeping it running or cached
 | 
				
			||||||
	if inventory:is_empty("recipe") then
 | 
						if inventory:is_empty("recipe") then
 | 
				
			||||||
		minetest.get_node_timer(pos):stop()
 | 
							core.get_node_timer(pos):stop()
 | 
				
			||||||
		meta:set_string("infotext", S("unconfigured Autocrafter"))
 | 
							meta:set_string("infotext", S("unconfigured Autocrafter"))
 | 
				
			||||||
		inventory:set_stack("output", 1, "")
 | 
							inventory:set_stack("output", 1, "")
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -307,12 +307,12 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- clean out unknown items and groups, which would be handled like unknown
 | 
					-- clean out unknown items and groups, which would be handled like unknown
 | 
				
			||||||
-- items in the crafting grid
 | 
					-- items in the crafting grid
 | 
				
			||||||
-- if minetest supports query by group one day, this might replace them
 | 
					-- if Luanti supports query by group one day, this might replace them
 | 
				
			||||||
-- with a canonical version instead
 | 
					-- with a canonical version instead
 | 
				
			||||||
local function normalize(item_list)
 | 
					local function normalize(item_list)
 | 
				
			||||||
	for i = 1, #item_list do
 | 
						for i = 1, #item_list do
 | 
				
			||||||
		local name = item_list[i]
 | 
							local name = item_list[i]
 | 
				
			||||||
		if not minetest.registered_items[name] then
 | 
							if not core.registered_items[name] then
 | 
				
			||||||
			item_list[i] = ""
 | 
								item_list[i] = ""
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -324,7 +324,7 @@ local function on_output_change(pos, inventory, stack)
 | 
				
			|||||||
		inventory:set_list("output", {})
 | 
							inventory:set_list("output", {})
 | 
				
			||||||
		inventory:set_list("recipe", {})
 | 
							inventory:set_list("recipe", {})
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		local input = minetest.get_craft_recipe(stack:get_name())
 | 
							local input = core.get_craft_recipe(stack:get_name())
 | 
				
			||||||
		if not input.items or input.type ~= "normal" then return end
 | 
							if not input.items or input.type ~= "normal" then return end
 | 
				
			||||||
		local items, width = normalize(input.items), input.width
 | 
							local items, width = normalize(input.items), input.width
 | 
				
			||||||
		local item_idx, width_idx = 1, 1
 | 
							local item_idx, width_idx = 1, 1
 | 
				
			||||||
@@ -349,7 +349,7 @@ local function update_meta(meta, enabled)
 | 
				
			|||||||
	local state = enabled and "on" or "off"
 | 
						local state = enabled and "on" or "off"
 | 
				
			||||||
	meta:set_int("enabled", enabled and 1 or 0)
 | 
						meta:set_int("enabled", enabled and 1 or 0)
 | 
				
			||||||
	local list_backgrounds = ""
 | 
						local list_backgrounds = ""
 | 
				
			||||||
	if minetest.get_modpath("i3") or minetest.get_modpath("mcl_formspec") then
 | 
						if core.get_modpath("i3") or core.get_modpath("mcl_formspec") then
 | 
				
			||||||
		list_backgrounds = "style_type[box;colors=#666]"
 | 
							list_backgrounds = "style_type[box;colors=#666]"
 | 
				
			||||||
		for i = 0, 2 do
 | 
							for i = 0, 2 do
 | 
				
			||||||
			for j = 0, 2 do
 | 
								for j = 0, 2 do
 | 
				
			||||||
@@ -389,7 +389,7 @@ local function update_meta(meta, enabled)
 | 
				
			|||||||
		"listring[current_player;main]" ..
 | 
							"listring[current_player;main]" ..
 | 
				
			||||||
		"listring[context;dst]" ..
 | 
							"listring[context;dst]" ..
 | 
				
			||||||
		"listring[current_player;main]"
 | 
							"listring[current_player;main]"
 | 
				
			||||||
	if minetest.get_modpath("digilines") then
 | 
						if core.get_modpath("digilines") then
 | 
				
			||||||
		fs = fs .. "field[0.22,4.1;4.5,0.75;channel;" .. S("Channel") ..
 | 
							fs = fs .. "field[0.22,4.1;4.5,0.75;channel;" .. S("Channel") ..
 | 
				
			||||||
			";${channel}]" ..
 | 
								";${channel}]" ..
 | 
				
			||||||
			"button[5,4.1;1.5,0.75;set_channel;" .. S("Set") .. "]" ..
 | 
								"button[5,4.1;1.5,0.75;set_channel;" .. S("Set") .. "]" ..
 | 
				
			||||||
@@ -422,7 +422,7 @@ end
 | 
				
			|||||||
-- so we work out way backwards on this history and update each single case
 | 
					-- so we work out way backwards on this history and update each single case
 | 
				
			||||||
--   to the newest version
 | 
					--   to the newest version
 | 
				
			||||||
local function upgrade_autocrafter(pos, meta)
 | 
					local function upgrade_autocrafter(pos, meta)
 | 
				
			||||||
	local meta = meta or minetest.get_meta(pos)
 | 
						local meta = meta or core.get_meta(pos)
 | 
				
			||||||
	local inv = meta:get_inventory()
 | 
						local inv = meta:get_inventory()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if inv:get_size("output") == 0 then -- we are version 2 or 1
 | 
						if inv:get_size("output") == 0 then -- we are version 2 or 1
 | 
				
			||||||
@@ -439,7 +439,7 @@ local function upgrade_autocrafter(pos, meta)
 | 
				
			|||||||
			if not recipe then return end
 | 
								if not recipe then return end
 | 
				
			||||||
			for idx, stack in ipairs(recipe) do
 | 
								for idx, stack in ipairs(recipe) do
 | 
				
			||||||
				if not stack:is_empty() then
 | 
									if not stack:is_empty() then
 | 
				
			||||||
					minetest.add_item(pos, stack)
 | 
										core.add_item(pos, stack)
 | 
				
			||||||
					stack:set_count(1)
 | 
										stack:set_count(1)
 | 
				
			||||||
					stack:set_wear(0)
 | 
										stack:set_wear(0)
 | 
				
			||||||
					inv:set_stack("recipe", idx, stack)
 | 
										inv:set_stack("recipe", idx, stack)
 | 
				
			||||||
@@ -448,12 +448,12 @@ local function upgrade_autocrafter(pos, meta)
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- update the recipe, cache, and start the crafter
 | 
							-- update the recipe, cache, and start the crafter
 | 
				
			||||||
		autocrafterCache[minetest.hash_node_position(pos)] = nil
 | 
							autocrafterCache[core.hash_node_position(pos)] = nil
 | 
				
			||||||
		after_recipe_change(pos, inv)
 | 
							after_recipe_change(pos, inv)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:autocrafter", {
 | 
					core.register_node("pipeworks:autocrafter", {
 | 
				
			||||||
	description = S("Autocrafter"),
 | 
						description = S("Autocrafter"),
 | 
				
			||||||
	drawtype = "normal",
 | 
						drawtype = "normal",
 | 
				
			||||||
	tiles = {"pipeworks_autocrafter.png"},
 | 
						tiles = {"pipeworks_autocrafter.png"},
 | 
				
			||||||
@@ -461,14 +461,14 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
	is_ground_content = false,
 | 
						is_ground_content = false,
 | 
				
			||||||
	_mcl_hardness=0.8,
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
	tube = {insert_object = function(pos, node, stack, direction)
 | 
						tube = {insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
								local inv = meta:get_inventory()
 | 
				
			||||||
			local added = inv:add_item("src", stack)
 | 
								local added = inv:add_item("src", stack)
 | 
				
			||||||
			after_inventory_change(pos)
 | 
								after_inventory_change(pos)
 | 
				
			||||||
			return added
 | 
								return added
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		can_insert = function(pos, node, stack, direction)
 | 
							can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
								local inv = meta:get_inventory()
 | 
				
			||||||
			return inv:room_for_item("src", stack)
 | 
								return inv:room_for_item("src", stack)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
@@ -478,7 +478,7 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	on_construct = function(pos)
 | 
						on_construct = function(pos)
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = core.get_meta(pos)
 | 
				
			||||||
		local inv = meta:get_inventory()
 | 
							local inv = meta:get_inventory()
 | 
				
			||||||
		inv:set_size("src", 3 * 8)
 | 
							inv:set_size("src", 3 * 8)
 | 
				
			||||||
		inv:set_size("recipe", 3 * 3)
 | 
							inv:set_size("recipe", 3 * 3)
 | 
				
			||||||
@@ -492,10 +492,10 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
		then
 | 
							then
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = core.get_meta(pos)
 | 
				
			||||||
		if fields.on then
 | 
							if fields.on then
 | 
				
			||||||
			update_meta(meta, false)
 | 
								update_meta(meta, false)
 | 
				
			||||||
			minetest.get_node_timer(pos):stop()
 | 
								core.get_node_timer(pos):stop()
 | 
				
			||||||
		elseif fields.off then
 | 
							elseif fields.off then
 | 
				
			||||||
			if update_meta(meta, true) then
 | 
								if update_meta(meta, true) then
 | 
				
			||||||
				start_crafter(pos)
 | 
									start_crafter(pos)
 | 
				
			||||||
@@ -507,7 +507,7 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
	end,
 | 
						end,
 | 
				
			||||||
	can_dig = function(pos, player)
 | 
						can_dig = function(pos, player)
 | 
				
			||||||
		upgrade_autocrafter(pos)
 | 
							upgrade_autocrafter(pos)
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = core.get_meta(pos)
 | 
				
			||||||
		local inv = meta:get_inventory()
 | 
							local inv = meta:get_inventory()
 | 
				
			||||||
		return (inv:is_empty("src") and inv:is_empty("dst"))
 | 
							return (inv:is_empty("src") and inv:is_empty("dst"))
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
@@ -516,12 +516,12 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
		pipeworks.scan_for_tube_objects(pos)
 | 
							pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	on_destruct = function(pos)
 | 
						on_destruct = function(pos)
 | 
				
			||||||
		autocrafterCache[minetest.hash_node_position(pos)] = nil
 | 
							autocrafterCache[core.hash_node_position(pos)] = nil
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	allow_metadata_inventory_put = function(pos, listname, index, stack, player)
 | 
						allow_metadata_inventory_put = function(pos, listname, index, stack, player)
 | 
				
			||||||
		if not pipeworks.may_configure(pos, player) then return 0 end
 | 
							if not pipeworks.may_configure(pos, player) then return 0 end
 | 
				
			||||||
		upgrade_autocrafter(pos)
 | 
							upgrade_autocrafter(pos)
 | 
				
			||||||
		local inv = minetest.get_meta(pos):get_inventory()
 | 
							local inv = core.get_meta(pos):get_inventory()
 | 
				
			||||||
		if listname == "recipe" then
 | 
							if listname == "recipe" then
 | 
				
			||||||
			stack:set_count(1)
 | 
								stack:set_count(1)
 | 
				
			||||||
			inv:set_stack(listname, index, stack)
 | 
								inv:set_stack(listname, index, stack)
 | 
				
			||||||
@@ -536,13 +536,13 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
	end,
 | 
						end,
 | 
				
			||||||
	allow_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
						allow_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
				
			||||||
		if not pipeworks.may_configure(pos, player) then
 | 
							if not pipeworks.may_configure(pos, player) then
 | 
				
			||||||
			minetest.log("action", string.format("%s attempted to take from " ..
 | 
								core.log("action", string.format("%s attempted to take from " ..
 | 
				
			||||||
				"autocrafter at %s",
 | 
									"autocrafter at %s",
 | 
				
			||||||
				player:get_player_name(), minetest.pos_to_string(pos)))
 | 
									player:get_player_name(), core.pos_to_string(pos)))
 | 
				
			||||||
			return 0
 | 
								return 0
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		upgrade_autocrafter(pos)
 | 
							upgrade_autocrafter(pos)
 | 
				
			||||||
		local inv = minetest.get_meta(pos):get_inventory()
 | 
							local inv = core.get_meta(pos):get_inventory()
 | 
				
			||||||
		if listname == "recipe" then
 | 
							if listname == "recipe" then
 | 
				
			||||||
			inv:set_stack(listname, index, ItemStack(""))
 | 
								inv:set_stack(listname, index, ItemStack(""))
 | 
				
			||||||
			after_recipe_change(pos, inv)
 | 
								after_recipe_change(pos, inv)
 | 
				
			||||||
@@ -559,7 +559,7 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		if not pipeworks.may_configure(pos, player) then return 0 end
 | 
							if not pipeworks.may_configure(pos, player) then return 0 end
 | 
				
			||||||
		upgrade_autocrafter(pos)
 | 
							upgrade_autocrafter(pos)
 | 
				
			||||||
		local inv = minetest.get_meta(pos):get_inventory()
 | 
							local inv = core.get_meta(pos):get_inventory()
 | 
				
			||||||
		local stack = inv:get_stack(from_list, from_index)
 | 
							local stack = inv:get_stack(from_list, from_index)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if to_list == "output" then
 | 
							if to_list == "output" then
 | 
				
			||||||
@@ -588,21 +588,22 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
		return count
 | 
							return count
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	on_timer = run_autocrafter,
 | 
						on_timer = run_autocrafter,
 | 
				
			||||||
	digiline = {
 | 
						digilines = {
 | 
				
			||||||
		receptor = {},
 | 
							receptor = {},
 | 
				
			||||||
		effector = {
 | 
							effector = {
 | 
				
			||||||
			action = function(pos,node,channel,msg)
 | 
								action = function(pos,node,channel,msg)
 | 
				
			||||||
				local meta = minetest.get_meta(pos)
 | 
									local meta = core.get_meta(pos)
 | 
				
			||||||
				if channel ~= meta:get_string("channel") then return end
 | 
									if channel ~= meta:get_string("channel") then return end
 | 
				
			||||||
				if type(msg) == "table" then
 | 
									if type(msg) == "table" then
 | 
				
			||||||
					if #msg < 3 then return end
 | 
										if #msg < 3 then return end
 | 
				
			||||||
					local inv = meta:get_inventory()
 | 
										local inv = meta:get_inventory()
 | 
				
			||||||
					for y = 0, 2, 1 do
 | 
										for y = 0, 2, 1 do
 | 
				
			||||||
 | 
											local row = msg[y + 1]
 | 
				
			||||||
						for x = 1, 3, 1 do
 | 
											for x = 1, 3, 1 do
 | 
				
			||||||
							local slot = y * 3 + x
 | 
												local slot = y * 3 + x
 | 
				
			||||||
							if minetest.registered_items[msg[y + 1][x]] then
 | 
												if type(row) == "table" and core.registered_items[row[x]] then
 | 
				
			||||||
								inv:set_stack("recipe", slot, ItemStack(
 | 
													inv:set_stack("recipe", slot, ItemStack(
 | 
				
			||||||
									msg[y + 1][x]))
 | 
														row[x]))
 | 
				
			||||||
							else
 | 
												else
 | 
				
			||||||
								inv:set_stack("recipe", slot, ItemStack(""))
 | 
													inv:set_stack("recipe", slot, ItemStack(""))
 | 
				
			||||||
							end
 | 
												end
 | 
				
			||||||
@@ -610,7 +611,7 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
					end
 | 
										end
 | 
				
			||||||
					after_recipe_change(pos,inv)
 | 
										after_recipe_change(pos,inv)
 | 
				
			||||||
				elseif msg == "get_recipe" then
 | 
									elseif msg == "get_recipe" then
 | 
				
			||||||
					local meta = minetest.get_meta(pos)
 | 
										local meta = core.get_meta(pos)
 | 
				
			||||||
					local inv = meta:get_inventory()
 | 
										local inv = meta:get_inventory()
 | 
				
			||||||
					local recipe = {}
 | 
										local recipe = {}
 | 
				
			||||||
					for y = 0, 2, 1 do
 | 
										for y = 0, 2, 1 do
 | 
				
			||||||
@@ -624,7 +625,7 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
					end
 | 
										end
 | 
				
			||||||
					local setchan = meta:get_string("channel")
 | 
										local setchan = meta:get_string("channel")
 | 
				
			||||||
					local output = inv:get_stack("output", 1)
 | 
										local output = inv:get_stack("output", 1)
 | 
				
			||||||
					digiline:receptor_send(pos, digiline.rules.default, setchan, {
 | 
										digilines.receptor_send(pos, digilines.rules.default, setchan, {
 | 
				
			||||||
						recipe = recipe,
 | 
											recipe = recipe,
 | 
				
			||||||
						result = {
 | 
											result = {
 | 
				
			||||||
							name = output:get_name(),
 | 
												name = output:get_name(),
 | 
				
			||||||
@@ -633,7 +634,7 @@ minetest.register_node("pipeworks:autocrafter", {
 | 
				
			|||||||
					  })
 | 
										  })
 | 
				
			||||||
				elseif msg == "off" then
 | 
									elseif msg == "off" then
 | 
				
			||||||
					update_meta(meta, false)
 | 
										update_meta(meta, false)
 | 
				
			||||||
					minetest.get_node_timer(pos):stop()
 | 
										core.get_node_timer(pos):stop()
 | 
				
			||||||
				elseif msg == "on" then
 | 
									elseif msg == "on" then
 | 
				
			||||||
					if update_meta(meta, true) then
 | 
										if update_meta(meta, true) then
 | 
				
			||||||
						start_crafter(pos)
 | 
											start_crafter(pos)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
-- enable finite liquid in the presence of dynamic liquid to preserve water volume.
 | 
					-- enable finite liquid in the presence of dynamic liquid to preserve water volume.
 | 
				
			||||||
local enable = false
 | 
					local enable = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("dynamic_liquid") then
 | 
					if core.get_modpath("dynamic_liquid") then
 | 
				
			||||||
	pipeworks.logger("detected mod dynamic_liquid, enabling finite liquid flag")
 | 
						pipeworks.logger("detected mod dynamic_liquid, enabling finite liquid flag")
 | 
				
			||||||
	enable = true
 | 
						enable = true
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,32 +31,32 @@ function pipeworks.get_axis_dir(nodetable, pattern)
 | 
				
			|||||||
	local pxm,pxp,pym,pyp,pzm,pzp
 | 
						local pxm,pxp,pym,pyp,pzm,pzp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if string.find(nodetable.nxm.name, pattern)
 | 
						if string.find(nodetable.nxm.name, pattern)
 | 
				
			||||||
	  and minetest.facedir_to_dir(nodetable.nxm.param2).x ~= 0 then
 | 
						  and core.facedir_to_dir(nodetable.nxm.param2).x ~= 0 then
 | 
				
			||||||
		pxm=1
 | 
							pxm=1
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if string.find(nodetable.nxp.name, pattern)
 | 
						if string.find(nodetable.nxp.name, pattern)
 | 
				
			||||||
	  and minetest.facedir_to_dir(nodetable.nxp.param2).x ~= 0 then
 | 
						  and core.facedir_to_dir(nodetable.nxp.param2).x ~= 0 then
 | 
				
			||||||
		pxp=1
 | 
							pxp=1
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if string.find(nodetable.nzm.name, pattern)
 | 
						if string.find(nodetable.nzm.name, pattern)
 | 
				
			||||||
	  and minetest.facedir_to_dir(nodetable.nzm.param2).z ~= 0 then
 | 
						  and core.facedir_to_dir(nodetable.nzm.param2).z ~= 0 then
 | 
				
			||||||
		pzm=1
 | 
							pzm=1
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if string.find(nodetable.nzp.name, pattern)
 | 
						if string.find(nodetable.nzp.name, pattern)
 | 
				
			||||||
	  and minetest.facedir_to_dir(nodetable.nzp.param2).z ~= 0 then
 | 
						  and core.facedir_to_dir(nodetable.nzp.param2).z ~= 0 then
 | 
				
			||||||
		pzp=1
 | 
							pzp=1
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if string.find(nodetable.nym.name, pattern)
 | 
						if string.find(nodetable.nym.name, pattern)
 | 
				
			||||||
	  and minetest.facedir_to_dir(nodetable.nym.param2).y ~= 0 then
 | 
						  and core.facedir_to_dir(nodetable.nym.param2).y ~= 0 then
 | 
				
			||||||
		pym=1
 | 
							pym=1
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if string.find(nodetable.nyp.name, pattern)
 | 
						if string.find(nodetable.nyp.name, pattern)
 | 
				
			||||||
	  and minetest.facedir_to_dir(nodetable.nyp.param2).y ~= 0 then
 | 
						  and core.facedir_to_dir(nodetable.nyp.param2).y ~= 0 then
 | 
				
			||||||
		pyp=1
 | 
							pyp=1
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local match = pxm or pxp or pym or pyp or pzm or pzp
 | 
						local match = pxm or pxp or pym or pyp or pzm or pzp
 | 
				
			||||||
@@ -67,14 +67,14 @@ local tube_table = {[0] = 1, 2, 2, 4, 2, 4, 4, 5, 2, 3, 4, 6, 4, 6, 5, 7, 2, 4,
 | 
				
			|||||||
local tube_table_facedirs = {[0] = 0, 0, 5, 0, 3, 4, 3, 0, 2, 0, 2, 0, 6, 4, 3, 0, 7, 12, 5, 12, 7, 4, 5, 5, 18, 20, 16, 0, 7, 4, 7, 0, 1, 8, 1, 1, 1, 13, 1, 1, 10, 8, 2, 2, 17, 4, 3, 6, 9, 9, 9, 9, 21, 13, 1, 1, 10, 10, 11, 2, 19, 4, 3, 0}
 | 
					local tube_table_facedirs = {[0] = 0, 0, 5, 0, 3, 4, 3, 0, 2, 0, 2, 0, 6, 4, 3, 0, 7, 12, 5, 12, 7, 4, 5, 5, 18, 20, 16, 0, 7, 4, 7, 0, 1, 8, 1, 1, 1, 13, 1, 1, 10, 8, 2, 2, 17, 4, 3, 6, 9, 9, 9, 9, 21, 13, 1, 1, 10, 10, 11, 2, 19, 4, 3, 0}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function autoroute_pipes(pos)
 | 
					local function autoroute_pipes(pos)
 | 
				
			||||||
	local nctr = minetest.get_node(pos)
 | 
						local nctr = core.get_node(pos)
 | 
				
			||||||
	local state = "_empty"
 | 
						local state = "_empty"
 | 
				
			||||||
	if (string.find(nctr.name, "pipeworks:pipe_") == nil) then return end
 | 
						if (string.find(nctr.name, "pipeworks:pipe_") == nil) then return end
 | 
				
			||||||
	if (string.find(nctr.name, "_loaded") ~= nil) then state = "_loaded" end
 | 
						if (string.find(nctr.name, "_loaded") ~= nil) then state = "_loaded" end
 | 
				
			||||||
	local nsurround = pipeworks.scan_pipe_surroundings(pos)
 | 
						local nsurround = pipeworks.scan_pipe_surroundings(pos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if nsurround == 0 then nsurround = 9 end
 | 
						if nsurround == 0 then nsurround = 9 end
 | 
				
			||||||
	minetest.swap_node(pos, {name = "pipeworks:pipe_"..tube_table[nsurround]..state,
 | 
						core.swap_node(pos, {name = "pipeworks:pipe_"..tube_table[nsurround]..state,
 | 
				
			||||||
				param2 = tube_table_facedirs[nsurround]})
 | 
									param2 = tube_table_facedirs[nsurround]})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -98,12 +98,12 @@ function pipeworks.scan_pipe_surroundings(pos)
 | 
				
			|||||||
	local pzm=0
 | 
						local pzm=0
 | 
				
			||||||
	local pzp=0
 | 
						local pzp=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local nxm = minetest.get_node({ x=pos.x-1, y=pos.y  , z=pos.z   })
 | 
						local nxm = core.get_node({ x=pos.x-1, y=pos.y  , z=pos.z   })
 | 
				
			||||||
	local nxp = minetest.get_node({ x=pos.x+1, y=pos.y  , z=pos.z   })
 | 
						local nxp = core.get_node({ x=pos.x+1, y=pos.y  , z=pos.z   })
 | 
				
			||||||
	local nym = minetest.get_node({ x=pos.x  , y=pos.y-1, z=pos.z   })
 | 
						local nym = core.get_node({ x=pos.x  , y=pos.y-1, z=pos.z   })
 | 
				
			||||||
	local nyp = minetest.get_node({ x=pos.x  , y=pos.y+1, z=pos.z   })
 | 
						local nyp = core.get_node({ x=pos.x  , y=pos.y+1, z=pos.z   })
 | 
				
			||||||
	local nzm = minetest.get_node({ x=pos.x  , y=pos.y  , z=pos.z-1 })
 | 
						local nzm = core.get_node({ x=pos.x  , y=pos.y  , z=pos.z-1 })
 | 
				
			||||||
	local nzp = minetest.get_node({ x=pos.x  , y=pos.y  , z=pos.z+1 })
 | 
						local nzp = core.get_node({ x=pos.x  , y=pos.y  , z=pos.z+1 })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local nodetable = {
 | 
						local nodetable = {
 | 
				
			||||||
		nxm = nxm,
 | 
							nxm = nxm,
 | 
				
			||||||
@@ -173,12 +173,12 @@ function pipeworks.scan_pipe_surroundings(pos)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- ... other nodes
 | 
					-- ... other nodes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local def_left   = minetest.registered_nodes[nxp.name] -- the node that {pos} is to the left of (not the
 | 
						local def_left   = core.registered_nodes[nxp.name] -- the node that {pos} is to the left of (not the
 | 
				
			||||||
	local def_right  = minetest.registered_nodes[nxm.name] -- ...note that is AT the left!), etc.
 | 
						local def_right  = core.registered_nodes[nxm.name] -- ...note that is AT the left!), etc.
 | 
				
			||||||
	local def_bottom = minetest.registered_nodes[nyp.name]
 | 
						local def_bottom = core.registered_nodes[nyp.name]
 | 
				
			||||||
	local def_top    = minetest.registered_nodes[nym.name]
 | 
						local def_top    = core.registered_nodes[nym.name]
 | 
				
			||||||
	local def_front  = minetest.registered_nodes[nzp.name]
 | 
						local def_front  = core.registered_nodes[nzp.name]
 | 
				
			||||||
	local def_back   = minetest.registered_nodes[nzm.name]
 | 
						local def_back   = core.registered_nodes[nzm.name]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if def_left and def_left.pipe_connections and def_left.pipe_connections.left
 | 
						if def_left and def_left.pipe_connections and def_left.pipe_connections.left
 | 
				
			||||||
	  and (not def_left.pipe_connections.pattern or string.find(nxp.name, def_left.pipe_connections.pattern))
 | 
						  and (not def_left.pipe_connections.pattern or string.find(nxp.name, def_left.pipe_connections.pattern))
 | 
				
			||||||
@@ -211,16 +211,16 @@ function pipeworks.scan_pipe_surroundings(pos)
 | 
				
			|||||||
		pzm = 1
 | 
							pzm = 1
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.log("info", "stage 2 returns "..pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp..
 | 
						core.log("info", "stage 2 returns "..pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp..
 | 
				
			||||||
		" for nodes surrounding "..minetest.get_node(pos).name.." at "..minetest.pos_to_string(pos))
 | 
							" for nodes surrounding "..core.get_node(pos).name.." at "..core.pos_to_string(pos))
 | 
				
			||||||
	return pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp
 | 
						return pxm+8*pxp+2*pym+16*pyp+4*pzm+32*pzp
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function pipeworks.look_for_stackable_tanks(pos)
 | 
					function pipeworks.look_for_stackable_tanks(pos)
 | 
				
			||||||
	local tym = minetest.get_node({ x=pos.x  , y=pos.y-1, z=pos.z   })
 | 
						local tym = core.get_node({ x=pos.x  , y=pos.y-1, z=pos.z   })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if string.find(tym.name, "pipeworks:storage_tank_") ~= nil or
 | 
						if string.find(tym.name, "pipeworks:storage_tank_") ~= nil or
 | 
				
			||||||
	    string.find(tym.name, "pipeworks:expansion_tank_") ~= nil then
 | 
						    string.find(tym.name, "pipeworks:expansion_tank_") ~= nil then
 | 
				
			||||||
		minetest.add_node(pos, { name =  "pipeworks:expansion_tank_0", param2 = tym.param2})
 | 
							core.add_node(pos, { name =  "pipeworks:expansion_tank_0", param2 = tym.param2})
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@ local function nodeside(node, tubedir)
 | 
				
			|||||||
		node.param2 = 0
 | 
							node.param2 = 0
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local backdir = minetest.facedir_to_dir(node.param2)
 | 
						local backdir = core.facedir_to_dir(node.param2)
 | 
				
			||||||
	local back = vector.dot(backdir, tubedir)
 | 
						local back = vector.dot(backdir, tubedir)
 | 
				
			||||||
	if back == 1 then
 | 
						if back == 1 then
 | 
				
			||||||
		return "back"
 | 
							return "back"
 | 
				
			||||||
@@ -40,7 +40,7 @@ local tube_table = {[0] = 1, 2, 2, 4, 2, 4, 4, 5, 2, 3, 4, 6, 4, 6, 5, 7, 2, 4,
 | 
				
			|||||||
local tube_table_facedirs = {[0] = 0, 0, 5, 0, 3, 4, 3, 0, 2, 0, 2, 0, 6, 4, 3, 0, 7, 12, 5, 12, 7, 4, 5, 5, 18, 20, 16, 0, 7, 4, 7, 0, 1, 8, 1, 1, 1, 13, 1, 1, 10, 8, 2, 2, 17, 4, 3, 6, 9, 9, 9, 9, 21, 13, 1, 1, 10, 10, 11, 2, 19, 4, 3, 0}
 | 
					local tube_table_facedirs = {[0] = 0, 0, 5, 0, 3, 4, 3, 0, 2, 0, 2, 0, 6, 4, 3, 0, 7, 12, 5, 12, 7, 4, 5, 5, 18, 20, 16, 0, 7, 4, 7, 0, 1, 8, 1, 1, 1, 13, 1, 1, 10, 8, 2, 2, 17, 4, 3, 6, 9, 9, 9, 9, 21, 13, 1, 1, 10, 10, 11, 2, 19, 4, 3, 0}
 | 
				
			||||||
local function tube_autoroute(pos)
 | 
					local function tube_autoroute(pos)
 | 
				
			||||||
	local active = {0, 0, 0, 0, 0, 0}
 | 
						local active = {0, 0, 0, 0, 0, 0}
 | 
				
			||||||
	local nctr = minetest.get_node(pos)
 | 
						local nctr = core.get_node(pos)
 | 
				
			||||||
	if not is_tube(nctr.name) then return end
 | 
						if not is_tube(nctr.name) then return end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local adjustments = {
 | 
						local adjustments = {
 | 
				
			||||||
@@ -57,9 +57,9 @@ local function tube_autoroute(pos)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for i, adj in ipairs(adjustments) do
 | 
						for i, adj in ipairs(adjustments) do
 | 
				
			||||||
		local position = vector.add(pos, adj)
 | 
							local position = vector.add(pos, adj)
 | 
				
			||||||
		local node = minetest.get_node(position)
 | 
							local node = core.get_node(position)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local idef = minetest.registered_nodes[node.name]
 | 
							local idef = core.registered_nodes[node.name]
 | 
				
			||||||
		-- handle the tubes themselves
 | 
							-- handle the tubes themselves
 | 
				
			||||||
		if is_tube(node.name) then
 | 
							if is_tube(node.name) then
 | 
				
			||||||
			active[i] = 1
 | 
								active[i] = 1
 | 
				
			||||||
@@ -73,11 +73,11 @@ local function tube_autoroute(pos)
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.get_meta(pos):set_string("adjlist", minetest.serialize(adjlist))
 | 
						core.get_meta(pos):set_string("adjlist", core.serialize(adjlist))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- all sides checked, now figure which tube to use.
 | 
						-- all sides checked, now figure which tube to use.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local nodedef = minetest.registered_nodes[nctr.name]
 | 
						local nodedef = core.registered_nodes[nctr.name]
 | 
				
			||||||
	local basename = nodedef.basename
 | 
						local basename = nodedef.basename
 | 
				
			||||||
	if nodedef.style == "old" then
 | 
						if nodedef.style == "old" then
 | 
				
			||||||
		local nsurround = ""
 | 
							local nsurround = ""
 | 
				
			||||||
@@ -95,7 +95,7 @@ local function tube_autoroute(pos)
 | 
				
			|||||||
		nctr.name = basename.."_"..tube_table[s]
 | 
							nctr.name = basename.."_"..tube_table[s]
 | 
				
			||||||
		nctr.param2 = tube_table_facedirs[s]
 | 
							nctr.param2 = tube_table_facedirs[s]
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	minetest.swap_node(pos, nctr)
 | 
						core.swap_node(pos, nctr)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function pipeworks.scan_for_tube_objects(pos)
 | 
					function pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
@@ -123,12 +123,12 @@ end
 | 
				
			|||||||
-- when they are updated.
 | 
					-- when they are updated.
 | 
				
			||||||
function pipeworks.on_rotate(pos, node, user, mode, new_param2)
 | 
					function pipeworks.on_rotate(pos, node, user, mode, new_param2)
 | 
				
			||||||
	node.param2 = new_param2
 | 
						node.param2 = new_param2
 | 
				
			||||||
	minetest.swap_node(pos, node)
 | 
						core.swap_node(pos, node)
 | 
				
			||||||
	pipeworks.scan_for_tube_objects(pos)
 | 
						pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
	return true
 | 
						return true
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("mesecons_mvps") then
 | 
					if core.get_modpath("mesecons_mvps") then
 | 
				
			||||||
	mesecon.register_on_mvps_move(function(moved_nodes)
 | 
						mesecon.register_on_mvps_move(function(moved_nodes)
 | 
				
			||||||
		for _, n in ipairs(moved_nodes) do
 | 
							for _, n in ipairs(moved_nodes) do
 | 
				
			||||||
			pipeworks.scan_for_tube_objects(n.pos)
 | 
								pipeworks.scan_for_tube_objects(n.pos)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ pipeworks.chests = {}
 | 
				
			|||||||
-- @param override: additional overrides, such as stuff to modify the node formspec
 | 
					-- @param override: additional overrides, such as stuff to modify the node formspec
 | 
				
			||||||
-- @param connect_sides: which directions the chests shall connect to
 | 
					-- @param connect_sides: which directions the chests shall connect to
 | 
				
			||||||
function pipeworks.override_chest(chestname, override, connect_sides)
 | 
					function pipeworks.override_chest(chestname, override, connect_sides)
 | 
				
			||||||
	local old_def = minetest.registered_nodes[chestname]
 | 
						local old_def = core.registered_nodes[chestname]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local tube_entry = "^pipeworks_tube_connection_wooden.png"
 | 
						local tube_entry = "^pipeworks_tube_connection_wooden.png"
 | 
				
			||||||
	override.tiles = override.tiles or old_def.tiles
 | 
						override.tiles = override.tiles or old_def.tiles
 | 
				
			||||||
@@ -64,12 +64,12 @@ function pipeworks.override_chest(chestname, override, connect_sides)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	override.tube = {
 | 
						override.tube = {
 | 
				
			||||||
		insert_object = function(pos, node, stack, direction)
 | 
							insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
								local inv = meta:get_inventory()
 | 
				
			||||||
			return inv:add_item("main", stack)
 | 
								return inv:add_item("main", stack)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		can_insert = function(pos, node, stack, direction)
 | 
							can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
								local inv = meta:get_inventory()
 | 
				
			||||||
			if meta:get_int("splitstacks") == 1 then
 | 
								if meta:get_int("splitstacks") == 1 then
 | 
				
			||||||
				stack = stack:peek_item(1)
 | 
									stack = stack:peek_item(1)
 | 
				
			||||||
@@ -85,6 +85,6 @@ function pipeworks.override_chest(chestname, override, connect_sides)
 | 
				
			|||||||
	override.groups.tubedevice = 1
 | 
						override.groups.tubedevice = 1
 | 
				
			||||||
	override.groups.tubedevice_receiver = 1
 | 
						override.groups.tubedevice_receiver = 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.override_item(chestname, override)
 | 
						core.override_item(chestname, override)
 | 
				
			||||||
	pipeworks.chests[chestname] = true
 | 
						pipeworks.chests[chestname] = true
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										40
									
								
								common.lua
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								common.lua
									
									
									
									
									
								
							@@ -1,9 +1,9 @@
 | 
				
			|||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Random variables
 | 
					-- Random variables
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.expect_infinite_stacks = true
 | 
					pipeworks.expect_infinite_stacks = true
 | 
				
			||||||
if minetest.get_modpath("unified_inventory") or not minetest.settings:get_bool("creative_mode") then
 | 
					if core.get_modpath("unified_inventory") or not core.settings:get_bool("creative_mode") then
 | 
				
			||||||
	pipeworks.expect_infinite_stacks = false
 | 
						pipeworks.expect_infinite_stacks = false
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -15,9 +15,19 @@ pipeworks.rules_all = {{x=0, y=0, z=1},{x=0, y=0, z=-1},{x=1, y=0, z=0},{x=-1, y
 | 
				
			|||||||
		{x=0, y=1, z=0}, {x=0, 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}}
 | 
					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}}
 | 
				
			||||||
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}}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.liquid_texture = minetest.registered_nodes[pipeworks.liquids.water.flowing].tiles[1]
 | 
					local digilines_enabled = core.get_modpath("digilines") ~= nil
 | 
				
			||||||
 | 
					if digilines_enabled and pipeworks.enable_vertical_digilines_connectivity then
 | 
				
			||||||
 | 
						pipeworks.digilines_rules=digilines.rules.default
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
						-- These rules break vertical connectivity to deployers, node breakers, dispensers, and digiline filter injectors
 | 
				
			||||||
 | 
						-- via digiline conducting tubes. Changing them may break some builds on some servers, so the setting was added
 | 
				
			||||||
 | 
						-- for server admins to be able to revert to the old "broken" behavior as some builds may use it as a "feature".
 | 
				
			||||||
 | 
						-- See https://github.com/mt-mods/pipeworks/issues/64
 | 
				
			||||||
 | 
						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}}
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pipeworks.liquid_texture = core.registered_nodes[pipeworks.liquids.water.flowing].tiles[1]
 | 
				
			||||||
if type(pipeworks.liquid_texture) == "table" then pipeworks.liquid_texture = pipeworks.liquid_texture.name end
 | 
					if type(pipeworks.liquid_texture) == "table" then pipeworks.liquid_texture = pipeworks.liquid_texture.name end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.button_off   = {text="", texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"}
 | 
					pipeworks.button_off   = {text="", texture="pipeworks_button_off.png", addopts="false;false;pipeworks_button_interm.png"}
 | 
				
			||||||
@@ -50,7 +60,7 @@ function pipeworks.make_tube_tile(tile)
 | 
				
			|||||||
		tile = table.copy(tile)
 | 
							tile = table.copy(tile)
 | 
				
			||||||
		if tile.color then
 | 
							if tile.color then
 | 
				
			||||||
			-- Won't work 100% of the time, but good enough.
 | 
								-- Won't work 100% of the time, but good enough.
 | 
				
			||||||
			tile.name = tile.name .. "^[multiply:" .. minetest.colorspec_to_colorstring(tile.color)
 | 
								tile.name = tile.name .. "^[multiply:" .. core.colorspec_to_colorstring(tile.color)
 | 
				
			||||||
			tile.color = nil
 | 
								tile.color = nil
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		tile.name = overlay_tube_texture(tile.name)
 | 
							tile.name = overlay_tube_texture(tile.name)
 | 
				
			||||||
@@ -68,13 +78,13 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function pipeworks.may_configure(pos, player)
 | 
					function pipeworks.may_configure(pos, player)
 | 
				
			||||||
	local name = player:get_player_name()
 | 
						local name = player:get_player_name()
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	local owner = meta:get_string("owner")
 | 
						local owner = meta:get_string("owner")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if owner ~= "" and owner == name then -- wielders and filters
 | 
						if owner ~= "" and owner == name then -- wielders and filters
 | 
				
			||||||
		return true
 | 
							return true
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	return not minetest.is_protected(pos, name)
 | 
						return not core.is_protected(pos, name)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function pipeworks.replace_name(tbl,tr,name)
 | 
					function pipeworks.replace_name(tbl,tr,name)
 | 
				
			||||||
@@ -108,7 +118,7 @@ end
 | 
				
			|||||||
function pipeworks.facedir_to_right_dir(facedir)
 | 
					function pipeworks.facedir_to_right_dir(facedir)
 | 
				
			||||||
	return vector.cross(
 | 
						return vector.cross(
 | 
				
			||||||
		pipeworks.facedir_to_top_dir(facedir),
 | 
							pipeworks.facedir_to_top_dir(facedir),
 | 
				
			||||||
		minetest.facedir_to_dir(facedir)
 | 
							core.facedir_to_dir(facedir)
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -171,7 +181,7 @@ end
 | 
				
			|||||||
local fs_helpers = {}
 | 
					local fs_helpers = {}
 | 
				
			||||||
pipeworks.fs_helpers = fs_helpers
 | 
					pipeworks.fs_helpers = fs_helpers
 | 
				
			||||||
function fs_helpers.on_receive_fields(pos, fields)
 | 
					function fs_helpers.on_receive_fields(pos, fields)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	for field in pairs(fields) do
 | 
						for field in pairs(fields) do
 | 
				
			||||||
		if field:match("^fs_helpers_cycling:") then
 | 
							if field:match("^fs_helpers_cycling:") then
 | 
				
			||||||
			local l = field:split(":")
 | 
								local l = field:split(":")
 | 
				
			||||||
@@ -198,12 +208,12 @@ function fs_helpers.cycling_button(meta, base, meta_name, values)
 | 
				
			|||||||
		text = val
 | 
							text = val
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local field = "fs_helpers_cycling:"..new_value..":"..meta_name
 | 
						local field = "fs_helpers_cycling:"..new_value..":"..meta_name
 | 
				
			||||||
	return base..";"..(texture_name and texture_name..";" or "")..field..";"..minetest.formspec_escape(text)..(addopts and ";"..addopts or "").."]"
 | 
						return base..";"..(texture_name and texture_name..";" or "")..field..";"..core.formspec_escape(text)..(addopts and ";"..addopts or "").."]"
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function fs_helpers.get_inv(y)
 | 
					function fs_helpers.get_inv(y)
 | 
				
			||||||
	local fs = {}
 | 
						local fs = {}
 | 
				
			||||||
	if minetest.get_modpath("i3") then
 | 
						if core.get_modpath("i3") then
 | 
				
			||||||
		local inv_x = i3.settings.legacy_inventory and 0.75 or 0.22
 | 
							local inv_x = i3.settings.legacy_inventory and 0.75 or 0.22
 | 
				
			||||||
		local inv_y = (y + 0.4) or 6.9
 | 
							local inv_y = (y + 0.4) or 6.9
 | 
				
			||||||
		local size, spacing = 1, 0.1
 | 
							local size, spacing = 1, 0.1
 | 
				
			||||||
@@ -228,7 +238,7 @@ function fs_helpers.get_inv(y)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		table.insert(fs, "style_type[list;size="..size..";spacing="..spacing.."]")
 | 
							table.insert(fs, "style_type[list;size="..size..";spacing="..spacing.."]")
 | 
				
			||||||
		table.insert(fs, "list[current_player;main;"..inv_x..","..(inv_y + 1.15)..";"..hotbar_len..","..(inv_size / hotbar_len)..";"..hotbar_len.."]")
 | 
							table.insert(fs, "list[current_player;main;"..inv_x..","..(inv_y + 1.15)..";"..hotbar_len..","..(inv_size / hotbar_len)..";"..hotbar_len.."]")
 | 
				
			||||||
	elseif minetest.get_modpath("mcl_formspec") then
 | 
						elseif core.get_modpath("mcl_formspec") then
 | 
				
			||||||
		local inv_x = 0.22
 | 
							local inv_x = 0.22
 | 
				
			||||||
		local inv_y = (y + 0.4) or 6.9
 | 
							local inv_y = (y + 0.4) or 6.9
 | 
				
			||||||
		local size, spacing = 1, 0.1
 | 
							local size, spacing = 1, 0.1
 | 
				
			||||||
@@ -263,7 +273,7 @@ end
 | 
				
			|||||||
function fs_helpers.get_prepends(size)
 | 
					function fs_helpers.get_prepends(size)
 | 
				
			||||||
	local prepend = {}
 | 
						local prepend = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if minetest.get_modpath("i3") then
 | 
						if core.get_modpath("i3") then
 | 
				
			||||||
		prepend = {
 | 
							prepend = {
 | 
				
			||||||
			"no_prepend[]",
 | 
								"no_prepend[]",
 | 
				
			||||||
			"bgcolor[black;neither]",
 | 
								"bgcolor[black;neither]",
 | 
				
			||||||
@@ -283,10 +293,10 @@ end
 | 
				
			|||||||
function pipeworks.load_position(pos)
 | 
					function pipeworks.load_position(pos)
 | 
				
			||||||
	if pos.x < -30912 or pos.y < -30912 or pos.z < -30912 or
 | 
						if pos.x < -30912 or pos.y < -30912 or pos.z < -30912 or
 | 
				
			||||||
	   pos.x >  30927 or pos.y >  30927 or pos.z >  30927 then return end
 | 
						   pos.x >  30927 or pos.y >  30927 or pos.z >  30927 then return end
 | 
				
			||||||
	if minetest.get_node_or_nil(pos) then
 | 
						if core.get_node_or_nil(pos) then
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local vm = minetest.get_voxel_manip()
 | 
						local vm = core.get_voxel_manip()
 | 
				
			||||||
	vm:read_from_map(pos, pos)
 | 
						vm:read_from_map(pos, pos)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ local function add_pipeworks_switch(formspec, pos)
 | 
				
			|||||||
	-- based on the sorting tubes
 | 
						-- based on the sorting tubes
 | 
				
			||||||
	formspec = formspec ..
 | 
						formspec = formspec ..
 | 
				
			||||||
			fs_helpers.cycling_button(
 | 
								fs_helpers.cycling_button(
 | 
				
			||||||
				minetest.get_meta(pos),
 | 
									core.get_meta(pos),
 | 
				
			||||||
				pipeworks.button_base,
 | 
									pipeworks.button_base,
 | 
				
			||||||
				"splitstacks",
 | 
									"splitstacks",
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
@@ -21,20 +21,20 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- helper to add the splitstacks switch to a node-formspec
 | 
					-- helper to add the splitstacks switch to a node-formspec
 | 
				
			||||||
local function update_node_formspec(pos)
 | 
					local function update_node_formspec(pos)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	local old_fs = meta:get_string("formspec")
 | 
						local old_fs = meta:get_string("formspec")
 | 
				
			||||||
	local new_fs = add_pipeworks_switch(old_fs, pos)
 | 
						local new_fs = add_pipeworks_switch(old_fs, pos)
 | 
				
			||||||
	meta:set_string("formspec", new_fs)
 | 
						meta:set_string("formspec", new_fs)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("default") then
 | 
					if core.get_modpath("default") then
 | 
				
			||||||
	-- add the pipeworks switch into the default chest formspec
 | 
						-- add the pipeworks switch into the default chest formspec
 | 
				
			||||||
	local old_get_chest_formspec = default.chest.get_chest_formspec
 | 
						local old_get_chest_formspec = default.chest.get_chest_formspec
 | 
				
			||||||
	-- luacheck: ignore 122
 | 
						-- luacheck: ignore 122
 | 
				
			||||||
	default.chest.get_chest_formspec = function(pos)
 | 
						default.chest.get_chest_formspec = function(pos)
 | 
				
			||||||
		local old_fs = old_get_chest_formspec(pos)
 | 
							local old_fs = old_get_chest_formspec(pos)
 | 
				
			||||||
		local node = minetest.get_node(pos)
 | 
							local node = core.get_node(pos)
 | 
				
			||||||
		-- not all chests using this formspec necessary connect to pipeworks
 | 
							-- not all chests using this formspec necessary connect to pipeworks
 | 
				
			||||||
		if pipeworks.chests[node.name] then
 | 
							if pipeworks.chests[node.name] then
 | 
				
			||||||
			local new_fs = add_pipeworks_switch(old_fs, pos)
 | 
								local new_fs = add_pipeworks_switch(old_fs, pos)
 | 
				
			||||||
@@ -45,8 +45,8 @@ if minetest.get_modpath("default") then
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- get the fields from the chest formspec, we can do this bc. newest functions are called first
 | 
						-- get the fields from the chest formspec, we can do this bc. newest functions are called first
 | 
				
			||||||
	-- https://github.com/minetest/minetest/blob/d4b10db998ebeb689b3d27368e30952a42169d03/doc/lua_api.md?plain=1#L5840
 | 
						-- https://github.com/luanti-org/luanti/blob/d4b10db998ebeb689b3d27368e30952a42169d03/doc/lua_api.md?plain=1#L5840
 | 
				
			||||||
	minetest.register_on_player_receive_fields(function(player, formname, fields)
 | 
						core.register_on_player_receive_fields(function(player, formname, fields)
 | 
				
			||||||
		if fields.quit or formname ~= "default:chest" then
 | 
							if fields.quit or formname ~= "default:chest" then
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
@@ -57,11 +57,11 @@ if minetest.get_modpath("default") then
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		local pos = chest_open.pos
 | 
							local pos = chest_open.pos
 | 
				
			||||||
		local node = minetest.get_node(pos)
 | 
							local node = core.get_node(pos)
 | 
				
			||||||
		if pipeworks.chests[node.name] and pipeworks.may_configure(pos, player) then
 | 
							if pipeworks.chests[node.name] and pipeworks.may_configure(pos, player) then
 | 
				
			||||||
			-- Pipeworks Switch
 | 
								-- Pipeworks Switch
 | 
				
			||||||
			fs_helpers.on_receive_fields(pos, fields)
 | 
								fs_helpers.on_receive_fields(pos, fields)
 | 
				
			||||||
			minetest.show_formspec(pn,
 | 
								core.show_formspec(pn,
 | 
				
			||||||
				"default:chest",
 | 
									"default:chest",
 | 
				
			||||||
				default.chest.get_chest_formspec(pos))
 | 
									default.chest.get_chest_formspec(pos))
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
@@ -76,7 +76,7 @@ if minetest.get_modpath("default") then
 | 
				
			|||||||
	pipeworks.override_chest("default:chest_open", {}, connect_sides_open)
 | 
						pipeworks.override_chest("default:chest_open", {}, connect_sides_open)
 | 
				
			||||||
	pipeworks.override_chest("default:chest_locked", {}, connect_sides)
 | 
						pipeworks.override_chest("default:chest_locked", {}, connect_sides)
 | 
				
			||||||
	pipeworks.override_chest("default:chest_locked_open", {}, connect_sides_open)
 | 
						pipeworks.override_chest("default:chest_locked_open", {}, connect_sides_open)
 | 
				
			||||||
elseif minetest.get_modpath("hades_chests") then
 | 
					elseif core.get_modpath("hades_chests") then
 | 
				
			||||||
	local chest_colors = {"", "white", "grey", "dark_grey", "black", "blue", "cyan", "dark_green", "green", "magenta",
 | 
						local chest_colors = {"", "white", "grey", "dark_grey", "black", "blue", "cyan", "dark_green", "green", "magenta",
 | 
				
			||||||
						  "orange", "pink", "red", "violet", "yellow"}
 | 
											  "orange", "pink", "red", "violet", "yellow"}
 | 
				
			||||||
	for _, color in ipairs(chest_colors) do
 | 
						for _, color in ipairs(chest_colors) do
 | 
				
			||||||
@@ -84,7 +84,7 @@ elseif minetest.get_modpath("hades_chests") then
 | 
				
			|||||||
				or "hades_chests:chest_" .. color
 | 
									or "hades_chests:chest_" .. color
 | 
				
			||||||
		local chestname_protected = (color == "" and "hades_chests:chest_locked")
 | 
							local chestname_protected = (color == "" and "hades_chests:chest_locked")
 | 
				
			||||||
				or "hades_chests:chest_" .. color .. "_locked"
 | 
									or "hades_chests:chest_" .. color .. "_locked"
 | 
				
			||||||
		local old_def = minetest.registered_nodes[chestname]
 | 
							local old_def = core.registered_nodes[chestname]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- chest formspec-creation functions are local, we need to find other ways
 | 
							-- chest formspec-creation functions are local, we need to find other ways
 | 
				
			||||||
		-- normal chests use node formspecs, we can hack into these
 | 
							-- normal chests use node formspecs, we can hack into these
 | 
				
			||||||
@@ -124,7 +124,7 @@ elseif minetest.get_modpath("hades_chests") then
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		local function has_locked_chest_privilege(meta, player)
 | 
							local function has_locked_chest_privilege(meta, player)
 | 
				
			||||||
			local name = player:get_player_name()
 | 
								local name = player:get_player_name()
 | 
				
			||||||
			if name ~= meta:get_string("owner") and not minetest.check_player_privs(name, "protection_bypass") then
 | 
								if name ~= meta:get_string("owner") and not core.check_player_privs(name, "protection_bypass") then
 | 
				
			||||||
				return false
 | 
									return false
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			return true
 | 
								return true
 | 
				
			||||||
@@ -133,30 +133,30 @@ elseif minetest.get_modpath("hades_chests") then
 | 
				
			|||||||
		-- store, which chest a formspec submission belongs to
 | 
							-- store, which chest a formspec submission belongs to
 | 
				
			||||||
		-- {player1 = pos1, player2 = pos2, ...}
 | 
							-- {player1 = pos1, player2 = pos2, ...}
 | 
				
			||||||
		local open_chests = {}
 | 
							local open_chests = {}
 | 
				
			||||||
		minetest.register_on_leaveplayer(function(player)
 | 
							core.register_on_leaveplayer(function(player)
 | 
				
			||||||
			open_chests[player:get_player_name()] = nil
 | 
								open_chests[player:get_player_name()] = nil
 | 
				
			||||||
		end)
 | 
							end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local override_protected = {
 | 
							local override_protected = {
 | 
				
			||||||
			on_rightclick = function(pos, node, clicker)
 | 
								on_rightclick = function(pos, node, clicker)
 | 
				
			||||||
				local meta = minetest.get_meta(pos)
 | 
									local meta = core.get_meta(pos)
 | 
				
			||||||
				if has_locked_chest_privilege(meta, clicker) then
 | 
									if has_locked_chest_privilege(meta, clicker) then
 | 
				
			||||||
					minetest.show_formspec(
 | 
										core.show_formspec(
 | 
				
			||||||
							clicker:get_player_name(),
 | 
												clicker:get_player_name(),
 | 
				
			||||||
							"hades_chests:chest_locked",
 | 
												"hades_chests:chest_locked",
 | 
				
			||||||
							get_locked_chest_formspec(pos)
 | 
												get_locked_chest_formspec(pos)
 | 
				
			||||||
					)
 | 
										)
 | 
				
			||||||
					open_chests[clicker:get_player_name()] = pos
 | 
										open_chests[clicker:get_player_name()] = pos
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
					minetest.sound_play({ name = "hades_chests_locked", gain = 0.3 }, { max_hear_distance = 10 }, true)
 | 
										core.sound_play({ name = "hades_chests_locked", gain = 0.3 }, { max_hear_distance = 10 }, true)
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end,
 | 
								end,
 | 
				
			||||||
			on_rotate = screwdriver.rotate_simple
 | 
								on_rotate = screwdriver.rotate_simple
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		-- get the fields from the chest formspec, we can do this bc. newest functions are called first
 | 
							-- get the fields from the chest formspec, we can do this bc. newest functions are called first
 | 
				
			||||||
		-- https://github.com/minetest/minetest/blob/d4b10db998ebeb689b3d27368e30952a42169d03/doc/lua_api.md?plain=1#L5840
 | 
							-- https://github.com/luanti-org/luanti/blob/d4b10db998ebeb689b3d27368e30952a42169d03/doc/lua_api.md?plain=1#L5840
 | 
				
			||||||
		minetest.register_on_player_receive_fields(function(player, formname, fields)
 | 
							core.register_on_player_receive_fields(function(player, formname, fields)
 | 
				
			||||||
			if fields.quit or formname ~= "hades_chests:chest_locked" then
 | 
								if fields.quit or formname ~= "hades_chests:chest_locked" then
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -165,7 +165,7 @@ elseif minetest.get_modpath("hades_chests") then
 | 
				
			|||||||
			if pos and pipeworks.may_configure(pos, player) then
 | 
								if pos and pipeworks.may_configure(pos, player) then
 | 
				
			||||||
				-- Pipeworks Switch
 | 
									-- Pipeworks Switch
 | 
				
			||||||
				fs_helpers.on_receive_fields(pos, fields)
 | 
									fs_helpers.on_receive_fields(pos, fields)
 | 
				
			||||||
				minetest.show_formspec(pn, "hades_chests:chest_locked", get_locked_chest_formspec(pos))
 | 
									core.show_formspec(pn, "hades_chests:chest_locked", get_locked_chest_formspec(pos))
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			-- Do NOT return true here, the callback from hades still needs to run (if they add one)
 | 
								-- Do NOT return true here, the callback from hades still needs to run (if they add one)
 | 
				
			||||||
			return false
 | 
								return false
 | 
				
			||||||
@@ -175,7 +175,7 @@ elseif minetest.get_modpath("hades_chests") then
 | 
				
			|||||||
		pipeworks.override_chest(chestname, override, connect_sides)
 | 
							pipeworks.override_chest(chestname, override, connect_sides)
 | 
				
			||||||
		pipeworks.override_chest(chestname_protected, override_protected, connect_sides)
 | 
							pipeworks.override_chest(chestname_protected, override_protected, connect_sides)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
elseif minetest.get_modpath("mcl_barrels") then
 | 
					elseif core.get_modpath("mcl_barrels") then
 | 
				
			||||||
	-- TODO: bring splitstacks switch in the formspec
 | 
						-- TODO: bring splitstacks switch in the formspec
 | 
				
			||||||
	-- with the current implementation of mcl_barrels this would mean to duplicate a lot of code from there...
 | 
						-- with the current implementation of mcl_barrels this would mean to duplicate a lot of code from there...
 | 
				
			||||||
	local connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1}
 | 
						local connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,12 +2,12 @@
 | 
				
			|||||||
-- minetest_game/mods/default/furnaces.lua
 | 
					-- minetest_game/mods/default/furnaces.lua
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local def--, def_active
 | 
					local def--, def_active
 | 
				
			||||||
if minetest.get_modpath("default") then
 | 
					if core.get_modpath("default") then
 | 
				
			||||||
	def = table.copy(minetest.registered_nodes["default:furnace"])
 | 
						def = table.copy(core.registered_nodes["default:furnace"])
 | 
				
			||||||
	--def_active = table.copy(minetest.registered_nodes["default:furnace_active"])
 | 
						--def_active = table.copy(core.registered_nodes["default:furnace_active"])
 | 
				
			||||||
elseif minetest.get_modpath("hades_furnaces") then
 | 
					elseif core.get_modpath("hades_furnaces") then
 | 
				
			||||||
	def = table.copy(minetest.registered_nodes["hades_furnaces:furnace"])
 | 
						def = table.copy(core.registered_nodes["hades_furnaces:furnace"])
 | 
				
			||||||
	--def_active = table.copy(minetest.registered_nodes["hades_furnaces:furnace_active"])
 | 
						--def_active = table.copy(core.registered_nodes["hades_furnaces:furnace_active"])
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local tube_entry = "^pipeworks_tube_connection_stony.png"
 | 
					local tube_entry = "^pipeworks_tube_connection_stony.png"
 | 
				
			||||||
@@ -34,9 +34,9 @@ local override = {
 | 
				
			|||||||
	groups = groups,
 | 
						groups = groups,
 | 
				
			||||||
	tube = {
 | 
						tube = {
 | 
				
			||||||
		insert_object = function(pos, node, stack, direction)
 | 
							insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
								local inv = meta:get_inventory()
 | 
				
			||||||
			local timer = minetest.get_node_timer(pos)
 | 
								local timer = core.get_node_timer(pos)
 | 
				
			||||||
			if not timer:is_started() then
 | 
								if not timer:is_started() then
 | 
				
			||||||
				timer:start(1.0)
 | 
									timer:start(1.0)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -47,7 +47,7 @@ local override = {
 | 
				
			|||||||
			end
 | 
								end
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		can_insert = function(pos,node,stack,direction)
 | 
							can_insert = function(pos,node,stack,direction)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
								local inv = meta:get_inventory()
 | 
				
			||||||
			if direction.y == 1 then
 | 
								if direction.y == 1 then
 | 
				
			||||||
				return inv:room_for_item("fuel", stack)
 | 
									return inv:room_for_item("fuel", stack)
 | 
				
			||||||
@@ -88,9 +88,9 @@ local override_active = {
 | 
				
			|||||||
	groups = groups_active,
 | 
						groups = groups_active,
 | 
				
			||||||
	tube = {
 | 
						tube = {
 | 
				
			||||||
		insert_object = function(pos,node,stack,direction)
 | 
							insert_object = function(pos,node,stack,direction)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
								local inv = meta:get_inventory()
 | 
				
			||||||
			local timer = minetest.get_node_timer(pos)
 | 
								local timer = core.get_node_timer(pos)
 | 
				
			||||||
			if not timer:is_started() then
 | 
								if not timer:is_started() then
 | 
				
			||||||
				timer:start(1.0)
 | 
									timer:start(1.0)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -101,7 +101,7 @@ local override_active = {
 | 
				
			|||||||
			end
 | 
								end
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		can_insert = function(pos, node, stack, direction)
 | 
							can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
								local inv = meta:get_inventory()
 | 
				
			||||||
			if direction.y == 1 then
 | 
								if direction.y == 1 then
 | 
				
			||||||
				return inv:room_for_item("fuel", stack)
 | 
									return inv:room_for_item("fuel", stack)
 | 
				
			||||||
@@ -118,11 +118,11 @@ local override_active = {
 | 
				
			|||||||
	on_rotate = pipeworks.on_rotate
 | 
						on_rotate = pipeworks.on_rotate
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("default") then
 | 
					if core.get_modpath("default") then
 | 
				
			||||||
	minetest.override_item("default:furnace", override)
 | 
						core.override_item("default:furnace", override)
 | 
				
			||||||
	minetest.override_item("default:furnace_active", override_active)
 | 
						core.override_item("default:furnace_active", override_active)
 | 
				
			||||||
elseif minetest.get_modpath("hades_furnaces") then
 | 
					elseif core.get_modpath("hades_furnaces") then
 | 
				
			||||||
	minetest.override_item("hades_furnaces:furnace", override)
 | 
						core.override_item("hades_furnaces:furnace", override)
 | 
				
			||||||
	minetest.override_item("hades_furnaces:furnace_active", override_active)
 | 
						core.override_item("hades_furnaces:furnace_active", override_active)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										66
									
								
								crafts.lua
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								crafts.lua
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
				
			|||||||
-- Crafting recipes for pipes
 | 
					-- Crafting recipes for pipes
 | 
				
			||||||
local materials = xcompat.materials
 | 
					local materials = xcompat.materials
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:pipe_1_empty 12",
 | 
						output = "pipeworks:pipe_1_empty 12",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ materials.steel_ingot, materials.steel_ingot, materials.steel_ingot },
 | 
								{ materials.steel_ingot, materials.steel_ingot, materials.steel_ingot },
 | 
				
			||||||
@@ -10,14 +10,14 @@ minetest.register_craft( {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:straight_pipe_empty 3",
 | 
						output = "pipeworks:straight_pipe_empty 3",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ "pipeworks:pipe_1_empty", "pipeworks:pipe_1_empty", "pipeworks:pipe_1_empty" },
 | 
								{ "pipeworks:pipe_1_empty", "pipeworks:pipe_1_empty", "pipeworks:pipe_1_empty" },
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:spigot 3",
 | 
						output = "pipeworks:spigot 3",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ "pipeworks:pipe_1_empty", "" },
 | 
								{ "pipeworks:pipe_1_empty", "" },
 | 
				
			||||||
@@ -25,7 +25,7 @@ minetest.register_craft( {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
output = "pipeworks:entry_panel_empty 2",
 | 
					output = "pipeworks:entry_panel_empty 2",
 | 
				
			||||||
recipe = {
 | 
					recipe = {
 | 
				
			||||||
	{ "", materials.steel_ingot, "" },
 | 
						{ "", materials.steel_ingot, "" },
 | 
				
			||||||
@@ -36,7 +36,7 @@ recipe = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- Various ancillary pipe devices
 | 
					-- Various ancillary pipe devices
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:pump_off 2",
 | 
						output = "pipeworks:pump_off 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ materials.stone, materials.steel_ingot, materials.stone },
 | 
								{ materials.stone, materials.steel_ingot, materials.stone },
 | 
				
			||||||
@@ -45,7 +45,7 @@ minetest.register_craft( {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:valve_off_empty 2",
 | 
						output = "pipeworks:valve_off_empty 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ "", "group:stick", "" },
 | 
								{ "", "group:stick", "" },
 | 
				
			||||||
@@ -54,7 +54,7 @@ minetest.register_craft( {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:storage_tank_0 2",
 | 
						output = "pipeworks:storage_tank_0 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ "", materials.steel_ingot, materials.steel_ingot },
 | 
								{ "", materials.steel_ingot, materials.steel_ingot },
 | 
				
			||||||
@@ -63,7 +63,7 @@ minetest.register_craft( {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:grating 2",
 | 
						output = "pipeworks:grating 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ materials.steel_ingot, "", materials.steel_ingot },
 | 
								{ materials.steel_ingot, "", materials.steel_ingot },
 | 
				
			||||||
@@ -72,14 +72,14 @@ minetest.register_craft( {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:flow_sensor_empty 2",
 | 
						output = "pipeworks:flow_sensor_empty 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ "pipeworks:pipe_1_empty", "mesecons:mesecon", "pipeworks:pipe_1_empty" },
 | 
								{ "pipeworks:pipe_1_empty", "mesecons:mesecon", "pipeworks:pipe_1_empty" },
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:fountainhead 2",
 | 
						output = "pipeworks:fountainhead 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ "pipeworks:pipe_1_empty" },
 | 
								{ "pipeworks:pipe_1_empty" },
 | 
				
			||||||
@@ -89,7 +89,7 @@ minetest.register_craft( {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- injectors
 | 
					-- injectors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:filter 2",
 | 
						output = "pipeworks:filter 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" },
 | 
								{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -98,7 +98,7 @@ minetest.register_craft( {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:mese_filter 2",
 | 
						output = "pipeworks:mese_filter 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" },
 | 
								{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -107,8 +107,8 @@ minetest.register_craft( {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("digilines") then
 | 
					if core.get_modpath("digilines") then
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = "pipeworks:digiline_filter 2",
 | 
							output = "pipeworks:digiline_filter 2",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" },
 | 
								{ materials.steel_ingot, materials.steel_ingot, "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -120,7 +120,7 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- other
 | 
					-- other
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:autocrafter 2",
 | 
						output = "pipeworks:autocrafter 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ materials.steel_ingot, materials.mese_crystal, materials.steel_ingot },
 | 
								{ materials.steel_ingot, materials.mese_crystal, materials.steel_ingot },
 | 
				
			||||||
@@ -129,7 +129,7 @@ minetest.register_craft( {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:steel_pane_embedded_tube 1",
 | 
						output = "pipeworks:steel_pane_embedded_tube 1",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
		{ "", materials.steel_ingot, "" },
 | 
							{ "", materials.steel_ingot, "" },
 | 
				
			||||||
@@ -138,7 +138,7 @@ minetest.register_craft( {
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft({
 | 
					core.register_craft({
 | 
				
			||||||
	output = "pipeworks:trashcan",
 | 
						output = "pipeworks:trashcan",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
		{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
							{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -147,7 +147,7 @@ minetest.register_craft({
 | 
				
			|||||||
	},
 | 
						},
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:teleport_tube_1 2",
 | 
						output = "pipeworks:teleport_tube_1 2",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
			{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -157,7 +157,7 @@ minetest.register_craft( {
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_priority_tube then
 | 
					if pipeworks.enable_priority_tube then
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = "pipeworks:priority_tube_1 6",
 | 
							output = "pipeworks:priority_tube_1 6",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -168,7 +168,7 @@ if pipeworks.enable_priority_tube then
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_accelerator_tube then
 | 
					if pipeworks.enable_accelerator_tube then
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = "pipeworks:accelerator_tube_1 2",
 | 
							output = "pipeworks:accelerator_tube_1 2",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -179,7 +179,7 @@ if pipeworks.enable_accelerator_tube then
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_crossing_tube then
 | 
					if pipeworks.enable_crossing_tube then
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = "pipeworks:crossing_tube_1 5",
 | 
							output = "pipeworks:crossing_tube_1 5",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "", "pipeworks:tube_1", "" },
 | 
								{ "", "pipeworks:tube_1", "" },
 | 
				
			||||||
@@ -190,7 +190,7 @@ if pipeworks.enable_crossing_tube then
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_one_way_tube then
 | 
					if pipeworks.enable_one_way_tube then
 | 
				
			||||||
	minetest.register_craft({
 | 
						core.register_craft({
 | 
				
			||||||
		output = "pipeworks:one_way_tube 2",
 | 
							output = "pipeworks:one_way_tube 2",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -201,7 +201,7 @@ if pipeworks.enable_one_way_tube then
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_mese_tube then
 | 
					if pipeworks.enable_mese_tube then
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = "pipeworks:mese_tube_000000 2",
 | 
							output = "pipeworks:mese_tube_000000 2",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -210,7 +210,7 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		type = "shapeless",
 | 
							type = "shapeless",
 | 
				
			||||||
		output = "pipeworks:mese_tube_000000",
 | 
							output = "pipeworks:mese_tube_000000",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
@@ -224,7 +224,7 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_item_tags and pipeworks.enable_tag_tube then
 | 
					if pipeworks.enable_item_tags and pipeworks.enable_tag_tube then
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = "pipeworks:tag_tube_000000 2",
 | 
							output = "pipeworks:tag_tube_000000 2",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -233,7 +233,7 @@ if pipeworks.enable_item_tags and pipeworks.enable_tag_tube then
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		type = "shapeless",
 | 
							type = "shapeless",
 | 
				
			||||||
		output = "pipeworks:tag_tube_000000",
 | 
							output = "pipeworks:tag_tube_000000",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
@@ -244,7 +244,7 @@ if pipeworks.enable_item_tags and pipeworks.enable_tag_tube then
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_sand_tube then
 | 
					if pipeworks.enable_sand_tube then
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = "pipeworks:sand_tube_1 2",
 | 
							output = "pipeworks:sand_tube_1 2",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet"},
 | 
								{"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet"},
 | 
				
			||||||
@@ -253,7 +253,7 @@ if pipeworks.enable_sand_tube then
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = "pipeworks:sand_tube_1",
 | 
							output = "pipeworks:sand_tube_1",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{"group:sand", "pipeworks:tube_1", "group:sand"},
 | 
								{"group:sand", "pipeworks:tube_1", "group:sand"},
 | 
				
			||||||
@@ -262,7 +262,7 @@ if pipeworks.enable_sand_tube then
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_mese_sand_tube then
 | 
					if pipeworks.enable_mese_sand_tube then
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = "pipeworks:mese_sand_tube_1 2",
 | 
							output = "pipeworks:mese_sand_tube_1 2",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
								{"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -271,7 +271,7 @@ if pipeworks.enable_mese_sand_tube then
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		type = "shapeless",
 | 
							type = "shapeless",
 | 
				
			||||||
		output = "pipeworks:mese_sand_tube_1",
 | 
							output = "pipeworks:mese_sand_tube_1",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
@@ -285,7 +285,7 @@ if pipeworks.enable_mese_sand_tube then
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_deployer then
 | 
					if pipeworks.enable_deployer then
 | 
				
			||||||
	minetest.register_craft({
 | 
						core.register_craft({
 | 
				
			||||||
		output = "pipeworks:deployer_off",
 | 
							output = "pipeworks:deployer_off",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "group:wood",	materials.chest,	"group:wood"	},
 | 
								{ "group:wood",	materials.chest,	"group:wood"	},
 | 
				
			||||||
@@ -296,7 +296,7 @@ if pipeworks.enable_deployer then
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_dispenser then
 | 
					if pipeworks.enable_dispenser then
 | 
				
			||||||
	minetest.register_craft({
 | 
						core.register_craft({
 | 
				
			||||||
		output = "pipeworks:dispenser_off",
 | 
							output = "pipeworks:dispenser_off",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ materials.desert_sand, materials.chest,	materials.desert_sand },
 | 
								{ materials.desert_sand, materials.chest,	materials.desert_sand },
 | 
				
			||||||
@@ -307,7 +307,7 @@ if pipeworks.enable_dispenser then
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_node_breaker then
 | 
					if pipeworks.enable_node_breaker then
 | 
				
			||||||
	minetest.register_craft({
 | 
						core.register_craft({
 | 
				
			||||||
		output = "pipeworks:nodebreaker_off",
 | 
							output = "pipeworks:nodebreaker_off",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "basic_materials:gear_steel", "basic_materials:gear_steel",   "basic_materials:gear_steel"	},
 | 
								{ "basic_materials:gear_steel", "basic_materials:gear_steel",   "basic_materials:gear_steel"	},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,6 +31,7 @@ local settings = {
 | 
				
			|||||||
	delete_item_on_clearobject = true,
 | 
						delete_item_on_clearobject = true,
 | 
				
			||||||
	use_real_entities = true,
 | 
						use_real_entities = true,
 | 
				
			||||||
	entity_update_interval = 0,
 | 
						entity_update_interval = 0,
 | 
				
			||||||
 | 
						enable_vertical_digilines_connectivity = false,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.toggles = {}
 | 
					pipeworks.toggles = {}
 | 
				
			||||||
@@ -66,9 +67,9 @@ pipeworks.toggles.finite_water = nil
 | 
				
			|||||||
for name, value in pairs(settings) do
 | 
					for name, value in pairs(settings) do
 | 
				
			||||||
	local setting_type = type(value)
 | 
						local setting_type = type(value)
 | 
				
			||||||
	if setting_type == "boolean" then
 | 
						if setting_type == "boolean" then
 | 
				
			||||||
		pipeworks[name] = minetest.settings:get_bool(prefix..name, value)
 | 
							pipeworks[name] = core.settings:get_bool(prefix..name, value)
 | 
				
			||||||
	elseif setting_type == "number" then
 | 
						elseif setting_type == "number" then
 | 
				
			||||||
		pipeworks[name] = tonumber(minetest.settings:get(prefix..name) or value)
 | 
							pipeworks[name] = tonumber(core.settings:get(prefix..name) or value)
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		pipeworks[name] = value
 | 
							pipeworks[name] = value
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										96
									
								
								devices.lua
									
									
									
									
									
								
							
							
						
						
									
										96
									
								
								devices.lua
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
				
			|||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
local new_flow_logic_register = pipeworks.flowables.register
 | 
					local new_flow_logic_register = pipeworks.flowables.register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local texture_alpha_mode = minetest.features.use_texture_alpha_string_modes
 | 
					local texture_alpha_mode = core.features.use_texture_alpha_string_modes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local polys = ""
 | 
					local polys = ""
 | 
				
			||||||
if pipeworks.enable_lowpoly then polys = "_lowpoly" end
 | 
					if pipeworks.enable_lowpoly then polys = "_lowpoly" end
 | 
				
			||||||
@@ -13,7 +13,7 @@ function pipeworks.fix_after_rotation(pos, node, user, mode, new_param2)
 | 
				
			|||||||
	if string.find(node.name, "spigot") then new_param2 = new_param2 % 4 end
 | 
						if string.find(node.name, "spigot") then new_param2 = new_param2 % 4 end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local newnode = string.gsub(node.name, "_on", "_off")
 | 
						local newnode = string.gsub(node.name, "_on", "_off")
 | 
				
			||||||
	minetest.swap_node(pos, { name = newnode, param2 = new_param2 })
 | 
						core.swap_node(pos, { name = newnode, param2 = new_param2 })
 | 
				
			||||||
	pipeworks.scan_for_pipe_objects(pos)
 | 
						pipeworks.scan_for_pipe_objects(pos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return true
 | 
						return true
 | 
				
			||||||
@@ -22,15 +22,15 @@ end
 | 
				
			|||||||
function pipeworks.rotate_on_place(itemstack, placer, pointed_thing)
 | 
					function pipeworks.rotate_on_place(itemstack, placer, pointed_thing)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local playername = placer:get_player_name()
 | 
						local playername = placer:get_player_name()
 | 
				
			||||||
	if not minetest.is_protected(pointed_thing.under, playername)
 | 
						if not core.is_protected(pointed_thing.under, playername)
 | 
				
			||||||
	   and not minetest.is_protected(pointed_thing.above, playername) then
 | 
						   and not core.is_protected(pointed_thing.above, playername) then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		local node = minetest.get_node(pointed_thing.under)
 | 
							local node = core.get_node(pointed_thing.under)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (not placer:get_player_control().sneak)
 | 
							if (not placer:get_player_control().sneak)
 | 
				
			||||||
		  and minetest.registered_nodes[node.name]
 | 
							  and core.registered_nodes[node.name]
 | 
				
			||||||
		  and minetest.registered_nodes[node.name].on_rightclick then
 | 
							  and core.registered_nodes[node.name].on_rightclick then
 | 
				
			||||||
			minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under,
 | 
								core.registered_nodes[node.name].on_rightclick(pointed_thing.under,
 | 
				
			||||||
				node, placer, itemstack, pointed_thing)
 | 
									node, placer, itemstack, pointed_thing)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
@@ -38,8 +38,8 @@ function pipeworks.rotate_on_place(itemstack, placer, pointed_thing)
 | 
				
			|||||||
			local pitch = -placer:get_look_vertical()
 | 
								local pitch = -placer:get_look_vertical()
 | 
				
			||||||
			local above = pointed_thing.above
 | 
								local above = pointed_thing.above
 | 
				
			||||||
			local under = pointed_thing.under
 | 
								local under = pointed_thing.under
 | 
				
			||||||
			local fdir = minetest.dir_to_facedir(placer:get_look_dir())
 | 
								local fdir = core.dir_to_facedir(placer:get_look_dir())
 | 
				
			||||||
			local undernode = minetest.get_node(under)
 | 
								local undernode = core.get_node(under)
 | 
				
			||||||
			local uname = undernode.name
 | 
								local uname = undernode.name
 | 
				
			||||||
			local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0)
 | 
								local isabove = (above.x == under.x) and (above.z == under.z) and (pitch > 0)
 | 
				
			||||||
			local pos1 = above
 | 
								local pos1 = above
 | 
				
			||||||
@@ -58,24 +58,24 @@ function pipeworks.rotate_on_place(itemstack, placer, pointed_thing)
 | 
				
			|||||||
						( string.find(uname, "pipeworks:valve")
 | 
											( string.find(uname, "pipeworks:valve")
 | 
				
			||||||
						  or string.find(uname, "pipeworks:entry_panel")
 | 
											  or string.find(uname, "pipeworks:entry_panel")
 | 
				
			||||||
						  or string.find(uname, "pipeworks:flow_sensor") )
 | 
											  or string.find(uname, "pipeworks:flow_sensor") )
 | 
				
			||||||
						and minetest.facedir_to_dir(undernode.param2).y ~= 0 )
 | 
											and core.facedir_to_dir(undernode.param2).y ~= 0 )
 | 
				
			||||||
					)
 | 
										)
 | 
				
			||||||
			then
 | 
								then
 | 
				
			||||||
				fdir = 17
 | 
									fdir = 17
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if minetest.registered_nodes[uname]
 | 
								if core.registered_nodes[uname]
 | 
				
			||||||
			  and minetest.registered_nodes[uname]["buildable_to"] then
 | 
								  and core.registered_nodes[uname]["buildable_to"] then
 | 
				
			||||||
				pos1 = under
 | 
									pos1 = under
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if minetest.registered_nodes[minetest.get_node(pos1).name]
 | 
								if core.registered_nodes[core.get_node(pos1).name]
 | 
				
			||||||
			  and not minetest.registered_nodes[minetest.get_node(pos1).name]["buildable_to"] then return end
 | 
								  and not core.registered_nodes[core.get_node(pos1).name]["buildable_to"] then return end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			local placednode = string.gsub(itemstack:get_name(), "_loaded", "_empty")
 | 
								local placednode = string.gsub(itemstack:get_name(), "_loaded", "_empty")
 | 
				
			||||||
			placednode = string.gsub(placednode, "_on", "_off")
 | 
								placednode = string.gsub(placednode, "_on", "_off")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			minetest.swap_node(pos1, {name = placednode, param2 = fdir })
 | 
								core.swap_node(pos1, {name = placednode, param2 = fdir })
 | 
				
			||||||
			pipeworks.scan_for_pipe_objects(pos1)
 | 
								pipeworks.scan_for_pipe_objects(pos1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if not pipeworks.expect_infinite_stacks then
 | 
								if not pipeworks.expect_infinite_stacks then
 | 
				
			||||||
@@ -91,7 +91,7 @@ end
 | 
				
			|||||||
local pipereceptor_on = nil
 | 
					local pipereceptor_on = nil
 | 
				
			||||||
local pipereceptor_off = nil
 | 
					local pipereceptor_off = nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("mesecons") then
 | 
					if core.get_modpath("mesecons") then
 | 
				
			||||||
	pipereceptor_on = {
 | 
						pipereceptor_on = {
 | 
				
			||||||
		receptor = {
 | 
							receptor = {
 | 
				
			||||||
			state = mesecon.state.on,
 | 
								state = mesecon.state.on,
 | 
				
			||||||
@@ -139,7 +139,7 @@ for s in ipairs(states) do
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local pumpname = "pipeworks:pump_"..states[s]
 | 
						local pumpname = "pipeworks:pump_"..states[s]
 | 
				
			||||||
	minetest.register_node(pumpname, {
 | 
						core.register_node(pumpname, {
 | 
				
			||||||
		description = S("Pump/Intake Module"),
 | 
							description = S("Pump/Intake Module"),
 | 
				
			||||||
		drawtype = "mesh",
 | 
							drawtype = "mesh",
 | 
				
			||||||
		mesh = "pipeworks_pump"..polys..".obj",
 | 
							mesh = "pipeworks_pump"..polys..".obj",
 | 
				
			||||||
@@ -164,15 +164,15 @@ for s in ipairs(states) do
 | 
				
			|||||||
		drop = "pipeworks:pump_off",
 | 
							drop = "pipeworks:pump_off",
 | 
				
			||||||
		mesecons = {effector = {
 | 
							mesecons = {effector = {
 | 
				
			||||||
			action_on = function (pos, node)
 | 
								action_on = function (pos, node)
 | 
				
			||||||
				minetest.swap_node(pos,{name="pipeworks:pump_on", param2 = node.param2})
 | 
									core.swap_node(pos,{name="pipeworks:pump_on", param2 = node.param2})
 | 
				
			||||||
			end,
 | 
								end,
 | 
				
			||||||
			action_off = function (pos, node)
 | 
								action_off = function (pos, node)
 | 
				
			||||||
				minetest.swap_node(pos,{name="pipeworks:pump_off", param2 = node.param2})
 | 
									core.swap_node(pos,{name="pipeworks:pump_off", param2 = node.param2})
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		}},
 | 
							}},
 | 
				
			||||||
		on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
							on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
				
			||||||
			local fdir = node.param2
 | 
								local fdir = node.param2
 | 
				
			||||||
			minetest.swap_node(pos, { name = "pipeworks:pump_"..states[3-s], param2 = fdir })
 | 
								core.swap_node(pos, { name = "pipeworks:pump_"..states[3-s], param2 = fdir })
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		on_rotate = screwdriver and screwdriver.rotate_simple or nil
 | 
							on_rotate = screwdriver and screwdriver.rotate_simple or nil
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -187,7 +187,7 @@ for s in ipairs(states) do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local nodename_valve_empty = "pipeworks:valve_"..states[s].."_empty"
 | 
						local nodename_valve_empty = "pipeworks:valve_"..states[s].."_empty"
 | 
				
			||||||
	minetest.register_node(nodename_valve_empty, {
 | 
						core.register_node(nodename_valve_empty, {
 | 
				
			||||||
		description = S("Valve"),
 | 
							description = S("Valve"),
 | 
				
			||||||
		drawtype = "mesh",
 | 
							drawtype = "mesh",
 | 
				
			||||||
		mesh = "pipeworks_valve_"..states[s]..polys..".obj",
 | 
							mesh = "pipeworks_valve_"..states[s]..polys..".obj",
 | 
				
			||||||
@@ -217,15 +217,15 @@ for s in ipairs(states) do
 | 
				
			|||||||
		drop = "pipeworks:valve_off_empty",
 | 
							drop = "pipeworks:valve_off_empty",
 | 
				
			||||||
		mesecons = {effector = {
 | 
							mesecons = {effector = {
 | 
				
			||||||
			action_on = function (pos, node)
 | 
								action_on = function (pos, node)
 | 
				
			||||||
				minetest.swap_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2})
 | 
									core.swap_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2})
 | 
				
			||||||
			end,
 | 
								end,
 | 
				
			||||||
			action_off = function (pos, node)
 | 
								action_off = function (pos, node)
 | 
				
			||||||
				minetest.swap_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
 | 
									core.swap_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		}},
 | 
							}},
 | 
				
			||||||
		on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
							on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
				
			||||||
			local fdir = node.param2
 | 
								local fdir = node.param2
 | 
				
			||||||
			minetest.swap_node(pos, { name = "pipeworks:valve_"..states[3-s].."_empty", param2 = fdir })
 | 
								core.swap_node(pos, { name = "pipeworks:valve_"..states[3-s].."_empty", param2 = fdir })
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		on_rotate = pipeworks.fix_after_rotation
 | 
							on_rotate = pipeworks.fix_after_rotation
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -239,7 +239,7 @@ pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:pump_off"
 | 
				
			|||||||
pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:valve_off_empty"
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:valve_off_empty"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodename_valve_loaded = "pipeworks:valve_on_loaded"
 | 
					local nodename_valve_loaded = "pipeworks:valve_on_loaded"
 | 
				
			||||||
minetest.register_node(nodename_valve_loaded, {
 | 
					core.register_node(nodename_valve_loaded, {
 | 
				
			||||||
	description = S("Valve"),
 | 
						description = S("Valve"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_valve_on"..polys..".obj",
 | 
						mesh = "pipeworks_valve_on"..polys..".obj",
 | 
				
			||||||
@@ -269,15 +269,15 @@ minetest.register_node(nodename_valve_loaded, {
 | 
				
			|||||||
	drop = "pipeworks:valve_off_empty",
 | 
						drop = "pipeworks:valve_off_empty",
 | 
				
			||||||
	mesecons = {effector = {
 | 
						mesecons = {effector = {
 | 
				
			||||||
		action_on = function (pos, node)
 | 
							action_on = function (pos, node)
 | 
				
			||||||
			minetest.swap_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2})
 | 
								core.swap_node(pos,{name="pipeworks:valve_on_empty", param2 = node.param2})
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		action_off = function (pos, node)
 | 
							action_off = function (pos, node)
 | 
				
			||||||
			minetest.swap_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
 | 
								core.swap_node(pos,{name="pipeworks:valve_off_empty", param2 = node.param2})
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	}},
 | 
						}},
 | 
				
			||||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
						on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
				
			||||||
		local fdir = node.param2
 | 
							local fdir = node.param2
 | 
				
			||||||
		minetest.swap_node(pos, { name = "pipeworks:valve_off_empty", param2 = fdir })
 | 
							core.swap_node(pos, { name = "pipeworks:valve_off_empty", param2 = fdir })
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	on_rotate = pipeworks.fix_after_rotation
 | 
						on_rotate = pipeworks.fix_after_rotation
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
@@ -291,7 +291,7 @@ new_flow_logic_register.directional_horizonal_rotate(nodename_valve_loaded, true
 | 
				
			|||||||
-- grating
 | 
					-- grating
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- FIXME: should this do anything useful in the new flow logic?
 | 
					-- FIXME: should this do anything useful in the new flow logic?
 | 
				
			||||||
minetest.register_node("pipeworks:grating", {
 | 
					core.register_node("pipeworks:grating", {
 | 
				
			||||||
	description = S("Decorative grating"),
 | 
						description = S("Decorative grating"),
 | 
				
			||||||
	tiles = {
 | 
						tiles = {
 | 
				
			||||||
		"pipeworks_grating_top.png",
 | 
							"pipeworks_grating_top.png",
 | 
				
			||||||
@@ -330,7 +330,7 @@ pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:grating"
 | 
				
			|||||||
-- outlet spigot
 | 
					-- outlet spigot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodename_spigot_empty = "pipeworks:spigot"
 | 
					local nodename_spigot_empty = "pipeworks:spigot"
 | 
				
			||||||
minetest.register_node(nodename_spigot_empty, {
 | 
					core.register_node(nodename_spigot_empty, {
 | 
				
			||||||
	description = S("Spigot outlet"),
 | 
						description = S("Spigot outlet"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_spigot"..polys..".obj",
 | 
						mesh = "pipeworks_spigot"..polys..".obj",
 | 
				
			||||||
@@ -365,12 +365,12 @@ minetest.register_node(nodename_spigot_empty, {
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodename_spigot_loaded = "pipeworks:spigot_pouring"
 | 
					local nodename_spigot_loaded = "pipeworks:spigot_pouring"
 | 
				
			||||||
minetest.register_node(nodename_spigot_loaded, {
 | 
					core.register_node(nodename_spigot_loaded, {
 | 
				
			||||||
	description = S("Spigot outlet"),
 | 
						description = S("Spigot outlet"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_spigot_pouring"..polys..".obj",
 | 
						mesh = "pipeworks_spigot_pouring"..polys..".obj",
 | 
				
			||||||
	tiles = {
 | 
						tiles = {
 | 
				
			||||||
		minetest.registered_nodes[pipeworks.liquids.water.source].tiles[1],
 | 
							core.registered_nodes[pipeworks.liquids.water.source].tiles[1],
 | 
				
			||||||
		{ name = "pipeworks_spigot.png" }
 | 
							{ name = "pipeworks_spigot.png" }
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	use_texture_alpha = texture_alpha_mode and "blend" or true,
 | 
						use_texture_alpha = texture_alpha_mode and "blend" or true,
 | 
				
			||||||
@@ -387,7 +387,7 @@ minetest.register_node(nodename_spigot_loaded, {
 | 
				
			|||||||
	pipe_connections = { left=1, right=1, front=1, back=1,
 | 
						pipe_connections = { left=1, right=1, front=1, back=1,
 | 
				
			||||||
						 left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 },
 | 
											 left_param2 = 3, right_param2 = 1, front_param2 = 2, back_param2 = 0 },
 | 
				
			||||||
	after_place_node = function(pos)
 | 
						after_place_node = function(pos)
 | 
				
			||||||
		minetest.set_node(pos, { name = "pipeworks:spigot", param2 = minetest.get_node(pos).param2 })
 | 
							core.set_node(pos, { name = "pipeworks:spigot", param2 = core.get_node(pos).param2 })
 | 
				
			||||||
		pipeworks.scan_for_pipe_objects(pos)
 | 
							pipeworks.scan_for_pipe_objects(pos)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	after_dig_node = function(pos)
 | 
						after_dig_node = function(pos)
 | 
				
			||||||
@@ -430,7 +430,7 @@ local panel_cbox = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodename_panel_empty = "pipeworks:entry_panel_empty"
 | 
					local nodename_panel_empty = "pipeworks:entry_panel_empty"
 | 
				
			||||||
minetest.register_node(nodename_panel_empty, {
 | 
					core.register_node(nodename_panel_empty, {
 | 
				
			||||||
	description = S("Airtight Pipe entry/exit"),
 | 
						description = S("Airtight Pipe entry/exit"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_entry_panel"..polys..".obj",
 | 
						mesh = "pipeworks_entry_panel"..polys..".obj",
 | 
				
			||||||
@@ -454,7 +454,7 @@ minetest.register_node(nodename_panel_empty, {
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodename_panel_loaded = "pipeworks:entry_panel_loaded"
 | 
					local nodename_panel_loaded = "pipeworks:entry_panel_loaded"
 | 
				
			||||||
minetest.register_node(nodename_panel_loaded, {
 | 
					core.register_node(nodename_panel_loaded, {
 | 
				
			||||||
	description = S("Airtight Pipe entry/exit"),
 | 
						description = S("Airtight Pipe entry/exit"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_entry_panel"..polys..".obj",
 | 
						mesh = "pipeworks_entry_panel"..polys..".obj",
 | 
				
			||||||
@@ -487,7 +487,7 @@ new_flow_logic_register.directional_horizonal_rotate(nodename_panel_loaded, true
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodename_sensor_empty = "pipeworks:flow_sensor_empty"
 | 
					local nodename_sensor_empty = "pipeworks:flow_sensor_empty"
 | 
				
			||||||
minetest.register_node(nodename_sensor_empty, {
 | 
					core.register_node(nodename_sensor_empty, {
 | 
				
			||||||
	description = S("Flow Sensor"),
 | 
						description = S("Flow Sensor"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_flow_sensor"..polys..".obj",
 | 
						mesh = "pipeworks_flow_sensor"..polys..".obj",
 | 
				
			||||||
@@ -530,7 +530,7 @@ minetest.register_node(nodename_sensor_empty, {
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodename_sensor_loaded = "pipeworks:flow_sensor_loaded"
 | 
					local nodename_sensor_loaded = "pipeworks:flow_sensor_loaded"
 | 
				
			||||||
minetest.register_node(nodename_sensor_loaded, {
 | 
					core.register_node(nodename_sensor_loaded, {
 | 
				
			||||||
	description = S("Flow sensor (on)"),
 | 
						description = S("Flow sensor (on)"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_flow_sensor"..polys..".obj",
 | 
						mesh = "pipeworks_flow_sensor"..polys..".obj",
 | 
				
			||||||
@@ -596,7 +596,7 @@ for fill = 0, 10 do
 | 
				
			|||||||
		image = "pipeworks_storage_tank_fittings.png"
 | 
							image = "pipeworks_storage_tank_fittings.png"
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:expansion_tank_"..fill, {
 | 
						core.register_node("pipeworks:expansion_tank_"..fill, {
 | 
				
			||||||
		description = S("Expansion Tank (@1)", filldesc),
 | 
							description = S("Expansion Tank (@1)", filldesc),
 | 
				
			||||||
		tiles = {
 | 
							tiles = {
 | 
				
			||||||
			"pipeworks_storage_tank_fittings.png",
 | 
								"pipeworks_storage_tank_fittings.png",
 | 
				
			||||||
@@ -628,7 +628,7 @@ for fill = 0, 10 do
 | 
				
			|||||||
		on_rotate = false
 | 
							on_rotate = false
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:storage_tank_"..fill, {
 | 
						core.register_node("pipeworks:storage_tank_"..fill, {
 | 
				
			||||||
		description = S("Fluid Storage Tank (@1)", filldesc),
 | 
							description = S("Fluid Storage Tank (@1)", filldesc),
 | 
				
			||||||
		tiles = {
 | 
							tiles = {
 | 
				
			||||||
			"pipeworks_storage_tank_fittings.png",
 | 
								"pipeworks_storage_tank_fittings.png",
 | 
				
			||||||
@@ -665,7 +665,7 @@ pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:storage_t
 | 
				
			|||||||
-- fountainhead
 | 
					-- fountainhead
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodename_fountain_empty = "pipeworks:fountainhead"
 | 
					local nodename_fountain_empty = "pipeworks:fountainhead"
 | 
				
			||||||
minetest.register_node(nodename_fountain_empty, {
 | 
					core.register_node(nodename_fountain_empty, {
 | 
				
			||||||
	description = S("Fountainhead"),
 | 
						description = S("Fountainhead"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_fountainhead"..polys..".obj",
 | 
						mesh = "pipeworks_fountainhead"..polys..".obj",
 | 
				
			||||||
@@ -704,7 +704,7 @@ minetest.register_node(nodename_fountain_empty, {
 | 
				
			|||||||
pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:fountainhead"
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:fountainhead"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodename_fountain_loaded = "pipeworks:fountainhead_pouring"
 | 
					local nodename_fountain_loaded = "pipeworks:fountainhead_pouring"
 | 
				
			||||||
minetest.register_node(nodename_fountain_loaded, {
 | 
					core.register_node(nodename_fountain_loaded, {
 | 
				
			||||||
	description = S("Fountainhead"),
 | 
						description = S("Fountainhead"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_fountainhead"..polys..".obj",
 | 
						mesh = "pipeworks_fountainhead"..polys..".obj",
 | 
				
			||||||
@@ -720,7 +720,7 @@ minetest.register_node(nodename_fountain_loaded, {
 | 
				
			|||||||
	walkable = true,
 | 
						walkable = true,
 | 
				
			||||||
	pipe_connections = { bottom = 1 },
 | 
						pipe_connections = { bottom = 1 },
 | 
				
			||||||
	after_place_node = function(pos)
 | 
						after_place_node = function(pos)
 | 
				
			||||||
		minetest.set_node(pos, { name = "pipeworks:fountainhead", param2 = minetest.get_node(pos).param2 })
 | 
							core.set_node(pos, { name = "pipeworks:fountainhead", param2 = core.get_node(pos).param2 })
 | 
				
			||||||
		pipeworks.scan_for_pipe_objects(pos)
 | 
							pipeworks.scan_for_pipe_objects(pos)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
	after_dig_node = function(pos)
 | 
						after_dig_node = function(pos)
 | 
				
			||||||
@@ -758,7 +758,7 @@ local sp_cbox = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodename_sp_empty = "pipeworks:straight_pipe_empty"
 | 
					local nodename_sp_empty = "pipeworks:straight_pipe_empty"
 | 
				
			||||||
minetest.register_node(nodename_sp_empty, {
 | 
					core.register_node(nodename_sp_empty, {
 | 
				
			||||||
	description = S("Straight-only Pipe"),
 | 
						description = S("Straight-only Pipe"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_straight_pipe"..polys..".obj",
 | 
						mesh = "pipeworks_straight_pipe"..polys..".obj",
 | 
				
			||||||
@@ -784,7 +784,7 @@ minetest.register_node(nodename_sp_empty, {
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local nodename_sp_loaded = "pipeworks:straight_pipe_loaded"
 | 
					local nodename_sp_loaded = "pipeworks:straight_pipe_loaded"
 | 
				
			||||||
minetest.register_node(nodename_sp_loaded, {
 | 
					core.register_node(nodename_sp_loaded, {
 | 
				
			||||||
	description = S("Straight-only Pipe"),
 | 
						description = S("Straight-only Pipe"),
 | 
				
			||||||
	drawtype = "mesh",
 | 
						drawtype = "mesh",
 | 
				
			||||||
	mesh = "pipeworks_straight_pipe"..polys..".obj",
 | 
						mesh = "pipeworks_straight_pipe"..polys..".obj",
 | 
				
			||||||
@@ -816,6 +816,6 @@ new_flow_logic_register.directional_horizonal_rotate(nodename_sp_loaded, true)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- Other misc stuff
 | 
					-- Other misc stuff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_alias("pipeworks:valve_off_loaded", "pipeworks:valve_off_empty")
 | 
					core.register_alias("pipeworks:valve_off_loaded", "pipeworks:valve_off_empty")
 | 
				
			||||||
minetest.register_alias("pipeworks:entry_panel", "pipeworks:entry_panel_empty")
 | 
					core.register_alias("pipeworks:entry_panel", "pipeworks:entry_panel_empty")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
local fs_helpers = pipeworks.fs_helpers
 | 
					local fs_helpers = pipeworks.fs_helpers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function set_filter_infotext(data, meta)
 | 
					local function set_filter_infotext(data, meta)
 | 
				
			||||||
@@ -21,7 +21,7 @@ local function set_filter_formspec(data, meta)
 | 
				
			|||||||
		formspec =
 | 
							formspec =
 | 
				
			||||||
			("size[8.5,%f]"):format(form_height) ..
 | 
								("size[8.5,%f]"):format(form_height) ..
 | 
				
			||||||
			"item_image[0.2,0;1,1;pipeworks:"..data.name.."]"..
 | 
								"item_image[0.2,0;1,1;pipeworks:"..data.name.."]"..
 | 
				
			||||||
			"label[1.2,0.2;"..minetest.formspec_escape(itemname).."]"..
 | 
								"label[1.2,0.2;"..core.formspec_escape(itemname).."]"..
 | 
				
			||||||
			"field[0.5,1.6;4.6,1;channel;"..S("Channel")..";${channel}]"..
 | 
								"field[0.5,1.6;4.6,1;channel;"..S("Channel")..";${channel}]"..
 | 
				
			||||||
			"button[4.8,1.3;1.5,1;set_channel;"..S("Set").."]"..
 | 
								"button[4.8,1.3;1.5,1;set_channel;"..S("Set").."]"..
 | 
				
			||||||
			fs_helpers.cycling_button(meta, ("button[0.2,%f;4.05,1"):format(form_height - 0.7), "slotseq_mode",
 | 
								fs_helpers.cycling_button(meta, ("button[0.2,%f;4.05,1"):format(form_height - 0.7), "slotseq_mode",
 | 
				
			||||||
@@ -47,7 +47,7 @@ local function set_filter_formspec(data, meta)
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
		local size = "10.2,11"
 | 
							local size = "10.2,11"
 | 
				
			||||||
		local list_backgrounds = ""
 | 
							local list_backgrounds = ""
 | 
				
			||||||
		if minetest.get_modpath("i3") or minetest.get_modpath("mcl_formspec") then
 | 
							if core.get_modpath("i3") or core.get_modpath("mcl_formspec") then
 | 
				
			||||||
			list_backgrounds = "style_type[box;colors=#666]"
 | 
								list_backgrounds = "style_type[box;colors=#666]"
 | 
				
			||||||
			for i=0, 7 do
 | 
								for i=0, 7 do
 | 
				
			||||||
				for j=0, 1 do
 | 
									for j=0, 1 do
 | 
				
			||||||
@@ -60,7 +60,7 @@ local function set_filter_formspec(data, meta)
 | 
				
			|||||||
			"size["..size.."]"..
 | 
								"size["..size.."]"..
 | 
				
			||||||
			pipeworks.fs_helpers.get_prepends(size)..
 | 
								pipeworks.fs_helpers.get_prepends(size)..
 | 
				
			||||||
			"item_image[0.22,0.22;1,1;pipeworks:"..data.name.."]"..
 | 
								"item_image[0.22,0.22;1,1;pipeworks:"..data.name.."]"..
 | 
				
			||||||
			"label[1.22,0.72;"..minetest.formspec_escape(itemname).."]"..
 | 
								"label[1.22,0.72;"..core.formspec_escape(itemname).."]"..
 | 
				
			||||||
			"label[0.22,1.5;"..S("Prefer item types:").."]"..
 | 
								"label[0.22,1.5;"..S("Prefer item types:").."]"..
 | 
				
			||||||
			list_backgrounds..
 | 
								list_backgrounds..
 | 
				
			||||||
			"list[context;main;0.22,1.75;8,2;]"..
 | 
								"list[context;main;0.22,1.75;8,2;]"..
 | 
				
			||||||
@@ -81,15 +81,15 @@ local function set_filter_formspec(data, meta)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function punch_filter(data, filtpos, filtnode, msg)
 | 
					local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			||||||
	local filtmeta = minetest.get_meta(filtpos)
 | 
						local filtmeta = core.get_meta(filtpos)
 | 
				
			||||||
	local filtinv = filtmeta:get_inventory()
 | 
						local filtinv = filtmeta:get_inventory()
 | 
				
			||||||
	local owner = filtmeta:get_string("owner")
 | 
						local owner = filtmeta:get_string("owner")
 | 
				
			||||||
	local fakeplayer = fakelib.create_player(owner)
 | 
						local fakeplayer = fakelib.create_player(owner)
 | 
				
			||||||
	local dir = pipeworks.facedir_to_right_dir(filtnode.param2)
 | 
						local dir = pipeworks.facedir_to_right_dir(filtnode.param2)
 | 
				
			||||||
	local frompos = vector.subtract(filtpos, dir)
 | 
						local frompos = vector.subtract(filtpos, dir)
 | 
				
			||||||
	local fromnode = minetest.get_node(frompos)
 | 
						local fromnode = core.get_node(frompos)
 | 
				
			||||||
	if not fromnode then return end
 | 
						if not fromnode then return end
 | 
				
			||||||
	local fromdef = minetest.registered_nodes[fromnode.name]
 | 
						local fromdef = core.registered_nodes[fromnode.name]
 | 
				
			||||||
	if not fromdef or not fromdef.tube then return end
 | 
						if not fromdef or not fromdef.tube then return end
 | 
				
			||||||
	local fromtube = table.copy(fromdef.tube)
 | 
						local fromtube = table.copy(fromdef.tube)
 | 
				
			||||||
	local input_special_cases = {
 | 
						local input_special_cases = {
 | 
				
			||||||
@@ -117,15 +117,14 @@ local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- make sure there's something appropriate to inject the item into
 | 
						-- make sure there's something appropriate to inject the item into
 | 
				
			||||||
	local todir = pipeworks.facedir_to_right_dir(filtnode.param2)
 | 
						local topos = vector.add(filtpos, dir)
 | 
				
			||||||
	local topos = vector.add(filtpos, todir)
 | 
						local tonode = core.get_node(topos)
 | 
				
			||||||
	local tonode = minetest.get_node(topos)
 | 
						local todef = core.registered_nodes[tonode.name]
 | 
				
			||||||
	local todef = minetest.registered_nodes[tonode.name]
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if not todef
 | 
						if not todef
 | 
				
			||||||
	  or not (minetest.get_item_group(tonode.name, "tube") == 1
 | 
						  or not (core.get_item_group(tonode.name, "tube") == 1
 | 
				
			||||||
			  or minetest.get_item_group(tonode.name, "tubedevice") == 1
 | 
								  or core.get_item_group(tonode.name, "tubedevice") == 1
 | 
				
			||||||
			  or minetest.get_item_group(tonode.name, "tubedevice_receiver") == 1) then
 | 
								  or core.get_item_group(tonode.name, "tubedevice_receiver") == 1) then
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -252,7 +251,7 @@ local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		local frommeta = minetest.get_meta(frompos)
 | 
							local frommeta = core.get_meta(frompos)
 | 
				
			||||||
		frominv = frommeta:get_inventory()
 | 
							frominv = frommeta:get_inventory()
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	if fromtube.before_filter then fromtube.before_filter(frompos) end
 | 
						if fromtube.before_filter then fromtube.before_filter(frompos) end
 | 
				
			||||||
@@ -274,7 +273,7 @@ local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
				          and (not fgroup                                        -- If there's a group filter,
 | 
									          and (not fgroup                                        -- If there's a group filter,
 | 
				
			||||||
				               or (type(fgroup) == "string"                      --  it must be a string
 | 
									               or (type(fgroup) == "string"                      --  it must be a string
 | 
				
			||||||
				                   and minetest.get_item_group(                  --  and it must match.
 | 
									                   and core.get_item_group(                  --  and it must match.
 | 
				
			||||||
				                                stack:get_name(), fgroup) ~= 0))
 | 
									                                stack:get_name(), fgroup) ~= 0))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				          and (not fwear                                         -- If there's a wear filter:
 | 
									          and (not fwear                                         -- If there's a wear filter:
 | 
				
			||||||
@@ -314,6 +313,8 @@ local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			|||||||
				return a < b
 | 
									return a < b
 | 
				
			||||||
			end)
 | 
								end)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
							local available_items = {}
 | 
				
			||||||
 | 
							local available_count = 0
 | 
				
			||||||
		for _, spos in ipairs(sposes) do
 | 
							for _, spos in ipairs(sposes) do
 | 
				
			||||||
			local stack = frominv:get_stack(frominvname, spos)
 | 
								local stack = frominv:get_stack(frominvname, spos)
 | 
				
			||||||
			local doRemove = stack:get_count()
 | 
								local doRemove = stack:get_count()
 | 
				
			||||||
@@ -332,39 +333,63 @@ local function punch_filter(data, filtpos, filtnode, msg)
 | 
				
			|||||||
					filtmeta:set_int("slotseq_index", nextpos)
 | 
										filtmeta:set_int("slotseq_index", nextpos)
 | 
				
			||||||
					set_filter_infotext(data, filtmeta)
 | 
										set_filter_infotext(data, filtmeta)
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
				local item
 | 
					 | 
				
			||||||
				local count
 | 
									local count
 | 
				
			||||||
				if data.stackwise then
 | 
									if data.stackwise then
 | 
				
			||||||
					count = math.min(stack:get_count(), doRemove)
 | 
										count = math.min(stack:get_count(), doRemove)
 | 
				
			||||||
					if filterfor.count and (filterfor.count > 1 or data.digiline) then
 | 
										if filterfor.count and (filterfor.count > 1 or data.digiline) then
 | 
				
			||||||
						if exmatch_mode ~= 0 and filterfor.count > count then
 | 
											count = math.min(filterfor.count - available_count, count)
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
										table.insert(available_items, {spos = spos, count = count})
 | 
				
			||||||
 | 
										available_count = available_count + count
 | 
				
			||||||
 | 
										if not filterfor.count or available_count >= filterfor.count then
 | 
				
			||||||
 | 
											break
 | 
				
			||||||
 | 
										end
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										table.insert(available_items, {spos = spos, count = 1})
 | 
				
			||||||
 | 
										available_count = 1
 | 
				
			||||||
 | 
										break  -- only one item allowed so ignore other stacks
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							if available_count == 0 or (exmatch_mode ~= 0 and filterfor.count and available_count < filterfor.count) then
 | 
				
			||||||
			return false -- not enough, fail
 | 
								return false -- not enough, fail
 | 
				
			||||||
						else
 | 
					 | 
				
			||||||
							-- limit quantity to filter amount
 | 
					 | 
				
			||||||
							count = math.min(filterfor.count, count)
 | 
					 | 
				
			||||||
						end
 | 
					 | 
				
			||||||
					end
 | 
					 | 
				
			||||||
				else
 | 
					 | 
				
			||||||
					count = 1
 | 
					 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
							local taken_stacks = {}
 | 
				
			||||||
 | 
							for _,item in ipairs(available_items) do
 | 
				
			||||||
 | 
								local stack = frominv:get_stack(frominvname, item.spos)
 | 
				
			||||||
 | 
								local taken
 | 
				
			||||||
			if fromtube.remove_items then
 | 
								if fromtube.remove_items then
 | 
				
			||||||
					-- it could be the entire stack...
 | 
									taken = fromtube.remove_items(frompos, fromnode, stack, dir, item.count, frominvname, item.spos)
 | 
				
			||||||
					item = fromtube.remove_items(frompos, fromnode, stack, dir, count, frominvname, spos)
 | 
					 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
					item = stack:take_item(count)
 | 
									taken = stack:take_item(item.count)
 | 
				
			||||||
					frominv:set_stack(frominvname, spos, stack)
 | 
									frominv:set_stack(frominvname, item.spos, stack)
 | 
				
			||||||
				if fromdef.on_metadata_inventory_take then
 | 
									if fromdef.on_metadata_inventory_take then
 | 
				
			||||||
						fromdef.on_metadata_inventory_take(frompos, frominvname, spos, item, fakeplayer)
 | 
										fromdef.on_metadata_inventory_take(frompos, frominvname, item.spos, taken, fakeplayer)
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
								if not taken:is_empty() then
 | 
				
			||||||
 | 
									table.insert(taken_stacks, taken)
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							if #taken_stacks > 1 then
 | 
				
			||||||
 | 
								-- merge stacks if possible to reduce items in tubes
 | 
				
			||||||
 | 
								local merged = {}
 | 
				
			||||||
 | 
								for _,a in ipairs(taken_stacks) do
 | 
				
			||||||
 | 
									for _,b in ipairs(merged) do
 | 
				
			||||||
 | 
										a = b:add_item(a)
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
									if not a:is_empty() then
 | 
				
			||||||
 | 
										table.insert(merged, a)
 | 
				
			||||||
 | 
									end
 | 
				
			||||||
 | 
								end
 | 
				
			||||||
 | 
								taken_stacks = merged
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							for _,stack in ipairs(taken_stacks) do
 | 
				
			||||||
			local pos = vector.add(frompos, vector.multiply(dir, 1.4))
 | 
								local pos = vector.add(frompos, vector.multiply(dir, 1.4))
 | 
				
			||||||
			local start_pos = vector.add(frompos, dir)
 | 
								local start_pos = vector.add(frompos, dir)
 | 
				
			||||||
				pipeworks.tube_inject_item(pos, start_pos, dir, item,
 | 
								pipeworks.tube_inject_item(pos, start_pos, dir, stack, fakeplayer:get_player_name(), item_tags)
 | 
				
			||||||
					fakeplayer:get_player_name(), item_tags)
 | 
					 | 
				
			||||||
				return true -- only fire one item, please
 | 
					 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		end
 | 
							return true
 | 
				
			||||||
		return false
 | 
					 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, frominvname in ipairs(type(fromtube.input_inventory) == "table" and fromtube.input_inventory or {fromtube.input_inventory}) do
 | 
						for _, frominvname in ipairs(type(fromtube.input_inventory) == "table" and fromtube.input_inventory or {fromtube.input_inventory}) do
 | 
				
			||||||
@@ -417,14 +442,14 @@ for _, data in ipairs({
 | 
				
			|||||||
			key = "node_sound_wood_defaults",
 | 
								key = "node_sound_wood_defaults",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		on_construct = function(pos)
 | 
							on_construct = function(pos)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			set_filter_formspec(data, meta)
 | 
								set_filter_formspec(data, meta)
 | 
				
			||||||
			set_filter_infotext(data, meta)
 | 
								set_filter_infotext(data, meta)
 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
								local inv = meta:get_inventory()
 | 
				
			||||||
			inv:set_size("main", 8*2)
 | 
								inv:set_size("main", 8*2)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		after_place_node = function (pos, placer)
 | 
							after_place_node = function (pos, placer)
 | 
				
			||||||
			minetest.get_meta(pos):set_string("owner", placer:get_player_name())
 | 
								core.get_meta(pos):set_string("owner", placer:get_player_name())
 | 
				
			||||||
			pipeworks.after_place(pos)
 | 
								pipeworks.after_place(pos)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		after_dig_node = pipeworks.after_dig,
 | 
							after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
@@ -433,7 +458,7 @@ for _, data in ipairs({
 | 
				
			|||||||
			if not pipeworks.may_configure(pos, player) then
 | 
								if not pipeworks.may_configure(pos, player) then
 | 
				
			||||||
				return 0
 | 
									return 0
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			local inv = minetest.get_meta(pos):get_inventory()
 | 
								local inv = core.get_meta(pos):get_inventory()
 | 
				
			||||||
			inv:set_stack("main", index, stack)
 | 
								inv:set_stack("main", index, stack)
 | 
				
			||||||
			return 0
 | 
								return 0
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
@@ -441,7 +466,7 @@ for _, data in ipairs({
 | 
				
			|||||||
			if not pipeworks.may_configure(pos, player) then
 | 
								if not pipeworks.may_configure(pos, player) then
 | 
				
			||||||
				return 0
 | 
									return 0
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			local inv = minetest.get_meta(pos):get_inventory()
 | 
								local inv = core.get_meta(pos):get_inventory()
 | 
				
			||||||
			local fake_stack = inv:get_stack("main", index)
 | 
								local fake_stack = inv:get_stack("main", index)
 | 
				
			||||||
			fake_stack:take_item(stack:get_count())
 | 
								fake_stack:take_item(stack:get_count())
 | 
				
			||||||
			inv:set_stack("main", index, fake_stack)
 | 
								inv:set_stack("main", index, fake_stack)
 | 
				
			||||||
@@ -451,17 +476,12 @@ for _, data in ipairs({
 | 
				
			|||||||
			if not pipeworks.may_configure(pos, player) then return 0 end
 | 
								if not pipeworks.may_configure(pos, player) then return 0 end
 | 
				
			||||||
			return count
 | 
								return count
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		can_dig = function(pos, player)
 | 
					 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
					 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
					 | 
				
			||||||
			return inv:is_empty("main")
 | 
					 | 
				
			||||||
		end,
 | 
					 | 
				
			||||||
		tube = {connect_sides = {right = 1}},
 | 
							tube = {connect_sides = {right = 1}},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if data.digiline then
 | 
						if data.digiline then
 | 
				
			||||||
		node.groups.mesecon = nil
 | 
							node.groups.mesecon = nil
 | 
				
			||||||
		if not minetest.get_modpath("digilines") then
 | 
							if not core.get_modpath("digilines") then
 | 
				
			||||||
			node.groups.not_in_creative_inventory = 1
 | 
								node.groups.not_in_creative_inventory = 1
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -474,10 +494,10 @@ for _, data in ipairs({
 | 
				
			|||||||
			fs_helpers.on_receive_fields(pos, fields)
 | 
								fs_helpers.on_receive_fields(pos, fields)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if fields.channel and (fields.key_enter_field == "channel" or fields.set_channel) then
 | 
								if fields.channel and (fields.key_enter_field == "channel" or fields.set_channel) then
 | 
				
			||||||
				minetest.get_meta(pos):set_string("channel", fields.channel)
 | 
									core.get_meta(pos):set_string("channel", fields.channel)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			if pipeworks.enable_item_tags and fields.item_tags and (fields.key_enter_field == "item_tags" or fields.set_item_tags) then
 | 
								if pipeworks.enable_item_tags and fields.item_tags and (fields.key_enter_field == "item_tags" or fields.set_item_tags) then
 | 
				
			||||||
				local tags = pipeworks.sanitize_tags(fields.item_tags)
 | 
									local tags = pipeworks.sanitize_tags(fields.item_tags)
 | 
				
			||||||
				meta:set_string("item_tags", table.concat(tags, ","))
 | 
									meta:set_string("item_tags", table.concat(tags, ","))
 | 
				
			||||||
@@ -486,10 +506,10 @@ for _, data in ipairs({
 | 
				
			|||||||
			set_filter_formspec(data, meta)
 | 
								set_filter_formspec(data, meta)
 | 
				
			||||||
			set_filter_infotext(data, meta)
 | 
								set_filter_infotext(data, meta)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		node.digiline = {
 | 
							node.digilines = {
 | 
				
			||||||
			effector = {
 | 
								effector = {
 | 
				
			||||||
				action = function(pos, node, channel, msg)
 | 
									action = function(pos, node, channel, msg)
 | 
				
			||||||
					local meta = minetest.get_meta(pos)
 | 
										local meta = core.get_meta(pos)
 | 
				
			||||||
					local setchan = meta:get_string("channel")
 | 
										local setchan = meta:get_string("channel")
 | 
				
			||||||
					if setchan ~= channel then return end
 | 
										if setchan ~= channel then return end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -501,7 +521,7 @@ for _, data in ipairs({
 | 
				
			|||||||
		node.on_receive_fields = function(pos, formname, fields, sender)
 | 
							node.on_receive_fields = function(pos, formname, fields, sender)
 | 
				
			||||||
			if not pipeworks.may_configure(pos, sender) then return end
 | 
								if not pipeworks.may_configure(pos, sender) then return end
 | 
				
			||||||
			fs_helpers.on_receive_fields(pos, fields)
 | 
								fs_helpers.on_receive_fields(pos, fields)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			meta:set_int("slotseq_index", 1)
 | 
								meta:set_int("slotseq_index", 1)
 | 
				
			||||||
			if pipeworks.enable_item_tags and fields.item_tags and (fields.key_enter_field == "item_tags" or fields.set_item_tags) then
 | 
								if pipeworks.enable_item_tags and fields.item_tags and (fields.key_enter_field == "item_tags" or fields.set_item_tags) then
 | 
				
			||||||
				local tags = pipeworks.sanitize_tags(fields.item_tags)
 | 
									local tags = pipeworks.sanitize_tags(fields.item_tags)
 | 
				
			||||||
@@ -524,7 +544,7 @@ for _, data in ipairs({
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:"..data.name, node)
 | 
						core.register_node("pipeworks:"..data.name, node)
 | 
				
			||||||
	pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:"..data.name
 | 
						pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:"..data.name
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -536,11 +556,12 @@ dropped.
 | 
				
			|||||||
local function put_to_inputinv(pos, node, filtmeta, list)
 | 
					local function put_to_inputinv(pos, node, filtmeta, list)
 | 
				
			||||||
	local dir = pipeworks.facedir_to_right_dir(node.param2)
 | 
						local dir = pipeworks.facedir_to_right_dir(node.param2)
 | 
				
			||||||
	local frompos = vector.subtract(pos, dir)
 | 
						local frompos = vector.subtract(pos, dir)
 | 
				
			||||||
	local fromnode = minetest.get_node(frompos)
 | 
						local fromnode = core.get_node(frompos)
 | 
				
			||||||
	local fromdef = minetest.registered_nodes[fromnode.name]
 | 
						local fromdef = core.registered_nodes[fromnode.name]
 | 
				
			||||||
	if not fromdef or not fromdef.tube then
 | 
						if not (fromdef and fromdef.tube) then
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local fromtube = fromdef.tube
 | 
						local fromtube = fromdef.tube
 | 
				
			||||||
	local frominv
 | 
						local frominv
 | 
				
			||||||
	if fromtube.return_input_invref then
 | 
						if fromtube.return_input_invref then
 | 
				
			||||||
@@ -550,41 +571,48 @@ local function put_to_inputinv(pos, node, filtmeta, list)
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		frominv = minetest.get_meta(frompos):get_inventory()
 | 
							frominv = core.get_meta(frompos):get_inventory()
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local listname = type(fromtube.input_inventory) == "table" and
 | 
						local listname = type(fromtube.input_inventory) == "table" and
 | 
				
			||||||
			fromtube.input_inventory[1] or fromtube.input_inventory
 | 
								fromtube.input_inventory[1] or fromtube.input_inventory
 | 
				
			||||||
	if not listname then
 | 
						if not listname then
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for i = 1, #list do
 | 
						for i = 1, #list do
 | 
				
			||||||
		local item = list[i]
 | 
							local item = list[i]
 | 
				
			||||||
		if not item:is_empty() then
 | 
							if not item:is_empty() then
 | 
				
			||||||
			local leftover = frominv:add_item(listname, item)
 | 
								local leftover = frominv:add_item(listname, item)
 | 
				
			||||||
			if not leftover:is_empty() then
 | 
								if not leftover:is_empty() then
 | 
				
			||||||
				minetest.add_item(pos, leftover)
 | 
									core.add_item(pos, leftover)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	return true
 | 
						return true
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
minetest.register_lbm({
 | 
					core.register_lbm({
 | 
				
			||||||
	label = "Give back items of old filters that had real inventories",
 | 
						label = "Give back items of old filters that had real inventories",
 | 
				
			||||||
	name = "pipeworks:give_back_old_filter_items",
 | 
						name = "pipeworks:give_back_old_filter_items",
 | 
				
			||||||
	nodenames = {"pipeworks:filter", "pipeworks:mese_filter"},
 | 
						nodenames = {"pipeworks:filter", "pipeworks:mese_filter"},
 | 
				
			||||||
	run_at_every_load = false,
 | 
						run_at_every_load = false,
 | 
				
			||||||
	action = function(pos, node)
 | 
						action = function(pos, node)
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = core.get_meta(pos)
 | 
				
			||||||
		local list = meta:get_inventory():get_list("main")
 | 
							local list = meta:get_inventory():get_list("main")
 | 
				
			||||||
 | 
							if not list then
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if put_to_inputinv(pos, node, meta, list) then
 | 
							if put_to_inputinv(pos, node, meta, list) then
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pos.y = pos.y + 1
 | 
							pos.y = pos.y + 1
 | 
				
			||||||
		for i = 1, #list do
 | 
							for i = 1, #list do
 | 
				
			||||||
			local item = list[i]
 | 
								local item = list[i]
 | 
				
			||||||
			if not item:is_empty() then
 | 
								if not item:is_empty() then
 | 
				
			||||||
				minetest.add_item(pos, item)
 | 
									core.add_item(pos, item)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
-- Contributed by mauvebic, 2013-01-03, rewritten a bit by Vanessa Ezekowitz
 | 
					-- Contributed by mauvebic, 2013-01-03, rewritten a bit by Vanessa Ezekowitz
 | 
				
			||||||
--
 | 
					--
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local finitewater = minetest.settings:get_bool("liquid_finite")
 | 
					local finitewater = core.settings:get_bool("liquid_finite")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.check_for_liquids = function(pos)
 | 
					pipeworks.check_for_liquids = function(pos)
 | 
				
			||||||
	local coords = {
 | 
						local coords = {
 | 
				
			||||||
@@ -15,9 +15,9 @@ pipeworks.check_for_liquids = function(pos)
 | 
				
			|||||||
		{x=pos.x,y=pos.y,z=pos.z-1},
 | 
							{x=pos.x,y=pos.y,z=pos.z-1},
 | 
				
			||||||
		{x=pos.x,y=pos.y,z=pos.z+1},	}
 | 
							{x=pos.x,y=pos.y,z=pos.z+1},	}
 | 
				
			||||||
	for i =1,6 do
 | 
						for i =1,6 do
 | 
				
			||||||
		local name = minetest.get_node(coords[i]).name
 | 
							local name = core.get_node(coords[i]).name
 | 
				
			||||||
		if name and string.find(name,"water") then
 | 
							if name and string.find(name,"water") then
 | 
				
			||||||
			if finitewater then minetest.remove_node(coords[i]) end
 | 
								if finitewater then core.remove_node(coords[i]) end
 | 
				
			||||||
			return true
 | 
								return true
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -37,19 +37,19 @@ pipeworks.check_for_inflows = function(pos,node)
 | 
				
			|||||||
	local source = false
 | 
						local source = false
 | 
				
			||||||
	for i = 1, 6 do
 | 
						for i = 1, 6 do
 | 
				
			||||||
		if newnode then break end
 | 
							if newnode then break end
 | 
				
			||||||
		local testnode = minetest.get_node(coords[i])
 | 
							local testnode = core.get_node(coords[i])
 | 
				
			||||||
		local name = testnode.name
 | 
							local name = testnode.name
 | 
				
			||||||
		if name and (name == "pipeworks:pump_on" and pipeworks.check_for_liquids(coords[i])) or string.find(name,"_loaded") then
 | 
							if name and (name == "pipeworks:pump_on" and pipeworks.check_for_liquids(coords[i])) or string.find(name,"_loaded") then
 | 
				
			||||||
			if string.find(name,"_loaded") then
 | 
								if string.find(name,"_loaded") then
 | 
				
			||||||
				source = minetest.get_meta(coords[i]):get_string("source")
 | 
									source = core.get_meta(coords[i]):get_string("source")
 | 
				
			||||||
				if source == minetest.pos_to_string(pos) then break end
 | 
									if source == core.pos_to_string(pos) then break end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			if string.find(name, "valve") or string.find(name, "sensor")
 | 
								if string.find(name, "valve") or string.find(name, "sensor")
 | 
				
			||||||
			  or string.find(name, "straight_pipe") or string.find(name, "panel") then
 | 
								  or string.find(name, "straight_pipe") or string.find(name, "panel") then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if ((i == 3 or i == 4) and minetest.facedir_to_dir(testnode.param2).x ~= 0)
 | 
									if ((i == 3 or i == 4) and core.facedir_to_dir(testnode.param2).x ~= 0)
 | 
				
			||||||
				  or ((i == 5 or i == 6) and minetest.facedir_to_dir(testnode.param2).z ~= 0)
 | 
									  or ((i == 5 or i == 6) and core.facedir_to_dir(testnode.param2).z ~= 0)
 | 
				
			||||||
				  or ((i == 1 or i == 2) and minetest.facedir_to_dir(testnode.param2).y ~= 0) then
 | 
									  or ((i == 1 or i == 2) and core.facedir_to_dir(testnode.param2).y ~= 0) then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					newnode = string.gsub(node.name,"empty","loaded")
 | 
										newnode = string.gsub(node.name,"empty","loaded")
 | 
				
			||||||
					source = {x=coords[i].x,y=coords[i].y,z=coords[i].z}
 | 
										source = {x=coords[i].x,y=coords[i].y,z=coords[i].z}
 | 
				
			||||||
@@ -61,30 +61,30 @@ pipeworks.check_for_inflows = function(pos,node)
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	if newnode then
 | 
						if newnode then
 | 
				
			||||||
		minetest.add_node(pos,{name=newnode, param2 = node.param2})
 | 
							core.add_node(pos,{name=newnode, param2 = node.param2})
 | 
				
			||||||
		minetest.get_meta(pos):set_string("source",minetest.pos_to_string(source))
 | 
							core.get_meta(pos):set_string("source",core.pos_to_string(source))
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.check_sources = function(pos,node)
 | 
					pipeworks.check_sources = function(pos,node)
 | 
				
			||||||
	local sourcepos = minetest.string_to_pos(minetest.get_meta(pos):get_string("source"))
 | 
						local sourcepos = core.string_to_pos(core.get_meta(pos):get_string("source"))
 | 
				
			||||||
	if not sourcepos then return end
 | 
						if not sourcepos then return end
 | 
				
			||||||
	local source = minetest.get_node(sourcepos).name
 | 
						local source = core.get_node(sourcepos).name
 | 
				
			||||||
	local newnode = false
 | 
						local newnode = false
 | 
				
			||||||
	if source and not ((source == "pipeworks:pump_on" and pipeworks.check_for_liquids(sourcepos)) or string.find(source,"_loaded") or source == "ignore" ) then
 | 
						if source and not ((source == "pipeworks:pump_on" and pipeworks.check_for_liquids(sourcepos)) or string.find(source,"_loaded") or source == "ignore" ) then
 | 
				
			||||||
		newnode = string.gsub(node.name,"loaded","empty")
 | 
							newnode = string.gsub(node.name,"loaded","empty")
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if newnode then
 | 
						if newnode then
 | 
				
			||||||
		minetest.add_node(pos,{name=newnode, param2 = node.param2})
 | 
							core.add_node(pos,{name=newnode, param2 = node.param2})
 | 
				
			||||||
		minetest.get_meta(pos):set_string("source","")
 | 
							core.get_meta(pos):set_string("source","")
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.spigot_check = function(pos, node)
 | 
					pipeworks.spigot_check = function(pos, node)
 | 
				
			||||||
	local belowname = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name
 | 
						local belowname = core.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name
 | 
				
			||||||
	if belowname and (belowname == "air" or belowname == pipeworks.liquids.water.flowing or belowname == pipeworks.liquids.water.source) then
 | 
						if belowname and (belowname == "air" or belowname == pipeworks.liquids.water.flowing or belowname == pipeworks.liquids.water.source) then
 | 
				
			||||||
		local spigotname = minetest.get_node(pos).name
 | 
							local spigotname = core.get_node(pos).name
 | 
				
			||||||
		local fdir=node.param2 % 4
 | 
							local fdir=node.param2 % 4
 | 
				
			||||||
		local check = {
 | 
							local check = {
 | 
				
			||||||
			{x=pos.x,y=pos.y,z=pos.z+1},
 | 
								{x=pos.x,y=pos.y,z=pos.z+1},
 | 
				
			||||||
@@ -92,19 +92,19 @@ pipeworks.spigot_check = function(pos, node)
 | 
				
			|||||||
			{x=pos.x,y=pos.y,z=pos.z-1},
 | 
								{x=pos.x,y=pos.y,z=pos.z-1},
 | 
				
			||||||
			{x=pos.x-1,y=pos.y,z=pos.z}
 | 
								{x=pos.x-1,y=pos.y,z=pos.z}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		local near_node = minetest.get_node(check[fdir+1])
 | 
							local near_node = core.get_node(check[fdir+1])
 | 
				
			||||||
		if near_node and string.find(near_node.name, "_loaded") then
 | 
							if near_node and string.find(near_node.name, "_loaded") then
 | 
				
			||||||
			if spigotname and spigotname == "pipeworks:spigot" then
 | 
								if spigotname and spigotname == "pipeworks:spigot" then
 | 
				
			||||||
				minetest.add_node(pos,{name = "pipeworks:spigot_pouring", param2 = fdir})
 | 
									core.add_node(pos,{name = "pipeworks:spigot_pouring", param2 = fdir})
 | 
				
			||||||
				if finitewater or belowname ~= pipeworks.liquids.water.source then
 | 
									if finitewater or belowname ~= pipeworks.liquids.water.source then
 | 
				
			||||||
					minetest.add_node({x=pos.x,y=pos.y-1,z=pos.z},{name = pipeworks.liquids.water.source})
 | 
										core.add_node({x=pos.x,y=pos.y-1,z=pos.z},{name = pipeworks.liquids.water.source})
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			if spigotname == "pipeworks:spigot_pouring" then
 | 
								if spigotname == "pipeworks:spigot_pouring" then
 | 
				
			||||||
				minetest.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:spigot", param2 = fdir})
 | 
									core.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:spigot", param2 = fdir})
 | 
				
			||||||
				if belowname == pipeworks.liquids.water.source and not finitewater then
 | 
									if belowname == pipeworks.liquids.water.source and not finitewater then
 | 
				
			||||||
					minetest.remove_node({x=pos.x,y=pos.y-1,z=pos.z})
 | 
										core.remove_node({x=pos.x,y=pos.y-1,z=pos.z})
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
@@ -112,22 +112,22 @@ pipeworks.spigot_check = function(pos, node)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.fountainhead_check = function(pos, node)
 | 
					pipeworks.fountainhead_check = function(pos, node)
 | 
				
			||||||
	local abovename = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}).name
 | 
						local abovename = core.get_node({x=pos.x,y=pos.y+1,z=pos.z}).name
 | 
				
			||||||
	if abovename and (abovename == "air" or abovename == pipeworks.liquids.water.flowing or abovename == pipeworks.liquids.water.source) then
 | 
						if abovename and (abovename == "air" or abovename == pipeworks.liquids.water.flowing or abovename == pipeworks.liquids.water.source) then
 | 
				
			||||||
		local fountainhead_name = minetest.get_node(pos).name
 | 
							local fountainhead_name = core.get_node(pos).name
 | 
				
			||||||
		local near_node = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
 | 
							local near_node = core.get_node({x=pos.x,y=pos.y-1,z=pos.z})
 | 
				
			||||||
		if near_node and string.find(near_node.name, "_loaded") then
 | 
							if near_node and string.find(near_node.name, "_loaded") then
 | 
				
			||||||
			if fountainhead_name and fountainhead_name == "pipeworks:fountainhead" then
 | 
								if fountainhead_name and fountainhead_name == "pipeworks:fountainhead" then
 | 
				
			||||||
				minetest.add_node(pos,{name = "pipeworks:fountainhead_pouring"})
 | 
									core.add_node(pos,{name = "pipeworks:fountainhead_pouring"})
 | 
				
			||||||
				if finitewater or abovename ~= pipeworks.liquids.water.source then
 | 
									if finitewater or abovename ~= pipeworks.liquids.water.source then
 | 
				
			||||||
					minetest.add_node({x=pos.x,y=pos.y+1,z=pos.z},{name = pipeworks.liquids.water.source})
 | 
										core.add_node({x=pos.x,y=pos.y+1,z=pos.z},{name = pipeworks.liquids.water.source})
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			if fountainhead_name == "pipeworks:fountainhead_pouring" then
 | 
								if fountainhead_name == "pipeworks:fountainhead_pouring" then
 | 
				
			||||||
				minetest.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:fountainhead"})
 | 
									core.add_node({x=pos.x,y=pos.y,z=pos.z},{name = "pipeworks:fountainhead"})
 | 
				
			||||||
				if abovename == pipeworks.liquids.water.source and not finitewater then
 | 
									if abovename == pipeworks.liquids.water.source and not finitewater then
 | 
				
			||||||
					minetest.remove_node({x=pos.x,y=pos.y+1,z=pos.z})
 | 
										core.remove_node({x=pos.x,y=pos.y+1,z=pos.z})
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										40
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								init.lua
									
									
									
									
									
								
							@@ -6,16 +6,16 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
pipeworks = {
 | 
					pipeworks = {
 | 
				
			||||||
	ui_cat_tube_list = {},
 | 
						ui_cat_tube_list = {},
 | 
				
			||||||
	worldpath = minetest.get_worldpath(),
 | 
						worldpath = core.get_worldpath(),
 | 
				
			||||||
	modpath = minetest.get_modpath("pipeworks"),
 | 
						modpath = core.get_modpath("pipeworks"),
 | 
				
			||||||
	liquids = {
 | 
						liquids = {
 | 
				
			||||||
		water = {
 | 
							water = {
 | 
				
			||||||
			source = minetest.registered_nodes["mapgen_water_source"].name,
 | 
								source = core.registered_nodes["mapgen_water_source"].name,
 | 
				
			||||||
			flowing = minetest.registered_nodes["mapgen_water_source"].liquid_alternative_flowing
 | 
								flowing = core.registered_nodes["mapgen_water_source"].liquid_alternative_flowing
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		river_water = {
 | 
							river_water = {
 | 
				
			||||||
			source = minetest.registered_nodes["mapgen_river_water_source"].name,
 | 
								source = core.registered_nodes["mapgen_river_water_source"].name,
 | 
				
			||||||
			flowing = minetest.registered_nodes["mapgen_river_water_source"].liquid_alternative_flowing
 | 
								flowing = core.registered_nodes["mapgen_river_water_source"].liquid_alternative_flowing
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -29,14 +29,14 @@ if worldsettingsfile then
 | 
				
			|||||||
	dofile(worldsettingspath)
 | 
						dofile(worldsettingspath)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
if pipeworks.toggles.pipe_mode == "pressure" then
 | 
					if pipeworks.toggles.pipe_mode == "pressure" then
 | 
				
			||||||
	minetest.log("warning", "pipeworks pressure logic mode comes with caveats and differences in behaviour, you have been warned!")
 | 
						core.log("warning", "pipeworks pressure logic mode comes with caveats and differences in behaviour, you have been warned!")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
if pipeworks.entity_update_interval >= 0.2 and pipeworks.enable_accelerator_tube then
 | 
					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.")
 | 
						core.log("warning", "pipeworks accelerator tubes will not entirely work with an entity update interval 0.2 or above.")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pipeworks.logger = function(msg)
 | 
					pipeworks.logger = function(msg)
 | 
				
			||||||
	minetest.log("action", "[pipeworks] "..msg)
 | 
						core.log("action", "[pipeworks] "..msg)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-------------------------------------------
 | 
					-------------------------------------------
 | 
				
			||||||
@@ -47,7 +47,7 @@ if pipeworks.toggles.finite_water == nil then
 | 
				
			|||||||
	dofile(pipeworks.modpath.."/autodetect-finite-water.lua")
 | 
						dofile(pipeworks.modpath.."/autodetect-finite-water.lua")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("signs_lib") then
 | 
					if core.get_modpath("signs_lib") then
 | 
				
			||||||
	dofile(pipeworks.modpath.."/signs_compat.lua")
 | 
						dofile(pipeworks.modpath.."/signs_compat.lua")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -73,7 +73,7 @@ dofile(pipeworks.modpath.."/tubes/tags.lua")
 | 
				
			|||||||
if pipeworks.enable_teleport_tube then
 | 
					if pipeworks.enable_teleport_tube then
 | 
				
			||||||
	dofile(pipeworks.modpath.."/tubes/teleport.lua")
 | 
						dofile(pipeworks.modpath.."/tubes/teleport.lua")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
if pipeworks.enable_lua_tube and minetest.get_modpath("mesecons") then
 | 
					if pipeworks.enable_lua_tube and core.get_modpath("mesecons") then
 | 
				
			||||||
	dofile(pipeworks.modpath.."/tubes/lua.lua")
 | 
						dofile(pipeworks.modpath.."/tubes/lua.lua")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
if pipeworks.enable_sand_tube or pipeworks.enable_mese_sand_tube then
 | 
					if pipeworks.enable_sand_tube or pipeworks.enable_mese_sand_tube then
 | 
				
			||||||
@@ -99,10 +99,10 @@ end
 | 
				
			|||||||
if pipeworks.enable_redefines then
 | 
					if pipeworks.enable_redefines then
 | 
				
			||||||
	dofile(pipeworks.modpath.."/compat-chests.lua")
 | 
						dofile(pipeworks.modpath.."/compat-chests.lua")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
if pipeworks.enable_redefines and (minetest.get_modpath("default") or minetest.get_modpath("hades_core")) then
 | 
					if pipeworks.enable_redefines and (core.get_modpath("default") or core.get_modpath("hades_core")) then
 | 
				
			||||||
	dofile(pipeworks.modpath.."/compat-furnaces.lua")
 | 
						dofile(pipeworks.modpath.."/compat-furnaces.lua")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
if pipeworks.enable_redefines and minetest.get_modpath("mcl_furnaces") then
 | 
					if pipeworks.enable_redefines and core.get_modpath("mcl_furnaces") then
 | 
				
			||||||
	dofile(pipeworks.modpath.."/mcl_furnaces.lua")
 | 
						dofile(pipeworks.modpath.."/mcl_furnaces.lua")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
if pipeworks.enable_autocrafter then
 | 
					if pipeworks.enable_autocrafter then
 | 
				
			||||||
@@ -111,18 +111,24 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
dofile(pipeworks.modpath.."/crafts.lua")
 | 
					dofile(pipeworks.modpath.."/crafts.lua")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_alias("pipeworks:pipe", "pipeworks:pipe_110000_empty")
 | 
					core.register_alias("pipeworks:pipe", "pipeworks:pipe_110000_empty")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Unified Inventory categories integration
 | 
					-- Unified Inventory categories integration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("unified_inventory") and unified_inventory.registered_categories then
 | 
					if core.get_modpath("unified_inventory") and unified_inventory.registered_categories then
 | 
				
			||||||
	if not unified_inventory.registered_categories["automation"] then
 | 
						if not unified_inventory.registered_categories["automation"] then
 | 
				
			||||||
 | 
							local symbol
 | 
				
			||||||
 | 
							if pipeworks.enable_lua_tube then
 | 
				
			||||||
 | 
								symbol = "pipeworks:lua_tube000000"
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								symbol = "pipeworks:mese_filter" -- fallback when lua tube isn't registered
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
		unified_inventory.register_category("automation", {
 | 
							unified_inventory.register_category("automation", {
 | 
				
			||||||
			symbol = "pipeworks:lua_tube000000",
 | 
								symbol = symbol,
 | 
				
			||||||
			label = "Automation components"
 | 
								label = "Automation components"
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	unified_inventory.add_category_items("automation", pipeworks.ui_cat_tube_list)
 | 
						unified_inventory.add_category_items("automation", pipeworks.ui_cat_tube_list)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.log("info", "Pipeworks loaded!")
 | 
					core.log("info", "Pipeworks loaded!")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
local luaentity = pipeworks.luaentity
 | 
					local luaentity = pipeworks.luaentity
 | 
				
			||||||
local enable_max_limit = minetest.settings:get_bool("pipeworks_enable_items_per_tube_limit")
 | 
					local enable_max_limit = core.settings:get_bool("pipeworks_enable_items_per_tube_limit")
 | 
				
			||||||
local max_tube_limit = tonumber(minetest.settings:get("pipeworks_max_items_per_tube")) or 30
 | 
					local max_tube_limit = tonumber(core.settings:get("pipeworks_max_items_per_tube")) or 30
 | 
				
			||||||
if enable_max_limit == nil then enable_max_limit = true end
 | 
					if enable_max_limit == nil then enable_max_limit = true end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_item_tags then
 | 
					if pipeworks.enable_item_tags then
 | 
				
			||||||
	local max_tag_length = tonumber(minetest.settings:get("pipeworks_max_item_tag_length")) or 32
 | 
						local max_tag_length = tonumber(core.settings:get("pipeworks_max_item_tag_length")) or 32
 | 
				
			||||||
	local max_tags = tonumber(minetest.settings:get("pipeworks_max_item_tags")) or 16
 | 
						local max_tags = tonumber(core.settings:get("pipeworks_max_item_tags")) or 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	function pipeworks.sanitize_tags(tags)
 | 
						function pipeworks.sanitize_tags(tags)
 | 
				
			||||||
		if type(tags) == "string" then
 | 
							if type(tags) == "string" then
 | 
				
			||||||
@@ -35,15 +35,26 @@ end
 | 
				
			|||||||
function pipeworks.tube_inject_item(pos, start_pos, velocity, item, owner, tags)
 | 
					function pipeworks.tube_inject_item(pos, start_pos, velocity, item, owner, tags)
 | 
				
			||||||
	-- Take item in any format
 | 
						-- Take item in any format
 | 
				
			||||||
	local stack = ItemStack(item)
 | 
						local stack = ItemStack(item)
 | 
				
			||||||
 | 
						local to_pos = vector.add(pos, velocity)
 | 
				
			||||||
 | 
						local def = core.registered_nodes[core.get_node(to_pos).name]
 | 
				
			||||||
 | 
						if not def or not def.groups or not (def.groups.tube
 | 
				
			||||||
 | 
								or def.groups.tubedevice or def.groups.tubedevice_receiver) then
 | 
				
			||||||
 | 
							local dropped_item = core.add_item(pos, stack)
 | 
				
			||||||
 | 
							if dropped_item then
 | 
				
			||||||
 | 
								dropped_item:set_velocity(vector.multiply(velocity, 5))
 | 
				
			||||||
 | 
							end
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
	local obj = luaentity.add_entity(pos, "pipeworks:tubed_item")
 | 
						local obj = luaentity.add_entity(pos, "pipeworks:tubed_item")
 | 
				
			||||||
 | 
						if obj then
 | 
				
			||||||
		obj:set_item(stack:to_string())
 | 
							obj:set_item(stack:to_string())
 | 
				
			||||||
		obj.start_pos = vector.new(start_pos)
 | 
							obj.start_pos = vector.new(start_pos)
 | 
				
			||||||
		obj:set_velocity(velocity)
 | 
							obj:set_velocity(velocity)
 | 
				
			||||||
		obj.owner = owner
 | 
							obj.owner = owner
 | 
				
			||||||
		obj.tags = tags
 | 
							obj.tags = tags
 | 
				
			||||||
	--obj:set_color("red") -- todo: this is test-only code
 | 
					 | 
				
			||||||
		return obj
 | 
							return obj
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- adding two tube functions
 | 
					-- adding two tube functions
 | 
				
			||||||
-- can_remove(pos,node,stack,dir) returns the maximum number of items of that stack that can be removed
 | 
					-- can_remove(pos,node,stack,dir) returns the maximum number of items of that stack that can be removed
 | 
				
			||||||
@@ -63,14 +74,14 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local tube_item_count = {}
 | 
					local tube_item_count = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_globalstep(function(dtime)
 | 
					core.register_globalstep(function(dtime)
 | 
				
			||||||
	if not luaentity.entities then
 | 
						if not luaentity.entities then
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	tube_item_count = {}
 | 
						tube_item_count = {}
 | 
				
			||||||
	for _, entity in pairs(luaentity.entities) do
 | 
						for _, entity in pairs(luaentity.entities) do
 | 
				
			||||||
		if entity.name == "pipeworks:tubed_item" then
 | 
							if entity.name == "pipeworks:tubed_item" then
 | 
				
			||||||
			local h = minetest.hash_node_position(vector.round(entity._pos))
 | 
								local h = core.hash_node_position(vector.round(entity._pos))
 | 
				
			||||||
			tube_item_count[h] = (tube_item_count[h] or 0) + 1
 | 
								tube_item_count[h] = (tube_item_count[h] or 0) + 1
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -83,19 +94,20 @@ end)
 | 
				
			|||||||
-- exceeds the limit configured per tube, replace it with a broken one.
 | 
					-- exceeds the limit configured per tube, replace it with a broken one.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
function pipeworks.break_tube(pos)
 | 
					function pipeworks.break_tube(pos)
 | 
				
			||||||
	local node = minetest.get_node(pos)
 | 
						local node = core.get_node(pos)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						if core.get_item_group(node.name, "tube") ~= 1 then return end
 | 
				
			||||||
	meta:set_string("the_tube_was", minetest.serialize(node))
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"})
 | 
						meta:set_string("the_tube_was", core.serialize(node))
 | 
				
			||||||
 | 
						core.swap_node(pos, {name = "pipeworks:broken_tube_1"})
 | 
				
			||||||
	pipeworks.scan_for_tube_objects(pos)
 | 
						pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local crunch_tube = function(pos, cnode, cmeta)
 | 
					local crunch_tube = function(pos, cnode, cmeta)
 | 
				
			||||||
	if enable_max_limit then
 | 
						if enable_max_limit then
 | 
				
			||||||
		local h = minetest.hash_node_position(pos)
 | 
							local h = core.hash_node_position(pos)
 | 
				
			||||||
		local itemcount = tube_item_count[h] or 0
 | 
							local itemcount = tube_item_count[h] or 0
 | 
				
			||||||
		if itemcount > max_tube_limit then
 | 
							if itemcount > max_tube_limit then
 | 
				
			||||||
			pipeworks.logger("Warning - a tube at "..minetest.pos_to_string(pos).." broke due to too many items ("..itemcount..")")
 | 
								pipeworks.logger("Warning - a tube at "..core.pos_to_string(pos).." broke due to too many items ("..itemcount..")")
 | 
				
			||||||
			pipeworks.break_tube(pos)
 | 
								pipeworks.break_tube(pos)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -110,12 +122,12 @@ local function go_next_compat(pos, cnode, cmeta, cycledir, vel, stack, owner, ta
 | 
				
			|||||||
	local max_priority = 0
 | 
						local max_priority = 0
 | 
				
			||||||
	local can_go
 | 
						local can_go
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local def = minetest.registered_nodes[cnode.name]
 | 
						local def = core.registered_nodes[cnode.name]
 | 
				
			||||||
	if def and def.tube and def.tube.can_go then
 | 
						if def and def.tube and def.tube.can_go then
 | 
				
			||||||
		can_go = def.tube.can_go(pos, cnode, vel, stack, tags)
 | 
							can_go = def.tube.can_go(pos, cnode, vel, stack, tags)
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		local adjlist_string = minetest.get_meta(pos):get_string("adjlist")
 | 
							local adjlist_string = core.get_meta(pos):get_string("adjlist")
 | 
				
			||||||
		local adjlist = minetest.deserialize(adjlist_string) or default_adjlist -- backward compat: if not found, use old behavior: all directions
 | 
							local adjlist = core.deserialize(adjlist_string) or default_adjlist -- backward compat: if not found, use old behavior: all directions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		can_go = pipeworks.notvel(adjlist, vel)
 | 
							can_go = pipeworks.notvel(adjlist, vel)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -128,11 +140,11 @@ local function go_next_compat(pos, cnode, cmeta, cycledir, vel, stack, owner, ta
 | 
				
			|||||||
	for _, vect in ipairs(can_go) do
 | 
						for _, vect in ipairs(can_go) do
 | 
				
			||||||
		local npos = vector.add(pos, vect)
 | 
							local npos = vector.add(pos, vect)
 | 
				
			||||||
		pipeworks.load_position(npos)
 | 
							pipeworks.load_position(npos)
 | 
				
			||||||
		local node = minetest.get_node(npos)
 | 
							local node = core.get_node(npos)
 | 
				
			||||||
		local reg_node = minetest.registered_nodes[node.name]
 | 
							local reg_node = core.registered_nodes[node.name]
 | 
				
			||||||
		if reg_node then
 | 
							if reg_node then
 | 
				
			||||||
			local tube_def = reg_node.tube
 | 
								local tube_def = reg_node.tube
 | 
				
			||||||
			local tubedevice = minetest.get_item_group(node.name, "tubedevice")
 | 
								local tubedevice = core.get_item_group(node.name, "tubedevice")
 | 
				
			||||||
			local tube_priority = (tube_def and tube_def.priority) or 100
 | 
								local tube_priority = (tube_def and tube_def.priority) or 100
 | 
				
			||||||
			if tubedevice > 0 and tube_priority >= max_priority then
 | 
								if tubedevice > 0 and tube_priority >= max_priority then
 | 
				
			||||||
				if not tube_def or not tube_def.can_insert or
 | 
									if not tube_def or not tube_def.can_insert or
 | 
				
			||||||
@@ -172,8 +184,8 @@ end
 | 
				
			|||||||
--	if this is not nil, the luaentity spawns new tubed items for each new fragment stack,
 | 
					--	if this is not nil, the luaentity spawns new tubed items for each new fragment stack,
 | 
				
			||||||
--	then deletes itself (i.e. the original item stack).
 | 
					--	then deletes itself (i.e. the original item stack).
 | 
				
			||||||
local function go_next(pos, velocity, stack, owner, tags)
 | 
					local function go_next(pos, velocity, stack, owner, tags)
 | 
				
			||||||
	local cnode = minetest.get_node(pos)
 | 
						local cnode = core.get_node(pos)
 | 
				
			||||||
	local cmeta = minetest.get_meta(pos)
 | 
						local cmeta = core.get_meta(pos)
 | 
				
			||||||
	local speed = math.abs(velocity.x + velocity.y + velocity.z)
 | 
						local speed = math.abs(velocity.x + velocity.y + velocity.z)
 | 
				
			||||||
	if speed == 0 then
 | 
						if speed == 0 then
 | 
				
			||||||
		speed = 1
 | 
							speed = 1
 | 
				
			||||||
@@ -211,7 +223,7 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_entity("pipeworks:tubed_item", {
 | 
					core.register_entity("pipeworks:tubed_item", {
 | 
				
			||||||
	initial_properties = {
 | 
						initial_properties = {
 | 
				
			||||||
		hp_max = 1,
 | 
							hp_max = 1,
 | 
				
			||||||
		physical = false,
 | 
							physical = false,
 | 
				
			||||||
@@ -236,9 +248,9 @@ minetest.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
		local item_texture = nil
 | 
							local item_texture = nil
 | 
				
			||||||
		local item_type = ""
 | 
							local item_type = ""
 | 
				
			||||||
		if minetest.registered_items[itemname] then
 | 
							if core.registered_items[itemname] then
 | 
				
			||||||
			item_texture = minetest.registered_items[itemname].inventory_image
 | 
								item_texture = core.registered_items[itemname].inventory_image
 | 
				
			||||||
			item_type = minetest.registered_items[itemname].type
 | 
								item_type = core.registered_items[itemname].type
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		--]]
 | 
							--]]
 | 
				
			||||||
		self.object:set_properties({
 | 
							self.object:set_properties({
 | 
				
			||||||
@@ -258,13 +270,13 @@ minetest.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
			self.object:remove()
 | 
								self.object:remove()
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		local item = minetest.deserialize(staticdata)
 | 
							local item = core.deserialize(staticdata)
 | 
				
			||||||
		pipeworks.tube_inject_item(self.object:get_pos(), item.start_pos, item.velocity, item.itemstring)
 | 
							pipeworks.tube_inject_item(self.object:get_pos(), item.start_pos, item.velocity, item.itemstring)
 | 
				
			||||||
		self.object:remove()
 | 
							self.object:remove()
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_entity("pipeworks:color_entity", {
 | 
					core.register_entity("pipeworks:color_entity", {
 | 
				
			||||||
	initial_properties = {
 | 
						initial_properties = {
 | 
				
			||||||
		hp_max = 1,
 | 
							hp_max = 1,
 | 
				
			||||||
		physical = false,
 | 
							physical = false,
 | 
				
			||||||
@@ -362,10 +374,10 @@ luaentity.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
		local stack = ItemStack(self.itemstring)
 | 
							local stack = ItemStack(self.itemstring)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pipeworks.load_position(self.start_pos)
 | 
							pipeworks.load_position(self.start_pos)
 | 
				
			||||||
		local node = minetest.get_node(self.start_pos)
 | 
							local node = core.get_node(self.start_pos)
 | 
				
			||||||
		if minetest.get_item_group(node.name, "tubedevice_receiver") == 1 then
 | 
							if core.get_item_group(node.name, "tubedevice_receiver") == 1 then
 | 
				
			||||||
			local leftover
 | 
								local leftover
 | 
				
			||||||
			local def = minetest.registered_nodes[node.name]
 | 
								local def = core.registered_nodes[node.name]
 | 
				
			||||||
			if def.tube and def.tube.insert_object then
 | 
								if def.tube and def.tube.insert_object then
 | 
				
			||||||
				leftover = def.tube.insert_object(self.start_pos, node, stack, vel, self.owner)
 | 
									leftover = def.tube.insert_object(self.start_pos, node, stack, vel, self.owner)
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
@@ -392,15 +404,15 @@ luaentity.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
		local rev_vel = vector.multiply(velocity, -1)
 | 
							local rev_vel = vector.multiply(velocity, -1)
 | 
				
			||||||
		local rev_dir = vector.direction(self.start_pos,vector.add(self.start_pos,rev_vel))
 | 
							local rev_dir = vector.direction(self.start_pos,vector.add(self.start_pos,rev_vel))
 | 
				
			||||||
		local rev_node = minetest.get_node(vector.round(vector.add(self.start_pos,rev_dir)))
 | 
							local rev_node = core.get_node(vector.round(vector.add(self.start_pos,rev_dir)))
 | 
				
			||||||
		local tube_present = minetest.get_item_group(rev_node.name,"tubedevice") == 1
 | 
							local tube_present = core.get_item_group(rev_node.name,"tubedevice") == 1
 | 
				
			||||||
		if not found_next then
 | 
							if not found_next then
 | 
				
			||||||
			if pipeworks.drop_on_routing_fail or not tube_present or
 | 
								if pipeworks.drop_on_routing_fail or not tube_present or
 | 
				
			||||||
					minetest.get_item_group(rev_node.name,"tube") ~= 1 then
 | 
										core.get_item_group(rev_node.name,"tube") ~= 1 then
 | 
				
			||||||
				-- Using add_item instead of item_drop since this makes pipeworks backward
 | 
									-- Using add_item instead of item_drop since this makes pipeworks backward
 | 
				
			||||||
				-- compatible with Minetest 0.4.13.
 | 
									-- compatible with Minetest 0.4.13.
 | 
				
			||||||
				-- Using item_drop here makes Minetest 0.4.13 crash.
 | 
									-- Using item_drop here makes Minetest 0.4.13 crash.
 | 
				
			||||||
				local dropped_item = minetest.add_item(self.start_pos, stack)
 | 
									local dropped_item = core.add_item(self.start_pos, stack)
 | 
				
			||||||
				if dropped_item then
 | 
									if dropped_item then
 | 
				
			||||||
					dropped_item:set_velocity(vector.multiply(velocity, 5))
 | 
										dropped_item:set_velocity(vector.multiply(velocity, 5))
 | 
				
			||||||
					self:remove()
 | 
										self:remove()
 | 
				
			||||||
@@ -430,19 +442,19 @@ luaentity.register_entity("pipeworks:tubed_item", {
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("mesecons_mvps") then
 | 
					if core.get_modpath("mesecons_mvps") then
 | 
				
			||||||
	mesecon.register_mvps_unmov("pipeworks:tubed_item")
 | 
						mesecon.register_mvps_unmov("pipeworks:tubed_item")
 | 
				
			||||||
	mesecon.register_mvps_unmov("pipeworks:color_entity")
 | 
						mesecon.register_mvps_unmov("pipeworks:color_entity")
 | 
				
			||||||
	mesecon.register_on_mvps_move(function(moved_nodes)
 | 
						mesecon.register_on_mvps_move(function(moved_nodes)
 | 
				
			||||||
		local moved = {}
 | 
							local moved = {}
 | 
				
			||||||
		for _, n in ipairs(moved_nodes) do
 | 
							for _, n in ipairs(moved_nodes) do
 | 
				
			||||||
			moved[minetest.hash_node_position(n.oldpos)] = vector.subtract(n.pos, n.oldpos)
 | 
								moved[core.hash_node_position(n.oldpos)] = vector.subtract(n.pos, n.oldpos)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		for _, entity in pairs(luaentity.entities) do
 | 
							for _, entity in pairs(luaentity.entities) do
 | 
				
			||||||
			if entity.name == "pipeworks:tubed_item" then
 | 
								if entity.name == "pipeworks:tubed_item" then
 | 
				
			||||||
				local pos = entity:get_pos()
 | 
									local pos = entity:get_pos()
 | 
				
			||||||
				local rpos = vector.round(pos)
 | 
									local rpos = vector.round(pos)
 | 
				
			||||||
				local dir = moved[minetest.hash_node_position(rpos)]
 | 
									local dir = moved[core.hash_node_position(rpos)]
 | 
				
			||||||
				if dir then
 | 
									if dir then
 | 
				
			||||||
					entity:set_pos(vector.add(pos, dir))
 | 
										entity:set_pos(vector.add(pos, dir))
 | 
				
			||||||
					entity.start_pos = vector.add(entity.start_pos, dir)
 | 
										entity.start_pos = vector.add(entity.start_pos, dir)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,19 +5,19 @@ pipeworks.luaentity = luaentity
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
luaentity.registered_entities = {}
 | 
					luaentity.registered_entities = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local filename = minetest.get_worldpath().."/luaentities"
 | 
					local filename = core.get_worldpath().."/luaentities"
 | 
				
			||||||
local function read_file()
 | 
					local function read_file()
 | 
				
			||||||
	local f = io.open(filename, "r")
 | 
						local f = io.open(filename, "r")
 | 
				
			||||||
	if f == nil then return {} end
 | 
						if f == nil then return {} end
 | 
				
			||||||
	local t = f:read("*all")
 | 
						local t = f:read("*all")
 | 
				
			||||||
	f:close()
 | 
						f:close()
 | 
				
			||||||
	if t == "" or t == nil then return {} end
 | 
						if t == "" or t == nil then return {} end
 | 
				
			||||||
	return minetest.deserialize(t) or {}
 | 
						return core.deserialize(t) or {}
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function write_file(tbl)
 | 
					local function write_file(tbl)
 | 
				
			||||||
	local f = io.open(filename, "w")
 | 
						local f = io.open(filename, "w")
 | 
				
			||||||
	f:write(minetest.serialize(tbl))
 | 
						f:write(core.serialize(tbl))
 | 
				
			||||||
	f:close()
 | 
						f:close()
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -64,7 +64,7 @@ local function write_entities()
 | 
				
			|||||||
	write_file(luaentity.entities)
 | 
						write_file(luaentity.entities)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_on_shutdown(write_entities)
 | 
					core.register_on_shutdown(write_entities)
 | 
				
			||||||
luaentity.entities_index = 0
 | 
					luaentity.entities_index = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local move_entities_globalstep_part1
 | 
					local move_entities_globalstep_part1
 | 
				
			||||||
@@ -80,11 +80,11 @@ if pipeworks.use_real_entities then
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	move_entities_globalstep_part1 = function(dtime)
 | 
						move_entities_globalstep_part1 = function(dtime)
 | 
				
			||||||
		local active_block_range = tonumber(minetest.settings:get("active_block_range")) or 2
 | 
							local active_block_range = tonumber(core.settings:get("active_block_range")) or 2
 | 
				
			||||||
		for key in pairs(active_blocks) do
 | 
							for key in pairs(active_blocks) do
 | 
				
			||||||
			active_blocks[key] = nil
 | 
								active_blocks[key] = nil
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		for _, player in ipairs(minetest.get_connected_players()) do
 | 
							for _, player in ipairs(core.get_connected_players()) do
 | 
				
			||||||
			local blockpos = get_blockpos(player:get_pos())
 | 
								local blockpos = get_blockpos(player:get_pos())
 | 
				
			||||||
			local minpx = blockpos.x - active_block_range
 | 
								local minpx = blockpos.x - active_block_range
 | 
				
			||||||
			local minpy = blockpos.y - active_block_range
 | 
								local minpy = blockpos.y - active_block_range
 | 
				
			||||||
@@ -97,7 +97,7 @@ if pipeworks.use_real_entities then
 | 
				
			|||||||
				for y = minpy, maxpy do
 | 
									for y = minpy, maxpy do
 | 
				
			||||||
					for z = minpz, maxpz do
 | 
										for z = minpz, maxpz do
 | 
				
			||||||
						local pos = {x = x, y = y, z = z}
 | 
											local pos = {x = x, y = y, z = z}
 | 
				
			||||||
						active_blocks[minetest.hash_node_position(pos)] = true
 | 
											active_blocks[core.hash_node_position(pos)] = true
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -106,7 +106,7 @@ if pipeworks.use_real_entities then
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	is_active = function(pos)
 | 
						is_active = function(pos)
 | 
				
			||||||
		return active_blocks[minetest.hash_node_position(get_blockpos(pos))] ~= nil
 | 
							return active_blocks[core.hash_node_position(get_blockpos(pos))] ~= nil
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
	move_entities_globalstep_part1 = function()
 | 
						move_entities_globalstep_part1 = function()
 | 
				
			||||||
@@ -168,7 +168,7 @@ local entitydef_default = {
 | 
				
			|||||||
		if not is_active(entity_pos) then
 | 
							if not is_active(entity_pos) then
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		local object = minetest.add_entity(entity_pos, entity.name)
 | 
							local object = core.add_entity(entity_pos, entity.name)
 | 
				
			||||||
		if not object then
 | 
							if not object then
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
@@ -290,7 +290,7 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
function luaentity.add_entity(pos, name)
 | 
					function luaentity.add_entity(pos, name)
 | 
				
			||||||
	if not luaentity.entities then
 | 
						if not luaentity.entities then
 | 
				
			||||||
		minetest.after(0, luaentity.add_entity, vector.new(pos), name)
 | 
							core.after(0, luaentity.add_entity, vector.new(pos), name)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local index = luaentity.entities_index
 | 
						local index = luaentity.entities_index
 | 
				
			||||||
@@ -399,7 +399,7 @@ local dtime_accum = 0
 | 
				
			|||||||
local dtime_delayed = 0
 | 
					local dtime_delayed = 0
 | 
				
			||||||
local skip_update = false
 | 
					local skip_update = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_globalstep(function(dtime)
 | 
					core.register_globalstep(function(dtime)
 | 
				
			||||||
	if dtime >= 0.2 and dtime_delayed < 1 then
 | 
						if dtime >= 0.2 and dtime_delayed < 1 then
 | 
				
			||||||
		-- Reduce activity when the server is lagging.
 | 
							-- Reduce activity when the server is lagging.
 | 
				
			||||||
		skip_update = true
 | 
							skip_update = true
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local old_furnace = table.copy(minetest.registered_nodes["mcl_furnaces:furnace"])
 | 
					local old_furnace = table.copy(core.registered_nodes["mcl_furnaces:furnace"])
 | 
				
			||||||
local old_blast_furnace = table.copy(minetest.registered_nodes["mcl_blast_furnace:blast_furnace"])
 | 
					local old_blast_furnace = table.copy(core.registered_nodes["mcl_blast_furnace:blast_furnace"])
 | 
				
			||||||
local old_smoker = table.copy(minetest.registered_nodes["mcl_smoker:smoker"])
 | 
					local old_smoker = table.copy(core.registered_nodes["mcl_smoker:smoker"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local tube_entry = "^pipeworks_tube_connection_stony.png"
 | 
					local tube_entry = "^pipeworks_tube_connection_stony.png"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -27,8 +27,8 @@ smoker_groups_active["not_in_creative_inventory"] = 1
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- a hack to give the exp to fake players it's be dropped instead added to (fake) player inv
 | 
					-- a hack to give the exp to fake players it's be dropped instead added to (fake) player inv
 | 
				
			||||||
local function give_xp(pos, player)
 | 
					local function give_xp(pos, player)
 | 
				
			||||||
   local meta = minetest.get_meta(pos)
 | 
					   local meta = core.get_meta(pos)
 | 
				
			||||||
   local dir = vector.divide(minetest.facedir_to_dir(minetest.get_node(pos).param2), -1.95)
 | 
					   local dir = vector.divide(core.facedir_to_dir(core.get_node(pos).param2), -1.95)
 | 
				
			||||||
   local xp = meta:get_int("xp")
 | 
					   local xp = meta:get_int("xp")
 | 
				
			||||||
   if xp > 0 then
 | 
					   if xp > 0 then
 | 
				
			||||||
      mcl_experience.throw_xp(vector.add(pos, dir), xp)
 | 
					      mcl_experience.throw_xp(vector.add(pos, dir), xp)
 | 
				
			||||||
@@ -51,9 +51,9 @@ override.groups = furnace_groups
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
override.tube = {
 | 
					override.tube = {
 | 
				
			||||||
   insert_object = function(pos, node, stack, direction)
 | 
					   insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      local timer = minetest.get_node_timer(pos)
 | 
					      local timer = core.get_node_timer(pos)
 | 
				
			||||||
      if not timer:is_started() then
 | 
					      if not timer:is_started() then
 | 
				
			||||||
	 timer:start(1.0)
 | 
						 timer:start(1.0)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@@ -64,7 +64,7 @@ override.tube = {
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
   end,
 | 
					   end,
 | 
				
			||||||
   can_insert = function(pos,node,stack,direction)
 | 
					   can_insert = function(pos,node,stack,direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      if direction.y == 1 then
 | 
					      if direction.y == 1 then
 | 
				
			||||||
	 return inv:room_for_item("fuel", stack)
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
@@ -117,9 +117,9 @@ override_active.groups = furnace_groups_active
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
override_active.tube = {
 | 
					override_active.tube = {
 | 
				
			||||||
   insert_object = function(pos,node,stack,direction)
 | 
					   insert_object = function(pos,node,stack,direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      local timer = minetest.get_node_timer(pos)
 | 
					      local timer = core.get_node_timer(pos)
 | 
				
			||||||
      if not timer:is_started() then
 | 
					      if not timer:is_started() then
 | 
				
			||||||
	 timer:start(1.0)
 | 
						 timer:start(1.0)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@@ -130,7 +130,7 @@ override_active.tube = {
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
   end,
 | 
					   end,
 | 
				
			||||||
   can_insert = function(pos, node, stack, direction)
 | 
					   can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      if direction.y == 1 then
 | 
					      if direction.y == 1 then
 | 
				
			||||||
	 return inv:room_for_item("fuel", stack)
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
@@ -160,9 +160,9 @@ override_blast_furnace.groups = blast_furnace_groups
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
override_blast_furnace.tube = {
 | 
					override_blast_furnace.tube = {
 | 
				
			||||||
   insert_object = function(pos, node, stack, direction)
 | 
					   insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      local timer = minetest.get_node_timer(pos)
 | 
					      local timer = core.get_node_timer(pos)
 | 
				
			||||||
      if not timer:is_started() then
 | 
					      if not timer:is_started() then
 | 
				
			||||||
	 timer:start(1.0)
 | 
						 timer:start(1.0)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@@ -173,7 +173,7 @@ override_blast_furnace.tube = {
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
   end,
 | 
					   end,
 | 
				
			||||||
   can_insert = function(pos,node,stack,direction)
 | 
					   can_insert = function(pos,node,stack,direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      if direction.y == 1 then
 | 
					      if direction.y == 1 then
 | 
				
			||||||
	 return inv:room_for_item("fuel", stack)
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
@@ -228,9 +228,9 @@ override_blast_active.groups = blast_furnace_groups_active
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
override_blast_active.tube = {
 | 
					override_blast_active.tube = {
 | 
				
			||||||
   insert_object = function(pos,node,stack,direction)
 | 
					   insert_object = function(pos,node,stack,direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      local timer = minetest.get_node_timer(pos)
 | 
					      local timer = core.get_node_timer(pos)
 | 
				
			||||||
      if not timer:is_started() then
 | 
					      if not timer:is_started() then
 | 
				
			||||||
	 timer:start(1.0)
 | 
						 timer:start(1.0)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@@ -241,7 +241,7 @@ override_blast_active.tube = {
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
   end,
 | 
					   end,
 | 
				
			||||||
   can_insert = function(pos, node, stack, direction)
 | 
					   can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      if direction.y == 1 then
 | 
					      if direction.y == 1 then
 | 
				
			||||||
	 return inv:room_for_item("fuel", stack)
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
@@ -271,9 +271,9 @@ override_smoker.groups = smoker_groups
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
override_smoker.tube = {
 | 
					override_smoker.tube = {
 | 
				
			||||||
   insert_object = function(pos, node, stack, direction)
 | 
					   insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      local timer = minetest.get_node_timer(pos)
 | 
					      local timer = core.get_node_timer(pos)
 | 
				
			||||||
      if not timer:is_started() then
 | 
					      if not timer:is_started() then
 | 
				
			||||||
	 timer:start(1.0)
 | 
						 timer:start(1.0)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@@ -284,7 +284,7 @@ override_smoker.tube = {
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
   end,
 | 
					   end,
 | 
				
			||||||
   can_insert = function(pos,node,stack,direction)
 | 
					   can_insert = function(pos,node,stack,direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      if direction.y == 1 then
 | 
					      if direction.y == 1 then
 | 
				
			||||||
	 return inv:room_for_item("fuel", stack)
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
@@ -339,9 +339,9 @@ override_smoker_active.groups = smoker_groups_active
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
override_smoker_active.tube = {
 | 
					override_smoker_active.tube = {
 | 
				
			||||||
   insert_object = function(pos,node,stack,direction)
 | 
					   insert_object = function(pos,node,stack,direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      local timer = minetest.get_node_timer(pos)
 | 
					      local timer = core.get_node_timer(pos)
 | 
				
			||||||
      if not timer:is_started() then
 | 
					      if not timer:is_started() then
 | 
				
			||||||
	 timer:start(1.0)
 | 
						 timer:start(1.0)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@@ -352,7 +352,7 @@ override_smoker_active.tube = {
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
   end,
 | 
					   end,
 | 
				
			||||||
   can_insert = function(pos, node, stack, direction)
 | 
					   can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
      local meta = minetest.get_meta(pos)
 | 
					      local meta = core.get_meta(pos)
 | 
				
			||||||
      local inv = meta:get_inventory()
 | 
					      local inv = meta:get_inventory()
 | 
				
			||||||
      if direction.y == 1 then
 | 
					      if direction.y == 1 then
 | 
				
			||||||
	 return inv:room_for_item("fuel", stack)
 | 
						 return inv:room_for_item("fuel", stack)
 | 
				
			||||||
@@ -366,11 +366,11 @@ override_smoker_active.tube = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- override
 | 
					-- override
 | 
				
			||||||
minetest.override_item("mcl_furnaces:furnace", override)
 | 
					core.override_item("mcl_furnaces:furnace", override)
 | 
				
			||||||
minetest.override_item("mcl_furnaces:furnace_active", override_active)
 | 
					core.override_item("mcl_furnaces:furnace_active", override_active)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.override_item("mcl_blast_furnace:blast_furnace", override_blast_furnace)
 | 
					core.override_item("mcl_blast_furnace:blast_furnace", override_blast_furnace)
 | 
				
			||||||
minetest.override_item("mcl_blast_furnace:blast_furnace_active", override_blast_active)
 | 
					core.override_item("mcl_blast_furnace:blast_furnace_active", override_blast_active)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.override_item("mcl_smoker:smoker", override_smoker)
 | 
					core.override_item("mcl_smoker:smoker", override_smoker)
 | 
				
			||||||
minetest.override_item("mcl_smoker:smoker_active", override_smoker_active)
 | 
					core.override_item("mcl_smoker:smoker_active", override_smoker_active)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										30
									
								
								pipes.lua
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								pipes.lua
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
-- This file supplies the steel pipes
 | 
					-- This file supplies the steel pipes
 | 
				
			||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local REGISTER_COMPATIBILITY = true
 | 
					local REGISTER_COMPATIBILITY = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -41,7 +41,7 @@ for index, connects in ipairs(cconnects) do
 | 
				
			|||||||
	local pipedesc = S("Pipe Segment").." "..dump(connects)
 | 
						local pipedesc = S("Pipe Segment").." "..dump(connects)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if #connects == 0 then
 | 
						if #connects == 0 then
 | 
				
			||||||
		pgroups = {snappy = 3, tube = 1, dig_generic = 4, axey=1, handy=1, pickaxey=1}
 | 
							pgroups = {snappy = 3, pipe = 1, dig_generic = 4, axey = 1, handy = 1, pickaxey = 1}
 | 
				
			||||||
		pipedesc = S("Pipe Segment")
 | 
							pipedesc = S("Pipe Segment")
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -59,7 +59,7 @@ for index, connects in ipairs(cconnects) do
 | 
				
			|||||||
		mesh = "pipeworks_pipe_3"..polys..".obj"
 | 
							mesh = "pipeworks_pipe_3"..polys..".obj"
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:pipe_"..index.."_empty", {
 | 
						core.register_node("pipeworks:pipe_"..index.."_empty", {
 | 
				
			||||||
		description = pipedesc,
 | 
							description = pipedesc,
 | 
				
			||||||
		drawtype = "mesh",
 | 
							drawtype = "mesh",
 | 
				
			||||||
		mesh = mesh,
 | 
							mesh = mesh,
 | 
				
			||||||
@@ -97,7 +97,7 @@ for index, connects in ipairs(cconnects) do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	local pgroups = {snappy = 3, pipe = 1, not_in_creative_inventory = 1, dig_generic = 4, axey = 1, handy = 1, pickaxey = 1}
 | 
						local pgroups = {snappy = 3, pipe = 1, not_in_creative_inventory = 1, dig_generic = 4, axey = 1, handy = 1, pickaxey = 1}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node("pipeworks:pipe_"..index.."_loaded", {
 | 
						core.register_node("pipeworks:pipe_"..index.."_loaded", {
 | 
				
			||||||
		description = pipedesc,
 | 
							description = pipedesc,
 | 
				
			||||||
		drawtype = "mesh",
 | 
							drawtype = "mesh",
 | 
				
			||||||
		mesh = mesh,
 | 
							mesh = mesh,
 | 
				
			||||||
@@ -122,7 +122,7 @@ for index, connects in ipairs(cconnects) do
 | 
				
			|||||||
		walkable = true,
 | 
							walkable = true,
 | 
				
			||||||
		drop = "pipeworks:pipe_1_empty",
 | 
							drop = "pipeworks:pipe_1_empty",
 | 
				
			||||||
		after_place_node = function(pos)
 | 
							after_place_node = function(pos)
 | 
				
			||||||
			minetest.set_node(pos, { name = "pipeworks:pipe_"..index.."_empty" })
 | 
								core.set_node(pos, { name = "pipeworks:pipe_"..index.."_empty" })
 | 
				
			||||||
			pipeworks.scan_for_pipe_objects(pos)
 | 
								pipeworks.scan_for_pipe_objects(pos)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		after_dig_node = function(pos)
 | 
							after_dig_node = function(pos)
 | 
				
			||||||
@@ -147,7 +147,7 @@ pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:pipe_1_em
 | 
				
			|||||||
if REGISTER_COMPATIBILITY then
 | 
					if REGISTER_COMPATIBILITY then
 | 
				
			||||||
	local cempty = "pipeworks:pipe_compatibility_empty"
 | 
						local cempty = "pipeworks:pipe_compatibility_empty"
 | 
				
			||||||
	local cloaded = "pipeworks:pipe_compatibility_loaded"
 | 
						local cloaded = "pipeworks:pipe_compatibility_loaded"
 | 
				
			||||||
	minetest.register_node(cempty, {
 | 
						core.register_node(cempty, {
 | 
				
			||||||
		drawtype = "airlike",
 | 
							drawtype = "airlike",
 | 
				
			||||||
		sunlight_propagates = true,
 | 
							sunlight_propagates = true,
 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
@@ -161,7 +161,7 @@ if REGISTER_COMPATIBILITY then
 | 
				
			|||||||
		on_rotate = false
 | 
							on_rotate = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	minetest.register_node(cloaded, {
 | 
						core.register_node(cloaded, {
 | 
				
			||||||
		drawtype = "airlike",
 | 
							drawtype = "airlike",
 | 
				
			||||||
		sunlight_propagates = true,
 | 
							sunlight_propagates = true,
 | 
				
			||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
@@ -181,22 +181,22 @@ if REGISTER_COMPATIBILITY then
 | 
				
			|||||||
	for zm = 0, 1 do
 | 
						for zm = 0, 1 do
 | 
				
			||||||
	for zp = 0, 1 do
 | 
						for zp = 0, 1 do
 | 
				
			||||||
		local pname = xm..xp..ym..yp..zm..zp
 | 
							local pname = xm..xp..ym..yp..zm..zp
 | 
				
			||||||
		minetest.register_alias("pipeworks:pipe_"..pname.."_empty", cempty)
 | 
							core.register_alias("pipeworks:pipe_"..pname.."_empty", cempty)
 | 
				
			||||||
		minetest.register_alias("pipeworks:pipe_"..pname.."_loaded", cloaded)
 | 
							core.register_alias("pipeworks:pipe_"..pname.."_loaded", cloaded)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	minetest.register_abm({
 | 
						core.register_abm({
 | 
				
			||||||
		nodenames = {"group:pipe_to_update"},
 | 
							nodenames = {"group:pipe_to_update"},
 | 
				
			||||||
		interval = 1,
 | 
							interval = 1,
 | 
				
			||||||
		chance = 1,
 | 
							chance = 1,
 | 
				
			||||||
		action = function(pos, node, active_object_count, active_object_count_wider)
 | 
							action = function(pos, node, active_object_count, active_object_count_wider)
 | 
				
			||||||
			local minp = {x = pos.x-1, y = pos.y-1, z = pos.z-1}
 | 
								local minp = {x = pos.x-1, y = pos.y-1, z = pos.z-1}
 | 
				
			||||||
			local maxp = {x = pos.x+1, y = pos.y+1, z = pos.z+1}
 | 
								local maxp = {x = pos.x+1, y = pos.y+1, z = pos.z+1}
 | 
				
			||||||
			if table.getn(minetest.find_nodes_in_area(minp, maxp, "ignore")) == 0 then
 | 
								if table.getn(core.find_nodes_in_area(minp, maxp, "ignore")) == 0 then
 | 
				
			||||||
				pipeworks.scan_for_pipe_objects(pos)
 | 
									pipeworks.scan_for_pipe_objects(pos)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
@@ -229,7 +229,7 @@ pipeworks.pipes_empty_nodenames = pipes_empty_nodenames
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
if pipeworks.toggles.pipe_mode == "classic" then
 | 
					if pipeworks.toggles.pipe_mode == "classic" then
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_abm({
 | 
					core.register_abm({
 | 
				
			||||||
	nodenames = pipes_empty_nodenames,
 | 
						nodenames = pipes_empty_nodenames,
 | 
				
			||||||
	interval = 1,
 | 
						interval = 1,
 | 
				
			||||||
	chance = 1,
 | 
						chance = 1,
 | 
				
			||||||
@@ -238,7 +238,7 @@ minetest.register_abm({
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_abm({
 | 
					core.register_abm({
 | 
				
			||||||
	nodenames = pipes_full_nodenames,
 | 
						nodenames = pipes_full_nodenames,
 | 
				
			||||||
	interval = 1,
 | 
						interval = 1,
 | 
				
			||||||
	chance = 1,
 | 
						chance = 1,
 | 
				
			||||||
@@ -247,7 +247,7 @@ minetest.register_abm({
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_abm({
 | 
					core.register_abm({
 | 
				
			||||||
	nodenames = {"pipeworks:spigot","pipeworks:spigot_pouring"},
 | 
						nodenames = {"pipeworks:spigot","pipeworks:spigot_pouring"},
 | 
				
			||||||
	interval = 1,
 | 
						interval = 1,
 | 
				
			||||||
	chance = 1,
 | 
						chance = 1,
 | 
				
			||||||
@@ -256,7 +256,7 @@ minetest.register_abm({
 | 
				
			|||||||
	end
 | 
						end
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_abm({
 | 
					core.register_abm({
 | 
				
			||||||
	nodenames = {"pipeworks:fountainhead","pipeworks:fountainhead_pouring"},
 | 
						nodenames = {"pipeworks:fountainhead","pipeworks:fountainhead_pouring"},
 | 
				
			||||||
	interval = 1,
 | 
						interval = 1,
 | 
				
			||||||
	chance = 1,
 | 
						chance = 1,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@ local flowlogic = pipeworks.flowlogic
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local register_flowlogic_abm = function(nodename)
 | 
					local register_flowlogic_abm = function(nodename)
 | 
				
			||||||
	if pipeworks.toggles.pipe_mode == "pressure" then
 | 
						if pipeworks.toggles.pipe_mode == "pressure" then
 | 
				
			||||||
		minetest.register_abm({
 | 
							core.register_abm({
 | 
				
			||||||
			label = "pipeworks new_flow_logic run",
 | 
								label = "pipeworks new_flow_logic run",
 | 
				
			||||||
			nodenames = { nodename },
 | 
								nodenames = { nodename },
 | 
				
			||||||
			interval = 1,
 | 
								interval = 1,
 | 
				
			||||||
@@ -21,7 +21,7 @@ local register_flowlogic_abm = function(nodename)
 | 
				
			|||||||
			end
 | 
								end
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		minetest.log("warning", "pipeworks pressure_logic not enabled but register.flowlogic() requested")
 | 
							core.log("warning", "pipeworks pressure_logic not enabled but register.flowlogic() requested")
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
register.flowlogic = register_flowlogic_abm
 | 
					register.flowlogic = register_flowlogic_abm
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,9 +41,9 @@ local check_for_liquids_v2 = function(pos, limit)
 | 
				
			|||||||
	local total = 0
 | 
						local total = 0
 | 
				
			||||||
	for _, tpos in ipairs(coords) do
 | 
						for _, tpos in ipairs(coords) do
 | 
				
			||||||
		if total >= limit then break end
 | 
							if total >= limit then break end
 | 
				
			||||||
		local name = minetest.get_node(tpos).name
 | 
							local name = core.get_node(tpos).name
 | 
				
			||||||
		if name == pipeworks.liquids.water.source then
 | 
							if name == pipeworks.liquids.water.source then
 | 
				
			||||||
			minetest.remove_node(tpos)
 | 
								core.remove_node(tpos)
 | 
				
			||||||
			total = total + 1
 | 
								total = total + 1
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -56,7 +56,7 @@ flowlogic.check_for_liquids_v2 = check_for_liquids_v2
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local label_pressure = "pipeworks.water_pressure"
 | 
					local label_pressure = "pipeworks.water_pressure"
 | 
				
			||||||
local get_pressure_access = function(pos)
 | 
					local get_pressure_access = function(pos)
 | 
				
			||||||
	local metaref = minetest.get_meta(pos)
 | 
						local metaref = core.get_meta(pos)
 | 
				
			||||||
	return {
 | 
						return {
 | 
				
			||||||
		get = function()
 | 
							get = function()
 | 
				
			||||||
			return metaref:get_float(label_pressure)
 | 
								return metaref:get_float(label_pressure)
 | 
				
			||||||
@@ -114,7 +114,7 @@ flowlogic.run = function(pos, node)
 | 
				
			|||||||
	if pipeworks.flowables.transitions.list[nodename] then
 | 
						if pipeworks.flowables.transitions.list[nodename] then
 | 
				
			||||||
		local newnode = flowlogic.run_transition(node, currentpressure)
 | 
							local newnode = flowlogic.run_transition(node, currentpressure)
 | 
				
			||||||
		--pipeworks.logger("flowlogic.run()@"..formatvec(pos).." transition, new node name = "..dump(newnode).." pressure "..tostring(currentpressure))
 | 
							--pipeworks.logger("flowlogic.run()@"..formatvec(pos).." transition, new node name = "..dump(newnode).." pressure "..tostring(currentpressure))
 | 
				
			||||||
		minetest.swap_node(pos, newnode)
 | 
							core.swap_node(pos, newnode)
 | 
				
			||||||
		flowlogic.run_transition_post(pos, newnode)
 | 
							flowlogic.run_transition_post(pos, newnode)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -155,7 +155,7 @@ local get_neighbour_positions = function(pos, node)
 | 
				
			|||||||
	local connections = {}
 | 
						local connections = {}
 | 
				
			||||||
	for _, offset in ipairs(candidates) do
 | 
						for _, offset in ipairs(candidates) do
 | 
				
			||||||
		local npos = vector.add(pos, offset)
 | 
							local npos = vector.add(pos, offset)
 | 
				
			||||||
		local neighbour = minetest.get_node(npos)
 | 
							local neighbour = core.get_node(npos)
 | 
				
			||||||
		local nodename = neighbour.name
 | 
							local nodename = neighbour.name
 | 
				
			||||||
		local is_simple = (pipeworks.flowables.list.simple[nodename])
 | 
							local is_simple = (pipeworks.flowables.list.simple[nodename])
 | 
				
			||||||
		if is_simple then
 | 
							if is_simple then
 | 
				
			||||||
@@ -241,7 +241,7 @@ flowlogic.helpers.make_neighbour_output_fixed = function(neighbours)
 | 
				
			|||||||
		local taken = 0
 | 
							local taken = 0
 | 
				
			||||||
		for _, offset in pairs(neighbours) do
 | 
							for _, offset in pairs(neighbours) do
 | 
				
			||||||
			local npos = vector.add(pos, offset)
 | 
								local npos = vector.add(pos, offset)
 | 
				
			||||||
			local name = minetest.get_node(npos).name
 | 
								local name = core.get_node(npos).name
 | 
				
			||||||
			if currentpressure < 1 then break end
 | 
								if currentpressure < 1 then break end
 | 
				
			||||||
			-- take pressure anyway in non-finite mode, even if node is water source already.
 | 
								-- take pressure anyway in non-finite mode, even if node is water source already.
 | 
				
			||||||
			-- in non-finite mode, pressure has to be sustained to keep the sources there.
 | 
								-- in non-finite mode, pressure has to be sustained to keep the sources there.
 | 
				
			||||||
@@ -249,7 +249,7 @@ flowlogic.helpers.make_neighbour_output_fixed = function(neighbours)
 | 
				
			|||||||
			-- draining pressure is not.
 | 
								-- draining pressure is not.
 | 
				
			||||||
			local canplace = (name == "air") or (name == pipeworks.liquids.water.flowing)
 | 
								local canplace = (name == "air") or (name == pipeworks.liquids.water.flowing)
 | 
				
			||||||
			if canplace then
 | 
								if canplace then
 | 
				
			||||||
				minetest.swap_node(npos, {name=pipeworks.liquids.water.source})
 | 
									core.swap_node(npos, {name=pipeworks.liquids.water.source})
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			if (not finitemode) or canplace then
 | 
								if (not finitemode) or canplace then
 | 
				
			||||||
				taken = taken + 1
 | 
									taken = taken + 1
 | 
				
			||||||
@@ -267,10 +267,10 @@ flowlogic.helpers.make_neighbour_cleanup_fixed = function(neighbours)
 | 
				
			|||||||
		--pipeworks.logger("neighbour_cleanup_fixed@"..formatvec(pos))
 | 
							--pipeworks.logger("neighbour_cleanup_fixed@"..formatvec(pos))
 | 
				
			||||||
		for _, offset in pairs(neighbours) do
 | 
							for _, offset in pairs(neighbours) do
 | 
				
			||||||
			local npos = vector.add(pos, offset)
 | 
								local npos = vector.add(pos, offset)
 | 
				
			||||||
			local name = minetest.get_node(npos).name
 | 
								local name = core.get_node(npos).name
 | 
				
			||||||
			if (name == pipeworks.liquids.water.source) then
 | 
								if (name == pipeworks.liquids.water.source) then
 | 
				
			||||||
				--pipeworks.logger("neighbour_cleanup_fixed removing "..formatvec(npos))
 | 
									--pipeworks.logger("neighbour_cleanup_fixed removing "..formatvec(npos))
 | 
				
			||||||
				minetest.remove_node(npos)
 | 
									core.remove_node(npos)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -351,9 +351,9 @@ end
 | 
				
			|||||||
-- among other things, updates mesecons if present.
 | 
					-- among other things, updates mesecons if present.
 | 
				
			||||||
-- node here means the new node, returned from run_transition() above
 | 
					-- node here means the new node, returned from run_transition() above
 | 
				
			||||||
flowlogic.run_transition_post = function(pos, node)
 | 
					flowlogic.run_transition_post = function(pos, node)
 | 
				
			||||||
	local mesecons_def = minetest.registered_nodes[node.name].mesecons
 | 
						local mesecons_def = core.registered_nodes[node.name].mesecons
 | 
				
			||||||
	local mesecons_rules = pipeworks.flowables.transitions.mesecons[node.name]
 | 
						local mesecons_rules = pipeworks.flowables.transitions.mesecons[node.name]
 | 
				
			||||||
	if minetest.get_modpath("mesecons") and (mesecons_def ~= nil) and mesecons_rules then
 | 
						if core.get_modpath("mesecons") and (mesecons_def ~= nil) and mesecons_rules then
 | 
				
			||||||
		if type(mesecons_def) ~= "table" then
 | 
							if type(mesecons_def) ~= "table" then
 | 
				
			||||||
			pipeworks.logger("flowlogic.run_transition_post() BUG mesecons def for "..node.name.."not a table: got "..tostring(mesecons_def))
 | 
								pipeworks.logger("flowlogic.run_transition_post() BUG mesecons def for "..node.name.."not a table: got "..tostring(mesecons_def))
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -85,6 +85,14 @@ pipeworks_use_real_entities (Use Real Entities) bool true
 | 
				
			|||||||
#A value 0.2 or above may cause issues with accelerator tubes.
 | 
					#A value 0.2 or above may cause issues with accelerator tubes.
 | 
				
			||||||
pipeworks_entity_update_interval (Entity Update Interval) float 0 0 0.8
 | 
					pipeworks_entity_update_interval (Entity Update Interval) float 0 0 0.8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use the default rules from the digilines mod.
 | 
				
			||||||
 | 
					# If enabled the following devices will connect to digiline networks in the vertical direction:
 | 
				
			||||||
 | 
					# digiline filter injector, deployer, dispenser, node breaker, autocrafter
 | 
				
			||||||
 | 
					# This breaks expected behavior with digiline conducting tubes.
 | 
				
			||||||
 | 
					# If disabled, the devices will not be able to send or recieve digiline signals from the top
 | 
				
			||||||
 | 
					# or bottom faces, regardless of the node rotation.
 | 
				
			||||||
 | 
					enable_vertical_digilines_connectivity (Use the default rules from the digilines mod) bool false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# if set to true, items passing through teleport tubes will log log where they came from and where they went.
 | 
					# if set to true, items passing through teleport tubes will log log where they came from and where they went.
 | 
				
			||||||
pipeworks_log_teleport_tubes (Log Teleport Tubes) bool false
 | 
					pipeworks_log_teleport_tubes (Log Teleport Tubes) bool false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								trashcan.lua
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								trashcan.lua
									
									
									
									
									
								
							@@ -1,5 +1,5 @@
 | 
				
			|||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
minetest.register_node("pipeworks:trashcan", {
 | 
					core.register_node("pipeworks:trashcan", {
 | 
				
			||||||
	description = S("Trash Can"),
 | 
						description = S("Trash Can"),
 | 
				
			||||||
	drawtype = "normal",
 | 
						drawtype = "normal",
 | 
				
			||||||
	tiles = {
 | 
						tiles = {
 | 
				
			||||||
@@ -21,10 +21,10 @@ minetest.register_node("pipeworks:trashcan", {
 | 
				
			|||||||
		priority = 1, -- Lower than anything else
 | 
							priority = 1, -- Lower than anything else
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	on_construct = function(pos)
 | 
						on_construct = function(pos)
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = core.get_meta(pos)
 | 
				
			||||||
		local size = "10.2,9"
 | 
							local size = "10.2,9"
 | 
				
			||||||
		local list_background = ""
 | 
							local list_background = ""
 | 
				
			||||||
		if minetest.get_modpath("i3") or minetest.get_modpath("mcl_formspec") then
 | 
							if core.get_modpath("i3") or core.get_modpath("mcl_formspec") then
 | 
				
			||||||
			list_background = "style_type[box;colors=#666]box[4.5,2;1,1;]"
 | 
								list_background = "style_type[box;colors=#666]box[4.5,2;1,1;]"
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		meta:set_string("formspec",
 | 
							meta:set_string("formspec",
 | 
				
			||||||
@@ -46,7 +46,7 @@ minetest.register_node("pipeworks:trashcan", {
 | 
				
			|||||||
	after_place_node = pipeworks.after_place,
 | 
						after_place_node = pipeworks.after_place,
 | 
				
			||||||
	after_dig_node = pipeworks.after_dig,
 | 
						after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
	on_metadata_inventory_put = function(pos, listname, index, stack, player)
 | 
						on_metadata_inventory_put = function(pos, listname, index, stack, player)
 | 
				
			||||||
		minetest.get_meta(pos):get_inventory():set_stack(listname, index, ItemStack(""))
 | 
							core.get_meta(pos):get_inventory():set_stack(listname, index, ItemStack(""))
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:trashcan"
 | 
					pipeworks.ui_cat_tube_list[#pipeworks.ui_cat_tube_list+1] = "pipeworks:trashcan"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,13 +1,13 @@
 | 
				
			|||||||
local materials = xcompat.materials
 | 
					local materials = xcompat.materials
 | 
				
			||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local straight = function(pos, node, velocity, stack) return {velocity} end
 | 
					local straight = function(pos, node, velocity, stack) return {velocity} end
 | 
				
			||||||
local steel_tex = "[combine:16x16^[noalpha^[colorize:#D3D3D3"
 | 
					local steel_tex = "[combine:16x16^[noalpha^[colorize:#D3D3D3"
 | 
				
			||||||
if minetest.get_modpath("default") then steel_tex = "default_steel_block.png" end
 | 
					if core.get_modpath("default") then steel_tex = "default_steel_block.png" end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- register an embedded tube
 | 
					-- register an embedded tube
 | 
				
			||||||
function pipeworks.register_embedded_tube(nodename, opts)
 | 
					function pipeworks.register_embedded_tube(nodename, opts)
 | 
				
			||||||
	minetest.register_node(nodename, {
 | 
						core.register_node(nodename, {
 | 
				
			||||||
		description = opts.description,
 | 
							description = opts.description,
 | 
				
			||||||
		tiles = {
 | 
							tiles = {
 | 
				
			||||||
			opts.base_texture,
 | 
								opts.base_texture,
 | 
				
			||||||
@@ -41,7 +41,7 @@ function pipeworks.register_embedded_tube(nodename, opts)
 | 
				
			|||||||
			priority = 50,
 | 
								priority = 50,
 | 
				
			||||||
			can_go = straight,
 | 
								can_go = straight,
 | 
				
			||||||
			can_insert = function(pos, node, stack, direction)
 | 
								can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
				local dir = minetest.facedir_to_dir(node.param2)
 | 
									local dir = core.facedir_to_dir(node.param2)
 | 
				
			||||||
				return vector.equals(dir, direction) or vector.equals(vector.multiply(dir, -1), direction)
 | 
									return vector.equals(dir, direction) or vector.equals(vector.multiply(dir, -1), direction)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -50,7 +50,7 @@ function pipeworks.register_embedded_tube(nodename, opts)
 | 
				
			|||||||
		on_rotate = pipeworks.on_rotate,
 | 
							on_rotate = pipeworks.on_rotate,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = nodename .. " 1",
 | 
							output = nodename .. " 1",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ opts.base_ingredient, opts.base_ingredient, opts.base_ingredient },
 | 
								{ opts.base_ingredient, opts.base_ingredient, opts.base_ingredient },
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										104
									
								
								tubes/lua.lua
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								tubes/lua.lua
									
									
									
									
									
								
							@@ -26,10 +26,12 @@
 | 
				
			|||||||
-- use too much memory from the sandbox.
 | 
					-- use too much memory from the sandbox.
 | 
				
			||||||
-- You can add more functions to the environment
 | 
					-- You can add more functions to the environment
 | 
				
			||||||
-- (see where local env is defined)
 | 
					-- (see where local env is defined)
 | 
				
			||||||
-- Something nice to play is appending minetest.env to it.
 | 
					-- Something nice to play is appending core.env to it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local BASENAME = "pipeworks:lua_tube"
 | 
					local BASENAME = "pipeworks:lua_tube"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local has_digilines = core.get_modpath("digilines")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local rules = {
 | 
					local rules = {
 | 
				
			||||||
	red    = {x = -1, y =  0, z =  0, name = "red"},
 | 
						red    = {x = -1, y =  0, z =  0, name = "red"},
 | 
				
			||||||
	blue   = {x =  1, y =  0, z =  0, name = "blue"},
 | 
						blue   = {x =  1, y =  0, z =  0, name = "blue"},
 | 
				
			||||||
@@ -63,7 +65,7 @@ local digiline_rules_luatube = {
 | 
				
			|||||||
-- These helpers are required to set the port states of the lua_tube
 | 
					-- These helpers are required to set the port states of the lua_tube
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function update_real_port_states(pos, rule_name, new_state)
 | 
					local function update_real_port_states(pos, rule_name, new_state)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	if rule_name == nil then
 | 
						if rule_name == nil then
 | 
				
			||||||
		meta:set_int("real_portstates", 1)
 | 
							meta:set_int("real_portstates", 1)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -100,7 +102,7 @@ local port_names = {"red", "blue", "yellow", "green", "black", "white"}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local function get_real_port_states(pos)
 | 
					local function get_real_port_states(pos)
 | 
				
			||||||
	-- Determine if ports are powered (by itself or from outside)
 | 
						-- Determine if ports are powered (by itself or from outside)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	local L = {}
 | 
						local L = {}
 | 
				
			||||||
	local n = meta:get_int("real_portstates") - 1
 | 
						local n = meta:get_int("real_portstates") - 1
 | 
				
			||||||
	for _, name in ipairs(port_names) do
 | 
						for _, name in ipairs(port_names) do
 | 
				
			||||||
@@ -153,10 +155,10 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function set_port_states(pos, ports)
 | 
					local function set_port_states(pos, ports)
 | 
				
			||||||
	local node = minetest.get_node(pos)
 | 
						local node = core.get_node(pos)
 | 
				
			||||||
	local name = node.name
 | 
						local name = node.name
 | 
				
			||||||
	clean_port_states(ports)
 | 
						clean_port_states(ports)
 | 
				
			||||||
	local vports = minetest.registered_nodes[name].virtual_portstates
 | 
						local vports = core.registered_nodes[name].virtual_portstates
 | 
				
			||||||
	local new_name = generate_name(ports)
 | 
						local new_name = generate_name(ports)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if name ~= new_name and vports then
 | 
						if name ~= new_name and vports then
 | 
				
			||||||
@@ -169,17 +171,17 @@ local function set_port_states(pos, ports)
 | 
				
			|||||||
		-- its output off.
 | 
							-- its output off.
 | 
				
			||||||
		-- Solution / Workaround:
 | 
							-- Solution / Workaround:
 | 
				
			||||||
		-- Remember which output was turned off and ignore next "off" event.
 | 
							-- Remember which output was turned off and ignore next "off" event.
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = core.get_meta(pos)
 | 
				
			||||||
		local ign = minetest.deserialize(meta:get_string("ignore_offevents"), true) or {}
 | 
							local ign = core.deserialize(meta:get_string("ignore_offevents"), true) or {}
 | 
				
			||||||
		if ports.red    and not vports.red    and not mesecon.is_powered(pos, rules.red)    then ign.red    = true end
 | 
							if ports.red    and not vports.red    and not mesecon.is_powered(pos, rules.red)    then ign.red    = true end
 | 
				
			||||||
		if ports.blue   and not vports.blue   and not mesecon.is_powered(pos, rules.blue)   then ign.blue   = true end
 | 
							if ports.blue   and not vports.blue   and not mesecon.is_powered(pos, rules.blue)   then ign.blue   = true end
 | 
				
			||||||
		if ports.yellow and not vports.yellow and not mesecon.is_powered(pos, rules.yellow) then ign.yellow = true end
 | 
							if ports.yellow and not vports.yellow and not mesecon.is_powered(pos, rules.yellow) then ign.yellow = true end
 | 
				
			||||||
		if ports.green  and not vports.green  and not mesecon.is_powered(pos, rules.green)  then ign.green  = true end
 | 
							if ports.green  and not vports.green  and not mesecon.is_powered(pos, rules.green)  then ign.green  = true end
 | 
				
			||||||
		if ports.black  and not vports.black  and not mesecon.is_powered(pos, rules.black)  then ign.black  = true end
 | 
							if ports.black  and not vports.black  and not mesecon.is_powered(pos, rules.black)  then ign.black  = true end
 | 
				
			||||||
		if ports.white  and not vports.white  and not mesecon.is_powered(pos, rules.white)  then ign.white  = true end
 | 
							if ports.white  and not vports.white  and not mesecon.is_powered(pos, rules.white)  then ign.white  = true end
 | 
				
			||||||
		meta:set_string("ignore_offevents", minetest.serialize(ign))
 | 
							meta:set_string("ignore_offevents", core.serialize(ign))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		minetest.swap_node(pos, {name = new_name, param2 = node.param2})
 | 
							core.swap_node(pos, {name = new_name, param2 = node.param2})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if ports.red    ~= vports.red    then set_port(pos, rules.red,    ports.red)    end
 | 
							if ports.red    ~= vports.red    then set_port(pos, rules.red,    ports.red)    end
 | 
				
			||||||
		if ports.blue   ~= vports.blue   then set_port(pos, rules.blue,   ports.blue)   end
 | 
							if ports.blue   ~= vports.blue   then set_port(pos, rules.blue,   ports.blue)   end
 | 
				
			||||||
@@ -195,12 +197,12 @@ end
 | 
				
			|||||||
-- Overheating --
 | 
					-- Overheating --
 | 
				
			||||||
-----------------
 | 
					-----------------
 | 
				
			||||||
local function burn_controller(pos)
 | 
					local function burn_controller(pos)
 | 
				
			||||||
	local node = minetest.get_node(pos)
 | 
						local node = core.get_node(pos)
 | 
				
			||||||
	node.name = BASENAME.."_burnt"
 | 
						node.name = BASENAME.."_burnt"
 | 
				
			||||||
	minetest.swap_node(pos, node)
 | 
						core.swap_node(pos, node)
 | 
				
			||||||
	minetest.get_meta(pos):set_string("lc_memory", "");
 | 
						core.get_meta(pos):set_string("lc_memory", "");
 | 
				
			||||||
	-- Wait for pending operations
 | 
						-- Wait for pending operations
 | 
				
			||||||
	minetest.after(0.2, mesecon.receptor_off, pos, mesecon.rules.flat)
 | 
						core.after(0.2, mesecon.receptor_off, pos, mesecon.rules.flat)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function overheat(pos, meta)
 | 
					local function overheat(pos, meta)
 | 
				
			||||||
@@ -216,10 +218,10 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local function ignore_event(event, meta)
 | 
					local function ignore_event(event, meta)
 | 
				
			||||||
	if event.type ~= "off" then return false end
 | 
						if event.type ~= "off" then return false end
 | 
				
			||||||
	local ignore_offevents = minetest.deserialize(meta:get_string("ignore_offevents"), true) or {}
 | 
						local ignore_offevents = core.deserialize(meta:get_string("ignore_offevents"), true) or {}
 | 
				
			||||||
	if ignore_offevents[event.pin.name] then
 | 
						if ignore_offevents[event.pin.name] then
 | 
				
			||||||
		ignore_offevents[event.pin.name] = nil
 | 
							ignore_offevents[event.pin.name] = nil
 | 
				
			||||||
		meta:set_string("ignore_offevents", minetest.serialize(ignore_offevents))
 | 
							meta:set_string("ignore_offevents", core.serialize(ignore_offevents))
 | 
				
			||||||
		return true
 | 
							return true
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@@ -229,11 +231,11 @@ end
 | 
				
			|||||||
-------------------------
 | 
					-------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function safe_print(param)
 | 
					local function safe_print(param)
 | 
				
			||||||
	if (minetest.settings:get("pipeworks_lua_tube_print_behavior") or "log") == "log" then
 | 
						if (core.settings:get("pipeworks_lua_tube_print_behavior") or "log") == "log" then
 | 
				
			||||||
		local string_meta = getmetatable("")
 | 
							local string_meta = getmetatable("")
 | 
				
			||||||
		local sandbox = string_meta.__index
 | 
							local sandbox = string_meta.__index
 | 
				
			||||||
		string_meta.__index = string -- Leave string sandbox temporarily
 | 
							string_meta.__index = string -- Leave string sandbox temporarily
 | 
				
			||||||
		minetest.log("action", string.format("[pipeworks.tubes.lua] print(%s)", dump(param)))
 | 
							core.log("action", string.format("[pipeworks.tubes.lua] print(%s)", dump(param)))
 | 
				
			||||||
		string_meta.__index = sandbox -- Restore string sandbox
 | 
							string_meta.__index = sandbox -- Restore string sandbox
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@@ -307,7 +309,7 @@ if mesecon.setting("luacontroller_lightweight_interrupts", false) then
 | 
				
			|||||||
		return (function(time, iid)
 | 
							return (function(time, iid)
 | 
				
			||||||
			if type(time) ~= "number" then error("Delay must be a number") end
 | 
								if type(time) ~= "number" then error("Delay must be a number") end
 | 
				
			||||||
			if iid ~= nil then send_warning("Interrupt IDs are disabled on this server") end
 | 
								if iid ~= nil then send_warning("Interrupt IDs are disabled on this server") end
 | 
				
			||||||
			table.insert(itbl, function() minetest.get_node_timer(pos):start(time) end)
 | 
								table.insert(itbl, function() core.get_node_timer(pos):start(time) end)
 | 
				
			||||||
		end)
 | 
							end)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
@@ -321,12 +323,12 @@ else
 | 
				
			|||||||
			if type(time) ~= "number" then error("Delay must be a number") end
 | 
								if type(time) ~= "number" then error("Delay must be a number") end
 | 
				
			||||||
			table.insert(itbl, function ()
 | 
								table.insert(itbl, function ()
 | 
				
			||||||
				-- Outside string metatable sandbox, can safely run this now
 | 
									-- Outside string metatable sandbox, can safely run this now
 | 
				
			||||||
				local luac_id = minetest.get_meta(pos):get_int("luac_id")
 | 
									local luac_id = core.get_meta(pos):get_int("luac_id")
 | 
				
			||||||
				-- Check if IID is dodgy, so you can't use interrupts to store an infinite amount of data.
 | 
									-- Check if IID is dodgy, so you can't use interrupts to store an infinite amount of data.
 | 
				
			||||||
				-- Note that this is safe from alter-after-free because this code gets run after the sandbox has ended.
 | 
									-- Note that this is safe from alter-after-free because this code gets run after the sandbox has ended.
 | 
				
			||||||
				-- This runs outside of the timer and *shouldn't* harm perf. unless dodgy data is being sent in the first place
 | 
									-- This runs outside of the timer and *shouldn't* harm perf. unless dodgy data is being sent in the first place
 | 
				
			||||||
				iid = remove_functions(iid)
 | 
									iid = remove_functions(iid)
 | 
				
			||||||
				local msg_ser = minetest.serialize(iid)
 | 
									local msg_ser = core.serialize(iid)
 | 
				
			||||||
				if #msg_ser <= mesecon.setting("luacontroller_interruptid_maxlen", 256) then
 | 
									if #msg_ser <= mesecon.setting("luacontroller_interruptid_maxlen", 256) then
 | 
				
			||||||
					mesecon.queue:add_action(pos, "pipeworks:lc_tube_interrupt", {luac_id, iid}, time, iid, 1)
 | 
										mesecon.queue:add_action(pos, "pipeworks:lc_tube_interrupt", {luac_id, iid}, time, iid, 1)
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
@@ -430,7 +432,7 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
-- itbl: Flat table of functions to run after sandbox cleanup, used to prevent various security hazards
 | 
					-- itbl: Flat table of functions to run after sandbox cleanup, used to prevent various security hazards
 | 
				
			||||||
local function get_digiline_send(pos, itbl, send_warning)
 | 
					local function get_digiline_send(pos, itbl, send_warning)
 | 
				
			||||||
	if not minetest.get_modpath("digilines") then return end
 | 
						if not has_digilines then return end
 | 
				
			||||||
	local chan_maxlen = mesecon.setting("luacontroller_digiline_channel_maxlen", 256)
 | 
						local chan_maxlen = mesecon.setting("luacontroller_digiline_channel_maxlen", 256)
 | 
				
			||||||
	local maxlen = mesecon.setting("luacontroller_digiline_maxlen", 50000)
 | 
						local maxlen = mesecon.setting("luacontroller_digiline_maxlen", 50000)
 | 
				
			||||||
	return function(channel, msg)
 | 
						return function(channel, msg)
 | 
				
			||||||
@@ -456,7 +458,7 @@ local function get_digiline_send(pos, itbl, send_warning)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		table.insert(itbl, function ()
 | 
							table.insert(itbl, function ()
 | 
				
			||||||
			-- Runs outside of string metatable sandbox
 | 
								-- Runs outside of string metatable sandbox
 | 
				
			||||||
			local luac_id = minetest.get_meta(pos):get_int("luac_id")
 | 
								local luac_id = core.get_meta(pos):get_int("luac_id")
 | 
				
			||||||
			mesecon.queue:add_action(pos, "pipeworks:lt_digiline_relay", {channel, luac_id, msg})
 | 
								mesecon.queue:add_action(pos, "pipeworks:lt_digiline_relay", {channel, luac_id, msg})
 | 
				
			||||||
		end)
 | 
							end)
 | 
				
			||||||
		return true
 | 
							return true
 | 
				
			||||||
@@ -471,7 +473,7 @@ local safe_globals = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local function create_environment(pos, mem, event, itbl, send_warning)
 | 
					local function create_environment(pos, mem, event, itbl, send_warning)
 | 
				
			||||||
	-- Make sure the tube hasn't broken.
 | 
						-- Make sure the tube hasn't broken.
 | 
				
			||||||
	local vports = minetest.registered_nodes[minetest.get_node(pos).name].virtual_portstates
 | 
						local vports = core.registered_nodes[core.get_node(pos).name].virtual_portstates
 | 
				
			||||||
	if not vports then return {} end
 | 
						if not vports then return {} end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	-- Gather variables for the environment
 | 
						-- Gather variables for the environment
 | 
				
			||||||
@@ -593,19 +595,19 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function load_memory(meta)
 | 
					local function load_memory(meta)
 | 
				
			||||||
	return minetest.deserialize(meta:get_string("lc_memory"), true) or {}
 | 
						return core.deserialize(meta:get_string("lc_memory"), true) or {}
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function save_memory(pos, meta, mem)
 | 
					local function save_memory(pos, meta, mem)
 | 
				
			||||||
	local memstring = minetest.serialize(remove_functions(mem))
 | 
						local memstring = core.serialize(remove_functions(mem))
 | 
				
			||||||
	local memsize_max = mesecon.setting("luacontroller_memsize", 100000)
 | 
						local memsize_max = mesecon.setting("luacontroller_memsize", 100000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (#memstring <= memsize_max) then
 | 
						if (#memstring <= memsize_max) then
 | 
				
			||||||
		meta:set_string("lc_memory", memstring)
 | 
							meta:set_string("lc_memory", memstring)
 | 
				
			||||||
		meta:mark_as_private("lc_memory")
 | 
							meta:mark_as_private("lc_memory")
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		minetest.log("info", "lua_tube memory overflow. "..memsize_max.." bytes available, "
 | 
							core.log("info", "lua_tube memory overflow. "..memsize_max.." bytes available, "
 | 
				
			||||||
				..#memstring.." required. Controller overheats.")
 | 
									..#memstring.." required. Controller overheats.")
 | 
				
			||||||
		burn_controller(pos)
 | 
							burn_controller(pos)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -614,7 +616,7 @@ end
 | 
				
			|||||||
-- Returns success (boolean), errmsg (string), retval(any, return value of the user supplied code)
 | 
					-- Returns success (boolean), errmsg (string), retval(any, return value of the user supplied code)
 | 
				
			||||||
-- run (as opposed to run_inner) is responsible for setting up meta according to this output
 | 
					-- run (as opposed to run_inner) is responsible for setting up meta according to this output
 | 
				
			||||||
local function run_inner(pos, code, event)
 | 
					local function run_inner(pos, code, event)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	-- Note: These return success, presumably to avoid changing LC ID.
 | 
						-- Note: These return success, presumably to avoid changing LC ID.
 | 
				
			||||||
	if overheat(pos) then return true, "", nil end
 | 
						if overheat(pos) then return true, "", nil end
 | 
				
			||||||
	if ignore_event(event, meta) then return true, "", nil end
 | 
						if ignore_event(event, meta) then return true, "", nil end
 | 
				
			||||||
@@ -668,8 +670,8 @@ end
 | 
				
			|||||||
local function reset_formspec(meta, code, errmsg)
 | 
					local function reset_formspec(meta, code, errmsg)
 | 
				
			||||||
	meta:set_string("code", code)
 | 
						meta:set_string("code", code)
 | 
				
			||||||
	meta:mark_as_private("code")
 | 
						meta:mark_as_private("code")
 | 
				
			||||||
	code = minetest.formspec_escape(code or "")
 | 
						code = core.formspec_escape(code or "")
 | 
				
			||||||
	errmsg = minetest.formspec_escape(tostring(errmsg or ""))
 | 
						errmsg = core.formspec_escape(tostring(errmsg or ""))
 | 
				
			||||||
	meta:set_string("formspec", "size[12,10]"
 | 
						meta:set_string("formspec", "size[12,10]"
 | 
				
			||||||
		.."style_type[label,textarea;font=mono]"
 | 
							.."style_type[label,textarea;font=mono]"
 | 
				
			||||||
		.."background[-0.2,-0.25;12.4,10.75;jeija_luac_background.png]"
 | 
							.."background[-0.2,-0.25;12.4,10.75;jeija_luac_background.png]"
 | 
				
			||||||
@@ -681,14 +683,14 @@ local function reset_formspec(meta, code, errmsg)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function reset_meta(pos, code, errmsg)
 | 
					local function reset_meta(pos, code, errmsg)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	reset_formspec(meta, code, errmsg)
 | 
						reset_formspec(meta, code, errmsg)
 | 
				
			||||||
	meta:set_int("luac_id", math.random(1, 65535))
 | 
						meta:set_int("luac_id", math.random(1, 65535))
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- Wraps run_inner with LC-reset-on-error
 | 
					-- Wraps run_inner with LC-reset-on-error
 | 
				
			||||||
local function run(pos, event)
 | 
					local function run(pos, event)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	local code = meta:get_string("code")
 | 
						local code = meta:get_string("code")
 | 
				
			||||||
	local ok, errmsg, retval = run_inner(pos, code, event)
 | 
						local ok, errmsg, retval = run_inner(pos, code, event)
 | 
				
			||||||
	if not ok then
 | 
						if not ok then
 | 
				
			||||||
@@ -705,7 +707,7 @@ local function reset(pos)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function node_timer(pos)
 | 
					local function node_timer(pos)
 | 
				
			||||||
	if minetest.registered_nodes[minetest.get_node(pos).name].is_burnt then
 | 
						if core.registered_nodes[core.get_node(pos).name].is_burnt then
 | 
				
			||||||
		return false
 | 
							return false
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	run(pos, {type="interrupt"})
 | 
						run(pos, {type="interrupt"})
 | 
				
			||||||
@@ -718,18 +720,18 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
mesecon.queue:add_function("pipeworks:lc_tube_interrupt", function (pos, luac_id, iid)
 | 
					mesecon.queue:add_function("pipeworks:lc_tube_interrupt", function (pos, luac_id, iid)
 | 
				
			||||||
	-- There is no lua_tube anymore / it has been reprogrammed / replaced / burnt
 | 
						-- There is no lua_tube anymore / it has been reprogrammed / replaced / burnt
 | 
				
			||||||
	if (minetest.get_meta(pos):get_int("luac_id") ~= luac_id) then return end
 | 
						if (core.get_meta(pos):get_int("luac_id") ~= luac_id) then return end
 | 
				
			||||||
	if (minetest.registered_nodes[minetest.get_node(pos).name].is_burnt) then return end
 | 
						if (core.registered_nodes[core.get_node(pos).name].is_burnt) then return end
 | 
				
			||||||
	run(pos, {type="interrupt", iid = iid})
 | 
						run(pos, {type="interrupt", iid = iid})
 | 
				
			||||||
end)
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mesecon.queue:add_function("pipeworks:lt_digiline_relay", function (pos, channel, luac_id, msg)
 | 
					mesecon.queue:add_function("pipeworks:lt_digiline_relay", function (pos, channel, luac_id, msg)
 | 
				
			||||||
	if not digiline then return end
 | 
						if not has_digilines then return end
 | 
				
			||||||
	-- This check is only really necessary because in case of server crash, old actions can be thrown into the future
 | 
						-- This check is only really necessary because in case of server crash, old actions can be thrown into the future
 | 
				
			||||||
	if (minetest.get_meta(pos):get_int("luac_id") ~= luac_id) then return end
 | 
						if (core.get_meta(pos):get_int("luac_id") ~= luac_id) then return end
 | 
				
			||||||
	if (minetest.registered_nodes[minetest.get_node(pos).name].is_burnt) then return end
 | 
						if (core.registered_nodes[core.get_node(pos).name].is_burnt) then return end
 | 
				
			||||||
	-- The actual work
 | 
						-- The actual work
 | 
				
			||||||
	digiline:receptor_send(pos, digiline_rules_luatube, channel, msg)
 | 
						digilines.receptor_send(pos, digiline_rules_luatube, channel, msg)
 | 
				
			||||||
end)
 | 
					end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-----------------------
 | 
					-----------------------
 | 
				
			||||||
@@ -770,7 +772,7 @@ local digiline = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function get_program(pos)
 | 
					local function get_program(pos)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	return meta:get_string("code")
 | 
						return meta:get_string("code")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -785,14 +787,14 @@ local function on_receive_fields(pos, form_name, fields, sender)
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local name = sender:get_player_name()
 | 
						local name = sender:get_player_name()
 | 
				
			||||||
	if minetest.is_protected(pos, name) and not minetest.check_player_privs(name, {protection_bypass=true}) then
 | 
						if core.is_protected(pos, name) and not core.check_player_privs(name, {protection_bypass=true}) then
 | 
				
			||||||
		minetest.record_protection_violation(pos, name)
 | 
							core.record_protection_violation(pos, name)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local ok, err = set_program(pos, fields.code)
 | 
						local ok, err = set_program(pos, fields.code)
 | 
				
			||||||
	if not ok then
 | 
						if not ok then
 | 
				
			||||||
		-- it's not an error from the server perspective
 | 
							-- it's not an error from the server perspective
 | 
				
			||||||
		minetest.log("action", "Lua controller programming error: " .. tostring(err))
 | 
							core.log("action", "Lua controller programming error: " .. tostring(err))
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -826,7 +828,7 @@ local tiles_on_off = {
 | 
				
			|||||||
	R270 = "^(pipeworks_lua_tube_port_%s.png^[transformR270)"
 | 
						R270 = "^(pipeworks_lua_tube_port_%s.png^[transformR270)"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local texture_alpha_mode = minetest.features.use_texture_alpha_string_modes
 | 
					local texture_alpha_mode = core.features.use_texture_alpha_string_modes
 | 
				
			||||||
	and "clip" or true
 | 
						and "clip" or true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for red    = 0, 1 do -- 0 = off  1 = on
 | 
					for red    = 0, 1 do -- 0 = off  1 = on
 | 
				
			||||||
@@ -909,7 +911,7 @@ for white  = 0, 1 do
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node(node_name, {
 | 
						core.register_node(node_name, {
 | 
				
			||||||
		description = "Lua controlled Tube",
 | 
							description = "Lua controlled Tube",
 | 
				
			||||||
		drawtype = "nodebox",
 | 
							drawtype = "nodebox",
 | 
				
			||||||
		tiles = tiles,
 | 
							tiles = tiles,
 | 
				
			||||||
@@ -928,7 +930,7 @@ for white  = 0, 1 do
 | 
				
			|||||||
			key = "node_sound_wood_defaults",
 | 
								key = "node_sound_wood_defaults",
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		mesecons = mesecons,
 | 
							mesecons = mesecons,
 | 
				
			||||||
		digiline = digiline,
 | 
							digilines = digiline,
 | 
				
			||||||
		-- Virtual portstates are the ports that
 | 
							-- Virtual portstates are the ports that
 | 
				
			||||||
		-- the node shows as powered up (light up).
 | 
							-- the node shows as powered up (light up).
 | 
				
			||||||
		virtual_portstates = {
 | 
							virtual_portstates = {
 | 
				
			||||||
@@ -997,10 +999,10 @@ for white  = 0, 1 do
 | 
				
			|||||||
		after_place_node = pipeworks.after_place,
 | 
							after_place_node = pipeworks.after_place,
 | 
				
			||||||
		on_blast = function(pos, intensity)
 | 
							on_blast = function(pos, intensity)
 | 
				
			||||||
			if not intensity or intensity > 1 + 3^0.5 then
 | 
								if not intensity or intensity > 1 + 3^0.5 then
 | 
				
			||||||
				minetest.remove_node(pos)
 | 
									core.remove_node(pos)
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"})
 | 
								core.swap_node(pos, {name = "pipeworks:broken_tube_1"})
 | 
				
			||||||
			pipeworks.scan_for_tube_objects(pos)
 | 
								pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -1043,7 +1045,7 @@ tiles_burnt[2] = tiles_burnt[2].."^(pipeworks_lua_tube_port_burnt.png^[transform
 | 
				
			|||||||
tiles_burnt[3] = tiles_burnt[3].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)"
 | 
					tiles_burnt[3] = tiles_burnt[3].."^(pipeworks_lua_tube_port_burnt.png^[transformR270)"
 | 
				
			||||||
tiles_burnt[4] = tiles_burnt[4].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)"
 | 
					tiles_burnt[4] = tiles_burnt[4].."^(pipeworks_lua_tube_port_burnt.png^[transformR90)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node(BASENAME .. "_burnt", {
 | 
					core.register_node(BASENAME .. "_burnt", {
 | 
				
			||||||
	drawtype = "nodebox",
 | 
						drawtype = "nodebox",
 | 
				
			||||||
	tiles = tiles_burnt,
 | 
						tiles = tiles_burnt,
 | 
				
			||||||
	use_texture_alpha = texture_alpha_mode,
 | 
						use_texture_alpha = texture_alpha_mode,
 | 
				
			||||||
@@ -1080,10 +1082,10 @@ minetest.register_node(BASENAME .. "_burnt", {
 | 
				
			|||||||
	after_dig_node = pipeworks.after_dig,
 | 
						after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
	on_blast = function(pos, intensity)
 | 
						on_blast = function(pos, intensity)
 | 
				
			||||||
		if not intensity or intensity > 1 + 3^0.5 then
 | 
							if not intensity or intensity > 1 + 3^0.5 then
 | 
				
			||||||
			minetest.remove_node(pos)
 | 
								core.remove_node(pos)
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"})
 | 
							core.swap_node(pos, {name = "pipeworks:broken_tube_1"})
 | 
				
			||||||
		pipeworks.scan_for_tube_objects(pos)
 | 
							pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
@@ -1092,7 +1094,7 @@ minetest.register_node(BASENAME .. "_burnt", {
 | 
				
			|||||||
-- Craft Registration --
 | 
					-- Craft Registration --
 | 
				
			||||||
------------------------
 | 
					------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_craft({
 | 
					core.register_craft({
 | 
				
			||||||
	type = "shapeless",
 | 
						type = "shapeless",
 | 
				
			||||||
	output = BASENAME.."000000",
 | 
						output = BASENAME.."000000",
 | 
				
			||||||
	recipe = {"pipeworks:mese_tube_000000", "mesecons_luacontroller:luacontroller0000"},
 | 
						recipe = {"pipeworks:mese_tube_000000", "mesecons_luacontroller:luacontroller0000"},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local straight = function(pos, node, velocity, stack) return {velocity} end
 | 
					local straight = function(pos, node, velocity, stack) return {velocity} end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -10,10 +10,10 @@ local pane_box = {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local texture_alpha_mode = minetest.features.use_texture_alpha_string_modes
 | 
					local texture_alpha_mode = core.features.use_texture_alpha_string_modes
 | 
				
			||||||
	and "clip" or true
 | 
						and "clip" or true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_node("pipeworks:steel_pane_embedded_tube", {
 | 
					core.register_node("pipeworks:steel_pane_embedded_tube", {
 | 
				
			||||||
	drawtype = "nodebox",
 | 
						drawtype = "nodebox",
 | 
				
			||||||
	description = S("Airtight panel embedded tube"),
 | 
						description = S("Airtight panel embedded tube"),
 | 
				
			||||||
	tiles = {
 | 
						tiles = {
 | 
				
			||||||
@@ -30,7 +30,7 @@ minetest.register_node("pipeworks:steel_pane_embedded_tube", {
 | 
				
			|||||||
	collision_box = pane_box,
 | 
						collision_box = pane_box,
 | 
				
			||||||
	paramtype = "light",
 | 
						paramtype = "light",
 | 
				
			||||||
	paramtype2 = "facedir",
 | 
						paramtype2 = "facedir",
 | 
				
			||||||
	groups = {cracky=1, oddly_breakable_by_hand = 1, tubedevice = 1, dig_glass = 2, pickaxey=1, handy=1},
 | 
						groups = {cracky=1, oddly_breakable_by_hand = 1, tubedevice = 1, tube = 1, dig_glass = 2, pickaxey=1, handy=1},
 | 
				
			||||||
	is_ground_content = false,
 | 
						is_ground_content = false,
 | 
				
			||||||
	_mcl_hardness=0.8,
 | 
						_mcl_hardness=0.8,
 | 
				
			||||||
	legacy_facedir_simple = true,
 | 
						legacy_facedir_simple = true,
 | 
				
			||||||
@@ -42,7 +42,7 @@ minetest.register_node("pipeworks:steel_pane_embedded_tube", {
 | 
				
			|||||||
		priority = 50,
 | 
							priority = 50,
 | 
				
			||||||
		can_go = straight,
 | 
							can_go = straight,
 | 
				
			||||||
		can_insert = function(pos, node, stack, direction)
 | 
							can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
			local dir = minetest.facedir_to_dir(node.param2)
 | 
								local dir = core.facedir_to_dir(node.param2)
 | 
				
			||||||
			return vector.equals(dir, direction) or vector.equals(vector.multiply(dir, -1), direction)
 | 
								return vector.equals(dir, direction) or vector.equals(vector.multiply(dir, -1), direction)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
-- This file supplies the various kinds of pneumatic tubes
 | 
					-- This file supplies the various kinds of pneumatic tubes
 | 
				
			||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local tubenodes = {}
 | 
					local tubenodes = {}
 | 
				
			||||||
pipeworks.tubenodes = tubenodes
 | 
					pipeworks.tubenodes = tubenodes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_alias("pipeworks:tube", "pipeworks:tube_000000")
 | 
					core.register_alias("pipeworks:tube", "pipeworks:tube_000000")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- now, a function to define the tubes
 | 
					-- now, a function to define the tubes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -27,8 +27,8 @@ local texture_mt = {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- This will remove any semi-transparent pixels
 | 
					-- This will remove any semi-transparent pixels
 | 
				
			||||||
-- because that is still buggy in Minetest, force this as default
 | 
					-- because that is still buggy in Luanti, force this as default
 | 
				
			||||||
local texture_alpha_mode = minetest.features.use_texture_alpha_string_modes
 | 
					local texture_alpha_mode = core.features.use_texture_alpha_string_modes
 | 
				
			||||||
	and "clip" or true
 | 
						and "clip" or true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, ends, short, inv, special, connects, style)
 | 
					local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, ends, short, inv, special, connects, style)
 | 
				
			||||||
@@ -122,25 +122,25 @@ local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, e
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
		on_punch = function(pos, node, player, pointed)
 | 
							on_punch = function(pos, node, player, pointed)
 | 
				
			||||||
			local playername = player:get_player_name()
 | 
								local playername = player:get_player_name()
 | 
				
			||||||
			if minetest.is_protected(pos, playername) and not minetest.check_player_privs(playername, {protection_bypass=true}) then
 | 
								if core.is_protected(pos, playername) and not core.check_player_privs(playername, {protection_bypass=true}) then
 | 
				
			||||||
				return minetest.node_punch(pos, node, player, pointed)
 | 
									return core.node_punch(pos, node, player, pointed)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			if pipeworks.check_and_wear_hammer(player) then
 | 
								if pipeworks.check_and_wear_hammer(player) then
 | 
				
			||||||
				local wieldname = player:get_wielded_item():get_name()
 | 
									local wieldname = player:get_wielded_item():get_name()
 | 
				
			||||||
				pipeworks.logger(string.format("%s struck a tube at %s with %s to break it.", playername, minetest.pos_to_string(pos), wieldname))
 | 
									pipeworks.logger(string.format("%s struck a tube at %s with %s to break it.", playername, core.pos_to_string(pos), wieldname))
 | 
				
			||||||
				pipeworks.break_tube(pos)
 | 
									pipeworks.break_tube(pos)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			return minetest.node_punch(pos, node, player, pointed)
 | 
								return core.node_punch(pos, node, player, pointed)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		after_place_node = pipeworks.after_place,
 | 
							after_place_node = pipeworks.after_place,
 | 
				
			||||||
		after_dig_node = pipeworks.after_dig,
 | 
							after_dig_node = pipeworks.after_dig,
 | 
				
			||||||
		on_rotate = false,
 | 
							on_rotate = false,
 | 
				
			||||||
		on_blast = function(pos, intensity)
 | 
							on_blast = function(pos, intensity)
 | 
				
			||||||
			if not intensity or intensity > 1 + 3^0.5 then
 | 
								if not intensity or intensity > 1 + 3^0.5 then
 | 
				
			||||||
				minetest.remove_node(pos)
 | 
									core.remove_node(pos)
 | 
				
			||||||
				return {string.format("%s_%s", name, dropname)}
 | 
									return {string.format("%s_%s", name, dropname)}
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			minetest.swap_node(pos, {name = "pipeworks:broken_tube_1"})
 | 
								core.swap_node(pos, {name = "pipeworks:broken_tube_1"})
 | 
				
			||||||
			pipeworks.scan_for_tube_objects(pos)
 | 
								pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		check_for_pole = pipeworks.check_for_vert_tube,
 | 
							check_for_pole = pipeworks.check_for_vert_tube,
 | 
				
			||||||
@@ -169,7 +169,7 @@ local register_one_tube = function(name, tname, dropname, desc, plain, noctrs, e
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_node(rname, nodedef)
 | 
						core.register_node(rname, nodedef)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local register_all_tubes = function(name, desc, plain, noctrs, ends, short, inv, special, old_registration)
 | 
					local register_all_tubes = function(name, desc, plain, noctrs, ends, short, inv, special, old_registration)
 | 
				
			||||||
@@ -216,7 +216,7 @@ local register_all_tubes = function(name, desc, plain, noctrs, ends, short, inv,
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
		if REGISTER_COMPATIBILITY then
 | 
							if REGISTER_COMPATIBILITY then
 | 
				
			||||||
			local cname = name.."_compatibility"
 | 
								local cname = name.."_compatibility"
 | 
				
			||||||
			minetest.register_node(cname, {
 | 
								core.register_node(cname, {
 | 
				
			||||||
				drawtype = "airlike",
 | 
									drawtype = "airlike",
 | 
				
			||||||
				style = "6d",
 | 
									style = "6d",
 | 
				
			||||||
				basename = name,
 | 
									basename = name,
 | 
				
			||||||
@@ -240,7 +240,7 @@ local register_all_tubes = function(name, desc, plain, noctrs, ends, short, inv,
 | 
				
			|||||||
			for zm = 0, 1 do
 | 
								for zm = 0, 1 do
 | 
				
			||||||
			for zp = 0, 1 do
 | 
								for zp = 0, 1 do
 | 
				
			||||||
				local tname = xm..xp..ym..yp..zm..zp
 | 
									local tname = xm..xp..ym..yp..zm..zp
 | 
				
			||||||
				minetest.register_alias(name.."_"..tname, cname)
 | 
									core.register_alias(name.."_"..tname, cname)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -266,14 +266,14 @@ end
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if REGISTER_COMPATIBILITY then
 | 
					if REGISTER_COMPATIBILITY then
 | 
				
			||||||
	minetest.register_abm({
 | 
						core.register_abm({
 | 
				
			||||||
		nodenames = {"group:tube_to_update"},
 | 
							nodenames = {"group:tube_to_update"},
 | 
				
			||||||
		interval = 1,
 | 
							interval = 1,
 | 
				
			||||||
		chance = 1,
 | 
							chance = 1,
 | 
				
			||||||
		action = function(pos, node, active_object_count, active_object_count_wider)
 | 
							action = function(pos, node, active_object_count, active_object_count_wider)
 | 
				
			||||||
			local minp = vector.subtract(pos, 1)
 | 
								local minp = vector.subtract(pos, 1)
 | 
				
			||||||
			local maxp = vector.add(pos, 1)
 | 
								local maxp = vector.add(pos, 1)
 | 
				
			||||||
			if table.getn(minetest.find_nodes_in_area(minp, maxp, "ignore")) == 0 then
 | 
								if table.getn(core.find_nodes_in_area(minp, maxp, "ignore")) == 0 then
 | 
				
			||||||
				pipeworks.scan_for_tube_objects(pos)
 | 
									pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
-- the default tube and default textures
 | 
					-- the default tube and default textures
 | 
				
			||||||
pipeworks.register_tube("pipeworks:tube", S("Pneumatic tube segment"))
 | 
					pipeworks.register_tube("pipeworks:tube", S("Pneumatic tube segment"))
 | 
				
			||||||
minetest.register_craft( {
 | 
					core.register_craft( {
 | 
				
			||||||
	output = "pipeworks:tube_1 6",
 | 
						output = "pipeworks:tube_1 6",
 | 
				
			||||||
	recipe = {
 | 
						recipe = {
 | 
				
			||||||
	        { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
						        { "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -53,7 +53,7 @@ pipeworks.register_tube("pipeworks:broken_tube", {
 | 
				
			|||||||
		is_ground_content = false,
 | 
							is_ground_content = false,
 | 
				
			||||||
		tube = {
 | 
							tube = {
 | 
				
			||||||
			insert_object = function(pos, node, stack, direction)
 | 
								insert_object = function(pos, node, stack, direction)
 | 
				
			||||||
				minetest.item_drop(stack, nil, pos)
 | 
									core.item_drop(stack, nil, pos)
 | 
				
			||||||
				return ItemStack("")
 | 
									return ItemStack("")
 | 
				
			||||||
			end,
 | 
								end,
 | 
				
			||||||
			can_insert = function(pos,node,stack,direction)
 | 
								can_insert = function(pos,node,stack,direction)
 | 
				
			||||||
@@ -65,9 +65,9 @@ pipeworks.register_tube("pipeworks:broken_tube", {
 | 
				
			|||||||
			local itemstack = puncher:get_wielded_item()
 | 
								local itemstack = puncher:get_wielded_item()
 | 
				
			||||||
			local wieldname = itemstack:get_name()
 | 
								local wieldname = itemstack:get_name()
 | 
				
			||||||
			local playername = puncher:get_player_name()
 | 
								local playername = puncher:get_player_name()
 | 
				
			||||||
			local log_msg = playername.." struck a broken tube at "..minetest.pos_to_string(pos).."\n            "
 | 
								local log_msg = playername.." struck a broken tube at "..core.pos_to_string(pos).."\n            "
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			local was_node = minetest.deserialize(meta:get_string("the_tube_was"))
 | 
								local was_node = core.deserialize(meta:get_string("the_tube_was"))
 | 
				
			||||||
			if not was_node then
 | 
								if not was_node then
 | 
				
			||||||
				pipeworks.logger(log_msg.."but it can't be repaired.")
 | 
									pipeworks.logger(log_msg.."but it can't be repaired.")
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
@@ -75,8 +75,8 @@ pipeworks.register_tube("pipeworks:broken_tube", {
 | 
				
			|||||||
			if not pipeworks.check_and_wear_hammer(puncher) then
 | 
								if not pipeworks.check_and_wear_hammer(puncher) then
 | 
				
			||||||
				if wieldname == "" then
 | 
									if wieldname == "" then
 | 
				
			||||||
					pipeworks.logger(log_msg.."by hand. It's not very effective.")
 | 
										pipeworks.logger(log_msg.."by hand. It's not very effective.")
 | 
				
			||||||
					if minetest.settings:get_bool("enable_damage") then
 | 
										if core.settings:get_bool("enable_damage") then
 | 
				
			||||||
						minetest.chat_send_player(playername,S("Broken tubes may be a bit sharp. Perhaps try with a hammer?"))
 | 
											core.chat_send_player(playername,S("Broken tubes may be a bit sharp. Perhaps try with a hammer?"))
 | 
				
			||||||
						puncher:set_hp(puncher:get_hp()-1)
 | 
											puncher:set_hp(puncher:get_hp()-1)
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
@@ -85,19 +85,19 @@ pipeworks.register_tube("pipeworks:broken_tube", {
 | 
				
			|||||||
				return
 | 
									return
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
			log_msg = log_msg.."with "..wieldname.." to repair it"
 | 
								log_msg = log_msg.."with "..wieldname.." to repair it"
 | 
				
			||||||
			local nodedef = minetest.registered_nodes[was_node.name]
 | 
								local nodedef = core.registered_nodes[was_node.name]
 | 
				
			||||||
			if nodedef then
 | 
								if nodedef then
 | 
				
			||||||
				pipeworks.logger(log_msg..".")
 | 
									pipeworks.logger(log_msg..".")
 | 
				
			||||||
				if nodedef.tube and nodedef.tube.on_repair then
 | 
									if nodedef.tube and nodedef.tube.on_repair then
 | 
				
			||||||
					nodedef.tube.on_repair(pos, was_node)
 | 
										nodedef.tube.on_repair(pos, was_node)
 | 
				
			||||||
				else
 | 
									else
 | 
				
			||||||
					minetest.swap_node(pos, { name = was_node.name, param2 = was_node.param2 })
 | 
										core.swap_node(pos, { name = was_node.name, param2 = was_node.param2 })
 | 
				
			||||||
					pipeworks.scan_for_tube_objects(pos)
 | 
										pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
				meta:set_string("the_tube_was", "")
 | 
									meta:set_string("the_tube_was", "")
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				pipeworks.logger(log_msg.." but original node "..was_node.name.." is not registered anymore.")
 | 
									pipeworks.logger(log_msg.." but original node "..was_node.name.." is not registered anymore.")
 | 
				
			||||||
				minetest.chat_send_player(playername, S("This tube cannot be repaired."))
 | 
									core.chat_send_player(playername, S("This tube cannot be repaired."))
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
		allow_metadata_inventory_put = function()
 | 
							allow_metadata_inventory_put = function()
 | 
				
			||||||
@@ -161,7 +161,7 @@ if pipeworks.enable_crossing_tube then
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local texture_alpha_mode = minetest.features.use_texture_alpha_string_modes
 | 
					local texture_alpha_mode = core.features.use_texture_alpha_string_modes
 | 
				
			||||||
	and "clip" or true
 | 
						and "clip" or true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_one_way_tube then
 | 
					if pipeworks.enable_one_way_tube then
 | 
				
			||||||
@@ -170,7 +170,7 @@ if pipeworks.enable_one_way_tube then
 | 
				
			|||||||
	for i, tile in ipairs(tiles) do
 | 
						for i, tile in ipairs(tiles) do
 | 
				
			||||||
		tiles[i] = pipeworks.make_tube_tile(tile)
 | 
							tiles[i] = pipeworks.make_tube_tile(tile)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	minetest.register_node("pipeworks:one_way_tube", {
 | 
						core.register_node("pipeworks:one_way_tube", {
 | 
				
			||||||
		description = S("One way tube"),
 | 
							description = S("One way tube"),
 | 
				
			||||||
		tiles = tiles,
 | 
							tiles = tiles,
 | 
				
			||||||
		use_texture_alpha = texture_alpha_mode,
 | 
							use_texture_alpha = texture_alpha_mode,
 | 
				
			||||||
@@ -179,7 +179,7 @@ if pipeworks.enable_one_way_tube then
 | 
				
			|||||||
		paramtype = "light",
 | 
							paramtype = "light",
 | 
				
			||||||
		node_box = {type = "fixed",
 | 
							node_box = {type = "fixed",
 | 
				
			||||||
			fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
 | 
								fixed = {{-1/2, -9/64, -9/64, 1/2, 9/64, 9/64}}},
 | 
				
			||||||
		groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, axey=1, handy=1, pickaxey=1},
 | 
							groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, tubedevice = 1, tube = 1, axey=1, handy=1, pickaxey=1},
 | 
				
			||||||
		is_ground_content = false,
 | 
							is_ground_content = false,
 | 
				
			||||||
		_mcl_hardness=0.8,
 | 
							_mcl_hardness=0.8,
 | 
				
			||||||
		_sound_def = {
 | 
							_sound_def = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,51 +1,51 @@
 | 
				
			|||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- the minetest.after() calls below can sometimes trigger after a tube
 | 
					-- the core.after() calls below can sometimes trigger after a tube
 | 
				
			||||||
-- breaks, at which point item_exit() is no longer valid, so we have to make
 | 
					-- breaks, at which point item_exit() is no longer valid, so we have to make
 | 
				
			||||||
-- sure that there even IS a callback to run, first.
 | 
					-- sure that there even IS a callback to run, first.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function after_break(pos)
 | 
					local function after_break(pos)
 | 
				
			||||||
	local name = minetest.get_node(pos).name
 | 
						local name = core.get_node(pos).name
 | 
				
			||||||
	if minetest.registered_nodes[name].item_exit then
 | 
						if core.registered_nodes[name].item_exit then
 | 
				
			||||||
		minetest.registered_nodes[name].item_exit(pos)
 | 
							core.registered_nodes[name].item_exit(pos)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("mesecons") and pipeworks.enable_detector_tube then
 | 
					if core.get_modpath("mesecons") and pipeworks.enable_detector_tube then
 | 
				
			||||||
	local detector_tube_step = 5 * (tonumber(minetest.settings:get("dedicated_server_step")) or 0.09)
 | 
						local detector_tube_step = 5 * (tonumber(core.settings:get("dedicated_server_step")) or 0.09)
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:detector_tube_on", {
 | 
						pipeworks.register_tube("pipeworks:detector_tube_on", {
 | 
				
			||||||
			description = S("Detecting Pneumatic Tube Segment on"),
 | 
								description = S("Detecting Pneumatic Tube Segment on"),
 | 
				
			||||||
			inventory_image = "pipeworks_detector_tube_inv.png",
 | 
								inventory_image = "pipeworks_detector_tube_inv.png",
 | 
				
			||||||
			plain = { "pipeworks_detector_tube_plain.png" },
 | 
								plain = { "pipeworks_detector_tube_plain.png" },
 | 
				
			||||||
			node_def = {
 | 
								node_def = {
 | 
				
			||||||
				tube = {can_go = function(pos, node, velocity, stack)
 | 
									tube = {can_go = function(pos, node, velocity, stack)
 | 
				
			||||||
						 local meta = minetest.get_meta(pos)
 | 
											 local meta = core.get_meta(pos)
 | 
				
			||||||
						 local nitems = meta:get_int("nitems")+1
 | 
											 local nitems = meta:get_int("nitems")+1
 | 
				
			||||||
						 meta:set_int("nitems", nitems)
 | 
											 meta:set_int("nitems", nitems)
 | 
				
			||||||
						 local saved_pos = vector.new(pos)
 | 
											 local saved_pos = vector.new(pos)
 | 
				
			||||||
						 minetest.after(detector_tube_step, after_break, saved_pos)
 | 
											 core.after(detector_tube_step, after_break, saved_pos)
 | 
				
			||||||
						 return pipeworks.notvel(pipeworks.meseadjlist,velocity)
 | 
											 return pipeworks.notvel(pipeworks.meseadjlist,velocity)
 | 
				
			||||||
					end},
 | 
										end},
 | 
				
			||||||
				groups = {mesecon = 2, not_in_creative_inventory = 1},
 | 
									groups = {mesecon = 2, not_in_creative_inventory = 1},
 | 
				
			||||||
				drop = "pipeworks:detector_tube_off_1",
 | 
									drop = "pipeworks:detector_tube_off_1",
 | 
				
			||||||
				mesecons = {receptor = {state = "on", rules = pipeworks.mesecons_rules}},
 | 
									mesecons = {receptor = {state = "on", rules = pipeworks.mesecons_rules}},
 | 
				
			||||||
				item_exit = function(pos)
 | 
									item_exit = function(pos)
 | 
				
			||||||
					local meta = minetest.get_meta(pos)
 | 
										local meta = core.get_meta(pos)
 | 
				
			||||||
					local nitems = meta:get_int("nitems")-1
 | 
										local nitems = meta:get_int("nitems")-1
 | 
				
			||||||
					local node = minetest.get_node(pos)
 | 
										local node = core.get_node(pos)
 | 
				
			||||||
					local name = node.name
 | 
										local name = node.name
 | 
				
			||||||
					local fdir = node.param2
 | 
										local fdir = node.param2
 | 
				
			||||||
					if nitems == 0 then
 | 
										if nitems == 0 then
 | 
				
			||||||
						 minetest.set_node(pos, {name = string.gsub(name, "on", "off"), param2 = fdir})
 | 
											 core.set_node(pos, {name = string.gsub(name, "on", "off"), param2 = fdir})
 | 
				
			||||||
						 mesecon.receptor_off(pos, pipeworks.mesecons_rules)
 | 
											 mesecon.receptor_off(pos, pipeworks.mesecons_rules)
 | 
				
			||||||
					else
 | 
										else
 | 
				
			||||||
						 meta:set_int("nitems", nitems)
 | 
											 meta:set_int("nitems", nitems)
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
				end,
 | 
									end,
 | 
				
			||||||
				on_construct = function(pos)
 | 
									on_construct = function(pos)
 | 
				
			||||||
					 local meta = minetest.get_meta(pos)
 | 
										 local meta = core.get_meta(pos)
 | 
				
			||||||
					 meta:set_int("nitems", 1)
 | 
										 meta:set_int("nitems", 1)
 | 
				
			||||||
					 minetest.after(detector_tube_step, after_break, pos)
 | 
										 core.after(detector_tube_step, after_break, pos)
 | 
				
			||||||
				end,
 | 
									end,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -55,10 +55,10 @@ if minetest.get_modpath("mesecons") and pipeworks.enable_detector_tube then
 | 
				
			|||||||
			plain = { "pipeworks_detector_tube_plain.png" },
 | 
								plain = { "pipeworks_detector_tube_plain.png" },
 | 
				
			||||||
			node_def = {
 | 
								node_def = {
 | 
				
			||||||
				tube = {can_go = function(pos, node, velocity, stack)
 | 
									tube = {can_go = function(pos, node, velocity, stack)
 | 
				
			||||||
						local node = minetest.get_node(pos)
 | 
											local node = core.get_node(pos)
 | 
				
			||||||
						local name = node.name
 | 
											local name = node.name
 | 
				
			||||||
						local fdir = node.param2
 | 
											local fdir = node.param2
 | 
				
			||||||
						minetest.set_node(pos,{name = string.gsub(name, "off", "on"), param2 = fdir})
 | 
											core.set_node(pos,{name = string.gsub(name, "off", "on"), param2 = fdir})
 | 
				
			||||||
						mesecon.receptor_on(pos, pipeworks.mesecons_rules)
 | 
											mesecon.receptor_on(pos, pipeworks.mesecons_rules)
 | 
				
			||||||
						return pipeworks.notvel(pipeworks.meseadjlist, velocity)
 | 
											return pipeworks.notvel(pipeworks.meseadjlist, velocity)
 | 
				
			||||||
					end},
 | 
										end},
 | 
				
			||||||
@@ -67,7 +67,7 @@ if minetest.get_modpath("mesecons") and pipeworks.enable_detector_tube then
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = "pipeworks:detector_tube_off_1 2",
 | 
							output = "pipeworks:detector_tube_off_1 2",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -77,7 +77,7 @@ if minetest.get_modpath("mesecons") and pipeworks.enable_detector_tube then
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local digiline_enabled = minetest.get_modpath("digilines") ~= nil
 | 
					local digiline_enabled = core.get_modpath("digilines") ~= nil
 | 
				
			||||||
if digiline_enabled and pipeworks.enable_digiline_detector_tube then
 | 
					if digiline_enabled and pipeworks.enable_digiline_detector_tube then
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:digiline_detector_tube", {
 | 
						pipeworks.register_tube("pipeworks:digiline_detector_tube", {
 | 
				
			||||||
			description = S("Digiline Detecting Pneumatic Tube Segment"),
 | 
								description = S("Digiline Detecting Pneumatic Tube Segment"),
 | 
				
			||||||
@@ -85,16 +85,16 @@ if digiline_enabled and pipeworks.enable_digiline_detector_tube then
 | 
				
			|||||||
			plain = { "pipeworks_digiline_detector_tube_plain.png" },
 | 
								plain = { "pipeworks_digiline_detector_tube_plain.png" },
 | 
				
			||||||
			node_def = {
 | 
								node_def = {
 | 
				
			||||||
				tube = {can_go = function(pos, node, velocity, stack)
 | 
									tube = {can_go = function(pos, node, velocity, stack)
 | 
				
			||||||
						local meta = minetest.get_meta(pos)
 | 
											local meta = core.get_meta(pos)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						local setchan = meta:get_string("channel")
 | 
											local setchan = meta:get_string("channel")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						digiline:receptor_send(pos, digiline.rules.default, setchan, stack:to_table())
 | 
											digilines.receptor_send(pos, digilines.rules.default, setchan, stack:to_table())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						return pipeworks.notvel(pipeworks.meseadjlist, velocity)
 | 
											return pipeworks.notvel(pipeworks.meseadjlist, velocity)
 | 
				
			||||||
					end},
 | 
										end},
 | 
				
			||||||
				on_construct = function(pos)
 | 
									on_construct = function(pos)
 | 
				
			||||||
					local meta = minetest.get_meta(pos)
 | 
										local meta = core.get_meta(pos)
 | 
				
			||||||
					meta:set_string("formspec",
 | 
										meta:set_string("formspec",
 | 
				
			||||||
						"size[8.5,2.2]"..
 | 
											"size[8.5,2.2]"..
 | 
				
			||||||
						"image[0.2,0;1,1;pipeworks_digiline_detector_tube_inv.png]"..
 | 
											"image[0.2,0;1,1;pipeworks_digiline_detector_tube_inv.png]"..
 | 
				
			||||||
@@ -111,11 +111,11 @@ if digiline_enabled and pipeworks.enable_digiline_detector_tube then
 | 
				
			|||||||
						return
 | 
											return
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
					if fields.channel then
 | 
										if fields.channel then
 | 
				
			||||||
						minetest.get_meta(pos):set_string("channel", fields.channel)
 | 
											core.get_meta(pos):set_string("channel", fields.channel)
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
				end,
 | 
									end,
 | 
				
			||||||
				groups = {},
 | 
									groups = {},
 | 
				
			||||||
				digiline = {
 | 
									digilines = {
 | 
				
			||||||
					receptor = {},
 | 
										receptor = {},
 | 
				
			||||||
					effector = {
 | 
										effector = {
 | 
				
			||||||
						action = function(pos,node,channel,msg) end
 | 
											action = function(pos,node,channel,msg) end
 | 
				
			||||||
@@ -127,7 +127,7 @@ if digiline_enabled and pipeworks.enable_digiline_detector_tube then
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft( {
 | 
						core.register_craft( {
 | 
				
			||||||
		output = "pipeworks:digiline_detector_tube_1 2",
 | 
							output = "pipeworks:digiline_detector_tube_1 2",
 | 
				
			||||||
		recipe = {
 | 
							recipe = {
 | 
				
			||||||
			{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
								{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
				
			||||||
@@ -137,7 +137,7 @@ if digiline_enabled and pipeworks.enable_digiline_detector_tube then
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("mesecons") and pipeworks.enable_conductor_tube then
 | 
					if core.get_modpath("mesecons") and pipeworks.enable_conductor_tube then
 | 
				
			||||||
	pipeworks.register_tube("pipeworks:conductor_tube_off", {
 | 
						pipeworks.register_tube("pipeworks:conductor_tube_off", {
 | 
				
			||||||
			description = S("Conducting Pneumatic Tube Segment"),
 | 
								description = S("Conducting Pneumatic Tube Segment"),
 | 
				
			||||||
			inventory_image = "pipeworks_conductor_tube_inv.png",
 | 
								inventory_image = "pipeworks_conductor_tube_inv.png",
 | 
				
			||||||
@@ -168,7 +168,7 @@ if minetest.get_modpath("mesecons") and pipeworks.enable_conductor_tube then
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	minetest.register_craft({
 | 
						core.register_craft({
 | 
				
			||||||
		type = "shapeless",
 | 
							type = "shapeless",
 | 
				
			||||||
		output = "pipeworks:conductor_tube_off_1",
 | 
							output = "pipeworks:conductor_tube_off_1",
 | 
				
			||||||
		recipe = {"pipeworks:tube_1", "mesecons:mesecon"}
 | 
							recipe = {"pipeworks:tube_1", "mesecons:mesecon"}
 | 
				
			||||||
@@ -183,9 +183,9 @@ if digiline_enabled and pipeworks.enable_digiline_conductor_tube then
 | 
				
			|||||||
		plain = {"pipeworks_tube_plain.png^pipeworks_digiline_conductor_tube_plain.png"},
 | 
							plain = {"pipeworks_tube_plain.png^pipeworks_digiline_conductor_tube_plain.png"},
 | 
				
			||||||
		noctr = {"pipeworks_tube_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"},
 | 
							noctr = {"pipeworks_tube_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"},
 | 
				
			||||||
		ends = {"pipeworks_tube_end.png^pipeworks_digiline_conductor_tube_end.png"},
 | 
							ends = {"pipeworks_tube_end.png^pipeworks_digiline_conductor_tube_end.png"},
 | 
				
			||||||
		node_def = {digiline = {wire = {rules = pipeworks.digilines_rules}}},
 | 
							node_def = {digilines = {wire = {rules = pipeworks.digilines_rules}}},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	minetest.register_craft({
 | 
						core.register_craft({
 | 
				
			||||||
		type = "shapeless",
 | 
							type = "shapeless",
 | 
				
			||||||
		output = "pipeworks:digiline_conductor_tube_1",
 | 
							output = "pipeworks:digiline_conductor_tube_1",
 | 
				
			||||||
		recipe = {"pipeworks:tube_1", "digilines:wire_std_00000000"}
 | 
							recipe = {"pipeworks:tube_1", "digilines:wire_std_00000000"}
 | 
				
			||||||
@@ -202,7 +202,7 @@ if digiline_enabled and pipeworks.enable_digiline_conductor_tube and
 | 
				
			|||||||
		noctr = {"pipeworks_conductor_tube_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"},
 | 
							noctr = {"pipeworks_conductor_tube_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"},
 | 
				
			||||||
		ends = {"pipeworks_conductor_tube_end.png^pipeworks_digiline_conductor_tube_end.png"},
 | 
							ends = {"pipeworks_conductor_tube_end.png^pipeworks_digiline_conductor_tube_end.png"},
 | 
				
			||||||
		node_def = {
 | 
							node_def = {
 | 
				
			||||||
			digiline = {wire = {rules = pipeworks.digilines_rules}},
 | 
								digilines = {wire = {rules = pipeworks.digilines_rules}},
 | 
				
			||||||
			groups = {mesecon = 2},
 | 
								groups = {mesecon = 2},
 | 
				
			||||||
			mesecons = {conductor = {
 | 
								mesecons = {conductor = {
 | 
				
			||||||
				state = "off",
 | 
									state = "off",
 | 
				
			||||||
@@ -219,7 +219,7 @@ if digiline_enabled and pipeworks.enable_digiline_conductor_tube and
 | 
				
			|||||||
		noctr = {"pipeworks_conductor_tube_on_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"},
 | 
							noctr = {"pipeworks_conductor_tube_on_noctr.png^pipeworks_digiline_conductor_tube_noctr.png"},
 | 
				
			||||||
		ends = {"pipeworks_conductor_tube_on_end.png^pipeworks_digiline_conductor_tube_end.png"},
 | 
							ends = {"pipeworks_conductor_tube_on_end.png^pipeworks_digiline_conductor_tube_end.png"},
 | 
				
			||||||
		node_def = {
 | 
							node_def = {
 | 
				
			||||||
			digiline = {wire = {rules = pipeworks.digilines_rules}},
 | 
								digilines = {wire = {rules = pipeworks.digilines_rules}},
 | 
				
			||||||
			groups = {mesecon = 2, not_in_creative_inventory = 1},
 | 
								groups = {mesecon = 2, not_in_creative_inventory = 1},
 | 
				
			||||||
			drop = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
								drop = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
				
			||||||
			mesecons = {conductor = {
 | 
								mesecons = {conductor = {
 | 
				
			||||||
@@ -229,17 +229,17 @@ if digiline_enabled and pipeworks.enable_digiline_conductor_tube and
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	minetest.register_craft({
 | 
						core.register_craft({
 | 
				
			||||||
		type = "shapeless",
 | 
							type = "shapeless",
 | 
				
			||||||
		output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
							output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
				
			||||||
		recipe = {"pipeworks:tube_1", "mesecons:mesecon", "digilines:wire_std_00000000"}
 | 
							recipe = {"pipeworks:tube_1", "mesecons:mesecon", "digilines:wire_std_00000000"}
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	minetest.register_craft({
 | 
						core.register_craft({
 | 
				
			||||||
		type = "shapeless",
 | 
							type = "shapeless",
 | 
				
			||||||
		output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
							output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
				
			||||||
		recipe = {"pipeworks:conductor_tube_off_1", "digilines:wire_std_00000000"}
 | 
							recipe = {"pipeworks:conductor_tube_off_1", "digilines:wire_std_00000000"}
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	minetest.register_craft({
 | 
						core.register_craft({
 | 
				
			||||||
		type = "shapeless",
 | 
							type = "shapeless",
 | 
				
			||||||
		output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
							output = "pipeworks:mesecon_and_digiline_conductor_tube_off_1",
 | 
				
			||||||
		recipe = {"pipeworks:digiline_conductor_tube_1", "mesecons:mesecon"}
 | 
							recipe = {"pipeworks:digiline_conductor_tube_1", "mesecons:mesecon"}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,15 +1,15 @@
 | 
				
			|||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
local fs_helpers = pipeworks.fs_helpers
 | 
					local fs_helpers = pipeworks.fs_helpers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_mese_tube then
 | 
					if pipeworks.enable_mese_tube then
 | 
				
			||||||
	local function update_formspec(pos)
 | 
						local function update_formspec(pos)
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = core.get_meta(pos)
 | 
				
			||||||
		local old_formspec = meta:get_string("formspec")
 | 
							local old_formspec = meta:get_string("formspec")
 | 
				
			||||||
		if string.find(old_formspec, "button1") then -- Old version
 | 
							if string.find(old_formspec, "button1") then -- Old version
 | 
				
			||||||
			local inv = meta:get_inventory()
 | 
								local inv = meta:get_inventory()
 | 
				
			||||||
			for i = 1, 6 do
 | 
								for i = 1, 6 do
 | 
				
			||||||
				for _, stack in ipairs(inv:get_list("line"..i)) do
 | 
									for _, stack in ipairs(inv:get_list("line"..i)) do
 | 
				
			||||||
					minetest.add_item(pos, stack)
 | 
										core.add_item(pos, stack)
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
@@ -24,7 +24,7 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
			)
 | 
								)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
		local list_backgrounds = ""
 | 
							local list_backgrounds = ""
 | 
				
			||||||
		if minetest.get_modpath("i3") or minetest.get_modpath("mcl_formspec") then
 | 
							if core.get_modpath("i3") or core.get_modpath("mcl_formspec") then
 | 
				
			||||||
			list_backgrounds = "style_type[box;colors=#666]"
 | 
								list_backgrounds = "style_type[box;colors=#666]"
 | 
				
			||||||
			for i=0, 5 do
 | 
								for i=0, 5 do
 | 
				
			||||||
				for j=0, 5 do
 | 
									for j=0, 5 do
 | 
				
			||||||
@@ -83,13 +83,13 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
				tube = {can_go = function(pos, node, velocity, stack)
 | 
									tube = {can_go = function(pos, node, velocity, stack)
 | 
				
			||||||
						 local tbl, tbln = {}, 0
 | 
											 local tbl, tbln = {}, 0
 | 
				
			||||||
						 local found, foundn = {}, 0
 | 
											 local found, foundn = {}, 0
 | 
				
			||||||
						 local meta = minetest.get_meta(pos)
 | 
											 local meta = core.get_meta(pos)
 | 
				
			||||||
						 local inv = meta:get_inventory()
 | 
											 local inv = meta:get_inventory()
 | 
				
			||||||
						 local name = stack:get_name()
 | 
											 local name = stack:get_name()
 | 
				
			||||||
						 for i, vect in ipairs(pipeworks.meseadjlist) do
 | 
											 for i, vect in ipairs(pipeworks.meseadjlist) do
 | 
				
			||||||
							local npos = vector.add(pos, vect)
 | 
												local npos = vector.add(pos, vect)
 | 
				
			||||||
							local node = minetest.get_node(npos)
 | 
												local node = core.get_node(npos)
 | 
				
			||||||
							local reg_node = minetest.registered_nodes[node.name]
 | 
												local reg_node = core.registered_nodes[node.name]
 | 
				
			||||||
							if meta:get_int("l"..i.."s") == 1 and reg_node then
 | 
												if meta:get_int("l"..i.."s") == 1 and reg_node then
 | 
				
			||||||
								local tube_def = reg_node.tube
 | 
													local tube_def = reg_node.tube
 | 
				
			||||||
								if not tube_def or not tube_def.can_insert or
 | 
													if not tube_def or not tube_def.can_insert or
 | 
				
			||||||
@@ -115,7 +115,7 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
						 return (foundn > 0) and found or tbl
 | 
											 return (foundn > 0) and found or tbl
 | 
				
			||||||
					end},
 | 
										end},
 | 
				
			||||||
				on_construct = function(pos)
 | 
									on_construct = function(pos)
 | 
				
			||||||
					local meta = minetest.get_meta(pos)
 | 
										local meta = core.get_meta(pos)
 | 
				
			||||||
					local inv = meta:get_inventory()
 | 
										local inv = meta:get_inventory()
 | 
				
			||||||
					for i = 1, 6 do
 | 
										for i = 1, 6 do
 | 
				
			||||||
						meta:set_int("l"..tostring(i).."s", 1)
 | 
											meta:set_int("l"..tostring(i).."s", 1)
 | 
				
			||||||
@@ -126,7 +126,7 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
				end,
 | 
									end,
 | 
				
			||||||
				after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
									after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
					if placer and placer:is_player() and placer:get_player_control().aux1 then
 | 
										if placer and placer:is_player() and placer:get_player_control().aux1 then
 | 
				
			||||||
						local meta = minetest.get_meta(pos)
 | 
											local meta = core.get_meta(pos)
 | 
				
			||||||
						for i = 1, 6 do
 | 
											for i = 1, 6 do
 | 
				
			||||||
							meta:set_int("l"..tostring(i).."s", 0)
 | 
												meta:set_int("l"..tostring(i).."s", 0)
 | 
				
			||||||
						end
 | 
											end
 | 
				
			||||||
@@ -150,7 +150,7 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
				allow_metadata_inventory_put = function(pos, listname, index, stack, player)
 | 
									allow_metadata_inventory_put = function(pos, listname, index, stack, player)
 | 
				
			||||||
					if not pipeworks.may_configure(pos, player) then return 0 end
 | 
										if not pipeworks.may_configure(pos, player) then return 0 end
 | 
				
			||||||
					update_formspec(pos) -- For old tubes
 | 
										update_formspec(pos) -- For old tubes
 | 
				
			||||||
					local inv = minetest.get_meta(pos):get_inventory()
 | 
										local inv = core.get_meta(pos):get_inventory()
 | 
				
			||||||
					local stack_copy = ItemStack(stack)
 | 
										local stack_copy = ItemStack(stack)
 | 
				
			||||||
					stack_copy:set_count(1)
 | 
										stack_copy:set_count(1)
 | 
				
			||||||
					inv:set_stack(listname, index, stack_copy)
 | 
										inv:set_stack(listname, index, stack_copy)
 | 
				
			||||||
@@ -159,14 +159,14 @@ if pipeworks.enable_mese_tube then
 | 
				
			|||||||
				allow_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
									allow_metadata_inventory_take = function(pos, listname, index, stack, player)
 | 
				
			||||||
					if not pipeworks.may_configure(pos, player) then return 0 end
 | 
										if not pipeworks.may_configure(pos, player) then return 0 end
 | 
				
			||||||
					update_formspec(pos) -- For old tubes
 | 
										update_formspec(pos) -- For old tubes
 | 
				
			||||||
					local inv = minetest.get_meta(pos):get_inventory()
 | 
										local inv = core.get_meta(pos):get_inventory()
 | 
				
			||||||
					inv:set_stack(listname, index, ItemStack(""))
 | 
										inv:set_stack(listname, index, ItemStack(""))
 | 
				
			||||||
					return 0
 | 
										return 0
 | 
				
			||||||
				end,
 | 
									end,
 | 
				
			||||||
				allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
 | 
									allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
 | 
				
			||||||
					if not pipeworks.may_configure(pos, player) then return 0 end
 | 
										if not pipeworks.may_configure(pos, player) then return 0 end
 | 
				
			||||||
					update_formspec(pos) -- For old tubes
 | 
										update_formspec(pos) -- For old tubes
 | 
				
			||||||
					local inv = minetest.get_meta(pos):get_inventory()
 | 
										local inv = core.get_meta(pos):get_inventory()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if from_list:match("line%d") and to_list:match("line%d") then
 | 
										if from_list:match("line%d") and to_list:match("line%d") then
 | 
				
			||||||
						return count
 | 
											return count
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,15 +1,15 @@
 | 
				
			|||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
local fs_helpers = pipeworks.fs_helpers
 | 
					local fs_helpers = pipeworks.fs_helpers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if not pipeworks.enable_item_tags or not pipeworks.enable_tag_tube then return end
 | 
					if not pipeworks.enable_item_tags or not pipeworks.enable_tag_tube then return end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local help_text = minetest.formspec_escape(
 | 
					local help_text = core.formspec_escape(
 | 
				
			||||||
	S("Separate multiple tags using commas.").."\n"..
 | 
						S("Separate multiple tags using commas.").."\n"..
 | 
				
			||||||
	S("Use \"<none>\" to match items without tags.")
 | 
						S("Use \"<none>\" to match items without tags.")
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local update_formspec = function(pos)
 | 
					local update_formspec = function(pos)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	local buttons_formspec = ""
 | 
						local buttons_formspec = ""
 | 
				
			||||||
	for i = 0, 5 do
 | 
						for i = 0, 5 do
 | 
				
			||||||
		buttons_formspec = buttons_formspec .. fs_helpers.cycling_button(meta,
 | 
							buttons_formspec = buttons_formspec .. fs_helpers.cycling_button(meta,
 | 
				
			||||||
@@ -59,7 +59,7 @@ pipeworks.register_tube("pipeworks:tag_tube", {
 | 
				
			|||||||
			can_go = function(pos, node, velocity, stack, tags)
 | 
								can_go = function(pos, node, velocity, stack, tags)
 | 
				
			||||||
				local tbl, tbln = {}, 0
 | 
									local tbl, tbln = {}, 0
 | 
				
			||||||
				local found, foundn = {}, 0
 | 
									local found, foundn = {}, 0
 | 
				
			||||||
				local meta = minetest.get_meta(pos)
 | 
									local meta = core.get_meta(pos)
 | 
				
			||||||
				local tag_hash = {}
 | 
									local tag_hash = {}
 | 
				
			||||||
				if #tags > 0 then
 | 
									if #tags > 0 then
 | 
				
			||||||
					for _,tag in ipairs(tags) do
 | 
										for _,tag in ipairs(tags) do
 | 
				
			||||||
@@ -70,8 +70,8 @@ pipeworks.register_tube("pipeworks:tag_tube", {
 | 
				
			|||||||
				end
 | 
									end
 | 
				
			||||||
				for i, vect in ipairs(pipeworks.meseadjlist) do
 | 
									for i, vect in ipairs(pipeworks.meseadjlist) do
 | 
				
			||||||
					local npos = vector.add(pos, vect)
 | 
										local npos = vector.add(pos, vect)
 | 
				
			||||||
					local node = minetest.get_node(npos)
 | 
										local node = core.get_node(npos)
 | 
				
			||||||
					local reg_node = minetest.registered_nodes[node.name]
 | 
										local reg_node = core.registered_nodes[node.name]
 | 
				
			||||||
					if meta:get_int("l" .. i .. "s") == 1 and reg_node then
 | 
										if meta:get_int("l" .. i .. "s") == 1 and reg_node then
 | 
				
			||||||
						local tube_def = reg_node.tube
 | 
											local tube_def = reg_node.tube
 | 
				
			||||||
						if not tube_def or not tube_def.can_insert or
 | 
											if not tube_def or not tube_def.can_insert or
 | 
				
			||||||
@@ -97,7 +97,7 @@ pipeworks.register_tube("pipeworks:tag_tube", {
 | 
				
			|||||||
			end
 | 
								end
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
		on_construct = function(pos)
 | 
							on_construct = function(pos)
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			for i = 1, 6 do
 | 
								for i = 1, 6 do
 | 
				
			||||||
				meta:set_int("l" .. tostring(i) .. "s", 1)
 | 
									meta:set_int("l" .. tostring(i) .. "s", 1)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -106,7 +106,7 @@ pipeworks.register_tube("pipeworks:tag_tube", {
 | 
				
			|||||||
		end,
 | 
							end,
 | 
				
			||||||
		after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
							after_place_node = function(pos, placer, itemstack, pointed_thing)
 | 
				
			||||||
			if placer and placer:is_player() and placer:get_player_control().aux1 then
 | 
								if placer and placer:is_player() and placer:get_player_control().aux1 then
 | 
				
			||||||
				local meta = minetest.get_meta(pos)
 | 
									local meta = core.get_meta(pos)
 | 
				
			||||||
				for i = 1, 6 do
 | 
									for i = 1, 6 do
 | 
				
			||||||
					meta:set_int("l" .. tostring(i) .. "s", 0)
 | 
										meta:set_int("l" .. tostring(i) .. "s", 0)
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
@@ -120,7 +120,7 @@ pipeworks.register_tube("pipeworks:tag_tube", {
 | 
				
			|||||||
				return
 | 
									return
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			local meta = minetest.get_meta(pos)
 | 
								local meta = core.get_meta(pos)
 | 
				
			||||||
			for i = 1, 6 do
 | 
								for i = 1, 6 do
 | 
				
			||||||
				local field_name = "tags" .. tostring(i)
 | 
									local field_name = "tags" .. tostring(i)
 | 
				
			||||||
				if fields[field_name] then
 | 
									if fields[field_name] then
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
local filename = minetest.get_worldpath().."/teleport_tubes"  -- Only used for backward-compat
 | 
					local filename = core.get_worldpath().."/teleport_tubes"  -- Only used for backward-compat
 | 
				
			||||||
local storage = minetest.get_mod_storage()
 | 
					local storage = core.get_mod_storage()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local enable_logging = minetest.settings:get_bool("pipeworks_log_teleport_tubes", false)
 | 
					local enable_logging = core.settings:get_bool("pipeworks_log_teleport_tubes", false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local has_digilines = minetest.get_modpath("digilines")
 | 
					local has_digilines = core.get_modpath("digilines")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-- V1: Serialized text file indexed by vector position.
 | 
					-- V1: Serialized text file indexed by vector position.
 | 
				
			||||||
-- V2: Serialized text file indexed by hash position.
 | 
					-- V2: Serialized text file indexed by hash position.
 | 
				
			||||||
@@ -17,7 +17,7 @@ local receiver_cache = {}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local function hash_pos(pos)
 | 
					local function hash_pos(pos)
 | 
				
			||||||
	vector.round(pos)
 | 
						vector.round(pos)
 | 
				
			||||||
	return string.format("%.0f", minetest.hash_node_position(pos))
 | 
						return string.format("%.0f", core.hash_node_position(pos))
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function serialize_tube(tube)
 | 
					local function serialize_tube(tube)
 | 
				
			||||||
@@ -29,7 +29,7 @@ local function deserialize_tube(hash, str)
 | 
				
			|||||||
	local cr = tonumber(str:sub(1, 1))
 | 
						local cr = tonumber(str:sub(1, 1))
 | 
				
			||||||
	local channel = str:sub(3)
 | 
						local channel = str:sub(3)
 | 
				
			||||||
	if sep and cr and channel then
 | 
						if sep and cr and channel then
 | 
				
			||||||
		local pos = minetest.get_position_from_hash(tonumber(hash))
 | 
							local pos = core.get_position_from_hash(tonumber(hash))
 | 
				
			||||||
		return {x = pos.x, y = pos.y, z = pos.z, cr = cr, channel = channel}
 | 
							return {x = pos.x, y = pos.y, z = pos.z, cr = cr, channel = channel}
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@@ -62,7 +62,7 @@ local function migrate_tube_db()
 | 
				
			|||||||
	if storage:get_int("version") == 3 then
 | 
						if storage:get_int("version") == 3 then
 | 
				
			||||||
		for key, val in pairs(storage:to_table().fields) do
 | 
							for key, val in pairs(storage:to_table().fields) do
 | 
				
			||||||
			if tonumber(key) then
 | 
								if tonumber(key) then
 | 
				
			||||||
				tube_db[key] = minetest.deserialize(val)
 | 
									tube_db[key] = core.deserialize(val)
 | 
				
			||||||
			elseif key ~= "version" then
 | 
								elseif key ~= "version" then
 | 
				
			||||||
				error("Unknown field in teleport tube database: "..key)
 | 
									error("Unknown field in teleport tube database: "..key)
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -75,7 +75,7 @@ local function migrate_tube_db()
 | 
				
			|||||||
		local content = file:read("*all")
 | 
							local content = file:read("*all")
 | 
				
			||||||
		io.close(file)
 | 
							io.close(file)
 | 
				
			||||||
		if content and content ~= "" then
 | 
							if content and content ~= "" then
 | 
				
			||||||
			tube_db = minetest.deserialize(content)
 | 
								tube_db = core.deserialize(content)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local version = tube_db.version or 0
 | 
						local version = tube_db.version or 0
 | 
				
			||||||
@@ -134,8 +134,8 @@ local function get_receivers(pos, channel)
 | 
				
			|||||||
	local receivers = {}
 | 
						local receivers = {}
 | 
				
			||||||
	for key, val in pairs(tube_db) do
 | 
						for key, val in pairs(tube_db) do
 | 
				
			||||||
		if val.cr == 1 and val.channel == channel and not vector.equals(val, pos) then
 | 
							if val.cr == 1 and val.channel == channel and not vector.equals(val, pos) then
 | 
				
			||||||
			minetest.load_area(val)
 | 
								core.load_area(val)
 | 
				
			||||||
			local node_name = minetest.get_node(val).name
 | 
								local node_name = core.get_node(val).name
 | 
				
			||||||
			if node_name:find("pipeworks:teleport_tube") then
 | 
								if node_name:find("pipeworks:teleport_tube") then
 | 
				
			||||||
				table.insert(receivers, val)
 | 
									table.insert(receivers, val)
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
@@ -148,7 +148,7 @@ local function get_receivers(pos, channel)
 | 
				
			|||||||
	return receivers
 | 
						return receivers
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local help_text = minetest.formspec_escape(
 | 
					local help_text = core.formspec_escape(
 | 
				
			||||||
	S("Channels are public by default").."\n"..
 | 
						S("Channels are public by default").."\n"..
 | 
				
			||||||
	S("Use <player>:<channel> for fully private channels").."\n"..
 | 
						S("Use <player>:<channel> for fully private channels").."\n"..
 | 
				
			||||||
	S("Use <player>;<channel> for private receivers")
 | 
						S("Use <player>;<channel> for private receivers")
 | 
				
			||||||
@@ -187,7 +187,7 @@ local function update_meta(meta)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function update_tube(pos, channel, cr, player_name)
 | 
					local function update_tube(pos, channel, cr, player_name)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	if meta:get_string("channel") == channel and meta:get_int("can_receive") == cr then
 | 
						if meta:get_string("channel") == channel and meta:get_int("can_receive") == cr then
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -200,11 +200,11 @@ local function update_tube(pos, channel, cr, player_name)
 | 
				
			|||||||
	local name, mode = channel:match("^([^:;]+)([:;])")
 | 
						local name, mode = channel:match("^([^:;]+)([:;])")
 | 
				
			||||||
	if name and mode and name ~= player_name then
 | 
						if name and mode and name ~= player_name then
 | 
				
			||||||
		if mode == ":" then
 | 
							if mode == ":" then
 | 
				
			||||||
			minetest.chat_send_player(player_name,
 | 
								core.chat_send_player(player_name,
 | 
				
			||||||
				S("Sorry, channel '@1' is reserved for exclusive use by @2", channel, name))
 | 
									S("Sorry, channel '@1' is reserved for exclusive use by @2", channel, name))
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		elseif mode == ";" and cr ~= 0 then
 | 
							elseif mode == ";" and cr ~= 0 then
 | 
				
			||||||
			minetest.chat_send_player(player_name,
 | 
								core.chat_send_player(player_name,
 | 
				
			||||||
				S("Sorry, receiving from channel '@1' is reserved for @2", channel, name))
 | 
									S("Sorry, receiving from channel '@1' is reserved for @2", channel, name))
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
@@ -218,7 +218,7 @@ local function receive_fields(pos, _, fields, sender)
 | 
				
			|||||||
	if not fields.channel or not pipeworks.may_configure(pos, sender) then
 | 
						if not fields.channel or not pipeworks.may_configure(pos, sender) then
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	local channel = fields.channel:trim()
 | 
						local channel = fields.channel:trim()
 | 
				
			||||||
	local cr = meta:get_int("can_receive")
 | 
						local cr = meta:get_int("can_receive")
 | 
				
			||||||
	if fields.cr_on then
 | 
						if fields.cr_on then
 | 
				
			||||||
@@ -237,7 +237,7 @@ local function can_go(pos, node, velocity, stack)
 | 
				
			|||||||
	velocity.x = 0
 | 
						velocity.x = 0
 | 
				
			||||||
	velocity.y = 0
 | 
						velocity.y = 0
 | 
				
			||||||
	velocity.z = 0
 | 
						velocity.z = 0
 | 
				
			||||||
	local src_meta = minetest.get_meta(pos)
 | 
						local src_meta = core.get_meta(pos)
 | 
				
			||||||
	local channel = src_meta:get_string("channel")
 | 
						local channel = src_meta:get_string("channel")
 | 
				
			||||||
	if channel == "" then
 | 
						if channel == "" then
 | 
				
			||||||
		return {}
 | 
							return {}
 | 
				
			||||||
@@ -249,10 +249,10 @@ local function can_go(pos, node, velocity, stack)
 | 
				
			|||||||
	local target = receivers[math.random(1, #receivers)]
 | 
						local target = receivers[math.random(1, #receivers)]
 | 
				
			||||||
	if enable_logging then
 | 
						if enable_logging then
 | 
				
			||||||
		local src_owner = src_meta:get_string("owner")
 | 
							local src_owner = src_meta:get_string("owner")
 | 
				
			||||||
		local dst_meta = minetest.get_meta(pos)
 | 
							local dst_meta = core.get_meta(pos)
 | 
				
			||||||
		local dst_owner = dst_meta:get_string("owner")
 | 
							local dst_owner = dst_meta:get_string("owner")
 | 
				
			||||||
		minetest.log("action", string.format("[pipeworks] %s teleported from %s (owner=%s) to %s (owner=%s) via %s",
 | 
							core.log("action", string.format("[pipeworks] %s teleported from %s (owner=%s) to %s (owner=%s) via %s",
 | 
				
			||||||
			stack:to_string(), minetest.pos_to_string(pos), src_owner, minetest.pos_to_string(target), dst_owner, channel
 | 
								stack:to_string(), core.pos_to_string(pos), src_owner, core.pos_to_string(target), dst_owner, channel
 | 
				
			||||||
		))
 | 
							))
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	pos.x = target.x
 | 
						pos.x = target.x
 | 
				
			||||||
@@ -262,9 +262,9 @@ local function can_go(pos, node, velocity, stack)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function repair_tube(pos, node)
 | 
					local function repair_tube(pos, node)
 | 
				
			||||||
	minetest.swap_node(pos, {name = node.name, param2 = node.param2})
 | 
						core.swap_node(pos, {name = node.name, param2 = node.param2})
 | 
				
			||||||
	pipeworks.scan_for_tube_objects(pos)
 | 
						pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	local channel = meta:get_string("channel")
 | 
						local channel = meta:get_string("channel")
 | 
				
			||||||
	if channel ~= "" then
 | 
						if channel ~= "" then
 | 
				
			||||||
		set_tube(pos, channel, meta:get_int("can_receive"))
 | 
							set_tube(pos, channel, meta:get_int("can_receive"))
 | 
				
			||||||
@@ -273,7 +273,7 @@ local function repair_tube(pos, node)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function digiline_action(pos, _, digiline_channel, msg)
 | 
					local function digiline_action(pos, _, digiline_channel, msg)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	if digiline_channel ~= meta:get_string("digiline_channel") then
 | 
						if digiline_channel ~= meta:get_string("digiline_channel") then
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -304,7 +304,7 @@ local def = {
 | 
				
			|||||||
		on_repair = repair_tube,
 | 
							on_repair = repair_tube,
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	on_construct = function(pos)
 | 
						on_construct = function(pos)
 | 
				
			||||||
		local meta = minetest.get_meta(pos)
 | 
							local meta = core.get_meta(pos)
 | 
				
			||||||
		meta:set_int("can_receive", 1)  -- Enabled by default
 | 
							meta:set_int("can_receive", 1)  -- Enabled by default
 | 
				
			||||||
		update_meta(meta)
 | 
							update_meta(meta)
 | 
				
			||||||
	end,
 | 
						end,
 | 
				
			||||||
@@ -315,10 +315,10 @@ local def = {
 | 
				
			|||||||
if has_digilines then
 | 
					if has_digilines then
 | 
				
			||||||
	def.after_place_node = function(pos, placer)
 | 
						def.after_place_node = function(pos, placer)
 | 
				
			||||||
		-- Set owner for digilines
 | 
							-- Set owner for digilines
 | 
				
			||||||
		minetest.get_meta(pos):set_string("owner", placer:get_player_name())
 | 
							core.get_meta(pos):set_string("owner", placer:get_player_name())
 | 
				
			||||||
		pipeworks.after_place(pos)
 | 
							pipeworks.after_place(pos)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	def.digiline = {
 | 
						def.digilines = {
 | 
				
			||||||
		receptor = {
 | 
							receptor = {
 | 
				
			||||||
			rules = pipeworks.digilines_rules,
 | 
								rules = pipeworks.digilines_rules,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -339,12 +339,12 @@ pipeworks.register_tube("pipeworks:teleport_tube", {
 | 
				
			|||||||
	node_def = def,
 | 
						node_def = def,
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if minetest.get_modpath("mesecons_mvps") then
 | 
					if core.get_modpath("mesecons_mvps") then
 | 
				
			||||||
	-- Update tubes when moved by pistons
 | 
						-- Update tubes when moved by pistons
 | 
				
			||||||
	mesecon.register_on_mvps_move(function(moved_nodes)
 | 
						mesecon.register_on_mvps_move(function(moved_nodes)
 | 
				
			||||||
		for _, n in ipairs(moved_nodes) do
 | 
							for _, n in ipairs(moved_nodes) do
 | 
				
			||||||
			if n.node.name:find("pipeworks:teleport_tube") then
 | 
								if n.node.name:find("pipeworks:teleport_tube") then
 | 
				
			||||||
				local meta = minetest.get_meta(n.pos)
 | 
									local meta = core.get_meta(n.pos)
 | 
				
			||||||
				set_tube(n.pos, meta:get_string("channel"), meta:get_int("can_receive"))
 | 
									set_tube(n.pos, meta:get_string("channel"), meta:get_int("can_receive"))
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local has_vislib = minetest.get_modpath("vizlib")
 | 
					local has_vislib = core.get_modpath("vizlib")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local enable_max = minetest.settings:get_bool("pipeworks_enable_items_per_tube_limit", true)
 | 
					local enable_max = core.settings:get_bool("pipeworks_enable_items_per_tube_limit", true)
 | 
				
			||||||
local max_items = tonumber(minetest.settings:get("pipeworks_max_items_per_tube")) or 30
 | 
					local max_items = tonumber(core.settings:get("pipeworks_max_items_per_tube")) or 30
 | 
				
			||||||
max_items = math.ceil(max_items / 2)  -- Limit vacuuming to half the max limit
 | 
					max_items = math.ceil(max_items / 2)  -- Limit vacuuming to half the max limit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function vacuum(pos, radius)
 | 
					local function vacuum(pos, radius)
 | 
				
			||||||
@@ -12,7 +12,7 @@ local function vacuum(pos, radius)
 | 
				
			|||||||
	local min_pos = vector.subtract(pos, radius)
 | 
						local min_pos = vector.subtract(pos, radius)
 | 
				
			||||||
	local max_pos = vector.add(pos, radius)
 | 
						local max_pos = vector.add(pos, radius)
 | 
				
			||||||
	local count = 0
 | 
						local count = 0
 | 
				
			||||||
	for _, obj in pairs(minetest.get_objects_in_area(min_pos, max_pos)) do
 | 
						for _, obj in pairs(core.get_objects_in_area(min_pos, max_pos)) do
 | 
				
			||||||
		local entity = obj:get_luaentity()
 | 
							local entity = obj:get_luaentity()
 | 
				
			||||||
		if entity and entity.name == "__builtin:item" then
 | 
							if entity and entity.name == "__builtin:item" then
 | 
				
			||||||
			if entity.itemstring ~= "" then
 | 
								if entity.itemstring ~= "" then
 | 
				
			||||||
@@ -29,13 +29,13 @@ local function vacuum(pos, radius)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function set_timer(pos)
 | 
					local function set_timer(pos)
 | 
				
			||||||
	local timer = minetest.get_node_timer(pos)
 | 
						local timer = core.get_node_timer(pos)
 | 
				
			||||||
	-- Randomize timer so not all tubes vacuum at the same time
 | 
						-- Randomize timer so not all tubes vacuum at the same time
 | 
				
			||||||
	timer:start(math.random(10, 20) * 0.1)
 | 
						timer:start(math.random(10, 20) * 0.1)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function repair_tube(pos, was_node)
 | 
					local function repair_tube(pos, was_node)
 | 
				
			||||||
	minetest.swap_node(pos, {name = was_node.name, param2 = was_node.param2})
 | 
						core.swap_node(pos, {name = was_node.name, param2 = was_node.param2})
 | 
				
			||||||
	pipeworks.scan_for_tube_objects(pos)
 | 
						pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
	set_timer(pos)
 | 
						set_timer(pos)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
@@ -45,7 +45,7 @@ local function show_area(pos, node, player)
 | 
				
			|||||||
		-- Only show area when using an empty hand
 | 
							-- Only show area when using an empty hand
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local radius = tonumber(minetest.get_meta(pos):get("dist")) or 2
 | 
						local radius = tonumber(core.get_meta(pos):get("dist")) or 2
 | 
				
			||||||
	vizlib.draw_cube(pos, radius + 0.5, {player = player})
 | 
						vizlib.draw_cube(pos, radius + 0.5, {player = player})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -93,14 +93,14 @@ if pipeworks.enable_mese_sand_tube then
 | 
				
			|||||||
				on_repair = repair_tube,
 | 
									on_repair = repair_tube,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			on_construct = function(pos)
 | 
								on_construct = function(pos)
 | 
				
			||||||
				local meta = minetest.get_meta(pos)
 | 
									local meta = core.get_meta(pos)
 | 
				
			||||||
				meta:set_int("dist", 2)
 | 
									meta:set_int("dist", 2)
 | 
				
			||||||
				meta:set_string("formspec", formspec)
 | 
									meta:set_string("formspec", formspec)
 | 
				
			||||||
				meta:set_string("infotext", S("Adjustable Vacuuming Tube (@1m)", 2))
 | 
									meta:set_string("infotext", S("Adjustable Vacuuming Tube (@1m)", 2))
 | 
				
			||||||
				set_timer(pos)
 | 
									set_timer(pos)
 | 
				
			||||||
			end,
 | 
								end,
 | 
				
			||||||
			on_timer = function(pos, elapsed)
 | 
								on_timer = function(pos, elapsed)
 | 
				
			||||||
				local radius = minetest.get_meta(pos):get_int("dist")
 | 
									local radius = core.get_meta(pos):get_int("dist")
 | 
				
			||||||
				vacuum(pos, radius)
 | 
									vacuum(pos, radius)
 | 
				
			||||||
				set_timer(pos)
 | 
									set_timer(pos)
 | 
				
			||||||
			end,
 | 
								end,
 | 
				
			||||||
@@ -108,7 +108,7 @@ if pipeworks.enable_mese_sand_tube then
 | 
				
			|||||||
				if not fields.dist or not pipeworks.may_configure(pos, sender) then
 | 
									if not fields.dist or not pipeworks.may_configure(pos, sender) then
 | 
				
			||||||
					return
 | 
										return
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
				local meta = minetest.get_meta(pos)
 | 
									local meta = core.get_meta(pos)
 | 
				
			||||||
				local dist = math.min(math.max(tonumber(fields.dist) or 0, 0), 8)
 | 
									local dist = math.min(math.max(tonumber(fields.dist) or 0, 0), 8)
 | 
				
			||||||
				meta:set_int("dist", dist)
 | 
									meta:set_int("dist", dist)
 | 
				
			||||||
				meta:set_string("infotext", S("Adjustable Vacuuming Tube (@1m)", dist))
 | 
									meta:set_string("infotext", S("Adjustable Vacuuming Tube (@1m)", dist))
 | 
				
			||||||
@@ -118,7 +118,7 @@ if pipeworks.enable_mese_sand_tube then
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
minetest.register_lbm({
 | 
					core.register_lbm({
 | 
				
			||||||
	label = "Vacuum tube node timer starter",
 | 
						label = "Vacuum tube node timer starter",
 | 
				
			||||||
	name = "pipeworks:vacuum_tube_start",
 | 
						name = "pipeworks:vacuum_tube_start",
 | 
				
			||||||
	nodenames = {"group:vacuum_tube"},
 | 
						nodenames = {"group:vacuum_tube"},
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										84
									
								
								wielder.lua
									
									
									
									
									
								
							
							
						
						
									
										84
									
								
								wielder.lua
									
									
									
									
									
								
							@@ -1,12 +1,12 @@
 | 
				
			|||||||
local S = minetest.get_translator("pipeworks")
 | 
					local S = core.get_translator("pipeworks")
 | 
				
			||||||
local has_digilines = minetest.get_modpath("digilines")
 | 
					local has_digilines = core.get_modpath("digilines")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function set_wielder_formspec(def, meta)
 | 
					local function set_wielder_formspec(def, meta)
 | 
				
			||||||
	local width, height = def.wield_inv.width, def.wield_inv.height
 | 
						local width, height = def.wield_inv.width, def.wield_inv.height
 | 
				
			||||||
	local offset = 5.22 - width * 0.625
 | 
						local offset = 5.22 - width * 0.625
 | 
				
			||||||
	local size = "10.2,"..(6.5 + height * 1.25 + (has_digilines and 1.25 or 0))
 | 
						local size = "10.2,"..(6.5 + height * 1.25 + (has_digilines and 1.25 or 0))
 | 
				
			||||||
	local list_bg = ""
 | 
						local list_bg = ""
 | 
				
			||||||
	if minetest.get_modpath("i3") or minetest.get_modpath("mcl_formspec") then
 | 
						if core.get_modpath("i3") or core.get_modpath("mcl_formspec") then
 | 
				
			||||||
		list_bg = "style_type[box;colors=#666]"
 | 
							list_bg = "style_type[box;colors=#666]"
 | 
				
			||||||
		for i=0, height-1 do
 | 
							for i=0, height-1 do
 | 
				
			||||||
			for j=0, width-1 do
 | 
								for j=0, width-1 do
 | 
				
			||||||
@@ -18,7 +18,7 @@ local function set_wielder_formspec(def, meta)
 | 
				
			|||||||
	local fs = "formspec_version[2]size["..size.."]"..
 | 
						local fs = "formspec_version[2]size["..size.."]"..
 | 
				
			||||||
		pipeworks.fs_helpers.get_prepends(size)..list_bg..
 | 
							pipeworks.fs_helpers.get_prepends(size)..list_bg..
 | 
				
			||||||
		"item_image[0.5,0.3;1,1;"..def.name.."_off]"..
 | 
							"item_image[0.5,0.3;1,1;"..def.name.."_off]"..
 | 
				
			||||||
		"label[1.75,0.8;"..minetest.formspec_escape(def.description).."]"..
 | 
							"label[1.75,0.8;"..core.formspec_escape(def.description).."]"..
 | 
				
			||||||
		"list[context;"..def.wield_inv.name..";"..offset..",1.25;"..width..","..height..";]"
 | 
							"list[context;"..def.wield_inv.name..";"..offset..",1.25;"..width..","..height..";]"
 | 
				
			||||||
	if has_digilines then
 | 
						if has_digilines then
 | 
				
			||||||
		fs = fs.."field[1.5,"..inv_offset..";5,0.8;channel;"..S("Channel")..";${channel}]"..
 | 
							fs = fs.."field[1.5,"..inv_offset..";5,0.8;channel;"..S("Channel")..";${channel}]"..
 | 
				
			||||||
@@ -32,7 +32,7 @@ local function set_wielder_formspec(def, meta)
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function wielder_action(def, pos, node, index)
 | 
					local function wielder_action(def, pos, node, index)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	local inv = meta:get_inventory()
 | 
						local inv = meta:get_inventory()
 | 
				
			||||||
	local list = inv:get_list(def.wield_inv.name)
 | 
						local list = inv:get_list(def.wield_inv.name)
 | 
				
			||||||
	local wield_index
 | 
						local wield_index
 | 
				
			||||||
@@ -51,7 +51,7 @@ local function wielder_action(def, pos, node, index)
 | 
				
			|||||||
	if not wield_index and not def.wield_hand then
 | 
						if not wield_index and not def.wield_hand then
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	local dir = minetest.facedir_to_dir(node.param2)
 | 
						local dir = core.facedir_to_dir(node.param2)
 | 
				
			||||||
	local fakeplayer = fakelib.create_player({
 | 
						local fakeplayer = fakelib.create_player({
 | 
				
			||||||
		name = meta:get_string("owner"),
 | 
							name = meta:get_string("owner"),
 | 
				
			||||||
		direction = vector.multiply(dir, -1),
 | 
							direction = vector.multiply(dir, -1),
 | 
				
			||||||
@@ -82,19 +82,19 @@ local function wielder_on(def, pos, node)
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	node.name = def.name.."_on"
 | 
						node.name = def.name.."_on"
 | 
				
			||||||
	minetest.swap_node(pos, node)
 | 
						core.swap_node(pos, node)
 | 
				
			||||||
	wielder_action(def, pos, node)
 | 
						wielder_action(def, pos, node)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function wielder_off(def, pos, node)
 | 
					local function wielder_off(def, pos, node)
 | 
				
			||||||
	if node.name == def.name.."_on" then
 | 
						if node.name == def.name.."_on" then
 | 
				
			||||||
		node.name = def.name.."_off"
 | 
							node.name = def.name.."_off"
 | 
				
			||||||
		minetest.swap_node(pos, node)
 | 
							core.swap_node(pos, node)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function wielder_digiline_action(def, pos, channel, msg)
 | 
					local function wielder_digiline_action(def, pos, channel, msg)
 | 
				
			||||||
	local meta = minetest.get_meta(pos)
 | 
						local meta = core.get_meta(pos)
 | 
				
			||||||
	local set_channel = meta:get_string("channel")
 | 
						local set_channel = meta:get_string("channel")
 | 
				
			||||||
	if channel ~= set_channel then
 | 
						if channel ~= set_channel then
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
@@ -109,7 +109,7 @@ local function wielder_digiline_action(def, pos, channel, msg)
 | 
				
			|||||||
		end
 | 
							end
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	if msg.command == "activate" then
 | 
						if msg.command == "activate" then
 | 
				
			||||||
		local node = minetest.get_node(pos)
 | 
							local node = core.get_node(pos)
 | 
				
			||||||
		local index = type(msg.slot) == "number" and msg.slot or nil
 | 
							local index = type(msg.slot) == "number" and msg.slot or nil
 | 
				
			||||||
		wielder_action(def, pos, node, index)
 | 
							wielder_action(def, pos, node, index)
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -123,7 +123,7 @@ function pipeworks.register_wielder(def)
 | 
				
			|||||||
			axey = 1, handy = 1, pickaxey = 1,
 | 
								axey = 1, handy = 1, pickaxey = 1,
 | 
				
			||||||
			not_in_creative_inventory = state == "on" and 1 or nil
 | 
								not_in_creative_inventory = state == "on" and 1 or nil
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		minetest.register_node(def.name.."_"..state, {
 | 
							core.register_node(def.name.."_"..state, {
 | 
				
			||||||
			description = def.description,
 | 
								description = def.description,
 | 
				
			||||||
			tiles = def.tiles[state],
 | 
								tiles = def.tiles[state],
 | 
				
			||||||
			paramtype2 = "facedir",
 | 
								paramtype2 = "facedir",
 | 
				
			||||||
@@ -157,16 +157,16 @@ function pipeworks.register_wielder(def)
 | 
				
			|||||||
				can_insert = function(pos, node, stack, direction)
 | 
									can_insert = function(pos, node, stack, direction)
 | 
				
			||||||
					if def.eject_drops then
 | 
										if def.eject_drops then
 | 
				
			||||||
						-- Prevent ejected items from being inserted
 | 
											-- Prevent ejected items from being inserted
 | 
				
			||||||
						local dir = vector.multiply(minetest.facedir_to_dir(node.param2), -1)
 | 
											local dir = vector.multiply(core.facedir_to_dir(node.param2), -1)
 | 
				
			||||||
						if vector.equals(direction, dir) then
 | 
											if vector.equals(direction, dir) then
 | 
				
			||||||
							return false
 | 
												return false
 | 
				
			||||||
						end
 | 
											end
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
					local inv = minetest.get_meta(pos):get_inventory()
 | 
										local inv = core.get_meta(pos):get_inventory()
 | 
				
			||||||
					return inv:room_for_item(def.wield_inv.name, stack)
 | 
										return inv:room_for_item(def.wield_inv.name, stack)
 | 
				
			||||||
				end,
 | 
									end,
 | 
				
			||||||
				insert_object = function(pos, node, stack)
 | 
									insert_object = function(pos, node, stack)
 | 
				
			||||||
					local inv = minetest.get_meta(pos):get_inventory()
 | 
										local inv = core.get_meta(pos):get_inventory()
 | 
				
			||||||
					return inv:add_item(def.wield_inv.name, stack)
 | 
										return inv:add_item(def.wield_inv.name, stack)
 | 
				
			||||||
				end,
 | 
									end,
 | 
				
			||||||
				input_inventory = def.wield_inv.name,
 | 
									input_inventory = def.wield_inv.name,
 | 
				
			||||||
@@ -176,7 +176,7 @@ function pipeworks.register_wielder(def)
 | 
				
			|||||||
				end,
 | 
									end,
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			on_construct = function(pos)
 | 
								on_construct = function(pos)
 | 
				
			||||||
				local meta = minetest.get_meta(pos)
 | 
									local meta = core.get_meta(pos)
 | 
				
			||||||
				local inv = meta:get_inventory()
 | 
									local inv = meta:get_inventory()
 | 
				
			||||||
				inv:set_size(def.wield_inv.name, def.wield_inv.width * def.wield_inv.height)
 | 
									inv:set_size(def.wield_inv.name, def.wield_inv.width * def.wield_inv.height)
 | 
				
			||||||
				if def.eject_drops then
 | 
									if def.eject_drops then
 | 
				
			||||||
@@ -189,15 +189,15 @@ function pipeworks.register_wielder(def)
 | 
				
			|||||||
				if not placer then
 | 
									if not placer then
 | 
				
			||||||
					return
 | 
										return
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
				local node = minetest.get_node(pos)
 | 
									local node = core.get_node(pos)
 | 
				
			||||||
				node.param2 = minetest.dir_to_facedir(placer:get_look_dir(), true)
 | 
									node.param2 = core.dir_to_facedir(placer:get_look_dir(), true)
 | 
				
			||||||
				minetest.set_node(pos, node)
 | 
									core.set_node(pos, node)
 | 
				
			||||||
				minetest.get_meta(pos):set_string("owner", placer:get_player_name())
 | 
									core.get_meta(pos):set_string("owner", placer:get_player_name())
 | 
				
			||||||
			end,
 | 
								end,
 | 
				
			||||||
			after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
								after_dig_node = function(pos, oldnode, oldmetadata, digger)
 | 
				
			||||||
				for _,stack in ipairs(oldmetadata.inventory[def.wield_inv.name] or {}) do
 | 
									for _,stack in ipairs(oldmetadata.inventory[def.wield_inv.name] or {}) do
 | 
				
			||||||
					if not stack:is_empty() then
 | 
										if not stack:is_empty() then
 | 
				
			||||||
						minetest.add_item(pos, stack)
 | 
											core.add_item(pos, stack)
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
				pipeworks.scan_for_tube_objects(pos)
 | 
									pipeworks.scan_for_tube_objects(pos)
 | 
				
			||||||
@@ -219,7 +219,7 @@ function pipeworks.register_wielder(def)
 | 
				
			|||||||
				if not fields.channel or not pipeworks.may_configure(pos, sender) then
 | 
									if not fields.channel or not pipeworks.may_configure(pos, sender) then
 | 
				
			||||||
					return
 | 
										return
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
				minetest.get_meta(pos):set_string("channel", fields.channel)
 | 
									core.get_meta(pos):set_string("channel", fields.channel)
 | 
				
			||||||
			end,
 | 
								end,
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
@@ -249,22 +249,22 @@ if pipeworks.enable_node_breaker then
 | 
				
			|||||||
		action = function(fakeplayer, pointed)
 | 
							action = function(fakeplayer, pointed)
 | 
				
			||||||
			local stack = fakeplayer:get_wielded_item()
 | 
								local stack = fakeplayer:get_wielded_item()
 | 
				
			||||||
			local old_stack = ItemStack(stack)
 | 
								local old_stack = ItemStack(stack)
 | 
				
			||||||
			local item_def = minetest.registered_items[stack:get_name()]
 | 
								local item_def = core.registered_items[stack:get_name()]
 | 
				
			||||||
			if item_def.on_use then
 | 
								if item_def.on_use then
 | 
				
			||||||
				stack = item_def.on_use(stack, fakeplayer, pointed) or stack
 | 
									stack = item_def.on_use(stack, fakeplayer, pointed) or stack
 | 
				
			||||||
				fakeplayer:set_wielded_item(stack)
 | 
									fakeplayer:set_wielded_item(stack)
 | 
				
			||||||
			else
 | 
								else
 | 
				
			||||||
				local node = minetest.get_node(pointed.under)
 | 
									local node = core.get_node(pointed.under)
 | 
				
			||||||
				local node_def = minetest.registered_nodes[node.name]
 | 
									local node_def = core.registered_nodes[node.name]
 | 
				
			||||||
				if not node_def or not node_def.on_dig then
 | 
									if not node_def or not node_def.on_dig then
 | 
				
			||||||
					return
 | 
										return
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
				-- Check if the tool can dig the node
 | 
									-- Check if the tool can dig the node
 | 
				
			||||||
				local tool = stack:get_tool_capabilities()
 | 
									local tool = stack:get_tool_capabilities()
 | 
				
			||||||
				if not minetest.get_dig_params(node_def.groups, tool).diggable then
 | 
									if not core.get_dig_params(node_def.groups, tool).diggable then
 | 
				
			||||||
					-- Try using hand if tool can't dig the node
 | 
										-- Try using hand if tool can't dig the node
 | 
				
			||||||
					local hand = ItemStack():get_tool_capabilities()
 | 
										local hand = ItemStack():get_tool_capabilities()
 | 
				
			||||||
					if not minetest.get_dig_params(node_def.groups, hand).diggable then
 | 
										if not core.get_dig_params(node_def.groups, hand).diggable then
 | 
				
			||||||
						return
 | 
											return
 | 
				
			||||||
					end
 | 
										end
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
@@ -274,7 +274,7 @@ if pipeworks.enable_node_breaker then
 | 
				
			|||||||
				end
 | 
									end
 | 
				
			||||||
				local sound = node_def.sounds and node_def.sounds.dug
 | 
									local sound = node_def.sounds and node_def.sounds.dug
 | 
				
			||||||
				if sound then
 | 
									if sound then
 | 
				
			||||||
					minetest.sound_play(sound, {pos = pointed.under}, true)
 | 
										core.sound_play(sound, {pos = pointed.under}, true)
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
				stack = fakeplayer:get_wielded_item()
 | 
									stack = fakeplayer:get_wielded_item()
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
@@ -291,12 +291,12 @@ if pipeworks.enable_node_breaker then
 | 
				
			|||||||
			end
 | 
								end
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	minetest.register_alias("technic:nodebreaker_off", "pipeworks:nodebreaker_off")
 | 
						core.register_alias("technic:nodebreaker_off", "pipeworks:nodebreaker_off")
 | 
				
			||||||
	minetest.register_alias("technic:nodebreaker_on", "pipeworks:nodebreaker_on")
 | 
						core.register_alias("technic:nodebreaker_on", "pipeworks:nodebreaker_on")
 | 
				
			||||||
	minetest.register_alias("technic:node_breaker_off", "pipeworks:nodebreaker_off")
 | 
						core.register_alias("technic:node_breaker_off", "pipeworks:nodebreaker_off")
 | 
				
			||||||
	minetest.register_alias("technic:node_breaker_on", "pipeworks:nodebreaker_on")
 | 
						core.register_alias("technic:node_breaker_on", "pipeworks:nodebreaker_on")
 | 
				
			||||||
	minetest.register_alias("auto_tree_tap:off", "pipeworks:nodebreaker_off")
 | 
						core.register_alias("auto_tree_tap:off", "pipeworks:nodebreaker_off")
 | 
				
			||||||
	minetest.register_alias("auto_tree_tap:on", "pipeworks:nodebreaker_on")
 | 
						core.register_alias("auto_tree_tap:on", "pipeworks:nodebreaker_on")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_deployer then
 | 
					if pipeworks.enable_deployer then
 | 
				
			||||||
@@ -308,29 +308,29 @@ if pipeworks.enable_deployer then
 | 
				
			|||||||
		wield_inv = {name = "main", width = 3, height = 3},
 | 
							wield_inv = {name = "main", width = 3, height = 3},
 | 
				
			||||||
		action = function(fakeplayer, pointed)
 | 
							action = function(fakeplayer, pointed)
 | 
				
			||||||
			local stack = fakeplayer:get_wielded_item()
 | 
								local stack = fakeplayer:get_wielded_item()
 | 
				
			||||||
			local def = minetest.registered_items[stack:get_name()]
 | 
								local def = core.registered_items[stack:get_name()]
 | 
				
			||||||
			if def and def.on_place then
 | 
								if def and def.on_place then
 | 
				
			||||||
				local new_stack, placed_pos = def.on_place(stack, fakeplayer, pointed)
 | 
									local new_stack, placed_pos = def.on_place(stack, fakeplayer, pointed)
 | 
				
			||||||
				fakeplayer:set_wielded_item(new_stack or stack)
 | 
									fakeplayer:set_wielded_item(new_stack or stack)
 | 
				
			||||||
				-- minetest.item_place_node doesn't play sound to the placer
 | 
									-- core.item_place_node doesn't play sound to the placer
 | 
				
			||||||
				local sound = placed_pos and def.sounds and def.sounds.place
 | 
									local sound = placed_pos and def.sounds and def.sounds.place
 | 
				
			||||||
				local name = fakeplayer:get_player_name()
 | 
									local name = fakeplayer:get_player_name()
 | 
				
			||||||
				if sound and name ~= "" then
 | 
									if sound and name ~= "" then
 | 
				
			||||||
					minetest.sound_play(sound, {pos = placed_pos, to_player = name}, true)
 | 
										core.sound_play(sound, {pos = placed_pos, to_player = name}, true)
 | 
				
			||||||
				end
 | 
									end
 | 
				
			||||||
			end
 | 
								end
 | 
				
			||||||
		end,
 | 
							end,
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	minetest.register_alias("technic:deployer_off", "pipeworks:deployer_off")
 | 
						core.register_alias("technic:deployer_off", "pipeworks:deployer_off")
 | 
				
			||||||
	minetest.register_alias("technic:deployer_on", "pipeworks:deployer_on")
 | 
						core.register_alias("technic:deployer_on", "pipeworks:deployer_on")
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if pipeworks.enable_dispenser then
 | 
					if pipeworks.enable_dispenser then
 | 
				
			||||||
	-- Override minetest.item_drop to negate its hardcoded offset
 | 
						-- Override core.item_drop to negate its hardcoded offset
 | 
				
			||||||
	-- when the dropper is a fake player.
 | 
						-- when the dropper is a fake player.
 | 
				
			||||||
	local item_drop = minetest.item_drop
 | 
						local item_drop = core.item_drop
 | 
				
			||||||
	-- luacheck: ignore 122
 | 
						-- luacheck: ignore 122
 | 
				
			||||||
	function minetest.item_drop(stack, dropper, pos)
 | 
						function core.item_drop(stack, dropper, pos)
 | 
				
			||||||
		if dropper and dropper.is_fake_player then
 | 
							if dropper and dropper.is_fake_player then
 | 
				
			||||||
			pos = vector.new(pos.x, pos.y - 1.2, pos.z)
 | 
								pos = vector.new(pos.x, pos.y - 1.2, pos.z)
 | 
				
			||||||
		end
 | 
							end
 | 
				
			||||||
@@ -344,7 +344,7 @@ if pipeworks.enable_dispenser then
 | 
				
			|||||||
		wield_inv = {name = "main", width = 3, height = 3},
 | 
							wield_inv = {name = "main", width = 3, height = 3},
 | 
				
			||||||
		action = function(fakeplayer)
 | 
							action = function(fakeplayer)
 | 
				
			||||||
			local stack = fakeplayer:get_wielded_item()
 | 
								local stack = fakeplayer:get_wielded_item()
 | 
				
			||||||
			local def = minetest.registered_items[stack:get_name()]
 | 
								local def = core.registered_items[stack:get_name()]
 | 
				
			||||||
			if def and def.on_drop then
 | 
								if def and def.on_drop then
 | 
				
			||||||
				local pos = fakeplayer:get_pos()
 | 
									local pos = fakeplayer:get_pos()
 | 
				
			||||||
				fakeplayer:set_wielded_item(def.on_drop(stack, fakeplayer, pos) or stack)
 | 
									fakeplayer:set_wielded_item(def.on_drop(stack, fakeplayer, pos) or stack)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user