From c5ad0d5f33388340055e1776599bf51d11de1a12 Mon Sep 17 00:00:00 2001 From: Johannes Fritz Date: Wed, 20 Apr 2022 16:56:17 -0500 Subject: [PATCH] Remove image stack wieldview --- mods/PLAYER/mcl_player/init.lua | 4 - mods/PLAYER/mcl_playerplus/init.lua | 12 ++- mods/PLAYER/mcl_wieldview/README.txt | 13 +-- mods/PLAYER/mcl_wieldview/init.lua | 150 ++++++--------------------- mods/PLAYER/mcl_wieldview/mod.conf | 1 - 5 files changed, 41 insertions(+), 139 deletions(-) diff --git a/mods/PLAYER/mcl_player/init.lua b/mods/PLAYER/mcl_player/init.lua index 9d910a89a..f3e5ad0c3 100644 --- a/mods/PLAYER/mcl_player/init.lua +++ b/mods/PLAYER/mcl_player/init.lua @@ -109,10 +109,6 @@ function mcl_player.player_set_armor(player, texture, preview) set_preview(player, "armor", preview) end -function mcl_player.player_set_wielditem(player, texture) - set_texture(player, 3, texture) -end - function mcl_player.player_get_preview(player) local preview = player:get_meta():get_string("mcl_player:skin_preview") if preview == "" then diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 85755e0de..85be89aa0 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -324,15 +324,17 @@ minetest.register_globalstep(function(dtime) end if wielded_def and wielded_def._mcl_toollike_wield then - set_bone_position_conditional(player,"Wield_Item", vector.new(0,3.9,1.3), vector.new(90,0,0)) + set_bone_position_conditional(player,"Wield_Item", vector.new(0,4.7,3.1), vector.new(90,-45,90)) elseif string.find(wielded:get_name(), "mcl_bows:bow") then - set_bone_position_conditional(player,"Wield_Item", vector.new(.5,4.5,-1.6), vector.new(90,0,20)) + set_bone_position_conditional(player,"Wield_Item", vector.new(1,4,0), vector.new(90,130,115)) elseif string.find(wielded:get_name(), "mcl_bows:crossbow_loaded") then - set_bone_position_conditional(player,"Wield_Item", vector.new(-1.5,5.7,1.8), vector.new(64,90,0)) + set_bone_position_conditional(player,"Wield_Item", vector.new(0,5.2,1.2), vector.new(0,180,73)) elseif string.find(wielded:get_name(), "mcl_bows:crossbow") then - set_bone_position_conditional(player,"Wield_Item", vector.new(-1.5,5.7,1.8), vector.new(90,90,0)) + set_bone_position_conditional(player,"Wield_Item", vector.new(0,5.2,1.2), vector.new(0,180,45)) + elseif wielded_def.inventory_image == "" then + set_bone_position_conditional(player,"Wield_Item", vector.new(0,6,2), vector.new(180,-45,0)) else - set_bone_position_conditional(player,"Wield_Item", vector.new(-1.5,4.9,1.8), vector.new(135,0,90)) + set_bone_position_conditional(player,"Wield_Item", vector.new(0,5.3,2), vector.new(90,0,0)) end -- controls right and left arms pitch when shooting a bow or blocking diff --git a/mods/PLAYER/mcl_wieldview/README.txt b/mods/PLAYER/mcl_wieldview/README.txt index 183e8c6d5..b118d9ba6 100644 --- a/mods/PLAYER/mcl_wieldview/README.txt +++ b/mods/PLAYER/mcl_wieldview/README.txt @@ -3,19 +3,8 @@ Makes hand wielded items visible to other players. -default settings: [minetest.conf] - -# Set number of seconds between visible wielded item updates. -wieldview_update_time = 2 - -# Show nodes as tiles, disabled by default -wieldview_node_tiles = false - Info for modders ################ -Wield image transformation: To apply a simple transformation to the item in -hand, add the group “wieldview_transform” to the item definition. The group -rating equals one of the numbers used for the [transform texture modifier -of the Lua API. +Add items to the "no_wieldview" group with a raiting of 1 and it will not be shown by the wieldview. diff --git a/mods/PLAYER/mcl_wieldview/init.lua b/mods/PLAYER/mcl_wieldview/init.lua index 92175a17e..660f5edb3 100644 --- a/mods/PLAYER/mcl_wieldview/init.lua +++ b/mods/PLAYER/mcl_wieldview/init.lua @@ -1,131 +1,47 @@ -local get_connected_players = minetest.get_connected_players local get_item_group = minetest.get_item_group -mcl_wieldview = { - players = {} -} - -function mcl_wieldview.get_item_texture(itemname) - if itemname == "" or minetest.get_item_group(itemname, "no_wieldview") ~= 0 then - return - end - - local def = minetest.registered_items[itemname] - if not def then - return - end - - local inv_image = def.inventory_image - if inv_image == "" then - return - end - - local texture = inv_image - - local transform = get_item_group(itemname, "wieldview_transform") - if transform then - -- This actually works with groups ratings because transform1, transform2, etc. - -- have meaning and transform0 is used for identidy, so it can be ignored - texture = texture .. "^[transform" .. transform - end - - return texture -end - -function mcl_wieldview.update_wielded_item(player) - if not player then - return - end - local itemstack = player:get_wielded_item() - local itemname = itemstack:get_name() - - local def = mcl_wieldview.players[player] - - if def and (def.item == itemname) then - return - end - - local texture = mcl_wieldview.get_item_texture(itemname) or "blank.png" - - local new_def = { - item = itemname, - texture = texture, - } - mcl_wieldview.players[player] = new_def - - mcl_player.player_set_wielditem(player, texture) -end - minetest.register_on_joinplayer(function(player) - mcl_wieldview.players[player] = {item = "", texture = "blank.png"} - - minetest.after(0, function() - if not player:is_player() then - return - end - - mcl_wieldview.update_wielded_item(player) - - local itementity = minetest.add_entity(player:get_pos(), "mcl_wieldview:wieldnode") - itementity:set_attach(player, "Hand_Right", vector.new(0, 1, 0), vector.new(90, 0, 45)) - itementity:get_luaentity().wielder = player - end) -end) - -minetest.register_on_leaveplayer(function(player) - mcl_wieldview.players[player] = nil -end) - -minetest.register_globalstep(function() - local players = get_connected_players() - for i = 1, #players do - mcl_wieldview.update_wielded_item(players[i]) + if not player or not player:is_player() then + return end + local itementity = minetest.add_entity(player:get_pos(), "mcl_wieldview:wieldnode") + if not itementity then return end + itementity:set_attach(player, "Wield_Item", vector.new(0, 0, 0), vector.new(0, 0, 0)) + --itementity:set_attach(player, "Hand_Right", vector.new(0, 1, 0), vector.new(90, 45, 90)) + itementity:get_luaentity()._wielder = player end) minetest.register_entity("mcl_wieldview:wieldnode", { - initial_properties = { - hp_max = 1, - visual = "wielditem", - physical = false, - textures = {""}, - automatic_rotate = 1.5, - is_visible = true, - pointable = false, - collide_with_objects = false, - static_save = false, - collisionbox = {-0.21, -0.21, -0.21, 0.21, 0.21, 0.21}, - selectionbox = {-0.21, -0.21, -0.21, 0.21, 0.21, 0.21}, - visual_size = {x = 0.21, y = 0.21}, - }, + visual = "wielditem", + physical = false, + pointable = false, + collide_with_objects = false, + static_save = false, + visual_size = {x = 0.21, y = 0.21}, - itemstring = "", + _item = "", on_step = function(self) - if self.wielder:is_player() then - local def = mcl_wieldview.players[self.wielder] - local itemstring = def.item - - if self.itemstring ~= itemstring then - local itemdef = minetest.registered_items[itemstring] - self.object:set_properties({glow = itemdef and itemdef.light_source or 0}) - - -- wield item as cubic - if def.texture == "blank.png" then - self.object:set_properties({textures = {itemstring}}) - -- wield item as flat - else - self.object:set_properties({textures = {""}}) - end - - if minetest.get_item_group(itemstring, "no_wieldview") ~= 0 then - self.object:set_properties({textures = {""}}) - end - - self.itemstring = itemstring - end - else + if not self._wielder or not self._wielder:is_player() then self.object:remove() end + local player = self._wielder + + local item = player:get_wielded_item():get_name() + + if item == self._item then return end + + self._item = item + + if get_item_group(item, "no_wieldview") ~= 0 then + item = "" + end + + local item_def = minetest.registered_items[item] + self.object:set_properties({ + glow = item_def and item_def.light_source or 0, + wield_item = item, + is_visible = item ~= "" + }) end, }) diff --git a/mods/PLAYER/mcl_wieldview/mod.conf b/mods/PLAYER/mcl_wieldview/mod.conf index 4b3097876..62dda432f 100644 --- a/mods/PLAYER/mcl_wieldview/mod.conf +++ b/mods/PLAYER/mcl_wieldview/mod.conf @@ -1,4 +1,3 @@ name = mcl_wieldview author = stujones11 description = Makes hand wielded items visible to other players. -depends = mcl_player