From 6426e55746319fc843fe9e505b95de706522668a Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Tue, 18 Feb 2020 22:17:52 +0100 Subject: [PATCH] Add on_secondary_use for heads and pumpkin --- mods/ITEMS/mcl_armor/armor.lua | 63 ++++++++ mods/ITEMS/mcl_armor/init.lua | 136 ++++++------------ mods/ITEMS/mcl_farming/depends.txt | 1 + .../mcl_farming/locale/mcl_farming.de.tr | 2 +- mods/ITEMS/mcl_farming/locale/template.txt | 2 +- mods/ITEMS/mcl_farming/pumpkin.lua | 7 +- mods/ITEMS/mcl_heads/depends.txt | 1 + mods/ITEMS/mcl_heads/init.lua | 9 +- 8 files changed, 120 insertions(+), 101 deletions(-) diff --git a/mods/ITEMS/mcl_armor/armor.lua b/mods/ITEMS/mcl_armor/armor.lua index ecb07e1c4d..c51001c84a 100644 --- a/mods/ITEMS/mcl_armor/armor.lua +++ b/mods/ITEMS/mcl_armor/armor.lua @@ -32,6 +32,69 @@ elseif minetest.get_modpath("wardrobe") then skin_mod = "wardrobe" end +function armor.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) + 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 + armor.def = { count = 0, } diff --git a/mods/ITEMS/mcl_armor/init.lua b/mods/ITEMS/mcl_armor/init.lua index 05b12db2e4..1eb03d32bc 100644 --- a/mods/ITEMS/mcl_armor/init.lua +++ b/mods/ITEMS/mcl_armor/init.lua @@ -8,62 +8,6 @@ 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, @@ -75,8 +19,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:helmet_iron", { @@ -91,8 +35,8 @@ minetest.register_tool("mcl_armor:helmet_iron", { _mcl_armor_unequip = "mcl_armor_unequip_iron", }, - on_place = on_armor_use, - on_secondary_use = on_armor_use, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:helmet_gold", { @@ -106,8 +50,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:helmet_diamond",{ @@ -121,8 +65,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:helmet_chain", { @@ -136,8 +80,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) -- Regisiter Torso Armor @@ -153,8 +97,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:chestplate_iron", { @@ -168,8 +112,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:chestplate_gold", { @@ -183,8 +127,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:chestplate_diamond",{ @@ -198,8 +142,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:chestplate_chain", { @@ -213,8 +157,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) -- Regisiter Leg Armor @@ -230,8 +174,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:leggings_iron", { @@ -245,8 +189,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:leggings_gold", { @@ -260,8 +204,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:leggings_diamond",{ @@ -275,8 +219,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:leggings_chain", { @@ -290,8 +234,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) -- Regisiter Boots @@ -306,8 +250,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:boots_iron", { @@ -321,8 +265,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:boots_gold", { @@ -336,8 +280,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:boots_diamond",{ @@ -351,8 +295,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) minetest.register_tool("mcl_armor:boots_chain", { @@ -366,8 +310,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, + on_place = armor.on_armor_use, + on_secondary_use = armor.on_armor_use, }) -- Register Craft Recipies diff --git a/mods/ITEMS/mcl_farming/depends.txt b/mods/ITEMS/mcl_farming/depends.txt index 1d45560144..0ed4f3f583 100644 --- a/mods/ITEMS/mcl_farming/depends.txt +++ b/mods/ITEMS/mcl_farming/depends.txt @@ -3,5 +3,6 @@ mcl_sounds mcl_wool mcl_torches mcl_weather +mcl_armor? mobs_mc doc? diff --git a/mods/ITEMS/mcl_farming/locale/mcl_farming.de.tr b/mods/ITEMS/mcl_farming/locale/mcl_farming.de.tr index 7f14774cc6..bdf9c9eaa6 100644 --- a/mods/ITEMS/mcl_farming/locale/mcl_farming.de.tr +++ b/mods/ITEMS/mcl_farming/locale/mcl_farming.de.tr @@ -66,7 +66,7 @@ A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blo Faceless Pumpkin=Gesichtsloser Kürbis A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds.=Ein gesichtsloser Kürbis ist ein dekorativer Block. Mit einer Schere kann man in ihm ein Muster schnitzen, um Kürbissamen zu erhalten. Pumpkin=Kürbis -A pumpkin can be worn as a helmet for fun, but it doesn't offer any protection. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.=Einen Kürbis kann zum Spaß als Helm getragen werden, aber er bietet keinen Schutz. Kürbisse wachsen aus Kürbisstängeln, welche wiederum aus Kürbissamen wachsen. +A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.=Einen Kürbis kann zum Spaß als Helm getragen werden, aber er bietet keinen Schutz. Kürbisse wachsen aus Kürbisstängeln, welche wiederum aus Kürbissamen wachsen. Jack o'Lantern=Kürbislaterne A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly.=Eine Kürbislaterne ist eine traditionelle Dekoration für Halloween. Sie leuchtet hell. Pumpkin Pie=Kürbiskuchen diff --git a/mods/ITEMS/mcl_farming/locale/template.txt b/mods/ITEMS/mcl_farming/locale/template.txt index fb124df678..e0b73dda12 100644 --- a/mods/ITEMS/mcl_farming/locale/template.txt +++ b/mods/ITEMS/mcl_farming/locale/template.txt @@ -66,7 +66,7 @@ A mature pumpkin stem attempts to grow a pumpkin at one of its four adjacent blo Faceless Pumpkin= A faceless pumpkin is a decorative block. It can be carved with shears to obtain pumpkin seeds.= Pumpkin= -A pumpkin can be worn as a helmet for fun, but it doesn't offer any protection. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.= +A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.= Jack o'Lantern= A jack o'lantern is a traditional Halloween decoration made from a pumpkin. It glows brightly.= Pumpkin Pie= diff --git a/mods/ITEMS/mcl_farming/pumpkin.lua b/mods/ITEMS/mcl_farming/pumpkin.lua index dae762ad01..d90b6e1826 100644 --- a/mods/ITEMS/mcl_farming/pumpkin.lua +++ b/mods/ITEMS/mcl_farming/pumpkin.lua @@ -107,11 +107,16 @@ minetest.register_node("mcl_farming:pumpkin", pumpkin_base_def) local pumpkin_face_base_def = table.copy(pumpkin_base_def) pumpkin_face_base_def.description = S("Pumpkin") -pumpkin_face_base_def._doc_items_longdesc = S("A pumpkin can be worn as a helmet for fun, but it doesn't offer any protection. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.") +pumpkin_face_base_def._doc_items_longdesc = S("A pumpkin can be worn as a helmet. Pumpkins grow from pumpkin stems, which in turn grow from pumpkin seeds.") pumpkin_face_base_def._doc_items_usagehelp = nil pumpkin_face_base_def.tiles = {"farming_pumpkin_top.png", "farming_pumpkin_top.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_side.png", "farming_pumpkin_face.png"} pumpkin_face_base_def.groups.armor_head=1 +pumpkin_face_base_def._mcl_armor_mob_range_factor = 0 +pumpkin_face_base_def._mcl_armor_mob_range_mob = "mobs_mc:enderman" pumpkin_face_base_def.groups.non_combat_armor=1 +if minetest.get_modpath("mcl_armor") then + pumpkin_face_base_def.on_secondary_use = armor.on_armor_use +end -- Register stem growth mcl_farming:add_plant("plant_pumpkin_stem", "mcl_farming:pumpkintige_unconnect", {"mcl_farming:pumpkin_1", "mcl_farming:pumpkin_2", "mcl_farming:pumpkin_3", "mcl_farming:pumpkin_4", "mcl_farming:pumpkin_5", "mcl_farming:pumpkin_6", "mcl_farming:pumpkin_7"}, 30, 5) diff --git a/mods/ITEMS/mcl_heads/depends.txt b/mods/ITEMS/mcl_heads/depends.txt index 60d34245a6..01846722d5 100644 --- a/mods/ITEMS/mcl_heads/depends.txt +++ b/mods/ITEMS/mcl_heads/depends.txt @@ -1,3 +1,4 @@ mcl_sounds +mcl_armor? screwdriver? doc? diff --git a/mods/ITEMS/mcl_heads/init.lua b/mods/ITEMS/mcl_heads/init.lua index bc55fe4947..ffc768f7bc 100644 --- a/mods/ITEMS/mcl_heads/init.lua +++ b/mods/ITEMS/mcl_heads/init.lua @@ -3,6 +3,11 @@ local S = minetest.get_translator("mcl_heads") local mod_doc = minetest.get_modpath("doc") local mod_screwdriver = minetest.get_modpath("screwdriver") +local equip_armor +if minetest.get_modpath("mcl_armor") then + equip_armor = armor.on_armor_use +end + -- Heads system local function addhead(name, texture, desc, longdesc, rangemob, rangefactor) @@ -101,12 +106,12 @@ local function addhead(name, texture, desc, longdesc, rangemob, rangefactor) itemstack:set_name(itemstring) return itemstack end, + on_secondary_use = equip_armor, + on_rotate = on_rotate_floor, _mcl_blast_resistance = 5, _mcl_hardness = 1, - _mcl_armor_mob_range_factor = rangefactor, - _mcl_armor_mob_range_mob = rangemob, }) minetest.register_node("mcl_heads:"..name.."_wall", {