Skip to content

Commit 4fff8d3

Browse files
committed
chore: changed to sqlite
1 parent 67a9bf5 commit 4fff8d3

File tree

22 files changed

+166
-192
lines changed

22 files changed

+166
-192
lines changed

Cargo.toml

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ members = [
3636
"src/lib/inventories",
3737
"src/lib/registry",
3838
"src/lib/scheduler",
39-
"src/lib/player_state",
4039
]
4140

4241
#================== Lints ==================#
@@ -106,15 +105,22 @@ ferrumc-scheduler = { path = "src/lib/scheduler" }
106105
ferrumc-state = { path = "src/lib/core/state" }
107106
ferrumc-storage = { path = "src/lib/storage" }
108107
ferrumc-text = { path = "src/lib/text" }
109-
ferrumc-playerstate = { path = "src/lib/player_state" }
110108
ferrumc-threadpool = { path = "src/lib/utils/threadpool" }
111109
ferrumc-utils = { path = "src/lib/utils" }
112110
ferrumc-world = { path = "src/lib/world" }
113111
ferrumc-world-gen = { path = "src/lib/world_gen" }
114112
ferrumc-inventories = { path = "src/lib/inventories" }
115113

116114
# Asynchronous
117-
tokio = { version = "1.47.1", features = ["macros", "net", "rt", "sync", "time", "io-util", "test-util"], default-features = false }
115+
tokio = { version = "1.47.1", features = [
116+
"macros",
117+
"net",
118+
"rt",
119+
"sync",
120+
"time",
121+
"io-util",
122+
"test-util",
123+
], default-features = false }
118124

119125
# Logging
120126
tracing = "0.1.41"

src/bin/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ ferrumc-threadpool = { workspace = true }
3333
ferrumc-inventories = { workspace = true }
3434
once_cell = { workspace = true }
3535
serde_json = { workspace = true }
36-
ferrumc-playerstate = { workspace = true }
3736

3837
tracing = { workspace = true }
3938
clap = { workspace = true, features = ["derive", "env"] }

src/bin/src/main.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use ferrumc_config::server_config::get_global_config;
66
use ferrumc_config::whitelist::create_whitelist;
77
use ferrumc_general_purpose::paths::get_root_path;
88
use ferrumc_state::player_list::PlayerList;
9+
use ferrumc_state::player_state::PlayerState;
910
use ferrumc_state::{GlobalState, ServerState};
1011
use ferrumc_threadpool::ThreadPool;
1112
use ferrumc_world::World;
@@ -159,6 +160,7 @@ fn create_state(start_time: Instant) -> Result<ServerState, BinaryError> {
159160
world: World::new(&get_global_config().database.db_path),
160161
terrain_generator: WorldGenerator::new(0),
161162
shut_down: false.into(),
163+
player_state: PlayerState::default(),
162164
players: PlayerList::default(),
163165
thread_pool: ThreadPool::new(),
164166
start_time,

src/bin/src/packet_handlers/play_packets/player_loaded.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ pub fn handle(
2929

3030
// Default player data
3131
*player_data = PlayerData::new(
32-
player_identity.uuid.as_u128(),
3332
Position::default(),
3433
"overworld",
3534
);
@@ -38,35 +37,36 @@ pub fn handle(
3837
if let Ok(loaded) = state
3938
.0
4039
.world
41-
.players_state
4240
.load_player_state(player_identity.uuid.as_u128())
4341
{
4442
match loaded {
4543
Some(loaded_data) => {
4644
*player_data = loaded_data;
4745
tracing::info!(
4846
"Loaded player state for {}: position=({}, {}, {}), dimension={}",
49-
player_data.uuid,
47+
player_identity.uuid.as_u128(),
5048
player_data.pos.x,
5149
player_data.pos.y,
5250
player_data.pos.z,
5351
player_data.dimension
5452
);
5553
}
5654
None => {
57-
if let Err(e) = state.0.world.players_state.save_player_state(&player_data) {
55+
if let Err(e) = state.0.world.save_player_state(player_identity.uuid.as_u128(), &player_data) {
5856
tracing::error!(
59-
"Failed to save player state for {}: {:?}",
57+
"Failed to save player state for {} ({}): {:?}",
6058
player_identity.username,
59+
player_identity.uuid.as_u128(),
6160
e
6261
);
6362
}
6463
}
6564
}
66-
} else if let Err(e) = state.0.world.players_state.save_player_state(&player_data) {
65+
} else if let Err(e) = state.0.world.save_player_state(player_identity.uuid.as_u128(), &player_data) {
6766
tracing::error!(
68-
"Failed to save player state for {}: {:?}",
67+
"Failed to save player state for {} ({}): {:?}",
6968
player_identity.username,
69+
player_identity.uuid.as_u128(),
7070
e
7171
);
7272
}

src/lib/core/src/data/player.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,23 +5,23 @@ use serde::{Deserialize, Serialize};
55
use crate::transform::position::Position;
66

77
// https://minecraft.fandom.com/wiki/Player.dat_format
8-
#[derive(Serialize, Deserialize, Debug, Encode, Decode, Component, typename::TypeName)]
8+
#[derive(
9+
Serialize, Deserialize, Clone, Debug, Encode, Decode, Component, typename::TypeName, PartialEq,
10+
)]
911
pub struct PlayerData {
10-
pub uuid: u128,
1112
pub pos: Position,
1213
pub dimension: String,
1314
}
1415

1516
impl Default for PlayerData {
1617
fn default() -> Self {
17-
Self::new(0, Position::default(), "overworld")
18+
Self::new(Position::default(), "overworld")
1819
}
1920
}
2021

2122
impl PlayerData {
22-
pub fn new(uuid: u128, pos: Position, dimension: &str) -> Self {
23+
pub fn new(pos: Position, dimension: &str) -> Self {
2324
Self {
24-
uuid,
2525
pos,
2626
dimension: dimension.to_string(),
2727
}

src/lib/core/src/transform/position.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use serde::{Deserialize, Serialize};
55
use std::fmt::{Debug, Display, Formatter};
66
use typename::TypeName;
77

8-
#[derive(TypeName, Component, Serialize, Deserialize, Encode, Decode)]
8+
#[derive(TypeName, Component, Serialize, Deserialize, Encode, Decode, Clone, PartialEq)]
99
pub struct Position {
1010
pub x: f64,
1111
pub y: f64,

src/lib/core/state/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ ferrumc-world-gen = { workspace = true }
1010
dashmap = { workspace = true }
1111
ferrumc-threadpool = { workspace = true }
1212
crossbeam-queue = { workspace = true }
13+
ferrumc-core = { workspace = true }

src/lib/core/state/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
pub mod player_list;
2+
pub mod player_state;
23

34
use crate::player_list::PlayerList;
5+
use crate::player_state::PlayerState;
46
use bevy_ecs::prelude::Resource;
57
use ferrumc_threadpool::ThreadPool;
68
use ferrumc_world::World;
@@ -12,6 +14,7 @@ use std::time::Instant;
1214
pub struct ServerState {
1315
pub world: World,
1416
pub terrain_generator: WorldGenerator,
17+
pub player_state: PlayerState,
1518
pub shut_down: AtomicBool,
1619
pub players: PlayerList, // (UUID, Username)
1720
pub thread_pool: ThreadPool,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
use bevy_ecs::entity::Entity;
2+
use dashmap::DashMap;
3+
use ferrumc_core::data::player::PlayerData;
4+
5+
#[derive(Debug, Default)]
6+
pub struct PlayerState {
7+
player_data: DashMap<Entity, PlayerData>,
8+
}
9+
10+
impl PlayerState {
11+
pub fn is_connected(&self, entity: Entity) -> bool {
12+
self.player_data.contains_key(&entity)
13+
}
14+
15+
pub fn disconnect(&self, entity: Entity) {
16+
self.player_data.remove(&entity);
17+
}
18+
19+
pub fn connect(&self, entity: Entity, data: PlayerData) {
20+
self.player_data.insert(entity, data);
21+
}
22+
}

src/lib/player_state/Cargo.toml

Lines changed: 0 additions & 37 deletions
This file was deleted.

0 commit comments

Comments
 (0)