Moving_Piston is commonly called a B36 or Block 36. This is because before The Flattening it had the block ID 36. B36 is created by pistons when they push a block. The piston head also converts itself into a B36. B36 is not conductive to redstone and it is invisible, although it does have a hitbox.
Special properties that B36 has which might be useful include:
Like most blocks, the B36 has a hitbox. A B36 hitbox is very interesting as it can be offset from where the B36 is actually located. This can be seen by doing the following:
In this example, the hitbox stays in its original state, at the position it came from, because the tile entity isn’t processed outside of the world border. The same thing happens in border-loaded chunks, for the same reason.
When processed, the tile entity moves the hitbox and all entities colliding with it by half a block. Piston extensions are three ticks long, so this occurs three times. On the final tick, the B36 tile entities are turned back into normal blocks. That final tick can be forced to execute in the block event phase of a tick when a sticky piston tries to retract a B36, or a headless sticky piston retracts into a B36 with a movable block in front.
Creating a B36 without it turning into other blocks can be difficult. You can create a tile entity-less B36; only the block will be there, without a tile entity to turn it back into a block. Alternatively, you can prevent the tile entity from being processed by creating it outside of the world border or in a border-loaded chunk.
The usual method is using an explosion to blow up the tile entity in the same tick that a piston extends by using budded pistons, causing a tile entity-less B36 to be created in its place. It is no longer possible to create a tile entity-less B36 in 1.17+, as B36 data is now stored globally. It can now be created with update suppression in the tick, causing a crash. This can be seen in a Youtube video (https://www.youtube.com/watch?v=xXncCVzpg38) A different setup can be seen below.
The following NBT tags can be accessed with the
/data get block
command: