Piston

Pistons are blocks capable of pushing most blocks, depending on the direction they are facing.

Functionality

 * Pistons when placed always face the player.
 * Pistons are redstone triggered. When powered, their wooden surface extends outwards by 1 block, pushing up to a maximum of 12 blocks.
 * When going back to the unpowered state, it does not pull back any block. See Sticky Piston for that.
 * Its wooden surface can also push players, mobs and other entities on the floor by 1 block if they are in the way. However, if there is no space for the player/mob/entity to be pushed, the extended piston head will just pass through them without harm. The piston can still push a mob or player off of a one block wide walkway, which can be coupled with a pressure plate for a fairly effective trap.
 * The extended piston head is considered solid and transparent (just like Glass). If a piston head extends into a player/mob this way, they will not suffocate, and the player/mob can move out of it but not back into it.
 * Similarly, if a block pushed by a piston is pushed into a player/mob, the player/mob will get pushed if there is space. If there is no space, the block will start to occupy the same space as the player/mob and cause suffocation if the block is opaque.
 * When blocks are pushed by a piston, they are momentarily non-solid and cause any players/items on the moving block to fall through the moving block.
 * The piston's head cannot crush players/mobs, only push them into another trap or cause suffocation at best.
 * Pistons can be used to toggle fluids flows like a flood gate by extending into or retracting from the space where water will flow through.
 * Pistons can push Minecarts and boats. Note that if the minecart is on a rail, the rail will also get pushed.

Pushing blocks

 * Some blocks cannot be pushed by Pistons and the piston head will not extend:
 * Obsidian, Bedrock to avoid abuse
 * Blocks with extra data (tile entities) attached - note block, chest, furnace, dispenser, monster spawner.
 * Extended pistons (both sticky and normal) because moving blocks are temporarily stored as tile entities.
 * Portals
 * Pumpkins, Cobwebs and Jack-O-Lanterns are turned back into items when pushed. (If trying to create extendable/retractable lighting, you can use Glowstone instead.)
 * Pistons cannot push water or lava, only obstruct it. A piston head extending into a water or lava source block will destroy the source block.
 * Pistons cannot push most blocks that are "attached to a block” such as levers, torches, redstone, signs, etc. They will be detached and drop as an item. Exceptions include:
 * Doors, which can be pushed vertically
 * Trapdoors, as long as their hinged side remains attached to a solid block in their new position.
 * Rails (and Powered Rail, Detector Rail) as long as they remain on top of a solid block in their new position. Rails will re-orient themselves after being pushed just as they do when placed manually.
 * Blocks that are attached to pushed blocks will be broken off unless the block which is now under/behind them is also acceptable; for example, torches can be placed on a "self-repairing" cobblestone structure.
 * Pistons cannot push a chain of blocks more than 12 blocks long, else they will not extend.

Powering Pistons

 * Pistons can be powered horizontally through single blocks by way of either redstone or repeaters
 * Pistons can be powered by a torch directly adjacent to them (above, below, or to the side)
 * Pistons can be powered by a torch from below when said torch would power the block the pistons are resting on (just like powered rails)
 * Pistons can be powered by any powered block directly adjacent to them, and by any powered block one block above and to the side. However, the piston won't recompute its state unless a block directly next to it is changed. An adjacent piston retracting causes a recompute, but an adjacent piston extending doesn't.
 * Both redstone dust and repeaters will power the piston directly in front of it as well as a second piston below this piston. This allows a wall made completely of pistons to be constructed.
 * When toggled between on and off rapidly with a gravity affected block (such as sand) above it, a piston will eventually break the block, which can be picked up as a resource.
 * A repeater cannot transfer power through a piston.

Common Usage

 * Pistons are commonly used to push/pull blocks to simulate opening and closing doors, gates and other traps.
 * Pistons can be used to make self-repairing bridges by using cobblestone from a cobblestone generator. The same principle can be used to make a self-repairing house.
 * When used in conjunction with redstone repeaters, pistons can make a redstone piston clock capable of almost any speed.
 * A piston powered clock linked up to a square of blocks designed to be pushed round in a loop can create an endless loop of data. Combined with the inability of transparent blocks (such as glass) to transmit power, a redstone repeater can be run into the pushed data block to optionally perform a function on the other side. Scale this up into 3 dimensions and you get an array of data looping round, being tested to see if it transmits the power or not. This can be used to create redstone sign outputs, to play musical sequences, and a countless list of other things.
 * Another use for Pistons is to put a block on top of the piston facing up and the mine cart track on top of that and then put a Minecart one block away from it on the track so that when you activate the Piston with a source of power it will slant the Track and get the mine cart started. This will work better with a Sticky Piston, because if you have a sticky piston, you will not have to manually reset the track.

History
The original piston was a mod posted on the Minecraft Forums by Hippoplatimus. The code for that version was given to Jeb, who then worked on shortly implementing them into vanilla Minecraft. However, due to his work on the Pocket Edition, pistons were delayed, and were not released for the 1.5 update nor for the 1.6 update.

Finally, when the Pocket Edition was good enough to show at E3, Jeb went back to work on the PC version of Minecraft and pistons were finally added in version 1.7, including Sticky Pistons.

Differences with the mod piston
Differences of the vanilla type in comparison to the mod version:

Pros:
 * Pistons now are crafted with cheaper materials, so building them is considerably easier.
 * "Upgrading" a piston into a sticky piston is now possible (although pistons cannot be converted back).
 * Pistons can no longer be accidentaly reoriented by an unintentional right click.
 * They break far faster, making for quick replacing.
 * Pistons now work in multiplayer.

Cons:
 * Can no longer thrust blocks and items upwards and send them flying.
 * Vanilla pistons must be removed and placed again to change their orientation, rather than just right clicking.
 * Slimeballs are somewhat of a rarity, making sticky pistons hard to craft.
 * Vanilla pistons can only push 12 blocks, while the others could push 16 blocks.

Other changes include a big difference in graphical design, as the piston mod had a silver, more modern looking texture with a thick bar, where the pistons in the game have a more medieval-themed texture, with a stone base, and thin wooden pushing pad.

Bugs

 * When powered, both types of pistons cannot power surrounding blocks.
 * If two extended pistons are one above the other, the lower one cannot retract until the upper one retracts.
 * Powering pistons with a redstone torch in some cases seems to always consider the torch as "on", even if powered off.
 * Rear part of a piston during retracting has no collision: when pistons point down it is possible to glitch through them when they retract, it is also possible to glitch through a retracting piston while walking against it.
 * Blocks being pushed by a piston have no collision in certain places.
 * When a sticky piston pulls a door, it becomes a half door attached to the piston.
 * A piston attached to a sticky piston may disappear when extended into flowing water.
 * Light passes through pistons, both normal and sticky, powered and unpowered of both types.
 * Placing a lever 1 block above and to the side of a piston and then activating the lever will cause the game to crash and will crash every time you try to join the world which has this bug.
 * When a piston or a sticky 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 or sticky piston with any item, block, tool, or hand, the piston or sticky piston will break, dropping an item, but leaving a breakable piston head in mid-air..
 * If a sticky piston is pulled down by another sticky piston, it will not pull the block it is attached to with it.
 * Sometimes, when powering large lengths of pistons (unknown with sticky) the last one or two pistons might not go back from being retracted.
 * When an upward-facing piston attempts to repeatedly push a stack of gravity-affected blocks upward, it will destroy the blocks without dropping them to be collected.

Trivia

 * Pistons are slightly altered from the original mod. For example, the original Piston Mod could propel gravity-affected blocks, as well as entities and mobs several meters vertically or horizontally, while vanilla Pistons cannot do this. However, if a gravity-affected block is sitting on an upward-facing piston, and the piston retracts, the block will fall.
 * If a piston pushes a gravity-affected block over a hole, the block will fall, even if attached to a sticky piston.
 * Pistons cannot be used to 'crush' players or mobs against walls. A piston will simply pass through them if this is attempted. However, blocks being pushed by piston will crush players and mobs and suffocate them, making it useful for traps.
 * If attached from up above, pistons may be able to push blocks downwards and suffocate the player or mobs.
 * If a water spring is placed on top of a piston, it will disappear if the piston is extended. This also applies to lava springs.
 * Pistons can be placed near cacti so that when they are activated, and if the pushing end is adjacent to the base of a cactus, the cactus will break.
 * Pistons will break leaves when pushed.
 * If you push a burning block, the block will be put out. If you push a row of burning blocks, they will all stay on fire except for the farthest one.
 * Pistons cannot push any block into level 128.
 * Pistons can be used to create logic gates. However, most of them suffer from bad latency and larger size compared to their pure redstone counterparts, and offer no advantages.
 * When a piston with a sand/gravel block on top is pulsed with a 1 clock, the sand/gravel block will not begin to fall in the time the piston goes down and back up.