export type Platform = 'java' | 'bedrock' | 'all'; export type ServerType = 'paper' | 'purpur' | 'vanilla' | 'spigot' | 'forge' | 'fabric'; export type Difficulty = 'peaceful' | 'easy' | 'normal' | 'hard'; export type Gamemode = 'survival' | 'creative' | 'adventure' | 'spectator'; export interface MinecraftConfig { platform: Platform; version: string; type: ServerType; autoAcceptEula: boolean; memory: { init: string; max: string; useAikarsFlags: boolean; }; network: { port: number; bedrockPort?: number; ip: string; onlineMode: boolean; motd: string; }; world: { difficulty: Difficulty; hardcore: boolean; gamemode: Gamemode; seed?: string; maxPlayers: number; viewDistance: number; simulationDistance?: number; levelName: string; }; folders: { addons: string; mods: string; plugins: string; world: string; }; autoRestart: boolean; backup: { enabled: boolean; interval: string; path: string; }; } export interface ServerInfo { pid: number; ip: string; port: number; bedrockPort?: number; version: string; type: ServerType; platform: Platform; players: number; maxPlayers: number; uptime: number; memory: { used: number; max: number; }; cpu: number; status: 'starting' | 'running' | 'stopping' | 'stopped' | 'crashed'; } export interface DownloadInfo { url: string; fileName: string; size?: number; sha1?: string; } export interface BackupInfo { path: string; size: number; createdAt: Date; type: 'full' | 'world' | 'plugins'; } export interface Player { name: string; uuid: string; ip: string; ping: number; connectedAt: Date; } export interface JavaInfo { path: string; version: string; type: 'system' | 'portable'; } export interface GeyserConfig { bedrock: { port: number; address: string; }; remote: { address: string; port: number; authType: string; }; floodgateKeyFile: string; passthroughMotd: boolean; passthroughPlayerCounts: boolean; passthroughProtocolName: boolean; } export interface ViaVersionConfig { enableClientSideBlockUpdates: boolean; preventCollision: boolean; autoTeam: boolean; suppressMetadataErrors: boolean; enableLegacyServerPing: boolean; blockConnectionMethod: boolean; nmsPlayerTicking: boolean; debug: boolean; maxPps: number; maxPpInterval: number; fixSelfRendering: boolean; fixLowLevelCollision: boolean; shieldBlocking: boolean; fixInfestedBlockBreaking: boolean; ignoreLong1_16Channel: boolean; forceJsonTransform: boolean; useNatives: boolean; } export interface SkinRestorerConfig { enabled: boolean; updateSkins: boolean; allowDefaultSkins: boolean; allowCustomSkins: boolean; allowThirdParty: boolean; skinCacheSize: number; } export interface PluginInfo { name: string; version: string; enabled: boolean; main: string; authors: string[]; website?: string; description?: string; depends?: string[]; softDepends?: string[]; loadBefore?: string[]; } export interface WorldInfo { name: string; size: number; players: number; loadedChunks: number; entities: number; tiles: number; seed: string; difficulty: Difficulty; gamemode: Gamemode; hardcore: boolean; spawn: { x: number; y: number; z: number; }; } export interface BackupOptions { type: 'full' | 'world' | 'plugins' | 'config'; compression: 'none' | 'gzip' | 'zip'; includePlayerData: boolean; maxBackups: number; retentionDays: number; } export interface RamdiskConfig { enabled: boolean; world: boolean; plugins: boolean; addons: boolean; backupInterval: number; masterStorage: string; size: string; mountPoint: string; } export interface SymlinkConfig { enabled: boolean; masterPath: string; worlds: boolean; plugins: boolean; addons: boolean; mods: boolean; } export interface NetworkOptimizationConfig { tcpFastOpen: boolean; tcpNoDelay: boolean; preferIPv4: boolean; compressionThreshold: number; bungeeMode: boolean; proxyProtocol: boolean; velocity?: { enabled: boolean; secret: string; forwardingMode: 'legacy' | 'modern'; }; } export interface MemoryMonitorConfig { enabled: boolean; threshold: number; interval: number; action: 'restart' | 'stop' | 'warn'; maxMemoryLeakRestarts: number; gcOnWarning: boolean; } export interface OwnerConfig { usernames: string[]; prefix: string; enabled: boolean; permissions: string[]; } export interface PterodactylConfig { autoDetect: boolean; useSystemJava: boolean; respectPortEnv: boolean; respectMemoryEnv: boolean; cleanupRemapped: boolean; warnUdp: boolean; } export interface PluginManagerConfig { autoUpdate: boolean; verifyOnLoad: boolean; cleanupCorrupt: boolean; downloadDelay: number; retryCount: number; retryDelay: number; } export interface ViaVersionManagerConfig { autoDownload: boolean; autoUpdate: boolean; configureAutomatically: boolean; downloadDelay: number; versions: { viaversion: string; viabackwards: string; viarewind: string; }; } export interface SkinRestorerManagerConfig { autoDownload: boolean; autoUpdate: boolean; configureAutomatically: boolean; downloadUrl: string; } export interface MinecraftServerOptions extends Partial { enableViaVersion?: boolean; enableViaBackwards?: boolean; enableViaRewind?: boolean; enableSkinRestorer?: boolean; enableProtocolSupport?: boolean; enableProtocolLib?: boolean; enableTCPShield?: boolean; enableSpigotOptimizers?: boolean; enableSpark?: boolean; enableViewDistanceTweaks?: boolean; enableFarmControl?: boolean; enableEntityDetection?: boolean; customJavaArgs?: string[]; javaVersion?: '17' | '21' | 'auto'; usePortableJava?: boolean; memoryMonitor?: MemoryMonitorConfig; autoInstallJava?: boolean; networkOptimization?: NetworkOptimizationConfig; owners?: string[]; ownerCommands?: OwnerConfig; silentMode?: boolean; statsInterval?: number; cleanLogsInterval?: number; optimizeForPterodactyl?: boolean; ramdisk?: RamdiskConfig; symlinkMaster?: string; }