mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 06:16:04 +00:00
AcceptResourcePacksPlugin
This commit is contained in:
parent
83784d5a35
commit
3621acab75
5 changed files with 72 additions and 8 deletions
|
@ -36,7 +36,7 @@ pub use client::{
|
|||
TickBroadcast,
|
||||
};
|
||||
pub use events::Event;
|
||||
pub use local_player::{GameProfileComponent, LocalPlayer};
|
||||
pub use local_player::{GameProfileComponent, LocalPlayer, SendPacketEvent};
|
||||
pub use movement::{
|
||||
PhysicsState, SprintDirection, StartSprintEvent, StartWalkEvent, WalkDirection,
|
||||
};
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
use std::{collections::HashSet, io::Cursor, sync::Arc};
|
||||
|
||||
use azalea_buf::McBufWritable;
|
||||
use azalea_chat::FormattedText;
|
||||
use azalea_core::{ChunkPos, GameMode, ResourceLocation, Vec3};
|
||||
use azalea_entity::{
|
||||
indexing::{EntityIdIndex, EntityUuidIndex},
|
||||
|
@ -16,8 +17,7 @@ use azalea_protocol::{
|
|||
serverbound_custom_payload_packet::ServerboundCustomPayloadPacket,
|
||||
serverbound_keep_alive_packet::ServerboundKeepAlivePacket,
|
||||
serverbound_move_player_pos_rot_packet::ServerboundMovePlayerPosRotPacket,
|
||||
serverbound_pong_packet::ServerboundPongPacket,
|
||||
serverbound_resource_pack_packet::ServerboundResourcePackPacket, ClientboundGamePacket,
|
||||
serverbound_pong_packet::ServerboundPongPacket, ClientboundGamePacket,
|
||||
ServerboundGamePacket,
|
||||
},
|
||||
read::ReadPacketError,
|
||||
|
@ -160,6 +160,15 @@ pub struct KeepAliveEvent {
|
|||
pub id: u64,
|
||||
}
|
||||
|
||||
#[derive(Event, Debug, Clone)]
|
||||
pub struct ResourcePackEvent {
|
||||
pub entity: Entity,
|
||||
pub url: String,
|
||||
pub hash: String,
|
||||
pub required: bool,
|
||||
pub prompt: Option<FormattedText>,
|
||||
}
|
||||
|
||||
/// Something that receives packets from the server.
|
||||
#[derive(Event, Component, Clone)]
|
||||
pub struct PacketReceiver {
|
||||
|
@ -1091,12 +1100,19 @@ pub fn process_packet_events(ecs: &mut World) {
|
|||
ClientboundGamePacket::ResourcePack(p) => {
|
||||
debug!("Got resource pack packet {:?}", p);
|
||||
|
||||
let mut system_state: SystemState<Query<&mut LocalPlayer>> = SystemState::new(ecs);
|
||||
let mut query = system_state.get_mut(ecs);
|
||||
let mut system_state: SystemState<EventWriter<ResourcePackEvent>> =
|
||||
SystemState::new(ecs);
|
||||
let mut resource_pack_events = system_state.get_mut(ecs);
|
||||
|
||||
let local_player = query.get_mut(player_entity).unwrap();
|
||||
// always accept resource pack
|
||||
local_player.write_packet(ServerboundResourcePackPacket { action: azalea_protocol::packets::game::serverbound_resource_pack_packet::Action::Accepted }.get());
|
||||
resource_pack_events.send(ResourcePackEvent {
|
||||
entity: player_entity,
|
||||
url: p.url,
|
||||
hash: p.hash,
|
||||
required: p.required,
|
||||
prompt: p.prompt,
|
||||
});
|
||||
|
||||
system_state.apply(ecs);
|
||||
}
|
||||
ClientboundGamePacket::Respawn(p) => {
|
||||
debug!("Got respawn packet {:?}", p);
|
||||
|
|
45
azalea/src/accept_resource_packs.rs
Normal file
45
azalea/src/accept_resource_packs.rs
Normal file
|
@ -0,0 +1,45 @@
|
|||
use crate::app::{App, Plugin};
|
||||
use azalea_client::packet_handling::{death_event_on_0_health, ResourcePackEvent};
|
||||
use azalea_client::respawn::perform_respawn;
|
||||
use azalea_client::SendPacketEvent;
|
||||
use azalea_protocol::packets::game::serverbound_resource_pack_packet::{
|
||||
self, ServerboundResourcePackPacket,
|
||||
};
|
||||
use bevy_app::Update;
|
||||
use bevy_ecs::prelude::*;
|
||||
|
||||
/// A plugin that makes it so bots automatically accept resource packs.
|
||||
#[derive(Clone, Default)]
|
||||
pub struct AcceptResourcePacksPlugin;
|
||||
impl Plugin for AcceptResourcePacksPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.add_systems(
|
||||
Update,
|
||||
accept_resource_pack
|
||||
.before(perform_respawn)
|
||||
.after(death_event_on_0_health),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn accept_resource_pack(
|
||||
mut events: EventReader<ResourcePackEvent>,
|
||||
mut send_packet_events: EventWriter<SendPacketEvent>,
|
||||
) {
|
||||
for event in events.iter() {
|
||||
send_packet_events.send(SendPacketEvent {
|
||||
entity: event.entity,
|
||||
packet: ServerboundResourcePackPacket {
|
||||
action: serverbound_resource_pack_packet::Action::Accepted,
|
||||
}
|
||||
.get(),
|
||||
});
|
||||
send_packet_events.send(SendPacketEvent {
|
||||
entity: event.entity,
|
||||
packet: ServerboundResourcePackPacket {
|
||||
action: serverbound_resource_pack_packet::Action::SuccessfullyLoaded,
|
||||
}
|
||||
.get(),
|
||||
});
|
||||
}
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
use crate::accept_resource_packs::AcceptResourcePacksPlugin;
|
||||
use crate::app::{App, Plugin, PluginGroup, PluginGroupBuilder};
|
||||
use crate::auto_respawn::AutoRespawnPlugin;
|
||||
use crate::container::ContainerPlugin;
|
||||
|
@ -200,5 +201,6 @@ impl PluginGroup for DefaultBotPlugins {
|
|||
.add(PathfinderPlugin)
|
||||
.add(ContainerPlugin)
|
||||
.add(AutoRespawnPlugin)
|
||||
.add(AcceptResourcePacksPlugin)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#![feature(type_changing_struct_update)]
|
||||
#![feature(lazy_cell)]
|
||||
|
||||
pub mod accept_resource_packs;
|
||||
mod auto_respawn;
|
||||
mod bot;
|
||||
pub mod container;
|
||||
|
|
Loading…
Add table
Reference in a new issue