From f111c7881c593af2581caf81d60645a5447d1f24 Mon Sep 17 00:00:00 2001 From: Snowiiii Date: Sat, 3 Aug 2024 12:56:21 +0200 Subject: [PATCH] add damage type registries --- pumpkin-protocol/src/bytebuf/mod.rs | 4 ++++ pumpkin-registry/src/damage_type.rs | 22 ++++++++++++++++++++++ pumpkin-registry/src/lib.rs | 13 +++++++++++-- pumpkin/src/server.rs | 9 +++++++-- 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/pumpkin-protocol/src/bytebuf/mod.rs b/pumpkin-protocol/src/bytebuf/mod.rs index be080f8e2..f26785d17 100644 --- a/pumpkin-protocol/src/bytebuf/mod.rs +++ b/pumpkin-protocol/src/bytebuf/mod.rs @@ -274,6 +274,10 @@ impl ByteBuffer { self.buffer.put_f32(n) } + pub fn put_f64(&mut self, n: f64) { + self.buffer.put_f64(n) + } + pub fn copy_to_bytes(&mut self, len: usize) -> bytes::Bytes { self.buffer.copy_to_bytes(len) } diff --git a/pumpkin-registry/src/damage_type.rs b/pumpkin-registry/src/damage_type.rs index a14ac675d..a936430c1 100644 --- a/pumpkin-registry/src/damage_type.rs +++ b/pumpkin-registry/src/damage_type.rs @@ -1,3 +1,5 @@ +use fastnbt::SerOpts; +use pumpkin_protocol::client::config::RegistryEntry; use serde::Serialize; #[derive(Debug, Clone, Serialize)] @@ -16,6 +18,8 @@ const NAMES: &[&str] = &[ "bad_respawn_point", "cactus", "cramming", + "campfire", + "cramming", "dragon_breath", "drown", "dry_out", @@ -58,3 +62,21 @@ const NAMES: &[&str] = &[ "wither", "wither_skull", ]; + +pub(super) fn entires() -> Vec { + let items: Vec<_> = NAMES + .iter() + .map(|name| RegistryEntry { + entry_id: (*name).into(), + data: fastnbt::to_bytes_with_opts(&DamageType { + exhaustion: 0.1, + message_id: "inFire".into(), + scaling: "when_caused_by_living_non_player".into(), + death_message_type: None, + effects: None, + }, SerOpts::network_nbt()).unwrap(), + }) + .collect(); + + items +} \ No newline at end of file diff --git a/pumpkin-registry/src/lib.rs b/pumpkin-registry/src/lib.rs index c97390306..2b5e433dc 100644 --- a/pumpkin-registry/src/lib.rs +++ b/pumpkin-registry/src/lib.rs @@ -1,4 +1,5 @@ use biomes::Biome; +use damage_type::DamageType; use dimensions::Dimension; use fastnbt::SerOpts; use paint::Painting; @@ -33,7 +34,11 @@ impl Registry { entry_id: "minecraft:snowy_taiga".to_string(), data: fastnbt::to_bytes_with_opts(&Biome::default(), SerOpts::network_nbt()) .unwrap(), - }], + }, RegistryEntry { + entry_id: "minecraft:plains".to_string(), + data: fastnbt::to_bytes_with_opts(&Biome::default(), SerOpts::network_nbt()) + .unwrap(), + }] }; let wolf_variants = Registry { registry_id: "minecraft:wolf_variant".to_string(), @@ -43,6 +48,10 @@ impl Registry { .unwrap(), }], }; + let damage_types = Registry { + registry_id: "minecraft:damage_type".to_string(), + registry_entries: damage_type::entires(), + }; let paintings = Registry { registry_id: "minecraft:painting_variant".to_string(), registry_entries: vec![RegistryEntry { @@ -51,6 +60,6 @@ impl Registry { .unwrap(), }], }; - vec![dimensions, biomes, wolf_variants, paintings] + vec![dimensions, damage_types, biomes, wolf_variants, paintings] } } diff --git a/pumpkin/src/server.rs b/pumpkin/src/server.rs index 7a6b71f30..f5e84547f 100644 --- a/pumpkin/src/server.rs +++ b/pumpkin/src/server.rs @@ -8,7 +8,7 @@ use mio::{event::Event, Poll}; use pumpkin_protocol::{ client::{ config::CPluginMessage, - play::{CGameEvent, CLogin}, + play::{CGameEvent, CLogin, CSyncPlayerPostion}, }, PacketError, Players, Sample, StatusResponse, VarInt, VarInt32, Version, }; @@ -95,6 +95,7 @@ impl Server { // todo: do this in a world pub fn spawn_player(&mut self, client: &mut Client) { + dbg!("spawning player"); let player = Player { entity: Entity { entity_id: self.new_entity_id(), @@ -126,12 +127,16 @@ impl Server { false, )) .unwrap_or_else(|e| client.kick(&e.to_string())); + // teleport + client + .send_packet(CSyncPlayerPostion::new(10.0, 10.0, 10.0, 10.0, 0.0, 0, 10)) + .unwrap_or_else(|e| client.kick(&e.to_string())); // Start waiting for level chunks client .send_packet(CGameEvent::new(13, 0.0)) .unwrap_or_else(|e| client.kick(&e.to_string())); - dbg!("spawning player"); + client.player = Some(player); }