Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion pumpkin-config/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,3 @@ serde.workspace = true
log.workspace = true

toml = "0.8"
serde-inline-default = "0.2.2"
33 changes: 6 additions & 27 deletions pumpkin-config/src/auth.rs
Original file line number Diff line number Diff line change
@@ -1,26 +1,17 @@
use pumpkin_core::ProfileAction;
use serde::{Deserialize, Serialize};
use serde_inline_default::serde_inline_default;

#[serde_inline_default]
#[derive(Deserialize, Serialize)]
#[serde(default)]
pub struct AuthenticationConfig {
/// Whether to use Mojang authentication.
#[serde_inline_default(true)]
pub enabled: bool,
#[serde_inline_default("https://sessionserver.mojang.com/session/minecraft/hasJoined?username={username}&serverId={server_hash}".to_string())]
pub auth_url: String,
/// Prevent proxy connections.
#[serde_inline_default(false)]
pub prevent_proxy_connections: bool,
#[serde_inline_default("https://sessionserver.mojang.com/session/minecraft/hasJoined?username={username}&serverId={server_hash}&ip={ip}".to_string())]
pub prevent_proxy_connection_auth_url: String,
/// Player profile handling.
#[serde(default)]
pub player_profile: PlayerProfileConfig,
/// Texture handling.
#[serde(default)]
pub textures: TextureConfig,
}

Expand All @@ -43,40 +34,31 @@ pub struct PlayerProfileConfig {
/// Allow players flagged by Mojang (banned, forced name change).
pub allow_banned_players: bool,
/// Depends on the value above
#[serde(default = "default_allowed_actions")]
pub allowed_actions: Vec<ProfileAction>,
}

fn default_allowed_actions() -> Vec<ProfileAction> {
vec![
ProfileAction::ForcedNameChange,
ProfileAction::UsingBannedSkin,
]
}

impl Default for PlayerProfileConfig {
fn default() -> Self {
Self {
allow_banned_players: false,
allowed_actions: default_allowed_actions(),
allowed_actions: vec![
ProfileAction::ForcedNameChange,
ProfileAction::UsingBannedSkin,
],
}
}
}

#[serde_inline_default]
#[derive(Deserialize, Serialize)]
#[serde(default)]
pub struct TextureConfig {
/// Whether to use player textures.
#[serde_inline_default(true)]
pub enabled: bool,

#[serde_inline_default(vec!["http".into(), "https".into()])]
pub allowed_url_schemes: Vec<String>,
#[serde_inline_default(vec![".minecraft.net".into(), ".mojang.com".into()])]
pub allowed_url_domains: Vec<String>,

/// Specific texture types.
#[serde(default)]
pub types: TextureTypes,
}

Expand All @@ -92,17 +74,14 @@ impl Default for TextureConfig {
}

#[derive(Deserialize, Serialize)]
#[serde_inline_default]
#[serde(default)]
pub struct TextureTypes {
/// Use player skins.
#[serde_inline_default(true)]
pub skin: bool,
/// Use player capes.
#[serde_inline_default(true)]
pub cape: bool,
/// Use player elytras.
/// (i didn't know myself that there are custom elytras)
#[serde_inline_default(true)]
pub elytra: bool,
}

Expand Down
5 changes: 1 addition & 4 deletions pumpkin-config/src/commands.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
use serde::{Deserialize, Serialize};
use serde_inline_default::serde_inline_default;

#[derive(Deserialize, Serialize)]
#[serde_inline_default]
#[serde(default)]
pub struct CommandsConfig {
/// Are commands from the Console accepted ?
#[serde_inline_default(true)]
pub use_console: bool,
/// Should be commands from players be logged in console?
#[serde_inline_default(true)]
pub log_console: bool, // TODO: commands...
}

Expand Down
27 changes: 11 additions & 16 deletions pumpkin-config/src/compression.rs
Original file line number Diff line number Diff line change
@@ -1,29 +1,33 @@
use serde::{Deserialize, Serialize};
use serde_inline_default::serde_inline_default;

#[serde_inline_default]
#[derive(Deserialize, Serialize)]
#[serde(default)]
/// Packet compression
pub struct CompressionConfig {
/// Wether compression is enabled
#[serde_inline_default(true)]
pub enabled: bool,
#[serde(flatten)]
#[serde(default)]
pub compression_info: CompressionInfo,
}

#[serde_inline_default]
impl Default for CompressionConfig {
fn default() -> Self {
Self {
enabled: true,
compression_info: Default::default(),
}
}
}

#[derive(Deserialize, Serialize, Clone)]
#[serde(default)]
/// We have this in a Seperate struct so we can use it outside of the Config
pub struct CompressionInfo {
/// The compression threshold used when compression is enabled
#[serde_inline_default(256)]
pub threshold: u32,
/// A value between 0..9
/// 1 = Optimize for the best speed of encoding.
/// 9 = Optimize for the size of data being encoded.
#[serde_inline_default(4)]
pub level: u32,
}

Expand All @@ -35,12 +39,3 @@ impl Default for CompressionInfo {
}
}
}

impl Default for CompressionConfig {
fn default() -> Self {
Self {
enabled: true,
compression_info: Default::default(),
}
}
}
27 changes: 2 additions & 25 deletions pumpkin-config/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@ use pumpkin_core::{Difficulty, GameMode};
use query::QueryConfig;
use serde::{de::DeserializeOwned, Deserialize, Serialize};

// TODO: when https://github.com/rust-lang/rfcs/pull/3681 gets merged, replace serde-inline-default with native syntax
use serde_inline_default::serde_inline_default;

use std::{
fs,
net::{Ipv4Addr, SocketAddr},
Expand Down Expand Up @@ -58,66 +55,46 @@ pub struct AdvancedConfiguration {
pub query: QueryConfig,
}

#[serde_inline_default]
#[derive(Serialize, Deserialize)]
#[serde(default)]
pub struct BasicConfiguration {
/// The address to bind the server to.
#[serde(default = "default_server_address")]
pub server_address: SocketAddr,
/// The seed for world generation.
#[serde(default = "String::new")]
pub seed: String,
/// The maximum number of players allowed on the server. Specifying `0` disables the limit.
#[serde_inline_default(10000)]
pub max_players: u32,
/// The maximum view distance for players.
#[serde_inline_default(10)]
pub view_distance: u8,
/// The maximum simulated view distance.
#[serde_inline_default(10)]
pub simulation_distance: u8,
/// The default game difficulty.
#[serde_inline_default(Difficulty::Normal)]
pub default_difficulty: Difficulty,
/// Whether the Nether dimension is enabled.
#[serde_inline_default(true)]
pub allow_nether: bool,
/// Whether the server is in hardcore mode.
#[serde_inline_default(false)]
pub hardcore: bool,
/// Whether online mode is enabled. Requires valid Minecraft accounts.
#[serde_inline_default(true)]
pub online_mode: bool,
/// Whether packet encryption is enabled. Required when online mode is enabled.
#[serde_inline_default(true)]
pub encryption: bool,
/// The server's description displayed on the status screen.
#[serde_inline_default("A Blazing fast Pumpkin Server!".to_string())]
pub motd: String,
#[serde_inline_default(20.0)]
pub tps: f32,
/// The default game mode for players.
#[serde_inline_default(GameMode::Survival)]
pub default_gamemode: GameMode,
/// Whether to remove IPs from logs or not
#[serde_inline_default(true)]
pub scrub_ips: bool,
/// Whether to use a server favicon
#[serde_inline_default(true)]
pub use_favicon: bool,
/// Path to server favicon
#[serde_inline_default("icon.png".to_string())]
pub favicon_path: String,
}

fn default_server_address() -> SocketAddr {
SocketAddr::new(Ipv4Addr::new(0, 0, 0, 0).into(), 25565)
}

impl Default for BasicConfiguration {
fn default() -> Self {
Self {
server_address: default_server_address(),
server_address: SocketAddr::new(Ipv4Addr::new(0, 0, 0, 0).into(), 25565),
seed: "".to_string(),
max_players: 100000,
view_distance: 10,
Expand Down
22 changes: 6 additions & 16 deletions pumpkin-config/src/logging.rs
Original file line number Diff line number Diff line change
@@ -1,28 +1,21 @@
use serde::{Deserialize, Serialize};
use serde_inline_default::serde_inline_default;

#[serde_inline_default]
#[derive(Deserialize, Serialize)]
#[serde(default)]
pub struct LoggingConfig {
#[serde_inline_default(true)]
pub enabled: bool,
#[serde_inline_default(LevelFilter::Info)]
pub level: LevelFilter,
#[serde_inline_default(false)]
pub env: bool,
#[serde_inline_default(true)]
pub threads: bool,
#[serde_inline_default(true)]
pub color: bool,
#[serde_inline_default(true)]
pub timestamp: bool,
}

impl Default for LoggingConfig {
fn default() -> Self {
Self {
enabled: true,
level: LevelFilter::Info,
level: Default::default(),
env: false,
threads: true,
color: true,
Expand All @@ -31,18 +24,15 @@ impl Default for LoggingConfig {
}
}

#[derive(Deserialize, Serialize, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Hash)]
#[derive(
Deserialize, Serialize, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug, Hash,
)]
pub enum LevelFilter {
/// A level lower than all log levels.
Off,
/// Corresponds to the `Error` log level.
Error,
/// Corresponds to the `Warn` log level.
Warn,
/// Corresponds to the `Info` log level.
#[default]
Info,
/// Corresponds to the `Debug` log level.
Debug,
/// Corresponds to the `Trace` log level.
Trace,
}
20 changes: 1 addition & 19 deletions pumpkin-config/src/proxy.rs
Original file line number Diff line number Diff line change
@@ -1,39 +1,21 @@
use serde::{Deserialize, Serialize};
use serde_inline_default::serde_inline_default;

#[serde_inline_default]
#[derive(Deserialize, Serialize, Default)]
#[serde(default)]
pub struct ProxyConfig {
#[serde_inline_default(false)]
pub enabled: bool,
pub velocity: VelocityConfig,
pub bungeecord: BungeeCordConfig,
}

#[serde_inline_default]
#[derive(Deserialize, Serialize, Default)]
#[serde(default)]
pub struct BungeeCordConfig {
#[serde_inline_default(false)]
pub enabled: bool,
}

#[serde_inline_default]
#[derive(Deserialize, Serialize)]
#[derive(Deserialize, Serialize, Default)]
#[serde(default)]
pub struct VelocityConfig {
#[serde_inline_default(false)]
pub enabled: bool,
#[serde_inline_default("".to_string())]
pub secret: String,
}

impl Default for VelocityConfig {
fn default() -> Self {
Self {
enabled: false,
secret: "".into(),
}
}
}
8 changes: 1 addition & 7 deletions pumpkin-config/src/pvp.rs
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
use serde::{Deserialize, Serialize};
use serde_inline_default::serde_inline_default;

#[serde_inline_default]
#[derive(Deserialize, Serialize)]
#[serde(default)]
pub struct PVPConfig {
/// Is PVP enabled ?
#[serde_inline_default(true)]
pub enabled: bool,
/// Do we want to have the Red hurt animation & fov bobbing
#[serde_inline_default(true)]
pub hurt_animation: bool,
/// Should players in creative be protected against PVP
#[serde_inline_default(true)]
pub protect_creative: bool,
/// Has PVP Knockback?
#[serde_inline_default(true)]
pub knockback: bool,
/// Should player swing when attacking?
#[serde_inline_default(true)]
pub swing: bool,
}

Expand Down
5 changes: 1 addition & 4 deletions pumpkin-config/src/query.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
use serde::{Deserialize, Serialize};
use serde_inline_default::serde_inline_default;

#[serde_inline_default]
#[derive(Deserialize, Serialize, Default)]
#[serde(default)]
pub struct QueryConfig {
#[serde_inline_default(false)]
pub enabled: bool,
// Optional so if not specified the port server is running on will be used
#[serde_inline_default(None)]
pub port: Option<u16>,
}
Loading