Commands: Support gamemode command to use numbers

This commit is contained in:
Snowiiii 2024-08-13 12:49:34 +02:00
parent 2eb4c8624f
commit 32a172f3c0
2 changed files with 23 additions and 6 deletions

View File

@ -1,3 +1,8 @@
use num_traits::FromPrimitive;
use pumpkin_text::TextComponent;
use crate::entity::player::GameMode;
use super::Command;
pub struct GamemodeCommand {}
@ -12,8 +17,7 @@ impl<'a> Command<'a> for GamemodeCommand {
let args: Vec<&str> = command.split_whitespace().collect();
if args.len() != 2 {
// TODO: red
player.send_system_message("Usage: /gamemode <mode>".into());
player.send_system_message(TextComponent::from("Usage: /gamemode <mode>").color_named(pumpkin_text::color::NamedColor::Red));
return;
}
@ -21,11 +25,24 @@ impl<'a> Command<'a> for GamemodeCommand {
match mode_str.parse() {
Ok(mode) => {
player.set_gamemode(mode);
player.send_system_message(format!("Set own game mode to {mode_str}").into());
player.send_system_message(format!("Set own game mode to {:?}", mode).into());
}
Err(_) => {
// TODO: red
player.send_system_message("Invalid gamemode".into());
// try to parse from number
match mode_str.parse::<u8>() {
Ok(i) => match GameMode::from_u8(i) {
Some(mode) => {
player.set_gamemode(mode);
player.send_system_message(format!("Set own game mode to {:?}", mode).into());
return;
},
None => {},
},
Err(_) => {},
}
player.send_system_message(TextComponent::from("Invalid gamemode").color_named(pumpkin_text::color::NamedColor::Red));
}
}
}

View File

@ -50,7 +50,7 @@ pub enum ChatMode {
Hidden,
}
#[derive(Clone, Copy, PartialEq, Serialize, Deserialize, FromPrimitive, ToPrimitive)]
#[derive(Clone, Copy, Debug, PartialEq, Serialize, Deserialize, FromPrimitive, ToPrimitive)]
pub enum GameMode {
Undefined = -1,
Survival,