10

So, I know that redstone torches burn out, and according to the Minecraft wiki, there is some maths behind this. Unfortunately, the MC wiki isn't very descriptive (and mixes redstone ticks with game ticks), and I want to know this:

  1. What are the conditions for a redstone torch burning out, and what is the probability (if any) that it will do so once the conditions are met.
  2. What are the conditions for a burnt-out redstone torch recovering, and what is the probability that it will do so...

If you use "ticks" in your answer, please say whether you're talking about redstone ticks or game ticks, otherwise it'll get really confusing...

13
  1. A redstone torch will burn out if it pulses (on then off) 8 times in 100 game ticks (5 seconds)

  2. The torch will come on again if it receives an update from either a block or a random game tick (which occur approximately every 30 seconds). However, you must wait until there have been less than 7 pulses in the last 100 game ticks before it can be turned on again.

Source

2
  • So after 8 pulses, the torch immediately burns out? – RunasSudo Oct 24 '12 at 6:21
  • 2
    @pokepal101 As long as those pulses are close enough together, it will burn out immediately after the 8th pulse. – Ronan Oct 24 '12 at 10:41
0

In current versions, a redstone torch will burn out if it toggles state 8 times in 60 game ticks (3 seconds). According to the Minecraft Wiki, this change from 100 game ticks was implemented in version 1.2.1 (making the accepted answer incorrect when it was posted).

Here is the relevant code from 1.16.4:

   private static boolean isBurnedOut(World world, BlockPos worldIn, boolean pos) {
      List<RedstoneTorchBlock.Toggle> list = BURNED_TORCHES.computeIfAbsent(world, (reader) -> {
         return Lists.newArrayList();
      });
      if (pos) {
         list.add(new RedstoneTorchBlock.Toggle(worldIn.toImmutable(), world.getGameTime()));
      }

      int i = 0;

      for(int j = 0; j < list.size(); ++j) {
         RedstoneTorchBlock.Toggle redstonetorchblock$toggle = list.get(j);
         if (redstonetorchblock$toggle.pos.equals(worldIn)) {
            ++i;
            if (i >= 8) {
               return true;
            }
         }
      }

      return false;
   }

   public void tick(BlockState state, ServerWorld worldIn, BlockPos pos, Random rand) {
      boolean flag = this.shouldBeOff(worldIn, pos, state);
      List<RedstoneTorchBlock.Toggle> list = BURNED_TORCHES.get(worldIn);

      while(list != null && !list.isEmpty() && worldIn.getGameTime() - (list.get(0)).time > 60L) {
         list.remove(0);
      }

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.