From 0b27efd75601993dc4b3a85bfe02e5c5ea1ea694 Mon Sep 17 00:00:00 2001 From: mrkubax10 Date: Sat, 6 Jan 2024 21:55:06 +0100 Subject: [PATCH] Split tools.lua to separate files --- init.lua | 9 +- tools.lua | 829 ------------------------------------ tools/common.lua | 63 +++ tools/electric_chainsaw.lua | 147 +++++++ tools/electric_drill.lua | 147 +++++++ tools/electric_hoe.lua | 226 ++++++++++ tools/electric_saber.lua | 162 +++++++ tools/treetap.lua | 103 +++++ tools/wrench.lua | 103 +++++ 9 files changed, 959 insertions(+), 830 deletions(-) delete mode 100644 tools.lua create mode 100644 tools/common.lua create mode 100644 tools/electric_chainsaw.lua create mode 100644 tools/electric_drill.lua create mode 100644 tools/electric_hoe.lua create mode 100644 tools/electric_saber.lua create mode 100644 tools/treetap.lua create mode 100644 tools/wrench.lua diff --git a/init.lua b/init.lua index 0c9c577..32b77ae 100644 --- a/init.lua +++ b/init.lua @@ -50,6 +50,14 @@ dofile(modpath.."/machines/transformer.lua") dofile(modpath.."/machines/solar_panel_generator.lua") dofile(modpath.."/machines/wind_mill.lua") +dofile(modpath.."/tools/common.lua") +dofile(modpath.."/tools/electric_chainsaw.lua") +dofile(modpath.."/tools/electric_drill.lua") +dofile(modpath.."/tools/electric_hoe.lua") +dofile(modpath.."/tools/electric_saber.lua") +dofile(modpath.."/tools/treetap.lua") +dofile(modpath.."/tools/wrench.lua") + dofile(modpath.."/upgrades.lua") dofile(modpath.."/craftitems.lua") dofile(modpath.."/nodes.lua") @@ -58,5 +66,4 @@ if industrialtest.developerMode then end dofile(modpath.."/cables.lua") dofile(modpath.."/mapgen.lua") -dofile(modpath.."/tools.lua") dofile(modpath.."/crafts.lua") diff --git a/tools.lua b/tools.lua deleted file mode 100644 index 2fe8386..0000000 --- a/tools.lua +++ /dev/null @@ -1,829 +0,0 @@ --- 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 onTreetapUse(user,pointed) - local node=minetest.get_node_or_nil(pointed.under) - if not node then - return false - end - -- Note: if more nodes from which treetap can extract will be added then they shouldn't be added here - -- Instead they should have additional entry in definition which will denote that treetap can be used on them - if node.name=="industrialtest:rubber_wood_with_rubber" then - local inv=user:get_inventory() - inv:add_item("main",ItemStack("industrialtest:sticky_resin")) - minetest.set_node(pointed.under,{name="industrialtest:rubber_wood"}) - return true - end - return false -end -local definition={ - description=S("Treetap"), - inventory_image="industrialtest_treetap.png", - tool_capabilities={ - full_punch_interval=1, - uses=50 - }, - on_place=function(itemstack,user,pointed) - if pointed.type=="node" and user and user:is_player() and onTreetapUse(user,pointed) then - industrialtest.api.afterToolUse(itemstack) - return itemstack - end - return nil - end, - _industrialtest_tool=true -} -if industrialtest.mtgAvailable then - definition.groups={ - flammable=2 - } -elseif industrialtest.mclAvailable then - definition.groups={ - tool=1 - } - definition._repair_material="group:wood" - definition._mcl_toollike_wield=true -end -minetest.register_tool("industrialtest:treetap",definition) -minetest.register_craft({ - type="shaped", - output="industrialtest:treetap", - recipe={ - {"","group:wood",""}, - {"group:wood","group:wood","group:wood"}, - {"group:wood","",""} - } -}) -definition={ - description=S("Electric Treetap"), - inventory_image="industrialtest_electric_treetap.png", - on_place=function(itemstack,user,pointed) - local meta=itemstack:get_meta() - if meta:get_int("industrialtest.powerAmount")>=50 and user and user:is_player() and onTreetapUse(user,pointed) then - industrialtest.api.addPowerToItem(itemstack,-50) - return itemstack - end - return nil - end, - _industrialtest_powerStorage=true, - _industrialtest_powerCapacity=10000, - _industrialtest_powerFlow=industrialtest.api.lvPowerFlow -} -if industrialtest.mclAvailable then - definition.groups={ - tool=1 - } - definition._mcl_toollike_wield=true -end -minetest.register_tool("industrialtest:electric_treetap",definition) -minetest.register_craft({ - type="shapeless", - output="industrialtest:electric_treetap", - recipe={ - "industrialtest:treetap", - "industrialtest:electronic_circuit", - "industrialtest:re_battery" - } -}) - -local function onWrenchUse(user,pointed) - local node=minetest.get_node_or_nil(pointed.under) - if not node then - return false - end - local def=minetest.registered_nodes[node.name] - if not def or not def.groups or not def.groups._industrialtest_wrenchUnmountable or (def.can_dig and not def.can_dig(pointed.under)) then - return false - end - local inv=user:get_inventory() - if def.after_dig_node then - def.after_dig_node(pointed.under,node,minetest.get_meta(pointed.under):to_table()) - end - minetest.remove_node(pointed.under) - local name=node.name - if string.sub(name,-7)=="_active" then - name=string.sub(name,1,-8) - end - inv:add_item("main",ItemStack(name)) - return true -end -definition={ - description=S("Wrench"), - inventory_image="industrialtest_wrench.png", - tool_capabilities={ - full_punch_interval=1, - uses=200 - }, - on_use=function(itemstack,user,pointed) - if pointed.type=="node" and user and user:is_player() and onWrenchUse(user,pointed) then - industrialtest.api.afterToolUse(itemstack) - return itemstack - end - return nil - end, - _industrialtest_tool=true -} -if industrialtest.mclAvailable then - definition.groups={ - tool=1 - } - definition._mcl_toollike_wield=true -end -minetest.register_tool("industrialtest:wrench",definition) -minetest.register_craft({ - type="shaped", - output="industrialtest:wrench", - recipe={ - {industrialtest.elementKeys.bronzeIngot,"",industrialtest.elementKeys.bronzeIngot}, - {industrialtest.elementKeys.bronzeIngot,industrialtest.elementKeys.bronzeIngot,industrialtest.elementKeys.bronzeIngot}, - {"",industrialtest.elementKeys.bronzeIngot,""} - } -}) -definition={ - description=S("Electric Wrench"), - inventory_image="industrialtest_electric_wrench.png", - on_use=function(itemstack,user,pointed) - local meta=itemstack:get_meta() - if meta:get_int("industrialtest.powerAmount")>=20 and user and user:is_player() and onWrenchUse(user,pointed) then - industrialtest.api.addPowerToItem(itemstack,-20) - return itemstack - end - return nil - end, - _industrialtest_powerStorage=true, - _industrialtest_powerCapacity=10000, - _industrialtest_powerFlow=industrialtest.api.lvPowerFlow -} -if industrialtest.mclAvailable then - definition.groups={ - tool=1 - } - definition._mcl_toollike_wield=true -end -minetest.register_tool("industrialtest:electric_wrench",definition) -minetest.register_craft({ - type="shapeless", - output="industrialtest:electric_wrench", - recipe={ - "industrialtest:wrench", - "industrialtest:electronic_circuit", - "industrialtest:re_battery" - } -}) - -local registeredElectricChainsaws={} -local function registerElectricChainsaw(config) - local definition={ - description=S(config.displayName), - inventory_image="industrialtest_"..config.name..".png", - _industrialtest_powerStorage=true, - _industrialtest_powerCapacity=10000, - _industrialtest_powerFlow=industrialtest.api.lvPowerFlow - } - if industrialtest.mtgAvailable then - definition.tool_capabilities={ - full_punch_interval=0.5, - max_drop_level=config.maxDropLevel, - groupcaps={ - choppy={ - times=config.inactiveTimes, - maxlevel=config.maxLevel - } - } - } - definition.groups={ - axe=1 - } - elseif industrialtest.mclAvailable then - definition.tool_capabilities={ - full_punch_interval=0.5, - max_drop_level=config.maxDropLevel, - } - definition.groups={ - tool=1, - dig_speed_class=config.digSpeedClass, - } - definition.on_place=function(itemstack,user,pointed) - local meta=itemstack:get_meta() - if meta:get_int("industrialtest.powerAmount")>=20 then - local itemstackCopy=itemstack - if itemstack:get_wear()~=industrialtest.internal.mclMakeStrippedTrunk(itemstackCopy,user,pointed,true):get_wear() then - industrialtest.api.addPowerToItem(itemstack,-20) - return itemstack - end - end - return nil - end - definition.after_use=function(itemstack) - -- Hack to make sure that chainsaw won't be destroyed when has 0 EU in MCL - return nil - end - definition._mcl_diggroups={ - axey={ - speed=config.inactiveDigSpeed, - level=config.digLevel, - uses=-1 - } - } - definition._mcl_toollike_wield=true - end - minetest.register_tool("industrialtest:"..config.name,definition) - definition=table.copy(definition) - if industrialtest.mtgAvailable then - definition.tool_capabilities.groupcaps.choppy.times=config.activeTimes - elseif industrialtest.mclAvailable then - definition._mcl_diggroups.axey.speed=config.activeDigSpeed - end - definition.groups.not_in_creative_inventory=1 - definition.on_use=nil - definition.after_use=function(itemstack,user,node,digparams) - industrialtest.api.addPowerToItem(itemstack,-20) - itemstack:set_name("industrialtest:"..config.name) - return itemstack - end - minetest.register_tool("industrialtest:"..config.name.."_active",definition) - registeredElectricChainsaws["industrialtest:"..config.name]=true -end -definition={ - name="electric_chainsaw", - displayName="Electric Chainsaw" -} -if industrialtest.mtgAvailable then - definition.maxDropLevel=1 - definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} - definition.maxLevel=2 - definition.activeTimes={[1]=2.2,[2]=1.1,[3]=0.7} -elseif industrialtest.mclAvailable then - definition.digSpeedClass=4 - definition.maxDropLevel=4 - definition.inactiveDigSpeed=1 - definition.digLevel=4 - definition.activeDigSpeed=7 -end -registerElectricChainsaw(definition) -minetest.register_craft({ - type="shaped", - output="industrialtest:electric_chainsaw", - recipe={ - {"","industrialtest:refined_iron_ingot","industrialtest:refined_iron_ingot"}, - {"industrialtest:refined_iron_ingot","industrialtest:electronic_circuit","industrialtest:refined_iron_ingot"}, - {"industrialtest:re_battery","industrialtest:refined_iron_ingot",""} - } -}) -definition={ - name="diamond_electric_chainsaw", - displayName="Diamond Electric Chainsaw" -} -if industrialtest.mtgAvailable then - definition.maxDropLevel=1 - definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} - definition.maxLevel=3 - definition.activeTimes={[1]=2.0,[2]=0.8,[3]=0.4} -elseif industrialtest.mclAvailable then - definition.digSpeedClass=5 - definition.maxDropLevel=5 - definition.inactiveDigSpeed=1 - definition.digLevel=5 - definition.activeDigSpeed=9 -end -registerElectricChainsaw(definition) -minetest.register_craft({ - type="shaped", - output="industrialtest:diamond_electric_chainsaw", - recipe={ - {"",industrialtest.elementKeys.diamond,""}, - {industrialtest.elementKeys.diamond,"industrialtest:electric_chainsaw",industrialtest.elementKeys.diamond} - } -}) - -local registeredElectricHoes={} -local function registerElectricHoe(config) - local definition={ - description=S(config.displayName), - inventory_image="industrialtest_"..config.name..".png", - _industrialtest_powerStorage=true, - _industrialtest_powerCapacity=10000, - _industrialtest_powerFlow=industrialtest.api.lvPowerFlow - } - if industrialtest.mtgAvailable then - -- Taken and adapted from farming mod from Minetest Game - local function onUse(user,pointed) - local pt = pointed - -- check if pointing at a node - if not pt then - return false - end - if pt.type ~= "node" then - return false - end - - local under = minetest.get_node(pt.under) - local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} - local above = minetest.get_node(p) - - -- return if any of the nodes is not registered - if not minetest.registered_nodes[under.name] then - return false - end - if not minetest.registered_nodes[above.name] then - return false - end - - -- check if the node above the pointed thing is air - if above.name ~= "air" then - return false - end - - -- check if pointing at soil - if minetest.get_item_group(under.name, "soil") ~= 1 then - return false - end - - -- check if (wet) soil defined - local regN = minetest.registered_nodes - if regN[under.name].soil == nil or regN[under.name].soil.wet == nil or regN[under.name].soil.dry == nil then - return false - end - - local player_name = user and user:get_player_name() or "" - - if minetest.is_protected(pt.under, player_name) then - minetest.record_protection_violation(pt.under, player_name) - return false - end - if minetest.is_protected(pt.above, player_name) then - minetest.record_protection_violation(pt.above, player_name) - return false - end - - -- turn the node into soil and play sound - minetest.set_node(pt.under, {name = regN[under.name].soil.dry}) - minetest.sound_play("default_dig_crumbly", { - pos = pt.under, - gain = 0.3, - }, true) - - return true - end - definition.groups={ - hoe=1 - } - definition.on_use=function(itemstack,user,pointed) - local meta=itemstack:get_meta() - if meta:get_int("industrialtest.powerAmount")>=20 and onUse(user,pointed) then - industrialtest.api.addPowerToItem(itemstack,-20) - return itemstack - end - return nil - end - elseif industrialtest.mclAvailable then - -- Taken from https://git.minetest.land/MineClone2/MineClone2/src/branch/master/mods/ITEMS/mcl_farming/hoes.lua#L3 - local function createSoil(pos) - if pos == nil then - return false - end - local node = minetest.get_node(pos) - local name = node.name - local above = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}) - if minetest.get_item_group(name, "cultivatable") == 2 then - if above.name == "air" then - node.name = "mcl_farming:soil" - minetest.set_node(pos, node) - minetest.sound_play("default_dig_crumbly", { pos = pos, gain = 0.5 }, true) - return true - end - elseif minetest.get_item_group(name, "cultivatable") == 1 then - if above.name == "air" then - node.name = "mcl_core:dirt" - minetest.set_node(pos, node) - minetest.sound_play("default_dig_crumbly", { pos = pos, gain = 0.6 }, true) - return true - end - end - return false - end - definition.tool_capabilities={ - full_punch_interval=0.5 - } - definition.groups={ - tool=1 - } - definition.on_place=function(itemstack,user,pointed) - local node=minetest.get_node(pointed.under) - if user and not user:get_player_control().sneak then - if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then - return minetest.registered_nodes[node.name].on_rightclick(pointed.under,node,user,itemstack) or itemstack - end - end - if minetest.is_protected(pointed.under, user:get_player_name()) then - minetest.record_protection_violation(pointed.under,user:get_player_name()) - return nil - end - local meta=itemstack:get_meta() - if meta:get_int("industrialtest.powerAmount")>=20 and createSoil(pointed.under) then - industrialtest.api.addPowerToItem(itemstack,-20) - return itemstack - end - return nil - end - definition.after_use=function(itemstack) - -- Hack to make sure that chainsaw won't be destroyed when has 0 EU in MCL - return nil - end - definition._mcl_toollike_wield=true - definition._mcl_diggroups={ - hoey={ - speed=config.inactiveDigSpeed, - level=config.digLevel, - uses=-1 - } - } - end - minetest.register_tool("industrialtest:"..config.name,definition) - if industrialtest.mclAvailable then - definition=table.copy(definition) - definition._mcl_diggroups.hoey.speed=config.activeDigSpeed - definition.groups.not_in_creative_inventory=1 - definition.after_use=function(itemstack) - industrialtest.api.addPowerToItem(itemstack,-20) - itemstack:set_name("industrialtest:"..config.name) - return itemstack - end - minetest.register_tool("industrialtest:"..config.name.."_active",definition) - end - registeredElectricHoes["industrialtest:"..config.name]=true -end -definition={ - name="electric_hoe", - displayName="Electric Hoe" -} -if industrialtest.mclAvailable then - definition.inactiveDigSpeed=1 - definition.digLevel=2 - definition.activeDigSpeed=7 -end -registerElectricHoe(definition) -minetest.register_craft({ - type="shaped", - output="industrialtest:electric_hoe", - recipe={ - {"industrialtest:refined_iron_ingot","industrialtest:refined_iron_ingot"}, - {"","industrialtest:electronic_circuit"}, - {"","industrialtest:re_battery"} - } -}) -minetest.register_craft({ - type="shaped", - output="industrialtest:electric_hoe", - recipe={ - {"industrialtest:refined_iron_ingot","industrialtest:refined_iron_ingot"}, - {"industrialtest:electronic_circuit",""}, - {"industrialtest:re_battery",""} - } -}) -if industrialtest.mclAvailable then - registerElectricHoe({ - name="diamond_electric_hoe", - displayName="Diamond Electric Hoe", - inactiveDigSpeed=1, - digLevel=5, - activeDigSpeed=9 - }) - minetest.register_craft({ - type="shapeless", - output="industrialtest:diamond_electric_hoe", - recipe={ - "industrialtest:electric_hoe", - industrialtest.elementKeys.diamond, - industrialtest.elementKeys.diamond - } - }) -end - -local registeredElectricDrills={} -local function registerElectricDrill(config) - local definition={ - description=S(config.displayName), - inventory_image="industrialtest_"..config.name..".png", - _industrialtest_powerStorage=true, - _industrialtest_powerCapacity=10000, - _industrialtest_powerFlow=industrialtest.api.lvPowerFlow - } - if industrialtest.mtgAvailable then - definition.tool_capabilities={ - full_punch_interval=0.5, - max_drop_level=config.maxDropLevel, - groupcaps={ - cracky={ - times=config.inactiveTimes, - maxlevel=config.maxLevel - }, - crumbly={ - times=config.inactiveTimes, - maxlevel=config.maxLevel - } - } - } - definition.groups={ - pickaxe=1, - shovel=1 - } - elseif industrialtest.mclAvailable then - definition.tool_capabilities={ - full_punch_interval=0.5, - max_drop_level=config.maxDropLevel - } - definition.groups={ - tool=1, - dig_speed_class=config.digSpeedClass - } - definition.after_use=function() - -- Hack to make sure that drill won't be destroyed when has 0 EU in MCL - return nil - end - definition._mcl_diggroups={ - pickaxey={ - speed=config.inactiveDigSpeed, - level=config.digLevel, - uses=-1 - }, - shovely={ - speed=config.inactiveDigSpeed, - level=config.digLevel, - uses=-1 - } - } - definition._mcl_toollike_wield=true - end - minetest.register_tool("industrialtest:"..config.name,definition) - definition=table.copy(definition) - if industrialtest.mtgAvailable then - definition.tool_capabilities.groupcaps.cracky.times=config.activeTimes - definition.tool_capabilities.groupcaps.crumbly.times=config.activeTimes - elseif industrialtest.mclAvailable then - definition._mcl_diggroups.pickaxey.speed=config.activeDigSpeed - definition._mcl_diggroups.shovely.speed=config.activeDigSpeed - end - definition.groups.not_in_creative_inventory=1 - definition.after_use=function(itemstack) - industrialtest.api.addPowerToItem(itemstack,-20) - itemstack:set_name("industrialtest:"..config.name) - return itemstack - end - minetest.register_tool("industrialtest:"..config.name.."_active",definition) - registeredElectricDrills["industrialtest:"..config.name]=true -end -definition={ - name="electric_drill", - displayName="Electric Drill" -} -if industrialtest.mtgAvailable then - definition.maxDropLevel=1 - definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} - definition.maxLevel=2 - definition.activeTimes={[1]=2.0,[2]=0.8,[3]=0.4} -elseif industrialtest.mclAvailable then - definition.digSpeedClass=4 - definition.maxDropLevel=4 - definition.inactiveDigSpeed=1 - definition.digLevel=4 - definition.activeDigSpeed=7 -end -registerElectricDrill(definition) -minetest.register_craft({ - type="shaped", - output="industrialtest:electric_drill", - recipe={ - {"","industrialtest:refined_iron_ingot",""}, - {"industrialtest:refined_iron_ingot","industrialtest:electronic_circuit","industrialtest:refined_iron_ingot"}, - {"industrialtest:refined_iron_ingot","industrialtest:re_battery","industrialtest:refined_iron_ingot"} - } -}) -definition={ - name="diamond_electric_drill", - displayName="Diamond Electric Drill" -} -if industrialtest.mtgAvailable then - definition.maxDropLevel=1 - definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} - definition.maxLevel=3 - definition.activeTimes={[1]=2.0,[2]=0.8,[3]=0.4} -elseif industrialtest.mclAvailable then - definition.digSpeedClass=5 - definition.maxDropLevel=5 - definition.inactiveDigSpeed=1 - definition.digLevel=5 - definition.activeDigSpeed=9 -end -registerElectricDrill(definition) -minetest.register_craft({ - type="shaped", - output="industrialtest:diamond_electric_drill", - recipe={ - {"",industrialtest.elementKeys.diamond,""}, - {industrialtest.elementKeys.diamond,"industrialtest:electric_drill",industrialtest.elementKeys.diamond} - } -}) - -local registeredElectricSabers={} -local function registerElectricSaber(config) - local definition={ - description=S(config.displayName), - inventory_image="industrialtest_"..config.name..".png", - _industrialtest_powerStorage=true, - _industrialtest_powerCapacity=10000, - _industrialtest_powerFlow=industrialtest.api.lvPowerFlow - } - if industrialtest.mtgAvailable then - definition.groups={ - sword=1 - } - definition.tool_capabilities={ - full_punch_interval=0.5, - max_drop_level=config.maxDropLevel, - groupcaps={ - snappy={ - times=config.inactiveTimes, - maxlevel=config.maxLevel - } - }, - damage_groups={fleshy=config.inactiveDamage} - } - elseif industrialtest.mclAvailable then - definition.groups={ - weapon=1, - sword=1, - dig_speed_class=config.digSpeedClass - } - definition.tool_capabilities={ - full_punch_interval=0.5, - max_drop_level=config.maxDropLevel, - damage_groups={fleshy=config.inactiveDamage} - } - definition.after_use=function() - -- Hack to make sure that saber won't be destroyed when has 0 EU in MCL - return nil - end - definition._mcl_toollike_wield=true - definition._mcl_diggroups={ - swordy={ - speed=config.inactiveDigSpeed, - level=config.digLevel, - uses=-1 - }, - swordy_cobweb={ - speed=config.inactiveDigSpeed, - level=config.digLevel, - uses=-1 - } - } - end - minetest.register_tool("industrialtest:"..config.name,definition) - definition=table.copy(definition) - if industrialtest.mtgAvailable then - definition.tool_capabilities.groupcaps.snappy.times=config.activeTimes - definition.tool_capabilities.damage_groups.fleshy=config.activeDamage - elseif industrialtest.mclAvailable then - definition.tool_capabilities.damage_groups.fleshy=config.activeDamage - definition._mcl_diggroups.swordy.speed=config.activeDigSpeed - definition._mcl_diggroups.swordy_cobweb.speed=config.activeDigSpeed - end - definition.groups.not_in_creative_inventory=1 - definition.after_use=function() - return nil - end - minetest.register_tool("industrialtest:"..config.name.."_active",definition) - registeredElectricSabers["industrialtest:"..config.name]=true -end -definition={ - name="electric_saber", - displayName="Electric Saber" -} -if industrialtest.mtgAvailable then - definition.maxDropLevel=1 - definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} - definition.maxLevel=3 - definition.inactiveDamage=1 - definition.activeTimes={[1]=2.0,[2]=0.8,[3]=0.4} - definition.activeDamage=6 -elseif industrialtest.mclAvailable then - definition.digSpeedClass=4 - definition.maxDropLevel=4 - definition.inactiveDamage=1 - definition.inactiveDigSpeed=1 - definition.digLevel=4 - definition.activeDamage=6 - definition.activeDigSpeed=7 -end -registerElectricSaber(definition) -minetest.register_craft({ - type="shaped", - output="industrialtest:electric_saber", - recipe={ - {"industrialtest:refined_iron_ingot"}, - {"industrialtest:refined_iron_ingot"}, - {"industrialtest:re_battery"} - } -}) -definition={ - name="diamond_electric_saber", - displayName="Diamond Electric Saber" -} -if industrialtest.mtgAvailable then - definition.maxDropLevel=1 - definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} - definition.maxLevel=3 - definition.inactiveDamage=1 - definition.activeTimes={[1]=2.0,[2]=0.8,[3]=0.4} - definition.activeDamage=9 -elseif industrialtest.mclAvailable then - definition.digSpeedClass=5 - definition.maxDropLevel=5 - definition.inactiveDamage=1 - definition.inactiveDigSpeed=1 - definition.digLevel=5 - definition.activeDamage=9 - definition.activeDigSpeed=9 -end -registerElectricSaber(definition) -minetest.register_craft({ - type="shapeless", - output="industrialtest:diamond_electric_saber", - recipe={ - "industrialtest:electric_saber", - industrialtest.elementKeys.diamond, - industrialtest.elementKeys.diamond - } -}) - --- Tool callbacks -minetest.register_on_punchnode(function(pos,node,user,pointed) - if user then - local itemstack=user:get_wielded_item() - if registeredElectricChainsaws[itemstack:get_name()] then - local meta=itemstack:get_meta() - if meta:get_int("industrialtest.powerAmount")>=20 then - local def=minetest.registered_nodes[node.name] - if (industrialtest.mtgAvailable and def.groups and def.groups.choppy) or (industrialtest.mclAvailable and def.groups and def.groups.axey) then - itemstack:set_name(itemstack:get_name().."_active") - user:set_wielded_item(itemstack) - end - end - elseif industrialtest.mclAvailable and registeredElectricHoes[itemstack:get_name()] then - local meta=itemstack:get_meta() - if meta:get_int("industrialtest.powerAmount")>=20 then - local def=minetest.registered_nodes[node.name] - if def.groups and def.groups.hoey then - itemstack:set_name(itemstack:get_name().."_active") - user:set_wielded_item(itemstack) - end - end - elseif registeredElectricDrills[itemstack:get_name()] then - local meta=itemstack:get_meta() - if meta:get_int("industrialtest.powerAmount")>=20 then - local def=minetest.registered_nodes[node.name] - if (industrialtest.mtgAvailable and def.groups and (def.groups.cracky or def.groups.crumbly)) or (industrialtest.mclAvailable and def.groups and (def.groups.pickaxey or def.groups.shovely)) then - itemstack:set_name(itemstack:get_name().."_active") - user:set_wielded_item(itemstack) - end - end - elseif registeredElectricSabers[itemstack:get_name()] then - local meta=itemstack:get_meta() - if meta:get_int("industrialtest.powerAmount")>=20 then - local def=minetest.registered_nodes[node.name] - if (industrialtest.mtgAvailable and def.groups and def.groups.snappy) or (industrialtest.mclAvailable and def.groups and (def.groups.swordy or def.groups.swordy_cobweb)) then - itemstack:set_name(itemstack:get_name().."_active") - user:set_wielded_item(itemstack) - end - end - end - end -end) -minetest.register_on_punchplayer(function(player,hitter) - local itemstack=hitter:get_wielded_item() - if registeredElectricSabers[itemstack:get_name()] then - local meta=itemstack:get_meta() - if meta:get_int("industrialtest.powerAmount")>=20 then - industrialtest.api.addPowerToItem(itemstack,-20) - hitter:set_wielded_item(itemstack) - local def=minetest.registered_tools[itemstack:get_name().."_active"] - player:set_hp(player:get_hp()-def.tool_capabilites.damage_groups.fleshy) - return true - end - end - return false -end) diff --git a/tools/common.lua b/tools/common.lua new file mode 100644 index 0000000..a2d7337 --- /dev/null +++ b/tools/common.lua @@ -0,0 +1,63 @@ +-- IndustrialTest +-- Copyright (C) 2024 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 . + +industrialtest.internal.registeredElectricChainsaws={} +industrialtest.internal.registeredElectricDrills={} +industrialtest.internal.registeredElectricHoes={} +industrialtest.internal.registeredElectricSabers={} + +minetest.register_on_punchnode(function(pos,node,user,pointed) + if user then + local itemstack=user:get_wielded_item() + if industrialtest.internal.registeredElectricChainsaws[itemstack:get_name()] then + local meta=itemstack:get_meta() + if meta:get_int("industrialtest.powerAmount")>=20 then + local def=minetest.registered_nodes[node.name] + if (industrialtest.mtgAvailable and def.groups and def.groups.choppy) or (industrialtest.mclAvailable and def.groups and def.groups.axey) then + itemstack:set_name(itemstack:get_name().."_active") + user:set_wielded_item(itemstack) + end + end + elseif industrialtest.mclAvailable and industrialtest.internal.registeredElectricHoes[itemstack:get_name()] then + local meta=itemstack:get_meta() + if meta:get_int("industrialtest.powerAmount")>=20 then + local def=minetest.registered_nodes[node.name] + if def.groups and def.groups.hoey then + itemstack:set_name(itemstack:get_name().."_active") + user:set_wielded_item(itemstack) + end + end + elseif industrialtest.internal.registeredElectricDrills[itemstack:get_name()] then + local meta=itemstack:get_meta() + if meta:get_int("industrialtest.powerAmount")>=20 then + local def=minetest.registered_nodes[node.name] + if (industrialtest.mtgAvailable and def.groups and (def.groups.cracky or def.groups.crumbly)) or (industrialtest.mclAvailable and def.groups and (def.groups.pickaxey or def.groups.shovely)) then + itemstack:set_name(itemstack:get_name().."_active") + user:set_wielded_item(itemstack) + end + end + elseif industrialtest.internal.registeredElectricSabers[itemstack:get_name()] then + local meta=itemstack:get_meta() + if meta:get_int("industrialtest.powerAmount")>=20 then + local def=minetest.registered_nodes[node.name] + if (industrialtest.mtgAvailable and def.groups and def.groups.snappy) or (industrialtest.mclAvailable and def.groups and (def.groups.swordy or def.groups.swordy_cobweb)) then + itemstack:set_name(itemstack:get_name().."_active") + user:set_wielded_item(itemstack) + end + end + end + end +end) diff --git a/tools/electric_chainsaw.lua b/tools/electric_chainsaw.lua new file mode 100644 index 0000000..26cc69f --- /dev/null +++ b/tools/electric_chainsaw.lua @@ -0,0 +1,147 @@ +-- IndustrialTest +-- Copyright (C) 2024 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 electricChainsaw={} + +electricChainsaw.afterUse=function(itemstack,config) + industrialtest.api.addPowerToItem(itemstack,-20) + itemstack:set_name("industrialtest:"..config.name) + return itemstack +end + +local function registerElectricChainsaw(config) + local definition={ + description=config.displayName, + inventory_image="industrialtest_"..config.name..".png", + _industrialtest_powerStorage=true, + _industrialtest_powerCapacity=10000, + _industrialtest_powerFlow=industrialtest.api.lvPowerFlow + } + if industrialtest.mtgAvailable then + definition.tool_capabilities={ + full_punch_interval=0.5, + max_drop_level=config.maxDropLevel, + groupcaps={ + choppy={ + times=config.inactiveTimes, + maxlevel=config.maxLevel + } + } + } + definition.groups={ + axe=1 + } + elseif industrialtest.mclAvailable then + definition.tool_capabilities={ + full_punch_interval=0.5, + max_drop_level=config.maxDropLevel, + } + definition.groups={ + tool=1, + dig_speed_class=config.digSpeedClass, + } + definition.on_place=function(itemstack,user,pointed) + local meta=itemstack:get_meta() + if meta:get_int("industrialtest.powerAmount")>=20 then + local itemstackCopy=itemstack + if itemstack:get_wear()~=industrialtest.internal.mclMakeStrippedTrunk(itemstackCopy,user,pointed,true):get_wear() then + industrialtest.api.addPowerToItem(itemstack,-20) + return itemstack + end + end + return nil + end + definition.after_use=function(itemstack) + -- Hack to make sure that chainsaw won't be destroyed when has 0 EU in MCL + return nil + end + definition._mcl_diggroups={ + axey={ + speed=config.inactiveDigSpeed, + level=config.digLevel, + uses=-1 + } + } + definition._mcl_toollike_wield=true + end + minetest.register_tool("industrialtest:"..config.name,definition) + definition=table.copy(definition) + if industrialtest.mtgAvailable then + definition.tool_capabilities.groupcaps.choppy.times=config.activeTimes + elseif industrialtest.mclAvailable then + definition._mcl_diggroups.axey.speed=config.activeDigSpeed + end + definition.groups.not_in_creative_inventory=1 + definition.on_use=nil + definition.after_use=function(itemstack) + return electricChainsaw.afterUse(itemstack,config) + end + minetest.register_tool("industrialtest:"..config.name.."_active",definition) + industrialtest.internal.registeredElectricChainsaws["industrialtest:"..config.name]=true +end +local definition={ + name="electric_chainsaw", + displayName=S("Electric Chainsaw") +} +if industrialtest.mtgAvailable then + definition.maxDropLevel=1 + definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} + definition.maxLevel=2 + definition.activeTimes={[1]=2.2,[2]=1.1,[3]=0.7} +elseif industrialtest.mclAvailable then + definition.digSpeedClass=4 + definition.maxDropLevel=4 + definition.inactiveDigSpeed=1 + definition.digLevel=4 + definition.activeDigSpeed=7 +end +registerElectricChainsaw(definition) +minetest.register_craft({ + type="shaped", + output="industrialtest:electric_chainsaw", + recipe={ + {"","industrialtest:refined_iron_ingot","industrialtest:refined_iron_ingot"}, + {"industrialtest:refined_iron_ingot","industrialtest:electronic_circuit","industrialtest:refined_iron_ingot"}, + {"industrialtest:re_battery","industrialtest:refined_iron_ingot",""} + } +}) +definition={ + name="diamond_electric_chainsaw", + displayName=S("Diamond Electric Chainsaw") +} +if industrialtest.mtgAvailable then + definition.maxDropLevel=1 + definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} + definition.maxLevel=3 + definition.activeTimes={[1]=2.0,[2]=0.8,[3]=0.4} +elseif industrialtest.mclAvailable then + definition.digSpeedClass=5 + definition.maxDropLevel=5 + definition.inactiveDigSpeed=1 + definition.digLevel=5 + definition.activeDigSpeed=9 +end +registerElectricChainsaw(definition) +minetest.register_craft({ + type="shaped", + output="industrialtest:diamond_electric_chainsaw", + recipe={ + {"",industrialtest.elementKeys.diamond,""}, + {industrialtest.elementKeys.diamond,"industrialtest:electric_chainsaw",industrialtest.elementKeys.diamond} + } +}) diff --git a/tools/electric_drill.lua b/tools/electric_drill.lua new file mode 100644 index 0000000..68c07f4 --- /dev/null +++ b/tools/electric_drill.lua @@ -0,0 +1,147 @@ +-- IndustrialTest +-- Copyright (C) 2024 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 electricDrill={} + +electricDrill.afterUse=function(itemstack,config) + industrialtest.api.addPowerToItem(itemstack,-20) + itemstack:set_name("industrialtest:"..config.name) + return itemstack +end + +local function registerElectricDrill(config) + local definition={ + description=config.displayName, + inventory_image="industrialtest_"..config.name..".png", + _industrialtest_powerStorage=true, + _industrialtest_powerCapacity=10000, + _industrialtest_powerFlow=industrialtest.api.lvPowerFlow + } + if industrialtest.mtgAvailable then + definition.tool_capabilities={ + full_punch_interval=0.5, + max_drop_level=config.maxDropLevel, + groupcaps={ + cracky={ + times=config.inactiveTimes, + maxlevel=config.maxLevel + }, + crumbly={ + times=config.inactiveTimes, + maxlevel=config.maxLevel + } + } + } + definition.groups={ + pickaxe=1, + shovel=1 + } + elseif industrialtest.mclAvailable then + definition.tool_capabilities={ + full_punch_interval=0.5, + max_drop_level=config.maxDropLevel + } + definition.groups={ + tool=1, + dig_speed_class=config.digSpeedClass + } + definition.after_use=function() + -- Hack to make sure that drill won't be destroyed when has 0 EU in MCL + return nil + end + definition._mcl_diggroups={ + pickaxey={ + speed=config.inactiveDigSpeed, + level=config.digLevel, + uses=-1 + }, + shovely={ + speed=config.inactiveDigSpeed, + level=config.digLevel, + uses=-1 + } + } + definition._mcl_toollike_wield=true + end + minetest.register_tool("industrialtest:"..config.name,definition) + definition=table.copy(definition) + if industrialtest.mtgAvailable then + definition.tool_capabilities.groupcaps.cracky.times=config.activeTimes + definition.tool_capabilities.groupcaps.crumbly.times=config.activeTimes + elseif industrialtest.mclAvailable then + definition._mcl_diggroups.pickaxey.speed=config.activeDigSpeed + definition._mcl_diggroups.shovely.speed=config.activeDigSpeed + end + definition.groups.not_in_creative_inventory=1 + definition.after_use=function(itemstack) + return electricDrill.afterUse(itemstack,config) + end + minetest.register_tool("industrialtest:"..config.name.."_active",definition) + industrialtest.internal.registeredElectricDrills["industrialtest:"..config.name]=true +end +local definition={ + name="electric_drill", + displayName=S("Electric Drill") +} +if industrialtest.mtgAvailable then + definition.maxDropLevel=1 + definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} + definition.maxLevel=2 + definition.activeTimes={[1]=2.0,[2]=0.8,[3]=0.4} +elseif industrialtest.mclAvailable then + definition.digSpeedClass=4 + definition.maxDropLevel=4 + definition.inactiveDigSpeed=1 + definition.digLevel=4 + definition.activeDigSpeed=7 +end +registerElectricDrill(definition) +minetest.register_craft({ + type="shaped", + output="industrialtest:electric_drill", + recipe={ + {"","industrialtest:refined_iron_ingot",""}, + {"industrialtest:refined_iron_ingot","industrialtest:electronic_circuit","industrialtest:refined_iron_ingot"}, + {"industrialtest:refined_iron_ingot","industrialtest:re_battery","industrialtest:refined_iron_ingot"} + } +}) +definition={ + name="diamond_electric_drill", + displayName=S("Diamond Electric Drill") +} +if industrialtest.mtgAvailable then + definition.maxDropLevel=1 + definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} + definition.maxLevel=3 + definition.activeTimes={[1]=2.0,[2]=0.8,[3]=0.4} +elseif industrialtest.mclAvailable then + definition.digSpeedClass=5 + definition.maxDropLevel=5 + definition.inactiveDigSpeed=1 + definition.digLevel=5 + definition.activeDigSpeed=9 +end +registerElectricDrill(definition) +minetest.register_craft({ + type="shaped", + output="industrialtest:diamond_electric_drill", + recipe={ + {"",industrialtest.elementKeys.diamond,""}, + {industrialtest.elementKeys.diamond,"industrialtest:electric_drill",industrialtest.elementKeys.diamond} + } +}) diff --git a/tools/electric_hoe.lua b/tools/electric_hoe.lua new file mode 100644 index 0000000..31e67de --- /dev/null +++ b/tools/electric_hoe.lua @@ -0,0 +1,226 @@ +-- IndustrialTest +-- Copyright (C) 2024 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 electricHoe={} + +electricHoe.afterUse=function(itemstack,config) + industrialtest.api.addPowerToItem(itemstack,-20) + itemstack:set_name("industrialtest:"..config.name) + return itemstack +end + +local function registerElectricHoe(config) + local definition={ + description=config.displayName, + inventory_image="industrialtest_"..config.name..".png", + _industrialtest_powerStorage=true, + _industrialtest_powerCapacity=10000, + _industrialtest_powerFlow=industrialtest.api.lvPowerFlow + } + if industrialtest.mtgAvailable then + -- Taken and adapted from farming mod from Minetest Game + local function onUse(user,pointed) + local pt = pointed + -- check if pointing at a node + if not pt then + return false + end + if pt.type ~= "node" then + return false + end + + local under = minetest.get_node(pt.under) + local p = {x=pt.under.x, y=pt.under.y+1, z=pt.under.z} + local above = minetest.get_node(p) + + -- return if any of the nodes is not registered + if not minetest.registered_nodes[under.name] then + return false + end + if not minetest.registered_nodes[above.name] then + return false + end + + -- check if the node above the pointed thing is air + if above.name ~= "air" then + return false + end + + -- check if pointing at soil + if minetest.get_item_group(under.name, "soil") ~= 1 then + return false + end + + -- check if (wet) soil defined + local regN = minetest.registered_nodes + if regN[under.name].soil == nil or regN[under.name].soil.wet == nil or regN[under.name].soil.dry == nil then + return false + end + + local player_name = user and user:get_player_name() or "" + + if minetest.is_protected(pt.under, player_name) then + minetest.record_protection_violation(pt.under, player_name) + return false + end + if minetest.is_protected(pt.above, player_name) then + minetest.record_protection_violation(pt.above, player_name) + return false + end + + -- turn the node into soil and play sound + minetest.set_node(pt.under, {name = regN[under.name].soil.dry}) + minetest.sound_play("default_dig_crumbly", { + pos = pt.under, + gain = 0.3, + }, true) + + return true + end + definition.groups={ + hoe=1 + } + definition.on_use=function(itemstack,user,pointed) + local meta=itemstack:get_meta() + if meta:get_int("industrialtest.powerAmount")>=20 and onUse(user,pointed) then + industrialtest.api.addPowerToItem(itemstack,-20) + return itemstack + end + return nil + end + elseif industrialtest.mclAvailable then + -- Taken from https://git.minetest.land/MineClone2/MineClone2/src/branch/master/mods/ITEMS/mcl_farming/hoes.lua#L3 + local function createSoil(pos) + if pos == nil then + return false + end + local node = minetest.get_node(pos) + local name = node.name + local above = minetest.get_node({x=pos.x, y=pos.y+1, z=pos.z}) + if minetest.get_item_group(name, "cultivatable") == 2 then + if above.name == "air" then + node.name = "mcl_farming:soil" + minetest.set_node(pos, node) + minetest.sound_play("default_dig_crumbly", { pos = pos, gain = 0.5 }, true) + return true + end + elseif minetest.get_item_group(name, "cultivatable") == 1 then + if above.name == "air" then + node.name = "mcl_core:dirt" + minetest.set_node(pos, node) + minetest.sound_play("default_dig_crumbly", { pos = pos, gain = 0.6 }, true) + return true + end + end + return false + end + definition.tool_capabilities={ + full_punch_interval=0.5 + } + definition.groups={ + tool=1 + } + definition.on_place=function(itemstack,user,pointed) + local node=minetest.get_node(pointed.under) + if user and not user:get_player_control().sneak then + if minetest.registered_nodes[node.name] and minetest.registered_nodes[node.name].on_rightclick then + return minetest.registered_nodes[node.name].on_rightclick(pointed.under,node,user,itemstack) or itemstack + end + end + if minetest.is_protected(pointed.under, user:get_player_name()) then + minetest.record_protection_violation(pointed.under,user:get_player_name()) + return nil + end + local meta=itemstack:get_meta() + if meta:get_int("industrialtest.powerAmount")>=20 and createSoil(pointed.under) then + industrialtest.api.addPowerToItem(itemstack,-20) + return itemstack + end + return nil + end + definition.after_use=function(itemstack) + -- Hack to make sure that chainsaw won't be destroyed when has 0 EU in MCL + return nil + end + definition._mcl_toollike_wield=true + definition._mcl_diggroups={ + hoey={ + speed=config.inactiveDigSpeed, + level=config.digLevel, + uses=-1 + } + } + end + minetest.register_tool("industrialtest:"..config.name,definition) + if industrialtest.mclAvailable then + definition=table.copy(definition) + definition._mcl_diggroups.hoey.speed=config.activeDigSpeed + definition.groups.not_in_creative_inventory=1 + definition.after_use=function(itemstack) + return electricHoe.afterUse(itemstack,config) + end + minetest.register_tool("industrialtest:"..config.name.."_active",definition) + end + industrialtest.internal.registeredElectricHoes["industrialtest:"..config.name]=true +end +local definition={ + name="electric_hoe", + displayName=S("Electric Hoe") +} +if industrialtest.mclAvailable then + definition.inactiveDigSpeed=1 + definition.digLevel=2 + definition.activeDigSpeed=7 +end +registerElectricHoe(definition) +minetest.register_craft({ + type="shaped", + output="industrialtest:electric_hoe", + recipe={ + {"industrialtest:refined_iron_ingot","industrialtest:refined_iron_ingot"}, + {"","industrialtest:electronic_circuit"}, + {"","industrialtest:re_battery"} + } +}) +minetest.register_craft({ + type="shaped", + output="industrialtest:electric_hoe", + recipe={ + {"industrialtest:refined_iron_ingot","industrialtest:refined_iron_ingot"}, + {"industrialtest:electronic_circuit",""}, + {"industrialtest:re_battery",""} + } +}) +if industrialtest.mclAvailable then + registerElectricHoe({ + name="diamond_electric_hoe", + displayName=S("Diamond Electric Hoe"), + inactiveDigSpeed=1, + digLevel=5, + activeDigSpeed=9 + }) + minetest.register_craft({ + type="shapeless", + output="industrialtest:diamond_electric_hoe", + recipe={ + "industrialtest:electric_hoe", + industrialtest.elementKeys.diamond, + industrialtest.elementKeys.diamond + } + }) +end diff --git a/tools/electric_saber.lua b/tools/electric_saber.lua new file mode 100644 index 0000000..47d9ed0 --- /dev/null +++ b/tools/electric_saber.lua @@ -0,0 +1,162 @@ +-- IndustrialTest +-- Copyright (C) 2024 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 registerElectricSaber(config) + local definition={ + description=config.displayName, + inventory_image="industrialtest_"..config.name..".png", + _industrialtest_powerStorage=true, + _industrialtest_powerCapacity=10000, + _industrialtest_powerFlow=industrialtest.api.lvPowerFlow + } + if industrialtest.mtgAvailable then + definition.groups={ + sword=1 + } + definition.tool_capabilities={ + full_punch_interval=0.5, + max_drop_level=config.maxDropLevel, + groupcaps={ + snappy={ + times=config.inactiveTimes, + maxlevel=config.maxLevel + } + }, + damage_groups={fleshy=config.inactiveDamage} + } + elseif industrialtest.mclAvailable then + definition.groups={ + weapon=1, + sword=1, + dig_speed_class=config.digSpeedClass + } + definition.tool_capabilities={ + full_punch_interval=0.5, + max_drop_level=config.maxDropLevel, + damage_groups={fleshy=config.inactiveDamage} + } + definition.after_use=function() + -- Hack to make sure that saber won't be destroyed when has 0 EU in MCL + return nil + end + definition._mcl_toollike_wield=true + definition._mcl_diggroups={ + swordy={ + speed=config.inactiveDigSpeed, + level=config.digLevel, + uses=-1 + }, + swordy_cobweb={ + speed=config.inactiveDigSpeed, + level=config.digLevel, + uses=-1 + } + } + end + minetest.register_tool("industrialtest:"..config.name,definition) + definition=table.copy(definition) + if industrialtest.mtgAvailable then + definition.tool_capabilities.groupcaps.snappy.times=config.activeTimes + definition.tool_capabilities.damage_groups.fleshy=config.activeDamage + elseif industrialtest.mclAvailable then + definition.tool_capabilities.damage_groups.fleshy=config.activeDamage + definition._mcl_diggroups.swordy.speed=config.activeDigSpeed + definition._mcl_diggroups.swordy_cobweb.speed=config.activeDigSpeed + end + definition.groups.not_in_creative_inventory=1 + definition.after_use=function() + return nil + end + minetest.register_tool("industrialtest:"..config.name.."_active",definition) + industrialtest.internal.registeredElectricSabers["industrialtest:"..config.name]=true +end +local definition={ + name="electric_saber", + displayName=S("Electric Saber") +} +if industrialtest.mtgAvailable then + definition.maxDropLevel=1 + definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} + definition.maxLevel=3 + definition.inactiveDamage=1 + definition.activeTimes={[1]=2.0,[2]=0.8,[3]=0.4} + definition.activeDamage=6 +elseif industrialtest.mclAvailable then + definition.digSpeedClass=4 + definition.maxDropLevel=4 + definition.inactiveDamage=1 + definition.inactiveDigSpeed=1 + definition.digLevel=4 + definition.activeDamage=6 + definition.activeDigSpeed=7 +end +registerElectricSaber(definition) +minetest.register_craft({ + type="shaped", + output="industrialtest:electric_saber", + recipe={ + {"industrialtest:refined_iron_ingot"}, + {"industrialtest:refined_iron_ingot"}, + {"industrialtest:re_battery"} + } +}) +definition={ + name="diamond_electric_saber", + displayName=S("Diamond Electric Saber") +} +if industrialtest.mtgAvailable then + definition.maxDropLevel=1 + definition.inactiveTimes={[1]=10,[2]=5.6,[3]=4} + definition.maxLevel=3 + definition.inactiveDamage=1 + definition.activeTimes={[1]=2.0,[2]=0.8,[3]=0.4} + definition.activeDamage=9 +elseif industrialtest.mclAvailable then + definition.digSpeedClass=5 + definition.maxDropLevel=5 + definition.inactiveDamage=1 + definition.inactiveDigSpeed=1 + definition.digLevel=5 + definition.activeDamage=9 + definition.activeDigSpeed=9 +end +registerElectricSaber(definition) +minetest.register_craft({ + type="shapeless", + output="industrialtest:diamond_electric_saber", + recipe={ + "industrialtest:electric_saber", + industrialtest.elementKeys.diamond, + industrialtest.elementKeys.diamond + } +}) + +minetest.register_on_punchplayer(function(player,hitter) + local itemstack=hitter:get_wielded_item() + if registeredElectricSabers[itemstack:get_name()] then + local meta=itemstack:get_meta() + if meta:get_int("industrialtest.powerAmount")>=20 then + industrialtest.api.addPowerToItem(itemstack,-20) + hitter:set_wielded_item(itemstack) + local def=minetest.registered_tools[itemstack:get_name().."_active"] + player:set_hp(player:get_hp()-def.tool_capabilites.damage_groups.fleshy) + return true + end + end + return false +end) diff --git a/tools/treetap.lua b/tools/treetap.lua new file mode 100644 index 0000000..a51ed52 --- /dev/null +++ b/tools/treetap.lua @@ -0,0 +1,103 @@ +-- IndustrialTest +-- Copyright (C) 2024 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 onTreetapUse(user,pointed) + local node=minetest.get_node_or_nil(pointed.under) + if not node then + return false + end + -- Note: if more nodes from which treetap can extract will be added then they shouldn't be added here + -- Instead they should have additional entry in definition which will denote that treetap can be used on them + if node.name=="industrialtest:rubber_wood_with_rubber" then + local inv=user:get_inventory() + inv:add_item("main",ItemStack("industrialtest:sticky_resin")) + minetest.set_node(pointed.under,{name="industrialtest:rubber_wood"}) + return true + end + return false +end + +local definition={ + description=S("Treetap"), + inventory_image="industrialtest_treetap.png", + tool_capabilities={ + full_punch_interval=1, + uses=50 + }, + on_place=function(itemstack,user,pointed) + if pointed.type=="node" and user and user:is_player() and onTreetapUse(user,pointed) then + industrialtest.api.afterToolUse(itemstack) + return itemstack + end + return nil + end, + _industrialtest_tool=true +} +if industrialtest.mtgAvailable then + definition.groups={ + flammable=2 + } +elseif industrialtest.mclAvailable then + definition.groups={ + tool=1 + } + definition._repair_material="group:wood" + definition._mcl_toollike_wield=true +end +minetest.register_tool("industrialtest:treetap",definition) +minetest.register_craft({ + type="shaped", + output="industrialtest:treetap", + recipe={ + {"","group:wood",""}, + {"group:wood","group:wood","group:wood"}, + {"group:wood","",""} + } +}) + +definition={ + description=S("Electric Treetap"), + inventory_image="industrialtest_electric_treetap.png", + on_place=function(itemstack,user,pointed) + local meta=itemstack:get_meta() + if meta:get_int("industrialtest.powerAmount")>=50 and user and user:is_player() and onTreetapUse(user,pointed) then + industrialtest.api.addPowerToItem(itemstack,-50) + return itemstack + end + return nil + end, + _industrialtest_powerStorage=true, + _industrialtest_powerCapacity=10000, + _industrialtest_powerFlow=industrialtest.api.lvPowerFlow +} +if industrialtest.mclAvailable then + definition.groups={ + tool=1 + } + definition._mcl_toollike_wield=true +end +minetest.register_tool("industrialtest:electric_treetap",definition) +minetest.register_craft({ + type="shapeless", + output="industrialtest:electric_treetap", + recipe={ + "industrialtest:treetap", + "industrialtest:electronic_circuit", + "industrialtest:re_battery" + } +}) diff --git a/tools/wrench.lua b/tools/wrench.lua new file mode 100644 index 0000000..3a8a4c0 --- /dev/null +++ b/tools/wrench.lua @@ -0,0 +1,103 @@ +-- IndustrialTest +-- Copyright (C) 2024 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 + +local S=minetest.get_translator("industrialtest") + +local function onWrenchUse(user,pointed) + local node=minetest.get_node_or_nil(pointed.under) + if not node then + return false + end + local def=minetest.registered_nodes[node.name] + if not def or not def.groups or not def.groups._industrialtest_wrenchUnmountable or (def.can_dig and not def.can_dig(pointed.under)) then + return false + end + local inv=user:get_inventory() + if def.after_dig_node then + def.after_dig_node(pointed.under,node,minetest.get_meta(pointed.under):to_table()) + end + minetest.remove_node(pointed.under) + local name=node.name + if string.sub(name,-7)=="_active" then + name=string.sub(name,1,-8) + end + inv:add_item("main",ItemStack(name)) + return true +end + +local definition={ + description=S("Wrench"), + inventory_image="industrialtest_wrench.png", + tool_capabilities={ + full_punch_interval=1, + uses=200 + }, + on_use=function(itemstack,user,pointed) + if pointed.type=="node" and user and user:is_player() and onWrenchUse(user,pointed) then + industrialtest.api.afterToolUse(itemstack) + return itemstack + end + return nil + end, + _industrialtest_tool=true +} +if industrialtest.mclAvailable then + definition.groups={ + tool=1 + } + definition._mcl_toollike_wield=true +end +minetest.register_tool("industrialtest:wrench",definition) +minetest.register_craft({ + type="shaped", + output="industrialtest:wrench", + recipe={ + {industrialtest.elementKeys.bronzeIngot,"",industrialtest.elementKeys.bronzeIngot}, + {industrialtest.elementKeys.bronzeIngot,industrialtest.elementKeys.bronzeIngot,industrialtest.elementKeys.bronzeIngot}, + {"",industrialtest.elementKeys.bronzeIngot,""} + } +}) + +definition={ + description=S("Electric Wrench"), + inventory_image="industrialtest_electric_wrench.png", + on_use=function(itemstack,user,pointed) + local meta=itemstack:get_meta() + if meta:get_int("industrialtest.powerAmount")>=20 and user and user:is_player() and onWrenchUse(user,pointed) then + industrialtest.api.addPowerToItem(itemstack,-20) + return itemstack + end + return nil + end, + _industrialtest_powerStorage=true, + _industrialtest_powerCapacity=10000, + _industrialtest_powerFlow=industrialtest.api.lvPowerFlow +} +if industrialtest.mclAvailable then + definition.groups={ + tool=1 + } + definition._mcl_toollike_wield=true +end +minetest.register_tool("industrialtest:electric_wrench",definition) +minetest.register_craft({ + type="shapeless", + output="industrialtest:electric_wrench", + recipe={ + "industrialtest:wrench", + "industrialtest:electronic_circuit", + "industrialtest:re_battery" + } +})