1
2
Fork 0
mirror of https://github.com/mat-1/azalea.git synced 2025-08-02 06:16:04 +00:00

AcceptResourcePacksPlugin

This commit is contained in:
mat 2023-09-14 17:00:24 -05:00
parent 83784d5a35
commit 3621acab75
5 changed files with 72 additions and 8 deletions

View file

@ -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,
};

View file

@ -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);

View 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(),
});
}
}

View file

@ -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)
}
}

View file

@ -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;