Piston

Pistons are blocks capable of pushing or pulling adjacent blocks, depending on the direction they face.

History
The original version of this feature was a mod posted on the Minecraft Forums by Hippoplatimus, the code for that version was given to Jeb, who worked on implementing them in vanila Minecraft, but dou to moving to work on the pocket Edition, pistons where delayed, and wern't relesed on the 1.5 update, or the 1.6 update. Finally, when the poket edition was good enough to show at E3, Jeb went back to work on PC Minecraft and pistons were finally added in version 1.7, along with Sticky Pistons.

Functionality
Piston functions include:
 * Pushing at least 1 block, and at most 12 blocks.
 * Moving entities: the Player, mobs, dropped items and blocks, primed TNTs, etc.
 * The ability to toggle fluids flows like a flood gate.
 * Pistons are 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.

Pistons cannot move blocks like obsidian and bedrock to avoid abuse, and any blocks with tile entities(like note blocks and chests), as moving blocks are stored as tile entities on the piston. If any such block it stryed to be moved by a piston, then the piston wouldn't extend.

If pistons push most "attached to a block” blocks such as levers, torches, redstone, etc., then they will be detached and drop as an item; however, rails can be moved by pistons, but will not maintain their orientations.

Trivia

 * 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 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 be placed near cacti so that when they are activated, the pushing end is adjacent to the base of a cactus, causing the cactus to break.

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 single player this will always make your game load to the "Saving Chunks..." screen, unless you change your spawn position using 3rd party software.
 * 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.
 * Any pushable block can be duplicated by using a technique similar to the above. Stick piston A pushes block and sticks to it. Then have a Piston B attempt to push that same block while Piston A tries to pull it back. The result is that the block is duplicated so that there is now 2 of the same block (one stuck to the retracted piston A, and the other pushed out by B).
 * 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 powered, both types of pistons cannot power surrounding blocks.
 * Beds can be pushed lengthwise with a piston, but if pulled back with a sticky piston the bed will split in half, dropping a bed item (although the bed can still be used.)
 * Powering pistons with a redstone torch in some cases seems to always consider the torch as "on", even if powered off.
 * When a torch or redstone torch is placed on a piston and the piston is removed, the torch will float in mid-air.
 * When a series of pressure plates and doors are placed in front of the piston and the piston is extended, the pressure plates will turn into door items, and the existing doors will become door items as well. This works for doubling both iron and wooden doors.
 * When Pistons point down it is possible to glitch through the pistons.
 * When a piston is placed upwards (with the redstone input being located 1 block bellow) and a rapid pulse signal is applied to the redstone, if the player tries to break the piston, it will break, dropping an item, but leaving a breakable piston head in mid-air.
 * When a piston attempts to push a redstone wire or any redstone object that gives power(except redstone torch), the game crashes with a "Saving Chunks..." screen, corrupting the world as well.
 * A piston attached to a sticky piston may disappear when extended into flowing water.