Browse Source

player_api: Prevent knockback when player is set as attached

This is not directly related to player models but fits well
as a convenience feature in player_api.
tags/5.2.0
sfan5 2 months ago
parent
commit
fbbc7fc996
3 changed files with 20 additions and 2 deletions
  1. +3
    -0
      .luacheckrc
  2. +8
    -2
      game_api.txt
  3. +9
    -0
      mods/player_api/api.lua

+ 3
- 0
.luacheckrc View File

@@ -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

+ 8
- 2
game_api.txt View File

@@ -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
@@ -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

{
@@ -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


+ 9
- 0
mods/player_api/api.lua View File

@@ -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


Loading…
Cancel
Save