Can equip/swap armor with rightclick

This commit is contained in:
Wuzzy 2020-02-18 22:05:08 +01:00
parent 329452d5ce
commit d88fa0c438

View File

@ -8,6 +8,62 @@ dofile(minetest.get_modpath(minetest.get_current_modname()).."/alias.lua")
local longdesc = S("This is a piece of equippable armor which reduces the amount of damage you receive.")
local usage = S("To equip it, put it on the corresponding armor slot in your inventory menu.")
local function on_armor_use(itemstack, user, pointed_thing)
if not user or user:is_player() == false then
return itemstack
end
-- Call on_rightclick if the pointed node defines it
if pointed_thing.type == "node" then
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
end
local name, player_inv, armor_inv = armor:get_valid_player(user, "[on_armor_use]")
if not name then
return itemstack
end
local def = itemstack:get_definition()
local slot
if def.groups and def.groups.armor_head then
slot = 2
elseif def.groups and def.groups.armor_torso then
slot = 3
elseif def.groups and def.groups.armor_legs then
slot = 4
elseif def.groups and def.groups.armor_feet then
slot = 5
end
if slot then
local itemstack_single = ItemStack(itemstack)
itemstack_single:set_count(1)
local itemstack_slot = armor_inv:get_stack("armor", slot)
if itemstack_slot:is_empty() then
armor_inv:set_stack("armor", slot, itemstack_single)
player_inv:set_stack("armor", slot, itemstack_single)
armor:set_player_armor(user)
armor:update_inventory(user)
armor:play_equip_sound(user, itemstack_single)
itemstack:take_item()
elseif itemstack:get_count() <= 1 then
armor_inv:set_stack("armor", slot, itemstack_single)
player_inv:set_stack("armor", slot, itemstack_single)
armor:set_player_armor(user)
armor:update_inventory(user)
armor:play_equip_sound(user, itemstack_single)
itemstack = ItemStack(itemstack_slot)
end
end
return itemstack
end
minetest.register_tool("mcl_armor:helmet_leather", {
description = S("Leather Cap"),
_doc_items_longdesc = longdesc,
@ -19,6 +75,8 @@ minetest.register_tool("mcl_armor:helmet_leather", {
_mcl_armor_equip = "mcl_armor_equip_leather",
_mcl_armor_unequip = "mcl_armor_unequip_leather",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:helmet_iron", {
@ -32,6 +90,9 @@ minetest.register_tool("mcl_armor:helmet_iron", {
_mcl_armor_equip = "mcl_armor_equip_iron",
_mcl_armor_unequip = "mcl_armor_unequip_iron",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:helmet_gold", {
@ -45,6 +106,8 @@ minetest.register_tool("mcl_armor:helmet_gold", {
_mcl_armor_equip = "mcl_armor_equip_iron",
_mcl_armor_unequip = "mcl_armor_unequip_iron",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:helmet_diamond",{
@ -58,6 +121,8 @@ minetest.register_tool("mcl_armor:helmet_diamond",{
_mcl_armor_equip = "mcl_armor_equip_diamond",
_mcl_armor_unequip = "mcl_armor_unequip_diamond",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:helmet_chain", {
@ -71,6 +136,8 @@ minetest.register_tool("mcl_armor:helmet_chain", {
_mcl_armor_equip = "mcl_armor_equip_chainmail",
_mcl_armor_unequip = "mcl_armor_unequip_chainmail",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
-- Regisiter Torso Armor
@ -86,6 +153,8 @@ minetest.register_tool("mcl_armor:chestplate_leather", {
_mcl_armor_equip = "mcl_armor_equip_leather",
_mcl_armor_unequip = "mcl_armor_unequip_leather",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:chestplate_iron", {
@ -99,6 +168,8 @@ minetest.register_tool("mcl_armor:chestplate_iron", {
_mcl_armor_equip = "mcl_armor_equip_iron",
_mcl_armor_unequip = "mcl_armor_unequip_iron",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:chestplate_gold", {
@ -112,6 +183,8 @@ minetest.register_tool("mcl_armor:chestplate_gold", {
_mcl_armor_equip = "mcl_armor_equip_iron",
_mcl_armor_unequip = "mcl_armor_unequip_iron",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:chestplate_diamond",{
@ -125,6 +198,8 @@ minetest.register_tool("mcl_armor:chestplate_diamond",{
_mcl_armor_equip = "mcl_armor_equip_diamond",
_mcl_armor_unequip = "mcl_armor_unequip_diamond",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:chestplate_chain", {
@ -138,6 +213,8 @@ minetest.register_tool("mcl_armor:chestplate_chain", {
_mcl_armor_equip = "mcl_armor_equip_chainmail",
_mcl_armor_unequip = "mcl_armor_unequip_chainmail",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
-- Regisiter Leg Armor
@ -153,6 +230,8 @@ minetest.register_tool("mcl_armor:leggings_leather", {
_mcl_armor_equip = "mcl_armor_equip_leather",
_mcl_armor_unequip = "mcl_armor_unequip_leather",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:leggings_iron", {
@ -166,6 +245,8 @@ minetest.register_tool("mcl_armor:leggings_iron", {
_mcl_armor_equip = "mcl_armor_equip_iron",
_mcl_armor_unequip = "mcl_armor_unequip_iron",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:leggings_gold", {
@ -179,6 +260,8 @@ minetest.register_tool("mcl_armor:leggings_gold", {
_mcl_armor_equip = "mcl_armor_equip_iron",
_mcl_armor_unequip = "mcl_armor_unequip_iron",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:leggings_diamond",{
@ -192,6 +275,8 @@ minetest.register_tool("mcl_armor:leggings_diamond",{
_mcl_armor_equip = "mcl_armor_equip_diamond",
_mcl_armor_unequip = "mcl_armor_unequip_diamond",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:leggings_chain", {
@ -205,6 +290,8 @@ minetest.register_tool("mcl_armor:leggings_chain", {
_mcl_armor_equip = "mcl_armor_equip_chainmail",
_mcl_armor_unequip = "mcl_armor_unequip_chainmail",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
-- Regisiter Boots
@ -219,6 +306,8 @@ minetest.register_tool("mcl_armor:boots_leather", {
_mcl_armor_equip = "mcl_armor_equip_leather",
_mcl_armor_unequip = "mcl_armor_unequip_leather",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:boots_iron", {
@ -232,6 +321,8 @@ minetest.register_tool("mcl_armor:boots_iron", {
_mcl_armor_equip = "mcl_armor_equip_iron",
_mcl_armor_unequip = "mcl_armor_unequip_iron",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:boots_gold", {
@ -245,6 +336,8 @@ minetest.register_tool("mcl_armor:boots_gold", {
_mcl_armor_equip = "mcl_armor_equip_iron",
_mcl_armor_unequip = "mcl_armor_unequip_iron",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:boots_diamond",{
@ -258,6 +351,8 @@ minetest.register_tool("mcl_armor:boots_diamond",{
_mcl_armor_equip = "mcl_armor_equip_diamond",
_mcl_armor_unequip = "mcl_armor_unequip_diamond",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
minetest.register_tool("mcl_armor:boots_chain", {
@ -271,6 +366,8 @@ minetest.register_tool("mcl_armor:boots_chain", {
_mcl_armor_equip = "mcl_armor_equip_chainmail",
_mcl_armor_unequip = "mcl_armor_unequip_chainmail",
},
on_place = on_armor_use,
on_secondary_use = on_armor_use,
})
-- Register Craft Recipies