framework

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 30, 2026 License: MIT Imports: 29 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func HologramCommands

func HologramCommands(hm *HologramManager) []cmd.Command

func NewMatchID

func NewMatchID(gameID string) string

func RemoveScoreboard

func RemoveScoreboard(p *player.Player)

func SendMatchScoreboard

func SendMatchScoreboard(p *player.Player, matchKills int, aliveCount int, chestTimeLeft time.Duration)

func SetPlayerScale

func SetPlayerScale(players []*player.Player, remaining int, startMessage string)

Types

type Arena

type Arena struct {
	Name       string
	WorldName  string
	Spawns     []mgl64.Vec3
	Chests     []ChestPosition
	MaxPlayers int
}

type ChestPosition

type ChestPosition struct {
	Pos  mgl64.Vec3
	Type ChestType
}

type ChestType

type ChestType int
const (
	ChestTypeNormal ChestType = iota
	ChestTypeCenter
)

type Config

type Config struct {
	GameSettings map[string]GameConfig `yaml:"games"`
	Global       GlobalConfig          `yaml:"global"`
	Database     DatabaseConfig        `yaml:"database"`
}

func DefaultConfig

func DefaultConfig() *Config

type ConfigManager

type ConfigManager struct {
	// contains filtered or unexported fields
}

func NewConfigManager

func NewConfigManager(dataDir string, logger *LogWrapper) (*ConfigManager, error)

func (*ConfigManager) Config

func (cm *ConfigManager) Config() *Config

func (*ConfigManager) GameConfig

func (cm *ConfigManager) GameConfig(gameID string) GameConfig

type Countdown

type Countdown struct {
	// contains filtered or unexported fields
}

func NewCountdown

func NewCountdown(seconds int, logger *LogWrapper) *Countdown

func (*Countdown) Cancel

func (c *Countdown) Cancel()

func (*Countdown) IsRunning

func (c *Countdown) IsRunning() bool

func (*Countdown) OnBroadcast

func (c *Countdown) OnBroadcast(fn func(msg string)) *Countdown

func (*Countdown) OnCancel

func (c *Countdown) OnCancel(fn func()) *Countdown

func (*Countdown) OnComplete

func (c *Countdown) OnComplete(fn func()) *Countdown

func (*Countdown) Remaining

func (c *Countdown) Remaining() int

func (*Countdown) Start

func (c *Countdown) Start()

func (*Countdown) WithActions

func (c *Countdown) WithActions(actions ...CountdownAction) *Countdown

type CountdownAction

type CountdownAction struct {
	AtSecond int
	OnTick   func(remaining int)
}

type DatabaseConfig

type DatabaseConfig struct {
	Type string `yaml:"type"`
	Path string `yaml:"path"`
}

type EndReason

type EndReason string
const (
	EndReasonLastStanding EndReason = "last_standing"
	EndReasonTimeLimit    EndReason = "time_limit"
	EndReasonDraw         EndReason = "draw"
	EndReasonForce        EndReason = "force"
)

type Framework

type Framework struct {
	// contains filtered or unexported fields
}

func New

func New(dataDir string, logger *LogWrapper, blockReg world.BlockRegistry) (*Framework, error)

func (*Framework) AttachLobbyHandler

func (f *Framework) AttachLobbyHandler()

func (*Framework) Config

func (f *Framework) Config() *ConfigManager

func (*Framework) DataFolder

func (f *Framework) DataFolder() string

func (*Framework) DiscoverMaps

func (f *Framework) DiscoverMaps() error

func (*Framework) Games

func (f *Framework) Games() *GameManager

func (*Framework) Holograms

func (f *Framework) Holograms() *HologramManager

func (*Framework) Logger

func (f *Framework) Logger() *LogWrapper

func (*Framework) Loot

func (f *Framework) Loot() *LootManager

func (*Framework) Maps

func (f *Framework) Maps() *MapManager

func (*Framework) Matches

func (f *Framework) Matches() *MatchManager

func (*Framework) Players

func (f *Framework) Players() *PlayerManager

func (*Framework) SetDefaultWorld

func (f *Framework) SetDefaultWorld(w *world.World)

func (*Framework) SetServer

func (f *Framework) SetServer(srv *server.Server)

func (*Framework) SetupLobby

func (f *Framework) SetupLobby() error

func (*Framework) Shutdown

func (f *Framework) Shutdown()

func (*Framework) Stats

func (f *Framework) Stats() *StatsManager

func (*Framework) Worlds

func (f *Framework) Worlds() *WorldManager

type Game

type Game interface {
	ID() string

	Name() string

	Description() string

	MinPlayers() int

	MaxPlayers() int

	CreateMatch(id string, arena Arena, players []*player.Player) Match
}

type GameConfig

type GameConfig struct {
	Enabled              bool `yaml:"enabled"`
	MinPlayers           int  `yaml:"min_players"`
	MaxPlayers           int  `yaml:"max_players"`
	CountdownSeconds     int  `yaml:"countdown_seconds"`
	GameDurationSeconds  int  `yaml:"game_duration_seconds"`
	GracePeriodSeconds   int  `yaml:"grace_period_seconds"`
	InvincibilitySeconds int  `yaml:"invincibility_seconds"`
	BackendTaskTicks     int  `yaml:"backend_task_ticks"`
}

type GameManager

type GameManager struct {
	// contains filtered or unexported fields
}

func NewGameManager

func NewGameManager(registry *GameRegistry, matchMgr *MatchManager, worldMgr *WorldManager, playerMgr *PlayerManager, mapMgr *MapManager, logger *LogWrapper) *GameManager

func (*GameManager) JoinGame

func (m *GameManager) JoinGame(p *player.Player, gameID string) error

func (*GameManager) Registry

func (m *GameManager) Registry() *GameRegistry

type GameRegistry

type GameRegistry struct {
	// contains filtered or unexported fields
}

func NewGameRegistry

func NewGameRegistry() *GameRegistry

func (*GameRegistry) All

func (r *GameRegistry) All() []Game

func (*GameRegistry) Get

func (r *GameRegistry) Get(id string) (Game, bool)

func (*GameRegistry) Register

func (r *GameRegistry) Register(g Game) error

type GlobalConfig

type GlobalConfig struct {
	PluginPrefix     string `yaml:"plugin_prefix"`
	JoinCommand      string `yaml:"join_command"`
	LeaveCommand     string `yaml:"leave_command"`
	Language         string `yaml:"language"`
	EnablePvP        bool   `yaml:"enable_pvp"`
	DataSaveInterval int    `yaml:"data_save_interval_seconds"`
}

type Hologram

type Hologram struct {
	UUID    string   `json:"uuid"`
	World   string   `json:"world"`
	X, Y, Z float64  `json:"position"`
	Lines   []string `json:"lines"`
	// contains filtered or unexported fields
}

type HologramManager

type HologramManager struct {
	// contains filtered or unexported fields
}

func NewHologramManager

func NewHologramManager(dataDir string, logger *LogWrapper) *HologramManager

func (*HologramManager) All

func (hm *HologramManager) All() map[string]*Hologram

func (*HologramManager) Create

func (hm *HologramManager) Create(name string, pos mgl64.Vec3, lines []string) (*Hologram, error)

func (*HologramManager) Delete

func (hm *HologramManager) Delete(name string)

func (*HologramManager) Get

func (hm *HologramManager) Get(name string) (*Hologram, bool)

func (*HologramManager) MoveTo

func (hm *HologramManager) MoveTo(name string, pos mgl64.Vec3) error

func (*HologramManager) SetLines

func (hm *HologramManager) SetLines(name string, lines []string) error

func (*HologramManager) SetLobbyWorld

func (hm *HologramManager) SetLobbyWorld(w *world.World)

type LobbySpawn

type LobbySpawn struct {
	Position mgl64.Vec3 `yaml:"position"`
	Yaw      float64    `yaml:"yaw"`
	Pitch    float64    `yaml:"pitch"`
}

type LogWrapper

type LogWrapper struct {
	*slog.Logger
}

func NewLogWrapper

func NewLogWrapper(logger *slog.Logger) *LogWrapper

type LootEnchantment

type LootEnchantment struct {
	ID    string `yaml:"id"`
	Level int    `yaml:"level"`
}

type LootEntry

type LootEntry struct {
	Item         string            `yaml:"item"`
	AmountMin    int               `yaml:"amount_min"`
	AmountMax    int               `yaml:"amount_max"`
	Chance       float64           `yaml:"chance"`
	Enchantments []LootEnchantment `yaml:"enchantments,omitempty"`
}

type LootManager

type LootManager struct {
	// contains filtered or unexported fields
}

func NewLootManager

func NewLootManager(dataDir string, logger *LogWrapper) (*LootManager, error)

func (*LootManager) GenerateLoot

func (lm *LootManager) GenerateLoot(tableName string) []map[string]int

type LootTable

type LootTable struct {
	Entries  []LootEntry `yaml:"entries"`
	MinRolls int         `yaml:"min_rolls"`
	MaxRolls int         `yaml:"max_rolls"`
}

type MapManager

type MapManager struct {
	// contains filtered or unexported fields
}

func NewMapManager

func NewMapManager(dataDir string, logger *LogWrapper, blockReg world.BlockRegistry) *MapManager

func (*MapManager) ArenaByName

func (mm *MapManager) ArenaByName(name string) (Arena, bool)

func (*MapManager) Arenas

func (mm *MapManager) Arenas() []Arena

func (*MapManager) DiscoverMaps

func (mm *MapManager) DiscoverMaps(gameID string) error

func (*MapManager) SelectArena

func (mm *MapManager) SelectArena(gameID string) (Arena, error)

type Match

type Match interface {
	ID() string

	GameID() string

	State() MatchState

	Start()

	Done() <-chan struct{}

	Players() []*player.Player

	Alive() []*player.Player

	AddPlayer(p *player.Player) error
}

type MatchManager

type MatchManager struct {
	// contains filtered or unexported fields
}

func NewMatchManager

func NewMatchManager(worldMgr *WorldManager, logger *LogWrapper) *MatchManager

func (*MatchManager) FindSuitableMatch

func (m *MatchManager) FindSuitableMatch(gameID string, maxPlayers int) Match

func (*MatchManager) Get

func (m *MatchManager) Get(id string) (Match, bool)

func (*MatchManager) MatchByPlayer

func (m *MatchManager) MatchByPlayer(p *player.Player) (Match, bool)

func (*MatchManager) Register

func (m *MatchManager) Register(match Match)

func (*MatchManager) Shutdown

func (m *MatchManager) Shutdown()

func (*MatchManager) Unregister

func (m *MatchManager) Unregister(id string)

type MatchState

type MatchState int
const (
	MatchStateWaiting MatchState = iota
	MatchStateCountdown
	MatchStateStarting
	MatchStatePlaying
	MatchStateFinished
	MatchStateClosed
)

func (MatchState) String

func (s MatchState) String() string

type PlayerManager

type PlayerManager struct {
	// contains filtered or unexported fields
}

func NewPlayerManager

func NewPlayerManager(dataDir string, logger *LogWrapper) *PlayerManager

func (*PlayerManager) AddPlayer

func (pm *PlayerManager) AddPlayer(p *player.Player, matchID string)

func (*PlayerManager) IncrementKills

func (pm *PlayerManager) IncrementKills(p *player.Player)

func (*PlayerManager) IsInMatch

func (pm *PlayerManager) IsInMatch(p *player.Player) bool

func (*PlayerManager) LobbySpawn

func (pm *PlayerManager) LobbySpawn() LobbySpawn

func (*PlayerManager) PlayerState

func (pm *PlayerManager) PlayerState(p *player.Player) (*PlayerState, bool)

func (*PlayerManager) RemoveAllFromMatch

func (pm *PlayerManager) RemoveAllFromMatch(matchID string)

func (*PlayerManager) RemovePlayer

func (pm *PlayerManager) RemovePlayer(p *player.Player)

func (*PlayerManager) ReturnToLobby

func (pm *PlayerManager) ReturnToLobby(p *player.Player)

func (*PlayerManager) SendLobbyScoreboard

func (pm *PlayerManager) SendLobbyScoreboard(p *player.Player)

func (*PlayerManager) SetDead

func (pm *PlayerManager) SetDead(p *player.Player)

func (*PlayerManager) SetLobbyWorld

func (pm *PlayerManager) SetLobbyWorld(w *world.World)

func (*PlayerManager) SetServer

func (pm *PlayerManager) SetServer(srv *server.Server)

func (*PlayerManager) SetSpawn

func (pm *PlayerManager) SetSpawn(pos mgl64.Vec3, yaw, pitch float64)

func (*PlayerManager) SetSpectating

func (pm *PlayerManager) SetSpectating(p *player.Player)

func (*PlayerManager) SetStatsManager

func (pm *PlayerManager) SetStatsManager(sm *StatsManager)

type PlayerState

type PlayerState struct {
	Player       *player.Player
	MatchID      string
	IsAlive      bool
	IsSpectating bool
	Kills        int
	Deaths       int
}

type PlayerStats

type PlayerStats struct {
	Wins   int `json:"wins"`
	Kills  int `json:"kills"`
	Deaths int `json:"deaths"`
	Games  int `json:"games"`
}

type RemoveReason

type RemoveReason string
const (
	RemoveReasonQuit     RemoveReason = "quit"
	RemoveReasonDeath    RemoveReason = "death"
	RemoveReasonKicked   RemoveReason = "kicked"
	RemoveReasonTransfer RemoveReason = "transfer"
)

type SpectatorManager

type SpectatorManager struct {
	// contains filtered or unexported fields
}

func NewSpectatorManager

func NewSpectatorManager(logger *LogWrapper) *SpectatorManager

func (*SpectatorManager) CycleSpectatorTarget

func (sm *SpectatorManager) CycleSpectatorTarget(p *player.Player, alive []*player.Player)

func (*SpectatorManager) DisableSpectator

func (sm *SpectatorManager) DisableSpectator(p *player.Player)

func (*SpectatorManager) EnableSpectator

func (sm *SpectatorManager) EnableSpectator(p *player.Player)

type StatsManager

type StatsManager struct {
	// contains filtered or unexported fields
}

func NewStatsManager

func NewStatsManager(dataDir string, logger *LogWrapper) (*StatsManager, error)

func (*StatsManager) IncrementDeaths

func (sm *StatsManager) IncrementDeaths(uuid uuid.UUID)

func (*StatsManager) IncrementGames

func (sm *StatsManager) IncrementGames(uuid uuid.UUID)

func (*StatsManager) IncrementKills

func (sm *StatsManager) IncrementKills(uuid uuid.UUID)

func (*StatsManager) IncrementWins

func (sm *StatsManager) IncrementWins(uuid uuid.UUID)

func (*StatsManager) LoadPlayerStats

func (sm *StatsManager) LoadPlayerStats(uuid uuid.UUID) *PlayerStats

func (*StatsManager) SavePlayerStats

func (sm *StatsManager) SavePlayerStats(uuid uuid.UUID, stats *PlayerStats) error

type WorldHandler

type WorldHandler interface {
	HandleChestLoot(tx *world.Tx, pos mgl64.Vec3, chestType ChestType)
}

type WorldManager

type WorldManager struct {
	// contains filtered or unexported fields
}

func NewWorldManager

func NewWorldManager(dataDir string, logger *LogWrapper, reg world.BlockRegistry) *WorldManager

func (*WorldManager) AcquireWorld

func (wm *WorldManager) AcquireWorld(arena Arena) (*world.World, error)

func (*WorldManager) CreateWorld

func (wm *WorldManager) CreateWorld(dir string) (*world.World, error)

func (*WorldManager) OpenWorld

func (wm *WorldManager) OpenWorld(dir string) (*world.World, error)

func (*WorldManager) ReturnWorld

func (wm *WorldManager) ReturnWorld(worldName string)

func (*WorldManager) Shutdown

func (wm *WorldManager) Shutdown()

type WorldPool

type WorldPool struct {
	// contains filtered or unexported fields
}

func NewWorldPool

func NewWorldPool(dir string, maxIdle int, reg world.BlockRegistry, logger *LogWrapper) *WorldPool

func (*WorldPool) Acquire

func (p *WorldPool) Acquire(templateDir string, arena Arena) (*world.World, error)

func (*WorldPool) Preload

func (p *WorldPool) Preload(templateDir string, arena Arena, count int) error

func (*WorldPool) Release

func (p *WorldPool) Release(w *world.World, reset bool)

func (*WorldPool) Shutdown

func (p *WorldPool) Shutdown()

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL