Skip to content

Commit be809fb

Browse files
committed
feat: entity utils
1 parent 0575ff3 commit be809fb

File tree

8 files changed

+68
-38
lines changed

8 files changed

+68
-38
lines changed

Diff for: Cargo.toml

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ members = [
3535
"src/lib/utils/logging",
3636
"src/lib/utils/profiling",
3737
"src/lib/world",
38+
"src/lib/entity_utils",
3839
]
3940

4041
#================== Lints ==================#
@@ -106,7 +107,7 @@ ferrumc-storage = { path = "src/lib/storage" }
106107
ferrumc-text = { path = "src/lib/text" }
107108
ferrumc-utils = { path = "src/lib/utils" }
108109
ferrumc-world = { path = "src/lib/world" }
109-
110+
ferrumc-entity-utils = { path = "src/lib/entity_utils" }
110111

111112
# Asynchronous
112113
tokio = { version = "1.40.0", features = ["full"] }

Diff for: src/lib/commands/src/ctx.rs

-19
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,7 @@ use std::{
33
sync::{Arc, Mutex},
44
};
55

6-
use ferrumc_net::{
7-
connection::StreamWriter, packets::outgoing::system_message::SystemMessagePacket, NetResult,
8-
};
9-
use ferrumc_net_codec::encode::NetEncodeOpts;
106
use ferrumc_state::GlobalState;
11-
use ferrumc_text::TextComponent;
127

138
use crate::{input::CommandInput, Command};
149

@@ -52,18 +47,4 @@ impl CommandContext {
5247
todo!();
5348
}
5449
}
55-
56-
pub async fn reply(&self, text: TextComponent) -> NetResult<()> {
57-
let mut stream_writer = self
58-
.state
59-
.universe
60-
.get_mut::<StreamWriter>(self.connection_id)?;
61-
62-
stream_writer
63-
.send_packet(
64-
&SystemMessagePacket::new(text, false),
65-
&NetEncodeOpts::WithLength,
66-
)
67-
.await
68-
}
6950
}

Diff for: src/lib/default_commands/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ ferrumc-ecs = { workspace = true }
99
ferrumc-macros = { workspace = true }
1010
ferrumc-text = { workspace = true }
1111
ferrumc-core = { workspace = true }
12+
ferrumc-entity-utils = { workspace = true }
1213
ctor = { workspace = true }
1314
tracing = { workspace = true }

Diff for: src/lib/default_commands/src/echo.rs

+6-8
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use ferrumc_commands::{
1111
Command, CommandResult,
1212
};
1313
use ferrumc_core::identity::player_identity::PlayerIdentity;
14+
use ferrumc_entity_utils::send_message::SendMessageExt;
1415
use ferrumc_macros::{arg, command};
1516
use ferrumc_text::{NamedColor, TextComponentBuilder};
1617

@@ -24,15 +25,12 @@ async fn echo(ctx: Arc<CommandContext>) -> CommandResult {
2425
.get::<PlayerIdentity>(ctx.connection_id)
2526
.expect("failed to get identity");
2627

27-
ctx.reply(
28+
ctx.connection_id.send_message(
2829
TextComponentBuilder::new(format!("{} said: {message}", identity.username))
2930
.color(NamedColor::Green)
3031
.build(),
31-
)
32-
.await
33-
.map_err(|err| {
34-
TextComponentBuilder::new(err.to_string())
35-
.color(NamedColor::Red)
36-
.build()
37-
})
32+
&ctx.state.universe
33+
).await.expect("failed sending message");
34+
35+
Ok(())
3836
}

Diff for: src/lib/default_commands/src/nested.rs

+17-10
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,19 @@ use ferrumc_commands::{
1313
infrastructure::register_command,
1414
Command, CommandResult,
1515
};
16+
use ferrumc_entity_utils::send_message::SendMessageExt;
1617
use ferrumc_macros::{arg, command};
1718
use ferrumc_text::TextComponentBuilder;
1819

1920
#[command("nested")]
2021
async fn root(ctx: Arc<CommandContext>) -> CommandResult {
21-
ctx.reply(TextComponentBuilder::new("Executed /nested").build())
22+
ctx.connection_id
23+
.send_message(
24+
TextComponentBuilder::new("Executed /nested").build(),
25+
&ctx.state.universe,
26+
)
2227
.await
23-
.unwrap();
28+
.expect("failed sending message");
2429
Ok(())
2530
}
2631

@@ -33,14 +38,16 @@ async fn abc(ctx: Arc<CommandContext>) -> CommandResult {
3338
let word = ctx.arg::<String>("word");
3439
let number = ctx.arg::<i32>("number");
3540

36-
ctx.reply(
37-
TextComponentBuilder::new(format!(
38-
"Message: {message:?}, Word: {word:?}, Number: {number}"
39-
))
40-
.build(),
41-
)
42-
.await
43-
.unwrap();
41+
ctx.connection_id
42+
.send_message(
43+
TextComponentBuilder::new(format!(
44+
"Message: {message:?}, Word: {word:?}, Number: {number}"
45+
))
46+
.build(),
47+
&ctx.state.universe,
48+
)
49+
.await
50+
.expect("failed sending message");
4451

4552
Ok(())
4653
}

Diff for: src/lib/entity_utils/Cargo.toml

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
[package]
2+
name = "ferrumc-entity-utils"
3+
version = "0.1.0"
4+
edition = "2024"
5+
6+
[dependencies]
7+
ferrumc-net = { workspace = true }
8+
ferrumc-net-codec = { workspace = true }
9+
ferrumc-ecs = { workspace = true }
10+
ferrumc-text = { workspace = true }
11+
async-trait = { workspace = true }

Diff for: src/lib/entity_utils/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod send_message;

Diff for: src/lib/entity_utils/src/send_message.rs

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use async_trait::async_trait;
2+
use ferrumc_ecs::Universe;
3+
use ferrumc_net::{connection::StreamWriter, packets::outgoing::system_message::SystemMessagePacket, NetResult};
4+
use ferrumc_net_codec::encode::NetEncodeOpts;
5+
use ferrumc_text::TextComponent;
6+
7+
#[async_trait]
8+
pub trait SendMessageExt {
9+
async fn send_message(&self, message: TextComponent, universe: &Universe) -> NetResult<()>;
10+
async fn send_actionbar(&self, message: TextComponent, universe: &Universe) -> NetResult<()>;
11+
}
12+
13+
#[async_trait]
14+
impl SendMessageExt for usize {
15+
async fn send_message(&self, message: TextComponent, universe: &Universe) -> NetResult<()> {
16+
let mut writer = universe.get_mut::<StreamWriter>(*self)?;
17+
writer.send_packet(
18+
&SystemMessagePacket::new(message, false),
19+
&NetEncodeOpts::WithLength
20+
).await
21+
}
22+
23+
async fn send_actionbar(&self, message: TextComponent, universe: &Universe) -> NetResult<()> {
24+
let mut writer = universe.get_mut::<StreamWriter>(*self)?;
25+
writer.send_packet(
26+
&SystemMessagePacket::new(message, true),
27+
&NetEncodeOpts::WithLength
28+
).await
29+
}
30+
}

0 commit comments

Comments
 (0)