valence/
lib.rs

1#![cfg_attr(
2    unstable_doc,
3    doc = "**❗ NOTE:** This documentation is sourced from the `main` branch. If you're looking for the most recent stable release, go [here](https://docs.rs/valence/latest/valence/).\n\n---\n"
4)]
5#![doc = include_str!("../README.md")]
6#![doc(
7    html_logo_url = "https://raw.githubusercontent.com/valence-rs/valence/main/assets/logo.svg",
8    html_favicon_url = "https://raw.githubusercontent.com/valence-rs/valence/main/assets/logo.svg"
9)]
10#![deny(
11    rustdoc::broken_intra_doc_links,
12    rustdoc::private_intra_doc_links,
13    rustdoc::missing_crate_level_docs,
14    rustdoc::invalid_codeblock_attributes,
15    rustdoc::invalid_rust_codeblocks,
16    rustdoc::bare_urls,
17    rustdoc::invalid_html_tags
18)]
19#![warn(
20    trivial_casts,
21    trivial_numeric_casts,
22    unused_lifetimes,
23    unused_import_braces,
24    unreachable_pub,
25    clippy::dbg_macro
26)]
27
28use bevy_app::{PluginGroup, PluginGroupBuilder};
29
30#[cfg(feature = "testing")]
31pub mod testing;
32
33#[cfg(test)]
34mod tests;
35
36#[cfg(feature = "log")]
37pub use bevy_log as log;
38use registry::biome::BiomePlugin;
39use registry::dimension_type::DimensionTypePlugin;
40#[cfg(feature = "advancement")]
41pub use valence_advancement as advancement;
42#[cfg(feature = "anvil")]
43pub use valence_anvil as anvil;
44#[cfg(feature = "boss_bar")]
45pub use valence_boss_bar as boss_bar;
46#[cfg(feature = "command")]
47pub use valence_command as command;
48#[cfg(feature = "command")]
49pub use valence_command_macros as command_macros;
50#[cfg(feature = "equipment")]
51pub use valence_equipment as equipment;
52#[cfg(feature = "inventory")]
53pub use valence_inventory as inventory;
54pub use valence_lang as lang;
55#[cfg(feature = "network")]
56pub use valence_network as network;
57#[cfg(feature = "player_list")]
58pub use valence_player_list as player_list;
59use valence_registry::RegistryPlugin;
60#[cfg(feature = "scoreboard")]
61pub use valence_scoreboard as scoreboard;
62use valence_server::abilities::AbilitiesPlugin;
63use valence_server::action::ActionPlugin;
64use valence_server::client::ClientPlugin;
65use valence_server::client_command::ClientCommandPlugin;
66use valence_server::client_settings::ClientSettingsPlugin;
67use valence_server::custom_payload::CustomPayloadPlugin;
68use valence_server::entity::hitbox::HitboxPlugin;
69use valence_server::entity::EntityPlugin;
70use valence_server::event_loop::EventLoopPlugin;
71use valence_server::hand_swing::HandSwingPlugin;
72use valence_server::interact_block::InteractBlockPlugin;
73use valence_server::interact_entity::InteractEntityPlugin;
74use valence_server::interact_item::InteractItemPlugin;
75use valence_server::keepalive::KeepalivePlugin;
76use valence_server::layer::LayerPlugin;
77use valence_server::message::MessagePlugin;
78use valence_server::movement::MovementPlugin;
79use valence_server::op_level::OpLevelPlugin;
80pub use valence_server::protocol::status_effects;
81use valence_server::resource_pack::ResourcePackPlugin;
82use valence_server::status::StatusPlugin;
83use valence_server::status_effect::StatusEffectPlugin;
84use valence_server::teleport::TeleportPlugin;
85pub use valence_server::*;
86#[cfg(feature = "weather")]
87pub use valence_weather as weather;
88#[cfg(feature = "world_border")]
89pub use valence_world_border as world_border;
90
91/// Contains the most frequently used items in Valence projects.
92///
93/// This is usually glob imported like so:
94///
95/// ```no_run
96/// use valence::prelude::*; // Glob import.
97///
98/// let mut app = App::empty();
99/// app.add_systems(Update, || println!("yippee!"));
100/// app.update()
101/// // ...
102/// ```
103pub mod prelude {
104    pub use bevy_app::prelude::*;
105    pub use bevy_ecs; // Needed for bevy_ecs macros to function correctly.
106    pub use bevy_ecs::prelude::*;
107    pub use uuid::Uuid;
108    #[cfg(feature = "advancement")]
109    pub use valence_advancement::{
110        event::AdvancementTabChangeEvent, Advancement, AdvancementBundle, AdvancementClientUpdate,
111        AdvancementCriteria, AdvancementDisplay, AdvancementFrameType, AdvancementRequirements,
112    };
113    #[cfg(feature = "equipment")]
114    pub use valence_equipment::Equipment;
115    #[cfg(feature = "inventory")]
116    pub use valence_inventory::{
117        CursorItem, Inventory, InventoryKind, InventoryWindow, InventoryWindowMut, OpenInventory,
118    };
119    #[cfg(feature = "network")]
120    pub use valence_network::{
121        ConnectionMode, ErasedNetworkCallbacks, NetworkCallbacks, NetworkSettings, NewClientInfo,
122        SharedNetworkState,
123    };
124    #[cfg(feature = "player_list")]
125    pub use valence_player_list::{PlayerList, PlayerListEntry};
126    pub use valence_registry::biome::{Biome, BiomeId, BiomeRegistry};
127    pub use valence_registry::dimension_type::{DimensionType, DimensionTypeRegistry};
128    pub use valence_server::action::{DiggingEvent, DiggingState};
129    pub use valence_server::block::{BlockKind, BlockState, PropName, PropValue};
130    pub use valence_server::client::{
131        despawn_disconnected_clients, Client, Ip, OldView, OldViewDistance, Properties, Username,
132        View, ViewDistance, VisibleChunkLayer, VisibleEntityLayers,
133    };
134    pub use valence_server::client_command::{
135        ClientCommand, JumpWithHorseEvent, JumpWithHorseState, LeaveBedEvent, SneakEvent,
136        SneakState, SprintEvent, SprintState,
137    };
138    pub use valence_server::entity::hitbox::{Hitbox, HitboxShape};
139    pub use valence_server::entity::{
140        EntityAnimation, EntityKind, EntityLayerId, EntityManager, EntityStatus, HeadYaw, Look,
141        OldEntityLayerId, OldPosition, Position,
142    };
143    pub use valence_server::event_loop::{
144        EventLoopPostUpdate, EventLoopPreUpdate, EventLoopUpdate,
145    };
146    pub use valence_server::ident::Ident;
147    pub use valence_server::interact_entity::{EntityInteraction, InteractEntityEvent};
148    pub use valence_server::layer::chunk::{
149        Block, BlockRef, Chunk, ChunkLayer, LoadedChunk, UnloadedChunk,
150    };
151    pub use valence_server::layer::{EntityLayer, LayerBundle};
152    pub use valence_server::math::{DVec2, DVec3, Vec2, Vec3};
153    pub use valence_server::message::SendMessage as _;
154    pub use valence_server::nbt::Compound;
155    pub use valence_server::protocol::packets::play::particle_s2c::Particle;
156    pub use valence_server::protocol::text::{Color, IntoText, Text};
157    pub use valence_server::spawn::{ClientSpawnQuery, ClientSpawnQueryReadOnly, RespawnPosition};
158    pub use valence_server::title::SetTitle as _;
159    pub use valence_server::{
160        ident, BlockPos, ChunkPos, ChunkView, Despawned, Direction, GameMode, Hand, ItemKind,
161        ItemStack, Server, UniqueId,
162    };
163
164    pub use super::DefaultPlugins;
165}
166
167/// This plugin group will add all the default plugins for a Valence
168/// application.
169///
170/// [`DefaultPlugins`] obeys Cargo feature flags. Users may exert control over
171/// this plugin group by disabling `default-features` in their `Cargo.toml` and
172/// enabling only those features that they wish to use.
173pub struct DefaultPlugins;
174
175impl PluginGroup for DefaultPlugins {
176    fn build(self) -> PluginGroupBuilder {
177        #[allow(unused_mut)]
178        let mut group = PluginGroupBuilder::start::<Self>()
179            .add(ServerPlugin)
180            .add(RegistryPlugin)
181            .add(BiomePlugin)
182            .add(DimensionTypePlugin)
183            .add(EntityPlugin)
184            .add(HitboxPlugin)
185            .add(LayerPlugin)
186            .add(ClientPlugin)
187            .add(EventLoopPlugin)
188            .add(MovementPlugin)
189            .add(ClientCommandPlugin)
190            .add(KeepalivePlugin)
191            .add(InteractEntityPlugin)
192            .add(ClientSettingsPlugin)
193            .add(ActionPlugin)
194            .add(TeleportPlugin)
195            .add(MessagePlugin)
196            .add(CustomPayloadPlugin)
197            .add(HandSwingPlugin)
198            .add(InteractBlockPlugin)
199            .add(InteractItemPlugin)
200            .add(OpLevelPlugin)
201            .add(ResourcePackPlugin)
202            .add(StatusPlugin)
203            .add(StatusEffectPlugin)
204            .add(AbilitiesPlugin);
205
206        #[cfg(feature = "log")]
207        {
208            group = group.add(bevy_log::LogPlugin::default())
209        }
210
211        #[cfg(feature = "network")]
212        {
213            group = group.add(valence_network::NetworkPlugin)
214        }
215
216        #[cfg(feature = "player_list")]
217        {
218            group = group.add(valence_player_list::PlayerListPlugin)
219        }
220
221        #[cfg(feature = "equipment")]
222        {
223            group = group.add(valence_equipment::EquipmentPlugin)
224        }
225
226        #[cfg(feature = "inventory")]
227        {
228            group = group.add(valence_inventory::InventoryPlugin)
229        }
230
231        #[cfg(feature = "anvil")]
232        {
233            group = group.add(valence_anvil::AnvilPlugin)
234        }
235
236        #[cfg(feature = "advancement")]
237        {
238            group = group.add(valence_advancement::AdvancementPlugin)
239        }
240
241        #[cfg(feature = "weather")]
242        {
243            group = group.add(valence_weather::WeatherPlugin)
244        }
245
246        #[cfg(feature = "world_border")]
247        {
248            group = group.add(valence_world_border::WorldBorderPlugin)
249        }
250
251        #[cfg(feature = "boss_bar")]
252        {
253            group = group.add(valence_boss_bar::BossBarPlugin)
254        }
255
256        #[cfg(feature = "command")]
257        {
258            group = group.add(valence_command::manager::CommandPlugin)
259        }
260
261        #[cfg(feature = "scoreboard")]
262        {
263            group = group.add(valence_scoreboard::ScoreboardPlugin)
264        }
265
266        group
267    }
268}