From 2fbf450ed35eb1cc16cdaeef6a8cf54e91f7368b Mon Sep 17 00:00:00 2001 From: DaniD3v Date: Sat, 31 Aug 2024 18:16:15 +0200 Subject: [PATCH] Moved GameMode into pumpkin-core --- Cargo.lock | 2 ++ pumpkin-core/Cargo.toml | 3 +++ pumpkin-core/src/gamemode.rs | 30 +++++++++++++++++++++++++ pumpkin-core/src/lib.rs | 3 +++ pumpkin/src/client/player_packet.rs | 4 ++-- pumpkin/src/commands/cmd_gamemode.rs | 2 +- pumpkin/src/config/mod.rs | 3 ++- pumpkin/src/entity/player.rs | 33 +++------------------------- pumpkin/src/server.rs | 3 ++- 9 files changed, 48 insertions(+), 35 deletions(-) create mode 100644 pumpkin-core/src/gamemode.rs diff --git a/Cargo.lock b/Cargo.lock index 990b46cf0..e2e6ed06c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1936,6 +1936,8 @@ dependencies = [ "colored", "fastnbt", "md5", + "num-derive", + "num-traits", "serde", "uuid", ] diff --git a/pumpkin-core/Cargo.toml b/pumpkin-core/Cargo.toml index 6bd39248b..8d7ae3900 100644 --- a/pumpkin-core/Cargo.toml +++ b/pumpkin-core/Cargo.toml @@ -9,3 +9,6 @@ fastnbt = { git = "https://github.com/owengage/fastnbt.git" } uuid.workspace = true colored = "2" md5 = "0.7.0" + +num-traits = "0.2.19" +num-derive = { version = "0.4.2" } diff --git a/pumpkin-core/src/gamemode.rs b/pumpkin-core/src/gamemode.rs new file mode 100644 index 000000000..6e996a6f9 --- /dev/null +++ b/pumpkin-core/src/gamemode.rs @@ -0,0 +1,30 @@ +use std::str::FromStr; + +use num_derive::{FromPrimitive, ToPrimitive}; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, PartialEq, Eq)] +pub struct ParseGameModeError; + +#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize, FromPrimitive, ToPrimitive)] +pub enum GameMode { + Undefined = -1, + Survival, + Creative, + Adventure, + Spectator, +} + +impl FromStr for GameMode { + type Err = ParseGameModeError; + + fn from_str(s: &str) -> Result { + match s { + "survival" => Ok(Self::Survival), + "creative" => Ok(Self::Creative), + "adventure" => Ok(Self::Adventure), + "spectator" => Ok(Self::Spectator), + _ => Err(ParseGameModeError), + } + } +} diff --git a/pumpkin-core/src/lib.rs b/pumpkin-core/src/lib.rs index 4cfe1770b..d7f4f5837 100644 --- a/pumpkin-core/src/lib.rs +++ b/pumpkin-core/src/lib.rs @@ -1,2 +1,5 @@ +pub mod gamemode; pub mod random; pub mod text; + +pub use gamemode::GameMode; diff --git a/pumpkin/src/client/player_packet.rs b/pumpkin/src/client/player_packet.rs index 15fe31477..4323d0eda 100644 --- a/pumpkin/src/client/player_packet.rs +++ b/pumpkin/src/client/player_packet.rs @@ -3,12 +3,12 @@ use std::f32::consts::PI; use crate::{ commands::{handle_command, CommandSender}, config::ADVANCED_CONFIG, - entity::player::{ChatMode, GameMode, Hand, Player}, + entity::player::{ChatMode, Hand, Player}, server::Server, util::math::wrap_degrees, }; use num_traits::FromPrimitive; -use pumpkin_core::text::TextComponent; +use pumpkin_core::{text::TextComponent, GameMode}; use pumpkin_entity::EntityId; use pumpkin_inventory::WindowType; use pumpkin_protocol::server::play::{SCloseContainer, SSetPlayerGround, SUseItem}; diff --git a/pumpkin/src/commands/cmd_gamemode.rs b/pumpkin/src/commands/cmd_gamemode.rs index 375172f27..17e47fea4 100644 --- a/pumpkin/src/commands/cmd_gamemode.rs +++ b/pumpkin/src/commands/cmd_gamemode.rs @@ -2,6 +2,7 @@ use std::str::FromStr; use num_traits::FromPrimitive; use pumpkin_core::text::TextComponent; +use pumpkin_core::GameMode; use crate::commands::arg_player::{consume_arg_player, parse_arg_player}; @@ -13,7 +14,6 @@ use crate::commands::tree::{CommandTree, ConsumedArgs, RawArgs}; use crate::commands::tree_builder::{argument, require}; use crate::commands::CommandSender; use crate::commands::CommandSender::Player; -use crate::entity::player::GameMode; const NAMES: [&str; 1] = ["gamemode"]; diff --git a/pumpkin/src/config/mod.rs b/pumpkin/src/config/mod.rs index 5c854116d..6f2cb88d5 100644 --- a/pumpkin/src/config/mod.rs +++ b/pumpkin/src/config/mod.rs @@ -1,4 +1,5 @@ use log::warn; +use pumpkin_core::GameMode; use serde::{de::DeserializeOwned, Deserialize, Serialize}; use std::{ @@ -8,7 +9,7 @@ use std::{ sync::LazyLock, }; -use crate::{entity::player::GameMode, server::Difficulty}; +use crate::server::Difficulty; pub mod auth; pub mod proxy; diff --git a/pumpkin/src/entity/player.rs b/pumpkin/src/entity/player.rs index 2ee561f41..1dd05cb50 100644 --- a/pumpkin/src/entity/player.rs +++ b/pumpkin/src/entity/player.rs @@ -1,8 +1,8 @@ -use std::{str::FromStr, sync::Arc}; +use std::sync::Arc; -use num_derive::{FromPrimitive, ToPrimitive}; +use num_derive::FromPrimitive; use num_traits::ToPrimitive; -use pumpkin_core::text::TextComponent; +use pumpkin_core::{text::TextComponent, GameMode}; use pumpkin_entity::{entity_type::EntityType, pose::EntityPose, Entity, EntityId}; use pumpkin_inventory::player::PlayerInventory; use pumpkin_protocol::{ @@ -21,7 +21,6 @@ use pumpkin_protocol::{ ConnectionState, RawPacket, ServerPacket, VarInt, }; use pumpkin_world::vector3::Vector3; -use serde::{Deserialize, Serialize}; use crate::{ client::{authentication::GameProfile, Client}, @@ -454,29 +453,3 @@ pub enum ChatMode { CommandsOnly, Hidden, } - -#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize, FromPrimitive, ToPrimitive)] -pub enum GameMode { - Undefined = -1, - Survival, - Creative, - Adventure, - Spectator, -} - -#[derive(Debug, PartialEq, Eq)] -pub struct ParseGameModeError; - -impl FromStr for GameMode { - type Err = ParseGameModeError; - - fn from_str(s: &str) -> Result { - match s { - "survival" => Ok(Self::Survival), - "creative" => Ok(Self::Creative), - "adventure" => Ok(Self::Adventure), - "spectator" => Ok(Self::Spectator), - _ => Err(ParseGameModeError), - } - } -} diff --git a/pumpkin/src/server.rs b/pumpkin/src/server.rs index 8a2bb136a..00da103c9 100644 --- a/pumpkin/src/server.rs +++ b/pumpkin/src/server.rs @@ -11,6 +11,7 @@ use std::{ use base64::{engine::general_purpose, Engine}; use image::GenericImageView; use mio::Token; +use pumpkin_core::GameMode; use pumpkin_entity::EntityId; use pumpkin_plugin::PluginLoader; use pumpkin_protocol::{ @@ -26,7 +27,7 @@ use serde::{Deserialize, Serialize}; use crate::{ client::Client, config::{BasicConfiguration, BASIC_CONFIG}, - entity::player::{GameMode, Player}, + entity::player::Player, world::World, };