diff --git a/crates/redpiler/src/backend/direct/tick.rs b/crates/redpiler/src/backend/direct/tick.rs index 7561ec59..cd76768e 100644 --- a/crates/redpiler/src/backend/direct/tick.rs +++ b/crates/redpiler/src/backend/direct/tick.rs @@ -16,7 +16,9 @@ impl DirectBackend { if node.powered && !should_be_powered { self.set_node(node_id, false, 0); } else if !node.powered { - if !should_be_powered { + self.set_node(node_id, true, 15); + let node = &mut self.nodes[node_id]; + if !should_be_powered & !node.pending_tick { schedule_tick( &mut self.scheduler, node_id, @@ -25,7 +27,6 @@ impl DirectBackend { TickPriority::Higher, ); } - self.set_node(node_id, true, 15); } } NodeType::Torch => { diff --git a/crates/redstone/src/repeater.rs b/crates/redstone/src/repeater.rs index ca944031..d382f739 100644 --- a/crates/redstone/src/repeater.rs +++ b/crates/redstone/src/repeater.rs @@ -95,5 +95,8 @@ pub fn tick(mut rep: RedstoneRepeater, world: &mut impl World, pos: BlockPos) { rep.powered = true; world.set_block(pos, Block::RedstoneRepeater { repeater: rep }); on_state_change(rep, world, pos); + if !should_be_powered && !world.pending_tick_at(pos) { + world.schedule_tick(pos, rep.delay as u32, TickPriority::Higher); + } } }