diff --git a/src/lib.rs b/src/lib.rs index a41da79..0408543 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -214,9 +214,12 @@ pub fn cut(input: &[u8], start_tick: u32, end_tick: u32) -> Vec { true } }); + mutators.push_packet_mutator(move |packet: &mut Packet| { + packet.set_tick(packet.tick() - start_tick) + }); remove_already_deletes(&mut next, &start_entities, last_server_tick); - next.set_tick(next.tick() - start_tick); + mutators.mutate_packet(&mut next); next.encode(&mut out_stream, &handler.state_handler) .unwrap(); handler.handle_packet(next).unwrap(); @@ -224,7 +227,6 @@ pub fn cut(input: &[u8], start_tick: u32, end_tick: u32) -> Vec { while let Some(mut packet) = packets.next(&handler.state_handler).unwrap() { let ty = packet.packet_type(); let original_tick = packet.tick(); - packet.set_tick(original_tick - start_tick); remove_already_deletes(&mut packet, &start_entities, last_server_tick); diff --git a/src/mutate.rs b/src/mutate.rs index b369ec8..8a48133 100644 --- a/src/mutate.rs +++ b/src/mutate.rs @@ -15,10 +15,6 @@ pub trait MessageFilter { fn filter(&self, message: &Message) -> bool; } -pub trait EntityMutator { - fn mutate_entity(&self, entity: &mut PacketEntity); -} - struct PacketMessageMutator { mutator: T, } @@ -34,20 +30,21 @@ impl PacketMutator for PacketMessageMutator { } } +impl PacketMutator for F { + fn mutate_packet(&self, packet: &mut Packet) { + self(packet) + } +} + impl From for PacketMessageMutator { fn from(mutator: T) -> Self { PacketMessageMutator { mutator } } } -impl MessageMutator for T { +impl MessageMutator for F { fn mutate_message(&self, message: &mut Message) { - if let Message::PacketEntities(entity_message) = message { - entity_message - .entities - .iter_mut() - .for_each(|ent| self.mutate_entity(ent)) - } + self(message) } } @@ -89,7 +86,11 @@ impl MutatorList { Self::default() } - pub fn push_mutator>(&mut self, mutator: T) { + pub fn push_packet_mutator(&mut self, mutator: M) { + self.mutators.push(Box::new(mutator)) + } + + pub fn push_message_mutator>(&mut self, mutator: T) { self.mutators.push(Box::new(mutator.into())) }