From f878d791061fddaca295577ef5e377bb475e033d Mon Sep 17 00:00:00 2001 From: spectre Date: Sat, 7 Sep 2024 08:55:58 +0200 Subject: [PATCH 01/13] Add the module player to get the uuid of a player --- .DS_Store | Bin 0 -> 6148 bytes src/player/mod.rs | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 .DS_Store create mode 100644 src/player/mod.rs diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..534849e376dcfd9d2901fd2b51803d3329dcdd9a GIT binary patch literal 6148 zcmeHKK~BRk5FDo!Y2nf%7o@x(5Z&R3@4biSC!(H zD+07Dt;exv?0Q_qF#tDtS)T(V00X9AGGuWeq+fC`5^YI|&X3U`M~wy*9`@MQ@EaYF zy*tJQ?(l>ScW$?Tv%0BPb+cl>{5i(V{L=?(v1Uu>+N*9HYb)G3WT}NbwpedU)n4s)+Rwv5v6S)!t*<4oL)Yh&g}Gt;{5C!Kl60BBA}J#fH}~0pcfuTa{f=h zzyEhd_GAv21OLha*Dn|4giF%1b#HNU)@IBlQ$l!cz@3B@e-x7|NAW4s2ir5L5DUdN SAX^yrA>eJW!W{Tf2fhHLv1E<_ literal 0 HcmV?d00001 diff --git a/src/player/mod.rs b/src/player/mod.rs new file mode 100644 index 0000000..54edb70 --- /dev/null +++ b/src/player/mod.rs @@ -0,0 +1,24 @@ +use reqwest::Client; +use serde_json::Value; +use std::error::Error; + +pub async fn get_uuid(username: &str) -> Result> { + let url = format!( + "https://api.mojang.com/users/profiles/minecraft/{}", + username + ); + let client = Client::new(); + let response = client.get(&url).send().await?; + let body = response.text().await?; + get_id(&body) +} + +fn get_id(all: &str) -> Result> { + let v: Value = serde_json::from_str(all)?; + if let Some(id) = v.get("id") { + if let Some(id_str) = id.as_str() { + return Ok(id_str.to_string()); + } + } + Err("Champ 'id' introuvable ou incorrectement formaté".into()) +} From d7587814c99588e2d8443cad8bf6f49623f729b2 Mon Sep 17 00:00:00 2001 From: Urpagin Date: Sat, 7 Sep 2024 20:39:23 +0200 Subject: [PATCH 02/13] Update gitignore --- .DS_Store | Bin 6148 -> 0 bytes .gitignore | 17 ++++++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 534849e376dcfd9d2901fd2b51803d3329dcdd9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKK~BRk5FDo!Y2nf%7o@x(5Z&R3@4biSC!(H zD+07Dt;exv?0Q_qF#tDtS)T(V00X9AGGuWeq+fC`5^YI|&X3U`M~wy*9`@MQ@EaYF zy*tJQ?(l>ScW$?Tv%0BPb+cl>{5i(V{L=?(v1Uu>+N*9HYb)G3WT}NbwpedU)n4s)+Rwv5v6S)!t*<4oL)Yh&g}Gt;{5C!Kl60BBA}J#fH}~0pcfuTa{f=h zzyEhd_GAv21OLha*Dn|4giF%1b#HNU)@IBlQ$l!cz@3B@e-x7|NAW4s2ir5L5DUdN SAX^yrA>eJW!W{Tf2fhHLv1E<_ diff --git a/.gitignore b/.gitignore index 4ae8070..a43d08c 100644 --- a/.gitignore +++ b/.gitignore @@ -108,19 +108,19 @@ fabric.properties .idea/caches/build_file_checksums.ser .idea/ + + # different file generated by the server -# World folder -world/* -world/DIM1/ -world/DIM-1/ -world/region/ -# logs folder +# World directories +world/ + +# Logs directory logs/ -#conf files +# Configuration files ops.json whitelist.json banned-ips.json @@ -130,3 +130,6 @@ session.lock version.json server.properties eula.txt + +# macOS files +.DS_Store From 40022c6066abf76a58333461625bf11b12c414a2 Mon Sep 17 00:00:00 2001 From: spectre Date: Sat, 7 Sep 2024 21:00:16 +0200 Subject: [PATCH 03/13] start the slp --- src/config/mod.rs | 9 +++++++-- src/consts/mod.rs | 13 +++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/config/mod.rs b/src/config/mod.rs index e125ff0..a165b66 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -66,7 +66,7 @@ pub struct Settings { max_tick_time: i64, require_resource_pack: bool, use_native_transport: bool, - max_players: u32, + pub max_players: u32, online_mode: bool, enable_status: bool, allow_flight: bool, @@ -134,7 +134,12 @@ impl Settings { "" => None, s => Some(s.parse::().unwrap()), }, - gamemode: match config_file.get_property("gamemode").unwrap().to_lowercase().as_str() { + gamemode: match config_file + .get_property("gamemode") + .unwrap() + .to_lowercase() + .as_str() + { "creative" => Gamemode::CREATIVE, "survival" => Gamemode::SURVIVAL, "spectator" => Gamemode::SPECTATOR, diff --git a/src/consts/mod.rs b/src/consts/mod.rs index 5f2d4a5..c8da903 100644 --- a/src/consts/mod.rs +++ b/src/consts/mod.rs @@ -145,3 +145,16 @@ white-list=false"#; ) } } +pub mod ping_slp { + use crate::config; + + use super::minecraft::{PROTOCOL_VERSION, VERSION}; + ///return the json which will be send as a response of the ping to the CLI. + pub fn JSON_response() -> () { + // For the version like 1.21.1,767. + let version_name = VERSION; + let version_protocol = PROTOCOL_VERSION; + // For the players. + let player_max = config::Settings::new().max_players(); + } +} From ddf26408ba5c5abac3ba244ee336683781b89610 Mon Sep 17 00:00:00 2001 From: Urpagin Date: Sat, 7 Sep 2024 21:04:00 +0200 Subject: [PATCH 04/13] Things --- Cargo.lock | 53 +++++++++++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 1 + src/args/mod.rs | 3 +++ src/main.rs | 1 + 4 files changed, 58 insertions(+) create mode 100644 src/args/mod.rs diff --git a/Cargo.lock b/Cargo.lock index d3224b3..fd4b542 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -182,6 +182,46 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "clap" +version = "4.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" + [[package]] name = "colorchoice" version = "1.0.2" @@ -203,6 +243,7 @@ name = "copper_server" version = "0.1.0" dependencies = [ "chrono", + "clap", "colored", "ctrlc", "dot-properties", @@ -416,6 +457,12 @@ version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + [[package]] name = "hermit-abi" version = "0.3.9" @@ -1255,6 +1302,12 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "subtle" version = "2.6.1" diff --git a/Cargo.toml b/Cargo.toml index bc9547e..f98f741 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ tempfile = "3.12.0" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.127" reqwest = { version = "0.12.7", features = ["json", "rustls-tls"] } +clap = { version = "4.5.17", features = ["derive"] } [profile.release] opt-level = 3 # optimiosation level 3 is the best debug = false diff --git a/src/args/mod.rs b/src/args/mod.rs new file mode 100644 index 0000000..51ede8a --- /dev/null +++ b/src/args/mod.rs @@ -0,0 +1,3 @@ +pub fn init() { + todo!(); +} diff --git a/src/main.rs b/src/main.rs index 405f81c..2ef4e25 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,6 @@ //! The servers's entrypoint file. +mod args; mod commands; mod config; mod consts; From d96de79564a0b7fb03cc3216a24df8e1c221bebd Mon Sep 17 00:00:00 2001 From: Urpagin Date: Sat, 7 Sep 2024 22:01:02 +0200 Subject: [PATCH 05/13] Refactor args parsing --- src/args/mod.rs | 27 +++++++++- src/fs_manager/mod.rs | 123 +++++++++++++++++++++++------------------- src/main.rs | 17 ------ 3 files changed, 93 insertions(+), 74 deletions(-) diff --git a/src/args/mod.rs b/src/args/mod.rs index 51ede8a..809c91c 100644 --- a/src/args/mod.rs +++ b/src/args/mod.rs @@ -1,3 +1,28 @@ +use crate::fs_manager; +use clap::Parser; +use log::error; + +#[derive(Parser)] +#[command(name = "CopperMC")] +#[command(about = "This is the about, please change", long_about = None)] +struct Cli { + /// Removes all files related to the server, excluding the server. + #[arg(short, long)] + remove_files: Option, +} + +/// Retrieves args and initializes the argument parsing logic. pub fn init() { - todo!(); + let args = Cli::parse(); + + parse_args(args); +} + +/// Parses args and calls the appropriate functions. +fn parse_args(args: Cli) { + if let Some(_) = args.remove_files { + if let Err(e) = fs_manager::clean_files() { + error!("Error(s) when cleaning files: {e}"); + } + } } diff --git a/src/fs_manager/mod.rs b/src/fs_manager/mod.rs index 52ea16d..bd775df 100644 --- a/src/fs_manager/mod.rs +++ b/src/fs_manager/mod.rs @@ -68,62 +68,6 @@ fn check_eula() -> io::Result { Ok(false) } -pub fn clean_file() -> () { - match fs::remove_file(consts::filepaths::EULA) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - match fs::remove_file(consts::filepaths::PROPERTIES) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - match fs::remove_file(consts::filepaths::BANNED_IP) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - match fs::remove_file(consts::filepaths::BANNED_PLAYERS) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - match fs::remove_file(consts::filepaths::OPERATORS) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - match fs::remove_file(consts::filepaths::SESSION) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - match fs::remove_file(consts::filepaths::USERCACHE) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - match fs::remove_file(consts::filepaths::WHITELIST) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - //clean folder: - match fs::remove_dir(consts::folderpath::LOGS) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - match fs::remove_dir(consts::folderpath::NETHER) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - match fs::remove_dir(consts::folderpath::OVERWORLD) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - match fs::remove_dir(consts::folderpath::THE_END) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } - match fs::remove_dir(consts::folderpath::WORLDS_DIRECTORY) { - Ok(_) => info!("File delete."), - Err(e) => info!("Error when delete file: {}", e), - } -} - pub fn create_other_files() { match utils::create_file_nn(Path::new(consts::filepaths::BANNED_IP)) { Ok(_) => info!("Created file {}", consts::filepaths::BANNED_IP), @@ -260,3 +204,70 @@ pub fn write_ops_json( file.write_all(serde_json::to_string_pretty(&json_data)?.as_bytes()); Ok(()) } + +/// Removes all files related to the server, excluding the server. +/// +/// I am not sure if this is a good idea, because it takes some time to maintain and is not very +/// useful. +pub fn clean_files() -> Result<(), std::io::Error> { + // Define a helper function to handle file removals + fn remove_file(file_path: &str) -> Result<(), std::io::Error> { + match fs::remove_file(file_path) { + Ok(_) => { + info!("File deleted: {}", file_path); + Ok(()) + } + Err(e) => { + info!("Error when deleting file {}: {}", file_path, e); + Err(e) + } + } + } + + // Define a helper function to handle directory removals + fn remove_dir(dir_path: &str) -> Result<(), std::io::Error> { + match fs::remove_dir(dir_path) { + Ok(_) => { + info!("Directory deleted: {}", dir_path); + Ok(()) + } + Err(e) => { + info!("Error when deleting directory {}: {}", dir_path, e); + Err(e) + } + } + } + + // List all files to be deleted + let files = [ + consts::filepaths::EULA, + consts::filepaths::PROPERTIES, + consts::filepaths::BANNED_IP, + consts::filepaths::BANNED_PLAYERS, + consts::filepaths::OPERATORS, + consts::filepaths::SESSION, + consts::filepaths::USERCACHE, + consts::filepaths::WHITELIST, + ]; + + // Delete files using the `remove_file` helper function + for file in &files { + remove_file(file)?; + } + + // List all directories to be deleted + let directories = [ + consts::folderpath::LOGS, + consts::folderpath::NETHER, + consts::folderpath::OVERWORLD, + consts::folderpath::THE_END, + consts::folderpath::WORLDS_DIRECTORY, + ]; + + // Delete directories using the `remove_dir` helper function + for dir in &directories { + remove_dir(dir)?; + } + + gracefully_exit(0); +} diff --git a/src/main.rs b/src/main.rs index 2ef4e25..e3edc37 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,30 +11,13 @@ mod packet; mod player; mod slp; mod time; -use std::env::{self}; use config::Gamemode; use consts::messages; -use fs_manager::clean_file; use log::{error, info, warn}; #[tokio::main] async fn main() { - let arguments: Vec = env::args().collect(); - - if arguments.len() > 1 { - match arguments[1].as_str() { - "-remove_files" | "--remove" => { - clean_file(); - info!("All files have been removed."); - gracefully_exit(-1); - } - _ => { - warn!("Failed to read the arguments..."); - } - } - } - if let Err(e) = early_init().await { error!("Failed to start the server, error in early initialization: {e}. \nExiting..."); gracefully_exit(-1); From 8c6e775a6853d20f1713d4761b3788ee271724ea Mon Sep 17 00:00:00 2001 From: vincent Date: Fri, 23 Aug 2024 02:56:24 -0700 Subject: [PATCH 06/13] add a new folder for new metthods --- src/file_folder_parser/mod.rs | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/file_folder_parser/mod.rs diff --git a/src/file_folder_parser/mod.rs b/src/file_folder_parser/mod.rs new file mode 100644 index 0000000..e69de29 From 8a3f841f7e99b75278ca34d901c9c208302c7682 Mon Sep 17 00:00:00 2001 From: vincent Date: Fri, 23 Aug 2024 03:01:30 -0700 Subject: [PATCH 07/13] add a new pub fn --- src/file_folder_parser/mod.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/file_folder_parser/mod.rs b/src/file_folder_parser/mod.rs index e69de29..3eefd8c 100644 --- a/src/file_folder_parser/mod.rs +++ b/src/file_folder_parser/mod.rs @@ -0,0 +1,7 @@ +use std::fmt::Error; + +pub fn create_server_properties() ->Result<(),Error> { + let mut file = File::create("server.properties")?; + file.write_all(b"test")?; + Ok(()) +} From 08854941691185190fb883ce31b7691bdeb9b1bb Mon Sep 17 00:00:00 2001 From: Urpagin Date: Sun, 8 Sep 2024 18:24:09 +0200 Subject: [PATCH 08/13] conflicts --- server_test.properties | 58 +++++++++++++++++++++++++++++++++++ src/consts/mod.rs | 2 +- src/file_folder_parser/mod.rs | 12 +++++--- src/main.rs | 7 +++-- 4 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 server_test.properties diff --git a/server_test.properties b/server_test.properties new file mode 100644 index 0000000..c9bfb26 --- /dev/null +++ b/server_test.properties @@ -0,0 +1,58 @@ + +enable-jmx-monitoring=false +rcon.port=25575 +level-seed= +gamemode=survival +enable-command-block=false +enable-query=false +generator-settings={} +enforce-secure-profile=true +level-name=world +motd=A Minecraft Server +query.port=25565 +pvp=true +generate-structures=true +max-chained-neighbor-updates=1000000 +difficulty=easy +network-compression-threshold=256 +max-tick-time=60000 +require-resource-pack=false +use-native-transport=true +max-players=20 +online-mode=true +enable-status=true +allow-flight=false +initial-disabled-packs= +broadcast-rcon-to-ops=true +view-distance=10 +server-ip= +resource-pack-prompt= +allow-nether=true +server-port=25565 +enable-rcon=false +sync-chunk-writes=true +op-permission-level=4 +prevent-proxy-connections=false +hide-online-players=false +resource-pack= +entity-broadcast-range-percentage=100 +simulation-distance=10 +rcon.password= +player-idle-timeout=0 +force-gamemode=false +rate-limit=0 +hardcore=false +white-list=false +broadcast-console-to-ops=true +spawn-npcs=true +spawn-animals=true +log-ips=true +function-permission-level=2 +initial-enabled-packs=vanilla +level-type=minecraft\:normal +text-filtering-config= +spawn-monsters=true +enforce-whitelist=false +spawn-protection=16 +resource-pack-sha1= +max-world-size=29999984 diff --git a/src/consts/mod.rs b/src/consts/mod.rs index c8da903..88cc5e5 100644 --- a/src/consts/mod.rs +++ b/src/consts/mod.rs @@ -155,6 +155,6 @@ pub mod ping_slp { let version_name = VERSION; let version_protocol = PROTOCOL_VERSION; // For the players. - let player_max = config::Settings::new().max_players(); + //let player_max = config::Settings::new().max_players(); } } diff --git a/src/file_folder_parser/mod.rs b/src/file_folder_parser/mod.rs index 3eefd8c..ba1c7a8 100644 --- a/src/file_folder_parser/mod.rs +++ b/src/file_folder_parser/mod.rs @@ -1,7 +1,11 @@ -use std::fmt::Error; +use std::fs::File; +use std::io::{self, Write}; // Importer std::io pour utiliser io::Result et io::Error + +pub fn create_server_properties(content:&str) -> io::Result<()> { + // create the file + let mut file = File::create("server_test.properties")?; + //write into the file + file.write_all(content.as_bytes())?; // chatgpt says me rust want have bytes for write anything ... -pub fn create_server_properties() ->Result<(),Error> { - let mut file = File::create("server.properties")?; - file.write_all(b"test")?; Ok(()) } diff --git a/src/main.rs b/src/main.rs index e3edc37..2e07de6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,17 +4,19 @@ mod args; mod commands; mod config; mod consts; +mod file_folder_parser; mod fs_manager; mod logging; mod net; mod packet; -mod player; + mod slp; +use log::{error, info, warn}; +mod player; mod time; use config::Gamemode; use consts::messages; -use log::{error, info, warn}; #[tokio::main] async fn main() { @@ -52,7 +54,6 @@ async fn early_init() -> Result<(), Box> { // Listens for cli input commands commands::listen_console_commands().await; - Ok(()) } From ed7f2fcbf3ed867fa0e0d16508513ca8c31e0621 Mon Sep 17 00:00:00 2001 From: Urpagin Date: Sun, 8 Sep 2024 18:28:21 +0200 Subject: [PATCH 09/13] change gitignore --- .gitignore | 2 +- server_test.properties | 58 ------------------------------------------ 2 files changed, 1 insertion(+), 59 deletions(-) delete mode 100644 server_test.properties diff --git a/.gitignore b/.gitignore index a43d08c..4c485da 100644 --- a/.gitignore +++ b/.gitignore @@ -128,7 +128,7 @@ banned-players.json usercache.json session.lock version.json -server.properties +*.properties eula.txt # macOS files diff --git a/server_test.properties b/server_test.properties deleted file mode 100644 index c9bfb26..0000000 --- a/server_test.properties +++ /dev/null @@ -1,58 +0,0 @@ - -enable-jmx-monitoring=false -rcon.port=25575 -level-seed= -gamemode=survival -enable-command-block=false -enable-query=false -generator-settings={} -enforce-secure-profile=true -level-name=world -motd=A Minecraft Server -query.port=25565 -pvp=true -generate-structures=true -max-chained-neighbor-updates=1000000 -difficulty=easy -network-compression-threshold=256 -max-tick-time=60000 -require-resource-pack=false -use-native-transport=true -max-players=20 -online-mode=true -enable-status=true -allow-flight=false -initial-disabled-packs= -broadcast-rcon-to-ops=true -view-distance=10 -server-ip= -resource-pack-prompt= -allow-nether=true -server-port=25565 -enable-rcon=false -sync-chunk-writes=true -op-permission-level=4 -prevent-proxy-connections=false -hide-online-players=false -resource-pack= -entity-broadcast-range-percentage=100 -simulation-distance=10 -rcon.password= -player-idle-timeout=0 -force-gamemode=false -rate-limit=0 -hardcore=false -white-list=false -broadcast-console-to-ops=true -spawn-npcs=true -spawn-animals=true -log-ips=true -function-permission-level=2 -initial-enabled-packs=vanilla -level-type=minecraft\:normal -text-filtering-config= -spawn-monsters=true -enforce-whitelist=false -spawn-protection=16 -resource-pack-sha1= -max-world-size=29999984 From ceb31f497f4512b0bcd0eea865581d01f788cb27 Mon Sep 17 00:00:00 2001 From: Urpagin Date: Sun, 8 Sep 2024 18:30:00 +0200 Subject: [PATCH 10/13] change gitignore --- .editorconfig | 17 ----------------- .gitignore | 3 +++ 2 files changed, 3 insertions(+), 17 deletions(-) delete mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 7fc84ba..0000000 --- a/.editorconfig +++ /dev/null @@ -1,17 +0,0 @@ -# EditorConfig is awesome: http://EditorConfig.org - -root = true - -[*] -indent_style = space -indent_size = 4 -trim_trailing_whitespace = true -insert_final_newline = true -end_of_line = lf - -[*.md] -trim_trailing_whitespace = false - -[Makefile] -indent_style = tab -trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore index 4c485da..8ab0791 100644 --- a/.gitignore +++ b/.gitignore @@ -133,3 +133,6 @@ eula.txt # macOS files .DS_Store + +# Other +.editorconfig From 980d63c40f8a078c850a7ea5d2801979cdb5c4b3 Mon Sep 17 00:00:00 2001 From: Spectre Date: Wed, 25 Sep 2024 09:27:39 +0200 Subject: [PATCH 11/13] memory leak --- TODO.md | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ perf.data | Bin 0 -> 948128 bytes 2 files changed, 83 insertions(+) create mode 100644 perf.data diff --git a/TODO.md b/TODO.md index 8fe978c..b02a396 100644 --- a/TODO.md +++ b/TODO.md @@ -13,3 +13,86 @@ - [ ] Somehow get a player to connect +# Issues +- [ ] resolve this memory leak +spectre@fedora:~/RustProject/CopperMC$ valgrind --tool=memcheck --leak-check=full ./target/release/copper_server +==20441== Memcheck, a memory error detector +==20441== Copyright (C) 2002-2024, and GNU GPL'd, by Julian Seward et al. +==20441== Using Valgrind-3.23.0 and LibVEX; rerun with -h for copyright info +==20441== Command: ./target/release/copper_server +==20441== +[2024-09-25T07:26:15Z INFO copper_server] Starting minecraft server version 1.21.1 +[2024-09-25T07:26:15Z INFO copper_server] Hello, world from Copper! +[2024-09-25T07:26:15Z ERROR copper_server::fs_manager] Cannot start the server, please agree to the 'eula.txt' +[2024-09-25T07:26:15Z WARN copper_server] [ SERVER SHUTDOWN WITH CODE: -1] +==20441== +==20441== HEAP SUMMARY: +==20441== in use at exit: 103,256 bytes in 172 blocks +==20441== total heap usage: 289 allocs, 117 frees, 118,951 bytes allocated +==20441== +==20441== 280 bytes in 1 blocks are possibly lost in loss record 42 of 60 +==20441== at 0x4843866: malloc (vg_replace_malloc.c:446) +==20441== by 0x1455A3: hashbrown::raw::RawTable::reserve_rehash (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x36DF4B: tokio::runtime::blocking::pool::Spawner::spawn_task (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x363AA8: tokio::runtime::builder::Builder::build (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x16EFF4: copper_server::main (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x17A502: std::sys::backtrace::__rust_begin_short_backtrace (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x16ECAC: main (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== +==20441== 304 bytes in 1 blocks are possibly lost in loss record 43 of 60 +==20441== at 0x484B133: calloc (vg_replace_malloc.c:1675) +==20441== by 0x4011FE3: UnknownInlinedFun (rtld-malloc.h:44) +==20441== by 0x4011FE3: allocate_dtv (dl-tls.c:370) +==20441== by 0x4012A71: _dl_allocate_tls (dl-tls.c:629) +==20441== by 0x4FA2233: allocate_stack (allocatestack.c:429) +==20441== by 0x4FA2233: pthread_create@@GLIBC_2.34 (pthread_create.c:655) +==20441== by 0x3526A9: std::sys::pal::unix::thread::Thread::new (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x16E031: copper_server::init_ctrlc_handler (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x16F674: copper_server::main (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x17A502: std::sys::backtrace::__rust_begin_short_backtrace (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x16ECAC: main (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== +==20441== 304 bytes in 1 blocks are possibly lost in loss record 44 of 60 +==20441== at 0x484B133: calloc (vg_replace_malloc.c:1675) +==20441== by 0x4011FE3: UnknownInlinedFun (rtld-malloc.h:44) +==20441== by 0x4011FE3: allocate_dtv (dl-tls.c:370) +==20441== by 0x4012A71: _dl_allocate_tls (dl-tls.c:629) +==20441== by 0x4FA2233: allocate_stack (allocatestack.c:429) +==20441== by 0x4FA2233: pthread_create@@GLIBC_2.34 (pthread_create.c:655) +==20441== by 0x3526A9: std::sys::pal::unix::thread::Thread::new (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x36DEB0: tokio::runtime::blocking::pool::Spawner::spawn_task (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x181CC8: copper_server::commands::command_line::handle_input::{{closure}} (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x1814C7: tokio::runtime::task::core::Core::poll (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x149521: tokio::runtime::task::raw::poll (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x355454: tokio::runtime::scheduler::multi_thread::worker::Context::run_task (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x3594C3: tokio::runtime::task::raw::poll (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x35BBB6: std::sys::backtrace::__rust_begin_short_backtrace (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== +==20441== 1,216 bytes in 4 blocks are possibly lost in loss record 51 of 60 +==20441== at 0x484B133: calloc (vg_replace_malloc.c:1675) +==20441== by 0x4011FE3: UnknownInlinedFun (rtld-malloc.h:44) +==20441== by 0x4011FE3: allocate_dtv (dl-tls.c:370) +==20441== by 0x4012A71: _dl_allocate_tls (dl-tls.c:629) +==20441== by 0x4FA2233: allocate_stack (allocatestack.c:429) +==20441== by 0x4FA2233: pthread_create@@GLIBC_2.34 (pthread_create.c:655) +==20441== by 0x3526A9: std::sys::pal::unix::thread::Thread::new (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x36DEB0: tokio::runtime::blocking::pool::Spawner::spawn_task (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x363AA8: tokio::runtime::builder::Builder::build (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x16EFF4: copper_server::main (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x17A502: std::sys::backtrace::__rust_begin_short_backtrace (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== by 0x16ECAC: main (in /home/spectre/RustProject/CopperMC/target/release/copper_server) +==20441== +==20441== LEAK SUMMARY: +==20441== definitely lost: 0 bytes in 0 blocks +==20441== indirectly lost: 0 bytes in 0 blocks +==20441== possibly lost: 2,104 bytes in 7 blocks +==20441== still reachable: 101,152 bytes in 165 blocks +==20441== suppressed: 0 bytes in 0 blocks +==20441== Reachable blocks (those to which a pointer was found) are not shown. +==20441== To see them, rerun with: --leak-check=full --show-leak-kinds=all +==20441== +==20441== For lists of detected and suppressed errors, rerun with: -s +==20441== ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0) +spectre@fedora:~/RustProject/CopperMC$ + + diff --git a/perf.data b/perf.data new file mode 100644 index 0000000000000000000000000000000000000000..04a5759736b8971481bc461c479e9f3fc5fb0a68 GIT binary patch literal 948128 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 literal 0 HcmV?d00001 From 0043cb9afbb90309c734265424170ea2d0edbd3b Mon Sep 17 00:00:00 2001 From: Spectre Date: Wed, 25 Sep 2024 09:28:39 +0200 Subject: [PATCH 12/13] memory leak --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8ab0791..73e70f0 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ release/ rls/ *.o .vscode/ - +perf.data # Generated by Cargo # will have compiled files and executables debug/ From b471b1a29378f67072f45e3642b7424670d74cbd Mon Sep 17 00:00:00 2001 From: noname <137953859+Fare-spec@users.noreply.github.com> Date: Wed, 6 Nov 2024 09:42:37 +0100 Subject: [PATCH 13/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e1c5daf..917fe28 100644 --- a/README.md +++ b/README.md @@ -48,4 +48,4 @@ Copper is licensed under the Mozilla Public License Version 2.0. See the `LICENS --- -For any questions or comments, feel free to open an issue or contact me directly at the email: [minecraft.copper@proton.me](mailto:minecraft.copper@proton.me) +For any questions or comments, feel free to open an issue or contact me directly at the email: [minecraft.copper@proton.me](mailto:minecraft.cactus@proton.me)