use std::io;
use std::path::PathBuf;
use serde::{Deserialize, Serialize};
use crate::client::ClientFile;
use crate::java::Java;
#[derive(Debug, Clone)]
pub struct WindowConfiguration {
pub width: Option<usize>,
pub height: Option<usize>,
pub fullscreen: Option<bool>,
}
impl Default for WindowConfiguration {
fn default() -> Self {
Self {
width: None,
height: None,
fullscreen: Some(true),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum MinecraftSessionUserType {
#[serde(rename = "mojang")]
Mojang,
#[serde(rename = "legacy")]
Legacy
}
impl Default for MinecraftSessionUserType {
fn default() -> Self {
Self::Mojang
}
}
#[derive(Debug, Clone)]
pub struct AuthLibConfiguration {
pub server: String,
pub version: String
}
impl Default for AuthLibConfiguration {
fn default() -> Self {
Self {
server: String::new(),
version: String::from("1.2.5")
}
}
}
#[derive(Debug, Clone, Default)]
pub struct MinecraftSession {
pub username: String,
pub user_type: Option<MinecraftSessionUserType>,
pub uuid: String,
pub access_token: String,
pub authlib_server: Option<AuthLibConfiguration>
}
#[derive(Debug, Clone, Default)]
pub struct MinecraftClient {
pub path: PathBuf,
pub version: String,
pub server: Option<String>,
}
impl MinecraftClient {
pub fn get_client_file(&self) -> io::Result<PathBuf> {
Ok(
self.path .join("versions") .join(self.version.clone()) .join("client.json") .to_path_buf()
)
}
pub fn get_client_info(&self) -> io::Result<ClientFile> {
let path = self.get_client_file()?;
ClientFile::new(path)
}
}
#[derive(Debug, Clone)]
pub struct MinecraftConfiguration {
pub client: MinecraftClient,
pub java: Option<Java>,
pub session: MinecraftSession,
pub window: WindowConfiguration,
}