-- see elepower_papi >> external_nodes_items.lua for explanation -- shorten table ref local epr = ele.external.ref local CAPACITY = 8000 minetest.register_node("elepower_machines:accumulator", { description = "Water Accumulator", groups = {fluid_container = 1, oddly_breakable_by_hand = 1, cracky = 1}, tiles = { "elepower_machine_top.png^elepower_power_port.png", "elepower_machine_base.png", "elepower_machine_side.png^elepower_machine_accumulator.png", "elepower_machine_side.png^elepower_machine_accumulator.png", "elepower_machine_side.png^elepower_machine_accumulator.png", "elepower_machine_side.png^elepower_machine_accumulator.png", }, fluid_buffers = { water = { capacity = CAPACITY, drainable = true, } }, on_construct = function ( pos ) local meta = minetest.get_meta(pos) meta:set_string("water_fluid", epr.water_source) end }) minetest.register_node("elepower_machines:accumulator_heavy", { description = "Water Accumulator (Heavy Water)", groups = {fluid_container = 1, oddly_breakable_by_hand = 1, cracky = 1, not_in_creative_inventory = 1}, tiles = { "elepower_machine_top.png^elepower_power_port.png", "elepower_machine_base.png", "elepower_machine_side.png^elepower_machine_accumulator.png", "elepower_machine_side.png^elepower_machine_accumulator.png", "elepower_machine_side.png^elepower_machine_accumulator.png", "elepower_machine_side.png^elepower_machine_accumulator.png", }, drop = { max_items = 2, items = { { items = {"elepower_machines:accumulator", "elepower_machines:heavy_filter"}, rarity = 1 } } }, fluid_buffers = { water = { capacity = CAPACITY, drainable = true, } }, on_construct = function ( pos ) local meta = minetest.get_meta(pos) meta:set_string("water_fluid", "elepower_nuclear:heavy_water_source") end, _heavy = true }) minetest.register_abm({ nodenames = {"elepower_machines:accumulator", "elepower_machines:accumulator_heavy"}, label = "elefluidAccumulator", interval = 2, chance = 1/5, action = function(pos, node, active_object_count, active_object_count_wider) local meta = minetest.get_meta(pos) local buffer = fluid_lib.get_buffer_data(pos, "water") if not buffer or buffer.amount == buffer.capacity then return end local positions = { {x=pos.x+1,y=pos.y,z=pos.z}, {x=pos.x-1,y=pos.y,z=pos.z}, {x=pos.x, y=pos.y,z=pos.z+1}, {x=pos.x, y=pos.y,z=pos.z-1}, } local amount = 0 for _,fpos in pairs(positions) do local node = minetest.get_node(fpos) if node.name == epr.water_source then amount = amount + 1000 end end if amount == 0 then meta:set_string("infotext", "Submerge me in water!") return end local ndef = minetest.registered_nodes[node.name] local src = epr.water_source if ndef and ndef._heavy then src = "elepower_nuclear:heavy_water_source" if amount > 1000 then amount = math.floor(amount / 8) end end local give = 0 if buffer.amount + amount > buffer.capacity then give = buffer.capacity - buffer.amount else give = amount end buffer.amount = buffer.amount + give meta:set_int("water_fluid_storage", buffer.amount) meta:set_string("water_fluid", src) meta:set_string("infotext", fluid_lib.buffer_to_string(buffer)) end }) fluid_lib.register_node("elepower_machines:accumulator") fluid_lib.register_node("elepower_machines:accumulator_heavy")