mirror of
https://github.com/demostf/cutter.git
synced 2026-06-03 11:54:08 +02:00
more mutate
This commit is contained in:
parent
d62f4be2aa
commit
4e8b89353e
2 changed files with 17 additions and 14 deletions
|
|
@ -214,9 +214,12 @@ pub fn cut(input: &[u8], start_tick: u32, end_tick: u32) -> Vec<u8> {
|
|||
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<u8> {
|
|||
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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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<T: MessageMutator> {
|
||||
mutator: T,
|
||||
}
|
||||
|
|
@ -34,20 +30,21 @@ impl<T: MessageMutator> PacketMutator for PacketMessageMutator<T> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<F: Fn(&mut Packet)> PacketMutator for F {
|
||||
fn mutate_packet(&self, packet: &mut Packet) {
|
||||
self(packet)
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: MessageMutator> From<T> for PacketMessageMutator<T> {
|
||||
fn from(mutator: T) -> Self {
|
||||
PacketMessageMutator { mutator }
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: EntityMutator> MessageMutator for T {
|
||||
impl<F: Fn(&mut Message)> 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<M: PacketMutator + 'static, T: Into<M>>(&mut self, mutator: T) {
|
||||
pub fn push_packet_mutator<M: PacketMutator + 'static>(&mut self, mutator: M) {
|
||||
self.mutators.push(Box::new(mutator))
|
||||
}
|
||||
|
||||
pub fn push_message_mutator<M: PacketMutator + 'static, T: Into<M>>(&mut self, mutator: T) {
|
||||
self.mutators.push(Box::new(mutator.into()))
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue