mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-12-26 09:59:33 +01:00
Merge pull request 'Fix invisibility potion when changing skin' (#2661) from potions into master
Reviewed-on: https://git.minetest.land/MineClone2/MineClone2/pulls/2661 Reviewed-by: cora <cora@noreply.git.minetest.land>
This commit is contained in:
commit
103cde2db4
9 changed files with 89 additions and 72 deletions
|
@ -189,9 +189,10 @@ minetest.register_on_joinplayer(function(player)
|
|||
return_fields(player, "enchanting_lapis")
|
||||
end)
|
||||
|
||||
|
||||
dofile(minetest.get_modpath(minetest.get_current_modname()).."/creative.lua")
|
||||
|
||||
mcl_player.register_on_visual_change(mcl_inventory.update_inventory_formspec)
|
||||
|
||||
local mt_is_creative_enabled = minetest.is_creative_enabled
|
||||
|
||||
function minetest.is_creative_enabled(name)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
name = mcl_inventory
|
||||
author = BlockMen
|
||||
description = Adds the player inventory and creative inventory.
|
||||
depends = mcl_init, mcl_formspec, mcl_enchanting
|
||||
optional_depends = mcl_armor, mcl_brewing, mcl_potions, mcl_enchanting, mcl_craftguide, mcl_player
|
||||
depends = mcl_init, mcl_formspec, mcl_enchanting, mcl_player
|
||||
optional_depends = mcl_armor, mcl_brewing, mcl_potions, mcl_enchanting, mcl_craftguide
|
||||
|
|
|
@ -405,11 +405,11 @@ function mcl_potions._reset_player_effects(player, set_hud)
|
|||
|
||||
mcl_weather.skycolor.update_sky_color({player})
|
||||
|
||||
mcl_potions._clear_cached_player_data(player)
|
||||
|
||||
if set_hud ~= false then
|
||||
potions_set_hud(player)
|
||||
end
|
||||
|
||||
mcl_potions._clear_cached_player_data(player)
|
||||
end
|
||||
|
||||
function mcl_potions._save_player_effects(player)
|
||||
|
@ -561,45 +561,24 @@ function mcl_potions.is_obj_hit(self, pos)
|
|||
end
|
||||
|
||||
|
||||
function mcl_potions.make_invisible(player, toggle)
|
||||
|
||||
if not player then
|
||||
return false
|
||||
function mcl_potions.make_invisible(obj_ref, hide)
|
||||
if obj_ref:is_player() then
|
||||
if hide then
|
||||
mcl_player.player_set_visibility(obj_ref, false)
|
||||
obj_ref:set_nametag_attributes({ color = { a = 0 } })
|
||||
else
|
||||
mcl_player.player_set_visibility(obj_ref, true)
|
||||
obj_ref:set_nametag_attributes({ color = { r = 255, g = 255, b = 255, a = 255 } })
|
||||
end
|
||||
else
|
||||
if hide then
|
||||
local luaentity = obj_ref:get_luaentity()
|
||||
EF.invisible[obj_ref].old_size = luaentity.visual_size
|
||||
obj_ref:set_properties({ visual_size = { x = 0, y = 0 } })
|
||||
else
|
||||
obj_ref:set_properties({ visual_size = EF.invisible[obj_ref].old_size })
|
||||
end
|
||||
end
|
||||
|
||||
local is_player = player:is_player()
|
||||
local entity = player:get_luaentity()
|
||||
--local playername = player:get_player_name()
|
||||
local skin_file
|
||||
|
||||
if toggle then -- hide player
|
||||
|
||||
skin_file = "mobs_mc_empty.png"
|
||||
|
||||
if entity then
|
||||
EF.invisible[player].old_size = entity.visual_size
|
||||
elseif not is_player then -- if not a player or entity, do nothing
|
||||
return
|
||||
end
|
||||
|
||||
if is_player then
|
||||
mcl_player.player_set_skin(player, skin_file)
|
||||
elseif not is_player then
|
||||
player:set_properties({visual_size = {x = 0, y = 0}})
|
||||
end
|
||||
player:set_nametag_attributes({color = {a = 0}})
|
||||
|
||||
elseif EF.invisible[player] then -- show player
|
||||
|
||||
if is_player then
|
||||
mcl_skins.update_player_skin(player)
|
||||
elseif not is_player then
|
||||
player:set_properties({visual_size = EF.invisible[player].old_size})
|
||||
end
|
||||
player:set_nametag_attributes({color = {r = 255, g = 255, b = 255, a = 255}})
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ end
|
|||
|
||||
if mcl_skins_enabled then
|
||||
-- Change the player's hand to their skin
|
||||
mcl_skins.register_on_set_skin(function(player)
|
||||
mcl_player.register_on_visual_change(function(player)
|
||||
local node_id = mcl_skins.get_node_id_by_player(player)
|
||||
player:get_inventory():set_stack("hand", 1, "mcl_meshhand:" .. node_id)
|
||||
end)
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
name = mcl_meshhand
|
||||
author = jordan4ibanez
|
||||
description = Applies the player skin texture to the hand.
|
||||
depends = mcl_tools
|
||||
depends = mcl_tools, mcl_player
|
||||
optional_depends = mcl_skins
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
local sf = string.format
|
||||
|
||||
-- Minetest 0.4 mod: player
|
||||
-- See README.txt for licensing and other information.
|
||||
mcl_player = {}
|
||||
|
@ -53,17 +55,55 @@ local player_model = {}
|
|||
local player_textures = {}
|
||||
local player_anim = {}
|
||||
local player_sneak = {}
|
||||
local player_visible = {}
|
||||
mcl_player.player_attached = {}
|
||||
|
||||
function mcl_player.player_get_animation(player)
|
||||
local name = player:get_player_name()
|
||||
local textures = player_textures[name]
|
||||
|
||||
if not player_visible[name] then
|
||||
textures = table.copy(textures)
|
||||
textures[1] = "blank.png"
|
||||
end
|
||||
|
||||
return {
|
||||
model = player_model[name],
|
||||
textures = player_textures[name],
|
||||
textures = textures,
|
||||
animation = player_anim[name],
|
||||
visibility = player_visibility[name]
|
||||
}
|
||||
end
|
||||
|
||||
local registered_on_visual_change = {}
|
||||
|
||||
function mcl_player.register_on_visual_change(func)
|
||||
table.insert(registered_on_visual_change, func)
|
||||
end
|
||||
|
||||
local function update_player_textures(player)
|
||||
local name = player:get_player_name()
|
||||
local textures = player_textures[name]
|
||||
|
||||
if not player_visible[name] then
|
||||
textures = table.copy(textures)
|
||||
textures[1] = "blank.png"
|
||||
end
|
||||
|
||||
player:set_properties({ textures = textures })
|
||||
|
||||
-- Delay calling the callbacks because mods (including mcl_player)
|
||||
-- need to fully initialize player data from minetest.register_on_joinplayer
|
||||
-- before callbacks run
|
||||
minetest.after(0.1, function()
|
||||
if player:is_player() then
|
||||
for i, func in ipairs(registered_on_visual_change) do
|
||||
func(player)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
-- Called when a player's appearance needs to be updated
|
||||
function mcl_player.player_set_model(player, model_name)
|
||||
local name = player:get_player_name()
|
||||
|
@ -74,11 +114,11 @@ function mcl_player.player_set_model(player, model_name)
|
|||
end
|
||||
player:set_properties({
|
||||
mesh = model_name,
|
||||
textures = player_textures[name] or model.textures,
|
||||
visual = "mesh",
|
||||
visual_size = model.visual_size or {x=1, y=1},
|
||||
damage_texture_modifier = "^[colorize:red:130",
|
||||
})
|
||||
update_player_textures(player)
|
||||
mcl_player.player_set_animation(player, "stand")
|
||||
else
|
||||
player:set_properties({
|
||||
|
@ -89,25 +129,36 @@ function mcl_player.player_set_model(player, model_name)
|
|||
player_model[name] = model_name
|
||||
end
|
||||
|
||||
local function set_texture(player, index, texture)
|
||||
local textures = player_textures[player:get_player_name()]
|
||||
textures[index] = texture
|
||||
player:set_properties({textures = textures})
|
||||
function mcl_player.player_set_visibility(player, visible)
|
||||
local name = player:get_player_name()
|
||||
if player_visible[name] == visible then return end
|
||||
player_visible[name] = visible
|
||||
update_player_textures(player)
|
||||
end
|
||||
|
||||
function mcl_player.player_set_skin(player, texture)
|
||||
set_texture(player, 1, texture)
|
||||
local name = player:get_player_name()
|
||||
player_textures[name][1] = texture
|
||||
update_player_textures(player)
|
||||
end
|
||||
|
||||
function mcl_player.player_set_armor(player, texture)
|
||||
set_texture(player, 2, texture)
|
||||
local name = player:get_player_name()
|
||||
player_textures[name][2] = texture
|
||||
update_player_textures(player)
|
||||
end
|
||||
|
||||
function mcl_player.get_player_formspec_model(player, x, y, w, h, fsname)
|
||||
local name = player:get_player_name()
|
||||
local model = player_model[name]
|
||||
local anim = models[model].animations[player_anim[name]]
|
||||
return "model["..x..","..y..";"..w..","..h..";"..fsname..";"..model..";"..table.concat(player_textures[name], ",")..";0,".. 180 ..";false;false;"..anim.x..","..anim.y.."]"
|
||||
local textures = player_textures[name]
|
||||
if not player_visible[name] then
|
||||
textures = table.copy(textures)
|
||||
textures[1] = "blank.png"
|
||||
end
|
||||
return sf("model[%s,%s;%s,%s;%s;%s;%s;0,180;false;false;%s,%s]", x, y, w, h, fsname, model,
|
||||
table.concat(textures, ","), anim.x, anim.y)
|
||||
end
|
||||
|
||||
function mcl_player.player_set_animation(player, anim_name, speed)
|
||||
|
@ -128,6 +179,7 @@ end
|
|||
minetest.register_on_joinplayer(function(player)
|
||||
local name = player:get_player_name()
|
||||
mcl_player.player_attached[name] = false
|
||||
player_visible[name] = true
|
||||
mcl_player.player_set_model(player, "character.b3d")
|
||||
player_textures[name] = {"character.png", "blank.png", "blank.png"}
|
||||
--player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30)
|
||||
|
@ -139,6 +191,8 @@ minetest.register_on_leaveplayer(function(player)
|
|||
player_model[name] = nil
|
||||
player_anim[name] = nil
|
||||
player_textures[name] = nil
|
||||
player_sneak[name] = nil
|
||||
player_visible[name] = nil
|
||||
end)
|
||||
|
||||
-- Localize for better performance.
|
||||
|
|
|
@ -44,10 +44,6 @@ Can be one of: "arm", "base", "footwear", "eye", "mouth", "bottom", "top", "hair
|
|||
`page_num` The page number to display of there are multiple pages of items.
|
||||
This parameter is optional. Must be a number. If it is not a valid page number the closest page number will be shown.
|
||||
|
||||
### `mcl_skins.register_on_set_skin(func)`
|
||||
Register a function to be called whenever a player skin changes.
|
||||
The function will be given a player ObjectRef as a parameter.
|
||||
|
||||
### `mcl_skins.get_skin_list()`
|
||||
This function is used by mods that want a list of skins to register nodes that use the player skin as a texture.
|
||||
Returns an array of tables containing information about each skin.
|
||||
|
|
|
@ -127,12 +127,6 @@ function mcl_skins.update_player_skin(player)
|
|||
end
|
||||
local model = slim_arms and "mcl_armor_character_female.b3d" or "mcl_armor_character.b3d"
|
||||
mcl_player.player_set_model(player, model)
|
||||
|
||||
mcl_inventory.update_inventory_formspec(player)
|
||||
|
||||
for i=1, #mcl_skins.registered_on_set_skins do
|
||||
mcl_skins.registered_on_set_skins[i](player)
|
||||
end
|
||||
end
|
||||
|
||||
-- Load player skin on join
|
||||
|
@ -170,12 +164,6 @@ minetest.register_on_leaveplayer(function(player)
|
|||
mcl_skins.players[player] = nil
|
||||
end)
|
||||
|
||||
mcl_skins.registered_on_set_skins = {}
|
||||
|
||||
function mcl_skins.register_on_set_skin(func)
|
||||
table.insert(mcl_skins.registered_on_set_skins, func)
|
||||
end
|
||||
|
||||
function mcl_skins.show_formspec(player, active_tab, page_num)
|
||||
local skin = mcl_skins.players[player]
|
||||
local default = #mcl_skins.simple_skins > 0 and "skin" or "template"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
name = mcl_skins
|
||||
author = MrRar
|
||||
description = Advanced player skin customization.
|
||||
depends = mcl_player,mcl_inventory
|
||||
depends = mcl_player
|
||||
|
|
Loading…
Reference in a new issue