From 7436fcdffedf5e37fb11370c3cd544afb4cae539 Mon Sep 17 00:00:00 2001 From: Thomas--S Date: Mon, 12 Oct 2020 07:47:57 +0200 Subject: [PATCH] Improve API for third party mods (#21) * Add `armor:update_skin(player_name)` function (useful for skin mods) * Add option to prevent physics override (useful for Techage Jetpack mod) * Add documentation --- 3d_armor/README.txt | 9 +++++++++ 3d_armor/api.lua | 15 ++++++++++++++- 3d_armor/init.lua | 9 +-------- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/3d_armor/README.txt b/3d_armor/README.txt index 27c30eb..b8980b5 100644 --- a/3d_armor/README.txt +++ b/3d_armor/README.txt @@ -172,6 +172,10 @@ armor:unequip(player, armor_name) Unequip the armor, adding the itemstack to the main inventory. +armor:update_skin(player_name) + +Triggers a skin update with the same action as if a field with `skins_set` was submitted. + Item Callbacks: on_equip = func(player, index, stack) @@ -201,3 +205,8 @@ armor:register_on_update(function(player) print(player:get_player_name().." armor updated!") end) + +Note: + +The player physics modifications won't be applied via `set_physics_override` if `player_physics_locked` is set to 1 +in the respective player's meta. diff --git a/3d_armor/api.lua b/3d_armor/api.lua index 4254a66..34f0bc6 100644 --- a/3d_armor/api.lua +++ b/3d_armor/api.lua @@ -315,7 +315,10 @@ armor.set_player_armor = function(self, player) }) pova.do_override(player) else - player:set_physics_override(physics) + local player_physics_locked = player:get_meta():get_int("player_physics_locked") + if player_physics_locked == nil or player_physics_locked == 0 then + player:set_physics_override(physics) + end end self.textures[name].armor = texture self.textures[name].preview = preview @@ -490,6 +493,16 @@ armor.get_player_skin = function(self, name) return armor.default_skin..".png" end +armor.update_skin = function(self, name) + minetest.after(0, function() + local pplayer = minetest.get_player_by_name(name) + if pplayer then + self.textures[name].skin = self:get_player_skin(name) + self:set_player_armor(pplayer) + end + end) +end + armor.add_preview = function(self, preview) skin_previews[preview] = true end diff --git a/3d_armor/init.lua b/3d_armor/init.lua index d39a355..4844a99 100644 --- a/3d_armor/init.lua +++ b/3d_armor/init.lua @@ -295,14 +295,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) local player_name = player:get_player_name() for field, _ in pairs(fields) do if string.find(field, "skins_set") then - minetest.after(0, function() - local pplayer = minetest.get_player_by_name(player_name) - if player then - local skin = armor:get_player_skin(name) - armor.textures[name].skin = skin - armor:set_player_armor(pplayer) - end - end) + armor:update_skin(player_name) end end end)