diff --git a/assets/scoreboard_display_slot.json b/assets/scoreboard_display_slot.json new file mode 100644 index 000000000..991aeffb9 --- /dev/null +++ b/assets/scoreboard_display_slot.json @@ -0,0 +1 @@ +["LIST","SIDEBAR","BELOW_NAME","TEAM_BLACK","TEAM_DARK_BLUE","TEAM_DARK_GREEN","TEAM_DARK_AQUA","TEAM_DARK_RED","TEAM_DARK_PURPLE","TEAM_GOLD","TEAM_GRAY","TEAM_DARK_GRAY","TEAM_BLUE","TEAM_GREEN","TEAM_AQUA","TEAM_RED","TEAM_LIGHT_PURPLE","TEAM_YELLOW","TEAM_WHITE"] \ No newline at end of file diff --git a/pumpkin-data/build/build.rs b/pumpkin-data/build/build.rs index 3748b6ea4..ab4d62966 100644 --- a/pumpkin-data/build/build.rs +++ b/pumpkin-data/build/build.rs @@ -10,6 +10,7 @@ mod entity_pose; mod game_event; mod packet; mod particle; +mod scoreboard_slot; mod screen; mod sound; mod sound_category; @@ -23,6 +24,7 @@ pub fn main() { write_generated_file(game_event::build(), "game_event.rs"); write_generated_file(sound_category::build(), "sound_category.rs"); write_generated_file(entity_pose::build(), "entity_pose.rs"); + write_generated_file(scoreboard_slot::build(), "scoreboard_slot.rs"); } pub fn array_to_tokenstream(array: Vec) -> TokenStream { diff --git a/pumpkin-data/build/scoreboard_slot.rs b/pumpkin-data/build/scoreboard_slot.rs new file mode 100644 index 000000000..4f112cb57 --- /dev/null +++ b/pumpkin-data/build/scoreboard_slot.rs @@ -0,0 +1,20 @@ +use proc_macro2::TokenStream; +use quote::quote; + +use crate::array_to_tokenstream; + +pub(crate) fn build() -> TokenStream { + println!("cargo:rerun-if-changed=assets/scoreboard_display_slot.json"); + + let sound_categories: Vec = + serde_json::from_str(include_str!("../../assets/scoreboard_display_slot.json")) + .expect("Failed to parse scoreboard_display_slot.json"); + let variants = array_to_tokenstream(sound_categories); + + quote! { + #[repr(u8)] + pub enum ScoreboardDisplaySlot { + #variants + } + } +} diff --git a/pumpkin-data/src/lib.rs b/pumpkin-data/src/lib.rs index 221f6e02c..00f210ae9 100644 --- a/pumpkin-data/src/lib.rs +++ b/pumpkin-data/src/lib.rs @@ -12,6 +12,7 @@ pub mod particle { pub mod sound { include!(concat!(env!("OUT_DIR"), "/sound.rs")); + include!(concat!(env!("OUT_DIR"), "/sound_category.rs")); } pub mod chunk_status { @@ -22,10 +23,10 @@ pub mod game_event { include!(concat!(env!("OUT_DIR"), "/game_event.rs")); } -pub mod sound_category { - include!(concat!(env!("OUT_DIR"), "/sound_category.rs")); -} - -pub mod entity_pose { +pub mod entity { include!(concat!(env!("OUT_DIR"), "/entity_pose.rs")); } + +pub mod scoreboard { + include!(concat!(env!("OUT_DIR"), "/scoreboard_slot.rs")); +} diff --git a/pumpkin-protocol/src/client/play/c_display_objective.rs b/pumpkin-protocol/src/client/play/c_display_objective.rs index 73f7e8edd..5a24a205c 100644 --- a/pumpkin-protocol/src/client/play/c_display_objective.rs +++ b/pumpkin-protocol/src/client/play/c_display_objective.rs @@ -1,4 +1,6 @@ -use pumpkin_data::packet::clientbound::PLAY_SET_DISPLAY_OBJECTIVE; +use pumpkin_data::{ + packet::clientbound::PLAY_SET_DISPLAY_OBJECTIVE, scoreboard::ScoreboardDisplaySlot, +}; use pumpkin_macros::client_packet; use serde::Serialize; @@ -12,33 +14,10 @@ pub struct CDisplayObjective<'a> { } impl<'a> CDisplayObjective<'a> { - pub fn new(position: DisplaySlot, score_name: &'a str) -> Self { + pub fn new(position: ScoreboardDisplaySlot, score_name: &'a str) -> Self { Self { position: VarInt(position as i32), score_name, } } } - -#[repr(i32)] -pub enum DisplaySlot { - List, - Sidebar, - BelowName, - TeamBlack, - TeamDarkBlue, - TeamDarkGreen, - TeanDarkAqua, - TeamDarkRed, - TeamDarkPurple, - TeamGold, - TeamGray, - TeamDarkGray, - TeamBlue, - TeamGreen, - TeamAqua, - TeamRed, - TeamLightPurple, - TeamYellow, - TeamWhite, -} diff --git a/pumpkin-protocol/src/client/play/c_entity_sound_effect.rs b/pumpkin-protocol/src/client/play/c_entity_sound_effect.rs index 5ffc357c2..8be086015 100644 --- a/pumpkin-protocol/src/client/play/c_entity_sound_effect.rs +++ b/pumpkin-protocol/src/client/play/c_entity_sound_effect.rs @@ -1,5 +1,5 @@ use bytes::BufMut; -use pumpkin_data::{packet::clientbound::PLAY_SOUND_ENTITY, sound_category::SoundCategory}; +use pumpkin_data::{packet::clientbound::PLAY_SOUND_ENTITY, sound::SoundCategory}; use pumpkin_macros::client_packet; use crate::{bytebuf::ByteBufMut, ClientPacket, IDOrSoundEvent, SoundEvent, VarInt}; diff --git a/pumpkin-protocol/src/client/play/c_sound_effect.rs b/pumpkin-protocol/src/client/play/c_sound_effect.rs index 7555edc0d..46249bd0e 100644 --- a/pumpkin-protocol/src/client/play/c_sound_effect.rs +++ b/pumpkin-protocol/src/client/play/c_sound_effect.rs @@ -1,5 +1,5 @@ use bytes::BufMut; -use pumpkin_data::{packet::clientbound::PLAY_SOUND, sound_category::SoundCategory}; +use pumpkin_data::{packet::clientbound::PLAY_SOUND, sound::SoundCategory}; use pumpkin_macros::client_packet; use crate::{bytebuf::ByteBufMut, ClientPacket, IDOrSoundEvent, SoundEvent, VarInt}; diff --git a/pumpkin/src/entity/mod.rs b/pumpkin/src/entity/mod.rs index 6a22718f4..ef058ce40 100644 --- a/pumpkin/src/entity/mod.rs +++ b/pumpkin/src/entity/mod.rs @@ -2,7 +2,7 @@ use core::f32; use std::sync::{atomic::AtomicBool, Arc}; use crossbeam::atomic::AtomicCell; -use pumpkin_data::entity_pose::EntityPose; +use pumpkin_data::entity::EntityPose; use pumpkin_entity::{entity_type::EntityType, EntityId}; use pumpkin_protocol::{ client::play::{CHeadRot, CSetEntityMetadata, CTeleportEntity, CUpdateEntityRot, Metadata}, diff --git a/pumpkin/src/entity/player.rs b/pumpkin/src/entity/player.rs index 3ab8f494f..3b74f94eb 100644 --- a/pumpkin/src/entity/player.rs +++ b/pumpkin/src/entity/player.rs @@ -9,7 +9,7 @@ use std::{ use crossbeam::atomic::AtomicCell; use pumpkin_config::{ADVANCED_CONFIG, BASIC_CONFIG}; -use pumpkin_data::{sound::Sound, sound_category::SoundCategory}; +use pumpkin_data::sound::{Sound, SoundCategory}; use pumpkin_entity::{entity_type::EntityType, EntityId}; use pumpkin_inventory::player::PlayerInventory; use pumpkin_protocol::server::play::{ diff --git a/pumpkin/src/net/combat.rs b/pumpkin/src/net/combat.rs index 7be7dcabb..8125635a4 100644 --- a/pumpkin/src/net/combat.rs +++ b/pumpkin/src/net/combat.rs @@ -1,6 +1,9 @@ use std::f32::consts::PI; -use pumpkin_data::{particle::Particle, sound::Sound, sound_category::SoundCategory}; +use pumpkin_data::{ + particle::Particle, + sound::{Sound, SoundCategory}, +}; use pumpkin_protocol::{ client::play::{CEntityVelocity, CParticle}, codec::var_int::VarInt, diff --git a/pumpkin/src/world/mod.rs b/pumpkin/src/world/mod.rs index 5aa0fa508..50a2d0f5c 100644 --- a/pumpkin/src/world/mod.rs +++ b/pumpkin/src/world/mod.rs @@ -11,7 +11,10 @@ use crate::{ }; use level_time::LevelTime; use pumpkin_config::BasicConfiguration; -use pumpkin_data::{entity_pose::EntityPose, sound::Sound, sound_category::SoundCategory}; +use pumpkin_data::{ + entity::EntityPose, + sound::{Sound, SoundCategory}, +}; use pumpkin_entity::{entity_type::EntityType, EntityId}; use pumpkin_protocol::client::play::{CBlockUpdate, CRespawn, CSoundEffect, CWorldEvent}; use pumpkin_protocol::{ diff --git a/pumpkin/src/world/scoreboard.rs b/pumpkin/src/world/scoreboard.rs index 2c3c77171..45c17e6bb 100644 --- a/pumpkin/src/world/scoreboard.rs +++ b/pumpkin/src/world/scoreboard.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; +use pumpkin_data::scoreboard::ScoreboardDisplaySlot; use pumpkin_protocol::{ client::play::{CDisplayObjective, CUpdateObjectives, CUpdateScore, RenderType}, codec::var_int::VarInt, @@ -43,7 +44,7 @@ impl Scoreboard { .await; world .broadcast_packet_all(&CDisplayObjective::new( - pumpkin_protocol::client::play::DisplaySlot::Sidebar, + ScoreboardDisplaySlot::Sidebar, objective.name, )) .await;