Add rose gold tools

This commit is contained in:
SmokeyDope 2023-03-25 21:55:16 +00:00
parent cd80b34d44
commit 97574b8433
1 changed files with 306 additions and 2 deletions

View File

@ -2,8 +2,15 @@ local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)
local S = minetest.get_translator(modname)
--local S = minetest.get_translator("mcl_lanterns")
local uses = {
wood = 60,
stone = 132,
iron = 251,
gold = 33,
rosegold = 220,
diamond = 1562,
netherite = 2031,
}
-- function register_oxidation_abm(abm_name, node_name, oxidized_variant) can be removed once PR# 3454 is in play.
-- I've already added the optional dependency. Once the PR is in play, move it from optional_depends to depends, and
@ -236,6 +243,303 @@ minetest.register_node("mcl_rose_gold:rose_gold_chain", {
mcl_lanterns.add_allowed_non_solid_nodes_ceiling("mcl_rose_gold:rose_gold_chain"),
mcl_lanterns.add_allowed_non_solid_nodes_floor("mcl_rose_gold:rose_gold_chain"),
})
--Register Tools
-- Help texts (from mcl_tools)
local pickaxe_longdesc = S("Pickaxes are mining tools to mine hard blocks, such as stone. A pickaxe can also be used as weapon, but it is rather inefficient.")
local axe_longdesc = S("An axe is your tool of choice to cut down trees, wood-based blocks and other blocks. Axes deal a lot of damage as well, but they are rather slow.")
local sword_longdesc = S("Swords are great in melee combat, as they are fast, deal high damage and can endure countless battles. Swords can also be used to cut down a few particular blocks, such as cobwebs.")
local shovel_longdesc = S("Shovels are tools for digging coarse blocks, such as dirt, sand and gravel. They can also be used to turn grass blocks to grass paths. Shovels can be used as weapons, but they are very weak.")
local shovel_use = S("To turn a grass block into a grass path, hold the shovel in your hand, then use (rightclick) the top or side of a grass block. This only works when there's air above the grass block.")
local shears_longdesc = S("Shears are tools to shear sheep and to mine a few block types. Shears are a special mining tool and can be used to obtain the original item from grass, leaves and similar blocks that require cutting.")
local shears_use = S("To shear sheep or carve faceless pumpkins, use the “place” key on them. Faces can only be carved at the side of faceless pumpkins. Mining works as usual, but the drops are different for a few blocks.")
local hoe_tt = S("Turns block into farmland")
local hoe_longdesc = S("Hoes are essential tools for growing crops. They are used to create farmland in order to plant seeds on it. Hoes can also be used as very weak weapons in a pinch.")
local hoe_usagehelp = S("Use the hoe on a cultivatable block (by rightclicking it) to turn it into farmland. Dirt, grass blocks and grass paths are cultivatable blocks. Using a hoe on coarse dirt turns it into dirt.")
local wield_scale = mcl_vars.tool_wield_scale
--Rose Gold Pick
minetest.register_tool("mcl_rose_gold:rose_gold_pick", {
description = S("Rose Gold Pickaxe"),
_doc_items_longdesc = pickaxe_longdesc,
inventory_image = "mcl_rose_gold_rose_gold_pick.png",
wield_scale = wield_scale,
groups = { tool=1, pickaxe=1, dig_speed_class=5, enchantability=18 },
tool_capabilities = {
-- 1/1.2
full_punch_interval = 0.83333333,
max_drop_level=2,
damage_groups = {fleshy=2},
punch_attack_uses = 110,
},
sound = { breaks = "default_tool_breaks" },
_repair_material = "mcl_rose_gold:rose_gold_ingot",
_mcl_toollike_wield = true,
_mcl_diggroups = {
pickaxey = { speed = 10, level = 3, uses = 220 }
},
})
-- shovel path making function
local make_grass_path = function(itemstack, placer, pointed_thing)
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)
if placer and not placer: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_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 (minetest.get_item_group(node.name, "path_creation_possible") == 1) then
local above = table.copy(pointed_thing.under)
above.y = above.y + 1
if minetest.get_node(above).name == "air" then
if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then
minetest.record_protection_violation(pointed_thing.under, placer:get_player_name())
return itemstack
end
if not minetest.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
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true)
minetest.swap_node(pointed_thing.under, {name="mcl_core:grass_path"})
end
end
return itemstack
end
--Rose Gold Shovel
minetest.register_tool("mcl_rose_gold:rose_gold_shovel", {
description = S("Rose Gold Shovel"),
_doc_items_longdesc = pickaxe_longdesc,
inventory_image = "mcl_rose_gold_rose_gold_shovel.png",
wield_scale = wield_scale,
groups = { tool=1, shovel=1, dig_speed_class=5, enchantability=18 },
tool_capabilities = {
-- 1/1.2
full_punch_interval = 0.83333333,
max_drop_level=2,
damage_groups = {fleshy=2},
punch_attack_uses = 110,
},
on_place = make_grass_path,
sound = { breaks = "default_tool_breaks" },
_repair_material = "mcl_rose_gold:rose_gold_ingot",
_mcl_toollike_wield = true,
_mcl_diggroups = {
shovely = { speed = 10, level = 3, uses = 220 }
},
})
--axe stripping logic
local function make_stripped_trunk(itemstack, placer, pointed_thing)
if pointed_thing.type ~= "node" then return end
local node = minetest.get_node(pointed_thing.under)
local noddef = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name]
if not placer:get_player_control().sneak and noddef.on_rightclick then
return minetest.item_place(itemstack, placer, pointed_thing)
end
if minetest.is_protected(pointed_thing.under, placer:get_player_name()) then
minetest.record_protection_violation(pointed_thing.under, placer:get_player_name())
return itemstack
end
if noddef._mcl_stripped_variant == nil then
return itemstack
else
minetest.swap_node(pointed_thing.under, {name=noddef._mcl_stripped_variant, param2=node.param2})
if not minetest.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
--Rose Gold Axe
minetest.register_tool("mcl_rose_gold:rose_gold_axe", {
description = S("Rose Gold Axe"),
_doc_items_longdesc = axe_longdesc,
inventory_image = "mcl_rose_gold_rose_gold_axe.png",
wield_scale = wield_scale,
groups = { tool=1, axe=1, dig_speed_class=5, enchantability=18 },
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level=2,
damage_groups = {fleshy=8},
punch_attack_uses = 110,
},
on_place = make_stripped_trunk,
sound = { breaks = "default_tool_breaks" },
_repair_material = "mcl_rose_gold:rose_gold_ingot",
_mcl_toollike_wield = true,
_mcl_diggroups = {
axey = { speed = 10, level = 3, uses = 220 }
},
})
--rose gold sword
minetest.register_tool("mcl_rose_gold:rose_gold_sword", {
description = S("Rose Gold Sword"),
_doc_items_longdesc = sword_longdesc,
inventory_image = "mcl_rose_gold_rose_gold_sword.png",
wield_scale = wield_scale,
groups = { weapon=1, sword=1, dig_speed_class=5, enchantability=18 },
tool_capabilities = {
full_punch_interval = 0.625,
max_drop_level=2,
damage_groups = {fleshy=5},
punch_attack_uses = 110,
},
sound = { breaks = "default_tool_breaks" },
_repair_material = "mcl_rose_gold:rose_gold_ingot",
_mcl_toollike_wield = true,
_mcl_diggroups = {
swordy = { speed = 10, level = 3, uses = 220 },
swordy_cobweb = { speed = 10, level = 3, uses = 220 }
},
})
--shear carving function
local carve_pumpkin
if minetest.get_modpath("mcl_farming") then
function carve_pumpkin(itemstack, placer, pointed_thing)
-- Use pointed node's on_rightclick function first, if present
local node = minetest.get_node(pointed_thing.under)
if placer and not placer: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_thing.under, node, placer, itemstack) or itemstack
end
end
-- Only carve pumpkin if used on side
if pointed_thing.above.y ~= pointed_thing.under.y then
return
end
if node.name == "mcl_farming:pumpkin" then
if not minetest.is_creative_enabled(placer:get_player_name()) then
-- Add wear (as if digging a shearsy node)
local toolname = itemstack:get_name()
local wear = mcl_autogroup.get_wear(toolname, "shearsy")
itemstack:add_wear(wear)
end
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = pointed_thing.above}, true)
local dir = vector.subtract(pointed_thing.under, pointed_thing.above)
local param2 = minetest.dir_to_facedir(dir)
minetest.set_node(pointed_thing.under, {name="mcl_farming:pumpkin_face", param2 = param2})
minetest.add_item(pointed_thing.above, "mcl_farming:pumpkin_seeds 4")
end
return itemstack
end
end
--rose gold shears
minetest.register_tool("mcl_rose_gold:rose_gold_shears", {
description = S("Rose Gold Shears"),
_doc_items_longdesc = shears_longdesc,
_doc_items_usagehelp = shears_use,
inventory_image = "mcl_rose_gold_rose_gold_shears.png",
wield_image = "mcl_rose_gold_rose_gold_shears.png",
stack_max = 1,
groups = { tool=1, shears=1, dig_speed_class=5, },
tool_capabilities = {
full_punch_interval = 0.5,
max_drop_level=1,
},
on_place = carve_pumpkin,
sound = { breaks = "default_tool_breaks" },
_mcl_toollike_wield = true,
_mcl_diggroups = {
shearsy = { speed = 3, level = 1, uses = 220 },
shearsy_wool = { speed = 7, level = 1, uses = 220 },
shearsy_cobweb = { speed = 18, level = 1, uses = 220 }
},
})
--hoe function
local function create_soil(pos, inv)
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
local hoe_on_place_function = function(wear_divisor)
return function(itemstack, user, pointed_thing)
-- Call on_rightclick if the pointed node defines it
local node = minetest.get_node(pointed_thing.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_thing.under, node, user, itemstack) or itemstack
end
end
if minetest.is_protected(pointed_thing.under, user:get_player_name()) then
minetest.record_protection_violation(pointed_thing.under, user:get_player_name())
return itemstack
end
if create_soil(pointed_thing.under, user:get_inventory()) then
if not minetest.is_creative_enabled(user:get_player_name()) then
itemstack:add_wear(65535/wear_divisor)
end
return itemstack
end
end
end
--rose gold hoe
minetest.register_tool("mcl_rose_gold:rose_gold_hoe", {
description = S("Rose Gold Hoe"),
_tt_help = hoe_tt.."\n"..S("Uses: @1", uses.rosegold),
_doc_items_longdesc = hoe_longdesc,
_doc_items_usagehelp = hoe_usagehelp,
inventory_image = "mcl_rose_gold_rose_gold_hoe.png",
wield_scale = mcl_vars.tool_wield_scale,
on_place = hoe_on_place_function(uses.rosegold),
groups = { tool=1, hoe=1, enchantability=18 },
tool_capabilities = {
full_punch_interval = 1,
damage_groups = { fleshy = 1, },
punch_attack_uses = uses.rosegold,
},
_repair_material = "mcl_rose_gold:rose_gold_ingot",
_mcl_toollike_wield = true,
_mcl_diggroups = {
hoey = { speed = 10, level = 2, uses = 220 }
},
})
-- Crafting Recipes