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

Sculk sensor range is still spherical, creating different outputs from within a given block


    • Icon: Bug Bug
    • Resolution: Fixed
    • 23w31a
    • 23w14a
    • None
    • Plausible
    • Game Events, Redstone
    • Normal
    • Expansion A

      Currently sculk sensors ignore vibrations outside of the sculk sensor range, even when the floored position is within the range, leading to different sculk outputs for a single block.

      This behaviour contradicts the recent changes in 23w14a where sculks were made to produce the same outputs for anywhere within one block by flooring the vibration position values within that block:

      The coloured blocks in game show where the sculk should be sensing vibrations (this minecraft diagram was made by the developer responsible for the sculk sensors so it's clear that these edge blocks should be included within the red detection range of the sculk sensor) and the red circle shows exactly where the sensor stops detecting vibrations.

      To fix this, the vibration position should be floored to a blockpos value before the game checks to see if it was within the range. Or depending on how the code works, the range should be changed from circular to something more blocky like this:

      Here the dotted cyan line represents the current implementation of the sculk sensor range (not to scale), and the outer magenta line represents a proposed solution that would remove the variable outputs for all the blocks at the very edge of the sculks range (currently an output of 1 signal strength if the vibration occurs between the orange and cyan line, and an output of 0 in case it occurs between the cyan and magenta line)

      Also if the location of vibration gets floored to a position that is outside of the current circular range, then the sculk sensor will activate when in reality it shouldn't as once the new, floored position is moved out of the range, the sculk output should be 0.

      The below video gives an example of these variable outputs taken to the extreme. If you create a vibration in the dead centre of a slab 16 blocks above a sculk sensor, you're able to activate it, but if you move just 0.0000001686 blocks in any direction, then you won't be able to trigger that sculk anymore:

      variable outputs per block - not intended as of 23w14a.mp4

      And this last video is just a visualisation of how small this area is where you're able to activate one sculk sensor, note this is just showing this effect with a vertical distance, but a similar thing can be done by going 16 blocks away from a sculk sensor and jumping on the back of a block vs the front, at the back you don't get an input but at the front of the block you do.

      small detection range to activate a sculk from 16 blocks away.mp4


            gnembon [Mojang] Gnembon
            ncolyer11 ncolyer11
            11 Vote for this issue
            5 Start watching this issue