Upgrade show_wielded_item mod to 1.2.1

This commit is contained in:
Wuzzy 2024-11-22 23:17:11 +01:00
parent d47fabb32d
commit c9bbf3235d
7 changed files with 91 additions and 20 deletions

View File

@ -1,11 +1,24 @@
# Show Wielded Item [`show_wielded_item`]
This Luanti mod displays the name of the wielded item above the hotbar and
This 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.
This mod *disables* itself if Unified Inventory is detected to show item names.
Compatibility with other HUD-related mods is possible, but not guaranteed.
Version: 1.0.0
Version: 1.2.1
## A note for Unified Inventory users
The mod Unified Inventory adds its own wielded item display (as of 16/08/2024).
So if you use that mod and have the item names features of that mod
enabled, then Unified Inventory takes precedence.
If the Unified Inventory mod was detected, and the setting
`unified_inventory_item_names` is set to `true`, then
`show_wielded_item` wont do anything and let Unified Inventory
display the wielded item instead. A message will appear in
the debug log if this happens.
## Credits
Released by Wuzzy.

View File

@ -0,0 +1,2 @@
hudbars?
unified_inventory?

View File

@ -7,6 +7,23 @@ local dtimes = {}
local dlimit = 3 -- HUD element will be hidden after this many seconds
local hudbars_mod = minetest.get_modpath("hudbars")
local unified_inventory_mod = minetest.get_modpath("unified_inventory")
-- Legacy support: Name of the HUD type field for 'hud_add'.
local hud_type_field_name
if minetest.features.hud_def_type_field then
-- engine version 5.9.0 and later
hud_type_field_name = "type"
else
-- All engine versions before 5.9.0
hud_type_field_name = "hud_elem_type"
end
-- Disable mod if Unified Inventory item names feature is enabled
if unified_inventory_mod and minetest.settings:get_bool("unified_inventory_item_names") ~= false then
minetest.log("action", "[show_wielded_item] Unified Inventory's item names feature was detected! Running show_wielded_item is pointless now, so it won't do anything")
return
end
local function set_hud(player)
if not player:is_player() then return end
@ -36,12 +53,13 @@ local function set_hud(player)
end
huds[player_name] = player:hud_add({
hud_elem_type = "text",
[hud_type_field_name] = "text",
position = {x=0.5, y=1},
offset = off,
alignment = {x=0, y=0},
number = 0xFFFFFF ,
text = "",
z_index = 100,
})
end
@ -59,6 +77,15 @@ minetest.register_on_leaveplayer(function(player)
wieldindex[name] = nil
end)
local function get_first_line(text)
-- Cut off text after first newline
local firstnewline = string.find(text, "\n")
if firstnewline then
text = string.sub(text, 1, firstnewline-1)
end
return text
end
minetest.register_globalstep(function(dtime)
for _, player in pairs(minetest.get_connected_players()) do
local player_name = player:get_player_name()
@ -81,28 +108,45 @@ minetest.register_globalstep(function(dtime)
if huds[player_name] then
-- Get description (various fallback checks for old Luanti/Minetest versions)
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
local desc
if wstack.get_short_description then
-- get_short_description()
desc = wstack:get_short_description()
end
if desc == nil or desc == "" then
if (not desc or desc == "") and wstack.get_description then
-- get_description()
desc = wstack:get_description()
desc = get_first_line(desc)
end
if (not desc or desc == "") and not wstack.get_description then
-- Metadata (old versions only)
local meta = wstack:get_meta()
desc = meta:get_string("description")
desc = get_first_line(desc)
end
if not desc or desc == "" then
-- Item definition
desc = def.description
desc = get_first_line(desc)
end
if not desc or desc == "" then
-- Final fallback: itemstring
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)
-- Print description
if desc then
-- Optionally append the 'technical' itemname
local tech = minetest.settings:get_bool("show_wielded_item_itemname", false)
if tech and desc ~= "" then
desc = desc .. " ["..wname.."]"
end
player:hud_change(huds[player_name], 'text', desc)
end
end
end
end
end)

View File

@ -0,0 +1,4 @@
# textdomain: show_wielded_item
Show Wielded Item=Getragenen Gegenstand anzeigen
Displays the name of the wielded item.=Zeigt den Namen des getragenen Gegenstands an.

View File

@ -0,0 +1,4 @@
# textdomain: show_wielded_item
Show Wielded Item=
Displays the name of the wielded item.=

View File

@ -1,3 +1,4 @@
name = show_wielded_item
title = Show Wielded Item
description = Displays the name of the wielded item.
optional_depends = hudbars
optional_depends = hudbars, unified_inventory

View File

@ -1,3 +1,6 @@
#If true, also append the 'technical' itemname.
show_wielded_item_itemname (Show technical itemname) bool false
#Use this setting to manually set the vertical offset of the label which shows
#the name of the wielded item. The offset is in pixels from the bottom of the
#screen.