SmallJoker
2022-10-25 7d39136764c894cb4adc3f0726f1df5eb6a4926b
technic/machines/supply_converter.lua
@@ -120,7 +120,7 @@
      return
   end
   local remain = 0.9
   local efficiency = 0.9
   -- Machine information
   local machine_name  = S("Supply Converter")
   local meta          = minetest.get_meta(pos)
@@ -133,7 +133,6 @@
      enabled = enabled == "1"
   end
   enabled = enabled and (meta:get_int("mesecon_mode") == 0 or meta:get_int("mesecon_effect") ~= 0)
   local demand = enabled and meta:get_int("power") or 0
   local pos_up        = {x=pos.x, y=pos.y+1, z=pos.z}
   local pos_down      = {x=pos.x, y=pos.y-1, z=pos.z}
@@ -144,12 +143,36 @@
   local to   = technic.get_cable_tier(name_down)
   if from and to then
      local input = meta:get_int(from.."_EU_input")
      meta:set_int(from.."_EU_demand", demand)
      meta:set_int(from.."_EU_supply", 0)
      meta:set_int(to.."_EU_demand", 0)
      meta:set_int(to.."_EU_supply", input * remain)
      meta:set_string("infotext", S("@1 (@2 @3 -> @4 @5)", machine_name, technic.pretty_num(input), from, technic.pretty_num(input * remain), to))
      -- Get the "to" network switching station for EU demand calculation
      local network_hash = technic.cables[minetest.hash_node_position(pos_down)]
      local network = network_hash and minetest.get_position_from_hash(network_hash)
      local sw_pos = network and {x=network.x,y=network.y+1,z=network.z}
      local timeout = 0
      for tier in pairs(technic.machines) do
         -- Supply converter must be connected to a network
         timeout = math.max(meta:get_int(tier.."_EU_timeout"), timeout)
      end
      if timeout > 0 and sw_pos and minetest.get_node(sw_pos).name == "technic:switching_station" then
         local sw_meta = minetest.get_meta(sw_pos)
         local demand = 0
         if enabled then
            -- Reverse evaluate the required machine and round to a nice number
            demand = 100 * math.ceil((sw_meta:get_int("demand") / efficiency) / 100)
            -- Do not draw more than the limit
            demand = math.min(demand, meta:get_int("power"))
         end
         local input = meta:get_int(from.."_EU_input") -- actual input
         meta:set_int(from.."_EU_demand", demand) -- desired input
         meta:set_int(from.."_EU_supply", 0)
         meta:set_int(to.."_EU_demand", 0)
         meta:set_int(to.."_EU_supply", input * efficiency)
         meta:set_string("infotext", S("@1 (@2 @3 -> @4 @5)", machine_name,
            technic.EU_string(input), from,
            technic.EU_string(input * efficiency), to))
      else
         meta:set_string("infotext",S("%s Has No Network"):format(machine_name))
      end
   else
      meta:set_string("infotext", S("%s Has Bad Cabling"):format(machine_name))
      if to then
@@ -199,10 +222,11 @@
minetest.register_craft({
   output = 'technic:supply_converter 1',
   recipe = {
      {'technic:fine_gold_wire', 'technic:rubber',         'technic:doped_silicon_wafer'},
      {'basic_materials:gold_wire', 'technic:rubber',         'technic:doped_silicon_wafer'},
      {'technic:mv_transformer', 'technic:machine_casing', 'technic:lv_transformer'},
      {'technic:mv_cable',       'technic:rubber',         'technic:lv_cable'},
   }
   },
   replacements = { {"basic_materials:gold_wire", "basic_materials:empty_spool"}, },
})
for tier, machines in pairs(technic.machines) do