From 7a29d8580d0d85b6ca2bfa942cd1a65240727637 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Sun, 2 Jul 2017 19:34:09 +0200 Subject: [PATCH] Add mod: show_wielded_item --- mods/HUD/show_wielded_item/README.md | 19 ++++ mods/HUD/show_wielded_item/depends.txt | 1 + mods/HUD/show_wielded_item/description.txt | 1 + mods/HUD/show_wielded_item/init.lua | 108 ++++++++++++++++++++ mods/HUD/show_wielded_item/mod.conf | 1 + mods/HUD/show_wielded_item/screenshot.png | Bin 0 -> 11859 bytes mods/HUD/show_wielded_item/settingtypes.txt | 5 + 7 files changed, 135 insertions(+) create mode 100644 mods/HUD/show_wielded_item/README.md create mode 100644 mods/HUD/show_wielded_item/depends.txt create mode 100644 mods/HUD/show_wielded_item/description.txt create mode 100644 mods/HUD/show_wielded_item/init.lua create mode 100644 mods/HUD/show_wielded_item/mod.conf create mode 100644 mods/HUD/show_wielded_item/screenshot.png create mode 100644 mods/HUD/show_wielded_item/settingtypes.txt diff --git a/mods/HUD/show_wielded_item/README.md b/mods/HUD/show_wielded_item/README.md new file mode 100644 index 00000000..bba27b6e --- /dev/null +++ b/mods/HUD/show_wielded_item/README.md @@ -0,0 +1,19 @@ +# Show Wielded Item [`show_wielded_item`] +This Minetest mod displays the name of the wielded item above the hotbar and +statbars. + +This mod is compatible with the HUD Bars [`hudbars`] mod. +Compability with other HUD-related mods is possible, but not guaranteed. + +Version: 1.0.0 + +## Credits +Released by Wuzzy. +The original mod code was taken from the file “`item_names.lua`” +found in the Unified Inventory mod maintained by VanessaE. This code +has been later modified. +Original author: 4aiman + +## License +This mod is licensed under GNU LGPLv2 or later +(see ). diff --git a/mods/HUD/show_wielded_item/depends.txt b/mods/HUD/show_wielded_item/depends.txt new file mode 100644 index 00000000..3e1d5c20 --- /dev/null +++ b/mods/HUD/show_wielded_item/depends.txt @@ -0,0 +1 @@ +hudbars? diff --git a/mods/HUD/show_wielded_item/description.txt b/mods/HUD/show_wielded_item/description.txt new file mode 100644 index 00000000..361cab6c --- /dev/null +++ b/mods/HUD/show_wielded_item/description.txt @@ -0,0 +1 @@ +Displays the name of the wielded item. diff --git a/mods/HUD/show_wielded_item/init.lua b/mods/HUD/show_wielded_item/init.lua new file mode 100644 index 00000000..410aeb36 --- /dev/null +++ b/mods/HUD/show_wielded_item/init.lua @@ -0,0 +1,108 @@ +-- Based on 4itemnames mod by 4aiman + +local wield = {} +local wieldindex = {} +local huds = {} +local dtimes = {} +local dlimit = 3 -- HUD element will be hidden after this many seconds + +local hudbars_mod = minetest.get_modpath("hudbars") + +local function set_hud(player) + if not player:is_player() then return end + local player_name = player:get_player_name() + -- Fixed offset in config file + local fixed = tonumber(minetest.settings:get("show_wielded_item_y_offset")) + local off + if fixed and fixed ~= -1 then + -- Manual offset + off = {x=0, y=-fixed} + else + -- Default offset + off = {x=0, y=-101} + + if hudbars_mod then + -- Tweak offset if hudbars mod was found + + local rows = math.floor((#hb.get_hudbar_identifiers()-1) / 2) + 1 + local vmargin = tonumber(minetest.settings:get("hudbars_vmargin")) or 24 + off.y = -76 - vmargin*rows + end + + -- Dirty trick to avoid collision with Minetest's status text (e.g. “Volume changed to 0%”) + if off.y >= -167 and off.y <= -156 then + off.y = -181 + end + end + + huds[player_name] = player:hud_add({ + hud_elem_type = "text", + position = {x=0.5, y=1}, + offset = off, + alignment = {x=0, y=0}, + number = 0xFFFFFF , + text = "", + }) +end + +minetest.register_on_joinplayer(function(player) + set_hud(player) + + local name = player:get_player_name() + wield[name] = player:get_wielded_item():get_name() + wieldindex[name] = player:get_wield_index() +end) + +minetest.register_on_leaveplayer(function(player) + local name = player:get_player_name() + wield[name] = nil + wieldindex[name] = nil +end) + +minetest.register_globalstep(function(dtime) + for _, player in pairs(minetest.get_connected_players()) do + local player_name = player:get_player_name() + local wstack = player:get_wielded_item() + local wname = wstack:get_name() + local windex = player:get_wield_index() + + if dtimes[player_name] and dtimes[player_name] < dlimit then + dtimes[player_name] = dtimes[player_name] + dtime + if dtimes[player_name] > dlimit and huds[player_name] then + player:hud_change(huds[player_name], 'text', "") + end + end + + -- Update HUD when wielded item or wielded index changed + if wname ~= wield[player_name] or windex ~= wieldindex[player_name] then + wieldindex[player_name] = windex + wield[player_name] = wname + dtimes[player_name] = 0 + + if huds[player_name] then + + local def = minetest.registered_items[wname] + local meta = wstack:get_meta() + + --[[ Get description. Order of preference: + * description from metadata + * description from item definition + * itemstring ]] + local desc = meta:get_string("description") + if (desc == nil or desc == "") and def then + desc = def.description + end + if desc == nil or desc == "" then + desc = wname + end + -- Cut off item description after first newline + local firstnewline = string.find(desc, "\n") + if firstnewline then + desc = string.sub(desc, 1, firstnewline-1) + end + player:hud_change(huds[player_name], 'text', desc) + end + end + end +end) + diff --git a/mods/HUD/show_wielded_item/mod.conf b/mods/HUD/show_wielded_item/mod.conf new file mode 100644 index 00000000..fdedae0f --- /dev/null +++ b/mods/HUD/show_wielded_item/mod.conf @@ -0,0 +1 @@ +name = show_wielded_item diff --git a/mods/HUD/show_wielded_item/screenshot.png b/mods/HUD/show_wielded_item/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..50c2c626051b8ba80d67b178defc0401bf264814 GIT binary patch literal 11859 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