diff --git a/src/common/resources/lang/en_US/tile.lang b/src/common/resources/lang/en_US/tile.lang
index 1375911da..a77fdafdc 100644
--- a/src/common/resources/lang/en_US/tile.lang
+++ b/src/common/resources/lang/en_US/tile.lang
@@ -1 +1 @@
-tile.stone.name=Stone
tile.stone.desc=A block of solid stone.
tile.basalt.name=Basalt
tile.basalt.desc=A block of solid basalt.
tile.limestone.name=Limestone
tile.limestone.desc=A block of solid limestone.
tile.granite.name=Granite
tile.granite.desc=A block of solid granite.
tile.marble.name=Marble
tile.marble.desc=A block of solid marble.
tile.slate.name=Slate
tile.slate.desc=A block of solid slate.
tile.permafrost.name=Permafrost
tile.permafrost.desc=A block of frozen stone.

tile.cobble.stone.name=Cobblestone
tile.cobble.stone.desc=Stone, smashed apart and reconstituted.
tile.cobble.stone.mossy.name=Mossy Cobblestone
tile.cobble.stone.mossy.desc=Cobblestone with added greenery.
tile.cobble.basalt.name=Cobbled Basalt
tile.cobble.basalt.desc=Basalt, smashed apart and reconstituted.
tile.cobble.limestone.name=Cobbled Limestone
tile.cobble.limestone.desc=Limestone, smashed apart and reconstituted.
tile.cobble.granite.name=Cobbled Granite
tile.cobble.granite.desc=Granite, smashed apart and reconstituted.
tile.cobble.permafrost.name=Cobbled Permafrost
tile.cobble.permafrost.desc=Permafrost, smashed apart and reconstituted.

tile.pillar.marble.name=Marble Pillar
tile.pillar.marble.desc=A block of marble engraved into a pillar.
tile.capstone.marble.name=Marble Capstone
tile.capstone.marble.desc=A pillar capstone made of solid marble.

tile.sandstone.name=Sandstone
tile.sandstone.desc=Compacted sand.

tile.stone.carved.name=Carved Stone
tile.stone.carved.desc=Polished Stone with lines hewn through the middle.
tile.granite.carved.name=Carved Granite
tile.granite.carved.desc=Polished Granite with lines hewn through the middle.
tile.limestone.carved.name=Carved Limestone
tile.limestone.carved.desc=Polished Limestone with lines hewn through the middle.
tile.basalt.carved.name=Carved Basalt
tile.basalt.carved.desc=Polished Basalt with lines hewn through the middle.
tile.permafrost.carved.name=Carved Permafrost
tile.permafrost.carved.desc=Polished Permafrost with lines hewn through the middle.
tile.netherrack.carved.name=Carved Netherrack
tile.netherrack.carved.desc=Polished Netherrack with lines hewn through the middle.

tile.planks.oak.name=Wooden Planks
tile.planks.oak.desc=Processed tree insides.
tile.planks.oak.painted.name=Mystery Planks
tile.planks.oak.painted.desc=How did you get this?!
tile.planks.oak.painted.black.name=Black Wooden Planks
tile.planks.oak.painted.black.desc=Wooden planks, stained black.
tile.planks.oak.painted.red.name=Red Wooden Planks
tile.planks.oak.painted.red.desc=Wooden planks, stained red.
tile.planks.oak.painted.green.name=Green Wooden Planks
tile.planks.oak.painted.green.desc=Wooden planks, stained green.
tile.planks.oak.painted.brown.name=Brown Wooden Planks
tile.planks.oak.painted.brown.desc=Wooden planks, stained brown.
tile.planks.oak.painted.blue.name=Blue Wooden Planks
tile.planks.oak.painted.blue.desc=Wooden planks, stained blue.
tile.planks.oak.painted.purple.name=Purple Wooden Planks
tile.planks.oak.painted.purple.desc=Wooden planks, stained purple.
tile.planks.oak.painted.cyan.name=Cyan Wooden Planks
tile.planks.oak.painted.cyan.desc=Wooden planks, stained cyan.
tile.planks.oak.painted.silver.name=Light Gray Wooden Planks
tile.planks.oak.painted.silver.desc=Wooden planks, stained light gray.
tile.planks.oak.painted.gray.name=Gray Wooden Planks
tile.planks.oak.painted.gray.desc=Wooden planks, stained gray.
tile.planks.oak.painted.pink.name=Pink Wooden Planks
tile.planks.oak.painted.pink.desc=Wooden planks, stained pink.
tile.planks.oak.painted.lime.name=Lime Wooden Planks
tile.planks.oak.painted.lime.desc=Wooden planks, stained lime.
tile.planks.oak.painted.yellow.name=Yellow Wooden Planks
tile.planks.oak.painted.yellow.desc=Wooden planks, stained yellow.
tile.planks.oak.painted.lightblue.name=Light Blue Wooden Planks
tile.planks.oak.painted.lightblue.desc=Wooden planks, stained light blue.
tile.planks.oak.painted.magenta.name=Magenta Wooden Planks
tile.planks.oak.painted.magenta.desc=Wooden planks, stained magenta.
tile.planks.oak.painted.orange.name=Orange Wooden Planks
tile.planks.oak.painted.orange.desc=Wooden planks, stained orange.
tile.planks.oak.painted.white.name=White Wooden Planks
tile.planks.oak.painted.white.desc=Wooden planks, stained white.

tile.torch.coal.name=Torch
tile.torch.coal.desc=Helps light the way.

tile.ladder.oak.name=Oak Ladder
tile.ladder.oak.desc=For very rapid vertical movement.

tile.fence.planks.oak.name=Oak Fence
tile.fence.planks.oak.desc=Too tall to jump over.

tile.fence.planks.oak.painted.name=Mystery Wooden Fence
tile.fence.planks.oak.painted.desc=How did you get this?!
tile.fence.planks.oak.painted.black.name=Black Wooden Fence
tile.fence.planks.oak.painted.black.desc=A wooden fence, stained black.
tile.fence.planks.oak.painted.red.name=Red Wooden Fence
tile.fence.planks.oak.painted.red.desc=A wooden fence, stained red.
tile.fence.planks.oak.painted.green.name=Green Wooden Fence
tile.fence.planks.oak.painted.green.desc=A wooden fence, stained green.
tile.fence.planks.oak.painted.brown.name=Brown Wooden Fence
tile.fence.planks.oak.painted.brown.desc=A wooden fence, stained brown.
tile.fence.planks.oak.painted.blue.name=Blue Wooden Fence
tile.fence.planks.oak.painted.blue.desc=A wooden fence, stained blue.
tile.fence.planks.oak.painted.purple.name=Purple Wooden Fence
tile.fence.planks.oak.painted.purple.desc=A wooden fence, stained purple.
tile.fence.planks.oak.painted.cyan.name=Cyan Wooden Fence
tile.fence.planks.oak.painted.cyan.desc=A wooden fence, stained cyan.
tile.fence.planks.oak.painted.silver.name=Light Gray Wooden Fence
tile.fence.planks.oak.painted.silver.desc=A wooden fence, stained light gray.
tile.fence.planks.oak.painted.gray.name=Gray Wooden Fence
tile.fence.planks.oak.painted.gray.desc=A wooden fence, stained gray.
tile.fence.planks.oak.painted.pink.name=Pink Wooden Fence
tile.fence.planks.oak.painted.pink.desc=A wooden fence, stained pink.
tile.fence.planks.oak.painted.lime.name=Lime Wooden Fence
tile.fence.planks.oak.painted.lime.desc=A wooden fence, stained lime.
tile.fence.planks.oak.painted.yellow.name=Yellow Wooden Fence
tile.fence.planks.oak.painted.yellow.desc=A wooden fence, stained yellow.
tile.fence.planks.oak.painted.lightblue.name=Light Blue Wooden Fence
tile.fence.planks.oak.painted.lightblue.desc=A wooden fence, stained light blue.
tile.fence.planks.oak.painted.magenta.name=Magenta Wooden Fence
tile.fence.planks.oak.painted.magenta.desc=A wooden fence, stained magenta.
tile.fence.planks.oak.painted.orange.name=Orange Wooden Fence
tile.fence.planks.oak.painted.orange.desc=A wooden fence, stained orange.
tile.fence.planks.oak.painted.white.name=White Wooden Fence
tile.fence.planks.oak.painted.white.desc=A wooden fence, stained white.

tile.fencegate.planks.oak.name=Wooden Fence Gate
tile.fencegate.planks.oak.desc=Like a door but for fences.

tile.fencegate.planks.oak.painted.name=Mystery Wooden Fence Gate
tile.fencegate.planks.oak.painted.desc=How did you get this?!
tile.fencegate.planks.oak.painted.black.name=Black Wooden Fence Gate
tile.fencegate.planks.oak.painted.black.desc=A wooden fence gate, stained black.
tile.fencegate.planks.oak.painted.red.name=Red Wooden Fence Gate
tile.fencegate.planks.oak.painted.red.desc=A wooden fence gate, stained red.
tile.fencegate.planks.oak.painted.green.name=Green Wooden Fence Gate
tile.fencegate.planks.oak.painted.green.desc=A wooden fence gate, stained green.
tile.fencegate.planks.oak.painted.brown.name=Brown Wooden Fence Gate
tile.fencegate.planks.oak.painted.brown.desc=A wooden fence gate, stained brown.
tile.fencegate.planks.oak.painted.blue.name=Blue Wooden Fence Gate
tile.fencegate.planks.oak.painted.blue.desc=A wooden fence gate, stained blue.
tile.fencegate.planks.oak.painted.purple.name=Purple Wooden Fence Gate
tile.fencegate.planks.oak.painted.purple.desc=A wooden fence gate, stained purple.
tile.fencegate.planks.oak.painted.cyan.name=Cyan Wooden Fence Gate
tile.fencegate.planks.oak.painted.cyan.desc=A wooden fence gate, stained cyan.
tile.fencegate.planks.oak.painted.silver.name=Light Gray Wooden Fence Gate
tile.fencegate.planks.oak.painted.silver.desc=A wooden fence gate, stained light gray.
tile.fencegate.planks.oak.painted.gray.name=Gray Wooden Fence Gate
tile.fencegate.planks.oak.painted.gray.desc=A wooden fence gate, stained gray.
tile.fencegate.planks.oak.painted.pink.name=Pink Wooden Fence Gate
tile.fencegate.planks.oak.painted.pink.desc=A wooden fence gate, stained pink.
tile.fencegate.planks.oak.painted.lime.name=Lime Wooden Fence Gate
tile.fencegate.planks.oak.painted.lime.desc=A wooden fence gate, stained lime.
tile.fencegate.planks.oak.painted.yellow.name=Yellow Wooden Fence Gate
tile.fencegate.planks.oak.painted.yellow.desc=A wooden fence gate, stained yellow.
tile.fencegate.planks.oak.painted.lightblue.name=Light Blue Wooden Fence Gate
tile.fencegate.planks.oak.painted.lightblue.desc=A wooden fence gate, stained light blue.
tile.fencegate.planks.oak.painted.magenta.name=Magenta Wooden Fence Gate
tile.fencegate.planks.oak.painted.magenta.desc=A wooden fence gate, stained magenta.
tile.fencegate.planks.oak.painted.orange.name=Orange Wooden Fence Gate
tile.fencegate.planks.oak.painted.orange.desc=A wooden fence gate, stained orange.
tile.fencegate.planks.oak.painted.white.name=White Wooden Fence Gate
tile.fencegate.planks.oak.painted.white.desc=A wooden fence gate, stained white.

tile.bookshelf.planks.oak.name=Bookshelf
tile.bookshelf.planks.oak.desc=A repository of knowledge.

tile.wool.name=Wool
tile.wool.desc=How did you get this?!
tile.wool.black.name=Black Wool
tile.wool.black.desc=Sheep's wool, dyed black.
tile.wool.red.name=Red Wool
tile.wool.red.desc=Sheep's wool, dyed red.
tile.wool.green.name=Green Wool
tile.wool.green.desc=Sheep's wool, dyed green.
tile.wool.brown.name=Brown Wool
tile.wool.brown.desc=Sheep's wool, dyed brown.
tile.wool.blue.name=Blue Wool
tile.wool.blue.desc=Sheep's wool, dyed blue.
tile.wool.purple.name=Purple Wool
tile.wool.purple.desc=Sheep's wool, dyed purple.
tile.wool.cyan.name=Cyan Wool
tile.wool.cyan.desc=Sheep's wool, dyed cyan.
tile.wool.silver.name=Light Gray Wool
tile.wool.silver.desc=Sheep's wool, dyed light gray.
tile.wool.gray.name=Gray Wool
tile.wool.gray.desc=Sheep's wool, dyed gray.
tile.wool.pink.name=Pink Wool
tile.wool.pink.desc=Sheep's wool, dyed pink.
tile.wool.lime.name=Lime Wool
tile.wool.lime.desc=Sheep's wool, dyed lime.
tile.wool.yellow.name=Yellow Wool
tile.wool.yellow.desc=Sheep's wool, dyed yellow.
tile.wool.lightblue.name=Light Blue Wool
tile.wool.lightblue.desc=Sheep's wool, dyed light blue.
tile.wool.magenta.name=Magenta Wool
tile.wool.magenta.desc=Sheep's wool, dyed magenta.
tile.wool.orange.name=Orange Wool
tile.wool.orange.desc=Sheep's wool, dyed orange.
tile.wool.white.name=White Wool
tile.wool.white.desc=Sheep's wool, dyed white.

tile.brick.clay.name=Clay Bricks
tile.brick.clay.desc=Stacked bricks of baked clay.
tile.brick.stone.polished.name=Polished Stone Bricks
tile.brick.stone.polished.desc=Stacked bricks of polished stone.
tile.brick.stone.polished.mossy.name=Mossy Polished Stone Bricks
tile.brick.stone.polished.mossy.desc=Stacked bricks of polished stone with added greenery.
tile.brick.sandstone.name=Sandstone Bricks
tile.brick.sandstone.desc=Stacked bricks of sandstone.
tile.brick.gold.name=Gold Bricks
tile.brick.gold.desc=Stacked bricks of gold.
tile.brick.lapis.name=Lapis Lazuli Bricks
tile.brick.lapis.desc=Stacked bricks of lapis lazuli.
tile.brick.basalt.name=Basalt Bricks
tile.brick.basalt.desc=Stacked bricks of basalt.
tile.brick.limestone.name=Limestone Bricks
tile.brick.limestone.desc=Stacked bricks of limestone.
tile.brick.granite.name=Granite Bricks
tile.brick.granite.desc=Stacked bricks of granite.
tile.brick.marble.name=Marble Bricks
tile.brick.marble.desc=Stacked bricks of marble.
tile.brick.slate.name=Slate Bricks
tile.brick.slate.desc=Stacked bricks of slate.
tile.brick.stone.name=Stone Bricks
tile.brick.stone.desc=Stacked bricks of stone.
tile.brick.permafrost.name=Permafrost Bricks
tile.brick.permafrost.desc=Stacked bricks of permafrost.
tile.brick.iron.name=Iron Bricks
tile.brick.iron.desc=Stacked bricks of iron.

tile.slab.planks.oak.name=Wooden Slab
tile.slab.planks.oak.desc=A slab of wooden planks.
tile.slab.cobble.stone.name=Cobblestone Slab
tile.slab.cobble.stone.desc=A slab of cobblestone.
tile.slab.sandstone.name=Sandstone Slab
tile.slab.sandstone.desc=A slab of sandstone.
tile.slab.brick.stone.polished.name=Polished Stone Brick Slab
tile.slab.brick.stone.polished.desc=A slab of polished stone bricks.
tile.slab.stone.carved.name=Polished Stone Slab
tile.slab.stone.carved.desc=A slab of polished stone.
tile.slab.brick.marble.name=Marble Brick Slab
tile.slab.brick.marble.desc=A slab of marble bricks.
tile.slab.brick.clay.name=Clay Brick Slab
tile.slab.brick.clay.desc=A slab of clay bricks.
tile.slab.capstone.marble.name=Marble Capstone Slab
tile.slab.capstone.marble.desc=Marble sculpted into a capstone.
tile.slab.cobble.basalt.name=Cobbled Basalt Slab
tile.slab.cobble.basalt.desc=A slab of cobbled basalt.
tile.slab.cobble.limestone.name=Cobbled Limestone Slab
tile.slab.cobble.limestone.desc=A slab of cobbled limestone.
tile.slab.cobble.granite.name=Cobbled Granite Slab
tile.slab.cobble.granite.desc=A slab of cobbled granite.
tile.slab.brick.basalt.name=Basalt Brick Slab
tile.slab.brick.basalt.desc=A slab of basalt bricks.
tile.slab.brick.limestone.name=Limestone Brick Slab
tile.slab.brick.limestone.desc=A slab of limestone bricks.
tile.slab.brick.granite.name=Granite Brick Slab
tile.slab.brick.granite.desc=A slab of granite bricks.
tile.slab.brick.slate.name=Slate Brick Slab
tile.slab.brick.slate.desc=A slab of slate bricks.
tile.slab.brick.stone.name=Stone Brick Slab
tile.slab.brick.stone.desc=A slab of stone bricks.
tile.slab.granite.carved.name=Polished Granite Slab
tile.slab.granite.carved.desc=A slab of polished granite.
tile.slab.limestone.carved.name=Polished Limestone Slab
tile.slab.limestone.carved.desc=A slab of polished limestone.
tile.slab.basalt.carved.name=Polished Basalt Slab
tile.slab.basalt.carved.desc=A slab of polished basalt.
tile.slab.permafrost.carved.name=Polished Permafrost Slab
tile.slab.permafrost.carved.desc=A slab of polished permafrost.

tile.slab.planks.oak.painted.name=Mystery Wooden Slab
tile.slab.planks.oak.painted.desc=How did you get this?!
tile.slab.planks.oak.painted.black.name=Black Wooden Slab
tile.slab.planks.oak.painted.black.desc=A slab of wooden planks, stained black.
tile.slab.planks.oak.painted.red.name=Red Wooden Slab
tile.slab.planks.oak.painted.red.desc=A slab of wooden planks, stained red.
tile.slab.planks.oak.painted.green.name=Green Wooden Slab
tile.slab.planks.oak.painted.green.desc=A slab of wooden planks, stained green.
tile.slab.planks.oak.painted.brown.name=Brown Wooden Slab
tile.slab.planks.oak.painted.brown.desc=A slab of wooden planks, stained brown.
tile.slab.planks.oak.painted.blue.name=Blue Wooden Slab
tile.slab.planks.oak.painted.blue.desc=A slab of wooden planks, stained blue.
tile.slab.planks.oak.painted.purple.name=Purple Wooden Slab
tile.slab.planks.oak.painted.purple.desc=A slab of wooden planks, stained purple.
tile.slab.planks.oak.painted.cyan.name=Cyan Wooden Slab
tile.slab.planks.oak.painted.cyan.desc=A slab of wooden planks, stained cyan.
tile.slab.planks.oak.painted.silver.name=Light Gray Wooden Slab
tile.slab.planks.oak.painted.silver.desc=A slab of wooden planks, stained light gray.
tile.slab.planks.oak.painted.gray.name=Gray Wooden Slab
tile.slab.planks.oak.painted.gray.desc=A slab of wooden planks, stained gray.
tile.slab.planks.oak.painted.pink.name=Pink Wooden Slab
tile.slab.planks.oak.painted.pink.desc=A slab of wooden planks, stained pink.
tile.slab.planks.oak.painted.lime.name=Lime Wooden Slab
tile.slab.planks.oak.painted.lime.desc=A slab of wooden planks, stained lime.
tile.slab.planks.oak.painted.yellow.name=Yellow Wooden Slab
tile.slab.planks.oak.painted.yellow.desc=A slab of wooden planks, stained yellow.
tile.slab.planks.oak.painted.lightblue.name=Light Blue Wooden Slab
tile.slab.planks.oak.painted.lightblue.desc=A slab of wooden planks, stained light blue.
tile.slab.planks.oak.painted.magenta.name=Magenta Wooden Slab
tile.slab.planks.oak.painted.magenta.desc=A slab of wooden planks, stained magenta.
tile.slab.planks.oak.painted.orange.name=Orange Wooden Slab
tile.slab.planks.oak.painted.orange.desc=A slab of wooden planks, stained orange.
tile.slab.planks.oak.painted.white.name=White Wooden Slab
tile.slab.planks.oak.painted.white.desc=A slab of wooden planks, stained white.
tile.slab.cobble.permafrost.name=Cobbled Permafrost Slab
tile.slab.cobble.permafrost.desc=A slab of cobbled permafrost.
tile.slab.brick.sandstone.name=Sandstone Brick Slab
tile.slab.brick.sandstone.desc=A slab of sandstone bricks.
tile.slab.brick.permafrost.name=Permafrost Brick Slab
tile.slab.brick.permafrost.desc=A slab of permafrost bricks.

tile.stairs.planks.oak.name=Wooden Stairs
tile.stairs.planks.oak.desc=Wooden block used for rapid vertical movement.
tile.stairs.cobble.stone.name=Cobblestone Stairs
tile.stairs.cobble.stone.desc=Cobblestone block used for rapid vertical movement.
tile.stairs.brick.stone.polished.name=Polished Stone Brick Stairs
tile.stairs.brick.stone.polished.desc=Polished stone brick block used for rapid vertical movement.
tile.stairs.brick.marble.name=Marble Brick Stairs
tile.stairs.brick.marble.desc=Marble brick block used for rapid vertical movement.
tile.stairs.cobble.basalt.name=Cobbled Basalt Stairs
tile.stairs.cobble.basalt.desc=Cobbled basalt block used for rapid vertical movement.
tile.stairs.cobble.limestone.name=Cobbled Limestone Stairs
tile.stairs.cobble.limestone.desc=Cobbled limestone block used for rapid vertical movement.
tile.stairs.cobble.granite.name=Cobbled Granite Stairs
tile.stairs.cobble.granite.desc=Cobbled granite block used for rapid vertical movement.
tile.stairs.brick.basalt.name=Basalt Brick Stairs
tile.stairs.brick.basalt.desc=Basalt brick block used for rapid vertical movement.
tile.stairs.brick.limestone.name=Limestone Brick Stairs
tile.stairs.brick.limestone.desc=Limestone brick block used for rapid vertical movement.
tile.stairs.brick.granite.name=Granite Brick Stairs
tile.stairs.brick.granite.desc=Granite brick block used for rapid vertical movement.
tile.stairs.brick.clay.name=Clay Brick Stairs
tile.stairs.brick.clay.desc=Clay brick block used for rapid vertical movement.
tile.stairs.brick.slate.name=Slate Brick Stairs
tile.stairs.brick.slate.desc=Slate brick block used for rapid vertical movement.
tile.stairs.brick.stone.name=Stone Brick Stairs
tile.stairs.brick.stone.desc=Stone brick block used for rapid vertical movement.
tile.stairs.sandstone.name=Sandstone Stairs
tile.stairs.sandstone.desc=Sandstone block used for rapid vertical movement.
tile.stairs.cobble.permafrost.name=Cobbled Permafrost Stairs
tile.stairs.cobble.permafrost.desc=Cobbled permafrost block used for rapid vertical movement.
tile.stairs.brick.sandstone.name=Sandstone Brick Stairs
tile.stairs.brick.sandstone.desc=Sandstone brick block used for rapid vertical movement.
tile.stairs.brick.permafrost.name=Permafrost Brick Stairs
tile.stairs.brick.permafrost.desc=Permafrost brick block used for rapid vertical movement.

tile.stairs.planks.oak.painted.name=Mystery Wooden Stairs
tile.stairs.planks.oak.painted.desc=How did you get this?!
tile.stairs.planks.oak.painted.black.name=Black Wooden Stairs
tile.stairs.planks.oak.painted.black.desc=Wooden steps, stained black.
tile.stairs.planks.oak.painted.red.name=Red Wooden Stairs
tile.stairs.planks.oak.painted.red.desc=Wooden steps, stained red.
tile.stairs.planks.oak.painted.green.name=Green Wooden Stairs
tile.stairs.planks.oak.painted.green.desc=Wooden steps, stained green.
tile.stairs.planks.oak.painted.brown.name=Brown Wooden Stairs
tile.stairs.planks.oak.painted.brown.desc=Wooden steps, stained brown.
tile.stairs.planks.oak.painted.blue.name=Blue Wooden Stairs
tile.stairs.planks.oak.painted.blue.desc=Wooden steps, stained blue.
tile.stairs.planks.oak.painted.purple.name=Purple Wooden Stairs
tile.stairs.planks.oak.painted.purple.desc=Wooden steps, stained purple.
tile.stairs.planks.oak.painted.cyan.name=Cyan Wooden Stairs
tile.stairs.planks.oak.painted.cyan.desc=Wooden steps, stained cyan.
tile.stairs.planks.oak.painted.silver.name=Light Gray Wooden Stairs
tile.stairs.planks.oak.painted.silver.desc=Wooden steps, stained light gray.
tile.stairs.planks.oak.painted.gray.name=Gray Wooden Stairs
tile.stairs.planks.oak.painted.gray.desc=Wooden steps, stained gray.
tile.stairs.planks.oak.painted.pink.name=Pink Wooden Stairs
tile.stairs.planks.oak.painted.pink.desc=Wooden steps, stained pink.
tile.stairs.planks.oak.painted.lime.name=Lime Wooden Stairs
tile.stairs.planks.oak.painted.lime.desc=Wooden steps, stained lime.
tile.stairs.planks.oak.painted.yellow.name=Yellow Wooden Stairs
tile.stairs.planks.oak.painted.yellow.desc=Wooden steps, stained yellow.
tile.stairs.planks.oak.painted.lightblue.name=Light Blue Wooden Stairs
tile.stairs.planks.oak.painted.lightblue.desc=Wooden steps, stained light blue.
tile.stairs.planks.oak.painted.magenta.name=Magenta Wooden Stairs
tile.stairs.planks.oak.painted.magenta.desc=Wooden steps, stained magenta.
tile.stairs.planks.oak.painted.orange.name=Orange Wooden Stairs
tile.stairs.planks.oak.painted.orange.desc=Wooden steps, stained orange.
tile.stairs.planks.oak.painted.white.name=White Wooden Stairs
tile.stairs.planks.oak.painted.white.desc=Wooden steps, stained white.

tile.obsidian.name=Obsidian
tile.obsidian.desc=Rapidly cooled volcanic rock.

tile.glass.name=Glass
tile.glass.desc=Sand heated until it becomes translucent.
tile.glass.tinted.name=Tinted Glass
tile.glass.tinted.desc=Darkened glass that blocks light.

tile.grass.name=Grass
tile.grass.desc=Crisp, crunchy grass.
tile.grass.retro.name=Retro Grass
tile.grass.retro.desc=Crisp, crunchy grass. Smells old.
tile.grass.scorched.name=Scorched Grass
tile.grass.scorched.desc=Grass that has baked in the sun.

tile.path.dirt.name=Dirt Path
tile.path.dirt.desc=Dirt worn down by frequent travelling.

tile.dirt.name=Dirt
tile.dirt.desc=Crumbly brown dirt.
tile.dirt.scorched.name=Scorched Dirt
tile.dirt.scorched.desc=Dirt that has baked in the sun.
tile.dirt.scorched.rich.name=Rich Scorched Dirt
tile.dirt.scorched.rich.desc=Dirt that has baked in the sun, searing in minerals.

tile.mud.name=Mud
tile.mud.desc=Mud sodden to its core.
tile.mud.baked.name=Baked Mud
tile.mud.baked.desc=Mud that's been dried out and cracked.

tile.sponge.dry.name=Sponge
tile.sponge.dry.desc=A dry sponge, good for soaking up water.
tile.sponge.wet.name=Wet Sponge
tile.sponge.wet.desc=A sponge full of water.
tile.pumice.dry.name=Pumice
tile.pumice.dry.desc=A dry porous volcanic rock, good for soaking up lava.
tile.pumice.wet.name=Molten Pumice
tile.pumice.wet.desc=Rock filled with lava.

tile.moss.stone.name=Mossy Stone
tile.moss.stone.desc=Moss covering a block of stone.
tile.moss.basalt.name=Mossy Basalt
tile.moss.basalt.desc=Moss covering a block of basalt.
tile.moss.limestone.name=Mossy Limestone
tile.moss.limestone.desc=Moss covering a block of limestone.
tile.moss.granite.name=Mossy Granite
tile.moss.granite.desc=Moss covering a block of granite.

tile.sand.name=Sand
tile.sand.desc=Gets everywhere.
tile.gravel.name=Gravel
tile.gravel.desc=A loose collection of pebbles.

tile.bedrock.name=Bedrock
tile.bedrock.desc=The toughest substance known to man.

tile.fluid.water.flowing.name=Flowing Water
tile.fluid.water.flowing.desc=Water that flows when placed.
tile.fluid.water.still.name=Still Water
tile.fluid.water.still.desc=Water that does not flow when placed.
tile.fluid.lava.flowing.name=Flowing Lava
tile.fluid.lava.flowing.desc=Lava that flows when placed.
tile.fluid.lava.still.name=Still Lava
tile.fluid.lava.still.desc=Lava that does not flow when placed.

tile.log.oak.name=Oak Log
tile.log.oak.desc=A log from an oak tree.
tile.log.pine.name=Pine Log
tile.log.pine.desc=A log from a pine tree.
tile.log.birch.name=Birch Log
tile.log.birch.desc=A log from a birch tree.
tile.log.cherry.name=Cherry Log
tile.log.cherry.desc=A log from a cherry tree.
tile.log.eucalyptus.name=Eucalyptus Log
tile.log.eucalyptus.desc=A log from a eucalyptus tree.
tile.log.oak.mossy.name=Mossy Oak Log
tile.log.oak.mossy.desc=A log from a mossy oak tree.
tile.log.thorn.name=Thorn Log
tile.log.thorn.desc=A log from a thorn tree.
tile.log.palm.name=Palm Log
tile.log.palm.desc=A log from a palm tree.

tile.leaves.oak.name=Oak Leaves
tile.leaves.oak.desc=Leaves from an oak tree.
tile.leaves.pine.name=Pine Leaves
tile.leaves.pine.desc=Leaves from a pine tree.
tile.leaves.birch.name=Birch Leaves
tile.leaves.birch.desc=Leaves from a birch tree.
tile.leaves.cherry.name=Cherry Leaves
tile.leaves.cherry.desc=Leaves from a cherry tree.
tile.leaves.eucalyptus.name=Eucalyptus Leaves
tile.leaves.eucalyptus.desc=Leaves from a eucalyptus tree.
tile.leaves.oak.retro.name=Retro Leaves
tile.leaves.oak.retro.desc=Leaves from long ago.
tile.leaves.shrub.name=Shrub Leaves
tile.leaves.shrub.desc=Leaves from a shrub.
tile.leaves.cherry.flowering.name=Flowering Cherry Leaves
tile.leaves.cherry.flowering.desc=Leaves from a cherry tree that are budding with fruit.
tile.leaves.cacao.name=Cacao Leaves
tile.leaves.cacao.desc=Leaves from a cacao tree.
tile.leaves.thorn.name=Thorn Leaves
tile.leaves.thorn.desc=Leaves from a thorn tree.
tile.leaves.palm.name=Palm Leaves
tile.leaves.palm.desc=Leaves from a palm tree.

tile.sapling.oak.name=Oak Sapling
tile.sapling.oak.desc=Plant to grow an oak tree.
tile.sapling.pine.name=Pine Sapling
tile.sapling.pine.desc=Plant to grow a pine tree.
tile.sapling.birch.name=Birch Sapling
tile.sapling.birch.desc=Plant to grow a birch tree.
tile.sapling.cherry.name=Cherry Sapling
tile.sapling.cherry.desc=Plant to grow a cherry tree.
tile.sapling.eucalyptus.name=Eucalyptus Sapling
tile.sapling.eucalyptus.desc=Plant to grow a eucalyptus tree.
tile.sapling.oak.retro.name=Retro Oak Sapling
tile.sapling.oak.retro.desc=Plant to grow a tree from long ago.
tile.sapling.shrub.name=Shrub Sapling
tile.sapling.shrub.desc=Plant to grow a shrub.
tile.sapling.cacao.name=Cacao Sapling
tile.sapling.cacao.desc=Plant to grow a cacao tree.
tile.sapling.thorn.name=Thorn Sapling
tile.sapling.thorn.desc=Plant to grow a thorn tree.
tile.sapling.palm.name=Palm Sapling
tile.sapling.palm.desc=Plant to grow a palm tree.

tile.tallgrass.name=Tall Grass
tile.tallgrass.desc=Lush, growing grass.
tile.tallgrass.fern.name=Fern
tile.tallgrass.fern.desc=A fern plant.
tile.deadbush.name=Dead Bush
tile.deadbush.desc=A dried and withered plant.
tile.spinifex.name=Spinifex
tile.spinifex.desc=A spindly, thin grass from dry regions.
tile.algae.name=Algae
tile.algae.desc=Gooey vegetation that floats on the water's surface.

tile.flower.yellow.name=Dandelion
tile.flower.yellow.desc=A beautiful yellow flower.
tile.flower.red.name=Rose
tile.flower.red.desc=A beautiful red flower.
tile.flower.purple.name=Heather
tile.flower.purple.desc=Sprigs of purple petals. Brings good luck.
tile.flower.lightblue.name=Bluebell
tile.flower.lightblue.desc=A sad-looking blue flower.
tile.flower.pink.name=Orchid
tile.flower.pink.desc=A beautiful pink flower.
tile.flower.orange.name=Marigold
tile.flower.orange.desc=A beautiful orange flower.

tile.mushroom.red.name=Red Mushroom
tile.mushroom.red.desc=A tasty red mushroom. Good for stew.
tile.mushroom.brown.name=Brown Mushroom
tile.mushroom.brown.desc=A tasty brown mushroom. Good for stew.

tile.ore.coal.stone.name=Stone Coal Ore
tile.ore.coal.stone.desc=A chunk of coal embedded in stone.
tile.ore.coal.basalt.name=Basalt Coal Ore
tile.ore.coal.basalt.desc=A chunk of coal embedded in basalt.
tile.ore.coal.limestone.name=Limestone Coal Ore
tile.ore.coal.limestone.desc=A chunk of coal embedded in limestone.
tile.ore.coal.granite.name=Granite Coal Ore
tile.ore.coal.granite.desc=A chunk of coal embedded in granite.
tile.ore.coal.permafrost.name=Permafrost Coal Ore
tile.ore.coal.permafrost.desc=A chunk of coal embedded in permafrost.

tile.ore.iron.stone.name=Stone Iron Ore
tile.ore.iron.stone.desc=Iron nuggets embedded in stone.
tile.ore.iron.basalt.name=Basalt Iron Ore
tile.ore.iron.basalt.desc=Iron nuggets embedded in basalt.
tile.ore.iron.limestone.name=Limestone Iron Ore
tile.ore.iron.limestone.desc=Iron nuggets embedded in limestone.
tile.ore.iron.granite.name=Granite Iron Ore
tile.ore.iron.granite.desc=Iron nuggets embedded in granite.
tile.ore.iron.permafrost.name=Permafrost Iron Ore
tile.ore.iron.permafrost.desc=Iron nuggets embedded in permafrost.

tile.ore.gold.stone.name=Stone Gold Ore
tile.ore.gold.stone.desc=Gold nuggets embedded in stone.
tile.ore.gold.basalt.name=Basalt Gold Ore
tile.ore.gold.basalt.desc=Gold nuggets embedded in basalt.
tile.ore.gold.limestone.name=Limestone Gold Ore
tile.ore.gold.limestone.desc=Gold nuggets embedded in limestone.
tile.ore.gold.granite.name=Granite Gold Ore
tile.ore.gold.granite.desc=Gold nuggets embedded in granite.
tile.ore.gold.permafrost.name=Permafrost Gold Ore
tile.ore.gold.permafrost.desc=Gold nuggets embedded in permafrost.

tile.ore.lapis.stone.name=Stone Lapis Lazuli Ore
tile.ore.lapis.stone.desc=Chunks of lapis lazuli embedded in stone.
tile.ore.lapis.basalt.name=Basalt Lapis Lazuli Ore
tile.ore.lapis.basalt.desc=Chunks of lapis lazuli embedded in basalt.
tile.ore.lapis.limestone.name=Limestone Lapis Lazuli Ore
tile.ore.lapis.limestone.desc=Chunks of lapis lazuli embedded in limestone.
tile.ore.lapis.granite.name=Granite Lapis Lazuli Ore
tile.ore.lapis.granite.desc=Chunks of lapis lazuli embedded in granite.
tile.ore.lapis.permafrost.name=Permafrost Lapis Lazuli Ore
tile.ore.lapis.permafrost.desc=Chunks of lapis lazuli embedded in permafrost.

tile.ore.redstone.stone.name=Stone Redstone Ore
tile.ore.redstone.stone.desc=Red dust embedded in stone.
tile.ore.redstone.basalt.name=Basalt Redstone Ore
tile.ore.redstone.basalt.desc=Red dust embedded in basalt.
tile.ore.redstone.limestone.name=Limestone Redstone Ore
tile.ore.redstone.limestone.desc=Red dust embedded in limestone.
tile.ore.redstone.granite.name=Granite Redstone Ore
tile.ore.redstone.granite.desc=Red dust embedded in granite.
tile.ore.redstone.permafrost.name=Permafrost Redstone Ore
tile.ore.redstone.permafrost.desc=Red dust embedded in permafrost.
tile.ore.redstone.glowing.stone.name=Glowing Stone Redstone Ore
tile.ore.redstone.glowing.stone.desc=Red dust embedded in stone. Emits a faint light.
tile.ore.redstone.glowing.basalt.name=Glowing Basalt Redstone Ore
tile.ore.redstone.glowing.basalt.desc=Red dust embedded in basalt. Emits a faint light.
tile.ore.redstone.glowing.limestone.name=Glowing Limestone Redstone Ore
tile.ore.redstone.glowing.limestone.desc=Red dust embedded in limestone. Emits a faint light.
tile.ore.redstone.glowing.granite.name=Glowing Granite Redstone Ore
tile.ore.redstone.glowing.granite.desc=Red dust embedded in granite. Emits a faint light.
tile.ore.redstone.glowing.permafrost.name=Glowing Permafrost Redstone Ore
tile.ore.redstone.glowing.permafrost.desc=Red dust embedded in permafrost. Emits a faint light.

tile.ore.diamond.stone.name=Stone Diamond Ore
tile.ore.diamond.stone.desc=A chunk of diamond embedded in stone.
tile.ore.diamond.basalt.name=Basalt Diamond Ore
tile.ore.diamond.basalt.desc=A chunk of diamond embedded in basalt.
tile.ore.diamond.limestone.name=Limestone Diamond Ore
tile.ore.diamond.limestone.desc=A chunk of diamond embedded in limestone.
tile.ore.diamond.granite.name=Granite Diamond Ore
tile.ore.diamond.granite.desc=A chunk of diamond embedded in granite.
tile.ore.diamond.permafrost.name=Permafrost Diamond Ore
tile.ore.diamond.permafrost.desc=A chunk of diamond embedded in permafrost.

tile.ore.nethercoal.netherrack.name=Nether Coal Ore
tile.ore.nethercoal.netherrack.desc=A lump of Nether Coal embedded in netherrack.

tile.block.coal.name=Block of Coal
tile.block.coal.desc=A solid block of coal.
tile.block.iron.name=Block of Iron
tile.block.iron.desc=A solid block of iron. Heavy!
tile.block.gold.name=Block of Gold
tile.block.gold.desc=A solid block of gold, for flaunting your bling.
tile.block.lapis.name=Block of Lapis Lazuli
tile.block.lapis.desc=A solid block of lapis lazuli.
tile.block.redstone.name=Block of Redstone
tile.block.redstone.desc=A solid block of redstone.
tile.block.diamond.name=Block of Diamond
tile.block.diamond.desc=A solid block of diamond. Well done you.
tile.block.nethercoal.name=Block of Nether Coal
tile.block.nethercoal.desc=A solid block of Nether Coal.
tile.block.steel.name=Block of Steel
tile.block.steel.desc=A solid block of steel.
tile.block.quartz.name=Block of Quartz
tile.block.quartz.desc=A solid block of quartz.
tile.block.olivine.name=Block of Olivine
tile.block.olivine.desc=A solid block of olivine.
tile.block.charcoal.name=Block of Charcoal
tile.block.charcoal.desc=A solid block of charcoal.

tile.wire.redstone.name=Redstone Wire
tile.wire.redstone.desc=A strand of redstone dust laid on the ground.

tile.torch.redstone.idle.name=Redstone Torch
tile.torch.redstone.idle.desc=Emits a constant redstone signal.
tile.torch.redstone.active.name=Redstone Torch
tile.torch.redstone.active.desc=Emits a constant redstone signal.

tile.button.stone.name=Stone Button
tile.button.stone.desc=Emits a brief redstone signal when pressed.

tile.lever.cobble.stone.name=Cobblestone Lever
tile.lever.cobble.stone.desc=Allows turning a redstone signal on or off.

tile.pressureplate.stone.name=Stone Pressure Plate
tile.pressureplate.stone.desc=Emits a redstone signal when living creatures step on it.
tile.pressureplate.planks.oak.name=Wooden Pressure Plate
tile.pressureplate.planks.oak.desc=Emits a redstone signal when anything steps on it.
tile.pressureplate.cobble.stone.name=Cobblestone Pressure Plate
tile.pressureplate.cobble.stone.desc=Emits a redstone signal when players step on it.

tile.motionsensor.idle.name=Motion Sensor
tile.motionsensor.idle.desc=Emits a redstone signal when something moves past it.
tile.motionsensor.active.name=Active Motion Sensor
tile.motionsensor.active.desc=Emits a redstone signal when something moves past it.

tile.repeater.idle.name=Redstone Repeater
tile.repeater.idle.desc=Repeats redstone signals over a distance.
tile.repeater.active.name=Redstone Repeater
tile.repeater.active.desc=Repeats redstone signals over a distance.

tile.piston.base.name=Piston
tile.piston.base.desc=Pushes blocks but does not pull them.
tile.piston.base.sticky.name=Sticky Piston
tile.piston.base.sticky.desc=Pushes and pulls blocks.
tile.piston.head.name=Piston Head
tile.piston.head.desc=The pushy part of the piston.
tile.piston.moving.name=Piston Mover
tile.piston.moving.desc=The invisible moving part of the piston.

tile.noteblock.name=Note Block
tile.noteblock.desc=Plays a musical note when powered.

tile.rail.name=Rail
tile.rail.desc=For rapid horizontal movement via minecart.
tile.rail.powered.name=Powered Rail
tile.rail.powered.desc=Makes minecarts go faster when powered.
tile.rail.detector.name=Detector Rail
tile.rail.detector.desc=Emits a redstone signal when a minecart crosses it.

tile.spikes.name=Spike Trap
tile.spikes.desc=Deactivates when powered. Technically a war crime.

tile.dispenser.cobble.stone.name=Dispenser
tile.dispenser.cobble.stone.desc=Fires items out of the hole in the front.

tile.trapdoor.planks.oak.name=Oak Trapdoor
tile.trapdoor.planks.oak.desc=Like a door, but flat.
tile.trapdoor.iron.name=Iron Trapdoor
tile.trapdoor.iron.desc=Like a door, but flat and made of iron.
tile.trapdoor.glass.name=Glass Trapdoor
tile.trapdoor.glass.desc=Useless at its job.

tile.tnt.name=TNT
tile.tnt.desc=Goes off with a bang.

tile.door.planks.oak.bottom.name=Bottom Wooden Door
tile.door.planks.oak.bottom.desc=/give Honeydew 64 46
tile.door.planks.oak.top.name=Top Wooden Door
tile.door.planks.oak.top.desc=Oh, wait, that's not TNT, that's half a door.
tile.door.iron.bottom.name=Bottom Iron Door
tile.door.iron.bottom.desc=Not much good on its own.
tile.door.iron.top.name=Top Iron Door
tile.door.iron.top.desc=Could use a friend.

tile.mesh.name=Mesh Block
tile.mesh.desc=Allows items to pass through but nothing else.
tile.mesh.gold.name=Gold Mesh Block
tile.mesh.gold.desc=Allows a specified item to pass through but nothing else.

tile.bed.name=Bed
tile.bed.desc=Bed!
tile.seat.name=Seat
tile.seat.desc=Sit down and relax.

tile.cobweb.name=Cobweb
tile.cobweb.desc=Sticky silky strands woven by spiders.

tile.fire.name=Fire
tile.fire.desc=Ouch, fire hot!
tile.brazier.inactive.name=Brazier
tile.brazier.inactive.desc=A safe place to keep a fire.
tile.brazier.active.name=Lit Brazier
tile.brazier.active.desc=A safe place to keep a fire.

tile.mobspawner.name=Mob Spawner
tile.mobspawner.desc=A cage filled with horror.
tile.mobspawner.deactivated.name=Deactivated Mob Spawner
tile.mobspawner.deactivated.desc=A cage no longer filled with horror.

tile.workbench.name=Workbench
tile.workbench.desc=For bigger projects.

tile.furnace.stone.idle.name=Furnace
tile.furnace.stone.idle.desc=For melting, heating, and cooking blocks and items.
tile.furnace.stone.active.name=Lit Furnace
tile.furnace.stone.active.desc=For melting, heating, and cooking blocks and items.
tile.furnace.blast.idle.name=Blast Furnace
tile.furnace.blast.idle.desc=Burns hotter than a normal furnace.
tile.furnace.blast.active.name=Lit Blast Furnace
tile.furnace.blast.active.desc=Burns hotter than a normal furnace.

tile.trommel.idle.name=Trommel
tile.trommel.idle.desc=A machine that separates dirt from other useful items.
tile.trommel.active.name=Lit Trommel
tile.trommel.active.desc=A machine that separates dirt from other useful items.

tile.chest.planks.oak.name=Wooden Chest
tile.chest.planks.oak.desc=A place to store your items.
tile.chest.planks.oak.painted.name=Mystery Wooden Chest
tile.chest.planks.oak.painted.desc=How did you get this?!
tile.chest.planks.oak.painted.black.name=Black Wooden Chest
tile.chest.planks.oak.painted.black.desc=A place to store your items.
tile.chest.planks.oak.painted.red.name=Red Wooden Chest
tile.chest.planks.oak.painted.red.desc=A place to store your items.
tile.chest.planks.oak.painted.green.name=Green Wooden Chest
tile.chest.planks.oak.painted.green.desc=A place to store your items.
tile.chest.planks.oak.painted.brown.name=Brown Wooden Chest
tile.chest.planks.oak.painted.brown.desc=A place to store your items.
tile.chest.planks.oak.painted.blue.name=Blue Wooden Chest
tile.chest.planks.oak.painted.blue.desc=A place to store your items.
tile.chest.planks.oak.painted.purple.name=Purple Wooden Chest
tile.chest.planks.oak.painted.purple.desc=A place to store your items.
tile.chest.planks.oak.painted.cyan.name=Cyan Wooden Chest
tile.chest.planks.oak.painted.cyan.desc=A place to store your items.
tile.chest.planks.oak.painted.silver.name=Light Gray Wooden Chest
tile.chest.planks.oak.painted.silver.desc=A place to store your items.
tile.chest.planks.oak.painted.gray.name=Gray Wooden Chest
tile.chest.planks.oak.painted.gray.desc=A place to store your items.
tile.chest.planks.oak.painted.pink.name=Pink Wooden Chest
tile.chest.planks.oak.painted.pink.desc=A place to store your items.
tile.chest.planks.oak.painted.lime.name=Lime Wooden Chest
tile.chest.planks.oak.painted.lime.desc=A place to store your items.
tile.chest.planks.oak.painted.yellow.name=Yellow Wooden Chest
tile.chest.planks.oak.painted.yellow.desc=A place to store your items.
tile.chest.planks.oak.painted.lightblue.name=Light Blue Wooden Chest
tile.chest.planks.oak.painted.lightblue.desc=A place to store your items.
tile.chest.planks.oak.painted.magenta.name=Magenta Wooden Chest
tile.chest.planks.oak.painted.magenta.desc=A place to store your items.
tile.chest.planks.oak.painted.orange.name=Orange Wooden Chest
tile.chest.planks.oak.painted.orange.desc=A place to store your items.
tile.chest.planks.oak.painted.white.name=White Wooden Chest
tile.chest.planks.oak.painted.white.desc=A place to store your items.
tile.chest.legacy.name=Legacy Chest

tile.crops.wheat.name=Wheat Crops
tile.crops.wheat.desc=Wheat, plucked from the ground.
tile.crops.pumpkin.name=Pumpkin Crops
tile.crops.pumpkin.desc=A ripening pumpkin, plucked from the ground.

tile.farmland.dirt.name=Farmland
tile.farmland.dirt.desc=Tilled soil for growing crops.

tile.sign.post.planks.oak.name=Oak Signpost
tile.sign.post.planks.oak.desc=A free-standing oak sign.
tile.sign.wall.planks.oak.name=Oak Wall Sign
tile.sign.wall.planks.oak.desc=An oak sign placed on a wall.

tile.layer.snow.name=Snow Layer
tile.layer.snow.desc=A flat layer of snow.
tile.layer.leaves.oak.name=Leaf Pile
tile.layer.leaves.oak.desc=A pile of leaves.
tile.layer.slate.name=Slate Layer
tile.layer.slate.desc=A flat sheet of slate.

tile.ice.name=Ice
tile.ice.desc=Slippery frozen water.
tile.ice.perma.name=Perma-Ice
tile.ice.perma.desc=Ice imbued with the essence of stone.

tile.block.snow.name=Block of Snow
tile.block.snow.desc=Lots of snow compacted into a block.

tile.cactus.name=Cactus
tile.cactus.desc=A spiky plant that grows in the desert.

tile.block.clay.name=Block of Clay
tile.block.clay.desc=A block of compacted clay.

tile.sugarcane.name=Sugarcane
tile.sugarcane.desc=Not as sweet as you.

tile.block.sugarcane.name=Block of Sugarcane
tile.block.sugarcane.desc=One very big sugar cube.
tile.block.sugarcane.baked.name=Baked Block of Sugarcane
tile.block.sugarcane.baked.desc=Smells absolutely delicious.

tile.jukebox.name=Jukebox
tile.jukebox.desc=Plays your favourite tunes, assuming you have the right record.

tile.pumpkin.name=Pumpkin
tile.pumpkin.desc=An orange squash that grows in the wild.
tile.pumpkin.carved.idle.name=Carved Pumpkin
tile.pumpkin.carved.idle.desc=An orange squash with a spooky face.
tile.pumpkin.carved.active.name=Jack 'o' Lantern
tile.pumpkin.carved.active.desc=An orange squash with a spooky face, lit by a torch.
tile.pumpkin.redstone.name=Redstone Jack 'o' Lantern
tile.pumpkin.redstone.desc=An orange squash with a spooky face, lit by a redstone torch.

tile.cobble.netherrack.name=Cobbled Netherrack
tile.cobble.netherrack.desc=Dark red rock that burns forever.
tile.cobble.netherrack.igneous.name=Igneous Cobbled Netherrack
tile.cobble.netherrack.igneous.desc=Extreme heat has made this rock glow from inside.
tile.cobble.netherrack.mossy.name=Mossy Cobbled Netherrack
tile.cobble.netherrack.mossy.desc=Cobbled netherrack, covered in something like moss.
tile.netherrack.name=Netherrack
tile.netherrack.desc=Dark red rock, smoothed by heat and time.
tile.brick.netherrack.name=Netherrack Bricks
tile.brick.netherrack.desc=Stacked bricks of netherrack.
tile.slab.netherrack.carved.name=Polished Netherrack Slab
tile.slab.netherrack.carved.desc=A slab of polished netherrack.
tile.slab.cobble.netherrack.name=Cobbled Netherrack Slab
tile.slab.cobble.netherrack.desc=A slab of cobbled netherrack.
tile.slab.brick.netherrack.name=Netherrack Brick Slab
tile.slab.brick.netherrack.desc=A slab of netherrack bricks.
tile.stairs.cobble.netherrack.name=Cobbled Netherrack Stairs
tile.stairs.cobble.netherrack.desc=Cobbled netherrack block used for rapid vertical movement.
tile.stairs.brick.netherrack.name=Netherrack Brick Stairs
tile.stairs.brick.netherrack.desc=Netherrack brick block used for rapid vertical movement.

tile.soulsand.name=Soul Sand
tile.soulsand.desc=Squishy brown sand that's tough to walk through.

tile.glowstone.name=Block of Glowstone
tile.glowstone.desc=Constantly emits a strong yellowish light.

tile.portal.nether.name=Nether Portal
tile.portal.nether.desc=A portal to the Nether.
tile.portal.paradise.name=Paradise Portal
tile.portal.paradise.desc=A portal to Paradise.

tile.cake.name=Cake
tile.cake.desc=I just can't cake it any more.
tile.pumpkin_pie.name=Pumpkin Pie
tile.pumpkin_pie.desc=I don't wanna pie!

tile.lamp.idle.name=Lamp
tile.lamp.idle.desc=How did you get this?!
tile.lamp.idle.black.name=Black Lamp
tile.lamp.idle.black.desc=A redstone lamp that can emit light. Tinted black.
tile.lamp.idle.red.name=Red Lamp
tile.lamp.idle.red.desc=A redstone lamp that can emit light. Tinted red.
tile.lamp.idle.green.name=Green Lamp
tile.lamp.idle.green.desc=A redstone lamp that can emit light. Tinted green.
tile.lamp.idle.brown.name=Brown Lamp
tile.lamp.idle.brown.desc=A redstone lamp that can emit light. Tinted brown.
tile.lamp.idle.blue.name=Blue Lamp
tile.lamp.idle.blue.desc=A redstone lamp that can emit light. Tinted blue.
tile.lamp.idle.purple.name=Purple Lamp
tile.lamp.idle.purple.desc=A redstone lamp that can emit light. Tinted purple.
tile.lamp.idle.cyan.name=Cyan Lamp
tile.lamp.idle.cyan.desc=A redstone lamp that can emit light. Tinted cyan.
tile.lamp.idle.silver.name=Light Gray Lamp
tile.lamp.idle.silver.desc=A redstone lamp that can emit light. Tinted light gray.
tile.lamp.idle.gray.name=Gray Lamp
tile.lamp.idle.gray.desc=A redstone lamp that can emit light. Tinted gray.
tile.lamp.idle.pink.name=Pink Lamp
tile.lamp.idle.pink.desc=A redstone lamp that can emit light. Tinted pink.
tile.lamp.idle.lime.name=Lime Lamp
tile.lamp.idle.lime.desc=A redstone lamp that can emit light. Tinted lime.
tile.lamp.idle.yellow.name=Yellow Lamp
tile.lamp.idle.yellow.desc=A redstone lamp that can emit light. Tinted yellow.
tile.lamp.idle.lightblue.name=Light Blue Lamp
tile.lamp.idle.lightblue.desc=A redstone lamp that can emit light. Tinted light blue.
tile.lamp.idle.magenta.name=Magenta Lamp
tile.lamp.idle.magenta.desc=A redstone lamp that can emit light. Tinted magenta.
tile.lamp.idle.orange.name=Orange Lamp
tile.lamp.idle.orange.desc=A redstone lamp that can emit light. Tinted orange.
tile.lamp.idle.white.name=White Lamp
tile.lamp.idle.white.desc=A redstone lamp that can emit light.

tile.lamp.active.name=Lit Lamp
tile.lamp.active.desc=How did you get this?!
tile.lamp.active.black.name=Lit Black Lamp
tile.lamp.active.black.desc=A redstone lamp that emits light. Tinted black.
tile.lamp.active.red.name=Lit Red Lamp
tile.lamp.active.red.desc=A redstone lamp that emits light. Tinted red.
tile.lamp.active.green.name=Lit Green Lamp
tile.lamp.active.green.desc=A redstone lamp that emits light. Tinted green.
tile.lamp.active.brown.name=Lit Brown Lamp
tile.lamp.active.brown.desc=A redstone lamp that emits light. Tinted brown.
tile.lamp.active.blue.name=Lit Blue Lamp
tile.lamp.active.blue.desc=A redstone lamp that emits light. Tinted blue.
tile.lamp.active.purple.name=Lit Purple Lamp
tile.lamp.active.purple.desc=A redstone lamp that emits light. Tinted purple.
tile.lamp.active.cyan.name=Lit Cyan Lamp
tile.lamp.active.cyan.desc=A redstone lamp that emits light. Tinted cyan.
tile.lamp.active.silver.name=Lit Light Gray Lamp
tile.lamp.active.silver.desc=A redstone lamp that emits light. Tinted light gray.
tile.lamp.active.gray.name=Lit Gray Lamp
tile.lamp.active.gray.desc=A redstone lamp that emits light. Tinted gray.
tile.lamp.active.pink.name=Lit Pink Lamp
tile.lamp.active.pink.desc=A redstone lamp that emits light. Tinted pink.
tile.lamp.active.lime.name=Lit Lime Lamp
tile.lamp.active.lime.desc=A redstone lamp that emits light. Tinted lime.
tile.lamp.active.yellow.name=Yellow Lamp
tile.lamp.active.yellow.desc=A redstone lamp that emits light. Tinted yellow.
tile.lamp.active.lightblue.name=Light Blue Lamp
tile.lamp.active.lightblue.desc=A redstone lamp that emits light. Tinted light blue.
tile.lamp.active.magenta.name=Magenta Lamp
tile.lamp.active.magenta.desc=A redstone lamp that emits light. Tinted magenta.
tile.lamp.active.orange.name=Orange Lamp
tile.lamp.active.orange.desc=A redstone lamp that emits light. Tinted orange.
tile.lamp.active.white.name=White Lamp
tile.lamp.active.white.desc=A redstone lamp that emits light.

tile.stone.polished.name=Polished Stone
tile.stone.polished.desc=A polished block of stone.
tile.granite.polished.name=Polished Granite
tile.granite.polished.desc=A polished block of granite.
tile.limestone.polished.name=Polished Limestone
tile.limestone.polished.desc=A polished block of limestone.
tile.basalt.polished.name=Polished Basalt
tile.basalt.polished.desc=A polished block of basalt.
tile.slate.polished.name=Polished Slate
tile.slate.polished.desc=A polished block of slate.
tile.permafrost.polished.name=Polished Permafrost
tile.permafrost.polished.desc=A polished block of permafrost.
tile.netherrack.polished.name=Polished Netherrack
tile.netherrack.polished.desc=A polished block of netherrack.

tile.candle.wax.soul.name=Soul Wax Candle
tile.candle.wax.soul.desc=A waxy brown candle that glows with an unnatural light.

tile.basket.name=Basket
tile.basket.desc=A wicker container for holding items.

tile.overlay.pebbles.name=Pebbles
tile.overlay.pebbles.desc=A cluster of pebbles.

tile.fence.chainlink.name=Chainlink Fence
tile.fence.chainlink.desc=A fence made of interconnected chain links. Can be climbed!
tile.fence.paper_wall.name=Paper Wall Fence
tile.fence.paper_wall.desc=A fence made of delicate paper. Be careful!

tile.lantern.firefly.green.name=Green Firefly Lantern
tile.lantern.firefly.green.desc=A glass jar containing a swarm of green fireflies.
tile.lantern.firefly.orange.name=Orange Firefly Lantern
tile.lantern.firefly.orange.desc=A glass jar containing a swarm of orange fireflies.
tile.lantern.firefly.blue.name=Blue Firefly Lantern
tile.lantern.firefly.blue.desc=A glass jar containing a swarm of blue fireflies.
tile.lantern.firefly.red.name=Red Firefly Lantern
tile.lantern.firefly.red.desc=A glass jar containing a swarm of red fireflies.

tile.flag.name=Flag
tile.flag.desc=A flag to mark your territory.

tile.paper_wall.name=Paper Wall
tile.paper_wall.desc=A wall made of delicate paper. Be careful!

tile.trapdoor.planks.oak.painted.name=Painted Trapdoor
tile.trapdoor.planks.oak.painted.desc=How did you get this?!
tile.trapdoor.planks.oak.painted.black.name=Black Oak Trapdoor
tile.trapdoor.planks.oak.painted.black.desc=Like a door, but flat and painted black.
tile.trapdoor.planks.oak.painted.red.name=Red Oak Trapdoor
tile.trapdoor.planks.oak.painted.red.desc=Like a door, but flat and painted red.
tile.trapdoor.planks.oak.painted.green.name=Green Oak Trapdoor
tile.trapdoor.planks.oak.painted.green.desc=Like a door, but flat and painted green.
tile.trapdoor.planks.oak.painted.brown.name=Brown Oak Trapdoor
tile.trapdoor.planks.oak.painted.brown.desc=Like a door, but flat and painted brown.
tile.trapdoor.planks.oak.painted.blue.name=Blue Oak Trapdoor
tile.trapdoor.planks.oak.painted.blue.desc=Like a door, but flat and painted blue.
tile.trapdoor.planks.oak.painted.purple.name=Purple Oak Trapdoor
tile.trapdoor.planks.oak.painted.purple.desc=Like a door, but flat and painted purple.
tile.trapdoor.planks.oak.painted.cyan.name=Cyan Oak Trapdoor
tile.trapdoor.planks.oak.painted.cyan.desc=Like a door, but flat and painted cyan.
tile.trapdoor.planks.oak.painted.silver.name=Light Gray Oak Trapdoor
tile.trapdoor.planks.oak.painted.silver.desc=Like a door, but flat and painted light gray.
tile.trapdoor.planks.oak.painted.gray.name=Gray Oak Trapdoor
tile.trapdoor.planks.oak.painted.gray.desc=Like a door, but flat and painted gray.
tile.trapdoor.planks.oak.painted.pink.name=Pink Oak Trapdoor
tile.trapdoor.planks.oak.painted.pink.desc=Like a door, but flat and painted pink.
tile.trapdoor.planks.oak.painted.lime.name=Lime Oak Trapdoor
tile.trapdoor.planks.oak.painted.lime.desc=Like a door, but flat and painted lime.
tile.trapdoor.planks.oak.painted.yellow.name=Yellow Oak Trapdoor
tile.trapdoor.planks.oak.painted.yellow.desc=Like a door, but flat and painted yellow.
tile.trapdoor.planks.oak.painted.lightblue.name=Light Blue Oak Trapdoor
tile.trapdoor.planks.oak.painted.lightblue.desc=Like a door, but flat and painted light blue.
tile.trapdoor.planks.oak.painted.magenta.name=Magenta Oak Trapdoor
tile.trapdoor.planks.oak.painted.magenta.desc=Like a door, but flat and painted magenta.
tile.trapdoor.planks.oak.painted.orange.name=Orange Oak Trapdoor
tile.trapdoor.planks.oak.painted.orange.desc=Like a door, but flat and painted orange.
tile.trapdoor.planks.oak.painted.white.name=White Oak Trapdoor
tile.trapdoor.planks.oak.painted.white.desc=Like a door, but flat and painted white.

tile.door.planks.oak.painted.bottom.name=Bottom Painted Wooden Door
tile.door.planks.oak.painted.bottom.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.black.name=Black Bottom Wooden Door
tile.door.planks.oak.painted.bottom.black.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.red.name=Red Bottom Wooden Door
tile.door.planks.oak.painted.bottom.red.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.green.name=Green Bottom Wooden Door
tile.door.planks.oak.painted.bottom.green.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.brown.name=Brown Bottom Wooden Door
tile.door.planks.oak.painted.bottom.brown.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.blue.name=Blue Bottom Wooden Door
tile.door.planks.oak.painted.bottom.blue.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.purple.name=Purple Bottom Wooden Door
tile.door.planks.oak.painted.bottom.purple.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.cyan.name=Cyan Bottom Wooden Door
tile.door.planks.oak.painted.bottom.cyan.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.silver.name=Light Gray Bottom Wooden Door
tile.door.planks.oak.painted.bottom.silver.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.gray.name=Gray Bottom Wooden Door
tile.door.planks.oak.painted.bottom.gray.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.pink.name=Pink Bottom Wooden Door
tile.door.planks.oak.painted.bottom.pink.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.lime.name=Lime Bottom Wooden Door
tile.door.planks.oak.painted.bottom.lime.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.yellow.name=Yellow Bottom Wooden Door
tile.door.planks.oak.painted.bottom.yellow.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.lightblue.name=Light Blue Bottom Wooden Door
tile.door.planks.oak.painted.bottom.lightblue.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.magenta.name=Magenta Bottom Wooden Door
tile.door.planks.oak.painted.bottom.magenta.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.orange.name=Orange Bottom Wooden Door
tile.door.planks.oak.painted.bottom.orange.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.white.name=White Bottom Wooden Door
tile.door.planks.oak.painted.bottom.white.desc=How did you get this?!

tile.door.planks.oak.painted.top.name=Top Painted Wooden Door
tile.door.planks.oak.painted.top.desc=How did you get this?!
tile.door.planks.oak.painted.top.black.name=Black Top Wooden Door
tile.door.planks.oak.painted.top.black.desc=How did you get this?!
tile.door.planks.oak.painted.top.red.name=Red Top Wooden Door
tile.door.planks.oak.painted.top.red.desc=How did you get this?!
tile.door.planks.oak.painted.top.green.name=Green Top Wooden Door
tile.door.planks.oak.painted.top.green.desc=How did you get this?!
tile.door.planks.oak.painted.top.brown.name=Brown Top Wooden Door
tile.door.planks.oak.painted.top.brown.desc=How did you get this?!
tile.door.planks.oak.painted.top.blue.name=Blue Top Wooden Door
tile.door.planks.oak.painted.top.blue.desc=How did you get this?!
tile.door.planks.oak.painted.top.purple.name=Purple Top Wooden Door
tile.door.planks.oak.painted.top.purple.desc=How did you get this?!
tile.door.planks.oak.painted.top.cyan.name=Cyan Top Wooden Door
tile.door.planks.oak.painted.top.cyan.desc=How did you get this?!
tile.door.planks.oak.painted.top.silver.name=Light Gray Top Wooden Door
tile.door.planks.oak.painted.top.silver.desc=How did you get this?!
tile.door.planks.oak.painted.top.gray.name=Gray Top Wooden Door
tile.door.planks.oak.painted.top.gray.desc=How did you get this?!
tile.door.planks.oak.painted.top.pink.name=Pink Top Wooden Door
tile.door.planks.oak.painted.top.pink.desc=How did you get this?!
tile.door.planks.oak.painted.top.lime.name=Lime Top Wooden Door
tile.door.planks.oak.painted.top.lime.desc=How did you get this?!
tile.door.planks.oak.painted.top.yellow.name=Yellow Top Wooden Door
tile.door.planks.oak.painted.top.yellow.desc=How did you get this?!
tile.door.planks.oak.painted.top.lightblue.name=Light Blue Top Wooden Door
tile.door.planks.oak.painted.top.lightblue.desc=How did you get this?!
tile.door.planks.oak.painted.top.magenta.name=Magenta Top Wooden Door
tile.door.planks.oak.painted.top.magenta.desc=How did you get this?!
tile.door.planks.oak.painted.top.orange.name=Orange Top Wooden Door
tile.door.planks.oak.painted.top.orange.desc=How did you get this?!
tile.door.planks.oak.painted.top.white.name=White Top Wooden Door
tile.door.planks.oak.painted.top.white.desc=How did you get this?!

tile.door.glass.top.name=Top Glass Door
tile.door.glass.top.desc=You shouldn't be seeing this.
tile.door.glass.bottom.name=Bottom Glass Door
tile.door.glass.bottom.desc=And that's not just because it's glass.

tile.door.steel.top.name=Top Steel Door
tile.door.steel.top.desc=Don't take this without asking.
tile.door.steel.bottom.name=Bottom Steel Door
tile.door.steel.bottom.desc=Steeler, no steeling!

tile.trapdoor.steel.name=Steel Trapdoor
tile.trapdoor.steel.desc=Like a door, but flat and made of durable steel.

tile.glass.steel.name=Reinforced Glass
tile.glass.steel.desc=Like glass, but without the fragility.

tile.rope.name=Rope
tile.rope.desc=Rope, rope, rope your boat.
\ No newline at end of file
+tile.stone.name=Stone
tile.stone.desc=A block of solid stone.
tile.basalt.name=Basalt
tile.basalt.desc=A block of solid basalt.
tile.limestone.name=Limestone
tile.limestone.desc=A block of solid limestone.
tile.granite.name=Granite
tile.granite.desc=A block of solid granite.
tile.marble.name=Marble
tile.marble.desc=A block of solid marble.
tile.slate.name=Slate
tile.slate.desc=A block of solid slate.
tile.permafrost.name=Permafrost
tile.permafrost.desc=A block of frozen stone.

tile.cobble.stone.name=Cobblestone
tile.cobble.stone.desc=Stone, smashed apart and reconstituted.
tile.cobble.stone.mossy.name=Mossy Cobblestone
tile.cobble.stone.mossy.desc=Cobblestone with added greenery.
tile.cobble.basalt.name=Cobbled Basalt
tile.cobble.basalt.desc=Basalt, smashed apart and reconstituted.
tile.cobble.limestone.name=Cobbled Limestone
tile.cobble.limestone.desc=Limestone, smashed apart and reconstituted.
tile.cobble.granite.name=Cobbled Granite
tile.cobble.granite.desc=Granite, smashed apart and reconstituted.
tile.cobble.permafrost.name=Cobbled Permafrost
tile.cobble.permafrost.desc=Permafrost, smashed apart and reconstituted.

tile.pillar.marble.name=Marble Pillar
tile.pillar.marble.desc=A block of marble engraved into a pillar.
tile.capstone.marble.name=Marble Capstone
tile.capstone.marble.desc=A pillar capstone made of solid marble.

tile.sandstone.name=Sandstone
tile.sandstone.desc=Compacted sand.

tile.stone.carved.name=Carved Stone
tile.stone.carved.desc=Polished Stone with lines hewn through the middle.
tile.granite.carved.name=Carved Granite
tile.granite.carved.desc=Polished Granite with lines hewn through the middle.
tile.limestone.carved.name=Carved Limestone
tile.limestone.carved.desc=Polished Limestone with lines hewn through the middle.
tile.basalt.carved.name=Carved Basalt
tile.basalt.carved.desc=Polished Basalt with lines hewn through the middle.
tile.permafrost.carved.name=Carved Permafrost
tile.permafrost.carved.desc=Polished Permafrost with lines hewn through the middle.
tile.netherrack.carved.name=Carved Netherrack
tile.netherrack.carved.desc=Polished Netherrack with lines hewn through the middle.

tile.planks.oak.name=Wooden Planks
tile.planks.oak.desc=Processed tree insides.
tile.planks.oak.painted.name=Mystery Planks
tile.planks.oak.painted.desc=How did you get this?!
tile.planks.oak.painted.black.name=Black Wooden Planks
tile.planks.oak.painted.black.desc=Wooden planks, stained black.
tile.planks.oak.painted.red.name=Red Wooden Planks
tile.planks.oak.painted.red.desc=Wooden planks, stained red.
tile.planks.oak.painted.green.name=Green Wooden Planks
tile.planks.oak.painted.green.desc=Wooden planks, stained green.
tile.planks.oak.painted.brown.name=Brown Wooden Planks
tile.planks.oak.painted.brown.desc=Wooden planks, stained brown.
tile.planks.oak.painted.blue.name=Blue Wooden Planks
tile.planks.oak.painted.blue.desc=Wooden planks, stained blue.
tile.planks.oak.painted.purple.name=Purple Wooden Planks
tile.planks.oak.painted.purple.desc=Wooden planks, stained purple.
tile.planks.oak.painted.cyan.name=Cyan Wooden Planks
tile.planks.oak.painted.cyan.desc=Wooden planks, stained cyan.
tile.planks.oak.painted.silver.name=Light Gray Wooden Planks
tile.planks.oak.painted.silver.desc=Wooden planks, stained light gray.
tile.planks.oak.painted.gray.name=Gray Wooden Planks
tile.planks.oak.painted.gray.desc=Wooden planks, stained gray.
tile.planks.oak.painted.pink.name=Pink Wooden Planks
tile.planks.oak.painted.pink.desc=Wooden planks, stained pink.
tile.planks.oak.painted.lime.name=Lime Wooden Planks
tile.planks.oak.painted.lime.desc=Wooden planks, stained lime.
tile.planks.oak.painted.yellow.name=Yellow Wooden Planks
tile.planks.oak.painted.yellow.desc=Wooden planks, stained yellow.
tile.planks.oak.painted.lightblue.name=Light Blue Wooden Planks
tile.planks.oak.painted.lightblue.desc=Wooden planks, stained light blue.
tile.planks.oak.painted.magenta.name=Magenta Wooden Planks
tile.planks.oak.painted.magenta.desc=Wooden planks, stained magenta.
tile.planks.oak.painted.orange.name=Orange Wooden Planks
tile.planks.oak.painted.orange.desc=Wooden planks, stained orange.
tile.planks.oak.painted.white.name=White Wooden Planks
tile.planks.oak.painted.white.desc=Wooden planks, stained white.

tile.torch.coal.name=Torch
tile.torch.coal.desc=Helps light the way.

tile.ladder.oak.name=Oak Ladder
tile.ladder.oak.desc=For very rapid vertical movement.

tile.fence.planks.oak.name=Oak Fence
tile.fence.planks.oak.desc=Too tall to jump over.

tile.fence.planks.oak.painted.name=Mystery Wooden Fence
tile.fence.planks.oak.painted.desc=How did you get this?!
tile.fence.planks.oak.painted.black.name=Black Wooden Fence
tile.fence.planks.oak.painted.black.desc=A wooden fence, stained black.
tile.fence.planks.oak.painted.red.name=Red Wooden Fence
tile.fence.planks.oak.painted.red.desc=A wooden fence, stained red.
tile.fence.planks.oak.painted.green.name=Green Wooden Fence
tile.fence.planks.oak.painted.green.desc=A wooden fence, stained green.
tile.fence.planks.oak.painted.brown.name=Brown Wooden Fence
tile.fence.planks.oak.painted.brown.desc=A wooden fence, stained brown.
tile.fence.planks.oak.painted.blue.name=Blue Wooden Fence
tile.fence.planks.oak.painted.blue.desc=A wooden fence, stained blue.
tile.fence.planks.oak.painted.purple.name=Purple Wooden Fence
tile.fence.planks.oak.painted.purple.desc=A wooden fence, stained purple.
tile.fence.planks.oak.painted.cyan.name=Cyan Wooden Fence
tile.fence.planks.oak.painted.cyan.desc=A wooden fence, stained cyan.
tile.fence.planks.oak.painted.silver.name=Light Gray Wooden Fence
tile.fence.planks.oak.painted.silver.desc=A wooden fence, stained light gray.
tile.fence.planks.oak.painted.gray.name=Gray Wooden Fence
tile.fence.planks.oak.painted.gray.desc=A wooden fence, stained gray.
tile.fence.planks.oak.painted.pink.name=Pink Wooden Fence
tile.fence.planks.oak.painted.pink.desc=A wooden fence, stained pink.
tile.fence.planks.oak.painted.lime.name=Lime Wooden Fence
tile.fence.planks.oak.painted.lime.desc=A wooden fence, stained lime.
tile.fence.planks.oak.painted.yellow.name=Yellow Wooden Fence
tile.fence.planks.oak.painted.yellow.desc=A wooden fence, stained yellow.
tile.fence.planks.oak.painted.lightblue.name=Light Blue Wooden Fence
tile.fence.planks.oak.painted.lightblue.desc=A wooden fence, stained light blue.
tile.fence.planks.oak.painted.magenta.name=Magenta Wooden Fence
tile.fence.planks.oak.painted.magenta.desc=A wooden fence, stained magenta.
tile.fence.planks.oak.painted.orange.name=Orange Wooden Fence
tile.fence.planks.oak.painted.orange.desc=A wooden fence, stained orange.
tile.fence.planks.oak.painted.white.name=White Wooden Fence
tile.fence.planks.oak.painted.white.desc=A wooden fence, stained white.

tile.fencegate.planks.oak.name=Wooden Fence Gate
tile.fencegate.planks.oak.desc=Like a door but for fences.

tile.fencegate.planks.oak.painted.name=Mystery Wooden Fence Gate
tile.fencegate.planks.oak.painted.desc=How did you get this?!
tile.fencegate.planks.oak.painted.black.name=Black Wooden Fence Gate
tile.fencegate.planks.oak.painted.black.desc=A wooden fence gate, stained black.
tile.fencegate.planks.oak.painted.red.name=Red Wooden Fence Gate
tile.fencegate.planks.oak.painted.red.desc=A wooden fence gate, stained red.
tile.fencegate.planks.oak.painted.green.name=Green Wooden Fence Gate
tile.fencegate.planks.oak.painted.green.desc=A wooden fence gate, stained green.
tile.fencegate.planks.oak.painted.brown.name=Brown Wooden Fence Gate
tile.fencegate.planks.oak.painted.brown.desc=A wooden fence gate, stained brown.
tile.fencegate.planks.oak.painted.blue.name=Blue Wooden Fence Gate
tile.fencegate.planks.oak.painted.blue.desc=A wooden fence gate, stained blue.
tile.fencegate.planks.oak.painted.purple.name=Purple Wooden Fence Gate
tile.fencegate.planks.oak.painted.purple.desc=A wooden fence gate, stained purple.
tile.fencegate.planks.oak.painted.cyan.name=Cyan Wooden Fence Gate
tile.fencegate.planks.oak.painted.cyan.desc=A wooden fence gate, stained cyan.
tile.fencegate.planks.oak.painted.silver.name=Light Gray Wooden Fence Gate
tile.fencegate.planks.oak.painted.silver.desc=A wooden fence gate, stained light gray.
tile.fencegate.planks.oak.painted.gray.name=Gray Wooden Fence Gate
tile.fencegate.planks.oak.painted.gray.desc=A wooden fence gate, stained gray.
tile.fencegate.planks.oak.painted.pink.name=Pink Wooden Fence Gate
tile.fencegate.planks.oak.painted.pink.desc=A wooden fence gate, stained pink.
tile.fencegate.planks.oak.painted.lime.name=Lime Wooden Fence Gate
tile.fencegate.planks.oak.painted.lime.desc=A wooden fence gate, stained lime.
tile.fencegate.planks.oak.painted.yellow.name=Yellow Wooden Fence Gate
tile.fencegate.planks.oak.painted.yellow.desc=A wooden fence gate, stained yellow.
tile.fencegate.planks.oak.painted.lightblue.name=Light Blue Wooden Fence Gate
tile.fencegate.planks.oak.painted.lightblue.desc=A wooden fence gate, stained light blue.
tile.fencegate.planks.oak.painted.magenta.name=Magenta Wooden Fence Gate
tile.fencegate.planks.oak.painted.magenta.desc=A wooden fence gate, stained magenta.
tile.fencegate.planks.oak.painted.orange.name=Orange Wooden Fence Gate
tile.fencegate.planks.oak.painted.orange.desc=A wooden fence gate, stained orange.
tile.fencegate.planks.oak.painted.white.name=White Wooden Fence Gate
tile.fencegate.planks.oak.painted.white.desc=A wooden fence gate, stained white.

tile.bookshelf.planks.oak.name=Bookshelf
tile.bookshelf.planks.oak.desc=A repository of knowledge.

tile.wool.name=Wool
tile.wool.desc=How did you get this?!
tile.wool.black.name=Black Wool
tile.wool.black.desc=Sheep's wool, dyed black.
tile.wool.red.name=Red Wool
tile.wool.red.desc=Sheep's wool, dyed red.
tile.wool.green.name=Green Wool
tile.wool.green.desc=Sheep's wool, dyed green.
tile.wool.brown.name=Brown Wool
tile.wool.brown.desc=Sheep's wool, dyed brown.
tile.wool.blue.name=Blue Wool
tile.wool.blue.desc=Sheep's wool, dyed blue.
tile.wool.purple.name=Purple Wool
tile.wool.purple.desc=Sheep's wool, dyed purple.
tile.wool.cyan.name=Cyan Wool
tile.wool.cyan.desc=Sheep's wool, dyed cyan.
tile.wool.silver.name=Light Gray Wool
tile.wool.silver.desc=Sheep's wool, dyed light gray.
tile.wool.gray.name=Gray Wool
tile.wool.gray.desc=Sheep's wool, dyed gray.
tile.wool.pink.name=Pink Wool
tile.wool.pink.desc=Sheep's wool, dyed pink.
tile.wool.lime.name=Lime Wool
tile.wool.lime.desc=Sheep's wool, dyed lime.
tile.wool.yellow.name=Yellow Wool
tile.wool.yellow.desc=Sheep's wool, dyed yellow.
tile.wool.lightblue.name=Light Blue Wool
tile.wool.lightblue.desc=Sheep's wool, dyed light blue.
tile.wool.magenta.name=Magenta Wool
tile.wool.magenta.desc=Sheep's wool, dyed magenta.
tile.wool.orange.name=Orange Wool
tile.wool.orange.desc=Sheep's wool, dyed orange.
tile.wool.white.name=White Wool
tile.wool.white.desc=Sheep's wool, dyed white.

tile.brick.clay.name=Clay Bricks
tile.brick.clay.desc=Stacked bricks of baked clay.
tile.brick.stone.polished.name=Polished Stone Bricks
tile.brick.stone.polished.desc=Stacked bricks of polished stone.
tile.brick.stone.polished.mossy.name=Mossy Polished Stone Bricks
tile.brick.stone.polished.mossy.desc=Stacked bricks of polished stone with added greenery.
tile.brick.sandstone.name=Sandstone Bricks
tile.brick.sandstone.desc=Stacked bricks of sandstone.
tile.brick.gold.name=Gold Bricks
tile.brick.gold.desc=Stacked bricks of gold.
tile.brick.lapis.name=Lapis Lazuli Bricks
tile.brick.lapis.desc=Stacked bricks of lapis lazuli.
tile.brick.basalt.name=Basalt Bricks
tile.brick.basalt.desc=Stacked bricks of basalt.
tile.brick.limestone.name=Limestone Bricks
tile.brick.limestone.desc=Stacked bricks of limestone.
tile.brick.granite.name=Granite Bricks
tile.brick.granite.desc=Stacked bricks of granite.
tile.brick.marble.name=Marble Bricks
tile.brick.marble.desc=Stacked bricks of marble.
tile.brick.slate.name=Slate Bricks
tile.brick.slate.desc=Stacked bricks of slate.
tile.brick.stone.name=Stone Bricks
tile.brick.stone.desc=Stacked bricks of stone.
tile.brick.permafrost.name=Permafrost Bricks
tile.brick.permafrost.desc=Stacked bricks of permafrost.
tile.brick.iron.name=Iron Bricks
tile.brick.iron.desc=Stacked bricks of iron.

tile.slab.planks.oak.name=Wooden Slab
tile.slab.planks.oak.desc=A slab of wooden planks.
tile.slab.cobble.stone.name=Cobblestone Slab
tile.slab.cobble.stone.desc=A slab of cobblestone.
tile.slab.sandstone.name=Sandstone Slab
tile.slab.sandstone.desc=A slab of sandstone.
tile.slab.brick.stone.polished.name=Polished Stone Brick Slab
tile.slab.brick.stone.polished.desc=A slab of polished stone bricks.
tile.slab.stone.carved.name=Polished Stone Slab
tile.slab.stone.carved.desc=A slab of polished stone.
tile.slab.brick.marble.name=Marble Brick Slab
tile.slab.brick.marble.desc=A slab of marble bricks.
tile.slab.brick.clay.name=Clay Brick Slab
tile.slab.brick.clay.desc=A slab of clay bricks.
tile.slab.capstone.marble.name=Marble Capstone Slab
tile.slab.capstone.marble.desc=Marble sculpted into a capstone.
tile.slab.cobble.basalt.name=Cobbled Basalt Slab
tile.slab.cobble.basalt.desc=A slab of cobbled basalt.
tile.slab.cobble.limestone.name=Cobbled Limestone Slab
tile.slab.cobble.limestone.desc=A slab of cobbled limestone.
tile.slab.cobble.granite.name=Cobbled Granite Slab
tile.slab.cobble.granite.desc=A slab of cobbled granite.
tile.slab.brick.basalt.name=Basalt Brick Slab
tile.slab.brick.basalt.desc=A slab of basalt bricks.
tile.slab.brick.limestone.name=Limestone Brick Slab
tile.slab.brick.limestone.desc=A slab of limestone bricks.
tile.slab.brick.granite.name=Granite Brick Slab
tile.slab.brick.granite.desc=A slab of granite bricks.
tile.slab.brick.slate.name=Slate Brick Slab
tile.slab.brick.slate.desc=A slab of slate bricks.
tile.slab.brick.stone.name=Stone Brick Slab
tile.slab.brick.stone.desc=A slab of stone bricks.
tile.slab.granite.carved.name=Polished Granite Slab
tile.slab.granite.carved.desc=A slab of polished granite.
tile.slab.limestone.carved.name=Polished Limestone Slab
tile.slab.limestone.carved.desc=A slab of polished limestone.
tile.slab.basalt.carved.name=Polished Basalt Slab
tile.slab.basalt.carved.desc=A slab of polished basalt.
tile.slab.permafrost.carved.name=Polished Permafrost Slab
tile.slab.permafrost.carved.desc=A slab of polished permafrost.

tile.slab.planks.oak.painted.name=Mystery Wooden Slab
tile.slab.planks.oak.painted.desc=How did you get this?!
tile.slab.planks.oak.painted.black.name=Black Wooden Slab
tile.slab.planks.oak.painted.black.desc=A slab of wooden planks, stained black.
tile.slab.planks.oak.painted.red.name=Red Wooden Slab
tile.slab.planks.oak.painted.red.desc=A slab of wooden planks, stained red.
tile.slab.planks.oak.painted.green.name=Green Wooden Slab
tile.slab.planks.oak.painted.green.desc=A slab of wooden planks, stained green.
tile.slab.planks.oak.painted.brown.name=Brown Wooden Slab
tile.slab.planks.oak.painted.brown.desc=A slab of wooden planks, stained brown.
tile.slab.planks.oak.painted.blue.name=Blue Wooden Slab
tile.slab.planks.oak.painted.blue.desc=A slab of wooden planks, stained blue.
tile.slab.planks.oak.painted.purple.name=Purple Wooden Slab
tile.slab.planks.oak.painted.purple.desc=A slab of wooden planks, stained purple.
tile.slab.planks.oak.painted.cyan.name=Cyan Wooden Slab
tile.slab.planks.oak.painted.cyan.desc=A slab of wooden planks, stained cyan.
tile.slab.planks.oak.painted.silver.name=Light Gray Wooden Slab
tile.slab.planks.oak.painted.silver.desc=A slab of wooden planks, stained light gray.
tile.slab.planks.oak.painted.gray.name=Gray Wooden Slab
tile.slab.planks.oak.painted.gray.desc=A slab of wooden planks, stained gray.
tile.slab.planks.oak.painted.pink.name=Pink Wooden Slab
tile.slab.planks.oak.painted.pink.desc=A slab of wooden planks, stained pink.
tile.slab.planks.oak.painted.lime.name=Lime Wooden Slab
tile.slab.planks.oak.painted.lime.desc=A slab of wooden planks, stained lime.
tile.slab.planks.oak.painted.yellow.name=Yellow Wooden Slab
tile.slab.planks.oak.painted.yellow.desc=A slab of wooden planks, stained yellow.
tile.slab.planks.oak.painted.lightblue.name=Light Blue Wooden Slab
tile.slab.planks.oak.painted.lightblue.desc=A slab of wooden planks, stained light blue.
tile.slab.planks.oak.painted.magenta.name=Magenta Wooden Slab
tile.slab.planks.oak.painted.magenta.desc=A slab of wooden planks, stained magenta.
tile.slab.planks.oak.painted.orange.name=Orange Wooden Slab
tile.slab.planks.oak.painted.orange.desc=A slab of wooden planks, stained orange.
tile.slab.planks.oak.painted.white.name=White Wooden Slab
tile.slab.planks.oak.painted.white.desc=A slab of wooden planks, stained white.
tile.slab.cobble.permafrost.name=Cobbled Permafrost Slab
tile.slab.cobble.permafrost.desc=A slab of cobbled permafrost.
tile.slab.brick.sandstone.name=Sandstone Brick Slab
tile.slab.brick.sandstone.desc=A slab of sandstone bricks.
tile.slab.brick.permafrost.name=Permafrost Brick Slab
tile.slab.brick.permafrost.desc=A slab of permafrost bricks.

tile.stairs.planks.oak.name=Wooden Stairs
tile.stairs.planks.oak.desc=Wooden block used for rapid vertical movement.
tile.stairs.cobble.stone.name=Cobblestone Stairs
tile.stairs.cobble.stone.desc=Cobblestone block used for rapid vertical movement.
tile.stairs.brick.stone.polished.name=Polished Stone Brick Stairs
tile.stairs.brick.stone.polished.desc=Polished stone brick block used for rapid vertical movement.
tile.stairs.brick.marble.name=Marble Brick Stairs
tile.stairs.brick.marble.desc=Marble brick block used for rapid vertical movement.
tile.stairs.cobble.basalt.name=Cobbled Basalt Stairs
tile.stairs.cobble.basalt.desc=Cobbled basalt block used for rapid vertical movement.
tile.stairs.cobble.limestone.name=Cobbled Limestone Stairs
tile.stairs.cobble.limestone.desc=Cobbled limestone block used for rapid vertical movement.
tile.stairs.cobble.granite.name=Cobbled Granite Stairs
tile.stairs.cobble.granite.desc=Cobbled granite block used for rapid vertical movement.
tile.stairs.brick.basalt.name=Basalt Brick Stairs
tile.stairs.brick.basalt.desc=Basalt brick block used for rapid vertical movement.
tile.stairs.brick.limestone.name=Limestone Brick Stairs
tile.stairs.brick.limestone.desc=Limestone brick block used for rapid vertical movement.
tile.stairs.brick.granite.name=Granite Brick Stairs
tile.stairs.brick.granite.desc=Granite brick block used for rapid vertical movement.
tile.stairs.brick.clay.name=Clay Brick Stairs
tile.stairs.brick.clay.desc=Clay brick block used for rapid vertical movement.
tile.stairs.brick.slate.name=Slate Brick Stairs
tile.stairs.brick.slate.desc=Slate brick block used for rapid vertical movement.
tile.stairs.brick.stone.name=Stone Brick Stairs
tile.stairs.brick.stone.desc=Stone brick block used for rapid vertical movement.
tile.stairs.sandstone.name=Sandstone Stairs
tile.stairs.sandstone.desc=Sandstone block used for rapid vertical movement.
tile.stairs.cobble.permafrost.name=Cobbled Permafrost Stairs
tile.stairs.cobble.permafrost.desc=Cobbled permafrost block used for rapid vertical movement.
tile.stairs.brick.sandstone.name=Sandstone Brick Stairs
tile.stairs.brick.sandstone.desc=Sandstone brick block used for rapid vertical movement.
tile.stairs.brick.permafrost.name=Permafrost Brick Stairs
tile.stairs.brick.permafrost.desc=Permafrost brick block used for rapid vertical movement.

tile.stairs.planks.oak.painted.name=Mystery Wooden Stairs
tile.stairs.planks.oak.painted.desc=How did you get this?!
tile.stairs.planks.oak.painted.black.name=Black Wooden Stairs
tile.stairs.planks.oak.painted.black.desc=Wooden steps, stained black.
tile.stairs.planks.oak.painted.red.name=Red Wooden Stairs
tile.stairs.planks.oak.painted.red.desc=Wooden steps, stained red.
tile.stairs.planks.oak.painted.green.name=Green Wooden Stairs
tile.stairs.planks.oak.painted.green.desc=Wooden steps, stained green.
tile.stairs.planks.oak.painted.brown.name=Brown Wooden Stairs
tile.stairs.planks.oak.painted.brown.desc=Wooden steps, stained brown.
tile.stairs.planks.oak.painted.blue.name=Blue Wooden Stairs
tile.stairs.planks.oak.painted.blue.desc=Wooden steps, stained blue.
tile.stairs.planks.oak.painted.purple.name=Purple Wooden Stairs
tile.stairs.planks.oak.painted.purple.desc=Wooden steps, stained purple.
tile.stairs.planks.oak.painted.cyan.name=Cyan Wooden Stairs
tile.stairs.planks.oak.painted.cyan.desc=Wooden steps, stained cyan.
tile.stairs.planks.oak.painted.silver.name=Light Gray Wooden Stairs
tile.stairs.planks.oak.painted.silver.desc=Wooden steps, stained light gray.
tile.stairs.planks.oak.painted.gray.name=Gray Wooden Stairs
tile.stairs.planks.oak.painted.gray.desc=Wooden steps, stained gray.
tile.stairs.planks.oak.painted.pink.name=Pink Wooden Stairs
tile.stairs.planks.oak.painted.pink.desc=Wooden steps, stained pink.
tile.stairs.planks.oak.painted.lime.name=Lime Wooden Stairs
tile.stairs.planks.oak.painted.lime.desc=Wooden steps, stained lime.
tile.stairs.planks.oak.painted.yellow.name=Yellow Wooden Stairs
tile.stairs.planks.oak.painted.yellow.desc=Wooden steps, stained yellow.
tile.stairs.planks.oak.painted.lightblue.name=Light Blue Wooden Stairs
tile.stairs.planks.oak.painted.lightblue.desc=Wooden steps, stained light blue.
tile.stairs.planks.oak.painted.magenta.name=Magenta Wooden Stairs
tile.stairs.planks.oak.painted.magenta.desc=Wooden steps, stained magenta.
tile.stairs.planks.oak.painted.orange.name=Orange Wooden Stairs
tile.stairs.planks.oak.painted.orange.desc=Wooden steps, stained orange.
tile.stairs.planks.oak.painted.white.name=White Wooden Stairs
tile.stairs.planks.oak.painted.white.desc=Wooden steps, stained white.

tile.obsidian.name=Obsidian
tile.obsidian.desc=Rapidly cooled volcanic rock.

tile.glass.name=Glass
tile.glass.desc=Sand heated until it becomes translucent.
tile.glass.tinted.name=Tinted Glass
tile.glass.tinted.desc=Darkened glass that blocks light.

tile.grass.name=Grass
tile.grass.desc=Crisp, crunchy grass.
tile.grass.retro.name=Retro Grass
tile.grass.retro.desc=Crisp, crunchy grass. Smells old.
tile.grass.scorched.name=Scorched Grass
tile.grass.scorched.desc=Grass that has baked in the sun.

tile.path.dirt.name=Dirt Path
tile.path.dirt.desc=Dirt worn down by frequent travelling.

tile.dirt.name=Dirt
tile.dirt.desc=Crumbly brown dirt.
tile.dirt.scorched.name=Scorched Dirt
tile.dirt.scorched.desc=Dirt that has baked in the sun.
tile.dirt.scorched.rich.name=Rich Scorched Dirt
tile.dirt.scorched.rich.desc=Dirt that has baked in the sun, searing in minerals.

tile.mud.name=Mud
tile.mud.desc=Mud sodden to its core.
tile.mud.baked.name=Baked Mud
tile.mud.baked.desc=Mud that's been dried out and cracked.

tile.sponge.dry.name=Sponge
tile.sponge.dry.desc=A dry sponge, good for soaking up water.
tile.sponge.wet.name=Wet Sponge
tile.sponge.wet.desc=A sponge full of water.
tile.pumice.dry.name=Pumice
tile.pumice.dry.desc=A dry porous volcanic rock, good for soaking up lava.
tile.pumice.wet.name=Molten Pumice
tile.pumice.wet.desc=Rock filled with lava.

tile.moss.stone.name=Mossy Stone
tile.moss.stone.desc=Moss covering a block of stone.
tile.moss.basalt.name=Mossy Basalt
tile.moss.basalt.desc=Moss covering a block of basalt.
tile.moss.limestone.name=Mossy Limestone
tile.moss.limestone.desc=Moss covering a block of limestone.
tile.moss.granite.name=Mossy Granite
tile.moss.granite.desc=Moss covering a block of granite.

tile.sand.name=Sand
tile.sand.desc=Gets everywhere.
tile.gravel.name=Gravel
tile.gravel.desc=A loose collection of pebbles.

tile.bedrock.name=Bedrock
tile.bedrock.desc=The toughest substance known to man.
tile.boneshale.name=Bone Shale
tile.boneshale.desc=An incredibly tough white rock torn from the deepest depths.

tile.fluid.water.flowing.name=Flowing Water
tile.fluid.water.flowing.desc=Water that flows when placed.
tile.fluid.water.still.name=Still Water
tile.fluid.water.still.desc=Water that does not flow when placed.
tile.fluid.lava.flowing.name=Flowing Lava
tile.fluid.lava.flowing.desc=Lava that flows when placed.
tile.fluid.lava.still.name=Still Lava
tile.fluid.lava.still.desc=Lava that does not flow when placed.

tile.log.oak.name=Oak Log
tile.log.oak.desc=A log from an oak tree.
tile.log.pine.name=Pine Log
tile.log.pine.desc=A log from a pine tree.
tile.log.birch.name=Birch Log
tile.log.birch.desc=A log from a birch tree.
tile.log.cherry.name=Cherry Log
tile.log.cherry.desc=A log from a cherry tree.
tile.log.eucalyptus.name=Eucalyptus Log
tile.log.eucalyptus.desc=A log from a eucalyptus tree.
tile.log.oak.mossy.name=Mossy Oak Log
tile.log.oak.mossy.desc=A log from a mossy oak tree.
tile.log.thorn.name=Thorn Log
tile.log.thorn.desc=A log from a thorn tree.
tile.log.palm.name=Palm Log
tile.log.palm.desc=A log from a palm tree.

tile.leaves.oak.name=Oak Leaves
tile.leaves.oak.desc=Leaves from an oak tree.
tile.leaves.pine.name=Pine Leaves
tile.leaves.pine.desc=Leaves from a pine tree.
tile.leaves.birch.name=Birch Leaves
tile.leaves.birch.desc=Leaves from a birch tree.
tile.leaves.cherry.name=Cherry Leaves
tile.leaves.cherry.desc=Leaves from a cherry tree.
tile.leaves.eucalyptus.name=Eucalyptus Leaves
tile.leaves.eucalyptus.desc=Leaves from a eucalyptus tree.
tile.leaves.oak.retro.name=Retro Leaves
tile.leaves.oak.retro.desc=Leaves from long ago.
tile.leaves.shrub.name=Shrub Leaves
tile.leaves.shrub.desc=Leaves from a shrub.
tile.leaves.cherry.flowering.name=Flowering Cherry Leaves
tile.leaves.cherry.flowering.desc=Leaves from a cherry tree that are budding with fruit.
tile.leaves.cacao.name=Cacao Leaves
tile.leaves.cacao.desc=Leaves from a cacao tree.
tile.leaves.thorn.name=Thorn Leaves
tile.leaves.thorn.desc=Leaves from a thorn tree.
tile.leaves.palm.name=Palm Leaves
tile.leaves.palm.desc=Leaves from a palm tree.

tile.sapling.oak.name=Oak Sapling
tile.sapling.oak.desc=Plant to grow an oak tree.
tile.sapling.pine.name=Pine Sapling
tile.sapling.pine.desc=Plant to grow a pine tree.
tile.sapling.birch.name=Birch Sapling
tile.sapling.birch.desc=Plant to grow a birch tree.
tile.sapling.cherry.name=Cherry Sapling
tile.sapling.cherry.desc=Plant to grow a cherry tree.
tile.sapling.eucalyptus.name=Eucalyptus Sapling
tile.sapling.eucalyptus.desc=Plant to grow a eucalyptus tree.
tile.sapling.oak.retro.name=Retro Oak Sapling
tile.sapling.oak.retro.desc=Plant to grow a tree from long ago.
tile.sapling.shrub.name=Shrub Sapling
tile.sapling.shrub.desc=Plant to grow a shrub.
tile.sapling.cacao.name=Cacao Sapling
tile.sapling.cacao.desc=Plant to grow a cacao tree.
tile.sapling.thorn.name=Thorn Sapling
tile.sapling.thorn.desc=Plant to grow a thorn tree.
tile.sapling.palm.name=Palm Sapling
tile.sapling.palm.desc=Plant to grow a palm tree.

tile.tallgrass.name=Tall Grass
tile.tallgrass.desc=Lush, growing grass.
tile.tallgrass.fern.name=Fern
tile.tallgrass.fern.desc=A fern plant.
tile.deadbush.name=Dead Bush
tile.deadbush.desc=A dried and withered plant.
tile.spinifex.name=Spinifex
tile.spinifex.desc=A spindly, thin grass from dry regions.
tile.algae.name=Algae
tile.algae.desc=Gooey vegetation that floats on the water's surface.

tile.flower.yellow.name=Dandelion
tile.flower.yellow.desc=A beautiful yellow flower.
tile.flower.red.name=Rose
tile.flower.red.desc=A beautiful red flower.
tile.flower.purple.name=Heather
tile.flower.purple.desc=Sprigs of purple petals. Brings good luck.
tile.flower.lightblue.name=Bluebell
tile.flower.lightblue.desc=A sad-looking blue flower.
tile.flower.pink.name=Orchid
tile.flower.pink.desc=A beautiful pink flower.
tile.flower.orange.name=Marigold
tile.flower.orange.desc=A beautiful orange flower.

tile.mushroom.red.name=Red Mushroom
tile.mushroom.red.desc=A tasty red mushroom. Good for stew.
tile.mushroom.brown.name=Brown Mushroom
tile.mushroom.brown.desc=A tasty brown mushroom. Good for stew.

tile.ore.coal.stone.name=Stone Coal Ore
tile.ore.coal.stone.desc=A chunk of coal embedded in stone.
tile.ore.coal.basalt.name=Basalt Coal Ore
tile.ore.coal.basalt.desc=A chunk of coal embedded in basalt.
tile.ore.coal.limestone.name=Limestone Coal Ore
tile.ore.coal.limestone.desc=A chunk of coal embedded in limestone.
tile.ore.coal.granite.name=Granite Coal Ore
tile.ore.coal.granite.desc=A chunk of coal embedded in granite.
tile.ore.coal.permafrost.name=Permafrost Coal Ore
tile.ore.coal.permafrost.desc=A chunk of coal embedded in permafrost.

tile.ore.iron.stone.name=Stone Iron Ore
tile.ore.iron.stone.desc=Iron nuggets embedded in stone.
tile.ore.iron.basalt.name=Basalt Iron Ore
tile.ore.iron.basalt.desc=Iron nuggets embedded in basalt.
tile.ore.iron.limestone.name=Limestone Iron Ore
tile.ore.iron.limestone.desc=Iron nuggets embedded in limestone.
tile.ore.iron.granite.name=Granite Iron Ore
tile.ore.iron.granite.desc=Iron nuggets embedded in granite.
tile.ore.iron.permafrost.name=Permafrost Iron Ore
tile.ore.iron.permafrost.desc=Iron nuggets embedded in permafrost.

tile.ore.gold.stone.name=Stone Gold Ore
tile.ore.gold.stone.desc=Gold nuggets embedded in stone.
tile.ore.gold.basalt.name=Basalt Gold Ore
tile.ore.gold.basalt.desc=Gold nuggets embedded in basalt.
tile.ore.gold.limestone.name=Limestone Gold Ore
tile.ore.gold.limestone.desc=Gold nuggets embedded in limestone.
tile.ore.gold.granite.name=Granite Gold Ore
tile.ore.gold.granite.desc=Gold nuggets embedded in granite.
tile.ore.gold.permafrost.name=Permafrost Gold Ore
tile.ore.gold.permafrost.desc=Gold nuggets embedded in permafrost.

tile.ore.lapis.stone.name=Stone Lapis Lazuli Ore
tile.ore.lapis.stone.desc=Chunks of lapis lazuli embedded in stone.
tile.ore.lapis.basalt.name=Basalt Lapis Lazuli Ore
tile.ore.lapis.basalt.desc=Chunks of lapis lazuli embedded in basalt.
tile.ore.lapis.limestone.name=Limestone Lapis Lazuli Ore
tile.ore.lapis.limestone.desc=Chunks of lapis lazuli embedded in limestone.
tile.ore.lapis.granite.name=Granite Lapis Lazuli Ore
tile.ore.lapis.granite.desc=Chunks of lapis lazuli embedded in granite.
tile.ore.lapis.permafrost.name=Permafrost Lapis Lazuli Ore
tile.ore.lapis.permafrost.desc=Chunks of lapis lazuli embedded in permafrost.

tile.ore.redstone.stone.name=Stone Redstone Ore
tile.ore.redstone.stone.desc=Red dust embedded in stone.
tile.ore.redstone.basalt.name=Basalt Redstone Ore
tile.ore.redstone.basalt.desc=Red dust embedded in basalt.
tile.ore.redstone.limestone.name=Limestone Redstone Ore
tile.ore.redstone.limestone.desc=Red dust embedded in limestone.
tile.ore.redstone.granite.name=Granite Redstone Ore
tile.ore.redstone.granite.desc=Red dust embedded in granite.
tile.ore.redstone.permafrost.name=Permafrost Redstone Ore
tile.ore.redstone.permafrost.desc=Red dust embedded in permafrost.
tile.ore.redstone.glowing.stone.name=Glowing Stone Redstone Ore
tile.ore.redstone.glowing.stone.desc=Red dust embedded in stone. Emits a faint light.
tile.ore.redstone.glowing.basalt.name=Glowing Basalt Redstone Ore
tile.ore.redstone.glowing.basalt.desc=Red dust embedded in basalt. Emits a faint light.
tile.ore.redstone.glowing.limestone.name=Glowing Limestone Redstone Ore
tile.ore.redstone.glowing.limestone.desc=Red dust embedded in limestone. Emits a faint light.
tile.ore.redstone.glowing.granite.name=Glowing Granite Redstone Ore
tile.ore.redstone.glowing.granite.desc=Red dust embedded in granite. Emits a faint light.
tile.ore.redstone.glowing.permafrost.name=Glowing Permafrost Redstone Ore
tile.ore.redstone.glowing.permafrost.desc=Red dust embedded in permafrost. Emits a faint light.

tile.ore.diamond.stone.name=Stone Diamond Ore
tile.ore.diamond.stone.desc=A chunk of diamond embedded in stone.
tile.ore.diamond.basalt.name=Basalt Diamond Ore
tile.ore.diamond.basalt.desc=A chunk of diamond embedded in basalt.
tile.ore.diamond.limestone.name=Limestone Diamond Ore
tile.ore.diamond.limestone.desc=A chunk of diamond embedded in limestone.
tile.ore.diamond.granite.name=Granite Diamond Ore
tile.ore.diamond.granite.desc=A chunk of diamond embedded in granite.
tile.ore.diamond.permafrost.name=Permafrost Diamond Ore
tile.ore.diamond.permafrost.desc=A chunk of diamond embedded in permafrost.

tile.ore.nethercoal.netherrack.name=Nether Coal Ore
tile.ore.nethercoal.netherrack.desc=A lump of Nether Coal embedded in netherrack.

tile.block.coal.name=Block of Coal
tile.block.coal.desc=A solid block of coal.
tile.block.iron.name=Block of Iron
tile.block.iron.desc=A solid block of iron. Heavy!
tile.block.gold.name=Block of Gold
tile.block.gold.desc=A solid block of gold, for flaunting your bling.
tile.block.lapis.name=Block of Lapis Lazuli
tile.block.lapis.desc=A solid block of lapis lazuli.
tile.block.redstone.name=Block of Redstone
tile.block.redstone.desc=A solid block of redstone.
tile.block.diamond.name=Block of Diamond
tile.block.diamond.desc=A solid block of diamond. Well done you.
tile.block.nethercoal.name=Block of Nether Coal
tile.block.nethercoal.desc=A solid block of Nether Coal.
tile.block.steel.name=Block of Steel
tile.block.steel.desc=A solid block of steel.
tile.block.quartz.name=Block of Quartz
tile.block.quartz.desc=A solid block of quartz.
tile.block.olivine.name=Block of Olivine
tile.block.olivine.desc=A solid block of olivine.
tile.block.charcoal.name=Block of Charcoal
tile.block.charcoal.desc=A solid block of charcoal.

tile.wire.redstone.name=Redstone Wire
tile.wire.redstone.desc=A strand of redstone dust laid on the ground.

tile.torch.redstone.idle.name=Redstone Torch
tile.torch.redstone.idle.desc=Emits a constant redstone signal.
tile.torch.redstone.active.name=Redstone Torch
tile.torch.redstone.active.desc=Emits a constant redstone signal.

tile.button.stone.name=Stone Button
tile.button.stone.desc=Emits a brief redstone signal when pressed.

tile.lever.cobble.stone.name=Cobblestone Lever
tile.lever.cobble.stone.desc=Allows turning a redstone signal on or off.

tile.pressureplate.stone.name=Stone Pressure Plate
tile.pressureplate.stone.desc=Emits a redstone signal when living creatures step on it.
tile.pressureplate.planks.oak.name=Wooden Pressure Plate
tile.pressureplate.planks.oak.desc=Emits a redstone signal when anything steps on it.
tile.pressureplate.cobble.stone.name=Cobblestone Pressure Plate
tile.pressureplate.cobble.stone.desc=Emits a redstone signal when players step on it.

tile.motionsensor.idle.name=Motion Sensor
tile.motionsensor.idle.desc=Emits a redstone signal when something moves past it.
tile.motionsensor.active.name=Active Motion Sensor
tile.motionsensor.active.desc=Emits a redstone signal when something moves past it.

tile.repeater.idle.name=Redstone Repeater
tile.repeater.idle.desc=Repeats redstone signals over a distance.
tile.repeater.active.name=Redstone Repeater
tile.repeater.active.desc=Repeats redstone signals over a distance.

tile.piston.base.name=Piston
tile.piston.base.desc=Pushes blocks but does not pull them.
tile.piston.base.sticky.name=Sticky Piston
tile.piston.base.sticky.desc=Pushes and pulls blocks.
tile.piston.head.name=Piston Head
tile.piston.head.desc=The pushy part of the piston.
tile.piston.moving.name=Piston Mover
tile.piston.moving.desc=The invisible moving part of the piston.

tile.noteblock.name=Note Block
tile.noteblock.desc=Plays a musical note when powered.

tile.rail.name=Rail
tile.rail.desc=For rapid horizontal movement via minecart.
tile.rail.powered.name=Powered Rail
tile.rail.powered.desc=Makes minecarts go faster when powered.
tile.rail.detector.name=Detector Rail
tile.rail.detector.desc=Emits a redstone signal when a minecart crosses it.

tile.spikes.name=Spike Trap
tile.spikes.desc=Deactivates when powered. Technically a war crime.

tile.dispenser.cobble.stone.name=Dispenser
tile.dispenser.cobble.stone.desc=Fires items out of the hole in the front.

tile.trapdoor.planks.oak.name=Oak Trapdoor
tile.trapdoor.planks.oak.desc=Like a door, but flat.
tile.trapdoor.iron.name=Iron Trapdoor
tile.trapdoor.iron.desc=Like a door, but flat and made of iron.
tile.trapdoor.glass.name=Glass Trapdoor
tile.trapdoor.glass.desc=Useless at its job.

tile.tnt.name=TNT
tile.tnt.desc=Goes off with a bang.

tile.door.planks.oak.bottom.name=Bottom Wooden Door
tile.door.planks.oak.bottom.desc=/give Honeydew 64 46
tile.door.planks.oak.top.name=Top Wooden Door
tile.door.planks.oak.top.desc=Oh, wait, that's not TNT, that's half a door.
tile.door.iron.bottom.name=Bottom Iron Door
tile.door.iron.bottom.desc=Not much good on its own.
tile.door.iron.top.name=Top Iron Door
tile.door.iron.top.desc=Could use a friend.

tile.mesh.name=Mesh Block
tile.mesh.desc=Allows items to pass through but nothing else.
tile.mesh.gold.name=Gold Mesh Block
tile.mesh.gold.desc=Allows a specified item to pass through but nothing else.

tile.bed.name=Bed
tile.bed.desc=Bed!
tile.seat.name=Seat
tile.seat.desc=Sit down and relax.

tile.cobweb.name=Cobweb
tile.cobweb.desc=Sticky silky strands woven by spiders.

tile.fire.name=Fire
tile.fire.desc=Ouch, fire hot!
tile.brazier.inactive.name=Brazier
tile.brazier.inactive.desc=A safe place to keep a fire.
tile.brazier.active.name=Lit Brazier
tile.brazier.active.desc=A safe place to keep a fire.

tile.mobspawner.name=Mob Spawner
tile.mobspawner.desc=A cage filled with horror.
tile.mobspawner.deactivated.name=Deactivated Mob Spawner
tile.mobspawner.deactivated.desc=A cage no longer filled with horror.

tile.workbench.name=Workbench
tile.workbench.desc=For bigger projects.

tile.furnace.stone.idle.name=Furnace
tile.furnace.stone.idle.desc=For melting, heating, and cooking blocks and items.
tile.furnace.stone.active.name=Lit Furnace
tile.furnace.stone.active.desc=For melting, heating, and cooking blocks and items.
tile.furnace.blast.idle.name=Blast Furnace
tile.furnace.blast.idle.desc=Burns hotter than a normal furnace.
tile.furnace.blast.active.name=Lit Blast Furnace
tile.furnace.blast.active.desc=Burns hotter than a normal furnace.

tile.trommel.idle.name=Trommel
tile.trommel.idle.desc=A machine that separates dirt from other useful items.
tile.trommel.active.name=Lit Trommel
tile.trommel.active.desc=A machine that separates dirt from other useful items.

tile.chest.planks.oak.name=Wooden Chest
tile.chest.planks.oak.desc=A place to store your items.
tile.chest.planks.oak.painted.name=Mystery Wooden Chest
tile.chest.planks.oak.painted.desc=How did you get this?!
tile.chest.planks.oak.painted.black.name=Black Wooden Chest
tile.chest.planks.oak.painted.black.desc=A place to store your items.
tile.chest.planks.oak.painted.red.name=Red Wooden Chest
tile.chest.planks.oak.painted.red.desc=A place to store your items.
tile.chest.planks.oak.painted.green.name=Green Wooden Chest
tile.chest.planks.oak.painted.green.desc=A place to store your items.
tile.chest.planks.oak.painted.brown.name=Brown Wooden Chest
tile.chest.planks.oak.painted.brown.desc=A place to store your items.
tile.chest.planks.oak.painted.blue.name=Blue Wooden Chest
tile.chest.planks.oak.painted.blue.desc=A place to store your items.
tile.chest.planks.oak.painted.purple.name=Purple Wooden Chest
tile.chest.planks.oak.painted.purple.desc=A place to store your items.
tile.chest.planks.oak.painted.cyan.name=Cyan Wooden Chest
tile.chest.planks.oak.painted.cyan.desc=A place to store your items.
tile.chest.planks.oak.painted.silver.name=Light Gray Wooden Chest
tile.chest.planks.oak.painted.silver.desc=A place to store your items.
tile.chest.planks.oak.painted.gray.name=Gray Wooden Chest
tile.chest.planks.oak.painted.gray.desc=A place to store your items.
tile.chest.planks.oak.painted.pink.name=Pink Wooden Chest
tile.chest.planks.oak.painted.pink.desc=A place to store your items.
tile.chest.planks.oak.painted.lime.name=Lime Wooden Chest
tile.chest.planks.oak.painted.lime.desc=A place to store your items.
tile.chest.planks.oak.painted.yellow.name=Yellow Wooden Chest
tile.chest.planks.oak.painted.yellow.desc=A place to store your items.
tile.chest.planks.oak.painted.lightblue.name=Light Blue Wooden Chest
tile.chest.planks.oak.painted.lightblue.desc=A place to store your items.
tile.chest.planks.oak.painted.magenta.name=Magenta Wooden Chest
tile.chest.planks.oak.painted.magenta.desc=A place to store your items.
tile.chest.planks.oak.painted.orange.name=Orange Wooden Chest
tile.chest.planks.oak.painted.orange.desc=A place to store your items.
tile.chest.planks.oak.painted.white.name=White Wooden Chest
tile.chest.planks.oak.painted.white.desc=A place to store your items.
tile.chest.legacy.name=Legacy Chest

tile.crops.wheat.name=Wheat Crops
tile.crops.wheat.desc=Wheat, plucked from the ground.
tile.crops.pumpkin.name=Pumpkin Crops
tile.crops.pumpkin.desc=A ripening pumpkin, plucked from the ground.

tile.farmland.dirt.name=Farmland
tile.farmland.dirt.desc=Tilled soil for growing crops.

tile.sign.post.planks.oak.name=Oak Signpost
tile.sign.post.planks.oak.desc=A free-standing oak sign.
tile.sign.wall.planks.oak.name=Oak Wall Sign
tile.sign.wall.planks.oak.desc=An oak sign placed on a wall.

tile.layer.snow.name=Snow Layer
tile.layer.snow.desc=A flat layer of snow.
tile.layer.leaves.oak.name=Leaf Pile
tile.layer.leaves.oak.desc=A pile of leaves.
tile.layer.slate.name=Slate Layer
tile.layer.slate.desc=A flat sheet of slate.

tile.ice.name=Ice
tile.ice.desc=Slippery frozen water.
tile.ice.perma.name=Perma-Ice
tile.ice.perma.desc=Ice imbued with the essence of stone.

tile.block.snow.name=Block of Snow
tile.block.snow.desc=Lots of snow compacted into a block.

tile.cactus.name=Cactus
tile.cactus.desc=A spiky plant that grows in the desert.

tile.block.clay.name=Block of Clay
tile.block.clay.desc=A block of compacted clay.

tile.sugarcane.name=Sugarcane
tile.sugarcane.desc=Not as sweet as you.

tile.block.sugarcane.name=Block of Sugarcane
tile.block.sugarcane.desc=One very big sugar cube.
tile.block.sugarcane.baked.name=Baked Block of Sugarcane
tile.block.sugarcane.baked.desc=Smells absolutely delicious.

tile.jukebox.name=Jukebox
tile.jukebox.desc=Plays your favourite tunes, assuming you have the right record.

tile.pumpkin.name=Pumpkin
tile.pumpkin.desc=An orange squash that grows in the wild.
tile.pumpkin.carved.idle.name=Carved Pumpkin
tile.pumpkin.carved.idle.desc=An orange squash with a spooky face.
tile.pumpkin.carved.active.name=Jack 'o' Lantern
tile.pumpkin.carved.active.desc=An orange squash with a spooky face, lit by a torch.
tile.pumpkin.redstone.name=Redstone Jack 'o' Lantern
tile.pumpkin.redstone.desc=An orange squash with a spooky face, lit by a redstone torch.

tile.cobble.netherrack.name=Cobbled Netherrack
tile.cobble.netherrack.desc=Dark red rock that burns forever.
tile.cobble.netherrack.igneous.name=Igneous Cobbled Netherrack
tile.cobble.netherrack.igneous.desc=Extreme heat has made this rock glow from inside.
tile.cobble.netherrack.mossy.name=Mossy Cobbled Netherrack
tile.cobble.netherrack.mossy.desc=Cobbled netherrack, covered in something like moss.
tile.netherrack.name=Netherrack
tile.netherrack.desc=Dark red rock, smoothed by heat and time.
tile.brick.netherrack.name=Netherrack Bricks
tile.brick.netherrack.desc=Stacked bricks of netherrack.
tile.slab.netherrack.carved.name=Polished Netherrack Slab
tile.slab.netherrack.carved.desc=A slab of polished netherrack.
tile.slab.cobble.netherrack.name=Cobbled Netherrack Slab
tile.slab.cobble.netherrack.desc=A slab of cobbled netherrack.
tile.slab.brick.netherrack.name=Netherrack Brick Slab
tile.slab.brick.netherrack.desc=A slab of netherrack bricks.
tile.stairs.cobble.netherrack.name=Cobbled Netherrack Stairs
tile.stairs.cobble.netherrack.desc=Cobbled netherrack block used for rapid vertical movement.
tile.stairs.brick.netherrack.name=Netherrack Brick Stairs
tile.stairs.brick.netherrack.desc=Netherrack brick block used for rapid vertical movement.

tile.soulsand.name=Soul Sand
tile.soulsand.desc=Squishy brown sand that's tough to walk through.
tile.soulschist.name=Soul Schist
tile.soulschist.desc=A hideous medley of ancient bones, fused through heat, pressure, and time.

tile.glowstone.name=Block of Glowstone
tile.glowstone.desc=Constantly emits a strong yellowish light.

tile.portal.nether.name=Nether Portal
tile.portal.nether.desc=A portal to the Nether.
tile.portal.paradise.name=Paradise Portal
tile.portal.paradise.desc=A portal to Paradise.

tile.cake.name=Cake
tile.cake.desc=I just can't cake it any more.
tile.pumpkin_pie.name=Pumpkin Pie
tile.pumpkin_pie.desc=I don't wanna pie!

tile.lamp.idle.name=Lamp
tile.lamp.idle.desc=How did you get this?!
tile.lamp.idle.black.name=Black Lamp
tile.lamp.idle.black.desc=A redstone lamp that can emit light. Tinted black.
tile.lamp.idle.red.name=Red Lamp
tile.lamp.idle.red.desc=A redstone lamp that can emit light. Tinted red.
tile.lamp.idle.green.name=Green Lamp
tile.lamp.idle.green.desc=A redstone lamp that can emit light. Tinted green.
tile.lamp.idle.brown.name=Brown Lamp
tile.lamp.idle.brown.desc=A redstone lamp that can emit light. Tinted brown.
tile.lamp.idle.blue.name=Blue Lamp
tile.lamp.idle.blue.desc=A redstone lamp that can emit light. Tinted blue.
tile.lamp.idle.purple.name=Purple Lamp
tile.lamp.idle.purple.desc=A redstone lamp that can emit light. Tinted purple.
tile.lamp.idle.cyan.name=Cyan Lamp
tile.lamp.idle.cyan.desc=A redstone lamp that can emit light. Tinted cyan.
tile.lamp.idle.silver.name=Light Gray Lamp
tile.lamp.idle.silver.desc=A redstone lamp that can emit light. Tinted light gray.
tile.lamp.idle.gray.name=Gray Lamp
tile.lamp.idle.gray.desc=A redstone lamp that can emit light. Tinted gray.
tile.lamp.idle.pink.name=Pink Lamp
tile.lamp.idle.pink.desc=A redstone lamp that can emit light. Tinted pink.
tile.lamp.idle.lime.name=Lime Lamp
tile.lamp.idle.lime.desc=A redstone lamp that can emit light. Tinted lime.
tile.lamp.idle.yellow.name=Yellow Lamp
tile.lamp.idle.yellow.desc=A redstone lamp that can emit light. Tinted yellow.
tile.lamp.idle.lightblue.name=Light Blue Lamp
tile.lamp.idle.lightblue.desc=A redstone lamp that can emit light. Tinted light blue.
tile.lamp.idle.magenta.name=Magenta Lamp
tile.lamp.idle.magenta.desc=A redstone lamp that can emit light. Tinted magenta.
tile.lamp.idle.orange.name=Orange Lamp
tile.lamp.idle.orange.desc=A redstone lamp that can emit light. Tinted orange.
tile.lamp.idle.white.name=White Lamp
tile.lamp.idle.white.desc=A redstone lamp that can emit light.

tile.lamp.active.name=Lit Lamp
tile.lamp.active.desc=How did you get this?!
tile.lamp.active.black.name=Lit Black Lamp
tile.lamp.active.black.desc=A redstone lamp that emits light. Tinted black.
tile.lamp.active.red.name=Lit Red Lamp
tile.lamp.active.red.desc=A redstone lamp that emits light. Tinted red.
tile.lamp.active.green.name=Lit Green Lamp
tile.lamp.active.green.desc=A redstone lamp that emits light. Tinted green.
tile.lamp.active.brown.name=Lit Brown Lamp
tile.lamp.active.brown.desc=A redstone lamp that emits light. Tinted brown.
tile.lamp.active.blue.name=Lit Blue Lamp
tile.lamp.active.blue.desc=A redstone lamp that emits light. Tinted blue.
tile.lamp.active.purple.name=Lit Purple Lamp
tile.lamp.active.purple.desc=A redstone lamp that emits light. Tinted purple.
tile.lamp.active.cyan.name=Lit Cyan Lamp
tile.lamp.active.cyan.desc=A redstone lamp that emits light. Tinted cyan.
tile.lamp.active.silver.name=Lit Light Gray Lamp
tile.lamp.active.silver.desc=A redstone lamp that emits light. Tinted light gray.
tile.lamp.active.gray.name=Lit Gray Lamp
tile.lamp.active.gray.desc=A redstone lamp that emits light. Tinted gray.
tile.lamp.active.pink.name=Lit Pink Lamp
tile.lamp.active.pink.desc=A redstone lamp that emits light. Tinted pink.
tile.lamp.active.lime.name=Lit Lime Lamp
tile.lamp.active.lime.desc=A redstone lamp that emits light. Tinted lime.
tile.lamp.active.yellow.name=Yellow Lamp
tile.lamp.active.yellow.desc=A redstone lamp that emits light. Tinted yellow.
tile.lamp.active.lightblue.name=Light Blue Lamp
tile.lamp.active.lightblue.desc=A redstone lamp that emits light. Tinted light blue.
tile.lamp.active.magenta.name=Magenta Lamp
tile.lamp.active.magenta.desc=A redstone lamp that emits light. Tinted magenta.
tile.lamp.active.orange.name=Orange Lamp
tile.lamp.active.orange.desc=A redstone lamp that emits light. Tinted orange.
tile.lamp.active.white.name=White Lamp
tile.lamp.active.white.desc=A redstone lamp that emits light.

tile.stone.polished.name=Polished Stone
tile.stone.polished.desc=A polished block of stone.
tile.granite.polished.name=Polished Granite
tile.granite.polished.desc=A polished block of granite.
tile.limestone.polished.name=Polished Limestone
tile.limestone.polished.desc=A polished block of limestone.
tile.basalt.polished.name=Polished Basalt
tile.basalt.polished.desc=A polished block of basalt.
tile.slate.polished.name=Polished Slate
tile.slate.polished.desc=A polished block of slate.
tile.permafrost.polished.name=Polished Permafrost
tile.permafrost.polished.desc=A polished block of permafrost.
tile.netherrack.polished.name=Polished Netherrack
tile.netherrack.polished.desc=A polished block of netherrack.

tile.candle.wax.soul.name=Soul Wax Candle
tile.candle.wax.soul.desc=A waxy brown candle that glows with an unnatural light.

tile.basket.name=Basket
tile.basket.desc=A wicker container for holding items.

tile.overlay.pebbles.name=Pebbles
tile.overlay.pebbles.desc=A cluster of pebbles.

tile.fence.chainlink.name=Chainlink Fence
tile.fence.chainlink.desc=A fence made of interconnected chain links. Can be climbed!
tile.fence.paper_wall.name=Paper Wall Fence
tile.fence.paper_wall.desc=A fence made of delicate paper. Be careful!

tile.lantern.firefly.green.name=Green Firefly Lantern
tile.lantern.firefly.green.desc=A glass jar containing a swarm of green fireflies.
tile.lantern.firefly.orange.name=Orange Firefly Lantern
tile.lantern.firefly.orange.desc=A glass jar containing a swarm of orange fireflies.
tile.lantern.firefly.blue.name=Blue Firefly Lantern
tile.lantern.firefly.blue.desc=A glass jar containing a swarm of blue fireflies.
tile.lantern.firefly.red.name=Red Firefly Lantern
tile.lantern.firefly.red.desc=A glass jar containing a swarm of red fireflies.

tile.flag.name=Flag
tile.flag.desc=A flag to mark your territory.

tile.paper_wall.name=Paper Wall
tile.paper_wall.desc=A wall made of delicate paper. Be careful!

tile.trapdoor.planks.oak.painted.name=Painted Trapdoor
tile.trapdoor.planks.oak.painted.desc=How did you get this?!
tile.trapdoor.planks.oak.painted.black.name=Black Oak Trapdoor
tile.trapdoor.planks.oak.painted.black.desc=Like a door, but flat and painted black.
tile.trapdoor.planks.oak.painted.red.name=Red Oak Trapdoor
tile.trapdoor.planks.oak.painted.red.desc=Like a door, but flat and painted red.
tile.trapdoor.planks.oak.painted.green.name=Green Oak Trapdoor
tile.trapdoor.planks.oak.painted.green.desc=Like a door, but flat and painted green.
tile.trapdoor.planks.oak.painted.brown.name=Brown Oak Trapdoor
tile.trapdoor.planks.oak.painted.brown.desc=Like a door, but flat and painted brown.
tile.trapdoor.planks.oak.painted.blue.name=Blue Oak Trapdoor
tile.trapdoor.planks.oak.painted.blue.desc=Like a door, but flat and painted blue.
tile.trapdoor.planks.oak.painted.purple.name=Purple Oak Trapdoor
tile.trapdoor.planks.oak.painted.purple.desc=Like a door, but flat and painted purple.
tile.trapdoor.planks.oak.painted.cyan.name=Cyan Oak Trapdoor
tile.trapdoor.planks.oak.painted.cyan.desc=Like a door, but flat and painted cyan.
tile.trapdoor.planks.oak.painted.silver.name=Light Gray Oak Trapdoor
tile.trapdoor.planks.oak.painted.silver.desc=Like a door, but flat and painted light gray.
tile.trapdoor.planks.oak.painted.gray.name=Gray Oak Trapdoor
tile.trapdoor.planks.oak.painted.gray.desc=Like a door, but flat and painted gray.
tile.trapdoor.planks.oak.painted.pink.name=Pink Oak Trapdoor
tile.trapdoor.planks.oak.painted.pink.desc=Like a door, but flat and painted pink.
tile.trapdoor.planks.oak.painted.lime.name=Lime Oak Trapdoor
tile.trapdoor.planks.oak.painted.lime.desc=Like a door, but flat and painted lime.
tile.trapdoor.planks.oak.painted.yellow.name=Yellow Oak Trapdoor
tile.trapdoor.planks.oak.painted.yellow.desc=Like a door, but flat and painted yellow.
tile.trapdoor.planks.oak.painted.lightblue.name=Light Blue Oak Trapdoor
tile.trapdoor.planks.oak.painted.lightblue.desc=Like a door, but flat and painted light blue.
tile.trapdoor.planks.oak.painted.magenta.name=Magenta Oak Trapdoor
tile.trapdoor.planks.oak.painted.magenta.desc=Like a door, but flat and painted magenta.
tile.trapdoor.planks.oak.painted.orange.name=Orange Oak Trapdoor
tile.trapdoor.planks.oak.painted.orange.desc=Like a door, but flat and painted orange.
tile.trapdoor.planks.oak.painted.white.name=White Oak Trapdoor
tile.trapdoor.planks.oak.painted.white.desc=Like a door, but flat and painted white.

tile.door.planks.oak.painted.bottom.name=Bottom Painted Wooden Door
tile.door.planks.oak.painted.bottom.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.black.name=Black Bottom Wooden Door
tile.door.planks.oak.painted.bottom.black.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.red.name=Red Bottom Wooden Door
tile.door.planks.oak.painted.bottom.red.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.green.name=Green Bottom Wooden Door
tile.door.planks.oak.painted.bottom.green.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.brown.name=Brown Bottom Wooden Door
tile.door.planks.oak.painted.bottom.brown.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.blue.name=Blue Bottom Wooden Door
tile.door.planks.oak.painted.bottom.blue.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.purple.name=Purple Bottom Wooden Door
tile.door.planks.oak.painted.bottom.purple.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.cyan.name=Cyan Bottom Wooden Door
tile.door.planks.oak.painted.bottom.cyan.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.silver.name=Light Gray Bottom Wooden Door
tile.door.planks.oak.painted.bottom.silver.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.gray.name=Gray Bottom Wooden Door
tile.door.planks.oak.painted.bottom.gray.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.pink.name=Pink Bottom Wooden Door
tile.door.planks.oak.painted.bottom.pink.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.lime.name=Lime Bottom Wooden Door
tile.door.planks.oak.painted.bottom.lime.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.yellow.name=Yellow Bottom Wooden Door
tile.door.planks.oak.painted.bottom.yellow.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.lightblue.name=Light Blue Bottom Wooden Door
tile.door.planks.oak.painted.bottom.lightblue.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.magenta.name=Magenta Bottom Wooden Door
tile.door.planks.oak.painted.bottom.magenta.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.orange.name=Orange Bottom Wooden Door
tile.door.planks.oak.painted.bottom.orange.desc=How did you get this?!
tile.door.planks.oak.painted.bottom.white.name=White Bottom Wooden Door
tile.door.planks.oak.painted.bottom.white.desc=How did you get this?!

tile.door.planks.oak.painted.top.name=Top Painted Wooden Door
tile.door.planks.oak.painted.top.desc=How did you get this?!
tile.door.planks.oak.painted.top.black.name=Black Top Wooden Door
tile.door.planks.oak.painted.top.black.desc=How did you get this?!
tile.door.planks.oak.painted.top.red.name=Red Top Wooden Door
tile.door.planks.oak.painted.top.red.desc=How did you get this?!
tile.door.planks.oak.painted.top.green.name=Green Top Wooden Door
tile.door.planks.oak.painted.top.green.desc=How did you get this?!
tile.door.planks.oak.painted.top.brown.name=Brown Top Wooden Door
tile.door.planks.oak.painted.top.brown.desc=How did you get this?!
tile.door.planks.oak.painted.top.blue.name=Blue Top Wooden Door
tile.door.planks.oak.painted.top.blue.desc=How did you get this?!
tile.door.planks.oak.painted.top.purple.name=Purple Top Wooden Door
tile.door.planks.oak.painted.top.purple.desc=How did you get this?!
tile.door.planks.oak.painted.top.cyan.name=Cyan Top Wooden Door
tile.door.planks.oak.painted.top.cyan.desc=How did you get this?!
tile.door.planks.oak.painted.top.silver.name=Light Gray Top Wooden Door
tile.door.planks.oak.painted.top.silver.desc=How did you get this?!
tile.door.planks.oak.painted.top.gray.name=Gray Top Wooden Door
tile.door.planks.oak.painted.top.gray.desc=How did you get this?!
tile.door.planks.oak.painted.top.pink.name=Pink Top Wooden Door
tile.door.planks.oak.painted.top.pink.desc=How did you get this?!
tile.door.planks.oak.painted.top.lime.name=Lime Top Wooden Door
tile.door.planks.oak.painted.top.lime.desc=How did you get this?!
tile.door.planks.oak.painted.top.yellow.name=Yellow Top Wooden Door
tile.door.planks.oak.painted.top.yellow.desc=How did you get this?!
tile.door.planks.oak.painted.top.lightblue.name=Light Blue Top Wooden Door
tile.door.planks.oak.painted.top.lightblue.desc=How did you get this?!
tile.door.planks.oak.painted.top.magenta.name=Magenta Top Wooden Door
tile.door.planks.oak.painted.top.magenta.desc=How did you get this?!
tile.door.planks.oak.painted.top.orange.name=Orange Top Wooden Door
tile.door.planks.oak.painted.top.orange.desc=How did you get this?!
tile.door.planks.oak.painted.top.white.name=White Top Wooden Door
tile.door.planks.oak.painted.top.white.desc=How did you get this?!

tile.door.glass.top.name=Top Glass Door
tile.door.glass.top.desc=You shouldn't be seeing this.
tile.door.glass.bottom.name=Bottom Glass Door
tile.door.glass.bottom.desc=And that's not just because it's glass.

tile.door.steel.top.name=Top Steel Door
tile.door.steel.top.desc=Don't take this without asking.
tile.door.steel.bottom.name=Bottom Steel Door
tile.door.steel.bottom.desc=Steeler, no steeling!

tile.trapdoor.steel.name=Steel Trapdoor
tile.trapdoor.steel.desc=Like a door, but flat and made of durable steel.

tile.glass.steel.name=Reinforced Glass
tile.glass.steel.desc=Like glass, but without the fragility.

tile.rope.name=Rope
tile.rope.desc=Rope, rope, rope your boat.
\ No newline at end of file
diff --git a/src/main/java/net/minecraft/client/player/controller/PlayerController.java b/src/main/java/net/minecraft/client/player/controller/PlayerController.java
index 8859082fb..c4353c224 100644
--- a/src/main/java/net/minecraft/client/player/controller/PlayerController.java
+++ b/src/main/java/net/minecraft/client/player/controller/PlayerController.java
@@ -52,7 +52,7 @@ public abstract class PlayerController {
 
 		Block mineBlock = Block.getBlock(mc.theWorld.getBlockId(x, y, z));
 		if(mineBlock != null) {
-			float mineStrength = mineBlock.blockStrength(mc.thePlayer);
+			float mineStrength = mineBlock.blockStrength(mc.theWorld, x, y, z, side, mc.thePlayer);
 			
 			if(mineStrength < 1.0f) {
 				if(!repeat) {
@@ -80,7 +80,7 @@ public abstract class PlayerController {
 		if(mineBlock != null) {	
 			syncCurrentPlayItem();
 			
-			float mineStrength = mineBlock.blockStrength(mc.thePlayer);
+			float mineStrength = mineBlock.blockStrength(mc.theWorld, x, y, z, side, mc.thePlayer);
 			if(mineStrength >= 1.0f) {
 				//Instant Mining
 				
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java
index 8eff72ef9..cdaace8af 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java
@@ -180,6 +180,7 @@ public class BlockModelDispatcher
         addDispatch(new StandardBlockModel<>(Blocks.GRAVEL).withTextures("minecraft:block/gravel"));
 
         addDispatch(new StandardBlockModel<>(Blocks.BEDROCK).withTextures("minecraft:block/bedrock"));
+        addDispatch(new FullRotatableBlockModel<>(Blocks.BONESHALE).withTextures("minecraft:block/bone_shale_top", "minecraft:block/bone_shale_bottom", "minecraft:block/bone_shale_side"));
 
         addDispatch(new FluidBlockModel<>(Blocks.FLUID_WATER_FLOWING).withTextures("minecraft:block/water_still", "minecraft:block/water_flowing", "minecraft:block/water_flowing"));
         addDispatch(new FluidBlockModel<>(Blocks.FLUID_WATER_STILL).withTextures("minecraft:block/water_still", "minecraft:block/water_flowing"));
@@ -425,6 +426,8 @@ public class BlockModelDispatcher
         addDispatch(new StairsBlockModel<>(Blocks.STAIRS_BRICK_NETHERRACK));
 
         addDispatch(new StandardBlockModel<>(Blocks.SOULSAND).withTextures("minecraft:block/soulsand"));
+        addDispatch(new StandardBlockModel<>(Blocks.SOULSCHIST).withTextures("minecraft:block/soulschist"));
+
         addDispatch(new StandardBlockModel<>(Blocks.GLOWSTONE).withTextures("minecraft:block/glowstone"));
 
         addDispatch(new PortalBlockModel<>(Blocks.PORTAL_NETHER).withTextures("minecraft:block/portal_nether"));
diff --git a/src/main/java/net/minecraft/client/render/block/model/FullRotatableBlockModel.java b/src/main/java/net/minecraft/client/render/block/model/FullRotatableBlockModel.java
new file mode 100644
index 000000000..19ccd91f9
--- /dev/null
+++ b/src/main/java/net/minecraft/client/render/block/model/FullRotatableBlockModel.java
@@ -0,0 +1,76 @@
+package net.minecraft.client.render.block.model;
+
+import net.minecraft.client.render.tessellator.Tessellator;
+import net.minecraft.client.render.texture.stitcher.IconCoordinate;
+import net.minecraft.core.block.Block;
+import net.minecraft.core.block.FullRotatableBlock;
+import net.minecraft.core.block.logic.PistonDirections;
+import net.minecraft.core.util.helper.Direction;
+import net.minecraft.core.util.helper.Side;
+import org.jetbrains.annotations.Nullable;
+
+public class FullRotatableBlockModel<T extends FullRotatableBlock> extends StandardBlockModel<T> {
+    public FullRotatableBlockModel(Block block) {
+        super(block);
+    }
+
+    @Override
+    public boolean render(Tessellator tessellator, int x, int y, int z) {
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+        final int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
+        final Direction dir = FullRotatableBlock.metaToDirection(meta);
+
+        switch (dir) {
+            case DOWN:
+                renderBlocks.uvRotateEast = 3;
+                renderBlocks.uvRotateWest = 3;
+                renderBlocks.uvRotateSouth = 3;
+                renderBlocks.uvRotateNorth = 3;
+                break;
+
+            case NORTH:
+                renderBlocks.uvRotateSouth = 1;
+                renderBlocks.uvRotateNorth = 2;
+                break;
+
+            case SOUTH:
+                renderBlocks.uvRotateSouth = 2;
+                renderBlocks.uvRotateNorth = 1;
+                renderBlocks.uvRotateTop = 3;
+                renderBlocks.uvRotateBottom = 3;
+                break;
+
+            case WEST:
+                renderBlocks.uvRotateEast = 1;
+                renderBlocks.uvRotateWest = 2;
+                renderBlocks.uvRotateTop = 2;
+                renderBlocks.uvRotateBottom = 1;
+                break;
+
+            case EAST:
+                renderBlocks.uvRotateEast = 2;
+                renderBlocks.uvRotateWest = 1;
+                renderBlocks.uvRotateTop = 1;
+                renderBlocks.uvRotateBottom = 2;
+                break;
+        }
+        final boolean result = renderStandardBlock(tessellator, block, x, y, z);
+        resetRenderBlocks();
+
+        return result;
+    }
+
+    @Override
+    public void renderBlockOnInventory(Tessellator tessellator, int metadata, float brightness, float alpha, @Nullable Integer lightmapCoordinate) {
+        super.renderBlockOnInventory(tessellator, 1, brightness, alpha, lightmapCoordinate);
+    }
+
+    @Override
+    public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data) {
+        final Direction dir = FullRotatableBlock.metaToDirection(data);
+        if (side == dir.getSide()) {
+            return atlasIndices[Side.TOP.getId()];
+        }
+        return side.getId() != PistonDirections.directionMap[dir.getId()] ? atlasIndices[Side.NORTH.getId()] : atlasIndices[Side.BOTTOM.getId()];
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/block/model/PistonBlockModel.java b/src/main/java/net/minecraft/client/render/block/model/PistonBlockModel.java
index 0aefb478a..ca04ca569 100644
--- a/src/main/java/net/minecraft/client/render/block/model/PistonBlockModel.java
+++ b/src/main/java/net/minecraft/client/render/block/model/PistonBlockModel.java
@@ -30,13 +30,13 @@ public class PistonBlockModel<T extends BasePistonBlock> extends StandardBlockMo
         renderBlocks.renderAllFaces = false;
         return result;
     }
-    protected boolean renderPistonBase(Tessellator tessellator, int i, int j, int k, boolean flag) {
-        int l = renderBlocks.blockAccess.getBlockMetadata(i, j, k);
-        boolean flag1 = flag || (l & 8) != 0;
-        int i1 = BasePistonBlock.getDirection(l);
-        if(flag1)
+    protected boolean renderPistonBase(Tessellator tessellator, int x, int y, int z, boolean noCulling) {
+        int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
+        boolean extended = noCulling || (meta & 8) != 0;
+        int direction = BasePistonBlock.getDirection(meta);
+        if(extended)
         {
-            switch(i1)
+            switch(direction)
             {
                 case 0: // '\0'
                     renderBlocks.uvRotateEast = 3;
@@ -80,12 +80,12 @@ public class PistonBlockModel<T extends BasePistonBlock> extends StandardBlockMo
                     block.setBlockBounds(0.0F, 0.0F, 0.0F, 0.75F, 1.0F, 1.0F);
                     break;
             }
-            renderStandardBlock(tessellator, block, i, j, k);
+            renderStandardBlock(tessellator, block, x, y, z);
             resetRenderBlocks();
             block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
         } else
         {
-            switch(i1)
+            switch(direction)
             {
                 case 0: // '\0'
                     renderBlocks.uvRotateEast = 3;
@@ -120,7 +120,7 @@ public class PistonBlockModel<T extends BasePistonBlock> extends StandardBlockMo
                     renderBlocks.uvRotateBottom = 2;
                     break;
             }
-            renderStandardBlock(tessellator, block, i, j, k);
+            renderStandardBlock(tessellator, block, x, y, z);
             resetRenderBlocks();
         }
         return true;
diff --git a/src/main/java/net/minecraft/core/block/AxisAlignedBlock.java b/src/main/java/net/minecraft/core/block/AxisAlignedBlock.java
index d53abc802..07cc04736 100644
--- a/src/main/java/net/minecraft/core/block/AxisAlignedBlock.java
+++ b/src/main/java/net/minecraft/core/block/AxisAlignedBlock.java
@@ -19,6 +19,7 @@ public class AxisAlignedBlock extends Block {
 		
 		world.setBlockMetadataWithNotify(x, y, z, axisToMeta(axis));
 	}
+
 	public static int axisToMeta(Axis axis) {
 		if(axis == Axis.X) return 2;
 		if(axis == Axis.Z) return 1;
diff --git a/src/main/java/net/minecraft/core/block/Block.java b/src/main/java/net/minecraft/core/block/Block.java
index 8ec497308..26431f3ac 100644
--- a/src/main/java/net/minecraft/core/block/Block.java
+++ b/src/main/java/net/minecraft/core/block/Block.java
@@ -416,21 +416,18 @@ public class Block
 
     }
 
-    public boolean renderFullbright()
-    {
-        return false;
-    }
-
-    public float blockStrength(Player player)
+    public float blockStrength(World world, int x, int y, int z, Side side, Player player)
     {
         if(blockHardness < 0.0F)
         {
             return 0.0F;
         }
-        if(!player.canHarvestBlock(this))
+
+        if (!player.canHarvestBlock(this))
         {
             return 1.0F / blockHardness / 100F;
-        } else
+        }
+        else
         {
             return player.getCurrentPlayerStrVsBlock(this) / blockHardness / 30F;
         }
diff --git a/src/main/java/net/minecraft/core/block/Blocks.java b/src/main/java/net/minecraft/core/block/Blocks.java
index 92b38f0d2..794eba74b 100644
--- a/src/main/java/net/minecraft/core/block/Blocks.java
+++ b/src/main/java/net/minecraft/core/block/Blocks.java
@@ -164,6 +164,7 @@ public final class Blocks {
     public static Block GRAVEL;
 
     public static Block BEDROCK;
+    public static Block BONESHALE;
 
     public static Block FLUID_WATER_FLOWING;
     public static Block FLUID_WATER_STILL;
@@ -404,6 +405,7 @@ public final class Blocks {
     public static Block STAIRS_BRICK_NETHERRACK;
 
     public static Block SOULSAND;
+    public static Block SOULSCHIST;
 
     public static Block GLOWSTONE;
 
@@ -722,6 +724,8 @@ public final class Blocks {
             .withTags(BlockTags.MINEABLE_BY_SHOVEL);
 
         BEDROCK = new BedrockBlock("bedrock", "minecraft:block/bedrock", 260, Material.stone).withSound(BlockSounds.STONE).withSetUnbreakable().withBlastResistance(6000000F);
+        BONESHALE = new BoneShaleBlock("boneshale", "minecraft:block/boneshale", 261, Material.stone).withSound(BlockSounds.STONE).withHardness(16F).withBlastResistance(6000000F).withImmovableFlagSet()
+            .withTags(BlockTags.MINEABLE_BY_PICKAXE);
 
         FLUID_WATER_FLOWING = new FlowingFluidBlock("fluid.water.flowing", "minecraft:block/fluid_water_flowing", 270, Material.water).withHardness(100F).withLightBlock(3).withDisabledNeighborNotifyOnMetadataChange().withDisabledStats()
             .withTags(BlockTags.IS_WATER, BlockTags.PLACE_OVERWRITES, BlockTags.NOT_IN_CREATIVE_MENU);
@@ -1129,13 +1133,13 @@ public final class Blocks {
 
 
         COBBLE_NETHERRACK = new Block("cobble.netherrack", "minecraft:block/cobble_netherrack", 800, Material.netherrack).withSound(BlockSounds.STONE).withHardness(0.4F)
-            .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.INFINITE_BURN);
+            .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.INFINITE_BURN, BlockTags.CAVES_CUT_THROUGH);
         COBBLE_NETHERRACK_IGNEOUS = new Block("cobble.netherrack.igneous", "minecraft:block/cobble_netherrack_igneous", 801, Material.netherrack).withSound(BlockSounds.STONE).withHardness(1.25F).withBlastResistance(7F).withLightEmission(10)
             .withTags(BlockTags.MINEABLE_BY_PICKAXE);
         COBBLE_NETHERRACK_MOSSY = new Block("cobble.netherrack.mossy", "minecraft:block/cobble_netherrack_mossy", 802, Material.netherrack).withSound(BlockSounds.STONE).withHardness(0.4F)
             .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.INFINITE_BURN);
         NETHERRACK = new Block("netherrack", "minecraft:block/netherrack", 803, Material.netherrack).withSound(BlockSounds.STONE).withHardness(0.32F)
-            .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.INFINITE_BURN);
+            .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.INFINITE_BURN, BlockTags.CAVES_CUT_THROUGH);
         BRICK_NETHERRACK = new Block("brick.netherrack", "minecraft:block/brick_netherrack", 804, Material.netherrack).withSound(BlockSounds.STONE).withHardness(0.4F)
             .withTags(BlockTags.MINEABLE_BY_PICKAXE);
         SLAB_NETHERRACK_POLISHED = new SlabBlock(NETHERRACK_CARVED, "minecraft:block/slab_netherrack_polished", 805).withSound(BlockSounds.STONE).withHardness(0.4F)
@@ -1150,7 +1154,9 @@ public final class Blocks {
             .withTags(BlockTags.MINEABLE_BY_PICKAXE);
 
         SOULSAND = new SoulSandBlock("soulsand", "minecraft:block/soulsand", 810).withSound(BlockSounds.SAND).withHardness(0.5F).withOverrideColor(MaterialColor.paintedBrown)
-            .withTags(BlockTags.MINEABLE_BY_SHOVEL);
+            .withTags(BlockTags.MINEABLE_BY_SHOVEL, BlockTags.CAVES_CUT_THROUGH);
+        SOULSCHIST = new Block("soulschist", "minecraft:block/soulschist", 811, Material.stone).withSound(BlockSounds.STONE).withHardness(2.0F).withBlastResistance(10F).withOverrideColor(MaterialColor.paintedBrown)
+            .withTags(BlockTags.MINEABLE_BY_PICKAXE);
 
         GLOWSTONE = new GlowStoneBlock("glowstone", "minecraft:block/glowstone", 820, Material.stone).withSound(BlockSounds.GLASS).withHardness(0.3F).withLightEmission(1.0F).withOverrideColor(MaterialColor.paintedYellow)
             .withTags(BlockTags.MINEABLE_BY_PICKAXE);
diff --git a/src/main/java/net/minecraft/core/block/BoneShaleBlock.java b/src/main/java/net/minecraft/core/block/BoneShaleBlock.java
new file mode 100644
index 000000000..5a238ebcf
--- /dev/null
+++ b/src/main/java/net/minecraft/core/block/BoneShaleBlock.java
@@ -0,0 +1,32 @@
+package net.minecraft.core.block;
+
+import net.minecraft.core.block.material.Material;
+import net.minecraft.core.entity.player.Player;
+import net.minecraft.core.util.helper.Direction;
+import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.world.World;
+
+public class BoneShaleBlock extends FullRotatableBlock {
+    public BoneShaleBlock(String translationKey, String namespaceId, int id, Material material) {
+        super(translationKey, namespaceId, id, material);
+    }
+
+    @Override
+    public float blockStrength(World world, int x, int y, int z, Side side, Player player) {
+        float blockHardness = this.blockHardness;
+        final int meta = world.getBlockMetadata(x, y, z);
+        final Direction direction = FullRotatableBlock.metaToDirection(meta);
+        if (side != direction.getSide()) {
+            blockHardness *= 66.6f;
+        }
+
+        if (!player.canHarvestBlock(this))
+        {
+            return 1.0F / blockHardness / 30F;
+        }
+        else
+        {
+            return player.getCurrentPlayerStrVsBlock(this) / blockHardness / 30F;
+        }
+    }
+}
diff --git a/src/main/java/net/minecraft/core/block/FullRotatableBlock.java b/src/main/java/net/minecraft/core/block/FullRotatableBlock.java
new file mode 100644
index 000000000..4488c5f3e
--- /dev/null
+++ b/src/main/java/net/minecraft/core/block/FullRotatableBlock.java
@@ -0,0 +1,29 @@
+package net.minecraft.core.block;
+
+import net.minecraft.core.block.material.Material;
+import net.minecraft.core.entity.Mob;
+import net.minecraft.core.enums.PlacementMode;
+import net.minecraft.core.util.helper.Direction;
+import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.world.World;
+
+public abstract class FullRotatableBlock extends Block {
+    public FullRotatableBlock(String translationKey, String namespaceId, int id, Material material) {
+        super(translationKey, namespaceId, id, material);
+    }
+
+    @Override
+    public void onBlockPlacedByMob(World world, int x, int y, int z, Side side, Mob mob, double sideHeight) {
+        final Direction direction = mob.getPlacementDirection(side).getOpposite();
+
+        world.setBlockMetadataWithNotify(x, y, z, directionToMeta(direction));
+    }
+
+    public static int directionToMeta(Direction direction) {
+        return direction.getId() & 7;
+    }
+
+    public static Direction metaToDirection(int meta) {
+        return Direction.getDirectionById(meta & 7);
+    }
+}
diff --git a/src/main/java/net/minecraft/core/block/RotatableBlock.java b/src/main/java/net/minecraft/core/block/RotatableBlock.java
index ce6f92075..c48a984e8 100644
--- a/src/main/java/net/minecraft/core/block/RotatableBlock.java
+++ b/src/main/java/net/minecraft/core/block/RotatableBlock.java
@@ -10,34 +10,34 @@ public abstract class RotatableBlock extends Block{
         super(key, namespaceId, id, material);
     }
 
-    public void setDefaultDirection(World world, int i, int j, int k)
+    public void setDefaultDirection(World world, int x, int y, int z)
     {
         if(world.isClientSide)
         {
             return;
         }
-        int l = world.getBlockId(i, j, k - 1);
-        int i1 = world.getBlockId(i, j, k + 1);
-        int j1 = world.getBlockId(i - 1, j, k);
-        int k1 = world.getBlockId(i + 1, j, k);
+        int idNegZ = world.getBlockId(x, y, z - 1);
+        int idPosZ = world.getBlockId(x, y, z + 1);
+        int idNegX = world.getBlockId(x - 1, y, z);
+        int idPosX = world.getBlockId(x + 1, y, z);
         byte byte0 = 3;
-        if(Block.solid[l] && !Block.solid[i1])
+        if(Block.solid[idNegZ] && !Block.solid[idPosZ])
         {
             byte0 = 3;
         }
-        if(Block.solid[i1] && !Block.solid[l])
+        if(Block.solid[idPosZ] && !Block.solid[idNegZ])
         {
             byte0 = 2;
         }
-        if(Block.solid[j1] && !Block.solid[k1])
+        if(Block.solid[idNegX] && !Block.solid[idPosX])
         {
             byte0 = 5;
         }
-        if(Block.solid[k1] && !Block.solid[j1])
+        if(Block.solid[idPosX] && !Block.solid[idNegX])
         {
             byte0 = 4;
         }
-        world.setBlockMetadataWithNotify(i, j, k, byte0);
+        world.setBlockMetadataWithNotify(x, y, z, byte0);
     }
 
     public static int getOrientation(int i)
diff --git a/src/main/java/net/minecraft/core/block/tag/BlockTags.java b/src/main/java/net/minecraft/core/block/tag/BlockTags.java
index bbe98ef7c..aa2f3593b 100644
--- a/src/main/java/net/minecraft/core/block/tag/BlockTags.java
+++ b/src/main/java/net/minecraft/core/block/tag/BlockTags.java
@@ -1,7 +1,6 @@
 package net.minecraft.core.block.tag;
 
 import com.mojang.logging.LogUtils;
-import net.minecraft.core.Global;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.CactusBlock;
 import net.minecraft.core.block.ChainlinkFenceBlock;
@@ -22,6 +21,7 @@ import net.minecraft.core.item.tool.HoeToolItem;
 import net.minecraft.core.item.tool.PickaxeToolItem;
 import net.minecraft.core.item.tool.ShovelToolItem;
 import net.minecraft.core.item.tool.SwordToolItem;
+import net.minecraft.core.world.generate.CavesLargeFeature;
 import org.slf4j.Logger;
 
 import java.lang.reflect.Field;
@@ -116,11 +116,11 @@ public abstract class BlockTags
      */
     public static Tag<Block> SKATEABLE = Tag.of("skateable");
     /**
-     * Detects grass surface blocks so that {@link net.minecraft.core.world.generate.MapGenCaves MapGenCaves} can replace any exposed dirt with grass once it has finished generating a surface cave.
+     * Detects grass surface blocks so that {@link CavesLargeFeature MapGenCaves} can replace any exposed dirt with grass once it has finished generating a surface cave.
      */
     public static Tag<Block> CAVE_GEN_REPLACES_SURFACE = Tag.of("cave_gen_replaces_surface");
     /**
-     * Determines which blocks {@link net.minecraft.core.world.generate.MapGenCaves MapGenCaves} can cut through
+     * Determines which blocks {@link CavesLargeFeature MapGenCaves} can cut through
      */
     public static Tag<Block> CAVES_CUT_THROUGH = Tag.of("caves_cut_through");
     /**
diff --git a/src/main/java/net/minecraft/core/item/Item.java b/src/main/java/net/minecraft/core/item/Item.java
index b474f0da8..e5eca2bcb 100644
--- a/src/main/java/net/minecraft/core/item/Item.java
+++ b/src/main/java/net/minecraft/core/item/Item.java
@@ -215,7 +215,7 @@ public class Item implements ITaggable<Item>, IItemConvertible
     	return true;
     }
 
-    public boolean onBlockDestroyed(World world, ItemStack itemstack, int removedBlockId, int x, int y, int z, Side side, Mob entityliving)
+    public boolean onBlockDestroyed(World world, ItemStack itemstack, int removedBlockId, int x, int y, int z, Side side, Mob mob)
     {
         return false;
     }
diff --git a/src/main/java/net/minecraft/core/item/tool/HoeToolItem.java b/src/main/java/net/minecraft/core/item/tool/HoeToolItem.java
index 293c65566..26b47034b 100644
--- a/src/main/java/net/minecraft/core/item/tool/HoeToolItem.java
+++ b/src/main/java/net/minecraft/core/item/tool/HoeToolItem.java
@@ -67,21 +67,21 @@ public class HoeToolItem extends ToolItem
     }
     
     @Override
-    public boolean onBlockDestroyed(World world, ItemStack itemstack, int id, int x, int y, int z, Side side, Mob entity) {
-    	if(entity != null && !entity.world.isClientSide) {
+    public boolean onBlockDestroyed(World world, ItemStack itemstack, int id, int x, int y, int z, Side side, Mob mob) {
+    	if(mob != null && !mob.world.isClientSide) {
         	if(id == Blocks.TALLGRASS.id || id == Blocks.TALLGRASS_FERN.id) {
         		if(this.material.isSilkTouch()) {
-        			entity.world.dropItem(x, y, z, new ItemStack(Item.itemsList[id]));
-            		itemstack.damageItem(1, entity);
+        			mob.world.dropItem(x, y, z, new ItemStack(Item.itemsList[id]));
+            		itemstack.damageItem(1, mob);
         		}else {
-        			if(entity.world.rand.nextInt(4) == 0) {
-            			entity.world.dropItem(x, y, z, new ItemStack(Items.SEEDS_WHEAT));
-                		itemstack.damageItem(1, entity);	
+        			if(mob.world.rand.nextInt(4) == 0) {
+            			mob.world.dropItem(x, y, z, new ItemStack(Items.SEEDS_WHEAT));
+                		itemstack.damageItem(1, mob);
         			}
         		}
         	}
     	}
-    	return super.onBlockDestroyed(world, itemstack, id, x, y, z, side, entity);
+    	return super.onBlockDestroyed(world, itemstack, id, x, y, z, side, mob);
     }
 
 }
diff --git a/src/main/java/net/minecraft/core/item/tool/SwordToolItem.java b/src/main/java/net/minecraft/core/item/tool/SwordToolItem.java
index edfc7c33c..b71675049 100644
--- a/src/main/java/net/minecraft/core/item/tool/SwordToolItem.java
+++ b/src/main/java/net/minecraft/core/item/tool/SwordToolItem.java
@@ -41,12 +41,12 @@ public class SwordToolItem extends Item
     }
 
     @Override
-    public boolean onBlockDestroyed(World world, ItemStack itemstack, int i, int j, int k, int l, Side side, Mob entityliving)
+    public boolean onBlockDestroyed(World world, ItemStack itemstack, int i, int x, int y, int z, Side side, Mob mob)
     {
         Block block = Block.blocksList[i];
         if(block != null) {
             if(block.getHardness() > 0.0f || isSilkTouch()) {
-                itemstack.damageItem(2, entityliving);
+                itemstack.damageItem(2, mob);
             }
         }
         return true;
diff --git a/src/main/java/net/minecraft/core/item/tool/ToolItem.java b/src/main/java/net/minecraft/core/item/tool/ToolItem.java
index 9e6f61d77..36cd267a3 100644
--- a/src/main/java/net/minecraft/core/item/tool/ToolItem.java
+++ b/src/main/java/net/minecraft/core/item/tool/ToolItem.java
@@ -45,11 +45,11 @@ public class ToolItem extends Item
 	}
 
 	@Override
-	public boolean onBlockDestroyed(World world, ItemStack itemstack, int i, int j, int k, int l, Side side, Mob entityliving) {
+	public boolean onBlockDestroyed(World world, ItemStack itemstack, int i, int x, int y, int z, Side side, Mob mob) {
 		Block block = Block.blocksList[i];
 		if(block != null) {
 			if(block.getHardness() > 0.0f || isSilkTouch()) {
-				itemstack.damageItem(1, entityliving);
+				itemstack.damageItem(1, mob);
 			}
 		}
 		return true;
diff --git a/src/main/java/net/minecraft/core/world/generate/MapGenCaves.java b/src/main/java/net/minecraft/core/world/generate/CavesLargeFeature.java
similarity index 58%
rename from src/main/java/net/minecraft/core/world/generate/MapGenCaves.java
rename to src/main/java/net/minecraft/core/world/generate/CavesLargeFeature.java
index d6e237dcb..697fe5fe3 100644
--- a/src/main/java/net/minecraft/core/world/generate/MapGenCaves.java
+++ b/src/main/java/net/minecraft/core/world/generate/CavesLargeFeature.java
@@ -1,7 +1,5 @@
 package net.minecraft.core.world.generate;
 
-import java.util.Random;
-
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.tag.BlockTags;
@@ -12,83 +10,78 @@ import net.minecraft.core.world.chunk.Chunk;
 import net.minecraft.core.world.chunk.ChunkSection;
 import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
 
+import java.util.Random;
+
 // Referenced classes of package net.minecraft.src:
 //            MapGenBase, MathHelper, Block, GrassBlock,
 //            World
 
-public class MapGenCaves extends MapGenBase
-{
+public class CavesLargeFeature extends LargeFeature {
+    private final int minY;
+    private final int maxY;
 
-    public MapGenCaves(boolean isAlpha)
-    {
-        this.isAlpha = isAlpha;
+    public CavesLargeFeature() {
+        minY = 0;
+        maxY = Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y;
     }
 
-    private boolean isAlpha;
+    public CavesLargeFeature(int minY, int maxY) {
+        this.minY = minY;
+        this.maxY = maxY;
+    }
 
-    protected void generateHubRoom(long seed, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result, double blockX, double blockY,
-                                   double blockZ)
-    {
+    protected void generateHubRoom(long seed, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result, double blockX, double blockY, double blockZ) {
         generateCave(seed, baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, 1.0F + rand.nextFloat() * 6F, 0.0F, 0.0F, -1, -1, 0.5D);
     }
 
     protected void generateCave(long seed, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result, double blockX, double blockY,
-                                double blockZ, float initialRadius, float rotHor, float rotVer, int startPos, int endPos,
-                                double heightMod)
-    {
+                                double blockZ, float initialRadius, float yRot, float xRot, int startPos, int endPos,
+                                double heightMod) {
         double chunkMiddleX = baseChunkX * Chunk.CHUNK_SIZE_X + Chunk.CHUNK_SIZE_X / 2;
         double chunkMiddleZ = baseChunkZ * Chunk.CHUNK_SIZE_Z + Chunk.CHUNK_SIZE_Z / 2;
         float rotHorOffset = 0.0F;
         float rotVerOffset = 0.0F;
         Random random = new Random(seed);
-        if(endPos <= 0)
-        {
+        if (endPos <= 0) {
             int maxLength = radiusChunk * 16 - 16;
             endPos = maxLength - random.nextInt(maxLength / 4);
         }
         boolean noBranches = false;
-        if(startPos == -1)
-        {
+        if (startPos == -1) {
             startPos = endPos / 2;
             noBranches = true;
         }
         int branchPos = random.nextInt(endPos / 2) + endPos / 4;
         boolean sharpRotVer = random.nextInt(6) == 0;
-        for(; startPos < endPos; startPos++)
-        {
+        for (; startPos < endPos; startPos++) {
             double width = 1.5D + (MathHelper.sin((startPos * MathHelper.PI) / endPos) * initialRadius * 1.0F);
             double height = width * heightMod;
-            float xzScale = MathHelper.cos(rotVer);
-            float yOffset = MathHelper.sin(rotVer);
-            blockX += MathHelper.cos(rotHor) * xzScale;
+            float xzScale = MathHelper.cos(xRot);
+            float yOffset = MathHelper.sin(xRot);
+            blockX += MathHelper.cos(yRot) * xzScale;
             blockY += yOffset;
-            blockZ += MathHelper.sin(rotHor) * xzScale;
-            if(sharpRotVer)
-            {
-                rotVer *= 0.92F;
-            }
-            else
-            {
-                rotVer *= 0.7F;
-            }
-            rotVer += rotVerOffset * 0.1F;
-            rotHor += rotHorOffset * 0.1F;
+            blockZ += MathHelper.sin(yRot) * xzScale;
+            if (sharpRotVer) {
+                xRot *= 0.92F;
+            } else {
+                xRot *= 0.7F;
+            }
+            xRot += rotVerOffset * 0.1F;
+            yRot += rotHorOffset * 0.1F;
             rotVerOffset *= 0.9F;
             rotHorOffset *= 0.75F;
             rotVerOffset += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F;
             rotHorOffset += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4F;
 
             // Do adjacent branches if necessary
-            if(!noBranches && startPos == branchPos && initialRadius > 1.0F)
-            {
-                generateCave(random.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, random.nextFloat() * 0.5F + 0.5F, rotHor - MathHelper.PI / 2F, rotVer / 3F, startPos, endPos, 1.0D);
-                generateCave(random.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, random.nextFloat() * 0.5F + 0.5F, rotHor + MathHelper.PI / 2F, rotVer / 3F, startPos, endPos, 1.0D);
+            if (!noBranches && startPos == branchPos && initialRadius > 1.0F) {
+                generateCave(random.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, random.nextFloat() * 0.5F + 0.5F, yRot - MathHelper.PI / 2F, xRot / 3F, startPos, endPos, 1.0D);
+                generateCave(random.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, random.nextFloat() * 0.5F + 0.5F, yRot + MathHelper.PI / 2F, xRot / 3F, startPos, endPos, 1.0D);
                 return;
             }
 
             // Randomly skip a section
-            if(!noBranches && random.nextInt(4) == 0)
-            {
+            if (!noBranches && random.nextInt(4) == 0) {
                 continue;
             }
 
@@ -97,12 +90,10 @@ public class MapGenCaves extends MapGenBase
             double dzFromMiddle = blockZ - chunkMiddleZ;
             double length = endPos - startPos;
             double maxRadius = initialRadius + 2.0F + 16F;
-            if((dxFromMiddle * dxFromMiddle + dzFromMiddle * dzFromMiddle) - length * length > maxRadius * maxRadius)
-            {
+            if ((dxFromMiddle * dxFromMiddle + dzFromMiddle * dzFromMiddle) - length * length > maxRadius * maxRadius) {
                 return;
             }
-            if(blockX < chunkMiddleX - Chunk.CHUNK_SIZE_X - width * 2D || blockZ < chunkMiddleZ - Chunk.CHUNK_SIZE_Z - width * 2D || blockX > chunkMiddleX + Chunk.CHUNK_SIZE_X + width * 2D || blockZ > chunkMiddleZ + Chunk.CHUNK_SIZE_Z + width * 2D)
-            {
+            if (blockX < chunkMiddleX - Chunk.CHUNK_SIZE_X - width * 2D || blockZ < chunkMiddleZ - Chunk.CHUNK_SIZE_Z - width * 2D || blockX > chunkMiddleX + Chunk.CHUNK_SIZE_X + width * 2D || blockZ > chunkMiddleZ + Chunk.CHUNK_SIZE_Z + width * 2D) {
                 continue;
             }
 
@@ -113,104 +104,82 @@ public class MapGenCaves extends MapGenBase
             int maxY = MathHelper.floor(blockY + height) + 1;
             int minZ = MathHelper.floor(blockZ - width) - baseChunkZ * Chunk.CHUNK_SIZE_Z - 1;
             int maxZ = (MathHelper.floor(blockZ + width) - baseChunkZ * Chunk.CHUNK_SIZE_Z) + 1;
-            if(minX < 0)
-            {
+            if (minX < 0) {
                 minX = 0;
             }
-            if(maxX > Chunk.CHUNK_SIZE_X)
-            {
+            if (maxX > Chunk.CHUNK_SIZE_X) {
                 maxX = Chunk.CHUNK_SIZE_X;
             }
-            if(minY < 1)
-            {
-                minY = 1;
+            if (minY < this.minY + 1) {
+                minY = this.minY + 1;
             }
-            if(maxY > (Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y) - (ChunkSection.SECTION_SIZE_Y / 2))
-            {
-                maxY = (Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y) - (ChunkSection.SECTION_SIZE_Y / 2);
+            if (maxY > this.maxY - (ChunkSection.SECTION_SIZE_Y / 2)) {
+                maxY = this.maxY - (ChunkSection.SECTION_SIZE_Y / 2);
             }
-            if(minZ < 0)
-            {
+            if (minZ < 0) {
                 minZ = 0;
             }
-            if(maxZ > Chunk.CHUNK_SIZE_Z)
-            {
+            if (maxZ > Chunk.CHUNK_SIZE_Z) {
                 maxZ = Chunk.CHUNK_SIZE_Z;
             }
 
-            // Check if we've hit water - i.e. the ocean - and if so, stop generating
+            // Check if we've hit the ocean, and if so, stop generating
             boolean hasHitWater = false;
-            for(int x = minX; !hasHitWater && x < maxX; x++)
-            {
-                for(int z = minZ; !hasHitWater && z < maxZ; z++)
-                {
-                    for(int y = maxY + 1; !hasHitWater && y >= minY - 1; y--)
-                    {
+            for (int x = minX; !hasHitWater && x < maxX; x++) {
+                for (int z = minZ; !hasHitWater && z < maxZ; z++) {
+                    for (int y = maxY + 1; !hasHitWater && y >= minY - 1; y--) {
                         int blockId = result.getBlock(x, y, z);
 
-                        if(y < 0 || y >= (Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y))
-                        {
+                        if (y < this.minY || y >= this.maxY) {
                             continue;
                         }
-                        if(Block.hasTag(blockId, BlockTags.IS_WATER))
-                        {
+                        if (Block.hasTag(blockId, BlockTags.IS_WATER)) {
                             hasHitWater = true;
                         }
-                        if(y != minY - 1 && x != minX && x != maxX - 1 && z != minZ && z != maxZ - 1)
-                        {
+                        if (y != minY - 1 && x != minX && x != maxX - 1 && z != minZ && z != maxZ - 1) {
                             y = minY;
                         }
                     }
                 }
             }
-            if(hasHitWater)
-            {
+            if (hasHitWater) {
                 continue;
             }
 
             // Delete blocks in section
-            for(int x = minX; x < maxX; x++)
-            {
+            for (int x = minX; x < maxX; x++) {
                 double xPercentage = (((x + baseChunkX * Chunk.CHUNK_SIZE_X) + 0.5D) - blockX) / width;
-                zLabel: for(int z = minZ; z < maxZ; z++)
-                {
+                zLabel:
+                for (int z = minZ; z < maxZ; z++) {
                     double zPercentage = (((z + baseChunkZ * Chunk.CHUNK_SIZE_Z) + 0.5D) - blockZ) / width;
                     int yIndex = maxY;
                     boolean replaceTopBlock = false;
-                    if(xPercentage * xPercentage + zPercentage * zPercentage >= 1.0D)
-                    {
+                    if (xPercentage * xPercentage + zPercentage * zPercentage >= 1.0D) {
                         continue;
                     }
                     int y = maxY - 1;
-                    do
-                    {
-                        if(y < minY)
-                        {
+                    do {
+                        if (y < minY) {
                             continue zLabel;
                         }
                         double yPercentage = ((y + 0.5D) - blockY) / height;
-                        if(yPercentage > -0.7D && xPercentage * xPercentage + yPercentage * yPercentage + zPercentage * zPercentage < 1.0D)
-                        {
+                        if (yPercentage > -0.7D && xPercentage * xPercentage + yPercentage * yPercentage + zPercentage * zPercentage < 1.0D) {
                             int blockId = result.getBlock(x, yIndex, z);
-                            if(Block.hasTag(blockId, BlockTags.CAVE_GEN_REPLACES_SURFACE))
-                            {
+                            if (Block.hasTag(blockId, BlockTags.CAVE_GEN_REPLACES_SURFACE)) {
                                 replaceTopBlock = true;
                             }
-                            if(Block.hasTag(blockId, BlockTags.CAVES_CUT_THROUGH))
-                            {
-                                if(y < 10)
-                                {
+                            if (Block.hasTag(blockId, BlockTags.CAVES_CUT_THROUGH)) {
+                                if (y < 10) {
                                     result.setBlock(x, yIndex, z, Blocks.FLUID_LAVA_STILL.id);
-                                } else
-                                {
+                                } else {
                                     result.setBlock(x, yIndex, z, 0);
-                                    
-                                    if(replaceTopBlock) {
+
+                                    if (replaceTopBlock) {
                                         Biome biome = worldObj.getBlockBiome(x, yIndex - 1, z);
                                         int topBlockId = biome.topBlock;
                                         int fillBlockId = biome.fillerBlock;
                                         int id = result.getBlock(x, yIndex - 1, z);
-                                    	if(id == fillBlockId) {
+                                        if (id == fillBlockId) {
                                             result.setBlock(x, yIndex - 1, z, topBlockId);
                                         }
                                     }
@@ -219,45 +188,40 @@ public class MapGenCaves extends MapGenBase
                         }
                         yIndex--;
                         y--;
-                    } while(true);
+                    } while (true);
                 }
-
             }
 
-            if(noBranches)
-            {
+            if (noBranches) {
                 break;
             }
         }
-
     }
 
     @Override
-	protected void doGeneration(World world, int chunkX, int chunkZ, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result)
-    {
+    protected void doGeneration(World world, int chunkX, int chunkZ, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result) {
         int cavesToGenerate = rand.nextInt(rand.nextInt(rand.nextInt(40) + 1) + 1);
-        if(rand.nextInt(15) != 0)
-        {
+        if (rand.nextInt(15) != 0) {
             cavesToGenerate = 0;
         }
-        for(int i = 0; i < cavesToGenerate; i++)
-        {
+
+        final int yRange = maxY - minY;
+
+        for (int i = 0; i < cavesToGenerate; i++) {
             double blockX = chunkX * Chunk.CHUNK_SIZE_X + rand.nextInt(Chunk.CHUNK_SIZE_X);
-            double blockY = rand.nextInt(rand.nextInt((Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y) - 8) + 8);
+            double blockY = minY + rand.nextInt(rand.nextInt(yRange - (ChunkSection.SECTION_SIZE_Y / 2)) + (ChunkSection.SECTION_SIZE_Y / 2));
             double blockZ = chunkZ * Chunk.CHUNK_SIZE_Z + rand.nextInt(Chunk.CHUNK_SIZE_Z);
 
             int numBranches = 1;
-            if(rand.nextInt(4) == 0)
-            {
+            if (rand.nextInt(4) == 0) {
                 generateHubRoom(rand.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ);
                 numBranches += rand.nextInt(4);
             }
-            for(int l1 = 0; l1 < numBranches; l1++)
-            {
-                float f = rand.nextFloat() * MathHelper.PI * 2.0F; // 0 - 2Pi
-                float f1 = ((rand.nextFloat() - 0.5F) * 2.0F) / 8F; // -0.125 - 0.125
+            for (int l1 = 0; l1 < numBranches; l1++) {
+                float yRot = rand.nextFloat() * MathHelper.PI * 2.0F; // 0 - 2Pi
+                float xRot = ((rand.nextFloat() - 0.5F) * 2.0F) / 8F; // -0.125 - 0.125
                 float initialRadius = rand.nextFloat() * 2.0F + rand.nextFloat(); // 0 - 3
-                generateCave(rand.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, initialRadius, f, f1, 0, 0, 1.0f);
+                generateCave(rand.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, initialRadius, yRot, xRot, 0, 0, 1.0f);
             }
         }
     }
diff --git a/src/main/java/net/minecraft/core/world/generate/MapGenBase.java b/src/main/java/net/minecraft/core/world/generate/LargeFeature.java
similarity index 92%
rename from src/main/java/net/minecraft/core/world/generate/MapGenBase.java
rename to src/main/java/net/minecraft/core/world/generate/LargeFeature.java
index da9e31a53..82ca00f02 100644
--- a/src/main/java/net/minecraft/core/world/generate/MapGenBase.java
+++ b/src/main/java/net/minecraft/core/world/generate/LargeFeature.java
@@ -1,46 +1,45 @@
-package net.minecraft.core.world.generate;
-
-import net.minecraft.core.world.chunk.provider.IChunkProvider;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-
-import java.util.Random;
-
-// Referenced classes of package net.minecraft.src:
-//            World, IChunkProvider
-
-public class MapGenBase
-{
-
-    public MapGenBase()
-    {
-        radiusChunk = 8;
-    }
-
-    public void generate(World world, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result)
-    {
-        int radius = radiusChunk;
-        rand.setSeed(world.getRandomSeed());
-        worldObj = world;
-        long randX = (rand.nextLong() / 2L) * 2L + 1L;
-        long randZ = (rand.nextLong() / 2L) * 2L + 1L;
-        for(int chunkX = baseChunkX - radius; chunkX <= baseChunkX + radius; chunkX++)
-        {
-            for(int chunkZ = baseChunkZ - radius; chunkZ <= baseChunkZ + radius; chunkZ++)
-            {
-                rand.setSeed((long)chunkX * randX + (long)chunkZ * randZ ^ world.getRandomSeed());
-                doGeneration(world, chunkX, chunkZ, baseChunkX, baseChunkZ, result);
-            }
-
-        }
-
-    }
-
-    protected void doGeneration(World world, int chunkX, int chunkZ, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result)
-    {
-    }
-
-    protected int radiusChunk;
-    protected static Random rand = new Random();
-    protected World worldObj;
+package net.minecraft.core.world.generate;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+
+import java.util.Random;
+
+// Referenced classes of package net.minecraft.src:
+//            World, IChunkProvider
+
+public class LargeFeature
+{
+
+    public LargeFeature()
+    {
+        radiusChunk = 8;
+    }
+
+    public void generate(World world, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result)
+    {
+        int radius = radiusChunk;
+        rand.setSeed(world.getRandomSeed());
+        worldObj = world;
+        long randX = (rand.nextLong() / 2L) * 2L + 1L;
+        long randZ = (rand.nextLong() / 2L) * 2L + 1L;
+        for(int chunkX = baseChunkX - radius; chunkX <= baseChunkX + radius; chunkX++)
+        {
+            for(int chunkZ = baseChunkZ - radius; chunkZ <= baseChunkZ + radius; chunkZ++)
+            {
+                rand.setSeed((long)chunkX * randX + (long)chunkZ * randZ ^ world.getRandomSeed());
+                doGeneration(world, chunkX, chunkZ, baseChunkX, baseChunkZ, result);
+            }
+
+        }
+
+    }
+
+    protected void doGeneration(World world, int chunkX, int chunkZ, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result)
+    {
+    }
+
+    protected int radiusChunk;
+    protected static Random rand = new Random();
+    protected World worldObj;
 }
\ No newline at end of file
diff --git a/src/main/java/net/minecraft/core/world/generate/MapGenCavesHell.java b/src/main/java/net/minecraft/core/world/generate/MapGenCavesHell.java
deleted file mode 100644
index 402bd4299..000000000
--- a/src/main/java/net/minecraft/core/world/generate/MapGenCavesHell.java
+++ /dev/null
@@ -1,238 +0,0 @@
-package net.minecraft.core.world.generate;
-
-import net.minecraft.core.block.Block;
-import net.minecraft.core.block.tag.BlockTags;
-import net.minecraft.core.util.helper.MathHelper;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.chunk.ChunkSection;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-
-import java.util.Random;
-
-// Referenced classes of package net.minecraft.src:
-//            MapGenBase, MathHelper, Block, GrassBlock,
-//            World
-
-public class MapGenCavesHell extends MapGenBase
-{
-	public MapGenCavesHell()
-	{
-
-	}
-
-	protected void generateHubRoom(long seed, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result, double blockX, double blockY,
-								   double blockZ)
-	{
-		generateCave(seed, baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, 1.0F + rand.nextFloat() * 6F, 0.0F, 0.0F, -1, -1, 0.5D);
-	}
-
-	protected void generateCave(long seed, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result, double blockX, double blockY,
-								double blockZ, float initialRadius, float rotHor, float rotVer, int startPos, int endPos,
-								double heightMod)
-	{
-		double chunkMiddleX = baseChunkX * Chunk.CHUNK_SIZE_X + Chunk.CHUNK_SIZE_X / 2;
-		double chunkMiddleZ = baseChunkZ * Chunk.CHUNK_SIZE_Z + Chunk.CHUNK_SIZE_Z / 2;
-		float rotHorOffset = 0.0F;
-		float rotVerOffset = 0.0F;
-		Random random = new Random(seed);
-		if(endPos <= 0)
-		{
-			int maxLength = radiusChunk * 16 - 16;
-			endPos = maxLength - random.nextInt(maxLength / 4);
-		}
-		boolean noBranches = false;
-		if(startPos == -1)
-		{
-			startPos = endPos / 2;
-			noBranches = true;
-		}
-		int branchPos = random.nextInt(endPos / 2) + endPos / 4;
-		boolean sharpRotVer = random.nextInt(6) == 0;
-		for(; startPos < endPos; startPos++)
-		{
-			double width = 1.5D + (double)(MathHelper.sin(((float)startPos * MathHelper.PI) / (float)endPos) * initialRadius * 1.0F);
-			double height = width * heightMod;
-			float xzScale = MathHelper.cos(rotVer);
-			float yOffset = MathHelper.sin(rotVer);
-			blockX += MathHelper.cos(rotHor) * xzScale;
-			blockY += yOffset;
-			blockZ += MathHelper.sin(rotHor) * xzScale;
-			if(sharpRotVer)
-			{
-				rotVer *= 0.92F;
-			}
-			else
-			{
-				rotVer *= 0.7F;
-			}
-			rotVer += rotVerOffset * 0.1F;
-			rotHor += rotHorOffset * 0.1F;
-			rotVerOffset *= 0.9F;
-			rotHorOffset *= 0.75F;
-			rotVerOffset += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F;
-			rotHorOffset += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4F;
-
-			// Do adjacent branches if necessary
-			if(!noBranches && startPos == branchPos && initialRadius > 1.0F)
-			{
-				generateCave(random.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, random.nextFloat() * 0.5F + 0.5F, rotHor - MathHelper.PI / 2F, rotVer / 3F, startPos, endPos, 1.0D);
-				generateCave(random.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, random.nextFloat() * 0.5F + 0.5F, rotHor + MathHelper.PI / 2F, rotVer / 3F, startPos, endPos, 1.0D);
-				return;
-			}
-
-			// Randomly skip a section
-			if(!noBranches && random.nextInt(4) == 0)
-			{
-				continue;
-			}
-
-			// Check if we've gone far enough, and stop if so
-			double dxFromMiddle = blockX - chunkMiddleX;
-			double dzFromMiddle = blockZ - chunkMiddleZ;
-			double length = endPos - startPos;
-			double maxRadius = initialRadius + 2.0F + 16F;
-			if((dxFromMiddle * dxFromMiddle + dzFromMiddle * dzFromMiddle) - length * length > maxRadius * maxRadius)
-			{
-				return;
-			}
-			if(blockX < chunkMiddleX - Chunk.CHUNK_SIZE_X - width * 2D || blockZ < chunkMiddleZ - Chunk.CHUNK_SIZE_Z - width * 2D || blockX > chunkMiddleX + Chunk.CHUNK_SIZE_X + width * 2D || blockZ > chunkMiddleZ + Chunk.CHUNK_SIZE_Z + width * 2D)
-			{
-				continue;
-			}
-
-			// Determine sizes of current section
-			int minX = MathHelper.floor(blockX - width) - baseChunkX * Chunk.CHUNK_SIZE_X - 1;
-			int maxX = (MathHelper.floor(blockX + width) - baseChunkX * Chunk.CHUNK_SIZE_X) + 1;
-			int minY = MathHelper.floor(blockY - height) - 1;
-			int maxY = MathHelper.floor(blockY + height) + 1;
-			int minZ = MathHelper.floor(blockZ - width) - baseChunkZ * Chunk.CHUNK_SIZE_Z - 1;
-			int maxZ = (MathHelper.floor(blockZ + width) - baseChunkZ * Chunk.CHUNK_SIZE_Z) + 1;
-			if(minX < 0)
-			{
-				minX = 0;
-			}
-			if(maxX > Chunk.CHUNK_SIZE_X)
-			{
-				maxX = Chunk.CHUNK_SIZE_X;
-			}
-			if(minY < 1)
-			{
-				minY = 1;
-			}
-			if(maxY > (Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y) - 8)
-			{
-				maxY = (Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y) - 8;
-			}
-			if(minZ < 0)
-			{
-				minZ = 0;
-			}
-			if(maxZ > Chunk.CHUNK_SIZE_Z)
-			{
-				maxZ = Chunk.CHUNK_SIZE_Z;
-			}
-
-			// Check if we've hit water - i.e. the ocean - and if so, stop generating
-			boolean hasHitLava = false;
-			for(int x = minX; !hasHitLava && x < maxX; x++)
-			{
-				for(int z = minZ; !hasHitLava && z < maxZ; z++)
-				{
-					for(int y = maxY + 1; !hasHitLava && y >= minY - 1; y--)
-					{
-						int blockId = result.getBlock(x, y, z);
-
-						if(y < 0 || y >= (Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y))
-						{
-							continue;
-						}
-						if(Block.hasTag(blockId, BlockTags.IS_LAVA))
-						{
-							hasHitLava = true;
-						}
-						if(y != minY - 1 && x != minX && x != maxX - 1 && z != minZ && z != maxZ - 1)
-						{
-							y = minY;
-						}
-					}
-				}
-			}
-			if(hasHitLava)
-			{
-				continue;
-			}
-
-			// Delete blocks in section
-			for(int x = minX; x < maxX; x++)
-			{
-				double xPercentage = (((double)(x + baseChunkX * Chunk.CHUNK_SIZE_X) + 0.5D) - blockX) / width;
-				zLabel: for(int z = minZ; z < maxZ; z++)
-				{
-					double zPercentage = (((double)(z + baseChunkZ * Chunk.CHUNK_SIZE_Z) + 0.5D) - blockZ) / width;
-					int yIndex = maxY;
-					if(xPercentage * xPercentage + zPercentage * zPercentage >= 1.0D)
-					{
-						continue;
-					}
-					int y = maxY - 1;
-					do
-					{
-						if(y < minY)
-						{
-							continue zLabel;
-						}
-						double yPercentage = (((double)y + 0.5D) - blockY) / height;
-						if(yPercentage > -0.7D && xPercentage * xPercentage + yPercentage * yPercentage + zPercentage * zPercentage < 1.0D)
-						{
-							int blockId = result.getBlock(x, yIndex, z);
-							if(Block.hasTag(blockId, BlockTags.CAVES_CUT_THROUGH))
-							{
-								result.setBlock(x, yIndex, z, 0);
-							}
-						}
-						yIndex--;
-						y--;
-					} while(true);
-				}
-
-			}
-
-			if(noBranches)
-			{
-				break;
-			}
-		}
-
-	}
-
-	@Override
-	protected void doGeneration(World world, int chunkX, int chunkZ, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result)
-	{
-		int cavesToGenerate = rand.nextInt(rand.nextInt(rand.nextInt(40) + 1) + 1);
-		if(rand.nextInt(15) != 0)
-		{
-			cavesToGenerate = 0;
-		}
-		for(int i = 0; i < cavesToGenerate; i++)
-		{
-			double blockX = chunkX * Chunk.CHUNK_SIZE_X + rand.nextInt(Chunk.CHUNK_SIZE_X);
-			double blockY = rand.nextInt(rand.nextInt((Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y) - 8) + 8);
-			double blockZ = chunkZ * Chunk.CHUNK_SIZE_Z + rand.nextInt(Chunk.CHUNK_SIZE_Z);
-
-			int numBranches = 1;
-			if(rand.nextInt(4) == 0)
-			{
-				generateHubRoom(rand.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ);
-				numBranches += rand.nextInt(4);
-			}
-			for(int l1 = 0; l1 < numBranches; l1++)
-			{
-				float f = rand.nextFloat() * MathHelper.PI * 2.0F; // 0 - 2Pi
-				float f1 = ((rand.nextFloat() - 0.5F) * 2.0F) / 8F; // -0.125 - 0.125
-				float initialRadius = rand.nextFloat() * 2.0F + rand.nextFloat(); // 0 - 3
-				generateCave(rand.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, initialRadius, f, f1, 0, 0, 1.0f);
-			}
-		}
-	}
-}
diff --git a/src/main/java/net/minecraft/core/world/generate/WarrensCavesLargeFeature.java b/src/main/java/net/minecraft/core/world/generate/WarrensCavesLargeFeature.java
new file mode 100644
index 000000000..5fb6aa9c6
--- /dev/null
+++ b/src/main/java/net/minecraft/core/world/generate/WarrensCavesLargeFeature.java
@@ -0,0 +1,228 @@
+package net.minecraft.core.world.generate;
+
+import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.block.tag.BlockTags;
+import net.minecraft.core.util.helper.MathHelper;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.biome.Biome;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.chunk.ChunkSection;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+
+import java.util.Random;
+
+// Referenced classes of package net.minecraft.src:
+//            MapGenBase, MathHelper, Block, GrassBlock,
+//            World
+
+public class WarrensCavesLargeFeature extends LargeFeature {
+    private final int minY;
+    private final int maxY;
+
+    public WarrensCavesLargeFeature() {
+        minY = 0;
+        maxY = Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y;
+    }
+
+    public WarrensCavesLargeFeature(int minY, int maxY) {
+        this.minY = minY;
+        this.maxY = maxY;
+    }
+
+    protected void generateHubRoom(long seed, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result, double blockX, double blockY, double blockZ) {
+        generateCave(seed, baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, 1.0F + rand.nextFloat() * 6F, 0.0F, 0.0F, -1, -1, 0.5D);
+    }
+
+    protected void generateCave(long seed, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result, double blockX, double blockY,
+                                double blockZ, float initialRadius, float yRot, float xRot, int startPos, int endPos,
+                                double heightMod) {
+        double chunkMiddleX = baseChunkX * Chunk.CHUNK_SIZE_X + Chunk.CHUNK_SIZE_X / 2;
+        double chunkMiddleZ = baseChunkZ * Chunk.CHUNK_SIZE_Z + Chunk.CHUNK_SIZE_Z / 2;
+        float rotHorOffset = 0.0F;
+        float rotVerOffset = 0.0F;
+        Random random = new Random(seed);
+        if (endPos <= 0) {
+            int maxLength = radiusChunk * 24 - 16;
+            endPos = maxLength - random.nextInt(maxLength / 8);
+        }
+        final boolean noRotate = random.nextInt(32) == 0;
+        if (noRotate) {
+            yRot = (yRot / (MathHelper.PI * 2)) * 4;
+            yRot = Math.round(yRot);
+            yRot = yRot * (MathHelper.PI * 2) / 4;
+//            xRot = (xRot / (MathHelper.PI * 2)) * 4;
+//            xRot = Math.round(xRot);
+//            xRot = xRot * (MathHelper.PI * 2) / 4;
+        }
+        int branchPos = random.nextInt(endPos / 2) + endPos / 4;
+        boolean sharpRotVer = random.nextInt(6) == 0;
+        for (; startPos < endPos; startPos++) {
+            double width = 1.5D + (MathHelper.sin((startPos * MathHelper.PI) / endPos) * initialRadius * 1.0F);
+            double height = width * heightMod;
+            float xzScale = MathHelper.cos(xRot);
+            float yOffset = MathHelper.sin(xRot);
+            blockX += MathHelper.cos(yRot) * xzScale;
+            blockY += yOffset;
+            blockZ += MathHelper.sin(yRot) * xzScale;
+
+            if (!noRotate) {
+                if (sharpRotVer) {
+                    xRot *= 0.92F;
+                } else {
+                    xRot *= 0.7F;
+                }
+                xRot += rotVerOffset * 0.1F;
+                yRot += rotHorOffset * 0.1F;
+                rotVerOffset *= 0.9F;
+                rotHorOffset *= 0.75F;
+                rotVerOffset += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F;
+                rotHorOffset += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4F;
+
+                final int flip = random.nextInt(5);
+                if (flip == 0) {
+                    yRot = -yRot;
+                }
+//                } else if (flip == 1) {
+//                    xRot = -xRot;
+//                }
+                final int addRandom = random.nextInt(4);
+                if (addRandom == 0) {
+                    yRot += random.nextFloat() * MathHelper.PI - MathHelper.PI / 2;
+                }
+//                } else if (addRandom == 1) {
+//                    xRot += random.nextFloat() * MathHelper.PI - MathHelper.PI / 2;
+//                }
+            }
+
+            // Do adjacent branches if necessary
+            if (startPos == branchPos && initialRadius > 1.0F) {
+                generateCave(random.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, random.nextFloat() * 0.5F + 0.5F, yRot - MathHelper.PI / 2F, xRot / 3F, startPos, endPos, 1.0D);
+                generateCave(random.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, random.nextFloat() * 0.5F + 0.5F, yRot + MathHelper.PI / 2F, xRot / 3F, startPos, endPos, 1.0D);
+                return;
+            }
+
+            // Randomly skip a section
+            if (random.nextInt(4) == 0) {
+                continue;
+            }
+
+            // Check if we've gone far enough, and stop if so
+            double dxFromMiddle = blockX - chunkMiddleX;
+            double dzFromMiddle = blockZ - chunkMiddleZ;
+            double length = endPos - startPos;
+            double maxRadius = initialRadius + 2.0F + 16F;
+            if ((dxFromMiddle * dxFromMiddle + dzFromMiddle * dzFromMiddle) - length * length > maxRadius * maxRadius) {
+                return;
+            }
+            if (blockX < chunkMiddleX - Chunk.CHUNK_SIZE_X - width * 2D || blockZ < chunkMiddleZ - Chunk.CHUNK_SIZE_Z - width * 2D || blockX > chunkMiddleX + Chunk.CHUNK_SIZE_X + width * 2D || blockZ > chunkMiddleZ + Chunk.CHUNK_SIZE_Z + width * 2D) {
+                continue;
+            }
+
+            // Determine sizes of current section
+            int minX = MathHelper.floor(blockX - width) - baseChunkX * Chunk.CHUNK_SIZE_X - 1;
+            int maxX = (MathHelper.floor(blockX + width) - baseChunkX * Chunk.CHUNK_SIZE_X) + 1;
+            int minY = MathHelper.floor(blockY - height) - 1;
+            int maxY = MathHelper.floor(blockY + height) + 1;
+            int minZ = MathHelper.floor(blockZ - width) - baseChunkZ * Chunk.CHUNK_SIZE_Z - 1;
+            int maxZ = (MathHelper.floor(blockZ + width) - baseChunkZ * Chunk.CHUNK_SIZE_Z) + 1;
+            if (minX < 0) {
+                minX = 0;
+            }
+            if (maxX > Chunk.CHUNK_SIZE_X) {
+                maxX = Chunk.CHUNK_SIZE_X;
+            }
+            if (minY < this.minY + 1) {
+                minY = this.minY + 1;
+            }
+            if (maxY > this.maxY - (ChunkSection.SECTION_SIZE_Y / 2)) {
+                maxY = this.maxY - (ChunkSection.SECTION_SIZE_Y / 2);
+            }
+            if (minZ < 0) {
+                minZ = 0;
+            }
+            if (maxZ > Chunk.CHUNK_SIZE_Z) {
+                maxZ = Chunk.CHUNK_SIZE_Z;
+            }
+
+            // Check if we've hit the ocean, and if so, stop generating
+            boolean hasHitWater = false;
+            for (int x = minX; !hasHitWater && x < maxX; x++) {
+                for (int z = minZ; !hasHitWater && z < maxZ; z++) {
+                    for (int y = maxY + 1; !hasHitWater && y >= minY - 1; y--) {
+                        int blockId = result.getBlock(x, y, z);
+
+                        if (y < this.minY || y >= this.maxY) {
+                            continue;
+                        }
+                        if (Block.hasTag(blockId, BlockTags.IS_WATER)) {
+                            hasHitWater = true;
+                        }
+                        if (y != minY - 1 && x != minX && x != maxX - 1 && z != minZ && z != maxZ - 1) {
+                            y = minY;
+                        }
+                    }
+                }
+            }
+            if (hasHitWater) {
+                continue;
+            }
+
+            // Delete blocks in section
+            for (int x = minX; x < maxX; x++) {
+                double xPercentage = (((x + baseChunkX * Chunk.CHUNK_SIZE_X) + 0.5D) - blockX) / width;
+                zLabel:
+                for (int z = minZ; z < maxZ; z++) {
+                    double zPercentage = (((z + baseChunkZ * Chunk.CHUNK_SIZE_Z) + 0.5D) - blockZ) / width;
+                    int yIndex = maxY;
+                    if (xPercentage * xPercentage + zPercentage * zPercentage >= 1.0D) {
+                        continue;
+                    }
+                    int y = maxY - 1;
+                    do {
+                        if (y < minY) {
+                            continue zLabel;
+                        }
+                        double yPercentage = ((y + 0.5D) - blockY) / height;
+                        if (yPercentage > -0.7D && xPercentage * xPercentage + yPercentage * yPercentage + zPercentage * zPercentage < 1.0D) {
+                            int blockId = result.getBlock(x, yIndex, z);
+                            if (blockId == Blocks.SOULSCHIST.id) {
+                                result.setBlock(x, yIndex, z, 0);
+                            }
+                        }
+                        yIndex--;
+                        y--;
+                    } while (true);
+                }
+            }
+        }
+    }
+
+    @Override
+    protected void doGeneration(World world, int chunkX, int chunkZ, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result) {
+        int cavesToGenerate = rand.nextInt(rand.nextInt(rand.nextInt(100) + 1) + 1);
+        if (rand.nextInt(15) != 0) {
+            cavesToGenerate = 0;
+        }
+
+        final int yRange = maxY - minY;
+
+        for (int i = 0; i < cavesToGenerate; i++) {
+            double blockX = chunkX * Chunk.CHUNK_SIZE_X + rand.nextInt(Chunk.CHUNK_SIZE_X);
+            double blockY = minY + rand.nextInt(rand.nextInt(yRange - (ChunkSection.SECTION_SIZE_Y / 2)) + (ChunkSection.SECTION_SIZE_Y / 2));
+            double blockZ = chunkZ * Chunk.CHUNK_SIZE_Z + rand.nextInt(Chunk.CHUNK_SIZE_Z);
+
+            int numBranches = 1;
+            if (rand.nextInt(4) == 0) {
+                generateHubRoom(rand.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ);
+                numBranches += rand.nextInt(4);
+            }
+            for (int l1 = 0; l1 < numBranches; l1++) {
+                float yRot = rand.nextFloat() * MathHelper.PI * 2.0F; // 0 - 2Pi
+                float xRot = ((rand.nextFloat() - 0.5F) * 2.0F) / 8F; // -0.125 - 0.125
+                float initialRadius = rand.nextFloat() * 1.5f + rand.nextFloat(); // 0 - 3
+                generateCave(rand.nextLong(), baseChunkX, baseChunkZ, result, blockX, blockY, blockZ, initialRadius, yRot, xRot, 0, 0, 1.0f);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/classic/ChunkGeneratorClassic.java b/src/main/java/net/minecraft/core/world/generate/chunk/classic/ChunkGeneratorClassic.java
index 2028ff1f4..78d293c46 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/classic/ChunkGeneratorClassic.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/classic/ChunkGeneratorClassic.java
@@ -1,10 +1,9 @@
 package net.minecraft.core.world.generate.chunk.classic;
 
-import net.minecraft.core.block.Block;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.MapGenCaves;
+import net.minecraft.core.world.generate.CavesLargeFeature;
 import net.minecraft.core.world.generate.chunk.ChunkGenerator;
 import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
 import net.minecraft.core.world.generate.chunk.perlin.SurfaceGenerator;
@@ -24,7 +23,7 @@ public class ChunkGeneratorClassic
     private final PerlinNoise octavesB;
 
     private final SurfaceGenerator sg;
-    private final MapGenCaves cg;
+    private final CavesLargeFeature cg;
 
     public ChunkGeneratorClassic(World world)
     {
@@ -40,7 +39,7 @@ public class ChunkGeneratorClassic
         octavesB = new PerlinNoise(seed, 8, 70);
 
         sg = new SurfaceGeneratorOverworldRetro(world);
-        cg = new MapGenCaves(true);
+        cg = new CavesLargeFeature();
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/indev/ChunkGeneratorIndev.java b/src/main/java/net/minecraft/core/world/generate/chunk/indev/ChunkGeneratorIndev.java
index 0fed457a1..83aaa3447 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/indev/ChunkGeneratorIndev.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/indev/ChunkGeneratorIndev.java
@@ -1,10 +1,9 @@
 package net.minecraft.core.world.generate.chunk.indev;
 
-import net.minecraft.core.block.Block;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.MapGenCaves;
+import net.minecraft.core.world.generate.CavesLargeFeature;
 import net.minecraft.core.world.generate.chunk.ChunkGenerator;
 import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
 import net.minecraft.core.world.generate.chunk.perlin.SurfaceGenerator;
@@ -16,7 +15,7 @@ public class ChunkGeneratorIndev
 {
     private final LevelGenerator lg;
     private final SurfaceGenerator sg;
-    private final MapGenCaves cg;
+    private final CavesLargeFeature cg;
 
     public ChunkGeneratorIndev(World world, int sizeX, int sizeY, int sizeZ, IndevWorldType worldType, IndevWorldTheme worldTheme)
     {
@@ -24,7 +23,7 @@ public class ChunkGeneratorIndev
 
         lg = new LevelGenerator(sizeX, sizeY, sizeZ, worldType, worldTheme);
         sg = new SurfaceGeneratorOverworldRetro(world);
-        cg = new MapGenCaves(true);
+        cg = new CavesLargeFeature();
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/ChunkGeneratorPerlin.java b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/ChunkGeneratorPerlin.java
index 8480755cf..da5c5d75c 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/ChunkGeneratorPerlin.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/ChunkGeneratorPerlin.java
@@ -2,11 +2,14 @@ package net.minecraft.core.world.generate.chunk.perlin;
 
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.MapGenBase;
+import net.minecraft.core.world.generate.LargeFeature;
 import net.minecraft.core.world.generate.chunk.ChunkDecorator;
 import net.minecraft.core.world.generate.chunk.ChunkGenerator;
 import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * This class provides basic functionality to generate a {@link Chunk chunk} using 3-dimensional Perlin noise.
  */
@@ -15,15 +18,15 @@ public class ChunkGeneratorPerlin
 {
     private final TerrainGenerator terrainGenerator;
     private final SurfaceGenerator surfaceGenerator;
-    private final MapGenBase cavesGenerator;
+    private final List<LargeFeature> largeFeatures;
 
-    protected ChunkGeneratorPerlin(World world, ChunkDecorator decorator, TerrainGenerator terrainGenerator, SurfaceGenerator surfaceGenerator, MapGenBase cavesGenerator)
+    protected ChunkGeneratorPerlin(World world, ChunkDecorator decorator, TerrainGenerator terrainGenerator, SurfaceGenerator surfaceGenerator, LargeFeature[] largeFeatures)
     {
         super(world, decorator);
 
         this.terrainGenerator = terrainGenerator;
         this.surfaceGenerator = surfaceGenerator;
-        this.cavesGenerator = cavesGenerator;
+        this.largeFeatures = Arrays.asList(largeFeatures);
     }
 
     @Override
@@ -32,7 +35,9 @@ public class ChunkGeneratorPerlin
         double[] densityMap = terrainGenerator.getDensityGenerator().generateDensityMap(chunk);
         ChunkGeneratorResult result = terrainGenerator.generateTerrain(chunk, densityMap);
         surfaceGenerator.generateSurface(chunk, result);
-        cavesGenerator.generate(world, chunk.xPosition, chunk.zPosition, result);
+        for (LargeFeature largeFeature : largeFeatures) {
+            largeFeature.generate(world, chunk.xPosition, chunk.zPosition, result);
+        }
 
         return result;
     }
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkGeneratorNether.java b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkGeneratorNether.java
index c663ee506..df70b1d23 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkGeneratorNether.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkGeneratorNether.java
@@ -1,18 +1,16 @@
 package net.minecraft.core.world.generate.chunk.perlin.nether;
 
 import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.MapGenCavesHell;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
+import net.minecraft.core.world.generate.WarrensCavesLargeFeature;
 import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
-import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
-import net.minecraft.core.world.generate.chunk.perlin.SurfaceGenerator;
-import net.minecraft.core.world.generate.chunk.perlin.TerrainGenerator;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.TerrainGeneratorOverworld;
 
 public class ChunkGeneratorNether
     extends ChunkGeneratorPerlin
 {
     public ChunkGeneratorNether(World world)
     {
-        super(world, new ChunkDecoratorNether(world), new TerrainGeneratorNether(world), new SurfaceGeneratorNether(world), new MapGenCavesHell());
+        super(world, new ChunkDecoratorNether(world), new TerrainGeneratorNether(world), new SurfaceGeneratorNether(world), new LargeFeature[] { new CavesLargeFeature(128, 256), new WarrensCavesLargeFeature(0, 128) });
     }
 }
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/TerrainGeneratorNether.java b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/TerrainGeneratorNether.java
index 0a902d2de..b7b17333d 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/TerrainGeneratorNether.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/TerrainGeneratorNether.java
@@ -23,20 +23,29 @@ public class TerrainGeneratorNether
     protected int getBlockAt(int x, int y, int z, double density)
     {
         WorldType type = world.getWorldType();
+        int halfHeight = type.getMaxY() / 2;
 
         if (y >= type.getMaxY() - rand.nextInt(5))
         {
             return Blocks.BEDROCK.id;
         }
+        else if (y >= halfHeight - rand.nextInt(5) && y <= halfHeight + 5 - rand.nextInt(5))
+        {
+            return Blocks.BONESHALE.id;
+        }
         else if (y <= type.getMinY() + rand.nextInt(5))
         {
             return Blocks.BEDROCK.id;
         }
+        else if (y <= halfHeight)
+        {
+            return Blocks.SOULSCHIST.id;
+        }
         else if (density > 0.0)
         {
             return type.getFillerBlockId();
         }
-        else if (y >= type.getMinY() && y < type.getMinY() + type.getOceanY())
+        else if (y >= halfHeight && y < type.getOceanY())
         {
             return type.getOceanBlockId();
         }
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkGeneratorOverworld.java b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkGeneratorOverworld.java
index 374c64227..fc86a3ab8 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkGeneratorOverworld.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkGeneratorOverworld.java
@@ -1,7 +1,8 @@
 package net.minecraft.core.world.generate.chunk.perlin.overworld;
 
 import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.MapGenCaves;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
 import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
 
 public class ChunkGeneratorOverworld
@@ -9,6 +10,6 @@ public class ChunkGeneratorOverworld
 {
     public ChunkGeneratorOverworld(World world)
     {
-        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new MapGenCaves(false));
+        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
     }
 }
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/floating/ChunkGeneratorOverworldFloating.java b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/floating/ChunkGeneratorOverworldFloating.java
index 13a916bb6..290bd0d8f 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/floating/ChunkGeneratorOverworldFloating.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/floating/ChunkGeneratorOverworldFloating.java
@@ -1,12 +1,9 @@
 package net.minecraft.core.world.generate.chunk.perlin.overworld.floating;
 
 import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.MapGenBase;
-import net.minecraft.core.world.generate.MapGenCaves;
-import net.minecraft.core.world.generate.chunk.ChunkDecorator;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
 import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
-import net.minecraft.core.world.generate.chunk.perlin.SurfaceGenerator;
-import net.minecraft.core.world.generate.chunk.perlin.TerrainGenerator;
 import net.minecraft.core.world.generate.chunk.perlin.overworld.ChunkDecoratorOverworld;
 import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
 import net.minecraft.core.world.generate.chunk.perlin.paradise.TerrainGeneratorParadise;
@@ -16,6 +13,6 @@ public class ChunkGeneratorOverworldFloating
 {
     public ChunkGeneratorOverworldFloating(World world)
     {
-        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorParadise(world), new SurfaceGeneratorOverworld(world), new MapGenCaves(false));
+        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorParadise(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
     }
 }
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkGeneratorOverworldHell.java b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkGeneratorOverworldHell.java
index 9896fc84c..2aba0f926 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkGeneratorOverworldHell.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkGeneratorOverworldHell.java
@@ -1,13 +1,9 @@
 package net.minecraft.core.world.generate.chunk.perlin.overworld.hell;
 
 import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.MapGenBase;
-import net.minecraft.core.world.generate.MapGenCaves;
-import net.minecraft.core.world.generate.chunk.ChunkDecorator;
-import net.minecraft.core.world.generate.chunk.ChunkGenerator;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
 import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
-import net.minecraft.core.world.generate.chunk.perlin.SurfaceGenerator;
-import net.minecraft.core.world.generate.chunk.perlin.TerrainGenerator;
 import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
 import net.minecraft.core.world.generate.chunk.perlin.overworld.TerrainGeneratorOverworld;
 
@@ -17,6 +13,6 @@ public class ChunkGeneratorOverworldHell
 
     public ChunkGeneratorOverworldHell(World world)
     {
-        super(world, new ChunkDecoratorOverworldHell(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new MapGenCaves(false));
+        super(world, new ChunkDecoratorOverworldHell(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
     }
 }
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkGeneratorOverworldRetro.java b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkGeneratorOverworldRetro.java
index 503aba5cc..118166f8b 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkGeneratorOverworldRetro.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkGeneratorOverworldRetro.java
@@ -1,13 +1,9 @@
 package net.minecraft.core.world.generate.chunk.perlin.overworld.retro;
 
 import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.MapGenBase;
-import net.minecraft.core.world.generate.MapGenCaves;
-import net.minecraft.core.world.generate.chunk.ChunkDecorator;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
 import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
-import net.minecraft.core.world.generate.chunk.perlin.SurfaceGenerator;
-import net.minecraft.core.world.generate.chunk.perlin.TerrainGenerator;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.TerrainGeneratorOverworld;
 
 public class ChunkGeneratorOverworldRetro
     extends ChunkGeneratorPerlin
@@ -19,7 +15,7 @@ public class ChunkGeneratorOverworldRetro
               new ChunkDecoratorOverworldRetro(world),
               new TerrainGeneratorOverworldRetro(world),
               new SurfaceGeneratorOverworldRetro(world),
-              new MapGenCaves(true)
+              new LargeFeature[] { new CavesLargeFeature() }
         );
     }
 }
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkGeneratorOverworldWoods.java b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkGeneratorOverworldWoods.java
index eb6935279..0014d4d9a 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkGeneratorOverworldWoods.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkGeneratorOverworldWoods.java
@@ -1,7 +1,8 @@
 package net.minecraft.core.world.generate.chunk.perlin.overworld.woods;
 
 import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.MapGenCaves;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
 import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
 import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
 import net.minecraft.core.world.generate.chunk.perlin.overworld.TerrainGeneratorOverworld;
@@ -11,6 +12,6 @@ public class ChunkGeneratorOverworldWoods
 {
     public ChunkGeneratorOverworldWoods(World world)
     {
-        super(world, new ChunkDecoratorOverworldWoods(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new MapGenCaves(false));
+        super(world, new ChunkDecoratorOverworldWoods(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
     }
 }
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/ChunkGeneratorParadise.java b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/ChunkGeneratorParadise.java
index c91bc7a6e..dc967fac1 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/ChunkGeneratorParadise.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/ChunkGeneratorParadise.java
@@ -1,7 +1,8 @@
 package net.minecraft.core.world.generate.chunk.perlin.paradise;
 
 import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.MapGenCaves;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
 import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
 import net.minecraft.core.world.generate.chunk.perlin.overworld.ChunkDecoratorOverworld;
 import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
@@ -11,6 +12,6 @@ public class ChunkGeneratorParadise
 {
     public ChunkGeneratorParadise(World world)
     {
-        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorParadise(world), new SurfaceGeneratorOverworld(world), new MapGenCaves(false));
+        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorParadise(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
     }
 }
diff --git a/src/main/java/net/minecraft/core/world/type/nether/WorldTypeNether.java b/src/main/java/net/minecraft/core/world/type/nether/WorldTypeNether.java
index 118103f9a..bd3849c11 100644
--- a/src/main/java/net/minecraft/core/world/type/nether/WorldTypeNether.java
+++ b/src/main/java/net/minecraft/core/world/type/nether/WorldTypeNether.java
@@ -26,7 +26,7 @@ public class WorldTypeNether
                 .noClouds()
                 .noSky()
                 .withCeiling()
-                .bounds(128, 255, 32);
+                .bounds(0, 255, 128 + 32);
     }
 
     private static float[] getLightRamp() {
diff --git a/src/main/java/net/minecraft/server/world/ServerPlayerController.java b/src/main/java/net/minecraft/server/world/ServerPlayerController.java
index 7bfd0f723..b94708763 100644
--- a/src/main/java/net/minecraft/server/world/ServerPlayerController.java
+++ b/src/main/java/net/minecraft/server/world/ServerPlayerController.java
@@ -35,7 +35,7 @@ public class ServerPlayerController
             if(j != 0)
             {
                 Block block = Block.blocksList[j];
-                float f = block.blockStrength(player) * (float)(i + 1);
+                float f = block.blockStrength(thisWorld, destroyX, destroyY, destroyZ, destroySide, player) * (float)(i + 1);
                 if(f >= 1.0F)
                 {
                     destroyBlock = false;
@@ -55,7 +55,7 @@ public class ServerPlayerController
 		}
 		blockHitTicks = ticksRan;
 		Block block = thisWorld.getBlock(x, y, z);
-		if(block != null && block.blockStrength(player) >= 1.0F) {
+		if(block != null && block.blockStrength(thisWorld, x, y, z, side, player) >= 1.0F) {
 			mineBlock(x, y, z, side);
 		} else {
 			currentlyMiningX = x;
@@ -81,7 +81,7 @@ public class ServerPlayerController
             if(i1 != 0)
             {
                 Block block = Block.blocksList[i1];
-                float f = block.blockStrength(player) * (float)(l + 1);
+                float f = block.blockStrength(thisWorld, x, y, z, side, player) * (float)(l + 1);
                 if(f >= 0.7F)
                 {
                     return mineBlock(x, y, z, side);
diff --git a/src/main/resources/assets/minecraft/textures/block/bone_shale_bottom.png b/src/main/resources/assets/minecraft/textures/block/bone_shale_bottom.png
new file mode 100644
index 000000000..0f887ae20
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/bone_shale_bottom.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/bone_shale_side.png b/src/main/resources/assets/minecraft/textures/block/bone_shale_side.png
new file mode 100644
index 000000000..f190bdefc
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/bone_shale_side.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/bone_shale_top.png b/src/main/resources/assets/minecraft/textures/block/bone_shale_top.png
new file mode 100644
index 000000000..01dcf4fd8
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/bone_shale_top.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/soulschist.png b/src/main/resources/assets/minecraft/textures/block/soulschist.png
new file mode 100644
index 000000000..a6f46741f
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/soulschist.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/soulslate.png b/src/main/resources/assets/minecraft/textures/block/soulslate.png
deleted file mode 100644
index 7489805bb..000000000
Binary files a/src/main/resources/assets/minecraft/textures/block/soulslate.png and /dev/null differ
