diff options
| -rw-r--r-- | technic/legacy.lua | 2 | ||||
| -rw-r--r-- | technic/machines/LV/extractor.lua | 167 | ||||
| -rw-r--r-- | technic/machines/register/extractor.lua | 154 | ||||
| -rw-r--r-- | technic/machines/register/extractor_recipes.lua | 77 | ||||
| -rw-r--r-- | technic/machines/register/init.lua | 2 | ||||
| -rw-r--r-- | technic/textures/technic_lv_extractor_bottom.png | bin | 0 -> 738 bytes | |||
| -rw-r--r-- | technic/textures/technic_lv_extractor_front.png | bin | 0 -> 745 bytes | |||
| -rw-r--r-- | technic/textures/technic_lv_extractor_front_active.png | bin | 0 -> 770 bytes | |||
| -rw-r--r-- | technic/textures/technic_lv_extractor_side.png | bin | 0 -> 683 bytes | |||
| -rw-r--r-- | technic/textures/technic_lv_extractor_top.png | bin | 0 -> 544 bytes | 
10 files changed, 238 insertions, 164 deletions
| diff --git a/technic/legacy.lua b/technic/legacy.lua index bc6fd9c..f1ecf67 100644 --- a/technic/legacy.lua +++ b/technic/legacy.lua @@ -17,6 +17,8 @@ technic.legacy_nodenames = {  	["technic:electric_furnace_active"] = "technic:lv_electric_furnace_active",  	["technic:grinder"]        = "technic:lv_grinder",  	["technic:grinder_active"] = "technic:lv_grinder_active", +	["technic:extractor"]        = "technic:lv_extractor", +	["technic:extractor_active"] = "technic:lv_extractor_active",  	["technic:hv_battery_box"] = "technic:hv_battery_box0",  	["technic:hv_cable"] = "technic:hv_cable0",  	["technic:lv_cable"] = "technic:lv_cable0", diff --git a/technic/machines/LV/extractor.lua b/technic/machines/LV/extractor.lua index 72d2ce7..df1ca2e 100644 --- a/technic/machines/LV/extractor.lua +++ b/technic/machines/LV/extractor.lua @@ -1,57 +1,8 @@ -technic.extractor_recipes ={} +minetest.register_alias("extractor", "technic:lv_extractor") -local S = technic.getter - -if unified_inventory and unified_inventory.register_craft_type then -	unified_inventory.register_craft_type("extracting", { -		description = S("Extracting"), -		height = 1, -		width = 1, -	}) -end - -technic.register_extractor_recipe = function(src, src_count, dst, dst_count) -	technic.extractor_recipes[src] = {src_count = src_count, dst_name = dst, dst_count = dst_count} -	if unified_inventory then -		unified_inventory.register_craft({ -			type = "extracting", -			output = dst.." "..dst_count, -			items = {src.." "..src_count}, -			width = 0, -		}) -	end -end - --- Receive an ItemStack of result by an ItemStack input -technic.get_extractor_recipe = function(item) -	if technic.extractor_recipes[item.name] and -	   item.count >= technic.extractor_recipes[item.name].src_count then -		return technic.extractor_recipes[item.name] -	else -		return nil -	end -end - - - -technic.register_extractor_recipe("technic:coal_dust",        1,          "dye:black",      2) -technic.register_extractor_recipe("default:cactus",           1,          "dye:green",      2) -technic.register_extractor_recipe("default:dry_shrub",        1,          "dye:brown",      2) -technic.register_extractor_recipe("flowers:geranium",         1,          "dye:blue",       2) -technic.register_extractor_recipe("flowers:dandelion_white",  1,          "dye:white",      2) -technic.register_extractor_recipe("flowers:dandelion_yellow", 1,          "dye:yellow",     2) -technic.register_extractor_recipe("flowers:tulip",            1,          "dye:orange",     2) -technic.register_extractor_recipe("flowers:rose",             1,          "dye:red",        2) -technic.register_extractor_recipe("flowers:viola",            1,          "dye:violet",     2) -technic.register_extractor_recipe("technic:raw_latex",        1,          "technic:rubber", 3) -technic.register_extractor_recipe("moretrees:rubber_tree_trunk_empty", 1, "technic:rubber", 1) -technic.register_extractor_recipe("moretrees:rubber_tree_trunk",       1, "technic:rubber", 1) -technic.register_extractor_recipe("technic:uranium",          5,          "technic:enriched_uranium", 1) - -minetest.register_alias("extractor", "technic:extractor")  minetest.register_craft({ -	output = 'technic:extractor', +	output = 'technic:lv_extractor',  	recipe = {  		{'technic:treetap', 'technic:motor',     'technic:treetap'},  		{'technic:treetap', 'technic:lv_cable0', 'technic:treetap'}, @@ -59,116 +10,4 @@ minetest.register_craft({  	}  }) -local extractor_formspec = -   "invsize[8,9;]".. -   "label[0,0;"..S("%s Extractor"):format("LV").."]".. -   "list[current_name;src;3,1;1,1;]".. -   "list[current_name;dst;5,1;2,2;]".. -   "list[current_player;main;0,5;8,4;]" - -minetest.register_node("technic:extractor", { -	description = S("%s Extractor"):format("LV"), -	tiles = {"technic_lv_grinder_top.png",  "technic_lv_grinder_bottom.png", "technic_lv_grinder_side.png", -	         "technic_lv_grinder_side.png", "technic_lv_grinder_side.png",   "technic_lv_grinder_front.png"}, -	paramtype2 = "facedir", -	groups = {cracky=2}, -	legacy_facedir_simple = true, -	sounds = default.node_sound_wood_defaults(), -	on_construct = function(pos) -		local meta = minetest.get_meta(pos) -		meta:set_string("infotext", S("%s Extractor"):format("LV")) -		meta:set_string("formspec", extractor_formspec) -		local inv = meta:get_inventory() -		inv:set_size("src", 1) -		inv:set_size("dst", 4) -	end, -	can_dig = technic.machine_can_dig, -	allow_metadata_inventory_put = technic.machine_inventory_put, -	allow_metadata_inventory_take = technic.machine_inventory_take, -	allow_metadata_inventory_move = technic.machine_inventory_move, -}) - -minetest.register_node("technic:extractor_active", { -	description = S("%s Extractor"):format("LV"), -	tiles = {"technic_lv_grinder_top.png",  "technic_lv_grinder_bottom.png", -	         "technic_lv_grinder_side.png", "technic_lv_grinder_side.png", -	         "technic_lv_grinder_side.png", "technic_lv_grinder_front_active.png"}, -	paramtype2 = "facedir", -	drop = "technic:extractor", -	groups = {cracky=2, not_in_creative_inventory=1}, -	legacy_facedir_simple = true, -	sounds = default.node_sound_wood_defaults(), -	can_dig = technic.machine_can_dig, -	allow_metadata_inventory_put = technic.machine_inventory_put, -	allow_metadata_inventory_take = technic.machine_inventory_take, -	allow_metadata_inventory_move = technic.machine_inventory_move, -}) - -minetest.register_abm({ -	nodenames = {"technic:extractor", "technic:extractor_active"}, -	interval = 1, -	chance   = 1, -	action = function(pos, node, active_object_count, active_object_count_wider) -		-- The machine will automatically shut down if disconnected from power in some fashion. -		local meta     = minetest.get_meta(pos) -		local inv      = meta:get_inventory() -		local srcstack = inv:get_stack("src", 1) -		local eu_input = meta:get_int("LV_EU_input") - -		-- Machine information -		local machine_name = S("%s Extractor"):format("LV") -		local machine_node = "technic:extractor" -		local demand       = 300 - -		-- Setup meta data if it does not exist. -		if not eu_input then -			meta:set_int("LV_EU_demand", demand) -			meta:set_int("LV_EU_input", 0) -			return -		end - -		-- Power off automatically if no longer connected to a switching station -		technic.switching_station_timeout_count(pos, "LV") - -		local src_item = nil -		if srcstack then -			src_item = srcstack:to_table() -		end -		if src_item then -			recipe = technic.get_extractor_recipe(src_item) -		end -		if recipe then -			result = {name=recipe.dst_name, count=recipe.dst_count} -		end  -		if inv:is_empty("src") or (not recipe) or (not result) or -		   (not inv:room_for_item("dst", result)) then -			technic.swap_node(pos, machine_node) -			meta:set_string("infotext", S("%s Idle"):format(machine_name)) -			meta:set_int("LV_EU_demand", 0) -			return -		end - -		if eu_input < demand then -			-- unpowered - go idle -			technic.swap_node(pos, machine_node) -			meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) -		elseif eu_input >= demand then -			-- Powered -			technic.swap_node(pos, machine_node.."_active") -			meta:set_string("infotext", S("%s Active"):format(machine_name)) - -			meta:set_int("src_time", meta:get_int("src_time") + 1) -			if meta:get_int("src_time") >= 4 then -- 4 ticks per output -				meta:set_int("src_time", 0) -				srcstack:take_item(recipe.src_count) -				inv:set_stack("src", 1, srcstack) -				inv:add_item("dst", result) -			end -		end -		meta:set_int("LV_EU_demand", demand) -	end -}) - -technic.register_machine("LV", "technic:extractor",        technic.receiver) -technic.register_machine("LV", "technic:extractor_active", technic.receiver) - +technic.register_extractor({tier = "LV", demand = {300}, speed = 1}) diff --git a/technic/machines/register/extractor.lua b/technic/machines/register/extractor.lua new file mode 100644 index 0000000..e79d32c --- /dev/null +++ b/technic/machines/register/extractor.lua @@ -0,0 +1,154 @@ + +local S = technic.getter + +local extractor_formspec = +   "invsize[8,9;]".. +   "label[0,0;"..S("%s Extractor"):format("LV").."]".. +   "list[current_name;src;3,1;1,1;]".. +   "list[current_name;dst;5,1;2,2;]".. +   "list[current_player;main;0,5;8,4;]" + +function technic.register_extractor(data) +	local tier = data.tier +	local ltier = string.lower(tier) + +	local groups = {cracky = 2} +	local active_groups = {cracky = 2, not_in_creative_inventory = 1} +	if data.tube then +		groups.tubedevice = 1 +		groups.tubedevice_receiver = 1 +		active_groups.tubedevice = 1 +		active_groups.tubedevice_receiver = 1 +	end + + +	local formspec = +		"invsize[8,9;]".. +		"list[current_name;src;3,1;1,1;]".. +		"list[current_name;dst;5,1;2,2;]".. +		"list[current_player;main;0,5;8,4;]".. +		"label[0,0;"..S("%s Extractor"):format(tier).."]" +	 +	if data.upgrade then +		formspec = formspec.. +			"list[current_name;upgrade1;1,4;1,1;]".. +			"list[current_name;upgrade2;2,4;1,1;]".. +			"label[1,5;"..S("Upgrade Slots").."]" +	end + +	minetest.register_node("technic:"..ltier.."_extractor", { +		description = S("%s Extractor"):format(tier), +		tiles = {"technic_"..ltier.."_extractor_top.png",  "technic_"..ltier.."_extractor_bottom.png", +			 "technic_"..ltier.."_extractor_side.png", "technic_"..ltier.."_extractor_side.png", +			 "technic_"..ltier.."_extractor_side.png", "technic_"..ltier.."_extractor_front.png"}, +		paramtype2 = "facedir", +		groups = groups, +		tube = data.tube and tube or nil, +		legacy_facedir_simple = true, +		sounds = default.node_sound_wood_defaults(), +		on_construct = function(pos) +			local node = minetest.get_node(pos) +			local meta = minetest.get_meta(pos) +			meta:set_string("infotext", S("%s Extractor"):format(tier)) +			meta:set_int("tube_time",  0) +			meta:set_string("formspec", formspec) +			local inv = meta:get_inventory() +			inv:set_size("src", 1) +			inv:set_size("dst", 4) +			inv:set_size("upgrade1", 1) +			inv:set_size("upgrade2", 1) +		end, +		can_dig = technic.machine_can_dig, +		allow_metadata_inventory_put = technic.machine_inventory_put, +		allow_metadata_inventory_take = technic.machine_inventory_take, +		allow_metadata_inventory_move = technic.machine_inventory_move, +	}) + +	minetest.register_node("technic:"..ltier.."_extractor_active",{ +		description = S("%s Grinder"):format(tier), +		tiles = {"technic_"..ltier.."_extractor_top.png",  "technic_"..ltier.."_extractor_bottom.png", +			 "technic_"..ltier.."_extractor_side.png", "technic_"..ltier.."_extractor_side.png", +			 "technic_"..ltier.."_extractor_side.png", "technic_"..ltier.."_extractor_front_active.png"}, +		paramtype2 = "facedir", +		drop = "technic:"..ltier.."_extractor", +		groups = active_groups, +		legacy_facedir_simple = true, +		sounds = default.node_sound_wood_defaults(), +		tube = data.tube and tube or nil, +		can_dig = technic.machine_can_dig, +		allow_metadata_inventory_put = technic.machine_inventory_put, +		allow_metadata_inventory_take = technic.machine_inventory_take, +		allow_metadata_inventory_move = technic.machine_inventory_move, +	}) + +	minetest.register_abm({ +		nodenames = {"technic:"..ltier.."_extractor","technic:"..ltier.."_extractor_active"}, +		interval = 1, +		chance   = 1, +		action = function(pos, node, active_object_count, active_object_count_wider) +			local meta     = minetest.get_meta(pos) +			local inv      = meta:get_inventory() +			local eu_input = meta:get_int(tier.."_EU_input") + +			local machine_name   = S("%s Extractor"):format(tier) +			local machine_node   = "technic:"..ltier.."_extractor" +			local machine_demand = data.demand + +			-- Setup meta data if it does not exist. +			if not eu_input then +				meta:set_int(tier.."_EU_demand", machine_demand[1]) +				meta:set_int(tier.."_EU_input", 0) +				return +			end +		 +			-- Power off automatically if no longer connected to a switching station +			technic.switching_station_timeout_count(pos, tier) + +			local EU_upgrade, tube_upgrade = 0, 0 +			if data.upgrade then +				EU_upgrade, tube_upgrade = technic.handle_machine_upgrades(meta) +			end +			if data.tube then +				technic.handle_machine_pipeworks(pos, tube_upgrade) +			end + +			local srcstack = inv:get_stack("src", 1) +			local result = technic.get_extractor_recipe(inv:get_stack("src", 1)) + +			if not result then +				technic.swap_node(pos, machine_node) +				meta:set_string("infotext", S("%s Idle"):format(machine_name)) +				meta:set_int(tier.."_EU_demand", 0) +				return +			end +		 +			if eu_input < machine_demand[EU_upgrade+1] then +				-- Unpowered - go idle +				technic.swap_node(pos, machine_node) +				meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) +			elseif eu_input >= machine_demand[EU_upgrade+1] then +				-- Powered	 +				technic.swap_node(pos, machine_node.."_active") +				meta:set_string("infotext", S("%s Active"):format(machine_name)) + +				meta:set_int("src_time", meta:get_int("src_time") + 1) +				if meta:get_int("src_time") >= result.time / data.speed then +					meta:set_int("src_time", 0) +					local result_stack = ItemStack(result.output) +					if inv:room_for_item("dst", result_stack) then +						srcstack = inv:get_stack("src", 1) +						srcstack:take_item(ItemStack(result.input):get_count()) +						inv:set_stack("src", 1, srcstack) +						inv:add_item("dst", result_stack) +					end +				end +			end +			meta:set_int(tier.."_EU_demand", machine_demand[EU_upgrade+1]) +		end +	}) + +	technic.register_machine(tier, "technic:"..ltier.."_extractor",        technic.receiver) +	technic.register_machine(tier, "technic:"..ltier.."_extractor_active", technic.receiver) + +end -- End registration + diff --git a/technic/machines/register/extractor_recipes.lua b/technic/machines/register/extractor_recipes.lua new file mode 100644 index 0000000..2d19130 --- /dev/null +++ b/technic/machines/register/extractor_recipes.lua @@ -0,0 +1,77 @@ + +local S = technic.getter + +if unified_inventory and unified_inventory.register_craft_type then +	unified_inventory.register_craft_type("extracting", { +		description = S("Extracting"), +		height = 1, +		width = 1, +	}) +end + +technic.extractor_recipes = {} + +function technic.register_extractor_recipe(data) +	data.time = data.time or 4 +	local src = ItemStack(data.input):get_name() +	technic.extractor_recipes[src] = data +	if unified_inventory then +		unified_inventory.register_craft({ +			type = "extracting", +			output = data.output, +			items = {data.input}, +			width = 0, +		}) +	end +end + +-- Receive an ItemStack of result by an ItemStack input +function technic.get_extractor_recipe(item) +	if technic.extractor_recipes[item:get_name()] and +	   item:get_count() >= ItemStack(technic.extractor_recipes[item:get_name()].input):get_count() then +		return technic.extractor_recipes[item:get_name()] +	else +		return nil +	end +end + +minetest.after(0.01, function () +	for ingredient, recipe in pairs(technic.extractor_recipes) do +		ingredient = minetest.registered_aliases[ingredient] +		while ingredient do +			technic.grinder_recipes[ingredient] = recipe +			ingredient = minetest.registered_aliases[ingredient] +		end +	end +end) + +-- Receive an ItemStack of result by an ItemStack input +function technic.get_grinder_recipe(itemstack) +	return technic.grinder_recipes[itemstack:get_name()] +end + +local recipes = { +	-- Dyes +	{"technic:coal_dust",                 "dye:black 2"}, +	{"default:cactus",                    "dye:green 2"}, +	{"default:dry_shrub",                 "dye:brown 2"}, +	{"flowers:geranium",                  "dye:blue 2"}, +	{"flowers:dandelion_white",           "dye:white 2"}, +	{"flowers:dandelion_yellow",          "dye:yellow 2"}, +	{"flowers:tulip",                     "dye:orange 2"}, +	{"flowers:rose",                      "dye:red 2"}, +	{"flowers:viola",                     "dye:violet 2"}, +	 +	-- Rubber +	{"technic:raw_latex",                 "technic:rubber 3"}, +	{"moretrees:rubber_tree_trunk_empty", "technic:rubber"}, +	{"moretrees:rubber_tree_trunk",       "technic:rubber"}, +	 +	-- Other +	{"technic:uranium 5",                 "technic:enriched_uranium"}, +} + +for _, data in pairs(recipes) do +	technic.register_extractor_recipe({input = data[1], output = data[2]}) +end + diff --git a/technic/machines/register/init.lua b/technic/machines/register/init.lua index 673b265..a4435c2 100644 --- a/technic/machines/register/init.lua +++ b/technic/machines/register/init.lua @@ -7,6 +7,8 @@ dofile(path.."/common.lua")  dofile(path.."/electric_furnace.lua")  dofile(path.."/grinder.lua")  dofile(path.."/grinder_recipes.lua") +dofile(path.."/extractor.lua") +dofile(path.."/extractor_recipes.lua")  dofile(path.."/solar_array.lua")  dofile(path.."/generator.lua") diff --git a/technic/textures/technic_lv_extractor_bottom.png b/technic/textures/technic_lv_extractor_bottom.pngBinary files differ new file mode 100644 index 0000000..aecd719 --- /dev/null +++ b/technic/textures/technic_lv_extractor_bottom.png diff --git a/technic/textures/technic_lv_extractor_front.png b/technic/textures/technic_lv_extractor_front.pngBinary files differ new file mode 100644 index 0000000..1bd7e9a --- /dev/null +++ b/technic/textures/technic_lv_extractor_front.png diff --git a/technic/textures/technic_lv_extractor_front_active.png b/technic/textures/technic_lv_extractor_front_active.pngBinary files differ new file mode 100644 index 0000000..7f8b30a --- /dev/null +++ b/technic/textures/technic_lv_extractor_front_active.png diff --git a/technic/textures/technic_lv_extractor_side.png b/technic/textures/technic_lv_extractor_side.pngBinary files differ new file mode 100644 index 0000000..99d9486 --- /dev/null +++ b/technic/textures/technic_lv_extractor_side.png diff --git a/technic/textures/technic_lv_extractor_top.png b/technic/textures/technic_lv_extractor_top.pngBinary files differ new file mode 100644 index 0000000..e7d9ff9 --- /dev/null +++ b/technic/textures/technic_lv_extractor_top.png | 
