Piston

Pistons are blocks capable of pushing or pulling adjacent blocks, depending on the direction they face. The original version of this feature was a mod posted on the Minecraft Forums by Hippoplatimus. Pistons were added in version 1.7, along with Sticky Pistons.

Functionality
Pistons are slightly altered from the original mod; for example. While the original Piston Mod could propel gravity-affected blocks, as well as entities and mobs several meters vertically or horizontally, vanilla Pistons do not. However, if a gravity-affected block is sitting on an upward-facing piston, and the piston retracts, the block will fall.

Pistons cannot move blocks like obsidian and bedrock to avoid abuse, and any blocks with tile entities, as moving blocks are stored as tile entities on the piston.

Piston functions include:
 * Pushing (and pulling if sticky) at least 1 block, and at most 12. Pulling will always only pull 1 block, while pushing will push between 1 and 12 blocks.
 * Moving the player and other mobs, as well as entities.
 * The ability to toggle fluid flows like a flood gate.
 * Redstone triggered, so that en masse automated block is possible (e.g. piston walls and retractable bridges).
 * Pistons can be moved by other pistons, but only when the piston is not extended.

A basic demonstration on the functionality of pistons can be seen here:

Trivia

 * Tile entities are destroyed if they are pushed by a piston.
 * A maximum of 12 blocks in a row can be pushed by one piston.
 * Pistons cannot be used to 'crush' players or mobs against walls. A piston will simply pass through them if attempted.
 * Pistons appear to be destroyed at the same rate, regardless of the tool used.
 * If attached from up above, pistons may be able to push blocks downwards and suffocate the player or mobs. This can be very useful for mob traps.
 * If a water spring is placed on top of a piston, it will disappear if the piston is extended.
 * Pistons can push dropped items as well, which can be useful to collect mob grinder items on command.

Bugs

 * When a piston is placed facing upwards, and a block with a pressure plate on top of it is placed on the piston, activating the pressure will make the "Saving Chunks..." screen appear. In singleplayer this will, as you might understand, always make your game load to the "Saving Chunks..." screen, unless you change your spawn position in a Minecraft-editor.
 * When gravity-affected blocks are pushed over a hole in the ground and quickly pulled back again (or pushed away with another piston), a duplicate block appears in the hole.
 * In Beta 1.7, pushing any tile entity with a Piston would cause the game to crash with a "Saving Chunks..." screen, and could also corrupt your world. This was fixed in Beta 1.7_01.
 * When attempting to push ice blocks, they will turn into water in their original position, and the piston head will disappear. The piston will return to normal once retracted.
 * When Pistons point down it is possible to glitch through the pistons, demonstrated here: