server.player
Constants #
const max_air_supply_ticks = i64(300)
max_air_supply_ticks is the underwater breath meter's full value.
fn new_player #
fn new_player() &Player
interface View #
interface View {
name() string
has_permission(name string) bool
is_player() bool
mut:
send_message(message string) !
send_translation(key string, parameters []string) !
set_gamemode(mode int)
kill()
disconnect(message string)
position() (f32, f32, f32)
teleport(x f32, y f32, z f32)
clear_inventory()
give_item(id string, count int) bool
send_form(f form.Form) !
show_scoreboard(title string, lines []string)
clear_scoreboard()
}
View is the narrow, capability-only contract for "acts like a player": identity, permission, messaging, movement, inventory, UI, etc. It exists so lower layers (event and later entity for AI targeting) can reference a player without importing session and without each one re deriving its own slice of what a player is.
struct Movement #
struct Movement {
pub:
position types.Vector3
pitch f32
yaw f32
head_yaw f32
vy f32
}
Movement is a consistent snapshot of the player's position and orientation. Reads go through this type, while registered session writes are owned by the Hub thread.
struct Player #
struct Player {
pub mut:
identity auth.Identity
perm permission.Permissible
mut:
// state_mutex guards the mutable player state below, excluding fields
// covered by their own mutexes. State accessors must hold this lock because
// player state may now be accessed from multiple actor threads.
state_mutex &sync.Mutex = sync.new_mutex()
game_mode int
health f32 = 20.0
dead bool
held_item types.ItemStackWrapper
held_slot int
inv_stacks map[int]types.ItemStack
inv_slots map[int]int
inv_next_id int = 1
pending_creative ?types.ItemStack
loaded_items []playerdb.InvItem
effects effect.Manager
has_last_death bool
last_death_pos types.Vector3
air_supply_ticks i64 = max_air_supply_ticks
fire_ticks i64
pos_mutex &sync.Mutex = sync.new_mutex()
position types.Vector3
pitch f32
yaw f32
head_yaw f32
vy f32
prev_y f32
fall_distance f32
grounded bool
}
Player holds the gamestate fields that belong to a player as an entity, independent of whichever network connection (if any) is currently driving it. It holds no transport/packet send capability by design.
Behavior methods that need to send a packet or broadcast (send_message, teleport, kill, give_item, etc.) stay on NetworkSession, which reads and writes through this struct's accessors for the state they operate on.
fn (Player) name #
fn (p &Player) name() string
fn (Player) has_permission #
fn (p &Player) has_permission(name string) bool
fn (Player) game_mode #
fn (p &Player) game_mode() int
fn (Player) set_game_mode #
fn (mut p Player) set_game_mode(mode int)
fn (Player) health #
fn (p &Player) health() f32
fn (Player) set_health #
fn (mut p Player) set_health(value f32)
fn (Player) is_dead #
fn (p &Player) is_dead() bool
fn (Player) set_dead #
fn (mut p Player) set_dead(value bool)
fn (Player) air_supply #
fn (p &Player) air_supply() i64
fn (Player) set_air_supply #
fn (mut p Player) set_air_supply(value i64)
fn (Player) fire_ticks #
fn (p &Player) fire_ticks() i64
fn (Player) set_fire_ticks #
fn (mut p Player) set_fire_ticks(value i64)
fn (Player) held_item #
fn (p &Player) held_item() types.ItemStackWrapper
fn (Player) held_slot #
fn (p &Player) held_slot() int
fn (Player) set_held #
fn (mut p Player) set_held(slot int, item types.ItemStackWrapper)
set_held updates the held slot and its wrapper together. Every current caller sets both at once.
fn (Player) inv_stack #
fn (p &Player) inv_stack(net_id int) ?types.ItemStack
fn (Player) put_stack #
fn (mut p Player) put_stack(net_id int, stack types.ItemStack)
fn (Player) delete_stack #
fn (mut p Player) delete_stack(net_id int)
fn (Player) inv_slot #
fn (p &Player) inv_slot(slot int) ?int
fn (Player) has_slot #
fn (p &Player) has_slot(slot int) bool
fn (Player) set_slot #
fn (mut p Player) set_slot(slot int, net_id int)
fn (Player) delete_slot #
fn (mut p Player) delete_slot(slot int)
fn (Player) snapshot_slot_stacks #
fn (p &Player) snapshot_slot_stacks() map[int]types.ItemStack
snapshot_slot_stacks returns a cloned map of inventory slot to item stack. The network-id indirection is resolved while holding state_mutex so callers get a consistent slot layout.
fn (Player) track_stack #
fn (mut p Player) track_stack(stack types.ItemStack) int
track_stack assigns stack a new network ID, stores it and returns that ID. It is the only method that reads or advances inv_next_id.
fn (Player) clear_inventory #
fn (mut p Player) clear_inventory()
fn (Player) pending_creative #
fn (p &Player) pending_creative() ?types.ItemStack
fn (Player) set_pending_creative #
fn (mut p Player) set_pending_creative(stack ?types.ItemStack)
fn (Player) set_loaded_items #
fn (mut p Player) set_loaded_items(items []playerdb.InvItem)
fn (Player) loaded_items_len #
fn (p &Player) loaded_items_len() int
fn (Player) loaded_item #
fn (p &Player) loaded_item(i int) playerdb.InvItem
fn (Player) add_effect_result #
fn (mut p Player) add_effect_result(e effect.Effect) effect.AddResult
fn (Player) remove_effect #
fn (mut p Player) remove_effect(typ effect.Type) ?effect.Effect
fn (Player) tick_effects #
fn (mut p Player) tick_effects() effect.TickResult
fn (Player) effect #
fn (p &Player) effect(typ effect.Type) ?effect.Effect
fn (Player) active_effects #
fn (p &Player) active_effects() []effect.Effect
fn (Player) has_last_death #
fn (p &Player) has_last_death() bool
fn (Player) last_death_pos #
fn (p &Player) last_death_pos() types.Vector3
fn (Player) set_last_death #
fn (mut p Player) set_last_death(pos types.Vector3)
fn (Player) movement #
fn (p &Player) movement() Movement
fn (Player) on_ground #
fn (p &Player) on_ground() bool
on_ground reports the last client reported ground state, trusted like the rest of the movement snapshot.
fn (Player) position #
fn (p &Player) position() types.Vector3
position is a convenience accessor for the common case of needing just the position, still going through the same lock as movement().
fn (Player) apply_movement #
fn (mut p Player) apply_movement(position types.Vector3, pitch f32, yaw f32, head_yaw f32, on_ground bool) f32
apply_movement updates the player's position and orientation as one unit, deriving vertical velocity from the change in Y. Registered session callers must invoke it on the Hub thread.
fn (Player) reset_position #
fn (mut p Player) reset_position(position types.Vector3)
fn (Player) set_orientation #
fn (mut p Player) set_orientation(pitch f32, yaw f32, head_yaw f32)
set_orientation applies saved orientation during pre registration setup. Live sessions must update orientation through apply_movement instead.
- Constants
- fn new_player
- interface View
- struct Movement
- struct Player
- fn name
- fn has_permission
- fn game_mode
- fn set_game_mode
- fn health
- fn set_health
- fn is_dead
- fn set_dead
- fn air_supply
- fn set_air_supply
- fn fire_ticks
- fn set_fire_ticks
- fn held_item
- fn held_slot
- fn set_held
- fn inv_stack
- fn put_stack
- fn delete_stack
- fn inv_slot
- fn has_slot
- fn set_slot
- fn delete_slot
- fn snapshot_slot_stacks
- fn track_stack
- fn clear_inventory
- fn pending_creative
- fn set_pending_creative
- fn set_loaded_items
- fn loaded_items_len
- fn loaded_item
- fn add_effect_result
- fn remove_effect
- fn tick_effects
- fn effect
- fn active_effects
- fn has_last_death
- fn last_death_pos
- fn set_last_death
- fn movement
- fn on_ground
- fn position
- fn apply_movement
- fn reset_position
- fn set_orientation