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

Sculk sensors are not activated upon placing food onto campfires

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • 1.19 Pre-release 2
    • 20w51a, 21w03a, 21w05a, 21w05b, 21w06a, 21w07a, 21w08b, 21w10a, 21w14a, 21w15a, 21w17a, 21w19a, 21w20a, 1.17 Pre-release 1, 1.17 Pre-release 3, 1.17 Pre-release 5, 1.17 Release Candidate 1, 1.17 Release Candidate 2, 1.17, 1.17.1 Pre-release 1, 1.17.1 Pre-release 3, 1.17.1, 21w38a, 21w41a, 21w43a, 1.18, 1.18.1, 22w05a, 1.18.2, 22w14a, 22w17a, 22w18a, 1.19 Pre-release 1
    • Confirmed
    • Game Events
    • Normal

      The Bug:

      Sculk sensors are not activated upon placing food onto campfires.

      Steps to Reproduce:

      • Place down a campfire.
      • Place down a sculk sensor nearby and place some food onto the campfire.
      • Take note as to whether or not sculk sensors are activated upon placing food onto campfires.

      Observed Behavior:

      Sculk sensors are not activated upon placing food onto campfires.

      Expected Behavior:

      Sculk sensors would be activated upon placing food onto campfires.

      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.CampfireBlock.java
      public class CampfireBlock extends BaseEntityBlock implements SimpleWaterloggedBlock {
         ...
         public InteractionResult use(BlockState $bs, Level $l, BlockPos $bp, Player $p, InteractionHand $ih, BlockHitResult $bhr) {
            BlockEntity blockentity = $l.getBlockEntity($bp);
            if (blockentity instanceof CampfireBlockEntity) {
               CampfireBlockEntity campfireblockentity = (CampfireBlockEntity)blockentity;
               ItemStack itemstack = $p.getItemInHand($ih);
               Optional<CampfireCookingRecipe> optional = campfireblockentity.getCookableRecipe(itemstack);
               if (optional.isPresent()) {
                  if (!$l.isClientSide && campfireblockentity.placeFood($p.getAbilities().instabuild ? itemstack.copy() : itemstack, optional.get().getCookingTime())) {
                     $p.awardStat(Stats.INTERACT_WITH_CAMPFIRE);
                     return InteractionResult.SUCCESS;
                  }
                  ...

      If we look at the above class, we can see that placing food onto campfires 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 campfires are visually changed when food is placed onto them. The following line of code could be used in order to fix this:

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

        1. MC-209701.png
          MC-209701.png
          659 kB
        2. MC-209701.mp4
          4.97 MB

            kingbdogz [Mojang] Brandon Pearce
            Avoma [Mod] Avoma
            Votes:
            9 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:
              CHK: