0
0
mirror of https://github.com/Pumpkin-MC/Pumpkin synced 2025-04-23 04:55:48 +00:00

Implement /time set (day|noon|night|midnight) (#483)

This commit is contained in:
yarml
2025-01-18 13:41:41 +01:00
committed by GitHub
parent c7875fb699
commit 88576891d9

@ -21,10 +21,18 @@ fn arg_number() -> BoundedNumArgumentConsumer<i32> {
.max(24000)
}
#[derive(Clone, Copy)]
enum PresetTime {
Day,
Noon,
Night,
Midnight,
}
#[derive(Clone, Copy)]
enum Mode {
Add,
Set,
Set(Option<PresetTime>),
}
#[derive(Clone, Copy)]
@ -81,17 +89,26 @@ impl CommandExecutor for TimeChangeExecutor {
server: &crate::server::Server,
args: &ConsumedArgs<'a>,
) -> Result<(), CommandError> {
let time_count = match arg_number().find_arg_default_name(args) {
Err(_) => 1,
Ok(Ok(count)) => count,
Ok(Err(())) => {
sender
.send_message(
TextComponent::text("Time is too large or too small.")
.color(Color::Named(NamedColor::Red)),
)
.await;
return Ok(());
let time_count = if let Mode::Set(Some(preset)) = &self.0 {
match preset {
PresetTime::Day => 1000,
PresetTime::Noon => 6000,
PresetTime::Night => 13000,
PresetTime::Midnight => 18000,
}
} else {
match arg_number().find_arg_default_name(args) {
Err(_) => 1,
Ok(Ok(count)) => count,
Ok(Err(())) => {
sender
.send_message(
TextComponent::text("Time is too large or too small.")
.color(Color::Named(NamedColor::Red)),
)
.await;
return Ok(());
}
}
};
let mode = self.0;
@ -109,7 +126,7 @@ impl CommandExecutor for TimeChangeExecutor {
let curr_time = level_time.query_daytime();
format!("Added {time_count} time for result: {curr_time}")
}
Mode::Set => {
Mode::Set(_) => {
// set
level_time.set_time(time_count.into());
level_time.send_time(world).await;
@ -136,8 +153,24 @@ pub fn init_command_tree() -> CommandTree {
.with_child(literal("day").execute(TimeQueryExecutor(QueryMode::Day))),
)
.with_child(
literal("set").with_child(
argument_default_name(arg_number()).execute(TimeChangeExecutor(Mode::Set)),
),
literal("set")
.with_child(
literal("day").execute(TimeChangeExecutor(Mode::Set(Some(PresetTime::Day)))),
)
.with_child(
literal("noon").execute(TimeChangeExecutor(Mode::Set(Some(PresetTime::Noon)))),
)
.with_child(
literal("night")
.execute(TimeChangeExecutor(Mode::Set(Some(PresetTime::Night)))),
)
.with_child(
literal("midnight")
.execute(TimeChangeExecutor(Mode::Set(Some(PresetTime::Midnight)))),
)
.with_child(
argument_default_name(arg_number())
.execute(TimeChangeExecutor(Mode::Set(None))),
),
)
}