-- IndustrialTest -- Copyright (C) 2023 mrkubax10 -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . local S=minetest.get_translator("industrialtest") local function registerCable(name,displayName,material,size,flow) local definition={ description=S(displayName.." Cable"), inventory_image="industrialtest_"..name.."_cable_inv.png", tiles={"industrialtest_"..name.."_cable.png"}, wield_image="industrialtest_"..name.."_cable_inv.png", paramtype="light", sunlight_propagates=true, drawtype="nodebox", node_box={ type="connected", fixed={ -size, -size, -size, size, size, size }, connect_top={ -size, -size, -size, size, 0.5, size }, connect_bottom={ -size, -0.5, -size, size, size, size }, connect_front={ -size, -size, -0.5, size, size, size, }, connect_left={ -0.5, -size, -size, size, size, size }, connect_back={ -size, -size, -size, size, size, 0.5 }, connect_right={ -size, -size, -size, 0.5, size, size } }, connects_to={ "group:_industrialtest_hasPowerInput", "group:_industrialtest_hasPowerOutput" }, on_construct=function(pos) local meta=minetest.get_meta(pos) industrialtest.api.addPowerStorage(meta,flow,flow,"aaaaaa") end, on_timer=function(pos) local meta=minetest.get_meta(pos) local afterFlow,transferred=industrialtest.api.powerFlow(pos) meta:set_string("industrialtest.ioConfig","aaaaaa") if not industrialtest.api.isFullyCharged(meta) then industrialtest.api.triggerNeighbours(pos) end if transferred then local node=minetest.get_node(pos) local def=minetest.registered_nodes[node.name] if def._industrialtest_electrocution then local players=minetest.get_connected_players() for _,value in ipairs(players) do -- Note: don't use vector.distance here because we don't need actual distance between two -- vectors to determine if player is within range if we use squared range local playerPos=value:get_pos() local dx=pos.x-playerPos.x local dy=pos.y-playerPos.y local dz=pos.z-playerPos.z local dist=math.pow(dx,2)+math.pow(dy,2)+math.pow(dz,2) if dist<=0.60 then local hp=value:get_hp() value:set_hp(hp-0.5,"Electrocution") end end end end return (afterFlow and meta:get_int("industrialtest.powerAmount")>0) end, _industrialtest_electrocution=true, _industrialtest_onPowerFlow=function(pos,side) local meta=minetest.get_meta(pos) industrialtest.api.changeIoConfig(meta,side,"i") minetest.get_node_timer(pos):start(industrialtest.updateDelay) end, } if industrialtest.mtgAvailable then definition.groups={ cracky=1, level=1, oddly_breakable_by_hand=1 } definition.sound=default.node_sound_metal_defaults() elseif industrialtest.mclAvailable then definition.groups={pickaxey=1} definition._mcl_blast_resistance=1 definition._mcl_hardness=0.5 definition.sound=mcl_sounds.node_sound_metal_defaults() end definition.groups._industrialtest_hasPowerInput=1 minetest.register_node("industrialtest:"..name.."_cable",definition) minetest.register_craft({ type="shaped", output="industrialtest:"..name.."_cable 6", recipe={ {material,material,material}, {"","",""}, {"","",""} } }) minetest.register_craft({ type="shaped", output="industrialtest:"..name.."_cable 6", recipe={ {"","",""}, {material,material,material}, {"","",""} } }) minetest.register_craft({ type="shaped", output="industrialtest:"..name.."_cable 6", recipe={ {"","",""}, {"","",""}, {material,material,material} } }) definition=table.copy(definition) definition.description=S("Insulated "..displayName.." Cable") definition.inventory_image="industrialtest_insulated_"..name.."_cable_inv.png" definition.tiles={"industrialtest_insulated_copper_cable.png"} definition.wield_image="industrialtest_insulated_"..name.."_cable_inv.png" definition._industrialtest_electrocution=nil minetest.register_node("industrialtest:insulated_"..name.."_cable",definition) minetest.register_craft({ type="shapeless", output="industrialtest:insulated_"..name.."_cable", recipe={ "industrialtest:"..name.."_cable", "industrialtest:rubber" } }) minetest.register_craft({ type="shaped", output="industrialtest:insulated_"..name.."_cable 6", recipe={ {"industrialtest:rubber","industrialtest:rubber","industrialtest:rubber"}, {"industrialtest:"..name.."_ingot","industrialtest:"..name.."_ingot","industrialtest:"..name.."_ingot"}, {"industrialtest:rubber","industrialtest:rubber","industrialtest:rubber"} } }) end registerCable("copper","Copper",industrialtest.elementKeys.copperIngot,0.15,industrialtest.api.mvPowerFlow)