Uploaded image for project: 'Minecraft: Java Edition'
  1. Minecraft: Java Edition
  2. MC-211331

Sculk sensors are not activated upon comparators clicking

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • None
    • 20w51a, 21w03a, 21w05a, 21w05b, 21w06a, 21w07a, 21w08b, 21w10a, 21w11a, 21w14a, 21w15a, 21w17a, 21w19a, 21w20a, 1.17 Pre-release 1, 1.17 Release Candidate 1, 1.17, 1.17.1 Pre-release 1, 1.17.1 Release Candidate 1, 1.17.1, 21w37a, 21w38a, 21w40a, 1.18, 1.18.1, 22w03a, 1.18.2, 22w14a, 22w18a, 1.19 Pre-release 1, 1.19 Pre-release 2, 1.19 Pre-release 3, 1.19, 1.19.1 Pre-release 3, 1.19.2, 1.19.3, 23w06a, 1.19.4 Pre-release 1, 1.19.4, 1.20.1, 23w33a, 23w43a, 24w11a, 1.21, 1.21.3
    • Confirmed
    • Game Events
    • Low
    • Gameplay

      The Bug:

      Sculk sensors are not activated upon comparators clicking.

      Steps to Reproduce:

      1. Place down a comparator along with a sculk sensor nearby.
      2. Right-click on the comparator to make it click and watch the sculk sensor closely as you do this.
      3. Take note as to whether or not sculk sensors are activated upon comparators clicking.

      Observed Behavior:

      Sculk sensors aren't activated.

      Expected Behavior:

      Sculk sensors would be activated.

      Code Analysis:

      Code analysis by Avoma can be found below.

      The following is based on a decompiled version of Minecraft 1.18.2 using MCP-Reborn.

      net.minecraft.world.level.block.ComparatorBlock.java
      public class ComparatorBlock extends DiodeBlock implements EntityBlock {
         ...
         public InteractionResult use(BlockState $bs, Level $l, BlockPos $bp, Player $p, InteractionHand $ih, BlockHitResult $bhr) {
            if (!$p.getAbilities().mayBuild) {
               return InteractionResult.PASS;
            } else {
               $bs = $bs.cycle(MODE);
               float f = $bs.getValue(MODE) == ComparatorMode.SUBTRACT ? 0.55F : 0.5F;
               $l.playSound($p, $bp, SoundEvents.COMPARATOR_CLICK, SoundSource.BLOCKS, 0.3F, f);
               $l.setBlock($bp, $bs, 2);
               this.refreshOutputState($l, $bp, $bs);
               return InteractionResult.sidedSuccess($l.isClientSide);
            }
         }
         ...

      If we look at the above class, we can see that switching modes on comparators simply isn't registered as a game event as the gameEvent() method is never called, thus not detecting this action as a vibration.

      Potential Fix:

      Simply calling the gameEvent() method where appropriate within this piece of code should resolve this problem. The "BLOCK_CHANGE" game event tag would be expected to be used here as the block states of comparators are changed when their modes are changed. The following line of code could be used in order to fix this:

      $LEVEL.gameEvent($PLAYER, GameEvent.BLOCK_CHANGE, $BLOCKPOS);

            Unassigned Unassigned
            Avoma [Mod] Avoma
            Votes:
            15 Vote for this issue
            Watchers:
            6 Start watching this issue

              Created:
              Updated:
              CHK: