From c0a17396bf093360f266a693c860cfad0b7ebbfe Mon Sep 17 00:00:00 2001 From: Novatux Date: Wed, 2 Jul 2014 22:45:46 +0200 Subject: [PATCH] Add MV version of compressor too, remove infinite sand-producing compressor recipe. --- technic/legacy.lua | 2 + technic/machines/LV/compressor.lua | 158 +----------------- technic/machines/MV/compressor.lua | 12 ++ technic/machines/register/compressor.lua | 9 + .../machines/register/compressor_recipes.lua | 24 +++ technic/machines/register/init.lua | 2 + ...ack.png => technic_lv_compressor_back.png} | Bin ...m.png => technic_lv_compressor_bottom.png} | Bin ...nt.png => technic_lv_compressor_front.png} | Bin ...=> technic_lv_compressor_front_active.png} | Bin ...ide.png => technic_lv_compressor_side.png} | Bin ..._top.png => technic_lv_compressor_top.png} | Bin .../textures/technic_mv_compressor_back.png | Bin 0 -> 2893 bytes .../textures/technic_mv_compressor_bottom.png | Bin 0 -> 2865 bytes .../textures/technic_mv_compressor_front.png | Bin 0 -> 2714 bytes .../technic_mv_compressor_front_active.png | Bin 0 -> 2743 bytes .../textures/technic_mv_compressor_side.png | Bin 0 -> 2893 bytes .../textures/technic_mv_compressor_top.png | Bin 0 -> 2940 bytes 18 files changed, 52 insertions(+), 155 deletions(-) create mode 100644 technic/machines/MV/compressor.lua create mode 100644 technic/machines/register/compressor.lua create mode 100644 technic/machines/register/compressor_recipes.lua rename technic/textures/{technic_compressor_back.png => technic_lv_compressor_back.png} (100%) rename technic/textures/{technic_compressor_bottom.png => technic_lv_compressor_bottom.png} (100%) rename technic/textures/{technic_compressor_front.png => technic_lv_compressor_front.png} (100%) rename technic/textures/{technic_compressor_front_active.png => technic_lv_compressor_front_active.png} (100%) rename technic/textures/{technic_compressor_side.png => technic_lv_compressor_side.png} (100%) rename technic/textures/{technic_compressor_top.png => technic_lv_compressor_top.png} (100%) create mode 100644 technic/textures/technic_mv_compressor_back.png create mode 100644 technic/textures/technic_mv_compressor_bottom.png create mode 100644 technic/textures/technic_mv_compressor_front.png create mode 100644 technic/textures/technic_mv_compressor_front_active.png create mode 100644 technic/textures/technic_mv_compressor_side.png create mode 100644 technic/textures/technic_mv_compressor_top.png diff --git a/technic/legacy.lua b/technic/legacy.lua index f1ecf67..c835937 100644 --- a/technic/legacy.lua +++ b/technic/legacy.lua @@ -19,6 +19,8 @@ technic.legacy_nodenames = { ["technic:grinder_active"] = "technic:lv_grinder_active", ["technic:extractor"] = "technic:lv_extractor", ["technic:extractor_active"] = "technic:lv_extractor_active", + ["technic:compressor"] = "technic:lv_compressor", + ["technic:compressor_active"] = "technic:lv_compressor_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/compressor.lua b/technic/machines/LV/compressor.lua index 84aaac9..11bf16d 100644 --- a/technic/machines/LV/compressor.lua +++ b/technic/machines/LV/compressor.lua @@ -1,50 +1,8 @@ -technic.compressor_recipes = {} +minetest.register_alias("compressor", "technic:lv_compressor") -local S = technic.getter - -if unified_inventory and unified_inventory.register_craft_type then - unified_inventory.register_craft_type("compressing", { - description = S("Compressing"), - height = 1, - width = 1, - }) -end - -technic.register_compressor_recipe = function(src, src_count, dst, dst_count) - technic.compressor_recipes[src] = {src_count = src_count, dst_name = dst, dst_count = dst_count} - if unified_inventory then - unified_inventory.register_craft({ - type = "compressing", - output = dst.." "..dst_count, - items = {src.." "..src_count}, - width = 0, - }) - end -end - -technic.get_compressor_recipe = function(item) - if technic.compressor_recipes[item.name] and - item.count >= technic.compressor_recipes[item.name].src_count then - return technic.compressor_recipes[item.name] - else - return nil - end -end - -technic.register_compressor_recipe("default:snowblock", 1, "default:ice", 1) -technic.register_compressor_recipe("default:sand", 1, "default:sandstone", 1) -technic.register_compressor_recipe("default:desert_sand", 1, "default:desert_stone", 1) -technic.register_compressor_recipe("technic:mixed_metal_ingot", 1, "technic:composite_plate", 1) -technic.register_compressor_recipe("default:copper_ingot", 5, "technic:copper_plate", 1) -technic.register_compressor_recipe("technic:coal_dust", 4, "technic:graphite", 1) -technic.register_compressor_recipe("technic:carbon_cloth", 1, "technic:carbon_plate", 1) -technic.register_compressor_recipe("technic:enriched_uranium", 4, "technic:uranium_fuel", 1) - - -minetest.register_alias("compressor", "technic:compressor") minetest.register_craft({ - output = 'technic:compressor', + output = 'technic:lv_compressor', recipe = { {'default:stone', 'default:stone', 'default:stone'}, {'mesecons:piston', 'technic:motor', 'mesecons:piston'}, @@ -52,114 +10,4 @@ minetest.register_craft({ } }) -local compressor_formspec = - "invsize[8,9;]".. - "label[0,0;"..S("%s Compressor"):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:compressor", { - description = S("%s Compressor"):format("LV"), - tiles = {"technic_compressor_top.png", "technic_compressor_bottom.png", - "technic_compressor_side.png", "technic_compressor_side.png", - "technic_compressor_back.png", "technic_compressor_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 Compressor"):format("LV")) - meta:set_string("formspec", compressor_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:compressor_active", { - description = S("%s Compressor"):format("LV"), - tiles = {"technic_compressor_top.png", "technic_compressor_bottom.png", - "technic_compressor_side.png", "technic_compressor_side.png", - "technic_compressor_back.png", "technic_compressor_front_active.png"}, - paramtype2 = "facedir", - drop = "technic:compressor", - 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:compressor","technic:compressor_active"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local meta = minetest.get_meta(pos) - local eu_input = meta:get_int("LV_EU_input") - local machine_name = S("%s Compressor"):format("LV") - local machine_node = "technic:compressor" - 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 inv = meta:get_inventory() - local empty = inv:is_empty("src") - local srcstack = inv:get_stack("src", 1) - local src_item, recipe, result = nil, nil, nil - - if srcstack then - src_item = srcstack:to_table() - end - if src_item then - recipe = technic.get_compressor_recipe(src_item) - end - if recipe then - result = {name=recipe.dst_name, count=recipe.dst_count} - end - if empty 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) - meta:set_int("src_time", 0) - return - end - - if eu_input < demand then - technic.swap_node(pos, machine_node) - meta:set_string("infotext", S("%s Unpowered"):format(machine_name)) - elseif eu_input >= demand then - 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 - 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:compressor", technic.receiver) -technic.register_machine("LV", "technic:compressor_active", technic.receiver) - +technic.register_compressor({tier = "LV", demand = {300}, speed = 1}) diff --git a/technic/machines/MV/compressor.lua b/technic/machines/MV/compressor.lua new file mode 100644 index 0000000..5b36cc5 --- /dev/null +++ b/technic/machines/MV/compressor.lua @@ -0,0 +1,12 @@ +-- MV compressor + +minetest.register_craft({ + output = 'technic:mv_compressor', + recipe = { + {'technic:stainless_steel_ingot', 'technic:lv_compressor', 'technic:stainless_steel_ingot'}, + {'pipeworks:tube_1', 'technic:mv_transformer', 'pipeworks:tube_1'}, + {'technic:stainless_steel_ingot', 'technic:mv_cable0', 'technic:stainless_steel_ingot'}, + } +}) + +technic.register_compressor({tier = "MV", demand = {800, 600, 400}, speed = 2, upgrade = 1, tube = 1}) diff --git a/technic/machines/register/compressor.lua b/technic/machines/register/compressor.lua new file mode 100644 index 0000000..49830d7 --- /dev/null +++ b/technic/machines/register/compressor.lua @@ -0,0 +1,9 @@ + +local S = technic.getter + +function technic.register_compressor(data) + data.typename = "compressing" + data.machine_name = "compressor" + data.machine_desc = S("%s Compressor") + technic.register_base_machine(data) +end diff --git a/technic/machines/register/compressor_recipes.lua b/technic/machines/register/compressor_recipes.lua new file mode 100644 index 0000000..b6012df --- /dev/null +++ b/technic/machines/register/compressor_recipes.lua @@ -0,0 +1,24 @@ + +local S = technic.getter + +technic.register_recipe_type("compressing", S("Compressing")) + +function technic.register_compressor_recipe(data) + data.time = data.time or 4 + technic.register_recipe("compressing", data) +end + +local recipes = { + {"default:snowblock", "default:ice"}, + {"default:desert_sand", "default:desert_stone"}, + {"technic:mixed_metal_ingot", "technic:composite_plate"}, + {"default:copper_ingot 5", "technic:copper_plate"}, + {"technic:coal_dust 4", "technic:graphite"}, + {"technic:carbon_cloth", "technic:carbon_plate"}, + {"technic:enriched_uranium 4", "technic:uranium_fuel"}, +} + +for _, data in pairs(recipes) do + technic.register_compressor_recipe({input = data[1], output = data[2]}) +end + diff --git a/technic/machines/register/init.lua b/technic/machines/register/init.lua index f1518fe..be94e05 100644 --- a/technic/machines/register/init.lua +++ b/technic/machines/register/init.lua @@ -11,6 +11,8 @@ dofile(path.."/grinder.lua") dofile(path.."/grinder_recipes.lua") dofile(path.."/extractor.lua") dofile(path.."/extractor_recipes.lua") +dofile(path.."/compressor.lua") +dofile(path.."/compressor_recipes.lua") dofile(path.."/solar_array.lua") dofile(path.."/generator.lua") diff --git a/technic/textures/technic_compressor_back.png b/technic/textures/technic_lv_compressor_back.png similarity index 100% rename from technic/textures/technic_compressor_back.png rename to technic/textures/technic_lv_compressor_back.png diff --git a/technic/textures/technic_compressor_bottom.png b/technic/textures/technic_lv_compressor_bottom.png similarity index 100% rename from technic/textures/technic_compressor_bottom.png rename to technic/textures/technic_lv_compressor_bottom.png diff --git a/technic/textures/technic_compressor_front.png b/technic/textures/technic_lv_compressor_front.png similarity index 100% rename from technic/textures/technic_compressor_front.png rename to technic/textures/technic_lv_compressor_front.png diff --git a/technic/textures/technic_compressor_front_active.png b/technic/textures/technic_lv_compressor_front_active.png similarity index 100% rename from technic/textures/technic_compressor_front_active.png rename to technic/textures/technic_lv_compressor_front_active.png diff --git a/technic/textures/technic_compressor_side.png b/technic/textures/technic_lv_compressor_side.png similarity index 100% rename from technic/textures/technic_compressor_side.png rename to technic/textures/technic_lv_compressor_side.png diff --git a/technic/textures/technic_compressor_top.png b/technic/textures/technic_lv_compressor_top.png similarity index 100% rename from technic/textures/technic_compressor_top.png rename to technic/textures/technic_lv_compressor_top.png diff --git a/technic/textures/technic_mv_compressor_back.png b/technic/textures/technic_mv_compressor_back.png new file mode 100644 index 0000000000000000000000000000000000000000..11286e3b9dafc9084829bf23cd55fa6b719a894e GIT binary patch literal 2893 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 P00000NkvXXu0mjf9qxFS literal 0 HcmV?d00001 diff --git a/technic/textures/technic_mv_compressor_front.png b/technic/textures/technic_mv_compressor_front.png new file mode 100644 index 0000000000000000000000000000000000000000..007d6de590c27e9c68f2ece23e736f3ab94bcd07 GIT binary patch literal 2714 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 literal 0 HcmV?d00001 diff --git a/technic/textures/technic_mv_compressor_side.png b/technic/textures/technic_mv_compressor_side.png new file mode 100644 index 0000000000000000000000000000000000000000..87acda66d364a3a9ecd92d94b2f70ffba75ccb75 GIT binary patch literal 2893 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 moKosv?t595$fl)iEB+6~zWwRDu3`5800002| literal 0 HcmV?d00001 -- 2.30.2