New file |
| | |
| | | -- Configuration |
| | | |
| | | local xnopick_max_charge = 30000 -- Maximum charge of the saw |
| | | -- Gives 2500 nodes on a single charge |
| | | local xnopick_charge_per_node = 12 |
| | | -- Dig node cost |
| | | |
| | | |
| | | local S = technic.getter |
| | | |
| | | technic.register_power_tool("technic:xnopick", xnopick_max_charge) |
| | | |
| | | local mesecons_materials = minetest.get_modpath("mesecons_materials") |
| | | |
| | | -- This function checks if the specified node should be dig |
| | | local function check_if_node_picked(pos) |
| | | local node = minetest.get_node(pos) |
| | | local node_name = node.name |
| | | |
| | | if node_name:match("default:.*_with_.*") or |
| | | node_name:match("default:coalblock") or |
| | | node_name:match("technic:mineral_.*") or |
| | | node_name:match("xtraores:.*_ore") or |
| | | node_name:match("underch:.*_ore") or |
| | | node_name:match("underch:coal_dust") or |
| | | node_name:match("underch:coal_diamond") or |
| | | node_name:match("moreores:mineral_.*") or |
| | | node_name:match(".*coal_dense_ore") |
| | | then |
| | | minetest.log("action", "[Xno Pick Magic] "..node_name.." good node to collect.") --print to log |
| | | return true |
| | | end |
| | | |
| | | return false |
| | | end |
| | | |
| | | local function collect_node(user, pos, current_charge) |
| | | if current_charge < xnopick_charge_per_node then |
| | | return current_charge |
| | | end |
| | | |
| | | local node_name = minetest.get_node(pos).name |
| | | local droped = minetest.get_node_drops(node_name) |
| | | for _, nameDroped in pairs(droped) do |
| | | --add node back into placer's inv |
| | | user:get_inventory():add_item("main", nameDroped .. ' 1') |
| | | end |
| | | |
| | | minetest.remove_node(pos) |
| | | local remain_charge = current_charge - xnopick_charge_per_node |
| | | |
| | | return remain_charge |
| | | end |
| | | |
| | | local function collect_block_node(user, pos, current_charge) |
| | | local radius = 4 |
| | | local dropPos = {} |
| | | local remain_charge = current_charge |
| | | for z = -radius, radius do |
| | | dropPos.z = pos.z + z |
| | | for y = -radius, radius do |
| | | dropPos.y = pos.y + y |
| | | for x = -radius, radius do |
| | | dropPos.x = pos.x + x |
| | | |
| | | if check_if_node_picked(dropPos) then |
| | | remain_charge = collect_node(user, dropPos, remain_charge) |
| | | end |
| | | end |
| | | end |
| | | end |
| | | |
| | | return remain_charge |
| | | end |
| | | |
| | | |
| | | |
| | | minetest.register_tool("technic:xnopick", { |
| | | description = S("Xno Pick Magic"), |
| | | inventory_image = "xno_superpick.png", |
| | | |
| | | stack_max = 1, |
| | | |
| | | wear_represents = "technic_RE_charge", |
| | | on_refill = technic.refill_RE_charge, |
| | | |
| | | on_use = function(itemstack, user, pointed_thing) |
| | | if pointed_thing.type ~= "node" then |
| | | return itemstack |
| | | end |
| | | |
| | | --check tool charge |
| | | local meta = minetest.deserialize(itemstack:get_metadata()) |
| | | if not meta or not meta.charge or |
| | | meta.charge < xnopick_charge_per_node then |
| | | return |
| | | end |
| | | |
| | | --check node protection |
| | | local pos = pointed_thing.under |
| | | if minetest.is_protected(pos, user:get_player_name()) then |
| | | minetest.record_protection_violation(pos, user:get_player_name()) |
| | | return |
| | | end |
| | | |
| | | --reinizializze visited struct |
| | | nodeVisited = Pointset.create() |
| | | |
| | | --can collect only digging node |
| | | if not check_if_node_picked(pos) then |
| | | return itemstack |
| | | end |
| | | |
| | | |
| | | -- Send current charge to digging function so that the |
| | | -- chainsaw will stop after digging a number of nodes |
| | | meta.charge = collect_block_node(user, pos, meta.charge) |
| | | if not technic.creative_mode then |
| | | technic.set_RE_wear(itemstack, meta.charge, xnopick_max_charge) |
| | | itemstack:set_metadata(minetest.serialize(meta)) |
| | | end |
| | | return itemstack |
| | | |
| | | end, |
| | | }) |
| | | |
| | | minetest.register_craft({ |
| | | output = "technic:xnopick", |
| | | recipe = { |
| | | {"group:wood", "group:wood", "group:wood",}, |
| | | {"technic:battery", "default:stick", "pipeworks:tube_1"}, |
| | | {"technic:battery", "default:stick", "pipeworks:tube_1"}, |
| | | }, |
| | | }) |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |