Skip to content

Commit

Permalink
player_api: Prevent knockback when player is set as attached
Browse files Browse the repository at this point in the history
This is not directly related to player models but fits well
as a convenience feature in player_api.
  • Loading branch information
sfan5 committed Mar 17, 2020
1 parent b9dc758 commit fbbc7fc
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 2 deletions.
3 changes: 3 additions & 0 deletions .luacheckrc
Expand Up @@ -20,5 +20,8 @@ read_globals = {
-- Overwrites minetest.handle_node_drops
files["mods/creative/init.lua"].globals = { "minetest" }

-- Overwrites minetest.calculate_knockback
files["mods/player_api/api.lua"].globals = { "minetest" }

-- Don't report on legacy definitions of globals.
files["mods/default/legacy.lua"].global = false
10 changes: 8 additions & 2 deletions game_api.txt
Expand Up @@ -424,7 +424,7 @@ Give Initial Stuff API
Players API
-----------

The player API can register player models and update the player's appearence
The player API can register player models and update the player's appearance.

* `player_api.register_model(name, def)`
* Register a new model to be used by players
Expand Down Expand Up @@ -457,6 +457,12 @@ The player API can register player models and update the player's appearence
* Any of the fields of the returned table may be nil.
* player: PlayerRef

* `player_api.player_attached`
* A table that maps a player name to a boolean.
* If the value for a given player is set to true, the default player
animations (walking, digging, ...) will no longer be updated.
Knockback from damage is also prevented for that player.

### Model Definition

{
Expand All @@ -467,7 +473,7 @@ The player API can register player models and update the player's appearence
-- <anim_name> = {x = <start_frame>, y = <end_frame>},
foo = {x = 0, y = 19},
bar = {x = 20, y = 39},
-- ...
-- ...
},
collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, -- In nodes from feet position
stepheight = 0.6, -- In nodes
Expand Down
9 changes: 9 additions & 0 deletions mods/player_api/api.lua
Expand Up @@ -96,6 +96,15 @@ end)
local player_set_animation = player_api.set_animation
local player_attached = player_api.player_attached

-- Prevent knockback for attached players
local old_calculate_knockback = minetest.calculate_knockback
function minetest.calculate_knockback(player, ...)
if player_attached[player:get_player_name()] then
return 0
end
return old_calculate_knockback(player, ...)
end

-- Check each player and apply animations
minetest.register_globalstep(function(dtime)
for _, player in pairs(minetest.get_connected_players()) do
Expand Down

0 comments on commit fbbc7fc

Please sign in to comment.