uwu/tools.lua

176 lines
5.7 KiB
Lua

-- Copyright (C) 2020 2021 PsycoJaker
-- This file is part of UwU Mod Minetest Mod.
-- UwU Mod 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
-- any later version.
-- UwU Mod 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 UwU Mod. If not, see <https://www.gnu.org/licenses/>.
local modname = core.get_current_modname()
local modpath = core.get_modpath(modname)
local S = core.get_translator(modname)
local wield_scale = mcl_vars.tool_wield_scale
local function make_grass_path(itemstack, placer, pointed_thing)
-- Use pointed node's on_rightclick function first, if present
local node = core.get_node(pointed_thing.under)
if placer and not placer:get_player_control().sneak then
if core.registered_nodes[node.name] and core.registered_nodes[node.name].on_rightclick then
return core.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer, itemstack) or itemstack
end
end
-- Only make grass path if tool used on side or top of target node
if pointed_thing.above.y < pointed_thing.under.y then
return itemstack
end
if (core.get_item_group(node.name, "grass_block") == 1) then
local above = table.copy(pointed_thing.under)
above.y = above.y + 1
if core.get_node(above).name == "air" then
if core.is_protected(pointed_thing.under, placer:get_player_name()) then
core.record_protection_violation(pointed_thing.under, placer:get_player_name())
return itemstack
end
if not core.is_creative_enabled(placer:get_player_name()) then
-- Add wear (as if digging a shovely node)
local toolname = itemstack:get_name()
local wear = mcl_autogroup.get_wear(toolname, "shovely")
itemstack:add_wear(wear)
end
core.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true)
core.swap_node(pointed_thing.under, {name="mcl_core:grass_path"})
end
end
return itemstack
end
local function make_stripped_trunk(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then return end
local node = core.get_node(pointed_thing.under)
local noddef = core.registered_nodes[core.get_node(pointed_thing.under).name]
if not placer:get_player_control().sneak and noddef.on_rightclick then
return core.item_place(itemstack, placer, pointed_thing)
end
if core.is_protected(pointed_thing.under, placer:get_player_name()) then
core.record_protection_violation(pointed_thing.under, placer:get_player_name())
return itemstack
end
if noddef._mcl_stripped_variant == nil then
return itemstack
else
core.swap_node(pointed_thing.under, {name=noddef._mcl_stripped_variant, param2=node.param2})
if not core.is_creative_enabled(placer:get_player_name()) then
-- Add wear (as if digging a axey node)
local toolname = itemstack:get_name()
local wear = mcl_autogroup.get_wear(toolname, "axey")
itemstack:add_wear(wear)
end
end
return itemstack
end
-- uwu tools
core.register_tool("uwu:sword", {
description = S("UwU Sword"),
inventory_image = "uwu_sword.png",
wield_scale = wield_scale,
groups = { weapon=1, sword=1, dig_speed_class=6, enchantability=22 },
tool_capabilities = {
full_punch_interval = 0.625,
max_drop_level=2,
damage_groups = {fleshy=4},
punch_attack_uses = 33,
},
sound = { breaks = "default_tool_breaks" },
_repair_material = "uwu:crystal",
_mcl_toollike_wield = true,
_mcl_diggroups = {
swordy = { speed = 12, level = 4, uses = 800 },
swordy_cobweb = { speed = 12, level = 4, uses = 250 }
},
})
core.register_tool("uwu:pick", {
description = S("UwU Pickaxe"),
inventory_image = "uwu_pick.png",
wield_scale = wield_scale,
groups = { tool=1, pickaxe=1, dig_speed_class=6, enchantability=22 },
tool_capabilities = {
full_punch_interval = 0.83333333,
max_drop_level=2,
damage_groups = {fleshy=2},
punch_attack_uses = 17,
},
sound = { breaks = "default_tool_breaks" },
_repair_material = "uwu:crystal",
_mcl_toollike_wield = true,
_mcl_diggroups = {
pickaxey = { speed = 12, level = 5, uses = 250 }
},
})
core.register_tool("uwu:axe", {
description = S("UwU Axe"),
inventory_image = "uwu_axe.png",
wield_scale = wield_scale,
groups = { tool=1, axe=1, dig_speed_class=6, enchantability=22 },
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level=2,
damage_groups = {fleshy=7},
punch_attack_uses = 17,
},
on_place = make_stripped_trunk,
sound = { breaks = "default_tool_breaks" },
_repair_material = "uwu:crystal",
_mcl_toollike_wield = true,
_mcl_diggroups = {
axey = { speed = 12, level = 4, uses = 250 }
},
})
core.register_tool("uwu:shovel", {
description = S("UwU Shovel"),
inventory_image = "uwu_shovel.png",
wield_image = "uwu_shovel.png^[transformR90",
wield_scale = wield_scale,
groups = { tool=1, shovel=1, dig_speed_class=6, enchantability=22 },
tool_capabilities = {
full_punch_interval = 1,
max_drop_level=2,
damage_groups = {fleshy=2},
punch_attack_uses = 17,
},
on_place = make_grass_path,
sound = { breaks = "default_tool_breaks" },
_repair_material = "uwu:crystal",
_mcl_toollike_wield = true,
_mcl_diggroups = {
shovely = { speed = 12, level = 4, uses = 250 }
},
})