diff --git a/build.gradle.kts b/build.gradle.kts
index 39f707195..939b23104 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -10,7 +10,7 @@ plugins {
 }
 
 group = "net.minecraft"
-version = "7.2"
+version = "7.2 Prerelease 1"
 val buildChannel = "PRERELEASE"
 
 run {
diff --git a/src/common/resources/lang/en_US/item.lang b/src/common/resources/lang/en_US/item.lang
index 8c5c11543..3f8f8fc72 100644
--- a/src/common/resources/lang/en_US/item.lang
+++ b/src/common/resources/lang/en_US/item.lang
@@ -411,9 +411,6 @@ item.door.oak.painted.white.desc=Every house needs one.
 item.door.glass.name=Glass Door
 item.door.glass.desc=Great for aesthetics, terrible for privacy.
 
-item.door.glass.tinted.name=Tinted Glass Door
-item.door.glass.tinted.desc=Okay for aesthetics, okay for privacy.
-
 item.rope.name=Rope
 item.rope.desc=Strong enough to climb.
 
diff --git a/src/common/resources/lang/en_US/options.lang b/src/common/resources/lang/en_US/options.lang
index 8e933da01..416cee6b3 100644
--- a/src/common/resources/lang/en_US/options.lang
+++ b/src/common/resources/lang/en_US/options.lang
@@ -219,5 +219,4 @@ key.sprint=Sprint (if enabled)
 key.toggleDebug=Toggle Debug
 key.toggleOverlay=Toggle Overlays
 key.sortInventory=Sort Inventory
-key.pickAmmo=Pick Ammo
 key.disabled=Disabled
diff --git a/src/common/resources/lang/en_US/tile.lang b/src/common/resources/lang/en_US/tile.lang
index 6ba55f040..e8260893e 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.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.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.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.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.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.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.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.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.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.trapdoor.glass.tinted.name=Tinted Glass Trapdoor
tile.trapdoor.glass.tinted.desc=Blocks out the sun.

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.netherrack.name=Netherrack
tile.netherrack.desc=Dark red rock that burns forever.
tile.netherrack.igneous.name=Igneous Netherrack
tile.netherrack.igneous.desc=Extreme heat has made this rock glow from inside.

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.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=Glass Top Door
tile.door.glass.top.desc=You shouldn't be seeing this.
tile.door.glass.bottom.name=Glass Bottom Door
tile.door.glass.bottom.desc=And that's not just because it's glass.

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

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.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.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.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.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.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.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.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.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.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.netherrack.name=Netherrack
tile.netherrack.desc=Dark red rock that burns forever.
tile.netherrack.igneous.name=Igneous Netherrack
tile.netherrack.igneous.desc=Extreme heat has made this rock glow from inside.

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.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=Glass Top Door
tile.door.glass.top.desc=You shouldn't be seeing this.
tile.door.glass.bottom.name=Glass Bottom Door
tile.door.glass.bottom.desc=And that's not just because it's glass.

tile.rope.name=Rope
tile.rope.desc=Rope, rope, rope your boat.
\ No newline at end of file
diff --git a/src/common/resources/recipes/workbench.json b/src/common/resources/recipes/workbench.json
index 5abd6d63f..47af3b748 100644
--- a/src/common/resources/recipes/workbench.json
+++ b/src/common/resources/recipes/workbench.json
@@ -6904,30 +6904,6 @@
     },
     "consumeContainers": true
   },
-  {
-    "name": "minecraft:workbench/tinted_glass_trapdoor",
-    "type": "minecraft:crafting/shaped",
-    "pattern": [
-      "###",
-      "###"
-    ],
-    "symbols": [
-      {
-        "symbol": "#",
-        "stack": {
-          "key": "tile.glass.tinted",
-          "amount": 1,
-          "meta": 0
-        }
-      }
-    ],
-    "result": {
-      "key": "tile.trapdoor.glass.tinted",
-      "amount": 6,
-      "meta": 0
-    },
-    "consumeContainers": true
-  },
   {
     "name": "minecraft:workbench/tnt",
     "type": "minecraft:crafting/shaped",
@@ -11546,31 +11522,6 @@
     },
     "consumeContainers": true
   },
-  {
-    "name": "minecraft:workbench/tinted_glass_door",
-    "type": "minecraft:crafting/shaped",
-    "pattern": [
-      "##",
-      "##",
-      "##"
-    ],
-    "symbols": [
-      {
-        "symbol": "#",
-        "stack": {
-          "key": "tile.glass.tinted",
-          "amount": 1,
-          "meta": 0
-        }
-      }
-    ],
-    "result": {
-      "key": "item.door.glass.tinted",
-      "amount": 2,
-      "meta": 0
-    },
-    "consumeContainers": true
-  },
   {
     "name": "minecraft:workbench/brazier",
     "type": "minecraft:crafting/shaped",
diff --git a/src/main/java/net/minecraft/client/Minecraft.java b/src/main/java/net/minecraft/client/Minecraft.java
index 59e147c3b..026e55214 100644
--- a/src/main/java/net/minecraft/client/Minecraft.java
+++ b/src/main/java/net/minecraft/client/Minecraft.java
@@ -8,8 +8,6 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Random;
 
-import net.minecraft.client.gui.hud.AmmoPickerComponent;
-import net.minecraft.client.gui.hud.HudComponents;
 import org.lwjgl.LWJGLException;
 import org.lwjgl.input.Keyboard;
 import org.lwjgl.input.Mouse;
@@ -228,6 +226,7 @@ public class Minecraft
      * Do not display the ingame crash handler until this is set to true
      */
     private boolean gameStarted = false;
+    private int mojrand = new Random(System.currentTimeMillis()).nextInt(200);
     
     public Minecraft(GameWindow gameWindow)
     {
@@ -555,8 +554,7 @@ public class Minecraft
         glEnable(3553 /*GL_TEXTURE_2D*/);
         glDisable(2912 /*GL_FOG*/);
         
-        Random mojrand = new Random();
-        if(mojrand.nextInt(200) == 0)
+        if(mojrand == 0)
             glBindTexture(3553 /*GL_TEXTURE_2D*/, renderEngine.getTexture("/title/majonk.png"));
         else
             glBindTexture(3553 /*GL_TEXTURE_2D*/, renderEngine.getTexture("/title/mojang.png"));
@@ -1277,10 +1275,7 @@ public class Minecraft
                         	thePlayer.setFlySpeed(newSpeed);
                         	ingameGUI.guiHeldItemTooltip.setOptionNameAndValueString(gameSettings.flightSpeed);
                         }
-                        else if (gameSettings.keyPickAmmo.isPressed()) {
-                            thePlayer.pickAmmo(scrollDelta);
-                        }
-                        else if (!gameSettings.keyZoom.isPressed() && !gameSettings.keyPickAmmo.isPressed())
+                        else if (!gameSettings.keyZoom.isPressed())
                         {
                             thePlayer.inventory.changeCurrentItem(scrollDelta);
                         }
@@ -1488,10 +1483,6 @@ public class Minecraft
                 }
             }
 
-            if (gameSettings.keyPickAmmo.isPressed()) {
-                ((AmmoPickerComponent) HudComponents.AMMO_PICKER).show();
-            }
-
             boolean breakBlockPressed = gameSettings.keyAttack.isPressed() || (controllerInput != null && controllerInput.buttonZR.isPressed());
             boolean placeBlockPressed = gameSettings.keyInteract.isPressed() || (controllerInput != null && controllerInput.buttonZL.isPressed());
 
@@ -2085,7 +2076,9 @@ public class Minecraft
             loadingScreen.progressStop();
         }
         worldRenderer.lightmapHelper.setup();
-        Colorizers.update(true);
+        if(theWorld != null) {
+        	Colorizers.update(true);	
+        }
     }
 
     private void convertSaveVersion(int fromVersion, String worldDirName, String worldName)
diff --git a/src/main/java/net/minecraft/client/entity/player/EntityPlayerSP.java b/src/main/java/net/minecraft/client/entity/player/EntityPlayerSP.java
index 89503edee..a250cf302 100644
--- a/src/main/java/net/minecraft/client/entity/player/EntityPlayerSP.java
+++ b/src/main/java/net/minecraft/client/entity/player/EntityPlayerSP.java
@@ -33,8 +33,6 @@ import net.minecraft.core.block.entity.TileEntityTrommel;
 import net.minecraft.core.data.gamerule.GameRules;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.player.EntityPlayer;
-import net.minecraft.core.item.IAmmoPickable;
-import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.net.command.ClientCommandHandler;
 import net.minecraft.core.net.command.ClientPlayerCommandSender;
@@ -398,28 +396,6 @@ public class EntityPlayerSP extends EntityPlayer
         	messageHistory.remove(0);
         }
     }
-
-    public void pickAmmo(int offset) {
-        if (offset == 0) return;
-        if (offset < 0) offset = -1;
-        if (offset > 0) offset = 1;
-
-        ItemStack stack = mc.thePlayer.getHeldItem();
-        if (stack == null) return;
-
-        Item item = stack.getItem();
-        if (!(item instanceof IAmmoPickable)) return;
-
-        IAmmoPickable pickable = (IAmmoPickable) item;
-        List<ItemStack> ammoTypes = pickable.getPresentAmmoTypes(this);
-
-        int pickedIndex = ammoTypes.indexOf(pickable.getPickedAmmoType(stack));
-        int newIndex = pickedIndex + offset;
-        if (newIndex < 0) newIndex = ammoTypes.size() - 1;
-        if (newIndex >= ammoTypes.size()) newIndex = 0;
-
-        pickable.setPickedAmmoType(stack, ammoTypes.get(newIndex));
-    }
     
     @Override
     public boolean isSneaking()
diff --git a/src/main/java/net/minecraft/client/gui/GuiSelectWorld.java b/src/main/java/net/minecraft/client/gui/GuiSelectWorld.java
index 8e8bdf468..78f3237d0 100644
--- a/src/main/java/net/minecraft/client/gui/GuiSelectWorld.java
+++ b/src/main/java/net/minecraft/client/gui/GuiSelectWorld.java
@@ -2,17 +2,25 @@ package net.minecraft.client.gui;
 
 import net.minecraft.client.gui.popup.GuiPopup;
 import net.minecraft.client.gui.popup.PopupBuilder;
+import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.Global;
+import net.minecraft.core.net.command.TextFormatting;
+import net.minecraft.core.player.gamemode.Gamemode;
+import net.minecraft.core.world.save.DimensionData;
 import net.minecraft.core.world.save.ISaveFormat;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.client.player.controller.PlayerControllerSP;
+import net.minecraft.core.world.save.LevelData;
 import net.minecraft.core.world.save.SaveFile;
 import net.minecraft.core.lang.I18n;
+import net.minecraft.core.world.type.WorldType;
 import org.lwjgl.input.Keyboard;
 
+import java.security.Key;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 
 public class GuiSelectWorld extends GuiScreen
@@ -50,10 +58,27 @@ public class GuiSelectWorld extends GuiScreen
             stringConversion = i18n.translateKey("gui.select_world.label.outdated");
         }
         loadSaves();
-        worldSlotContainer = new GuiWorldSlot(this);
+        worldSlotContainer = new GuiWorldSlot();
         initButtons();
     }
 
+    @Override
+    public void keyTyped(char c, int key, int mouseX, int mouseY) {
+        if (key == Keyboard.KEY_UP) {
+            if (selectedWorld > 0) {
+                worldSlotContainer.selectItem(selectedWorld - 1, false);
+            }
+        }
+        if (key == Keyboard.KEY_DOWN) {
+            if (selectedWorld < saveList.size() - 1) {
+                worldSlotContainer.selectItem(selectedWorld + 1, false);
+            }
+        }
+        if (key == Keyboard.KEY_DELETE) {
+            tryDeleteWorld(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT));
+        }
+    }
+
     private void loadSaves()
     {
         ISaveFormat isaveformat = mc.getSaveFormat();
@@ -108,6 +133,36 @@ public class GuiSelectWorld extends GuiScreen
         }
     }
 
+    void tryDeleteWorld(boolean skipConfirm) {
+        if (selectedWorld < 0 || selectedWorld >= saveList.size()) return;
+        String s = getSaveName(selectedWorld);
+        if(s != null)
+        {
+            deleting = true;
+            if (skipConfirm) {
+                deleteWorld(true, selectedWorld);
+            } else {
+                I18n i18n = I18n.getInstance();
+                GuiPopup popup = new PopupBuilder(this, 250)
+                    .closeOnEsc(0)
+                    .withLabel("gui.select_world.label.delete_title")
+                    .withLabel("gui.select_world.label.delete_confirm.1")
+                    .withLabelLiteral(i18n.translateKeyAndFormat("gui.select_world.label.delete_confirm.2", s))
+                    .withLabelLiteral("")
+                    .withButtonGroup("endButtons", new String[] { "gui.select_world.button.delete", "gui.select_world.button.cancel" }, new int[] { 1, 0 })
+                    .withOnCloseListener((statusCode, results) -> {
+                        if (statusCode == 1)
+                        {
+                            deleteWorld(true, selectedWorld);
+                        }
+                    })
+                    .build();
+                mc.displayGuiScreen(popup);
+            }
+        }
+
+    }
+
     @Override
     protected void buttonPressed(GuiButton button)
     {
@@ -117,31 +172,7 @@ public class GuiSelectWorld extends GuiScreen
         }
         if(button.id == 2)
         {
-            String s = getSaveName(selectedWorld);
-            if(s != null)
-            {
-                deleting = true;
-                if (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)) {
-                    deleteWorld(true, selectedWorld);
-                } else {
-                    I18n i18n = I18n.getInstance();
-                    GuiPopup popup = new PopupBuilder(this, 250)
-                        .closeOnEsc(0)
-                        .withLabel("gui.select_world.label.delete_title")
-                        .withLabel("gui.select_world.label.delete_confirm.1")
-                        .withLabelLiteral(i18n.translateKeyAndFormat("gui.select_world.label.delete_confirm.2", s))
-                        .withLabelLiteral("")
-                        .withButtonGroup("endButtons", new String[] { "gui.select_world.button.delete", "gui.select_world.button.cancel" }, new int[] { 1, 0 })
-                        .withOnCloseListener((statusCode, results) -> {
-                            if (statusCode == 1)
-                            {
-                                deleteWorld(true, selectedWorld);
-                            }
-                        })
-                        .build();
-                    mc.displayGuiScreen(popup);
-                }
-            }
+            tryDeleteWorld(false);
         }
         else if(button.id == 1)
         {
@@ -181,7 +212,7 @@ public class GuiSelectWorld extends GuiScreen
 
     public void selectWorld(int i)
     {
-        SaveFile save = getSaveList(this).get(i);
+        SaveFile save = saveList.get(i);
         if (save.getNeedsConversion() && Global.DISABLE_OLD_WORLDS)
         {
             return;
@@ -228,48 +259,88 @@ public class GuiSelectWorld extends GuiScreen
         super.drawScreen(mouseX, mouseY, partialTick);
     }
 
-    static List<SaveFile> getSaveList(GuiSelectWorld gui)
-    {
-        return gui.saveList;
-    }
-
-    static int setSelectedWorld(GuiSelectWorld gui, int i)
+    class GuiWorldSlot extends ScrolledSelectionList
     {
-        return gui.selectedWorld = i;
-    }
+        public GuiWorldSlot()
+        {
+            super(mc, width, height, 32, height - 64, 36);
+        }
 
-    static int getSelectedWorld(GuiSelectWorld gui)
-    {
-        return gui.selectedWorld;
-    }
+        @Override
+        protected int getItemCount()
+        {
+            return saveList.size();
+        }
 
-    static GuiButton getSelectButton(GuiSelectWorld gui)
-    {
-        return gui.buttonSelect;
-    }
+        @Override
+        protected void selectItem(int itemIndex, boolean doubleClicked)
+        {
+            selectedWorld = itemIndex;
+            boolean flag1 = selectedWorld >= 0 && selectedWorld < getItemCount();
+            buttonSelect.enabled = flag1;
+            buttonRename.enabled = flag1;
+            buttonDelete.enabled = flag1;
+            if(doubleClicked && flag1)
+            {
+                selectWorld(itemIndex);
+            }
+        }
 
-    static GuiButton getRenameButton(GuiSelectWorld gui)
-    {
-        return gui.buttonRename;
-    }
+        @Override
+        protected boolean isSelectedItem(int itemIndex)
+        {
+            return itemIndex == selectedWorld;
+        }
 
-    static GuiButton getDeleteButton(GuiSelectWorld gui)
-    {
-        return gui.buttonDelete;
-    }
+        @Override
+        protected int getMaxPosition()
+        {
+            return saveList.size() * 36;
+        }
 
-    static String getStringWorld(GuiSelectWorld gui)
-    {
-        return gui.stringWorld;
-    }
+        @Override
+        protected void renderHoleBackground()
+        {
+            drawDefaultBackground();
+        }
 
-    static DateFormat getDateFormatter(GuiSelectWorld gui)
-    {
-        return gui.dateFormatter;
-    }
+        @Override
+        protected void renderItem(int index, int x, int y, int height, Tessellator tessellator)
+        {
+            I18n i18n = I18n.getInstance();
+            SaveFile saveFile = saveList.get(index);
+            String s = saveFile.getDisplayName();
+            if(s == null || MathHelper.stringNullOrLengthZero(s))
+            {
+                s = i18n.translateKeyAndFormat(stringWorld, index + 1);
+            }
+            String s1 = saveFile.getFileName();
+            s1 = s1 + " (" + dateFormatter.format(new Date(saveFile.getLastTimePlayed()));
+            long l1 = saveFile.getSizeOnDisk();
+            s1 = s1 + ", " + (float) (((l1 / 1024L) * 100L) / 1024L) / 100F + " MB)";
+            String s2 = "";
+            if(saveFile.getNeedsConversion())
+            {
+                s2 = stringConversion + " " + s2;
+            }
+            else
+            {
+                LevelData ld = saveFile.getLevelData();
+                DimensionData dd = saveFile.getDimensionData()[0];
+                I18n st = I18n.getInstance();
+                s2 += st.translateNameKey(Gamemode.gamemodesList[ld.getGamemode()].getLanguageKey());
+                if (ld.getCheatsEnabled()) s2 += " | " + st.translateKey("gui.select_world.label.cheats");
+                WorldType worldType = dd.getWorldType();
+                if (worldType != null) {
+                    s2 += " | " + st.translateNameKey(dd.getWorldType().getLanguageKey());
+                } else {
+                    s2 += " | " + TextFormatting.RED + st.translateKey("gui.select_world.label.unknown");
+                }
+            }
 
-    static String getStringConversion(GuiSelectWorld gui)
-    {
-        return gui.stringConversion;
+            drawString(fontRenderer, s, x + 2, y + 1, 0xffffff);
+            drawString(fontRenderer, s1, x + 2, y + 12, 0x808080);
+            drawString(fontRenderer, s2, x + 2, y + 12 + 10, 0x808080);
+        }
     }
 }
diff --git a/src/main/java/net/minecraft/client/gui/GuiSwitchButton.java b/src/main/java/net/minecraft/client/gui/GuiSwitchButton.java
index 17d69129c..bb5fcce88 100644
--- a/src/main/java/net/minecraft/client/gui/GuiSwitchButton.java
+++ b/src/main/java/net/minecraft/client/gui/GuiSwitchButton.java
@@ -54,7 +54,7 @@ public class GuiSwitchButton
         FontRenderer fontrenderer = mc.fontRenderer;
         boolean mouseOver = mouseX >= xPosition && mouseY >= yPosition && mouseX < xPosition + width && mouseY < yPosition + height;
         int state = getButtonState(mouseOver);
-        int xBar = on ? width / 3 : 0;
+        int xBar = on ? (width / 3) + 1 : 0;
 
         GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/gui.png"));
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
diff --git a/src/main/java/net/minecraft/client/gui/GuiWorldSlot.java b/src/main/java/net/minecraft/client/gui/GuiWorldSlot.java
deleted file mode 100644
index c3ff3ae56..000000000
--- a/src/main/java/net/minecraft/client/gui/GuiWorldSlot.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package net.minecraft.client.gui;
-
-import net.minecraft.core.net.command.TextFormatting;
-import net.minecraft.core.util.helper.MathHelper;
-import net.minecraft.client.render.tessellator.Tessellator;
-import net.minecraft.core.lang.I18n;
-import net.minecraft.core.player.gamemode.Gamemode;
-import net.minecraft.core.world.save.DimensionData;
-import net.minecraft.core.world.save.LevelData;
-import net.minecraft.core.world.save.SaveFile;
-import net.minecraft.core.world.type.WorldType;
-
-import java.util.Date;
-
-// Referenced classes of package net.minecraft.src:
-//            GuiSlot, GuiSelectWorld, GuiButton, SaveFormatComparator, 
-//            MathHelper, Tessellator
-
-class GuiWorldSlot extends ScrolledSelectionList
-{
-
-
-    public GuiWorldSlot(GuiSelectWorld guiselectworld)
-    {
-        super(guiselectworld.mc, guiselectworld.width, guiselectworld.height, 32, guiselectworld.height - 64, 36);
-        parentWorldGui = guiselectworld;
-    }
-
-    @Override
-	protected int getItemCount()
-    {
-        return GuiSelectWorld.getSaveList(parentWorldGui).size();
-    }
-
-    @Override
-	protected void selectItem(int itemIndex, boolean doubleClicked)
-    {
-        GuiSelectWorld.setSelectedWorld(parentWorldGui, itemIndex);
-        boolean flag1 = GuiSelectWorld.getSelectedWorld(parentWorldGui) >= 0 && GuiSelectWorld.getSelectedWorld(parentWorldGui) < getItemCount();
-        GuiSelectWorld.getSelectButton(parentWorldGui).enabled = flag1;
-        GuiSelectWorld.getRenameButton(parentWorldGui).enabled = flag1;
-        GuiSelectWorld.getDeleteButton(parentWorldGui).enabled = flag1;
-        if(doubleClicked && flag1)
-        {
-            parentWorldGui.selectWorld(itemIndex);
-        }
-    }
-
-    @Override
-	protected boolean isSelectedItem(int itemIndex)
-    {
-        return itemIndex == GuiSelectWorld.getSelectedWorld(parentWorldGui);
-    }
-
-    @Override
-	protected int getMaxPosition()
-    {
-        return GuiSelectWorld.getSaveList(parentWorldGui).size() * 36;
-    }
-
-    @Override
-	protected void renderHoleBackground()
-    {
-        parentWorldGui.drawDefaultBackground();
-    }
-
-    @Override
-	protected void renderItem(int index, int x, int y, int height, Tessellator tessellator)
-    {
-        I18n i18n = I18n.getInstance();
-        SaveFile saveFile = GuiSelectWorld.getSaveList(parentWorldGui).get(index);
-        String s = saveFile.getDisplayName();
-        if(s == null || MathHelper.stringNullOrLengthZero(s))
-        {
-            s = i18n.translateKeyAndFormat(GuiSelectWorld.getStringWorld(parentWorldGui), index + 1);
-        }
-        String s1 = saveFile.getFileName();
-        s1 = s1 + " (" + GuiSelectWorld.getDateFormatter(parentWorldGui).format(new Date(saveFile.getLastTimePlayed()));
-        long l1 = saveFile.getSizeOnDisk();
-        s1 = s1 + ", " + (float) (((l1 / 1024L) * 100L) / 1024L) / 100F + " MB)";
-        String s2 = "";
-        if(saveFile.getNeedsConversion())
-        {
-            s2 = GuiSelectWorld.getStringConversion(parentWorldGui) + " " + s2;
-        }
-        else
-        {
-        	LevelData ld = saveFile.getLevelData();
-            DimensionData dd = saveFile.getDimensionData()[0];
-        	I18n st = I18n.getInstance();
-        	s2 += st.translateNameKey(Gamemode.gamemodesList[ld.getGamemode()].getLanguageKey());
-        	if (ld.getCheatsEnabled()) s2 += " | " + st.translateKey("gui.select_world.label.cheats");
-            WorldType worldType = dd.getWorldType();
-            if (worldType != null) {
-                s2 += " | " + st.translateNameKey(dd.getWorldType().getLanguageKey());
-            } else {
-                s2 += " | " + TextFormatting.RED + st.translateKey("gui.select_world.label.unknown");
-            }
-        }
-
-        parentWorldGui.drawString(parentWorldGui.fontRenderer, s, x + 2, y + 1, 0xffffff);
-        parentWorldGui.drawString(parentWorldGui.fontRenderer, s1, x + 2, y + 12, 0x808080);
-        parentWorldGui.drawString(parentWorldGui.fontRenderer, s2, x + 2, y + 12 + 10, 0x808080);
-    }
-
-    final GuiSelectWorld parentWorldGui; /* synthetic field */
-}
diff --git a/src/main/java/net/minecraft/client/gui/hud/AmmoPickerComponent.java b/src/main/java/net/minecraft/client/gui/hud/AmmoPickerComponent.java
deleted file mode 100644
index 86b4cdf25..000000000
--- a/src/main/java/net/minecraft/client/gui/hud/AmmoPickerComponent.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package net.minecraft.client.gui.hud;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.Gui;
-import net.minecraft.client.gui.GuiIngame;
-import net.minecraft.client.render.Lighting;
-import net.minecraft.client.render.item.model.ItemModel;
-import net.minecraft.client.render.item.model.ItemModelDispatcher;
-import net.minecraft.client.render.tessellator.Tessellator;
-import net.minecraft.core.item.IAmmoPickable;
-import net.minecraft.core.item.Item;
-import net.minecraft.core.item.ItemStack;
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL12;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class AmmoPickerComponent
-    extends MovableHudComponent {
-    private final List<ItemStack> PREVIEW_AMMO_TYPES = new ArrayList<>();
-
-    private long visibleTime = 0L;
-
-    public AmmoPickerComponent(String key, Layout layout) {
-        super(key, 16, 48, layout);
-
-        PREVIEW_AMMO_TYPES.add(new ItemStack(Item.ammoArrow));
-        PREVIEW_AMMO_TYPES.add(new ItemStack(Item.ammoArrowGold));
-        PREVIEW_AMMO_TYPES.add(new ItemStack(Item.armorQuiverGold));
-    }
-
-    public void show() {
-        visibleTime = System.currentTimeMillis() + 1000;
-    }
-
-    private float getOpacity() {
-        long timeRemaining = visibleTime - System.currentTimeMillis();
-        if (timeRemaining <= 0) return 0.0f;
-        if (timeRemaining >= 250) return 1.0f;
-
-        return timeRemaining / 250f;
-    }
-
-    @Override
-    public boolean isVisible(Minecraft mc) {
-        return System.currentTimeMillis() < visibleTime && mc.gameSettings.immersiveMode.drawHotbar();
-    }
-
-    @Override
-    public void render(Minecraft mc, GuiIngame gui, int xSizeScreen, int ySizeScreen, float partialTick) {
-        int x = this.getLayout().getComponentX(mc, this, xSizeScreen);
-        int y = this.getLayout().getComponentY(mc, this, ySizeScreen);
-
-        ItemStack stack = mc.thePlayer.getHeldItem();
-        if (stack == null) {
-            visibleTime = 0;
-            return;
-        }
-
-        Item item = stack.getItem();
-        if (!(item instanceof IAmmoPickable)) {
-            visibleTime = 0;
-            return;
-        }
-
-        IAmmoPickable pickable = (IAmmoPickable) item;
-        List<ItemStack> ammoTypes = pickable.getPresentAmmoTypes(mc.thePlayer);
-        if (ammoTypes.isEmpty()) {
-            visibleTime = 0;
-            return;
-        }
-
-        int pickedIndex = ammoTypes.indexOf(pickable.getPickedAmmoType(stack));
-        if (pickedIndex < 0) pickedIndex = 0;
-        int prevIndex = getPrevItemIndex(pickedIndex, ammoTypes.size());
-        int nextIndex = getNextItemIndex(pickedIndex, ammoTypes.size());
-
-        ItemStack pickedAmmo = ammoTypes.get(pickedIndex);
-        ItemStack prevAmmo = ammoTypes.get(prevIndex);
-        ItemStack nextAmmo = ammoTypes.get(nextIndex);
-
-        GL11.glEnable(GL11.GL_DEPTH_TEST);
-        GL11.glDisable(GL11.GL_BLEND);
-        GL11.glEnable(GL12.GL_RESCALE_NORMAL);
-        Lighting.enableInventoryLight();
-
-        float opacity = getOpacity();
-
-        renderItem(mc, prevAmmo, x, y, 0.5f * opacity);
-        renderItem(mc, pickedAmmo, x, y + 16, 1.0f * opacity);
-        renderItem(mc, nextAmmo, x, y + 32, 0.5f * opacity);
-
-        Lighting.disable();
-    }
-
-    @Override
-    public void renderPreview(Minecraft mc, Gui gui, Layout layout, int xSizeScreen, int ySizeScreen) {
-        int x = this.getLayout().getComponentX(mc, this, xSizeScreen);
-        int y = this.getLayout().getComponentY(mc, this, ySizeScreen);
-
-        int pickedIndex = 1;
-        int prevIndex = getPrevItemIndex(pickedIndex, PREVIEW_AMMO_TYPES.size());
-        int nextIndex = getNextItemIndex(pickedIndex, PREVIEW_AMMO_TYPES.size());
-
-        ItemStack pickedAmmo = PREVIEW_AMMO_TYPES.get(pickedIndex);
-        ItemStack prevAmmo = PREVIEW_AMMO_TYPES.get(prevIndex);
-        ItemStack nextAmmo = PREVIEW_AMMO_TYPES.get(nextIndex);
-
-        GL11.glEnable(GL11.GL_DEPTH_TEST);
-        GL11.glDisable(GL11.GL_BLEND);
-        GL11.glEnable(GL12.GL_RESCALE_NORMAL);
-        Lighting.enableInventoryLight();
-
-        GL11.glEnable(GL11.GL_DEPTH_TEST);
-        GL11.glDisable(GL11.GL_BLEND);
-        GL11.glEnable(GL12.GL_RESCALE_NORMAL);
-        Lighting.enableInventoryLight();
-
-        renderItem(mc, prevAmmo, x, y, 0.5f);
-        renderItem(mc, pickedAmmo, x, y + 16, 1.0f);
-        renderItem(mc, nextAmmo, x, y + 32, 0.5f);
-
-        Lighting.disable();
-    }
-
-    private void renderItem(Minecraft mc, ItemStack itemStack, int x, int y, float alpha) {
-        ItemModel itemModel = ItemModelDispatcher.getInstance().getDispatch(itemStack.getItem());
-        itemModel.renderItemIntoGui(Tessellator.instance, mc.fontRenderer, mc.renderEngine, itemStack, x, y, alpha);
-    }
-
-    private int getNextItemIndex(int pickedIndex, int listLength) {
-        return (pickedIndex + 1) % listLength;
-    }
-
-    private int getPrevItemIndex(int pickedIndex, int listLength) {
-        if (pickedIndex - 1 < 0) {
-            return listLength - 1;
-        }
-        return (pickedIndex - 1) % listLength;
-    }
-}
diff --git a/src/main/java/net/minecraft/client/gui/hud/HudComponents.java b/src/main/java/net/minecraft/client/gui/hud/HudComponents.java
index 887514243..32bbb9f9b 100644
--- a/src/main/java/net/minecraft/client/gui/hud/HudComponents.java
+++ b/src/main/java/net/minecraft/client/gui/hud/HudComponents.java
@@ -58,5 +58,4 @@ public class HudComponents {
     public static final HudComponent OXYGEN_BAR = register(new OxygenBarComponent("oxygen_bar", new SnapLayout(HEALTH_BAR, ComponentAnchor.TOP_LEFT, ComponentAnchor.BOTTOM_LEFT)));
     public static final HudComponent FIRE_BAR = register(new FireBarComponent("fire_bar", new SnapLayout(OXYGEN_BAR, ComponentAnchor.TOP_LEFT, ComponentAnchor.BOTTOM_LEFT)));
     public static final HudComponent ROTATION_LOCK = register(new RotationLockComponent("rotation_lock", new SnapLayout(CROSSHAIR, ComponentAnchor.CENTER_RIGHT, ComponentAnchor.CENTER_LEFT)));
-    public static final HudComponent AMMO_PICKER = register(new AmmoPickerComponent("ammo_picker", new SnapLayout(CROSSHAIR, ComponentAnchor.CENTER_LEFT, ComponentAnchor.CENTER_RIGHT)));
 }
diff --git a/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java b/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
index c59d6a95a..67b2fcc20 100644
--- a/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
+++ b/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
@@ -150,7 +150,6 @@ public abstract class OptionsPages
             .withComponent(new KeyBindingComponent(mc.gameSettings.keyChat))
             .withComponent(new KeyBindingComponent(mc.gameSettings.keyCommand))
             .withComponent(new KeyBindingComponent(mc.gameSettings.keyGuidebook))
-            .withComponent(new KeyBindingComponent(mc.gameSettings.keyPickAmmo))
             .withComponent(new KeyBindingComponent(mc.gameSettings.keyShowRecipe))
             .withComponent(new KeyBindingComponent(mc.gameSettings.keyShowUsage))
             .withComponent(new KeyBindingComponent(mc.gameSettings.keyPlayerList))
diff --git a/src/main/java/net/minecraft/client/option/GameSettings.java b/src/main/java/net/minecraft/client/option/GameSettings.java
index fdb789847..982b055f1 100644
--- a/src/main/java/net/minecraft/client/option/GameSettings.java
+++ b/src/main/java/net/minecraft/client/option/GameSettings.java
@@ -213,7 +213,6 @@ public class GameSettings {
 	public KeyBinding keySprint = new KeyBinding("key.sprint").bindKeyboard(KEY_NONE);
 	public KeyBinding keyToggleDebug = new KeyBinding("key.toggleDebug").bindKeyboard(KEY_F3);
 	public KeyBinding keyToggleOverlay = new KeyBinding("key.toggleOverlay").bindKeyboard(KEY_F4);
-	public KeyBinding keyPickAmmo = new KeyBinding("key.pickAmmo").bindKeyboard(KEY_LMENU);
 
 	public KeyBinding[] keys = ReflectUtils.getAllObjects(GameSettings.class, KeyBinding.class, this);
 
diff --git a/src/main/java/net/minecraft/client/render/RenderBlocks.java b/src/main/java/net/minecraft/client/render/RenderBlocks.java
index d9dc38c07..b43167368 100644
--- a/src/main/java/net/minecraft/client/render/RenderBlocks.java
+++ b/src/main/java/net/minecraft/client/render/RenderBlocks.java
@@ -473,7 +473,7 @@ public class RenderBlocks
         } else
         if(uvRotateBottom == 3)
         {
-            d3 = tex.getSubIconU(1 - block.minX);
+            d3 = tex.getSubIconU(1 - block.maxX);
             d4 = tex.getSubIconU(1 - block.minX);
             d5 = tex.getSubIconV(1 - block.minZ);
             d6 = tex.getSubIconV(1 - block.maxZ);
diff --git a/src/main/java/net/minecraft/client/render/RenderEngine.java b/src/main/java/net/minecraft/client/render/RenderEngine.java
index b0eb10ab2..91c1467a0 100644
--- a/src/main/java/net/minecraft/client/render/RenderEngine.java
+++ b/src/main/java/net/minecraft/client/render/RenderEngine.java
@@ -718,6 +718,7 @@ public class RenderEngine {
 		mc.mainMenuBackground.refresh(errors);
 		
         Colorizers.reload();
+        Colorizers.update(true);
         
         mc.worldRenderer.lightmapHelper.setup();
 	}
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 bf7c3ad7d..8598ae8a2 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
@@ -314,7 +314,6 @@ public class BlockModelDispatcher
         addDispatch(new BlockModelTrapDoor<>(Block.trapdoorPlanksOak).withTextures("minecraft:block/trapdoor_planks_oak_top", "minecraft:block/trapdoor_planks_oak_side"));
         addDispatch(new BlockModelTrapDoor<>(Block.trapdoorIron).withTextures("minecraft:block/trapdoor_iron_top", "minecraft:block/trapdoor_iron_side"));
         addDispatch(new BlockModelTrapDoor<>(Block.trapdoorGlass).withTextures("minecraft:block/glass", "minecraft:block/trapdoor_glass_side"));
-        addDispatch(new BlockModelTrapDoor<>(Block.trapdoorGlassTinted).withTextures("minecraft:block/glass_tinted", "minecraft:block/trapdoor_glass_tinted_side"));
         addDispatch(new BlockModelTrapDoorPainted<>(Block.trapdoorPlanksOakPainted));
 
         addDispatch(new BlockModelStandard<>(Block.tnt).withTextures("minecraft:block/tnt_top", "minecraft:block/tnt_bottom", "minecraft:block/tnt_side"));
@@ -327,8 +326,6 @@ public class BlockModelDispatcher
         addDispatch(new BlockModelDoorPainted<>(Block.doorPlanksOakPaintedTop, true).withTextures("minecraft:block/trapdoor_planks_oak_top", "minecraft:block/door_planks_oak_top"));
         addDispatch(new BlockModelDoorGlass<>(Block.doorGlassBottom).withTextures("minecraft:block/glass", "minecraft:block/door_glass_bottom"));
         addDispatch(new BlockModelDoorGlass<>(Block.doorGlassTop).withTextures("minecraft:block/glass", "minecraft:block/door_glass_top"));
-        addDispatch(new BlockModelDoorGlass<>(Block.doorGlassTintedBottom).withTextures("minecraft:block/glass_tinted", "minecraft:block/door_glass_tinted_bottom"));
-        addDispatch(new BlockModelDoorGlass<>(Block.doorGlassTintedTop).withTextures("minecraft:block/glass_tinted", "minecraft:block/door_glass_tinted_top"));
 
         addDispatch(new BlockModelTransparent<>(Block.mesh, true).withTextures("minecraft:block/mesh"));
         addDispatch(new BlockModelTransparent<>(Block.meshGold, true).withTextures("minecraft:block/mesh_gold"));
diff --git a/src/main/java/net/minecraft/client/render/colorizer/ColorMap.java b/src/main/java/net/minecraft/client/render/colorizer/ColorMap.java
index 3d7ff8b35..7680b14b8 100644
--- a/src/main/java/net/minecraft/client/render/colorizer/ColorMap.java
+++ b/src/main/java/net/minecraft/client/render/colorizer/ColorMap.java
@@ -4,12 +4,9 @@ import net.minecraft.core.util.helper.MathHelper;
 
 public class ColorMap {
 	
-	public final Colorizer colorizer;
 	public final int[] buffer = new int[0x10000];
 	
-	public ColorMap(Colorizer colorizer) {
-		this.colorizer = colorizer;
-		
+	public ColorMap() {
 		for(int i=0; i < buffer.length; i++) {
 			buffer[i] = 0xFFFFFFFF;
 		}
diff --git a/src/main/java/net/minecraft/client/render/colorizer/Colorizer.java b/src/main/java/net/minecraft/client/render/colorizer/Colorizer.java
index 838a2588c..70a2fa749 100644
--- a/src/main/java/net/minecraft/client/render/colorizer/Colorizer.java
+++ b/src/main/java/net/minecraft/client/render/colorizer/Colorizer.java
@@ -1,11 +1,11 @@
 package net.minecraft.client.render.colorizer;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import net.minecraft.client.Minecraft;
+import net.minecraft.client.render.texturepack.TexturePack;
 import net.minecraft.core.util.helper.MathHelper;
+import net.minecraft.core.world.Dimension;
 import net.minecraft.core.world.WorldSource;
 import net.minecraft.core.world.season.Season;
 import net.minecraft.core.world.season.Seasons;
@@ -14,66 +14,97 @@ public class Colorizer {
 	
 	public final String name;
 	
+	private final ColorMap currentColor = new ColorMap();
 	private ColorMap defaultColor;
-	private Map<Season, ColorMap> seasonalColormaps;
-	private ColorMap currentColor;
-	private boolean enabled = false;
+	private TexturePack texturePack;
 	
 	public Colorizer(String name) {
 		this.name = name;
 	}
 	
 	public void setup(Minecraft minecraft, List<Season> seasons) {
-		this.defaultColor = new ColorMap(this);
-		this.seasonalColormaps = new HashMap<>();
-		this.currentColor = new ColorMap(this);
-		
-		if(Colorizers.loadColorData(defaultColor, "default")) {
-			this.enabled = true;
-			for(int i=0; i < seasons.size(); i++) {
-				Season season = seasons.get(i);
-				if(season == Seasons.NULL) {
-					continue;
-				}
-				
-				String seasonName = season.getId().replace('.', '_');
-				ColorMap colorMap = new ColorMap(this);
-				
-				if(Colorizers.loadColorData(colorMap, seasonName)) {
-					this.seasonalColormaps.put(season, colorMap);
-				}
-			}
-		}else {
-			this.enabled = false;
+		texturePack = null;
+		if(minecraft.theWorld == null) {
+			return;
+		}
+		
+		String path = null;
+		
+		// First, check if there is a colormap for the current dimension
+		Dimension dimension = minecraft.theWorld.dimension;
+		String dimensionName = dimension.languageKey.replace('.', '_').toLowerCase();
+		path = "/assets/minecraft/textures/colormap/" + this.name + "/" + dimensionName + ".png";
+		texturePack = Colorizers.findTexturePackWithFile(minecraft, path);
+		
+		if(texturePack == null) {
+			// If there is no colormap for the currrent dimension, check if there is a default colormap, to be used for all dimensions
+			path = "/assets/minecraft/textures/colormap/" + this.name + "/default.png";
+			texturePack = Colorizers.findTexturePackWithFile(minecraft, path);
+		}
+		
+		// If there is no default colormap, disable the colorizer
+		if(path == null || texturePack == null) {
+			texturePack = null;
+			return;
+		}
+		
+		// Actually load the colormap
+		this.defaultColor = Colorizers.loadColorData(texturePack, path);
+		if(defaultColor == null) {
+			// If a colormap is found by the first code, but it can't get loaded, throw an Exception
+			throw new NullPointerException("Could not load colormap '" + path + "' from texture pack '" + texturePack.fileName + "'!");
 		}
 	}
 	
-	public ColorMap getColormapForSeason(Season season) {
-		ColorMap colorMap = this.seasonalColormaps.get(season);
-		if(colorMap == null) {
+	public ColorMap loadColormap(Dimension dimension, Season season) {
+		if(season == null || season == Seasons.NULL) {
 			return defaultColor;
 		}
-		return colorMap;
+//		System.out.println("Loading colormap "+this.name+": dimension: " + dimension.languageKey + " season: " + season.getId());
+		
+		String seasonName = season.getId().replace('.', '_').toLowerCase();
+		String seasonPath = "/assets/minecraft/textures/colormap/" + this.name + "/" + seasonName + ".png";
+		
+		ColorMap seasonColor = Colorizers.loadColorData(texturePack, seasonPath);
+//		System.out.println(seasonPath + ": " + seasonColor);
+		if(seasonColor != null) {
+//			System.out.println("  Using season colors!");
+			return seasonColor;
+		}
+		
+//		System.out.println("  Using default colors!");
+		return defaultColor;
 	}
 	
-	public void update(Season season) {
-		ColorMap seasonColors = getColormapForSeason(season);
+	public void update(Dimension dimension, Season season1, Season season2, float blendFactor) {
+		if(!isEnabled()) {
+			return;
+		}
+		
+		ColorMap colorMap1 = loadColormap(dimension, season1);
+		ColorMap colorMap2 = loadColormap(dimension, season2);
+		
+		if(colorMap1 == colorMap2) {
+			update(colorMap1);
+		}else {
+			update(colorMap1, colorMap2, blendFactor);	
+		}
+	}
+	
+	public void update(ColorMap colorMap) {
 		for(int i=0; i < currentColor.buffer.length; i++) {
-			currentColor.buffer[i] = seasonColors.buffer[i];
+			currentColor.buffer[i] = colorMap.buffer[i];
 		}
 	}
 	
-	public void update(Season season1, Season season2, float blendFactor) {
-		ColorMap seasonColors1 = getColormapForSeason(season1);
-		ColorMap seasonColors2 = getColormapForSeason(season2);
-		
+	public void update(ColorMap colorMap1, ColorMap colorMap2, float blendFactor) {
 		for(int i=0; i < currentColor.buffer.length; i++) {
-			currentColor.buffer[i] = blendColor(seasonColors1.buffer[i], seasonColors2.buffer[i], blendFactor);
+			currentColor.buffer[i] = blendColor(colorMap1.buffer[i], colorMap2.buffer[i], blendFactor);
 		}
 	}
 	
 	public int getDefaultColor(double temperature, double humidity) {
-		if(!enabled) {
+		if(!isEnabled()) {
 			return 0xFFFFFFFF;
 		}
 		
@@ -81,7 +112,7 @@ public class Colorizer {
 	}
 	
 	public int getColor(WorldSource world, int x, int y, int z) {
-		if(!enabled) {
+		if(!isEnabled()) {
 			return 0xFFFFFFFF;
 		}
 		
@@ -92,7 +123,7 @@ public class Colorizer {
 	}
 	
 	public int getColor(double temperature, double humidity) {
-		if(!enabled) {
+		if(!isEnabled()) {
 			return 0xFFFFFFFF;
 		}
 		
@@ -100,7 +131,11 @@ public class Colorizer {
 	}
 	
 	public boolean isEnabled() {
-		return enabled;
+		return texturePack != null;
+	}
+	
+	public TexturePack getTexturePack() {
+		return texturePack;
 	}
 	
 	public static int blendColor(int color1, int color2, float blend) {
diff --git a/src/main/java/net/minecraft/client/render/colorizer/Colorizers.java b/src/main/java/net/minecraft/client/render/colorizer/Colorizers.java
index 7ee772e51..c5228dce4 100644
--- a/src/main/java/net/minecraft/client/render/colorizer/Colorizers.java
+++ b/src/main/java/net/minecraft/client/render/colorizer/Colorizers.java
@@ -9,8 +9,10 @@ import java.util.List;
 import javax.imageio.ImageIO;
 
 import net.minecraft.client.Minecraft;
+import net.minecraft.client.render.texturepack.TexturePack;
 import net.minecraft.core.Global;
 import net.minecraft.core.util.helper.MathHelper;
+import net.minecraft.core.world.Dimension;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.season.Season;
 import net.minecraft.core.world.season.SeasonManagerCycle;
@@ -35,7 +37,8 @@ public class Colorizers {
 	public static Colorizer cacao;
 	public static Colorizer thorn;
 	public static Colorizer palm;
-	
+
+	private static Dimension lastDimension;
 	private static Season lastSeason;
 	private static float lastSeasonProgress;
 	
@@ -51,10 +54,13 @@ public class Colorizers {
 		List<Season> seasons = Seasons.getAllSeasons();
 		
 		for(int i=0; i < allColorizers.size(); i++) {
-			allColorizers.get(i).setup(mc, seasons);
+			Colorizer colorizer = allColorizers.get(i);
+			colorizer.setup(mc, seasons);
+			TexturePack texturePack = colorizer.getTexturePack();
+			if(texturePack != null) {
+				System.out.println("Using " + colorizer.name + " color from texture pack " + texturePack.fileName);	
+			}
 		}
-		
-        update(true);
 	}
 	
 	public static void registerColorizers() {
@@ -78,15 +84,19 @@ public class Colorizers {
 	public static void update(boolean force) {
 		World world = mc.theWorld;
 		if(world == null) {
+			lastDimension = null;
 			return;
 		}
 		
 		Season currentSeason = world.seasonManager.getCurrentSeason();
+		Dimension currentDimension = world.dimension;
 		float seasonProgress = getSeasonProgress(world);
 		
 		boolean update;
 		if(force) {
 			update = true;
+		}else if(currentDimension != lastDimension) {
+			update = true;
 		}else if(currentSeason != lastSeason) {
 			update = true;
 		}else if(seasonProgress != lastSeasonProgress) {
@@ -99,6 +109,11 @@ public class Colorizers {
 			return;
 		}
 		
+		if(currentDimension != lastDimension) {
+			reload();
+		}
+		
+		lastDimension = currentDimension;
 		lastSeason = currentSeason;
 		lastSeasonProgress = seasonProgress;
 		
@@ -109,7 +124,12 @@ public class Colorizers {
 		
 		float fadeDurationInverse = 1.0f - fadeDuration;
 		
-		if(seasonProgress < 0.5f) {
+		if(seasonProgress == 0.5f) {
+			for(int i=0; i < allColorizers.size(); i++) {
+				allColorizers.get(i).update(currentDimension, currentSeason, currentSeason, 0.5f);
+			}
+			return;
+		}else if(seasonProgress < 0.5f) {
 			season1 = world.getSeasonManager().getPreviousSeason();
 			season2 = currentSeason;
 			blendFactor = seasonProgress + 0.5f; // 0.5 -> 1.0
@@ -136,7 +156,7 @@ public class Colorizers {
 		}
 		
 		for(int i=0; i < allColorizers.size(); i++) {
-			allColorizers.get(i).update(season1, season2, blendFactor);
+			allColorizers.get(i).update(currentDimension, season1, season2, blendFactor);
 		}
 	}
 	
@@ -145,26 +165,46 @@ public class Colorizers {
 		return colorizer;
 	}
 	
-	public static boolean loadColorData(ColorMap colorMap, String name) {
-		String path = "/assets/minecraft/textures/colormap/" + colorMap.colorizer.name + "/" + name + ".png";
+	public static TexturePack findTexturePackWithFile(Minecraft mc, String path) {
+		// TODO create list when texture pack is changed and reuse it
+		List<TexturePack> texturePacks = new ArrayList<>();
+		
+		texturePacks.add(mc.texturePackList.getDefaultTexturePack());
+		texturePacks.addAll(mc.texturePackList.selectedPacks);
+		
+		for(int i=texturePacks.size() - 1; i >= 0; i--) {
+			TexturePack texturePack = texturePacks.get(i);
+			if(texturePack.hasFile(path)) {
+				return texturePack;
+			}
+		}
+		
+		return null;
+	}
+	
+	public static ColorMap loadColorData(TexturePack texturePack, String path) {
+		if(texturePack == null) {
+			throw new NullPointerException();
+		}
 		
 		InputStream in = null;
 		BufferedImage image = null;
 		
 		try {
-			in = mc.texturePackList.getResourceAsStream(path);
+			in = texturePack.getResourceAsStream(path);
 			if(in == null) {
-				return false;
+				return null;
 			}
 			image = ImageIO.read(in);
 		}catch (Exception e) {
-			throw new RuntimeException("Loading colormap: '" + name + "'", e);
+			throw new RuntimeException("Loading colormap: '" + path + "'", e);
 		}finally {
 			try {
 				in.close();
 			}catch (Exception e) {}
 		}
-		
+
+		ColorMap colorMap = new ColorMap();
 		if(image.getWidth() == 1 && image.getHeight() == 1) {
 			int rgb = image.getRGB(0, 0);
 			
@@ -172,7 +212,7 @@ public class Colorizers {
 				colorMap.buffer[i] = rgb;
 			}
 			
-			return true;
+			return colorMap;
 		}
 		
 		if(image.getWidth() != 256 || image.getHeight() != 256) {
@@ -191,7 +231,7 @@ public class Colorizers {
 			}
 		}
 		
-		return true;
+		return colorMap;
 	}
 	
 	public static float getSeasonProgress(World world) {
diff --git a/src/main/java/net/minecraft/client/render/entity/BoatRenderer.java b/src/main/java/net/minecraft/client/render/entity/BoatRenderer.java
index 1f8d25d2f..30c469ce7 100644
--- a/src/main/java/net/minecraft/client/render/entity/BoatRenderer.java
+++ b/src/main/java/net/minecraft/client/render/entity/BoatRenderer.java
@@ -64,7 +64,7 @@ public class BoatRenderer extends EntityRenderer<EntityBoat>
         float f4 = 0.75F;
         GL11.glScalef(f4, f4, f4);
         GL11.glScalef(1.0F / f4, 1.0F / f4, 1.0F / f4);
-        loadTexture("/item/boat.png");
+        loadTexture("/assets/minecraft/textures/entity/boat.png");
         GL11.glScalef(-1F, -1F, 1.0F);
         modelBoat.render(0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
         GL11.glPopMatrix();
diff --git a/src/main/java/net/minecraft/client/render/entity/MinecartRenderer.java b/src/main/java/net/minecraft/client/render/entity/MinecartRenderer.java
index dd6a4a5fd..44245ffee 100644
--- a/src/main/java/net/minecraft/client/render/entity/MinecartRenderer.java
+++ b/src/main/java/net/minecraft/client/render/entity/MinecartRenderer.java
@@ -110,7 +110,7 @@ public class MinecartRenderer extends EntityRenderer<EntityMinecart>
             GL11.glTranslatef(0.0F, -0.3125F, 0.0F);
             GL11.glScalef(1.0F / f5, 1.0F / f5, 1.0F / f5);
         }
-        loadTexture("/item/cart.png");
+        loadTexture("/assets/minecraft/textures/entity/cart.png");
         GL11.glScalef(-1F, -1F, 1.0F);
         modelMinecart.render(0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
         GL11.glPopMatrix();
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelBow.java b/src/main/java/net/minecraft/client/render/item/model/ItemModelBow.java
index bc59af80c..96c130303 100644
--- a/src/main/java/net/minecraft/client/render/item/model/ItemModelBow.java
+++ b/src/main/java/net/minecraft/client/render/item/model/ItemModelBow.java
@@ -79,7 +79,6 @@ public class ItemModelBow extends ItemModelStandard {
         }
         super.renderItemIntoGui(tessellator, fontrenderer, renderengine, itemStack, x, y, brightness, alpha);
     }
-
     public Item getNextArrow(EntityPlayer player){
         if (player instanceof EntityOtherPlayerMP){
             int id = player.getArrowId();
@@ -88,7 +87,6 @@ public class ItemModelBow extends ItemModelStandard {
         }
         return player.getNextArrow();
     }
-
     @Override
     public void heldTransformThirdPerson(ItemRenderer renderer, Entity entity, ItemStack itemStack) {
         GL11.glTranslatef(0.0F, 0.125F, 0.3125F);
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java b/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
index 2c35b8392..3bc301f0e 100644
--- a/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
+++ b/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
@@ -113,7 +113,6 @@ public class ItemModelDispatcher extends Dispatcher<Item, ItemModel> {
         addDispatch(new ItemModelStandard(Item.sign, "minecraft"));
         addDispatch(new ItemModelStandard(Item.doorOak, "minecraft"));
         addDispatch(new ItemModelStandard(Item.doorGlass, "minecraft"));
-        addDispatch(new ItemModelStandard(Item.doorGlassTinted, "minecraft"));
         addDispatch(new ItemModelDoorPainted(Item.doorOakPainted));
         addDispatch(new ItemModelStandard(Item.bucket, "minecraft"));
         addDispatch(new ItemModelStandard(Item.bucketWater, "minecraft"));
diff --git a/src/main/java/net/minecraft/client/render/texturepack/TexturePackList.java b/src/main/java/net/minecraft/client/render/texturepack/TexturePackList.java
index 03001dd00..a3114b2a5 100644
--- a/src/main/java/net/minecraft/client/render/texturepack/TexturePackList.java
+++ b/src/main/java/net/minecraft/client/render/texturepack/TexturePackList.java
@@ -141,6 +141,7 @@ public class TexturePackList
 		for (String string : packStrings){
 			for (TexturePack pack : availableTexturePacks){
 				if (string.equals(pack.fileName) && !selectedPacks.contains(pack)){
+					pack.readZipFile();
 					selectedPacks.add(pack);
 				}
 			}
diff --git a/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java b/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java
index 46e6da8f6..8cb5e9ab4 100644
--- a/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java
+++ b/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java
@@ -61,7 +61,7 @@ public class TileEntityRendererSign extends TileEntityRenderer<TileEntitySign>
             GL11.glTranslatef(0.0F, -0.3125F, -0.4375F);
             signModel.signStick.showModel = false;
         }
-        loadTexture("/item/sign.png");
+        loadTexture("/assets/minecraft/textures/entity/sign.png");
         GL11.glPushMatrix();
         GL11.glScalef(scale, -scale, -scale);
         signModel.func_887_a();
diff --git a/src/main/java/net/minecraft/core/BuildChannel.java b/src/main/java/net/minecraft/core/BuildChannel.java
index 0fbabe872..066c404b9 100644
--- a/src/main/java/net/minecraft/core/BuildChannel.java
+++ b/src/main/java/net/minecraft/core/BuildChannel.java
@@ -10,7 +10,7 @@ public enum BuildChannel {
     }
 
     public String modifyVersionString(String version) {
-        if (this == STABLE) {
+        if (this == STABLE || this == PRERELEASE) {
             return version;
         } else {
             // Camel case channel name
diff --git a/src/main/java/net/minecraft/core/Global.java b/src/main/java/net/minecraft/core/Global.java
index ecbf06226..388d1dde2 100644
--- a/src/main/java/net/minecraft/core/Global.java
+++ b/src/main/java/net/minecraft/core/Global.java
@@ -22,5 +22,5 @@ public class Global
 	// 4th nibble: Prerelease version or patch version
 	// For example, 7.1_01 would be encoded as 0x7101
 	// 7.1 prerelease 1 would be encoded as 0x7111
-	public static final int MP_PROTOCOL_VERSION = 0x7100;
+	public static final int MP_PROTOCOL_VERSION = 0x7211;
 }
diff --git a/src/main/java/net/minecraft/core/block/Block.java b/src/main/java/net/minecraft/core/block/Block.java
index 01adba7b1..96f29d0fc 100644
--- a/src/main/java/net/minecraft/core/block/Block.java
+++ b/src/main/java/net/minecraft/core/block/Block.java
@@ -1244,8 +1244,6 @@ public class Block
             .withTags(BlockTags.MINEABLE_BY_PICKAXE);
     public static final Block trapdoorPlanksOakPainted = new BlockTrapDoorPainted("trapdoor.planks.oak.painted", 573, Material.wood).withHardness(3F).withDisabledStats().withDisabledNeighborNotifyOnMetadataChange()
             .withTags(BlockTags.MINEABLE_BY_AXE);
-    public static final Block trapdoorGlassTinted = new BlockTrapDoorTinted("trapdoor.glass.tinted", 574, Material.glass, false).withHardness(0.3F).withDisabledStats().withDisabledNeighborNotifyOnMetadataChange()
-            .withTags(BlockTags.MINEABLE_BY_PICKAXE);
 
     public static final Block tnt = new BlockTNT("tnt", 580).withHardness(0.0F);
 
@@ -1265,10 +1263,6 @@ public class Block
             .withTags(BlockTags.NOT_IN_CREATIVE_MENU, BlockTags.MINEABLE_BY_PICKAXE);
     public static final Block doorGlassTop = new BlockDoorGlass("door.glass.top", 597, Material.glass, true).withHardness(0.3F).withDisabledStats().withDisabledNeighborNotifyOnMetadataChange()
             .withTags(BlockTags.NOT_IN_CREATIVE_MENU, BlockTags.MINEABLE_BY_PICKAXE);
-    public static final Block doorGlassTintedBottom = new BlockDoorGlassTinted("door.glass.tinted.bottom", 598, Material.glass, false).withHardness(0.3F).withDisabledStats().withDisabledNeighborNotifyOnMetadataChange()
-            .withTags(BlockTags.NOT_IN_CREATIVE_MENU, BlockTags.MINEABLE_BY_PICKAXE);
-    public static final Block doorGlassTintedTop = new BlockDoorGlassTinted("door.glass.tinted.top", 599, Material.glass, true).withHardness(0.3F).withDisabledStats().withDisabledNeighborNotifyOnMetadataChange()
-            .withTags(BlockTags.NOT_IN_CREATIVE_MENU, BlockTags.MINEABLE_BY_PICKAXE);
 
     public static final Block mesh = new BlockMesh("mesh", 600).withHardness(1.5F)
             .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.CAN_HANG_OFF);
diff --git a/src/main/java/net/minecraft/core/block/BlockDispenser.java b/src/main/java/net/minecraft/core/block/BlockDispenser.java
index b52c3e815..7eb395c69 100644
--- a/src/main/java/net/minecraft/core/block/BlockDispenser.java
+++ b/src/main/java/net/minecraft/core/block/BlockDispenser.java
@@ -5,6 +5,7 @@ import java.util.Random;
 import net.minecraft.core.entity.*;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.entity.projectile.*;
+import net.minecraft.core.item.IDispensable;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.world.World;
@@ -86,86 +87,66 @@ public class BlockDispenser extends BlockTileEntityRotatable
         }
     }
 
-    private void dispenseItem(World world, int i, int j, int k, Random random)
+    private void dispenseItem(World world, int x, int y, int z, Random random)
     {
-        int l = world.getBlockMetadata(i, j, k);
-        int i1 = 0;
-        int j1 = 0;
-        if(l == 3)
-        {
-            j1 = 1;
-        } else
-        if(l == 2)
-        {
-            j1 = -1;
-        } else
-        if(l == 5)
-        {
-            i1 = 1;
-        } else
-        {
-            i1 = -1;
+        int data = world.getBlockMetadata(x, y, z);
+        int xOffset = 0;
+        int zOffset = 0;
+        if (data == 3) {
+            zOffset = 1;
+        } else if (data == 2) {
+            zOffset = -1;
+        } else if (data == 5) {
+            xOffset = 1;
+        } else {
+            xOffset = -1;
         }
-        TileEntityDispenser tileentitydispenser = (TileEntityDispenser)world.getBlockTileEntity(i, j, k);
-        ItemStack itemstack = tileentitydispenser.getRandomStackFromInventory();
-        double d = (double)i + (double)i1 * 0.6D + 0.5D;
-        double d1 = (double)j + 0.5D;
-        double d2 = (double)k + (double)j1 * 0.6D + 0.5D;
-        if(itemstack == null)
+        TileEntityDispenser tileEntity = (TileEntityDispenser)world.getBlockTileEntity(x, y, z);
+        ItemStack itemStack = tileEntity.getRandomStackFromInventory();
+        double px = (double)x + (double)xOffset * 0.6D + 0.5D;
+        double py = (double)y + 0.5D;
+        double pz = (double)z + (double)zOffset * 0.6D + 0.5D;
+        if(itemStack == null)
         {
-            world.playSoundEffect(1001, i, j, k, 0);
-        } else
+            world.playSoundEffect(1001, x, y, z, 0);
+        }
+        else
         {
-            if(itemstack.itemID == Item.ammoArrow.id || itemstack.itemID == Item.ammoArrowGold.id)
-            {
-                EntityArrow entityarrow = itemstack.itemID == Item.ammoArrow.id ? new EntityArrow(world, d, d1, d2, 0) : new EntityArrowGolden(world, d, d1, d2);
-                entityarrow.setHeading(i1, 0.1D, j1, 1.1F, 6F);
-                entityarrow.setDoesArrowBelongToPlayer(true);
-                world.entityJoinedWorld(entityarrow);
-                world.playSoundEffect(1002, i, j, k, 0);
-            }
-            else if(itemstack.itemID == Item.ammoChargeExplosive.id)
-            {
-                EntityCannonball entitycannonball = new EntityCannonball(world, d, d1, d2);
-                entitycannonball.setHeading(i1, 0.1D, j1, 1.1F, 6F);
-                world.entityJoinedWorld(entitycannonball);
-                world.playSoundEffect(1002, i, j, k, 0);
-            }
-            else if(itemstack.itemID == Item.eggChicken.id)
+            if (itemStack.getItem() instanceof IDispensable)
             {
-                EntityEgg entityegg = new EntityEgg(world, d, d1, d2);
-                entityegg.setHeading(i1, 0.1D, j1, 1.1F, 6F);
-                world.entityJoinedWorld(entityegg);
-                world.playSoundEffect(1002, i, j, k, 0);
+                IDispensable dispensable = (IDispensable) itemStack.getItem();
+                dispensable.onDispensed(itemStack, world, px, py, pz, xOffset, zOffset, random);
+                world.playSoundEffect(1002, x, y, z, 0);
             }
-            else if(itemstack.itemID == Item.ammoSnowball.id)
+            else if (itemStack.itemID == Item.ammoArrow.id || itemStack.itemID == Item.ammoArrowGold.id)
             {
-                EntitySnowball entitysnowball = new EntitySnowball(world, d, d1, d2);
-                entitysnowball.setHeading(i1, 0.1D, j1, 1.1F, 6F);
-                world.entityJoinedWorld(entitysnowball);
-                world.playSoundEffect(1002, i, j, k, 0);
+                EntityArrow arrow = itemStack.itemID == Item.ammoArrow.id ? new EntityArrow(world, px, py, pz, 0) : new EntityArrowGolden(world, px, py, pz);
+                arrow.setHeading(xOffset, 0.1D, zOffset, 1.1F, 6F);
+                arrow.setDoesArrowBelongToPlayer(true);
+                world.entityJoinedWorld(arrow);
+                world.playSoundEffect(1002, x, y, z, 0);
             }
-            else if(itemstack.itemID == Item.ammoPebble.id)
+            else if (itemStack.itemID == Item.ammoChargeExplosive.id)
             {
-                EntityPebble pebble = new EntityPebble(world, d, d1, d2);
-                pebble.setHeading(i1, 0.1D, j1, 1.1F, 6F);
-                world.entityJoinedWorld(pebble);
-                world.playSoundEffect(1002, i, j, k, 0);
+                EntityCannonball cannonball = new EntityCannonball(world, px, py, pz);
+                cannonball.setHeading(xOffset, 0.1D, zOffset, 1.1F, 6F);
+                world.entityJoinedWorld(cannonball);
+                world.playSoundEffect(1002, x, y, z, 0);
             }
             else
             {
-                EntityItem entityitem = new EntityItem(world, d, d1 - 0.3D, d2, itemstack);
-                double d3 = random.nextDouble() * 0.1D + 0.2D;
-                entityitem.xd = (double)i1 * d3;
-                entityitem.yd = 0.2D;
-                entityitem.zd = (double)j1 * d3;
-                entityitem.xd += random.nextGaussian() * 0.0075D * 6D;
-                entityitem.yd += random.nextGaussian() * 0.0075D * 6D;
-                entityitem.zd += random.nextGaussian() * 0.0075D * 6D;
-                world.entityJoinedWorld(entityitem);
-                world.playSoundEffect(1000, i, j, k, 0);
+                EntityItem item = new EntityItem(world, px, py - 0.3D, pz, itemStack);
+                double randOffset = random.nextDouble() * 0.1D + 0.2D;
+                item.xd = (double)xOffset * randOffset;
+                item.yd = 0.2D;
+                item.zd = (double)zOffset * randOffset;
+                item.xd += random.nextGaussian() * 0.0075D * 6D;
+                item.yd += random.nextGaussian() * 0.0075D * 6D;
+                item.zd += random.nextGaussian() * 0.0075D * 6D;
+                world.entityJoinedWorld(item);
+                world.playSoundEffect(1000, x, y, z, 0);
             }
-            world.playSoundEffect(2000, i, j, k, i1 + 1 + (j1 + 1) * 3);
+            world.playSoundEffect(2000, x, y, z, xOffset + 1 + (zOffset + 1) * 3);
         }
     }
 
diff --git a/src/main/java/net/minecraft/core/block/BlockDoorGlassTinted.java b/src/main/java/net/minecraft/core/block/BlockDoorGlassTinted.java
deleted file mode 100644
index f010dde7f..000000000
--- a/src/main/java/net/minecraft/core/block/BlockDoorGlassTinted.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package net.minecraft.core.block;
-
-import net.minecraft.core.block.entity.TileEntity;
-import net.minecraft.core.block.material.Material;
-import net.minecraft.core.enums.EnumDropCause;
-import net.minecraft.core.item.Item;
-import net.minecraft.core.item.ItemStack;
-import net.minecraft.core.world.World;
-
-public class BlockDoorGlassTinted extends BlockDoorGlass{
-    public BlockDoorGlassTinted(String key, int id, Material material, boolean isTop) {
-        super(key, id, material, isTop);
-    }
-    @Override
-    public boolean blocksLight()
-    {
-        return true;
-    }
-
-    @Override
-    public int getRenderBlockPass()
-    {
-        return 1;
-    }
-    @Override
-    public ItemStack[] getBreakResult(World world, EnumDropCause dropCause, int x, int y, int z, int meta, TileEntity tileEntity)
-    {
-        return new ItemStack[] { new ItemStack(Item.doorGlassTinted) };
-    }
-}
diff --git a/src/main/java/net/minecraft/core/block/BlockTrapDoorTinted.java b/src/main/java/net/minecraft/core/block/BlockTrapDoorTinted.java
deleted file mode 100644
index c5bca7d7d..000000000
--- a/src/main/java/net/minecraft/core/block/BlockTrapDoorTinted.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package net.minecraft.core.block;
-
-import net.minecraft.core.block.material.Material;
-
-public class BlockTrapDoorTinted extends BlockTrapDoor{
-    public BlockTrapDoorTinted(String key, int id, Material material, boolean isIron) {
-        super(key, id, material, isIron);
-    }
-    @Override
-    public boolean blocksLight()
-    {
-        return true;
-    }
-
-    @Override
-    public int getRenderBlockPass()
-    {
-        return 1;
-    }
-}
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityDispenser.java b/src/main/java/net/minecraft/core/block/entity/TileEntityDispenser.java
index d116f042b..bac18fe2a 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntityDispenser.java
+++ b/src/main/java/net/minecraft/core/block/entity/TileEntityDispenser.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.block.entity;
 
 import net.minecraft.core.entity.player.EntityPlayer;
+import net.minecraft.core.item.IDispensable;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.player.inventory.IInventory;
 import com.mojang.nbt.CompoundTag;
@@ -73,8 +74,18 @@ public class TileEntityDispenser extends TileEntity
 
         if(i >= 0)
         {
+            ItemStack stack = getStackInSlot(i);
+            if (stack.getItem() instanceof IDispensable) {
+                IDispensable dispensable = (IDispensable) stack.getItem();
+                if (dispensable.isRemovedOnDispense()) {
+                    return decrStackSize(i, 1);
+                } else {
+                    return stack;
+                }
+            }
             return decrStackSize(i, 1);
-        } else
+        }
+        else
         {
             return null;
         }
diff --git a/src/main/java/net/minecraft/core/crafting/LookupFuelFurnace.java b/src/main/java/net/minecraft/core/crafting/LookupFuelFurnace.java
index 955e10fc6..dd2b5a515 100644
--- a/src/main/java/net/minecraft/core/crafting/LookupFuelFurnace.java
+++ b/src/main/java/net/minecraft/core/crafting/LookupFuelFurnace.java
@@ -19,6 +19,7 @@ public class LookupFuelFurnace {
 		addFuelEntry(Block.planksOak.id, 300);
 		addFuelEntry(Block.planksOakPainted.id, 300);
 		addFuelEntry(Block.stairsPlanksOak.id, 300);
+		addFuelEntry(Block.stairsPlanksOakPainted.id, 300);
 		addFuelEntry(Block.slabPlanksOak.id, 150);
 		addFuelEntry(Block.slabPlanksOakPainted.id, 150);
 		addFuelEntry(Block.fencePlanksOak.id, 300);
diff --git a/src/main/java/net/minecraft/core/entity/player/EntityPlayer.java b/src/main/java/net/minecraft/core/entity/player/EntityPlayer.java
index fbfd338d2..31187a773 100644
--- a/src/main/java/net/minecraft/core/entity/player/EntityPlayer.java
+++ b/src/main/java/net/minecraft/core/entity/player/EntityPlayer.java
@@ -32,7 +32,6 @@ import net.minecraft.core.entity.vehicle.EntityMinecart;
 import net.minecraft.core.enums.ArtType;
 import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.enums.EnumSleepStatus;
-import net.minecraft.core.item.IAmmoPickable;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.item.tool.ItemToolSword;
@@ -1348,20 +1347,23 @@ public abstract class EntityPlayer extends EntityLiving
         inventory.setInventorySlotContents(slot1, stack2);
     }
     public Item getNextArrow(){
-        ItemStack heldItem = getHeldItem();
-        if (heldItem.itemID != Item.toolBow.id) return null;
-
-        IAmmoPickable pickable = ((IAmmoPickable) Item.toolBow);
-        ItemStack ammoType = pickable.getPickedAmmoType(heldItem);
-
-        if (ammoType.itemID == Item.armorQuiver.id) {
-            return Item.ammoArrow;
+        Item nextArrow = null;
+        ItemStack quiverSlot = inventory.armorItemInSlot(2);
+        if(quiverSlot != null && quiverSlot.itemID == Item.armorQuiver.id && quiverSlot.getMetadata() < quiverSlot.getMaxDamage()){
+            nextArrow = Item.ammoArrow;
         }
-        if (ammoType.itemID == Item.armorQuiverGold.id) {
-            return Item.ammoArrowPurple;
+        else if(quiverSlot != null && quiverSlot.itemID == Item.armorQuiverGold.id){
+            nextArrow = Item.ammoArrowPurple;
         }
-
-        return ammoType.getItem();
+        else if (hasItem(Item.ammoArrowGold))
+        {
+            nextArrow = Item.ammoArrowGold;
+        }
+        else if(hasItem(Item.ammoArrow))
+        {
+            nextArrow = Item.ammoArrow;
+        }
+        return nextArrow;
     }
     public int getArrowId(){
         return entityData.getInt(18);
diff --git a/src/main/java/net/minecraft/core/entity/projectile/EntityFireball.java b/src/main/java/net/minecraft/core/entity/projectile/EntityFireball.java
index f93236416..251f33b33 100644
--- a/src/main/java/net/minecraft/core/entity/projectile/EntityFireball.java
+++ b/src/main/java/net/minecraft/core/entity/projectile/EntityFireball.java
@@ -21,12 +21,6 @@ public class EntityFireball extends EntityProjectile
         super(world);
         setSize(1.0F, 1.0F);
     }
-
-    public EntityFireball(World world, EntityLiving owner) {
-        super(world, owner);
-        setSize(1.0F, 1.0F);
-    }
-
     public EntityFireball(World world, double x, double y, double z,
             double vX, double vY, double vZ)
     {
diff --git a/src/main/java/net/minecraft/core/item/IAmmoPickable.java b/src/main/java/net/minecraft/core/item/IAmmoPickable.java
deleted file mode 100644
index 55bea82c4..000000000
--- a/src/main/java/net/minecraft/core/item/IAmmoPickable.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package net.minecraft.core.item;
-
-import net.minecraft.core.entity.player.EntityPlayer;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public interface IAmmoPickable {
-    List<ItemStack> getAmmoTypes();
-
-    default List<ItemStack> getPresentAmmoTypes(EntityPlayer player) {
-        List<ItemStack> filteredList = new ArrayList<>();
-        List<ItemStack> ammoTypes = getAmmoTypes();
-
-        for (ItemStack ammoType : ammoTypes) {
-            if (hasAmmoType(player, ammoType)) {
-                filteredList.add(ammoType);
-            }
-        }
-
-        return filteredList;
-    }
-
-    default boolean isAmmoType(ItemStack stack) {
-        List<ItemStack> ammoTypes = this.getAmmoTypes();
-        for (ItemStack ammoType : ammoTypes) {
-            if (ammoType.isItemEqual(stack)) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    default boolean hasAmmoType(EntityPlayer player, ItemStack ammoType) {
-        return player.inventory.containsItem(ammoType);
-    }
-
-    void setPickedAmmoType(ItemStack itemStack, ItemStack ammoType);
-
-    ItemStack getPickedAmmoType(ItemStack itemStack);
-
-    default ItemStack getDefaultAmmoType() {
-        return getAmmoTypes().get(0);
-    }
-}
diff --git a/src/main/java/net/minecraft/core/item/IDispensable.java b/src/main/java/net/minecraft/core/item/IDispensable.java
new file mode 100644
index 000000000..da3871c81
--- /dev/null
+++ b/src/main/java/net/minecraft/core/item/IDispensable.java
@@ -0,0 +1,13 @@
+package net.minecraft.core.item;
+
+import net.minecraft.core.world.World;
+
+import java.util.Random;
+
+public interface IDispensable {
+    void onDispensed(ItemStack itemStack, World world, double x, double y, double z, int xOffset, int zOffset, Random random);
+
+    default boolean isRemovedOnDispense() {
+        return true;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/item/Item.java b/src/main/java/net/minecraft/core/item/Item.java
index e29a0eaf4..13beb787b 100644
--- a/src/main/java/net/minecraft/core/item/Item.java
+++ b/src/main/java/net/minecraft/core/item/Item.java
@@ -260,7 +260,7 @@ public class Item
     public static Item toolPickaxeIron = (new ItemToolPickaxe("tool.pickaxe.iron", 16385, ToolMaterial.iron));
     public static Item toolAxeIron = (new ItemToolAxe("tool.axe.iron", 16386, ToolMaterial.iron));
     public static Item toolFirestriker = (new ItemFirestriker("tool.firestriker", 16387));
-    public static Item foodApple = (new ItemFood("food.apple", 16388, 4, 4, false, 16));
+    public static Item foodApple = (new ItemFood("food.apple", 16388, 4, 8, false, 8));
     public static Item toolBow = (new ItemBow("tool.bow", 16389));
     public static Item ammoArrow = (new Item("ammo.arrow", 16390));
     public static Item coal = (new ItemCoal("coal", 16391));
@@ -282,7 +282,7 @@ public class Item
     public static Item toolAxeDiamond = (new ItemToolAxe("tool.axe.diamond", 16407, ToolMaterial.diamond));
     public static Item stick = (new Item("stick", 16408));
     public static Item bowl = (new Item("bowl", 16409));
-    public static Item foodStewMushroom = (new ItemSoup("food.stew.mushroom", 16410, 10, 8));
+    public static Item foodStewMushroom = (new ItemSoup("food.stew.mushroom", 16410, 10, 16));
     public static Item toolSwordGold = (new ItemToolSword("tool.sword.gold", 16411, ToolMaterial.gold)).withTags(ItemTags.PREVENT_CREATIVE_MINING);
     public static Item toolShovelGold = (new ItemToolShovel("tool.shovel.gold", 16412, ToolMaterial.gold));
     public static Item toolPickaxeGold = (new ItemToolPickaxe("tool.pickaxe.gold", 16413, ToolMaterial.gold));
@@ -297,7 +297,7 @@ public class Item
     public static Item toolHoeGold = (new ItemToolHoe("tool.hoe.gold", 16422, ToolMaterial.gold));
     public static Item seedsWheat = (new ItemSeeds("seeds.wheat", 16423, Block.cropsWheat));
     public static Item wheat = (new Item("wheat", 16424));
-    public static Item foodBread = (new ItemFood("food.bread", 16425, 5, 6, false, 16));
+    public static Item foodBread = (new ItemFood("food.bread", 16425, 5, 12, false, 8));
 
     public static Item armorHelmetLeather = (new ItemArmor("armor.helmet.leather", 16426, ArmorMaterial.LEATHER, 0));
     public static Item armorChestplateLeather = (new ItemArmor("armor.chestplate.leather", 16427, ArmorMaterial.LEATHER, 1));
@@ -324,10 +324,10 @@ public class Item
     public static Item armorLeggingsGold = (new ItemArmor("armor.leggings.gold", 16444, ArmorMaterial.GOLD, 2));
     public static Item armorBootsGold = (new ItemArmor("armor.boots.gold", 16445, ArmorMaterial.GOLD, 3));
     public static Item flint = (new Item("flint", 16446));
-    public static Item foodPorkchopRaw = (new ItemFood("food.porkchop.raw", 16447, 3, 8, true, 16));
-    public static Item foodPorkchopCooked = (new ItemFood("food.porkchop.cooked", 16448, 8, 8, true, 16));
+    public static Item foodPorkchopRaw = (new ItemFood("food.porkchop.raw", 16447, 3, 16, true, 4));
+    public static Item foodPorkchopCooked = (new ItemFood("food.porkchop.cooked", 16448, 8, 16, true, 4));
     public static Item painting = (new ItemPainting("painting", 16449));
-    public static Item foodAppleGold = (new ItemFood("food.apple.gold", 16450, 42, 0, false, 16));
+    public static Item foodAppleGold = (new ItemFood("food.apple.gold", 16450, 42, 0, false, 1));
     public static Item sign = (new ItemSign("sign", 16451));
     public static Item doorOak = (new ItemDoor("door.oak", 16452, Block.doorPlanksOakBottom, Block.doorPlanksOakTop));
     public static Item bucket = (new ItemBucketEmpty("bucket", 16453));
@@ -354,8 +354,8 @@ public class Item
     public static Item toolFishingrod = (new ItemFishingRod("tool.fishingrod", 16474));
     public static Item toolClock = (new Item("tool.clock", 16475));
     public static Item dustGlowstone = (new Item("dust.glowstone", 16476));
-    public static Item foodFishRaw = (new ItemFood("food.fish.raw", 16477, 2, 6, false, 16));
-    public static Item foodFishCooked = (new ItemFood("food.fish.cooked", 16478, 5, 6, false, 16));
+    public static Item foodFishRaw = (new ItemFood("food.fish.raw", 16477, 2, 12, false, 8));
+    public static Item foodFishCooked = (new ItemFood("food.fish.cooked", 16478, 5, 12, false, 8));
     public static Item dye = (new ItemDye("dye", 16479));
     public static Item bone = (new Item("bone", 16480));
     public static Item dustSugar = (new Item("dust.sugar", 16481));
@@ -406,7 +406,7 @@ public class Item
     public static Item quartz = (new Item("quartz", 16512));
     public static Item olivine = (new Item("olivine", 16513));
     public static Item ammoPebble = (new ItemPebble("ammo.pebble", 16514));
-    public static Item cherry = (new ItemFood("food.cherry", 16515, 2, 0, false, 16));
+    public static Item cherry = (new ItemFood("food.cherry", 16515, 2, 2, false, 8));
     public static Item bucketIcecream = (new ItemBucketIceCream("bucket.icecream", 16516, 10, 4)).setContainerItem(bucket);
     public static Item ammoArrowPurple = (new Item("ammo.arrow.purple", 16517)).withTags(ItemTags.NOT_IN_CREATIVE_MENU);
     public static Item label = (new ItemLabel("label", 16518));
@@ -428,7 +428,6 @@ public class Item
     public static Item rope = new ItemRope("rope", 16534, Block.rope);
     public static Item foodPumpkinPie = (new ItemPlaceable("food.pumpkin_pie", 16535, Block.pumpkinPie)).setMaxStackSize(1);
     public static Item wandMonsterSpawner = (new ItemWandSpawner("wand.monster", 16536)).setMaxStackSize(1);
-    public static Item doorGlassTinted = (new ItemDoor("door.glass.tinted", 16537, Block.doorGlassTintedBottom, Block.doorGlassTintedTop));
 
     public static int highestItemId = 0;
     public int id;
@@ -441,13 +440,6 @@ public class Item
     static 
     {
         StatList.onItemInit();
-
-        ((ItemBow) toolBow).addAmmoType(new ItemStack(ammoArrow));
-        ((ItemBow) toolBow).addAmmoType(new ItemStack(ammoArrowGold));
-        ((ItemBow) toolBow).addAmmoType(new ItemStack(armorQuiver));
-        ((ItemBow) toolBow).addAmmoType(new ItemStack(armorQuiverGold));
-
-        ((ItemHandCannonUnloaded) handcannonUnloaded).addAmmoType(new ItemStack(ammoChargeExplosive));
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/item/ItemBow.java b/src/main/java/net/minecraft/core/item/ItemBow.java
index e41bf25e9..6df182e85 100644
--- a/src/main/java/net/minecraft/core/item/ItemBow.java
+++ b/src/main/java/net/minecraft/core/item/ItemBow.java
@@ -1,22 +1,18 @@
 
 package net.minecraft.core.item;
 
-import com.mojang.nbt.CompoundTag;
+// Referenced classes of package net.minecraft.src:
+//            Item, EntityPlayer, InventoryPlayer, World, 
+//            EntityArrow, ItemStack
+
 import net.minecraft.core.entity.projectile.EntityArrow;
 import net.minecraft.core.entity.projectile.EntityArrowGolden;
 import net.minecraft.core.entity.projectile.EntityArrowPurple;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.world.World;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-public class ItemBow
-    extends Item
-    implements IAmmoPickable
+public class ItemBow extends Item
 {
-    protected final List<ItemStack> AMMO_TYPES = new ArrayList<>();
 
     public ItemBow(String name, int id)
     {
@@ -25,112 +21,43 @@ public class ItemBow
         setMaxDamage(384);
     }
 
-    public void addAmmoType(ItemStack stack) {
-        stack.stackSize = 1;
-        for (ItemStack ammoType : AMMO_TYPES) {
-            if (ammoType.isItemEqual(stack)) {
-                return;
-            }
-        }
-        AMMO_TYPES.add(stack);
-    }
-
     @Override
     public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
     {
-        ItemStack ammoType = getPickedAmmoType(itemstack);
-        if (!hasAmmoType(entityplayer, ammoType)) {
-            List<ItemStack> filteredList = getPresentAmmoTypes(entityplayer);
-            if (filteredList.isEmpty()) return itemstack;
-            ammoType = filteredList.get(0);
-            setPickedAmmoType(itemstack, ammoType);
-        }
-
-        if (ammoType.itemID != Item.armorQuiver.id && ammoType.itemID != Item.armorQuiverGold.id) {
-            if (!entityplayer.inventory.consumeInventoryItem(ammoType.itemID)) {
-                return itemstack;
-            }
-        }
-
-        itemstack.damageItem(1, entityplayer);
-        world.playSoundAtEntity(entityplayer, entityplayer, "random.bow", 0.3f, 1.0F / (itemRand.nextFloat() * 0.4F + 0.8F));
-        if (!world.isClientSide) {
-            handleAmmoFired(ammoType, world, entityplayer);
-        }
-
-        if (ammoType.itemID == Item.armorQuiver.id) {
+        ItemStack quiverSlot = entityplayer.inventory.armorItemInSlot(2);
+        if(quiverSlot != null && quiverSlot.itemID == Item.armorQuiver.id && quiverSlot.getMetadata() < quiverSlot.getMaxDamage()){
             entityplayer.inventory.armorItemInSlot(2).damageItem(1, entityplayer);
+            itemstack.damageItem(1, entityplayer);
+            world.playSoundAtEntity(entityplayer, entityplayer, "random.bow", 0.3f, 1.0F / (itemRand.nextFloat() * 0.4F + 0.8F));
+            if (!world.isClientSide) {
+                world.entityJoinedWorld(new EntityArrow(world, entityplayer, true, 0));
+            }
         }
-
-        return itemstack;
-    }
-
-    private void handleAmmoFired(ItemStack ammoType, World world, EntityPlayer player) {
-        if (ammoType.itemID == Item.ammoArrow.id) {
-            world.entityJoinedWorld(new EntityArrow(world, player, true, 0));
-        } else if (ammoType.itemID == Item.ammoArrowGold.id) {
-            world.entityJoinedWorld(new EntityArrowGolden(world, player, true));
-        } else if (ammoType.itemID == Item.armorQuiver.id) {
-            world.entityJoinedWorld(new EntityArrow(world, player, true, 0));
-        } else if (ammoType.itemID == Item.armorQuiverGold.id) {
-            world.entityJoinedWorld(new EntityArrowPurple(world, player, false));
-        }
-    }
-
-    @Override
-    public boolean hasAmmoType(EntityPlayer player, ItemStack ammoType) {
-        ItemStack quiverSlot = player.inventory.armorItemInSlot(2);
-
-        if (ammoType.itemID == Item.armorQuiver.id) {
-            return quiverSlot != null && quiverSlot.itemID == ammoType.itemID && quiverSlot.getMetadata() < quiverSlot.getMaxDamage();
-        }
-        if (ammoType.itemID == Item.armorQuiverGold.id) {
-            return quiverSlot != null && quiverSlot.itemID == ammoType.itemID;
-        }
-
-        return player.inventory.containsItem(ammoType);
-    }
-
-    @Override
-    public List<ItemStack> getAmmoTypes() {
-        return Collections.unmodifiableList(AMMO_TYPES);
-    }
-
-    @Override
-    public void setPickedAmmoType(ItemStack itemStack, ItemStack ammoType) {
-        CompoundTag tag = itemStack.getData();
-        CompoundTag ammoTag = tag.getCompoundOrDefault("ammo", null);
-        if (ammoTag == null) {
-            ammoTag = new CompoundTag();
-            tag.putCompound("ammo", ammoTag);
+        else if(quiverSlot != null && quiverSlot.itemID == Item.armorQuiverGold.id){
+            itemstack.damageItem(1, entityplayer);
+            world.playSoundAtEntity(entityplayer, entityplayer, "random.bow", 0.3f, 1.0F / (itemRand.nextFloat() * 0.4F + 0.8F));
+            if (!world.isClientSide) {
+                world.entityJoinedWorld(new EntityArrowPurple(world, entityplayer, false));
+            }
         }
-
-        writeAmmoTypeToTag(ammoType, ammoTag);
-    }
-
-    @Override
-    public ItemStack getPickedAmmoType(ItemStack itemStack) {
-        CompoundTag tag = itemStack.getData();
-        CompoundTag ammoTag = tag.getCompoundOrDefault("ammo", null);
-        if (ammoTag == null) {
-            ammoTag = new CompoundTag();
-            writeAmmoTypeToTag(getDefaultAmmoType(), ammoTag);
-            tag.putCompound("ammo", ammoTag);
+        else if (entityplayer.inventory.consumeInventoryItem(Item.ammoArrowGold.id))
+        {
+            itemstack.damageItem(1, entityplayer);
+            world.playSoundAtEntity(entityplayer, entityplayer, "random.bow", 0.3f, 1.0F / (itemRand.nextFloat() * 0.4F + 0.8F));
+            if(!world.isClientSide)
+            {
+                world.entityJoinedWorld(new EntityArrowGolden(world, entityplayer, true));
+            }
         }
-
-        short id = ammoTag.getShortOrDefault("id", (short) getDefaultAmmoType().itemID);
-
-        for (ItemStack stack : AMMO_TYPES) {
-            if (stack.itemID == id) {
-                return stack;
+        else if(entityplayer.inventory.consumeInventoryItem(Item.ammoArrow.id))
+        {
+            itemstack.damageItem(1, entityplayer);
+            world.playSoundAtEntity(entityplayer, entityplayer, "random.bow", 0.3f, 1.0F / (itemRand.nextFloat() * 0.4F + 0.8F));
+            if(!world.isClientSide)
+            {
+                world.entityJoinedWorld(new EntityArrow(world, entityplayer, true, 0));
             }
         }
-
-        return getDefaultAmmoType();
-    }
-
-    private void writeAmmoTypeToTag(ItemStack ammoType, CompoundTag ammoTag) {
-        ammoTag.putShort("id", (short) ammoType.itemID);
+        return itemstack;
     }
-
 }
diff --git a/src/main/java/net/minecraft/core/item/ItemEgg.java b/src/main/java/net/minecraft/core/item/ItemEgg.java
index ce28ed5ee..f75878bd4 100644
--- a/src/main/java/net/minecraft/core/item/ItemEgg.java
+++ b/src/main/java/net/minecraft/core/item/ItemEgg.java
@@ -8,7 +8,11 @@ import net.minecraft.core.entity.projectile.EntityEgg;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.world.World;
 
-public class ItemEgg extends Item
+import java.util.Random;
+
+public class ItemEgg
+    extends Item
+    implements IDispensable
 {
 
     public ItemEgg(String name, int id)
@@ -28,4 +32,11 @@ public class ItemEgg extends Item
         }
         return itemstack;
     }
+
+    @Override
+    public void onDispensed(ItemStack itemStack, World world, double x, double y, double z, int xOffset, int zOffset, Random random) {
+        EntityEgg egg = new EntityEgg(world, x, y, z);
+        egg.setHeading(xOffset, 0.1D, zOffset, 1.1F, 6F);
+        world.entityJoinedWorld(egg);
+    }
 }
diff --git a/src/main/java/net/minecraft/core/item/ItemHandCannonLoaded.java b/src/main/java/net/minecraft/core/item/ItemHandCannonLoaded.java
index f39cd6cc1..13f6cb549 100644
--- a/src/main/java/net/minecraft/core/item/ItemHandCannonLoaded.java
+++ b/src/main/java/net/minecraft/core/item/ItemHandCannonLoaded.java
@@ -1,8 +1,11 @@
 package net.minecraft.core.item;
 
+// Referenced classes of package net.minecraft.src:
+//            Item, EntityPlayer, InventoryPlayer, World,
+//            EntityArrow, ItemStack
+
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.entity.projectile.EntityCannonball;
-import net.minecraft.core.entity.projectile.EntityFireball;
 import net.minecraft.core.world.World;
 
 public class ItemHandCannonLoaded extends Item
@@ -23,7 +26,7 @@ public class ItemHandCannonLoaded extends Item
 		if(!world.isClientSide)
 		{
 			itemstack.damageItem(1, entityplayer);
-			handleAmmoFired(getAmmoType(itemstack), world, entityplayer);
+			world.entityJoinedWorld(new EntityCannonball(world, entityplayer));
 			if(itemstack.stackSize <= 0) {
 				return null;
 			}
@@ -31,14 +34,4 @@ public class ItemHandCannonLoaded extends Item
 		}
         return itemstack;
     }
-
-	private ItemStack getAmmoType(ItemStack itemStack) {
-		return ((IAmmoPickable) Item.handcannonUnloaded).getPickedAmmoType(itemStack);
-	}
-
-	private void handleAmmoFired(ItemStack ammoType, World world, EntityPlayer player) {
-		if (ammoType.itemID == Item.ammoChargeExplosive.id) {
-			world.entityJoinedWorld(new EntityCannonball(world, player));
-		}
-	}
 }
diff --git a/src/main/java/net/minecraft/core/item/ItemHandCannonUnloaded.java b/src/main/java/net/minecraft/core/item/ItemHandCannonUnloaded.java
index dcdb46749..9319f67e6 100644
--- a/src/main/java/net/minecraft/core/item/ItemHandCannonUnloaded.java
+++ b/src/main/java/net/minecraft/core/item/ItemHandCannonUnloaded.java
@@ -1,18 +1,14 @@
 package net.minecraft.core.item;
 
-import com.mojang.nbt.CompoundTag;
+// Referenced classes of package net.minecraft.src:
+//            Item, EntityPlayer, InventoryPlayer, World,
+//            EntityArrow, ItemStack
+
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.world.World;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-public class ItemHandCannonUnloaded
-    extends Item
-    implements IAmmoPickable
+public class ItemHandCannonUnloaded extends Item
 {
-    private final List<ItemStack> AMMO_TYPES = new ArrayList<>();
 
     public ItemHandCannonUnloaded(String name, int id)
     {
@@ -21,79 +17,14 @@ public class ItemHandCannonUnloaded
         maxStackSize = 1;
     }
 
-    public void addAmmoType(ItemStack stack) {
-        stack.stackSize = 1;
-        for (ItemStack ammoType : AMMO_TYPES) {
-            if (ammoType.isItemEqual(stack)) {
-                return;
-            }
-        }
-        AMMO_TYPES.add(stack);
-    }
-
-    @Override
-    public CompoundTag getDefaultTag() {
-        CompoundTag tag = super.getDefaultTag();
-        CompoundTag ammoTag = new CompoundTag();
-        writeAmmoTypeToTag(getDefaultAmmoType(), ammoTag);
-        tag.putCompound("ammo", ammoTag);
-
-        return tag;
-    }
-
     @Override
     public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
     {
-        ItemStack ammoType = getPickedAmmoType(itemstack);
-        if (entityplayer.inventory.consumeInventoryItem(ammoType.itemID))
+        if (entityplayer.inventory.consumeInventoryItem(Item.ammoChargeExplosive.id))
         {
             world.playSoundAtEntity(entityplayer, entityplayer, "random.click", 1.0F, 1.9F / (itemRand.nextFloat() * 0.2F + 0.4F));
             return new ItemStack(Item.handcannonLoaded, 1, itemstack.getMetadata(), itemstack.getData());
         }
         return itemstack;
     }
-
-    @Override
-    public List<ItemStack> getAmmoTypes() {
-        return Collections.unmodifiableList(AMMO_TYPES);
-    }
-
-    @Override
-    public void setPickedAmmoType(ItemStack itemStack, ItemStack ammoType) {
-        CompoundTag tag = itemStack.getData();
-        CompoundTag ammoTag = tag.getCompoundOrDefault("ammo", null);
-        if (ammoTag == null) {
-            ammoTag = new CompoundTag();
-            tag.putCompound("ammo", ammoTag);
-        }
-
-        writeAmmoTypeToTag(ammoType, ammoTag);
-    }
-
-    @Override
-    public ItemStack getPickedAmmoType(ItemStack itemStack) {
-        CompoundTag tag = itemStack.getData();
-        CompoundTag ammoTag = tag.getCompoundOrDefault("ammo", null);
-        if (ammoTag == null) {
-            ammoTag = new CompoundTag();
-            writeAmmoTypeToTag(getDefaultAmmoType(), ammoTag);
-            tag.putCompound("ammo", ammoTag);
-        }
-
-        short id = ammoTag.getShortOrDefault("id", (short) getDefaultAmmoType().itemID);
-        short damage = ammoTag.getShortOrDefault("Damage", (short) getDefaultAmmoType().getMetadata());
-
-        for (ItemStack stack : AMMO_TYPES) {
-            if (stack.itemID == id && stack.getMetadata() == damage) {
-                return stack;
-            }
-        }
-
-        return getDefaultAmmoType();
-    }
-
-    private void writeAmmoTypeToTag(ItemStack ammoType, CompoundTag ammoTag) {
-        ammoTag.putShort("id", (short) ammoType.itemID);
-        ammoTag.putShort("Damage", (short) ammoType.getMetadata());
-    }
 }
diff --git a/src/main/java/net/minecraft/core/item/ItemPebble.java b/src/main/java/net/minecraft/core/item/ItemPebble.java
index b81b45b0e..cb2ce19f0 100644
--- a/src/main/java/net/minecraft/core/item/ItemPebble.java
+++ b/src/main/java/net/minecraft/core/item/ItemPebble.java
@@ -14,7 +14,11 @@ import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
 
-public class ItemPebble extends Item
+import java.util.Random;
+
+public class ItemPebble
+    extends Item
+    implements IDispensable
 {
 
     public ItemPebble(String name, int id)
@@ -23,6 +27,8 @@ public class ItemPebble extends Item
         maxStackSize = 64;
     }
 
+
+
     @Override
     public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer entityplayer)
     {
@@ -121,4 +127,11 @@ public class ItemPebble extends Item
         return false;
 
     }
+
+    @Override
+    public void onDispensed(ItemStack itemStack, World world, double x, double y, double z, int xOffset, int zOffset, Random random) {
+        EntityPebble pebble = new EntityPebble(world, x, y, z);
+        pebble.setHeading(xOffset, 0.1D, zOffset, 1.1F, 6F);
+        world.entityJoinedWorld(pebble);
+    }
 }
diff --git a/src/main/java/net/minecraft/core/item/ItemSnowball.java b/src/main/java/net/minecraft/core/item/ItemSnowball.java
index 01658a163..ccc94d892 100644
--- a/src/main/java/net/minecraft/core/item/ItemSnowball.java
+++ b/src/main/java/net/minecraft/core/item/ItemSnowball.java
@@ -8,7 +8,11 @@ import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.entity.projectile.EntitySnowball;
 import net.minecraft.core.world.World;
 
-public class ItemSnowball extends Item
+import java.util.Random;
+
+public class ItemSnowball
+    extends Item
+    implements IDispensable
 {
 
     public ItemSnowball(String name, int id)
@@ -28,4 +32,11 @@ public class ItemSnowball extends Item
         }
         return itemstack;
     }
+
+    @Override
+    public void onDispensed(ItemStack itemStack, World world, double x, double y, double z, int xOffset, int zOffset, Random random) {
+        EntitySnowball entitysnowball = new EntitySnowball(world, x, y, z);
+        entitysnowball.setHeading(xOffset, 0.1D, zOffset, 1.1F, 6F);
+        world.entityJoinedWorld(entitysnowball);
+    }
 }
diff --git a/src/main/java/net/minecraft/core/item/ItemStack.java b/src/main/java/net/minecraft/core/item/ItemStack.java
index ef0d986b6..fb13326c6 100644
--- a/src/main/java/net/minecraft/core/item/ItemStack.java
+++ b/src/main/java/net/minecraft/core/item/ItemStack.java
@@ -367,12 +367,7 @@ public final class ItemStack
 
     public boolean isItemEqual(ItemStack itemstack)
     {
-        if (itemstack == null) return false;
-        boolean idMatches = itemID == itemstack.itemID;
-        if (idMatches && getItem().getHasSubtypes()) {
-            return metadata == itemstack.metadata;
-        }
-        return idMatches;
+        return itemID == itemstack.itemID && metadata == itemstack.metadata;
     }
 
     public String getItemName()
diff --git a/src/main/java/net/minecraft/core/item/ItemWandSpawner.java b/src/main/java/net/minecraft/core/item/ItemWandSpawner.java
index 3b5c1673f..f4f6b6b4c 100644
--- a/src/main/java/net/minecraft/core/item/ItemWandSpawner.java
+++ b/src/main/java/net/minecraft/core/item/ItemWandSpawner.java
@@ -1,5 +1,6 @@
 package net.minecraft.core.item;
 
+import net.minecraft.core.block.BlockDispenser;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityDispatcher;
 import net.minecraft.core.entity.EntityLiving;
@@ -8,7 +9,12 @@ import net.minecraft.core.player.gamemode.Gamemode;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.world.World;
 
-public class ItemWandSpawner extends Item{
+import java.util.Random;
+
+public class ItemWandSpawner
+    extends Item
+    implements IDispensable
+{
     public ItemWandSpawner(String name, int id) {
         super(name, id);
     }
@@ -24,6 +30,14 @@ public class ItemWandSpawner extends Item{
         return itemstack;
     }
 
+    private String getEntityId(ItemStack itemStack) {
+        String id = itemStack.getData().getString("monster");
+        if (id == null || id.isEmpty()){
+            id = "Pig";
+        }
+        return id;
+    }
+
     @Override
     public boolean onItemUse(ItemStack itemstack, EntityPlayer entityplayer, World world, int blockX, int blockY, int blockZ, Side side, double xPlaced, double yPlaced)
     {
@@ -32,11 +46,7 @@ public class ItemWandSpawner extends Item{
             return false;
         }
         if (!world.isClientSide){
-            String id = itemstack.getData().getString("monster");
-            if (id == null || id.isEmpty()){
-                id = "Pig";
-            }
-            Entity entity = EntityDispatcher.createEntityInWorld(id, world);
+            Entity entity = EntityDispatcher.createEntityInWorld(getEntityId(itemstack), world);
             if (entity != null){
                 entity.setPos(blockX + side.getOffsetX() + 0.5f, blockY + side.getOffsetY(), blockZ + side.getOffsetZ() + 0.5f);
                 entity.spawnInit();
@@ -48,4 +58,22 @@ public class ItemWandSpawner extends Item{
         }
         return true;
     }
+
+    @Override
+    public void onDispensed(ItemStack itemStack, World world, double x, double y, double z, int xOffset, int zOffset, Random random) {
+        Entity entity = EntityDispatcher.createEntityInWorld(getEntityId(itemStack), world);
+        if (entity != null){
+            entity.setPos(x + xOffset * 0.5, y, z + zOffset * 0.5);
+            entity.spawnInit();
+            if (itemStack.hasCustomName() && entity instanceof EntityLiving){
+                ((EntityLiving)entity).setNickname(itemStack.getCustomName());
+            }
+            world.entityJoinedWorld(entity);
+        }
+    }
+
+    @Override
+    public boolean isRemovedOnDispense() {
+        return false;
+    }
 }
diff --git a/src/main/java/net/minecraft/core/net/command/commands/GenerateCommand.java b/src/main/java/net/minecraft/core/net/command/commands/GenerateCommand.java
index 8a3f9b3a0..108c68288 100644
--- a/src/main/java/net/minecraft/core/net/command/commands/GenerateCommand.java
+++ b/src/main/java/net/minecraft/core/net/command/commands/GenerateCommand.java
@@ -1,5 +1,18 @@
 package net.minecraft.core.net.command.commands;
 
+import com.b100.utils.Utils;
+import net.minecraft.core.block.Block;
+import net.minecraft.core.entity.player.EntityPlayer;
+import net.minecraft.core.net.command.Command;
+import net.minecraft.core.net.command.CommandError;
+import net.minecraft.core.net.command.CommandHandler;
+import net.minecraft.core.net.command.CommandSender;
+import net.minecraft.core.net.command.TextFormatting;
+import net.minecraft.core.util.helper.MathHelper;
+import net.minecraft.core.util.helper.ReflectionHelper;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
+import net.minecraft.core.world.generate.feature.WorldFeature;
+
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Parameter;
 import java.util.ArrayList;
@@ -10,18 +23,6 @@ import java.util.Map.Entry;
 import java.util.Random;
 import java.util.Set;
 
-import com.b100.utils.Utils;
-import net.minecraft.core.block.Block;
-import net.minecraft.core.entity.player.EntityPlayer;
-import net.minecraft.core.util.helper.MathHelper;
-import net.minecraft.core.world.generate.feature.WorldFeature;
-import net.minecraft.core.net.command.TextFormatting;
-import net.minecraft.core.net.command.Command;
-import net.minecraft.core.net.command.CommandError;
-import net.minecraft.core.net.command.CommandHandler;
-import net.minecraft.core.net.command.CommandSender;
-import net.minecraft.core.util.helper.ReflectionHelper;
-
 public class GenerateCommand extends Command {
 	
 	private static Map<String, Class<? extends WorldFeature>> worldFeatures = new HashMap<>();
@@ -103,11 +104,20 @@ public class GenerateCommand extends Command {
 			sender.sendMessage("Feature " + worldFeatureClass.getSimpleName() + " requires arguments: ");
 			for(Constructor<?> c : worldFeatureClass.getConstructors()) {
 				StringBuilder argString = new StringBuilder();
-				
+				MethodParametersAnnotation annotation = null;
+				if (c.isAnnotationPresent(MethodParametersAnnotation.class)){
+					annotation = c.getAnnotation(MethodParametersAnnotation.class);
+				}
 				int i=0;
 				for(Parameter parameter : c.getParameters()) {
 					if(i > 0) argString.append(", ");
-					argString.append(parameter.getName()).append(" (").append(parameter.getType().getSimpleName()).append(")");
+					String argname;
+					if (annotation != null && annotation.names().length > i){
+						argname = annotation.names()[i];
+					} else {
+						argname = parameter.getName();
+					}
+					argString.append(argname).append(" (").append(parameter.getType().getSimpleName()).append(")");
 					i++;
 				}
 				
diff --git a/src/main/java/net/minecraft/core/player/inventory/InventoryPlayer.java b/src/main/java/net/minecraft/core/player/inventory/InventoryPlayer.java
index d59597d4b..4e4b50b8b 100644
--- a/src/main/java/net/minecraft/core/player/inventory/InventoryPlayer.java
+++ b/src/main/java/net/minecraft/core/player/inventory/InventoryPlayer.java
@@ -64,22 +64,6 @@ public class InventoryPlayer
         return -1;
     }
 
-    public boolean containsItem(ItemStack itemStack) {
-        for (ItemStack stack : mainInventory) {
-            if (itemStack.isItemEqual(stack)) {
-                return true;
-            }
-        }
-
-        for (ItemStack stack : armorInventory) {
-            if (itemStack.isItemEqual(stack)) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
     private int storeItemStack(ItemStack itemstack)
     {
         for(int i = 0; i < mainInventory.length; i++)
diff --git a/src/main/java/net/minecraft/core/player/inventory/creative/CreativeTab.java b/src/main/java/net/minecraft/core/player/inventory/creative/CreativeTab.java
deleted file mode 100644
index 60ad57121..000000000
--- a/src/main/java/net/minecraft/core/player/inventory/creative/CreativeTab.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package net.minecraft.core.player.inventory.creative;
-
-import net.minecraft.core.item.ItemStack;
-
-public class CreativeTab {
-    private final String translationKey;
-    private final ItemStack icon;
-    private final CreativeTabItemProvider itemProvider;
-
-    public CreativeTab(String translationKey, ItemStack icon, CreativeTabItemProvider itemProvider) {
-        this.translationKey = translationKey;
-        this.icon = icon;
-        this.itemProvider = itemProvider;
-    }
-
-    public String getTranslationKey() {
-        return translationKey;
-    }
-
-    public ItemStack getIcon() {
-        return icon;
-    }
-
-    public CreativeTabItemProvider getItemProvider() {
-        return itemProvider;
-    }
-}
diff --git a/src/main/java/net/minecraft/core/player/inventory/creative/CreativeTabItemProvider.java b/src/main/java/net/minecraft/core/player/inventory/creative/CreativeTabItemProvider.java
deleted file mode 100644
index f31a41f8d..000000000
--- a/src/main/java/net/minecraft/core/player/inventory/creative/CreativeTabItemProvider.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package net.minecraft.core.player.inventory.creative;
-
-import net.minecraft.core.item.ItemStack;
-
-import java.util.List;
-
-public interface CreativeTabItemProvider {
-    List<ItemStack> getItems();
-}
diff --git a/src/main/java/net/minecraft/core/player/inventory/creative/CreativeTabs.java b/src/main/java/net/minecraft/core/player/inventory/creative/CreativeTabs.java
deleted file mode 100644
index 8a60d940e..000000000
--- a/src/main/java/net/minecraft/core/player/inventory/creative/CreativeTabs.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package net.minecraft.core.player.inventory.creative;
-
-import net.minecraft.core.block.Block;
-import net.minecraft.core.block.tag.BlockTags;
-import net.minecraft.core.item.Item;
-import net.minecraft.core.item.ItemStack;
-import net.minecraft.core.item.tag.ItemTags;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-public abstract class CreativeTabs {
-    private static boolean initialized = false;
-    private static final List<CreativeTab> tabList = new ArrayList<>();
-
-    public static CreativeTab ALL;
-    public static CreativeTab BLOCKS;
-    public static CreativeTab ITEMS;
-
-    public static void init() {
-        if (initialized) return;
-        initialized = true;
-
-        ALL = register("tab.creative.all", new ItemStack(Item.ammoSnowball), () -> {
-            List<ItemStack> items = new ArrayList<>();
-            for (int i = 0; i < Item.highestItemId; i++) {
-                Item item = Item.itemsList[i];
-                if (item != null && !item.hasTag(ItemTags.NOT_IN_CREATIVE_MENU)) {
-                    items.add(new ItemStack(item));
-                }
-            }
-            for (int i = 0; i < Block.highestBlockId; i++) {
-                Block block = Block.blocksList[i];
-                if (block != null && !block.hasTag(BlockTags.NOT_IN_CREATIVE_MENU)) {
-                    items.add(new ItemStack(block));
-                }
-            }
-            return items;
-        });
-        BLOCKS = register("tab.creative.blocks", new ItemStack(Block.grass), () -> {
-            List<ItemStack> items = new ArrayList<>();
-            for (int i = 0; i < Block.highestBlockId; i++) {
-                Block block = Block.blocksList[i];
-                if (block != null && !block.hasTag(BlockTags.NOT_IN_CREATIVE_MENU)) {
-                    items.add(new ItemStack(block));
-                }
-            }
-            return items;
-        });
-        ITEMS = register("tab.creative.items", new ItemStack(Item.string), () -> {
-            List<ItemStack> items = new ArrayList<>();
-            for (int i = 0; i < Item.highestItemId; i++) {
-                Item item = Item.itemsList[i];
-                if (item != null && !item.hasTag(ItemTags.NOT_IN_CREATIVE_MENU)) {
-                    items.add(new ItemStack(item));
-                }
-            }
-            return items;
-        });
-    }
-
-    public static CreativeTab register(String translationKey, ItemStack icon, CreativeTabItemProvider itemProvider) {
-        CreativeTab tab = new CreativeTab(translationKey, icon, itemProvider);
-        tabList.add(tab);
-        return tab;
-    }
-
-    public static List<CreativeTab> getTabList() {
-        return Collections.unmodifiableList(tabList);
-    }
-
-}
diff --git a/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java b/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java
index f04e8a360..15786a4a3 100644
--- a/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java
+++ b/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java
@@ -298,7 +298,6 @@ public class BlockSoundDispatcher
         addDispatch(Block.trapdoorPlanksOakPainted, BlockSounds.WOOD);
         addDispatch(Block.trapdoorIron, BlockSounds.METAL);
         addDispatch(Block.trapdoorGlass, BlockSounds.GLASS);
-        addDispatch(Block.trapdoorGlassTinted, BlockSounds.GLASS);
 
         addDispatch(Block.tnt, BlockSounds.GRASS);
 
@@ -310,8 +309,6 @@ public class BlockSoundDispatcher
         addDispatch(Block.doorPlanksOakPaintedTop, BlockSounds.WOOD);
         addDispatch(Block.doorGlassBottom, BlockSounds.GLASS);
         addDispatch(Block.doorGlassTop, BlockSounds.GLASS);
-        addDispatch(Block.doorGlassTintedBottom, BlockSounds.GLASS);
-        addDispatch(Block.doorGlassTintedTop, BlockSounds.GLASS);
 
         addDispatch(Block.mesh, BlockSounds.METAL);
         addDispatch(Block.meshGold, BlockSounds.METAL);
diff --git a/src/main/java/net/minecraft/core/world/generate/MapGenCaves.java b/src/main/java/net/minecraft/core/world/generate/MapGenCaves.java
index adbe6497c..b681ec06c 100644
--- a/src/main/java/net/minecraft/core/world/generate/MapGenCaves.java
+++ b/src/main/java/net/minecraft/core/world/generate/MapGenCaves.java
@@ -6,6 +6,7 @@ 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.biome.Biome;
 import net.minecraft.core.world.chunk.Chunk;
 import net.minecraft.core.world.chunk.ChunkSection;
 import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
@@ -54,7 +55,7 @@ public class MapGenCaves extends MapGenBase
         boolean sharpRotVer = random.nextInt(6) == 0;
         for(; startPos < endPos; startPos++)
         {
-            double width = 1.5D + (double)(MathHelper.sin(((float)startPos * 3.141593F) / (float)endPos) * initialRadius * 1.0F);
+            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);
@@ -123,9 +124,9 @@ public class MapGenCaves extends MapGenBase
             {
                 minY = 1;
             }
-            if(maxY > (Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y) - 8)
+            if(maxY > (Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y) - (ChunkSection.SECTION_SIZE_Y / 2))
             {
-                maxY = (Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y) - 8;
+                maxY = (Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y) - (ChunkSection.SECTION_SIZE_Y / 2);
             }
             if(minZ < 0)
             {
@@ -169,10 +170,10 @@ public class MapGenCaves extends MapGenBase
             // Delete blocks in section
             for(int x = minX; x < maxX; x++)
             {
-                double xPercentage = (((double)(x + baseChunkX * Chunk.CHUNK_SIZE_X) + 0.5D) - blockX) / width;
+                double xPercentage = (((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;
+                    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)
@@ -186,7 +187,7 @@ public class MapGenCaves extends MapGenBase
                         {
                             continue zLabel;
                         }
-                        double yPercentage = (((double)y + 0.5D) - blockY) / height;
+                        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);
@@ -204,17 +205,13 @@ public class MapGenCaves extends MapGenBase
                                     result.setBlock(x, yIndex, z, 0);
                                     
                                     if(replaceTopBlock) {
-                                    	// TODO make this not hardcoded
+                                        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 == Block.dirt.id) {
-                                    		if(isAlpha) {
-                                                result.setBlock(x, yIndex - 1, z, Block.grassRetro.id);
-                                    		} else {
-                                                result.setBlock(x, yIndex - 1, z, Block.grass.id);
-                                    		}
-                                    	} else if(id == Block.dirtScorched.id) {
-                                            result.setBlock(x, yIndex - 1, z, Block.grassScorched.id);
-                                    	}
+                                    	if(id == fillBlockId) {
+                                            result.setBlock(x, yIndex - 1, z, topBlockId);
+                                        }
                                     }
                                 }
                             }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/MethodParametersAnnotation.java b/src/main/java/net/minecraft/core/world/generate/feature/MethodParametersAnnotation.java
new file mode 100644
index 000000000..15a0fe44b
--- /dev/null
+++ b/src/main/java/net/minecraft/core/world/generate/feature/MethodParametersAnnotation.java
@@ -0,0 +1,12 @@
+package net.minecraft.core.world.generate.feature;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})
+public @interface MethodParametersAnnotation {
+    String[] names();
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureClay.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureClay.java
index 1676565eb..8e90a8c70 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureClay.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureClay.java
@@ -12,12 +12,11 @@ import java.util.Random;
 //            MathHelper
 
 public class WorldFeatureClay extends WorldFeature
-{
-	
-	public WorldFeatureClay(int numberOfBlocks) {
+{	public WorldFeatureClay(int numberOfBlocks) {
 		this(numberOfBlocks, Block.sand);
 	}
 
+    @MethodParametersAnnotation(names = {"numberOfBlocks", "block"})
     public WorldFeatureClay(int numberOfBlocks, Block block)
     {
         clayBlockId = Block.blockClay.id;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDeadBush.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDeadBush.java
index bba540b80..0686b8a7a 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDeadBush.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDeadBush.java
@@ -1,7 +1,6 @@
 package net.minecraft.core.world.generate.feature;
 
 import net.minecraft.core.block.Block;
-import net.minecraft.core.block.BlockFlower;
 import net.minecraft.core.block.BlockLeavesBase;
 import net.minecraft.core.world.World;
 
@@ -13,10 +12,11 @@ import java.util.Random;
 
 public class WorldFeatureDeadBush extends WorldFeature
 {
-
-    public WorldFeatureDeadBush(int i)
+    private final int blockId;
+    @MethodParametersAnnotation(names = {"blockId"})
+    public WorldFeatureDeadBush(int blockId)
     {
-        field_28058_a = i;
+        this.blockId = blockId;
     }
 
     @Override
@@ -28,14 +28,12 @@ public class WorldFeatureDeadBush extends WorldFeature
             int j1 = (x + random.nextInt(8)) - random.nextInt(8);
             int k1 = (y + random.nextInt(4)) - random.nextInt(4);
             int l1 = (z + random.nextInt(8)) - random.nextInt(8);
-            if(world.isAirBlock(j1, k1, l1) && ((BlockFlower)Block.blocksList[field_28058_a]).canBlockStay(world, j1, k1, l1))
+            if(world.isAirBlock(j1, k1, l1) && Block.blocksList[blockId].canBlockStay(world, j1, k1, l1))
             {
-                world.setBlock(j1, k1, l1, field_28058_a);
+                world.setBlock(j1, k1, l1, blockId);
             }
         }
 
         return true;
     }
-
-    private int field_28058_a;
 }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDungeon.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDungeon.java
index 8a381d4a5..ce0c56b13 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDungeon.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDungeon.java
@@ -24,6 +24,7 @@ public class WorldFeatureDungeon extends WorldFeature
     public WeightedRandomBag<WeightedRandomLootObject> chestLoot;
     public WeightedRandomBag<String> spawnerMonsters;
 
+    @MethodParametersAnnotation(names = {"blockIdWalls", "blockIdFloor", "mobOverrideDispatcherId"})
     public WorldFeatureDungeon(int blockIdWalls, int blockIdFloor, String mobOverride)
     {
     	this.blockIdWalls = blockIdWalls;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFlowers.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFlowers.java
index af123fc00..98053cc51 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFlowers.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFlowers.java
@@ -1,7 +1,6 @@
 package net.minecraft.core.world.generate.feature;
 
 import net.minecraft.core.block.Block;
-import net.minecraft.core.block.BlockFlower;
 import net.minecraft.core.world.World;
 
 import java.util.Random;
@@ -11,10 +10,11 @@ import java.util.Random;
 
 public class WorldFeatureFlowers extends WorldFeature
 {
-
-    public WorldFeatureFlowers(int i)
+    private final int plantBlockId;
+    @MethodParametersAnnotation(names = {"plantBlockId"})
+    public WorldFeatureFlowers(int plantBlockId)
     {
-        plantBlockId = i;
+        this.plantBlockId = plantBlockId;
     }
 
     @Override
@@ -25,7 +25,7 @@ public class WorldFeatureFlowers extends WorldFeature
             int i1 = (x + random.nextInt(8)) - random.nextInt(8);
             int j1 = (y + random.nextInt(4)) - random.nextInt(4);
             int k1 = (z + random.nextInt(8)) - random.nextInt(8);
-            if(world.isAirBlock(i1, j1, k1) && ((BlockFlower) Block.blocksList[plantBlockId]).canBlockStay(world, i1, j1, k1))
+            if(world.isAirBlock(i1, j1, k1) && Block.blocksList[plantBlockId].canBlockStay(world, i1, j1, k1))
             {
                 world.setBlock(i1, j1, k1, plantBlockId);
             }
@@ -33,6 +33,4 @@ public class WorldFeatureFlowers extends WorldFeature
 
         return true;
     }
-
-    private int plantBlockId;
 }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGrassPatch.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGrassPatch.java
index a7dc90944..40d66b808 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGrassPatch.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGrassPatch.java
@@ -11,7 +11,7 @@ import java.util.Random;
 
 public class WorldFeatureGrassPatch extends WorldFeature
 {
-
+    @MethodParametersAnnotation(names = {"size", "blockToPlace"})
     public WorldFeatureGrassPatch(int size, int blockToPlace)
     {
         numberOfBlocks = size;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLake.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLake.java
index 95909c946..bfed04599 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLake.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLake.java
@@ -14,7 +14,7 @@ import java.util.Random;
 
 public class WorldFeatureLake extends WorldFeature
 {
-
+    @MethodParametersAnnotation(names = {"liquidId"})
     public WorldFeatureLake(int liquidId)
     {
         this.liquidId = liquidId;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLiquid.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLiquid.java
index 3bea9f268..d82871189 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLiquid.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLiquid.java
@@ -10,10 +10,10 @@ import java.util.Random;
 
 public class WorldFeatureLiquid extends WorldFeature
 {
-
-    public WorldFeatureLiquid(int i)
+    @MethodParametersAnnotation(names = {"liquidId"})
+    public WorldFeatureLiquid(int liquidId)
     {
-        liquidBlockId = i;
+        liquidBlockId = liquidId;
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMeadow.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMeadow.java
index 7117c3419..61d5ef9a9 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMeadow.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMeadow.java
@@ -3,14 +3,12 @@ package net.minecraft.core.world.generate.feature;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockLeavesBase;
 import net.minecraft.core.world.World;
-import org.lwjgl.Sys;
 
-import java.util.List;
 import java.util.Random;
 
 public class WorldFeatureMeadow extends WorldFeature
 {
-
+    @MethodParametersAnnotation(names = {"blockIds"})
     public WorldFeatureMeadow(int[] blockIds)
     {
         this.blockIds = blockIds;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherLava.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherLava.java
index 2cbe9ba53..ca185c8d6 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherLava.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherLava.java
@@ -10,10 +10,11 @@ import java.util.Random;
 
 public class WorldFeatureNetherLava extends WorldFeature
 {
-
-    public WorldFeatureNetherLava(int i)
+    private final int blockId;
+    @MethodParametersAnnotation(names = {"blockId"})
+    public WorldFeatureNetherLava(int blockId)
     {
-        field_4158_a = i;
+        this.blockId = blockId;
     }
 
     @Override
@@ -71,13 +72,11 @@ public class WorldFeatureNetherLava extends WorldFeature
         }
         if(l == 4 && i1 == 1)
         {
-            world.setBlockWithNotify(x, y, z, field_4158_a);
+            world.setBlockWithNotify(x, y, z, blockId);
             world.scheduledUpdatesAreImmediate = true;
-            Block.blocksList[field_4158_a].updateTick(world, x, y, z, random);
+            Block.blocksList[blockId].updateTick(world, x, y, z, random);
             world.scheduledUpdatesAreImmediate = false;
         }
         return true;
     }
-
-    private int field_4158_a;
 }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureOre.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureOre.java
index 2e2db1ad1..3326a24fe 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureOre.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureOre.java
@@ -11,7 +11,7 @@ import java.util.Random;
 
 public class WorldFeatureOre extends WorldFeature
 {
-
+    @MethodParametersAnnotation(names = {"blockId", "numberOfBlocks", "hasStoneStates"})
     public WorldFeatureOre(int blockId, int numberOfBlocks, boolean hasStoneStates)
     {
         minableBlockId = blockId;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureRichScorchedDirt.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureRichScorchedDirt.java
index 0dcddb99d..dcf3ff191 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureRichScorchedDirt.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureRichScorchedDirt.java
@@ -1,7 +1,6 @@
 package net.minecraft.core.world.generate.feature;
 
 import net.minecraft.core.block.Block;
-import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.world.World;
 
 import java.util.Random;
@@ -11,10 +10,10 @@ import java.util.Random;
 
 public class WorldFeatureRichScorchedDirt extends WorldFeature
 {
-
-    public WorldFeatureRichScorchedDirt(int j)
+    @MethodParametersAnnotation(names = {"numberOfBlocks"})
+    public WorldFeatureRichScorchedDirt(int numberOfBlocks)
     {
-        numberOfBlocks = j;
+        this.numberOfBlocks = numberOfBlocks;
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureTallGrass.java b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureTallGrass.java
index 865e4b71f..ec473a14a 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureTallGrass.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureTallGrass.java
@@ -12,16 +12,20 @@ import java.util.Random;
 
 public class WorldFeatureTallGrass extends WorldFeature
 {
-
-    public WorldFeatureTallGrass(int i)
+    private final int blockId;
+    @MethodParametersAnnotation(names = {"blockId"})
+    public WorldFeatureTallGrass(int blockId)
     {
-        blockId = i;
+        this.blockId = blockId;
     }
 
     @Override
 	public boolean generate(World world, Random random, int x, int y, int z)
     {
-        for(int l = 0; ((l = world.getBlockId(x, y, z)) == 0 || Block.blocksList[l] instanceof BlockLeavesBase) && y > 0; y--) { }
+        int l;
+        while (((l = world.getBlockId(x, y, z)) == 0 || Block.blocksList[l] instanceof BlockLeavesBase) && y > 0) {
+            y--;
+        }
         for(int i1 = 0; i1 < 128; i1++)
         {
             int j1 = (x + random.nextInt(8)) - random.nextInt(8);
@@ -38,6 +42,4 @@ public class WorldFeatureTallGrass extends WorldFeature
 
         return true;
     }
-
-    private int blockId;
 }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTree.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTree.java
index c4cc702be..5836b8c06 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTree.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTree.java
@@ -1,18 +1,20 @@
 package net.minecraft.core.world.generate.feature.tree;
 
-import java.util.Random;
-
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
+import java.util.Random;
+
 public class WorldFeatureTree extends WorldFeature
 {
 	protected int leavesID;
 	protected int logID;
 	protected int heightMod;
-	
+
+    @MethodParametersAnnotation(names = {"leavesID", "logID", "heightMod"})
     public WorldFeatureTree(int leavesID, int logID, int heightMod)
     {
     	this.leavesID = leavesID;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java
index 5f990d1b3..29388dc5e 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java
@@ -1,19 +1,21 @@
 package net.minecraft.core.world.generate.feature.tree;
 
-import java.util.Random;
-
 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.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
+import java.util.Random;
+
 public class WorldFeatureTreeCaatinga extends WorldFeature
 {
     protected int leavesID;
     protected int logID;
     protected int heightMod = 3;
 
+    @MethodParametersAnnotation(names = {"leavesID", "logID"})
     public WorldFeatureTreeCaatinga(int leavesID, int logID)
     {
         this.leavesID = leavesID;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCherry.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCherry.java
index 9338759c5..ec9563044 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCherry.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCherry.java
@@ -1,13 +1,15 @@
 package net.minecraft.core.world.generate.feature.tree;
 
-import java.util.Random;
-
 import net.minecraft.core.block.Block;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.season.Seasons;
 
+import java.util.Random;
+
 public class WorldFeatureTreeCherry extends WorldFeatureTree {
 
+	@MethodParametersAnnotation(names = {"leavesID", "logID", "heightMod"})
 	public WorldFeatureTreeCherry(int leavesID, int logID, int heightMod) {
 		super(leavesID, logID, heightMod);
 	}
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeEucalyptus.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeEucalyptus.java
index 61025a4fa..8e3ed9176 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeEucalyptus.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeEucalyptus.java
@@ -4,6 +4,7 @@ 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.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
 import java.util.Random;
@@ -12,14 +13,14 @@ public class WorldFeatureTreeEucalyptus extends WorldFeature
 {
     protected int leavesID;
     protected int logID;
-
+    @MethodParametersAnnotation(names = {"leavesID", "logID"})
     public WorldFeatureTreeEucalyptus(int leavesID, int logID)
     {
         field_881_b = new Random();
         field_878_e = 0;
-        field_876_g = 0.38100000000000001D;
+        field_876_g = 0.381D;
         field_875_h = 1.0D;
-        field_874_i = 0.38100000000000001D;
+        field_874_i = 0.381D;
         field_873_j = 1.0D;
         field_872_k = 1.0D;
         field_871_l = 1;
@@ -36,7 +37,7 @@ public class WorldFeatureTreeEucalyptus extends WorldFeature
         {
             height = field_878_e - 1;
         }
-        int i = (int)(1.38100000000000001D + java.lang.Math.pow((field_872_k * (double)field_878_e) / 7D, 2D));
+        int i = (int)(1.381D + java.lang.Math.pow((field_872_k * (double)field_878_e) / 7D, 2D));
         if(i < 1)
         {
             i = 1;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancy.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancy.java
index 509a2e260..fa853cf7c 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancy.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancy.java
@@ -4,6 +4,7 @@ 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.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
 import java.util.Random;
@@ -34,12 +35,14 @@ public class WorldFeatureTreeFancy extends WorldFeature
     int leavesHeight;
     int[][] foliageCoords;
     int heightMod;
-	
+
+    @MethodParametersAnnotation(names = {"leavesID", "logID"})
     public WorldFeatureTreeFancy(int leavesID, int logID)
     {
         this(leavesID, logID, 0);
     }
 
+    @MethodParametersAnnotation(names = {"leavesID", "logID", "heightMod"})
     public WorldFeatureTreeFancy(int leavesID, int logID, int heightMod)
     {
         treeRand = new Random();
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancyRainforest.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancyRainforest.java
index 373f1ce31..3456bdc86 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancyRainforest.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancyRainforest.java
@@ -4,6 +4,7 @@ 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.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
 import java.util.Random;
@@ -15,7 +16,7 @@ public class WorldFeatureTreeFancyRainforest extends WorldFeature
 {
 	protected int leavesID;
 	protected int logID;
-	
+    @MethodParametersAnnotation(names = {"leavesID", "logID"})
     public WorldFeatureTreeFancyRainforest(int leavesID, int logID)
     {
         treeRand = new Random();
@@ -32,7 +33,7 @@ public class WorldFeatureTreeFancyRainforest extends WorldFeature
         this.logID = logID;
         this.heightMod = 0;
     }
-
+    @MethodParametersAnnotation(names = {"leavesID", "logID", "heightMod"})
     public WorldFeatureTreeFancyRainforest(int leavesID, int logID, int heightMod)
     {
         treeRand = new Random();
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreePalm.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreePalm.java
index 76e0e2904..70641d5bc 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreePalm.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreePalm.java
@@ -1,11 +1,5 @@
 package net.minecraft.core.world.generate.feature.tree;
 
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
-
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockFlower;
 import net.minecraft.core.block.BlockLeavesBase;
@@ -15,8 +9,15 @@ import net.minecraft.core.util.helper.Direction;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.chunk.ChunkPosition;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+
 public class WorldFeatureTreePalm extends WorldFeature {
 	
 	protected World world;
@@ -51,7 +52,7 @@ public class WorldFeatureTreePalm extends WorldFeature {
 	
 	protected Set<Integer> intSet = new HashSet<>();
 	protected List<Integer> intList = new ArrayList<>();
-	
+	@MethodParametersAnnotation(names = {"log", "leaves", "big", "update"})
 	public WorldFeatureTreePalm(Block log, Block leaves, boolean big, boolean update) {
 		this.log = log;
 		this.leaves = leaves;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShapeSwamp.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShapeSwamp.java
index 0390a43fb..f8993efec 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShapeSwamp.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShapeSwamp.java
@@ -3,6 +3,7 @@ package net.minecraft.core.world.generate.feature.tree;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 import net.minecraft.core.world.generate.feature.WorldFeatureAlgae;
 
@@ -18,7 +19,7 @@ public class WorldFeatureTreeShapeSwamp extends WorldFeature
     protected int logID;
     protected int heightMod;
     protected Random treeRand = new Random();
-
+    @MethodParametersAnnotation(names = {"leavesID", "logID", "heightMod"})
     public WorldFeatureTreeShapeSwamp(int leavesID, int logID, int heightMod)
     {
         this.leavesID = leavesID;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShrub.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShrub.java
index f9b2b35bb..0f212cbba 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShrub.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShrub.java
@@ -3,6 +3,7 @@ package net.minecraft.core.world.generate.feature.tree;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
 
@@ -18,6 +19,7 @@ public class WorldFeatureTreeShrub extends WorldFeature
     protected int leavesID;
     protected int logID;
 
+    @MethodParametersAnnotation(names = {"leavesID", "logID"})
     public WorldFeatureTreeShrub(int leavesID, int logID)
     {
         this.leavesID = leavesID;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaBushy.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaBushy.java
index f1d744d34..70bea77a4 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaBushy.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaBushy.java
@@ -3,6 +3,7 @@ package net.minecraft.core.world.generate.feature.tree;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
 import java.util.Random;
@@ -15,7 +16,8 @@ public class WorldFeatureTreeTaigaBushy extends WorldFeature
 {
 	protected int leavesID;
 	protected int logID;
-	
+
+    @MethodParametersAnnotation(names = {"leavesID", "logID"})
     public WorldFeatureTreeTaigaBushy(int leavesID, int logID)
     {
     	this.leavesID = leavesID;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaTall.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaTall.java
index df0ed9589..9e6dfc7bf 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaTall.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaTall.java
@@ -3,6 +3,7 @@ package net.minecraft.core.world.generate.feature.tree;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
 import java.util.Random;
@@ -15,7 +16,7 @@ public class WorldFeatureTreeTaigaTall extends WorldFeature
 {
 	protected int leavesID;
 	protected int logID;
-	
+    @MethodParametersAnnotation(names = {"leavesID", "logID"})
     public WorldFeatureTreeTaigaTall(int leavesID, int logID)
     {
     	this.leavesID = leavesID;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTall.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTall.java
index fb9faad2d..ffcec1a3b 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTall.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTall.java
@@ -3,6 +3,7 @@ package net.minecraft.core.world.generate.feature.tree;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
 import java.util.Random;
@@ -16,6 +17,7 @@ public class WorldFeatureTreeTall extends WorldFeature
     protected int leavesID;
     protected int logID;
 
+    @MethodParametersAnnotation(names = {"leavesID", "logID"})
     public WorldFeatureTreeTall(int leavesID, int logID)
     {
         this.leavesID = leavesID;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeThorn.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeThorn.java
index 56b639727..99907a0a3 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeThorn.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeThorn.java
@@ -1,12 +1,14 @@
 package net.minecraft.core.world.generate.feature.tree;
 
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.tree.spooner.WorldFeatureSpoonerTreeProcedural;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class WorldFeatureTreeThorn extends WorldFeatureSpoonerTreeProcedural {
+    @MethodParametersAnnotation(names = {"height", "trunkId", "trunkData", "leavesId", "leavesData"})
     public WorldFeatureTreeThorn(int height, int trunkId, int trunkData, int leavesId, int leavesData) {
         super(height, trunkId, trunkData, leavesId, leavesData);
     }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTree.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTree.java
index 88819efd1..9e14f2184 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTree.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTree.java
@@ -3,6 +3,7 @@ package net.minecraft.core.world.generate.feature.tree.spooner;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
 import java.util.List;
@@ -61,6 +62,7 @@ public abstract class WorldFeatureSpoonerTree
 
     protected Random random = null;
 
+    @MethodParametersAnnotation(names = {"height", "trunkId", "trunkData", "leavesId", "leavesData"})
     public WorldFeatureSpoonerTree(int height, int trunkId, int trunkData, int leavesId, int leavesData) {
         this.height = height;
         this.trunkId = trunkId;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeBamboo.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeBamboo.java
index 2a5eaead6..2f51735d1 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeBamboo.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeBamboo.java
@@ -1,9 +1,11 @@
 package net.minecraft.core.world.generate.feature.tree.spooner;
 
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 
 public class WorldFeatureSpoonerTreeBamboo
     extends WorldFeatureSpoonerTreeStick {
+    @MethodParametersAnnotation(names = {"height", "trunkId", "trunkData", "leavesId", "leavesData"})
     public WorldFeatureSpoonerTreeBamboo(int height, int trunkId, int trunkData, int leavesId, int leavesData) {
         super(height, trunkId, trunkData, leavesId, leavesData);
     }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeCone.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeCone.java
index a58b13990..404446df8 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeCone.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeCone.java
@@ -1,9 +1,11 @@
 package net.minecraft.core.world.generate.feature.tree.spooner;
 
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 
 public class WorldFeatureSpoonerTreeCone
     extends WorldFeatureSpoonerTreeProcedural {
+    @MethodParametersAnnotation(names = {"height", "trunkId", "trunkData", "leavesId", "leavesData"})
     public WorldFeatureSpoonerTreeCone(int height, int trunkId, int trunkData, int leavesId, int leavesData) {
         super(height, trunkId, trunkData, leavesId, leavesData);
     }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeMangrove.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeMangrove.java
index 6893ad3bd..f2f6d2297 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeMangrove.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeMangrove.java
@@ -1,9 +1,11 @@
 package net.minecraft.core.world.generate.feature.tree.spooner;
 
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 
 public class WorldFeatureSpoonerTreeMangrove
     extends WorldFeatureSpoonerTreeRound {
+    @MethodParametersAnnotation(names = {"height", "trunkId", "trunkData", "leavesId", "leavesData"})
     public WorldFeatureSpoonerTreeMangrove(int height, int trunkId, int trunkData, int leavesId, int leavesData) {
         super(height, trunkId, trunkData, leavesId, leavesData);
     }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeNormal.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeNormal.java
index f97b0d722..6143cc9f2 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeNormal.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeNormal.java
@@ -1,10 +1,12 @@
 package net.minecraft.core.world.generate.feature.tree.spooner;
 
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 
 public class WorldFeatureSpoonerTreeNormal
     extends WorldFeatureSpoonerTreeStick {
 
+    @MethodParametersAnnotation(names = {"height", "trunkId", "trunkData", "leavesId", "leavesData"})
     public WorldFeatureSpoonerTreeNormal(int height, int trunkId, int trunkData, int leavesId, int leavesData) {
         super(height, trunkId, trunkData, leavesId, leavesData);
     }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreePalm.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreePalm.java
index 66ce45ee3..9bd66e89d 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreePalm.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreePalm.java
@@ -1,10 +1,12 @@
 package net.minecraft.core.world.generate.feature.tree.spooner;
 
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 
 public class WorldFeatureSpoonerTreePalm
     extends WorldFeatureSpoonerTree {
 
+    @MethodParametersAnnotation(names = {"height", "trunkId", "trunkData", "leavesId", "leavesData"})
     public WorldFeatureSpoonerTreePalm(int height, int trunkId, int trunkData, int leavesId, int leavesData) {
         super(height, trunkId, trunkData, leavesId, leavesData);
     }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeProcedural.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeProcedural.java
index f4aaaf686..4fb1cc92a 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeProcedural.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeProcedural.java
@@ -2,6 +2,7 @@ package net.minecraft.core.world.generate.feature.tree.spooner;
 
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -21,6 +22,7 @@ public abstract class WorldFeatureSpoonerTreeProcedural
     protected double[] foliageShape = null;
     protected List<int[]> foliageCoords = null;
 
+    @MethodParametersAnnotation(names = {"height", "trunkId", "trunkData", "leavesId", "leavesData"})
     public WorldFeatureSpoonerTreeProcedural(int height, int trunkId, int trunkData, int leavesId, int leavesData) {
         super(height, trunkId, trunkData, leavesId, leavesData);
     }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRainforest.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRainforest.java
index 428f907a2..2415a7a87 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRainforest.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRainforest.java
@@ -1,9 +1,11 @@
 package net.minecraft.core.world.generate.feature.tree.spooner;
 
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 
 public class WorldFeatureSpoonerTreeRainforest
     extends WorldFeatureSpoonerTreeProcedural {
+    @MethodParametersAnnotation(names = {"height", "trunkId", "trunkData", "leavesId", "leavesData"})
     public WorldFeatureSpoonerTreeRainforest(int height, int trunkId, int trunkData, int leavesId, int leavesData) {
         super(height, trunkId, trunkData, leavesId, leavesData);
     }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRound.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRound.java
index 66033596d..559993d4e 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRound.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRound.java
@@ -1,10 +1,12 @@
 package net.minecraft.core.world.generate.feature.tree.spooner;
 
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 
 public class WorldFeatureSpoonerTreeRound
     extends WorldFeatureSpoonerTreeProcedural {
 
+    @MethodParametersAnnotation(names = {"height", "trunkId", "trunkData", "leavesId", "leavesData"})
     public WorldFeatureSpoonerTreeRound(int height, int trunkId, int trunkData, int leavesId, int leavesData) {
         super(height, trunkId, trunkData, leavesId, leavesData);
     }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeStick.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeStick.java
index 5334b562c..b16e395e1 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeStick.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeStick.java
@@ -1,9 +1,11 @@
 package net.minecraft.core.world.generate.feature.tree.spooner;
 
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
 
 public abstract class WorldFeatureSpoonerTreeStick
     extends WorldFeatureSpoonerTree {
+    @MethodParametersAnnotation(names = {"height", "trunkId", "trunkData", "leavesId", "leavesData"})
     public WorldFeatureSpoonerTreeStick(int height, int trunkId, int trunkData, int leavesId, int leavesData) {
         super(height, trunkId, trunkData, leavesId, leavesData);
     }
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypeNether.java b/src/main/java/net/minecraft/core/world/type/WorldTypeNether.java
index 1417e4aa6..1a6f9d382 100644
--- a/src/main/java/net/minecraft/core/world/type/WorldTypeNether.java
+++ b/src/main/java/net/minecraft/core/world/type/WorldTypeNether.java
@@ -1,7 +1,9 @@
 package net.minecraft.core.world.type;
 
+import net.minecraft.client.render.colorizer.Colorizers;
 import net.minecraft.core.Global;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.phys.Vec3d;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.biome.Biomes;
@@ -63,7 +65,7 @@ public abstract class WorldTypeNether
     @Override
     public BiomeProvider createBiomeProvider(World world)
     {
-        return new BiomeProviderSingleBiome(Biomes.NETHER_NETHER, 1.0, 1.0, 1.0);
+        return new BiomeProviderSingleBiome(Biomes.NETHER_NETHER, 1.0, 0.0, 1.0);
     }
 
     @Override
@@ -103,6 +105,18 @@ public abstract class WorldTypeNether
     @Override
     public Vec3d getFogColor(World world, double x, double y, double z, float celestialAngle, float partialTick)
     {
+    	if(Colorizers.fog.isEnabled()) {
+	    	int x1 = MathHelper.floor_double(x);
+	    	int y1 = MathHelper.floor_double(y);
+	    	int z1 = MathHelper.floor_double(z);
+	    	
+	    	int color = Colorizers.fog.getColor(world, x1, y1, z1);
+	    	
+	    	float r = ((color >> 16) & 0xFF) / 255.0f;
+	    	float g = ((color >> 8) & 0xFF) / 255.0f;
+	    	float b = (color & 0xFF) / 255.0f;
+	    	return Vec3d.createVector(r, g, b);
+	    }
         return Vec3d.createVector(0.0, 0.0, 0.0);
     }
 
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldAmplified.java b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldAmplified.java
index b22c248b8..a2a529ac8 100644
--- a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldAmplified.java
+++ b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldAmplified.java
@@ -18,10 +18,10 @@ public class WorldTypeOverworldAmplified
             Weather.overworldClear,
             new WindManagerGeneric(),
             SeasonConfig.builder()
-                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 7)
+                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 14)
                 .build()
         );
     }
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldExtended.java b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldExtended.java
index 97ab16930..7befdd494 100644
--- a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldExtended.java
+++ b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldExtended.java
@@ -18,10 +18,10 @@ public class WorldTypeOverworldExtended
             Weather.overworldClear,
             new WindManagerGeneric(),
             SeasonConfig.builder()
-                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 7)
+                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 14)
                 .build()
         );
     }
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldFloating.java b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldFloating.java
index d6b9f890a..4f50e5acd 100644
--- a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldFloating.java
+++ b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldFloating.java
@@ -21,10 +21,10 @@ public class WorldTypeOverworldFloating
             Weather.overworldClear,
             new WindManagerGeneric(),
             SeasonConfig.builder()
-                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 7)
+                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 14)
                 .build()
         );
     }
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldInland.java b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldInland.java
index 1af4de983..a1215b593 100644
--- a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldInland.java
+++ b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldInland.java
@@ -20,10 +20,10 @@ public class WorldTypeOverworldInland
             Weather.overworldClear,
             new WindManagerGeneric(),
             SeasonConfig.builder()
-                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 7)
+                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 14)
                 .build()
         );
     }
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldIslands.java b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldIslands.java
index c1f5aaf2c..09725306a 100644
--- a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldIslands.java
+++ b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldIslands.java
@@ -18,10 +18,10 @@ public class WorldTypeOverworldIslands
             Weather.overworldClear,
             new WindManagerGeneric(),
             SeasonConfig.builder()
-                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 7)
+                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 14)
                 .build()
         );
     }
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldWoods.java b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldWoods.java
index 542a386ad..b525c04d5 100644
--- a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldWoods.java
+++ b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldWoods.java
@@ -20,10 +20,10 @@ public class WorldTypeOverworldWoods
             Weather.overworldClear,
             new WindManagerGeneric(),
             SeasonConfig.builder()
-                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 7)
+                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 14)
                 .build()
         );
     }
diff --git a/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_bottom.png b/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_bottom.png
deleted file mode 100644
index 9eb0fb6a2..000000000
Binary files a/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_bottom.png and /dev/null differ
diff --git a/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_top.png b/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_top.png
deleted file mode 100644
index 8c11cf4f2..000000000
Binary files a/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_top.png and /dev/null differ
diff --git a/src/main/resources/assets/minecraft/textures/block/mushroom_brown.png b/src/main/resources/assets/minecraft/textures/block/mushroom_brown.png
index 99632ca08..139a4ea2f 100644
Binary files a/src/main/resources/assets/minecraft/textures/block/mushroom_brown.png and b/src/main/resources/assets/minecraft/textures/block/mushroom_brown.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/mushroom_red.png b/src/main/resources/assets/minecraft/textures/block/mushroom_red.png
index 139a4ea2f..99632ca08 100644
Binary files a/src/main/resources/assets/minecraft/textures/block/mushroom_red.png and b/src/main/resources/assets/minecraft/textures/block/mushroom_red.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor_glass_tinted_side.png b/src/main/resources/assets/minecraft/textures/block/trapdoor_glass_tinted_side.png
deleted file mode 100644
index b4fef8b08..000000000
Binary files a/src/main/resources/assets/minecraft/textures/block/trapdoor_glass_tinted_side.png and /dev/null differ
diff --git a/src/main/resources/assets/minecraft/textures/item/door_glass_tinted.png b/src/main/resources/assets/minecraft/textures/item/door_glass_tinted.png
deleted file mode 100644
index 6ee8a8946..000000000
Binary files a/src/main/resources/assets/minecraft/textures/item/door_glass_tinted.png and /dev/null differ
