chore: move to crates folder

This commit is contained in:
Alexander Medvedev 2026-08-06 12:56:40 +02:00
parent 5d10c0d8a8
commit cb3660bcd2
3393 changed files with 1270 additions and 741 deletions

2
.gitmodules vendored
View File

@ -1,3 +1,3 @@
[submodule "pumpkin-plugin-wit"] [submodule "pumpkin-plugin-wit"]
path = pumpkin-plugin-wit path = crates/pumpkin-plugin-wit
url = https://github.com/Pumpkin-MC/pumpkin-plugin-wit url = https://github.com/Pumpkin-MC/pumpkin-plugin-wit

View File

@ -1,19 +1,23 @@
[workspace] [workspace]
resolver = "3" resolver = "3"
members = [ members = [
"pumpkin-api-macros", "crates/pumpkin",
"pumpkin-config", "crates/pumpkin-api-macros",
"pumpkin-util", "crates/pumpkin-codecs",
"pumpkin-inventory", "crates/pumpkin-config",
"pumpkin-macros/", "crates/pumpkin-data",
"pumpkin-protocol/", "crates/pumpkin-inventory",
"pumpkin-world", "crates/pumpkin-macros",
"pumpkin/", "crates/pumpkin-nbt",
"pumpkin-data", "crates/pumpkin-plugin-api",
"pumpkin-plugin-api", "crates/pumpkin-protocol",
"pumpkin-codecs" "crates/pumpkin-util",
"crates/pumpkin-world",
] ]
exclude = ["pumpkin-codegen"] exclude = ["tools/pumpkin-codegen"]
# [workspace.lints.rust]
# missing_docs = "warn"
[workspace.lints.clippy] [workspace.lints.clippy]
# Groups # Groups
@ -49,7 +53,23 @@ print_stderr = "deny"
todo = "deny" todo = "deny"
unreachable = "deny" unreachable = "deny"
unimplemented = "deny" unimplemented = "deny"
# indexing_slicing = "deny"
# Safety & Soundness
undocumented_unsafe_blocks = "deny"
uninit_assumed_init = "deny"
uninit_vec = "deny"
cast_ptr_alignment = "deny"
ptr_as_ptr = "deny"
# Production Quality & Best Practices
fallible_impl_from = "deny"
mut_mut = "deny"
char_lit_as_u8 = "deny"
match_wild_err_arm = "deny"
invalid_upcast_comparisons = "deny"
# Expected/Allowed
clone_on_ref_ptr = "allow"
# Expected/Allowed # Expected/Allowed
cargo_common_metadata = "allow" cargo_common_metadata = "allow"
@ -148,15 +168,15 @@ num-traits = { version = "0.2", default-features = false, features = ["std"] }
p384 = { version = "0.14.0", default-features = false, features = ["std", "arithmetic", "pkcs8", "ecdh"] } p384 = { version = "0.14.0", default-features = false, features = ["std", "arithmetic", "pkcs8", "ecdh"] }
phf = { version = "0.14.0", default-features = false, features = ["std"] } phf = { version = "0.14.0", default-features = false, features = ["std"] }
proc-macro2 = { version = "1.0", default-features = false, features = ["proc-macro"] } proc-macro2 = { version = "1.0", default-features = false, features = ["proc-macro"] }
pumpkin-codecs = { path = "pumpkin-codecs", default-features = false } pumpkin-codecs = { path = "crates/pumpkin-codecs", default-features = false }
pumpkin-config = { path = "pumpkin-config", default-features = false } pumpkin-config = { path = "crates/pumpkin-config", default-features = false }
pumpkin-data = { path = "pumpkin-data", default-features = false } pumpkin-data = { path = "crates/pumpkin-data", default-features = false }
pumpkin-inventory = { path = "pumpkin-inventory", default-features = false } pumpkin-inventory = { path = "crates/pumpkin-inventory", default-features = false }
pumpkin-macros = { path = "pumpkin-macros", default-features = false } pumpkin-macros = { path = "crates/pumpkin-macros", default-features = false }
pumpkin-nbt = { path = "pumpkin-nbt", default-features = false } pumpkin-nbt = { path = "crates/pumpkin-nbt", default-features = false }
pumpkin-protocol = { path = "pumpkin-protocol", default-features = false } pumpkin-protocol = { path = "crates/pumpkin-protocol", default-features = false }
pumpkin-util = { path = "pumpkin-util", default-features = false } pumpkin-util = { path = "crates/pumpkin-util", default-features = false }
pumpkin-world = { path = "pumpkin-world", default-features = false } pumpkin-world = { path = "crates/pumpkin-world", default-features = false }
quote = { version = "1.0", default-features = false, features = ["proc-macro"] } quote = { version = "1.0", default-features = false, features = ["proc-macro"] }
rand = { version = "0.10.2", default-features = false, features = ["std", "std_rng", "thread_rng"] } rand = { version = "0.10.2", default-features = false, features = ["std", "std_rng", "thread_rng"] }
rsa = { version = "=0.10.0-rc.18", default-features = false, features = ["std", "encoding"] } rsa = { version = "=0.10.0-rc.18", default-features = false, features = ["std", "encoding"] }

View File

@ -59,19 +59,20 @@ pub fn plugin_impl(_attr: TokenStream, item: TokenStream) -> TokenStream {
let input_struct = parse_macro_input!(item as ItemStruct); let input_struct = parse_macro_input!(item as ItemStruct);
let struct_ident = &input_struct.ident; let struct_ident = &input_struct.ident;
let methods = PLUGIN_METHODS.lock().unwrap(); let methods: Vec<proc_macro2::TokenStream> = {
let guard = PLUGIN_METHODS.lock().unwrap();
let methods: Vec<proc_macro2::TokenStream> = methods guard
.values() .values()
.map(|s| { .map(|s| {
s.parse::<proc_macro2::TokenStream>().unwrap_or_else(|e| { s.parse::<proc_macro2::TokenStream>().unwrap_or_else(|e| {
abort!( abort!(
struct_ident, struct_ident,
format!("re-parsing cached method failed: {e}") format!("re-parsing cached method failed: {e}")
) )
})
}) })
}) .collect()
.collect(); };
// Combine the original struct definition with the impl block and plugin() function // Combine the original struct definition with the impl block and plugin() function
let expanded = quote! { let expanded = quote! {

View File

@ -53,6 +53,7 @@ impl Default for ChunkCompression {
} }
} }
/// Compression algorithm used for chunk data storage.
#[derive(Deserialize, Serialize, Clone, Copy)] #[derive(Deserialize, Serialize, Clone, Copy)]
pub enum Compression { pub enum Compression {
/// `GZip` Compression. /// `GZip` Compression.

View File

@ -1,3 +1,6 @@
//! Configuration management and serialization for the Pumpkin Minecraft server.
#![deny(missing_docs)]
use fun::FunConfig; use fun::FunConfig;
use logging::LoggingConfig; use logging::LoggingConfig;
use pumpkin_util::world_seed::Seed; use pumpkin_util::world_seed::Seed;
@ -8,12 +11,19 @@ use serde::{Deserialize, Serialize, de::DeserializeOwned};
use std::path::PathBuf; use std::path::PathBuf;
use std::{fs, num::NonZeroU8, path::Path}; use std::{fs, num::NonZeroU8, path::Path};
use tracing::{debug, warn}; use tracing::{debug, warn};
/// Fun and experimental configuration options.
pub mod fun; pub mod fun;
/// Server logging configuration options.
pub mod logging; pub mod logging;
/// Networking and protocol configuration options.
pub mod networking; pub mod networking;
/// Plugin management configuration options.
pub mod plugins; pub mod plugins;
/// Recipe system configuration options.
pub mod recipe; pub mod recipe;
/// Resource pack configuration options.
pub mod resource_pack; pub mod resource_pack;
pub use chat::ChatConfig; pub use chat::ChatConfig;
@ -31,15 +41,20 @@ pub use server_links::ServerLinksConfig;
mod commands; mod commands;
mod chat; mod chat;
/// Chunk loading and saving configuration options.
pub mod chunk; pub mod chunk;
/// Lighting engine configuration options.
pub mod lighting; pub mod lighting;
/// Operator permission level configuration options.
pub mod op; pub mod op;
mod advancement; mod advancement;
mod player_data; mod player_data;
mod pvp; mod pvp;
mod server_links; mod server_links;
/// Whitelist configuration options.
pub mod whitelist; pub mod whitelist;
/// World generation and dimension configuration options.
pub mod world; pub mod world;
use advancement::AdvancementConfig; use advancement::AdvancementConfig;
@ -48,11 +63,14 @@ use player_data::PlayerDataConfig;
use resource_pack::ResourcePackConfig; use resource_pack::ResourcePackConfig;
use world::LevelConfig; use world::LevelConfig;
/// Root configuration container for Pumpkin server settings.
#[derive(Deserialize, Serialize, Default)] #[derive(Deserialize, Serialize, Default)]
#[serde(default)] #[serde(default)]
pub struct PumpkinConfig { pub struct PumpkinConfig {
/// Core basic configuration settings.
#[serde(flatten)] #[serde(flatten)]
pub basic: BasicConfiguration, pub basic: BasicConfiguration,
/// Advanced and feature-specific configuration settings.
#[serde(flatten)] #[serde(flatten)]
pub advanced: AdvancedConfiguration, pub advanced: AdvancedConfiguration,
} }
@ -217,10 +235,12 @@ impl BasicConfiguration {
PathBuf::from(&self.default_level_name) PathBuf::from(&self.default_level_name)
} }
/// Validates basic configuration options.
pub const fn validate(&self) {} pub const fn validate(&self) {}
} }
impl AdvancedConfiguration { impl AdvancedConfiguration {
/// Validates advanced configuration options.
pub const fn validate(&self) { pub const fn validate(&self) {
//self.resource_pack.validate(); //self.resource_pack.validate();
} }

View File

@ -1,10 +1,14 @@
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
/// Lighting engine calculation mode.
#[derive(Deserialize, Serialize, Clone, Copy, PartialEq, Eq, Default)] #[derive(Deserialize, Serialize, Clone, Copy, PartialEq, Eq, Default)]
#[serde(rename_all = "lowercase")] #[serde(rename_all = "lowercase")]
pub enum LightingEngineConfig { pub enum LightingEngineConfig {
/// Default Vanilla lighting propagation.
#[default] #[default]
Default, Default,
/// Full skylight everywhere (no shadows).
Full, Full,
/// Completely dark lighting everywhere (zero light).
Dark, Dark,
} }

View File

@ -7,13 +7,21 @@ use crate::LANBroadcastConfig;
use bedrock::BedrockConfig; use bedrock::BedrockConfig;
use java::JavaConfig; use java::JavaConfig;
/// Authentication configuration.
pub mod auth; pub mod auth;
/// Bedrock protocol networking configuration.
pub mod bedrock; pub mod bedrock;
/// Packet compression configuration.
pub mod compression; pub mod compression;
/// Java protocol networking configuration.
pub mod java; pub mod java;
/// LAN broadcast discovery configuration.
pub mod lan_broadcast; pub mod lan_broadcast;
/// Reverse proxy and BungeeCord/Velocity configuration.
pub mod proxy; pub mod proxy;
/// GS4 Query protocol configuration.
pub mod query; pub mod query;
/// RCON remote console configuration.
pub mod rcon; pub mod rcon;
/// Configuration for server networking features. /// Configuration for server networking features.

View File

@ -1,5 +1,6 @@
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
/// Plugin system configuration.
#[derive(Deserialize, Serialize, Default)] #[derive(Deserialize, Serialize, Default)]
#[serde(default)] #[serde(default)]
pub struct PluginsConfig { pub struct PluginsConfig {

View File

@ -1,10 +1,13 @@
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use uuid::Uuid; use uuid::Uuid;
/// Server resource pack configuration for Java and Bedrock clients.
#[derive(Deserialize, Serialize, Default)] #[derive(Deserialize, Serialize, Default)]
#[serde(default)] #[serde(default)]
pub struct ResourcePackConfig { pub struct ResourcePackConfig {
/// Java Edition client resource pack configuration.
pub java: JavaResourcePackConfig, pub java: JavaResourcePackConfig,
/// Bedrock Edition client resource pack configuration.
pub bedrock: BedrockResourcePackConfig, pub bedrock: BedrockResourcePackConfig,
} }
@ -28,6 +31,7 @@ pub struct JavaResourcePackConfig {
#[derive(Deserialize, Serialize, Default)] #[derive(Deserialize, Serialize, Default)]
#[serde(default)] #[serde(default)]
pub struct BedrockResourcePackConfig { pub struct BedrockResourcePackConfig {
/// Whether Bedrock resource packs are enabled.
pub enabled: bool, pub enabled: bool,
/// If true, players cannot join without accepting packs. /// If true, players cannot join without accepting packs.
pub force: bool, pub force: bool,
@ -35,22 +39,33 @@ pub struct BedrockResourcePackConfig {
pub packs: Vec<BedrockPack>, pub packs: Vec<BedrockPack>,
} }
/// Bedrock resource pack manifest configuration entry.
#[derive(Deserialize, Serialize)] #[derive(Deserialize, Serialize)]
pub struct BedrockPack { pub struct BedrockPack {
/// Unique identifier for the Bedrock pack.
pub uuid: Uuid, pub uuid: Uuid,
/// Version string of the Bedrock pack.
pub version: String, pub version: String,
/// Size of the pack in bytes.
pub size: u64, pub size: u64,
/// Download URL for remote Bedrock packs.
pub download_url: String, pub download_url: String,
/// Optional encryption content key for encrypted packs.
#[serde(default)] #[serde(default)]
pub content_key: String, pub content_key: String,
/// Optional sub-pack name inside the archive.
#[serde(default)] #[serde(default)]
pub sub_pack_name: String, pub sub_pack_name: String,
/// Optional content identifier.
#[serde(default)] #[serde(default)]
pub content_id: String, pub content_id: String,
/// Whether the pack contains client scripts.
#[serde(default)] #[serde(default)]
pub has_scripts: bool, pub has_scripts: bool,
/// Whether the pack is marked as an addon pack.
#[serde(default)] #[serde(default)]
pub addon_pack: bool, pub addon_pack: bool,
/// Whether Ray Tracing / RTX features are enabled for the pack.
#[serde(default)] #[serde(default)]
pub rtx_enabled: bool, pub rtx_enabled: bool,
} }

View File

@ -9,6 +9,7 @@ use crate::{chunk::ChunkConfig, lighting::LightingEngineConfig};
pub struct LevelConfig { pub struct LevelConfig {
/// Configuration for chunk behaviour and management. /// Configuration for chunk behaviour and management.
pub chunk: ChunkConfig, pub chunk: ChunkConfig,
/// Configuration for lighting engine propagation mode.
#[serde(default)] #[serde(default)]
pub lighting: LightingEngineConfig, pub lighting: LightingEngineConfig,
/// Number of ticks between autosave checks. If 0, autosave is disabled. /// Number of ticks between autosave checks. If 0, autosave is disabled.

Some files were not shown because too many files have changed in this diff Show More