From f9b0906a82382af30475dc3cb040c4686d54bcf8 Mon Sep 17 00:00:00 2001 From: SmallJoker <mk939@ymail.com> Date: Wed, 08 Jun 2022 21:57:46 +0200 Subject: [PATCH] Switching station: Begin optimizations --- technic/machines/MV/wind_mill.lua | 83 ++++++++++++++++++++++------------------- 1 files changed, 44 insertions(+), 39 deletions(-) diff --git a/technic/machines/MV/wind_mill.lua b/technic/machines/MV/wind_mill.lua index 868a60e..1baf54c 100644 --- a/technic/machines/MV/wind_mill.lua +++ b/technic/machines/MV/wind_mill.lua @@ -13,9 +13,9 @@ minetest.register_craft({ output = 'technic:wind_mill', recipe = { - {'', 'technic:carbon_steel_ingot', ''}, - {'technic:carbon_steel_ingot', 'technic:motor', 'technic:carbon_steel_ingot'}, - {'', 'technic:carbon_steel_block', ''}, + {'', 'basic_materials:motor', ''}, + {'technic:carbon_steel_ingot', 'technic:carbon_steel_block', 'technic:carbon_steel_ingot'}, + {'', 'technic:mv_cable', ''}, } }) @@ -29,11 +29,49 @@ paramtype = "light", }) +local function check_wind_mill(pos) + if pos.y < 30 then + return false + end + pos = {x=pos.x, y=pos.y, z=pos.z} + for i = 1, 20 do + pos.y = pos.y - 1 + local node = minetest.get_node_or_nil(pos) + if not node then + -- we reached CONTENT_IGNORE, we can assume, that nothing changed + -- as the user will have to load the block to change it + return + end + if node.name ~= "technic:wind_mill_frame" then + return false + end + end + return true +end + +local run = function(pos, node) + local meta = minetest.get_meta(pos) + local machine_name = S("Wind %s Generator"):format("MV") + + local check = check_wind_mill(pos) + if check == false then + meta:set_int("MV_EU_supply", 0) + meta:set_string("infotext", S("%s Improperly Placed"):format(machine_name)) + elseif check == true then + local power = math.min(pos.y * 100, 5000) + meta:set_int("MV_EU_supply", power) + meta:set_string("infotext", S("@1 (@2)", machine_name, + technic.EU_string(power))) + end + -- check == nil: assume nothing has changed +end + minetest.register_node("technic:wind_mill", { description = S("Wind %s Generator"):format("MV"), tiles = {"technic_carbon_steel_block.png"}, paramtype2 = "facedir", - groups = {cracky=1}, + groups = {cracky=1, technic_machine=1, technic_mv=1}, + connect_sides = {"top", "bottom", "back", "left", "right"}, sounds = default.node_sound_stone_defaults(), drawtype = "nodebox", paramtype = "light", @@ -50,41 +88,8 @@ local meta = minetest.get_meta(pos) meta:set_string("infotext", S("Wind %s Generator"):format("MV")) meta:set_int("MV_EU_supply", 0) - end, -}) - -local function check_wind_mill(pos) - if pos.y < 30 then - return false - end - for i = 1, 20 do - local node = minetest.get_node({x=pos.x, y=pos.y-i, z=pos.z}) - if node.name ~= "technic:wind_mill_frame" then - return false - end - end - return true -end - -minetest.register_abm({ - nodenames = {"technic:wind_mill"}, - interval = 1, - chance = 1, - action = function(pos, node, active_object_count, active_object_count_wider) - local meta = minetest.get_meta(pos) - local machine_name = S("Wind %s Generator"):format("MV") - local power = math.min(pos.y * 100, 5000) - - if not check_wind_mill(pos) then - meta:set_int("MV_EU_supply", 0) - meta:set_string("infotext", S("%s Improperly Placed"):format(machine_name)) - return - else - meta:set_int("MV_EU_supply", power) - end - - meta:set_string("infotext", machine_name.." ("..power.."EU)") - end + end, + technic_run = run, }) technic.register_machine("MV", "technic:wind_mill", technic.producer) -- Gitblit v1.8.0