mod addons;
pub mod launch;
pub mod packages;
pub mod setup;
pub mod tracking;
pub mod transfer;
pub mod update;
use mcvm_core::util::versions::MinecraftVersion;
use mcvm_shared::later::Later;
use mcvm_shared::pkg::PackageStability;
use mcvm_shared::versions::VersionPattern;
use mcvm_shared::Side;
use crate::config::instance::InstanceConfig;
use self::launch::LaunchOptions;
use self::setup::{InstanceDirs, ModificationData};
use super::config::instance::ClientWindowConfig;
use super::config::package::PackageConfig;
use super::config::profile::GameModifications;
use mcvm_shared::id::InstanceID;
#[derive(Debug)]
pub struct Instance {
pub(crate) kind: InstKind,
pub(crate) id: InstanceID,
pub(crate) dirs: Later<InstanceDirs>,
pub(crate) config: InstanceStoredConfig,
modification_data: ModificationData,
}
#[derive(Debug, Clone)]
pub enum InstKind {
Client {
window: ClientWindowConfig,
},
Server {
world_name: Option<String>,
},
}
impl InstKind {
pub fn client(window: ClientWindowConfig) -> Self {
Self::Client { window }
}
pub fn server() -> Self {
Self::Server { world_name: None }
}
pub fn to_side(&self) -> Side {
match self {
Self::Client { .. } => Side::Client,
Self::Server { .. } => Side::Server,
}
}
}
#[derive(Debug)]
pub struct InstanceStoredConfig {
pub name: Option<String>,
pub icon: Option<String>,
pub version: MinecraftVersion,
pub modifications: GameModifications,
pub modification_version: Option<VersionPattern>,
pub launch: LaunchOptions,
pub datapack_folder: Option<String>,
pub packages: Vec<PackageConfig>,
pub package_stability: PackageStability,
pub original_config: InstanceConfig,
pub original_config_with_profiles: InstanceConfig,
pub plugin_config: serde_json::Map<String, serde_json::Value>,
}
impl Instance {
pub fn new(kind: InstKind, id: InstanceID, config: InstanceStoredConfig) -> Self {
Self {
kind,
id,
config,
dirs: Later::Empty,
modification_data: ModificationData::new(),
}
}
pub fn get_kind(&self) -> &InstKind {
&self.kind
}
pub fn get_side(&self) -> Side {
self.kind.to_side()
}
pub fn get_id(&self) -> &InstanceID {
&self.id
}
pub fn get_dirs(&self) -> &Later<InstanceDirs> {
&self.dirs
}
pub fn get_config(&self) -> &InstanceStoredConfig {
&self.config
}
}