Skip to content

Commit 7275985

Browse files
committed
more random stuff
1 parent c1e4b6c commit 7275985

File tree

11 files changed

+121
-87
lines changed

11 files changed

+121
-87
lines changed

src/dungeon/door.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ impl Door {
118118
BlockPos { x: self.x + 1, y: 72, z: self.z + 1 },
119119

120120
|x,y, z| {
121-
world.set_block_at(Blocks::Barrier, x, y, z);
121+
// world.set_block_at(Blocks::Barrier, x, y, z);
122+
world.set_block_at(Blocks::Air, x, y, z);
122123
world.interactable_blocks.remove(&BlockPos { x, y, z });
123124

124125
let id = world.spawn_entity(

src/net/client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ async fn read_packets(
9292
Status => parse_from_packets::<Status>(&mut buffer, client, context).await,
9393
Login => parse_from_packets::<Login>(&mut buffer, client, context).await,
9494
Play => {
95-
match <Play as PacketDeserializable>::read(&mut buffer) {
95+
match Play::read(&mut buffer) {
9696
Ok(packet) => {
9797
if let Err(err) = packet.process(client, context).await {
9898
eprintln!("error processing {err}");

src/net/packets/packet_buffer.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
use std::mem::take;
2+
3+
use bytes::BufMut;
4+
15
use crate::net::internal_packets::NetworkThreadMessage;
26
use crate::net::packets::packet::IdentifiedPacket;
37
use crate::net::packets::packet_serialize::PacketSerializable;
@@ -27,7 +31,6 @@ impl PacketBuffer {
2731
self.buffer.extend(payload);
2832
}
2933

30-
// this will be faster if we use a bytesmut instead of a vec<u8>
3134
pub fn copy_from(&mut self, buf: &PacketBuffer) {
3235
self.buffer.extend(&buf.buffer)
3336
}
@@ -36,7 +39,7 @@ impl PacketBuffer {
3639
pub fn get_packet_message(&mut self, client_id: &ClientId) -> NetworkThreadMessage {
3740
NetworkThreadMessage::SendPackets {
3841
client_id: *client_id,
39-
buffer: std::mem::replace(&mut self.buffer, Vec::new()),
42+
buffer: take(&mut self.buffer),
4043
}
4144
}
4245
}

src/net/protocol/play/clientbound.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,12 @@ packet_serializable! {
9999
}
100100
}
101101

102-
103-
104102
packet_serializable! {
105103
pub struct KeepAlive {
106104
pub current_time: i32,
107105
}
108106
}
109107

110-
111-
112108
packet_serializable! {
113109
pub struct Chat {
114110
pub component: ChatComponentText,

src/server/block/block_position.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ impl BlockPos {
3939
}
4040

4141
pub fn distance_to(&self, other: &BlockPos) -> f32 {
42-
(self.distance_squared(self) as f32).sqrt()
42+
(self.distance_squared(other) as f32).sqrt()
4343
}
4444

4545
pub fn replace_y(&self, y: i32) -> Self {

src/server/commands/impl/mort.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ pub struct Mort;
1010
impl CommandMetadata for Mort {
1111
const NAME: &'static str = "mort";
1212

13-
fn run(_: &mut World, player: &mut Player, _: &[&str]) -> anyhow::Result<Outcome> { ;
13+
fn run(_: &mut World, player: &mut Player, _: &[&str]) -> anyhow::Result<Outcome> {
1414
player.open_ui(UI::MortReadyUpMenu);
1515
Ok(Outcome::Success)
1616
}

src/server/player/container_ui.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ impl UI {
5454
tag_compound: Some(NBT::with_nodes(vec![
5555
NBT::compound("display", vec![
5656
NBT::string("Name", &format!("§7{}", player.profile.username)),
57-
NBT::list_from_string("Lore", &format!("{}", item_name))
57+
NBT::list_from_string("Lore", &item_name.to_string())
5858
]),
5959
NBT::string("SkullOwner", &player.profile.username),
6060
])),
@@ -97,7 +97,7 @@ impl UI {
9797
player.sync_inventory();
9898
return;
9999
}
100-
if player.inventory.click_slot(&packet, &mut player.packet_buffer) {
100+
if player.inventory.click_slot(packet, &mut player.packet_buffer) {
101101
player.sync_inventory();
102102
}
103103
},

src/server/player/scoreboard.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ impl Scoreboard {
120120
if i == 0 {
121121
packet_buffer.write_packet(&ScoreboardObjective {
122122
objective_name: OBJECTIVE_NAME.into(),
123-
objective_value: new_str.clone().into(),
123+
objective_value: new_str.clone(),
124124
render_type: "integer",
125125
mode: UPDATE_NAME,
126126
});

src/server/server.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::any::Any;
2-
31
use crate::dungeon::dungeon::Dungeon;
42
use crate::net::internal_packets::{MainThreadMessage, NetworkThreadMessage};
53
use crate::net::packets::packet::ProcessPacket;
@@ -14,7 +12,7 @@ use crate::server::utils::player_list::footer::footer;
1412
use crate::server::utils::player_list::header::header;
1513
use crate::server::world;
1614
use crate::server::world::World;
17-
use anyhow::{anyhow, Context, Result};
15+
use anyhow::{Context, Result};
1816
use tokio::sync::mpsc::UnboundedSender;
1917
use uuid::Uuid;
2018

Lines changed: 65 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1-
use crate::utils::hasher::rapidhash::{rapidhash_known, rapidhash_nano};
1+
use crate::utils::hasher::rapidhash::rapidhash_nano;
22
use std::collections::HashMap;
33
use std::hash::{BuildHasher, Hasher};
4+
use std::u64;
5+
6+
use super::rapidhash::finish;
7+
8+
const DEFAULT_SEED: u64 = 0;
49

510
/// reimplementation of rapidhash nano from [GitHub](https://github.com/Nicoshev/rapidhash/blob/master/rapidhash.h#L432)
611
/// (nano because were basically never gonna be hashing more than 48 bytes)
712
/// probably overkill but its really fast and i was bored.
8-
#[derive(Default)]
13+
/// these hashes are NOT portable for primitive ints.
914
pub struct RapidHasher {
1015
state: u64,
1116
}
@@ -17,15 +22,6 @@ pub struct RapidHasher {
1722
/// This should also be faster than the default so maybe it could be used in place of the default for anythign that doesnt need the added security of the default hashing.
1823
pub type DeterministicHashMap<K, V> = HashMap<K, V, RapidHasher>;
1924

20-
macro_rules! write_num {
21-
($name: ident, $ty: ty) => {
22-
#[inline(always)]
23-
fn $name(&mut self, i: $ty) {
24-
self.state = rapidhash_known(&i.to_le_bytes())
25-
}
26-
};
27-
}
28-
2925
impl Hasher for RapidHasher {
3026
#[inline(always)]
3127
fn finish(&self) -> u64 {
@@ -34,28 +30,70 @@ impl Hasher for RapidHasher {
3430

3531
#[inline(always)]
3632
fn write(&mut self, bytes: &[u8]) {
37-
self.state = rapidhash_nano(bytes)
38-
}
39-
40-
// these can be optimized down to not convert to and from their bytes...
41-
write_num!(write_u8, u8);
42-
write_num!(write_u16, u16);
43-
write_num!(write_u32, u32);
44-
write_num!(write_u64, u64);
45-
write_num!(write_u128, u128);
46-
write_num!(write_usize, usize);
47-
write_num!(write_i8, i8);
48-
write_num!(write_i16, i16);
49-
write_num!(write_i32, i32);
50-
write_num!(write_i64, i64);
51-
write_num!(write_i128, i128);
52-
write_num!(write_isize, isize);
33+
self.state = rapidhash_nano(self.state, bytes)
34+
}
35+
36+
#[inline(always)]
37+
fn write_u8(&mut self, i: u8) {
38+
let (a, b) = (((i as u64) << 45) | i as u64, i as u64);
39+
self.state = finish(a, b, self.state, 1);
40+
}
41+
42+
#[inline(always)]
43+
fn write_u16(&mut self, i: u16) {
44+
let (hi, lo) = ((i >> 8) as u64, (i & 0xFF) as u64);
45+
self.state = finish((hi << 45) | lo, lo, self.state, 2);
46+
}
47+
48+
#[inline(always)]
49+
fn write_u32(&mut self, i: u32) {
50+
self.state = write_32(self.state ^ 4, i);
51+
}
52+
53+
#[inline(always)]
54+
fn write_u64(&mut self, i: u64) {
55+
self.state = write_64(self.state ^ 8, i);
56+
}
57+
58+
#[inline(always)]
59+
fn write_u128(&mut self, i: u128) {
60+
let (a, b) = ((i >> 64) as u64, i as u64); // mask is done automatically by casting down
61+
self.state = finish(a, b, self.state ^ 16, 16);
62+
}
63+
64+
#[inline(always)]
65+
fn write_usize(&mut self, i: usize) {
66+
self.state = if size_of::<usize>() == 4 {
67+
write_32(self.state ^ 4, i as u32)
68+
} else {
69+
write_64(self.state ^ 8, i as u64)
70+
};
71+
}
72+
}
73+
74+
impl Default for RapidHasher {
75+
fn default() -> Self {
76+
Self {
77+
state: DEFAULT_SEED
78+
}
79+
}
5380
}
5481

82+
5583
impl BuildHasher for RapidHasher {
5684
type Hasher = Self;
5785

5886
fn build_hasher(&self) -> Self::Hasher {
5987
Self::default()
6088
}
89+
}
90+
91+
#[inline(always)]
92+
const fn write_64(seed: u64, i: u64) -> u64 {
93+
finish(i >> 32, i & 0xFFFF_FFFF, seed, 8)
94+
}
95+
96+
#[inline(always)]
97+
const fn write_32(seed: u64, i: u32) -> u64 { // no mask stuff is needed since for 4 bits it just reads both as the same...
98+
finish(i as u64, i as u64, seed, 4)
6199
}

0 commit comments

Comments
 (0)