diff --git a/src/common/resources/lang/en_US/biomes.lang b/src/common/resources/lang/en_US/biomes.lang
index c23b3ab8d..41dd17986 100644
--- a/src/common/resources/lang/en_US/biomes.lang
+++ b/src/common/resources/lang/en_US/biomes.lang
@@ -18,4 +18,5 @@ biome.birch_forest=Birch Forest
 biome.retro=Retro
 biome.hell=Hell
 biome.swampland.muddy=Muddy Swamp
-biome.outback.grassy=Grassy Outback
\ No newline at end of file
+biome.outback.grassy=Grassy Outback
+biome.caatinga=Caatinga
\ No newline at end of file
diff --git a/src/common/resources/lang/en_US/gui.lang b/src/common/resources/lang/en_US/gui.lang
index 7f5c35b27..97fd15cfb 100644
--- a/src/common/resources/lang/en_US/gui.lang
+++ b/src/common/resources/lang/en_US/gui.lang
@@ -65,6 +65,16 @@ gui.create_world.button.world_type=World Type: %s
 gui.create_world.label.new_world=New World
 gui.create_world.label.select_world_type=Select World Type
 
+gui.create_world.label.title=Create New World
+gui.create_world.button.cancel=Cancel
+gui.create_world.button.create_world=Create World
+
+gui.create_world.pages.general.title=General
+gui.create_world.pages.general.label.world_name=World Name
+gui.create_world.pages.general.label.world_seed=World Seed
+gui.create_world.pages.world_settings.title=World Settings
+gui.create_world.pages.game_rules.title=Game Rules
+
 gui.dispenser.label.dispenser=Dispenser
 gui.dispenser.label.inventory=Inventory
 
diff --git a/src/common/resources/lang/en_US/tile.lang b/src/common/resources/lang/en_US/tile.lang
index 337b478be..fa7dd13e6 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.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.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.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.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.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.caatinga.name=Caatinga Leaves
tile.leaves.caatinga.desc=Leaves from a caatinga 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.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.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.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.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
+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.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.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.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.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.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.caatinga.name=Caatinga Leaves
tile.leaves.caatinga.desc=Leaves from a caatinga 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.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=Orchids
tile.flower.pink.desc=A bouquet of beautiful pink flowers.

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.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.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 2fb44f5c9..6e2dd25c2 100644
--- a/src/common/resources/recipes/workbench.json
+++ b/src/common/resources/recipes/workbench.json
@@ -3986,6 +3986,60 @@
       "meta": 1
     }
   },
+  {
+    "name": "minecraft:workbench/flower_pink_to_dye",
+    "type": "minecraft:crafting/shapeless",
+    "inputs": [
+      {
+        "stack": {
+          "key": "tile.flower.pink",
+          "amount": 1,
+          "meta": 0
+        }
+      }
+    ],
+    "result": {
+      "key": "item.dye",
+      "amount": 2,
+      "meta":9
+    }
+  },
+  {
+    "name": "minecraft:workbench/flower_purple_to_dye",
+    "type": "minecraft:crafting/shapeless",
+    "inputs": [
+      {
+        "stack": {
+          "key": "tile.flower.purple",
+          "amount": 1,
+          "meta": 0
+        }
+      }
+    ],
+    "result": {
+      "key": "item.dye",
+      "amount": 2,
+      "meta":5
+    }
+  },
+  {
+    "name": "minecraft:workbench/flower_lightblue_to_dye",
+    "type": "minecraft:crafting/shapeless",
+    "inputs": [
+      {
+        "stack": {
+          "key": "tile.flower.lightblue",
+          "amount": 1,
+          "meta": 0
+        }
+      }
+    ],
+    "result": {
+      "key": "item.dye",
+      "amount": 2,
+      "meta":12
+    }
+  },
   {
     "name": "minecraft:workbench/bone_to_dye",
     "type": "minecraft:crafting/shapeless",
diff --git a/src/main/java/net/minecraft/client/Minecraft.java b/src/main/java/net/minecraft/client/Minecraft.java
index 18a77b08b..858e62a38 100644
--- a/src/main/java/net/minecraft/client/Minecraft.java
+++ b/src/main/java/net/minecraft/client/Minecraft.java
@@ -2180,7 +2180,7 @@ public class Minecraft
                 bedSpawnCoordinates = EntityPlayer.getValidBedSpawnCoordinates(theWorld, spawnCoordinates);
                 if(bedSpawnCoordinates == null)
                 {
-                    thePlayer.addChatMessage("bed.notValid");
+                    thePlayer.sendTranslatedChatMessage("bed.notValid");
                 }
             }
         }
diff --git a/src/main/java/net/minecraft/client/entity/player/EntityOtherPlayerMP.java b/src/main/java/net/minecraft/client/entity/player/EntityOtherPlayerMP.java
index 85975ee39..6eb59bb5e 100644
--- a/src/main/java/net/minecraft/client/entity/player/EntityOtherPlayerMP.java
+++ b/src/main/java/net/minecraft/client/entity/player/EntityOtherPlayerMP.java
@@ -8,16 +8,12 @@ package net.minecraft.client.entity.player;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.item.ItemStack;
-import net.minecraft.core.net.command.TextFormatting;
 import net.minecraft.core.util.helper.MathHelper;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.world.World;
 import net.minecraft.core.util.helper.DamageType;
 import net.minecraft.core.util.helper.GetSkinUrlThread;
 
-import java.util.ArrayList;
-import java.util.List;
-
 public class EntityOtherPlayerMP extends EntityPlayer
 {
 
@@ -49,14 +45,14 @@ public class EntityOtherPlayerMP extends EntityPlayer
 
     @Override
 	public void lerpTo(double x, double y, double z, float yRot,
-                       float xRot, int i)
+                       float xRot, int ticks)
     {
-        field_784_bh = x;
-        field_783_bi = y;
-        field_782_bj = z;
-        field_780_bk = yRot;
-        field_786_bl = xRot;
-        field_785_bg = i;
+        lerpX = x;
+        lerpY = y;
+        lerpZ = z;
+        lerpYRot = yRot;
+        lerpXRot = xRot;
+        lerpTicks = ticks;
     }
 
     @Override
@@ -65,9 +61,10 @@ public class EntityOtherPlayerMP extends EntityPlayer
         field_22062_y = 0.0F;
         super.tick();
         prevLimbYaw = limbYaw;
-        double d = x - xo;
-        double d1 = z - zo;
-        float f = MathHelper.sqrt_double(d * d + d1 * d1) * 4F;
+        xd = x - xo;
+        yd = y - yo;
+        zd = z - zo;
+        float f = MathHelper.sqrt_double(xd * xd + zd * zd) * 4F;
         if(f > 1.0F)
         {
             f = 1.0F;
@@ -91,36 +88,34 @@ public class EntityOtherPlayerMP extends EntityPlayer
 	public void onLivingUpdate()
     {
         super.updatePlayerActionState();
-        if(field_785_bg > 0)
+        if(lerpTicks > 0)
         {
-            double d = x + (field_784_bh - x) / (double)field_785_bg;
-            double d1 = y + (field_783_bi - y) / (double)field_785_bg;
-            double d2 = z + (field_782_bj - z) / (double)field_785_bg;
-            double d3;
-            for(d3 = field_780_bk - (double) yRot; d3 < -180D; d3 += 360D) { }
-            for(; d3 >= 180D; d3 -= 360D) { }
-            yRot += d3 / (double)field_785_bg;
-            xRot += (field_786_bl - (double) xRot) / (double)field_785_bg;
-            field_785_bg--;
+            double d = x + (lerpX - x) / (double) lerpTicks;
+            double d1 = y + (lerpY - y) / (double) lerpTicks;
+            double d2 = z + (lerpZ - z) / (double) lerpTicks;
+            double d3 = MathHelper.normalizeRotation(lerpYRot - (double) yRot);
+            yRot += d3 / (double) lerpTicks;
+            xRot += (lerpXRot - (double) xRot) / (double) lerpTicks;
+            lerpTicks--;
             setPos(d, d1, d2);
             setRot(yRot, xRot);
         }
         field_775_e = field_774_f;
-        float f = MathHelper.sqrt_double(xd * xd + zd * zd);
-        float f1 = (float) java.lang.Math.atan(-yd * 0.20000000298023224D) * 15F;
-        if(f > 0.1F)
+        float horizontalSpeed = MathHelper.sqrt_double(xd * xd + zd * zd);
+        float f1 = (float) Math.atan(-yd * 0.2D) * 15F;
+        if(horizontalSpeed > 0.1F)
         {
-            f = 0.1F;
+            horizontalSpeed = 0.1F;
         }
         if(!onGround || getHealth() <= 0)
         {
-            f = 0.0F;
+            horizontalSpeed = 0.0F;
         }
         if(onGround || getHealth() <= 0)
         {
             f1 = 0.0F;
         }
-        field_774_f += (f - field_774_f) * 0.4F;
+        field_774_f += (horizontalSpeed - field_774_f) * 0.4F;
         cameraPitch += (f1 - cameraPitch) * 0.8F;
     }
 
@@ -145,12 +140,21 @@ public class EntityOtherPlayerMP extends EntityPlayer
 	public void func_6420_o()
     {
     }
+	@Override
+	public void sendMessage(String message) {
+		
+	}
+
+	@Override
+	public void sendStatusMessage(String message) {
+		
+	}
 
-    private int field_785_bg;
-    private double field_784_bh;
-    private double field_783_bi;
-    private double field_782_bj;
-    private double field_780_bk;
-    private double field_786_bl;
+    private int lerpTicks;
+    private double lerpX;
+    private double lerpY;
+    private double lerpZ;
+    private double lerpYRot;
+    private double lerpXRot;
     float field_20924_a;
 }
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 0fc8b0427..45824e61c 100644
--- a/src/main/java/net/minecraft/client/entity/player/EntityPlayerSP.java
+++ b/src/main/java/net/minecraft/client/entity/player/EntityPlayerSP.java
@@ -427,13 +427,7 @@ public class EntityPlayerSP extends EntityPlayer
     public void func_6420_o()
     {
     }
-
-    @Override
-    public void addChatMessage(String s)
-    {
-        mc.ingameGUI.addChatMessageTranslate(s);
-    }
-
+    
     @Override
     public void addStat(Stat statbase, int i)
     {
@@ -530,6 +524,16 @@ public class EntityPlayerSP extends EntityPlayer
     public void syncPlacementMode() {
         this.placementModeOverride = mc.gameSettings.placementMode.value;
     }
+    
+	@Override
+	public void sendMessage(String message) {
+		mc.ingameGUI.addChatMessage(message);
+	}
+
+	@Override
+	public void sendStatusMessage(String message) {
+		mc.ingameGUI.guiHeldItemTooltip.setString(message);
+	}
 
     public PlayerInput input;
     protected Minecraft mc;
diff --git a/src/main/java/net/minecraft/client/gui/GuiIngame.java b/src/main/java/net/minecraft/client/gui/GuiIngame.java
index ea0dc51f9..5b7adb0b3 100644
--- a/src/main/java/net/minecraft/client/gui/GuiIngame.java
+++ b/src/main/java/net/minecraft/client/gui/GuiIngame.java
@@ -268,7 +268,7 @@ public class GuiIngame extends Gui
 
                 if (rotaryCalendar)
                 {
-                    Season season = mc.theWorld.seasonManager.getCurrentSeason();
+                    Season season = mc.theWorld.getSeasonManager().getCurrentSeason();
                     String seasonString = season != null ? season.getTranslatedName() : "None";
                     Weather weather = mc.theWorld.getCurrentWeather();
                     String weatherString = weather != null ? weather.getTranslatedName() : "None";
@@ -418,7 +418,7 @@ public class GuiIngame extends Gui
                 {
                     if (mc.gameSettings.overlayShowSeason.value)
                     {
-                        Season season = mc.theWorld.seasonManager.getCurrentSeason();
+                        Season season = mc.theWorld.getSeasonManager().getCurrentSeason();
                         if (season != null)
                         {
                             this.drawString(fontrenderer, season.getTranslatedName(), tsp, tsp + lineHeight * line++, mc.gameSettings.overlayMode.value == 2 ? 0x80ffff : 0xffffff);
@@ -785,7 +785,7 @@ public class GuiIngame extends Gui
             if (alpha > 0)
             {
                 byte xPad = 2;
-                int y = -(i - chatScroll) * 9;
+                int y = -(i - chatScroll) * 9 - 12;
                 String s1 = chatMessageList.get(i).message;
                 drawRect(xPad, y - 1 - sp, xPad + 320, y + 8 - sp, alpha / 2 << 24);
                 GL11.glEnable(GL_BLEND);
diff --git a/src/main/java/net/minecraft/client/gui/GuiInventory.java b/src/main/java/net/minecraft/client/gui/GuiInventory.java
index a12370bca..0588d754a 100644
--- a/src/main/java/net/minecraft/client/gui/GuiInventory.java
+++ b/src/main/java/net/minecraft/client/gui/GuiInventory.java
@@ -300,14 +300,6 @@ public class GuiInventory extends GuiContainer
     @Override
 	protected void buttonPressed(GuiButton button)
     {
-        if (button.id == 0)
-        {
-            mc.displayGuiScreen(new GuiAchievements(this, mc.statsCounter));
-        }
-        if (button.id == 1)
-        {
-            mc.displayGuiScreen(new GuiStats(this, mc.statsCounter));
-        }
         if (button == armorButton) {
         	mc.gameSettings.armorProtectionOverlay.toggle();
         }
diff --git a/src/main/java/net/minecraft/client/gui/GuiInventoryCreative.java b/src/main/java/net/minecraft/client/gui/GuiInventoryCreative.java
index cbb72b334..949d03579 100644
--- a/src/main/java/net/minecraft/client/gui/GuiInventoryCreative.java
+++ b/src/main/java/net/minecraft/client/gui/GuiInventoryCreative.java
@@ -27,7 +27,7 @@ public class GuiInventoryCreative extends GuiInventory implements ITextChangeLis
 	public GuiInventoryCreative(EntityPlayer entityplayer)
 	{
 		super(entityplayer);
-		xSize = 288;
+		xSize = 298;
 		container = (ContainerPlayerCreative)entityplayer.inventorySlots;
 		armourValuesFloat = 186;
 		armourButtonFloatX = 76;
@@ -38,10 +38,10 @@ public class GuiInventoryCreative extends GuiInventory implements ITextChangeLis
 	public void init()
 	{
 		super.init();
-		controlList.add(lastPageButton = new GuiButton(500, 172, 140, 20, 20, "<"));
-		controlList.add(nextPageButton = new GuiButton(501, 262, 140, 20, 20, ">"));
-		controlList.add(clearSearchButton = new GuiOptionsButton(502, 266, 10, 12, 20, "X"));
-		searchField = new GuiTextField(this, fontRenderer, 173, 7, 96, 18, container.searchText, I18n.getInstance().translateKey("gui.inventory.creative.label.search"));
+		controlList.add(lastPageButton = new GuiButton(500, 0, 0, 20, 20, "<"));
+		controlList.add(nextPageButton = new GuiButton(501, 0, 0, 20, 20, ">"));
+		controlList.add(clearSearchButton = new GuiOptionsButton(0, 0, 10, 12, 20, "X"));
+		searchField = new GuiTextField(this, fontRenderer, 0, 0, 96, 18, container.searchText, I18n.getInstance().translateKey("gui.inventory.creative.label.search"));
 		searchField.drawBackground =false;
 		searchField.setMaxStringLength(14);
 		searchField.setTextChangeListener(this);
@@ -159,7 +159,7 @@ public class GuiInventoryCreative extends GuiInventory implements ITextChangeLis
 	protected void drawGuiContainerForegroundLayer()
     {
     	super.drawGuiContainerForegroundLayer();
-    	drawStringCenteredNoShadow(fontRenderer, pageString, 228, 146, 0x404040);
+    	drawStringCenteredNoShadow(fontRenderer, pageString, 238, 146, 0x404040);
     }
 	
     @Override
@@ -170,30 +170,30 @@ public class GuiInventoryCreative extends GuiInventory implements ITextChangeLis
         int i = mc.renderEngine.getTexture("/gui/creative.png");
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         mc.renderEngine.bindTexture(i);
-        int j = (width - xSize) / 2;
-        int k = (height - ySize) / 2;
-        lastPageButton.xPosition = j + 172;
-        lastPageButton.yPosition = k + 140;
-        nextPageButton.xPosition = j + 262;
-        nextPageButton.yPosition = k + 140;
-        clearSearchButton.xPosition = j + 270;
-        clearSearchButton.yPosition = k + 6;
-        searchField.xPosition = j + 173;
-        searchField.yPosition = k + 7;
-        drawTexturedModalRect((double)j, (double)k, 0, 0, xSize, ySize, xSize / 2, ySize / 2);
+        int x = (width - xSize) / 2;
+        int y = (height - ySize) / 2;
+        lastPageButton.xPosition = x + 182;
+        lastPageButton.yPosition = y + 140;
+        nextPageButton.xPosition = x + 272;
+        nextPageButton.yPosition = y + 140;
+        clearSearchButton.xPosition = x + 280;
+        clearSearchButton.yPosition = y + 6;
+        searchField.xPosition = x + 183;
+        searchField.yPosition = y + 7;
+        drawTexturedModalRect((double)x, (double)y, 0, 0, xSize, ySize, xSize / 2, ySize / 2);
         GL11.glEnable(32826 /*GL_RESCALE_NORMAL_EXT*/);
         GL11.glEnable(2903 /*GL_COLOR_MATERIAL*/);
         GL11.glEnable(GL11.GL_DEPTH_TEST);
         GL11.glPushMatrix();
-        GL11.glTranslatef(j + 51, k + 75, 50F);
+        GL11.glTranslatef(x + 51, y + 75, 50F);
         float f1 = 30F;
         GL11.glScalef(-f1, f1, f1);
         GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F);
         float f2 = mc.thePlayer.renderYawOffset;
         float f3 = mc.thePlayer.yRot;
         float f4 = mc.thePlayer.xRot;
-        float f5 = (float)(j + 51) - xSize_lo;
-        float f6 = (float)((k + 75) - 50) - ySize_lo;
+        float f5 = (float)(x + 51) - xSize_lo;
+        float f6 = (float)((y + 75) - 50) - ySize_lo;
         GL11.glRotatef(135F, 0.0F, 1.0F, 0.0F);
         Lighting.enableLight();
         GL11.glRotatef(-135F, 0.0F, 1.0F, 0.0F);
diff --git a/src/main/java/net/minecraft/client/gui/createworld/ButtonComponent.java b/src/main/java/net/minecraft/client/gui/createworld/ButtonComponent.java
new file mode 100644
index 000000000..56e9743d3
--- /dev/null
+++ b/src/main/java/net/minecraft/client/gui/createworld/ButtonComponent.java
@@ -0,0 +1,122 @@
+package net.minecraft.client.gui.createworld;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiTexturedButton;
+import net.minecraft.client.gui.paged.PageComponent;
+import net.minecraft.client.render.FontRenderer;
+import net.minecraft.client.render.tessalator.TessellatorStandard;
+import net.minecraft.core.lang.I18n;
+import net.minecraft.core.sound.SoundCategory;
+import org.lwjgl.opengl.GL11;
+
+import static org.lwjgl.opengl.GL11.*;
+
+public abstract class ButtonComponent
+    implements PageComponent
+{
+    protected static final Minecraft mc = Minecraft.getMinecraft(ButtonComponent.class);
+    protected static final int COMPONENT_SPACING = 2;
+    private static final int BUTTON_WIDTH = 100;
+
+    private final String translationKey;
+
+    protected final GuiButton resetButton;
+
+    public ButtonComponent(String translationKey)
+    {
+        this.translationKey = translationKey;
+        this.resetButton = new GuiTexturedButton(0, "/gui/gui.png", 0, 0, 40, 86, 20, 20);
+    }
+
+    public abstract void resetValue();
+
+    public abstract boolean isDefault();
+
+    @Override
+    public int getHeight()
+    {
+        return COMPONENT_SPACING + 20 + COMPONENT_SPACING;
+    }
+
+    @Override
+    public void render(int x, int y, int width, int relativeMouseX, int relativeMouseY)
+    {
+        FontRenderer fr = mc.fontRenderer;
+        String translated = I18n.getInstance().translateKey(translationKey);
+        int textColor = 0xFFFFFFFF;
+        if (relativeMouseX >= 0 && relativeMouseX <= width && relativeMouseY >= COMPONENT_SPACING && relativeMouseY <= getHeight() - COMPONENT_SPACING) {
+            textColor = 0xFFFFFFA0;
+        }
+        fr.drawStringWithShadow(translated, x, y + (getHeight() / 2) - 4, textColor);
+        resetButton.enabled = !isDefault();
+        renderButton(x, y, width - BUTTON_WIDTH, COMPONENT_SPACING, BUTTON_WIDTH, 20, relativeMouseX, relativeMouseY);
+        int stringWidth = fr.getStringWidth(translated);
+        int lineMaxX = x + width - BUTTON_WIDTH - 8;
+        if (resetButton.enabled) lineMaxX -= 20;
+        drawRect(x + stringWidth + 8, y + getHeight() / 2, lineMaxX, y + getHeight() / 2 + 1, 0x5F7F7F7F);
+    }
+
+    @Override
+    public void onMouseClick(int mouseButton, int x, int y, int width, int relativeMouseX, int relativeMouseY)
+    {
+        if (relativeMouseX >= width - BUTTON_WIDTH && relativeMouseX <= width && relativeMouseY >= COMPONENT_SPACING && relativeMouseY <= COMPONENT_SPACING + 20) {
+            mc.sndManager.playSound("random.click", SoundCategory.GUI_SOUNDS, 1.0F, 1.0F);
+            buttonClicked(mouseButton, x, y, width, getHeight(), relativeMouseX - (width - BUTTON_WIDTH), relativeMouseY - COMPONENT_SPACING);
+        } else if (resetButton.enabled && relativeMouseX >= width - BUTTON_WIDTH - 20 && relativeMouseX <= width - BUTTON_WIDTH && relativeMouseY >= COMPONENT_SPACING && relativeMouseY <= COMPONENT_SPACING + 20) {
+            mc.sndManager.playSound("random.click", SoundCategory.GUI_SOUNDS, 1.0F, 1.0F);
+            resetValue();
+        }
+    }
+
+    @Override
+    public void onMouseMove(int x, int y, int width, int relativeMouseX, int relativeMouseY) {
+        buttonDragged(x, y, width, getHeight(), relativeMouseX - (width - BUTTON_WIDTH), relativeMouseY - COMPONENT_SPACING);
+    }
+
+    @Override
+    public void onMouseRelease(int mouseButton, int x, int y, int width, int relativeMouseX, int relativeMouseY) {
+        buttonReleased(mouseButton, x, y, width, getHeight(), relativeMouseX - (width - BUTTON_WIDTH), relativeMouseY - COMPONENT_SPACING);
+    }
+
+    protected abstract void buttonClicked(int mouseButton, int x, int y, int width, int height, int relativeMouseX, int relativeMouseY);
+
+    protected void buttonDragged(int x, int y, int width, int height, int relativeMouseX, int relativeMouseY) { }
+
+    protected void buttonReleased(int mouseButton, int x, int y, int width, int height, int relativeMouseX, int relativeMouseY) { }
+
+    @Override
+    public void onKeyPress(int keyCode, char character) { }
+
+    @Override
+    public boolean matchesSearchTerm(String term)
+    {
+        return I18n.getInstance().translateKey(translationKey).toLowerCase().contains(term.toLowerCase());
+    }
+
+    protected void renderButton(int x, int y, int relativeButtonX, int relativeButtonY, int buttonWidth, int buttonHeight, int relativeMouseX, int relativeMouseY) {
+        if (resetButton.enabled) {
+            resetButton.xPosition = x + relativeButtonX - 20;
+            resetButton.yPosition = y + relativeButtonY;
+
+            resetButton.drawButton(mc, x + relativeMouseX, y + relativeMouseY);
+        }
+    }
+
+    protected void drawRect(int minX, int minY, int maxX, int maxY, int argb)
+    {
+        TessellatorStandard tessellator = TessellatorStandard.instance;
+        GL11.glEnable(GL_BLEND);
+        GL11.glDisable(GL_TEXTURE_2D);
+        GL11.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+        tessellator.startDrawingQuads();
+        tessellator.setColorRGBA_I(argb & 0x00FFFFFF, argb >> 24 & 0xff);
+        tessellator.addVertex(minX, maxY, 0.0D);
+        tessellator.addVertex(maxX, maxY, 0.0D);
+        tessellator.addVertex(maxX, minY, 0.0D);
+        tessellator.addVertex(minX, minY, 0.0D);
+        tessellator.draw();
+        GL11.glEnable(GL_TEXTURE_2D);
+        GL11.glDisable(GL_BLEND);
+    }
+}
diff --git a/src/main/java/net/minecraft/client/gui/createworld/CreateWorldPageRegistry.java b/src/main/java/net/minecraft/client/gui/createworld/CreateWorldPageRegistry.java
new file mode 100644
index 000000000..58ce059ee
--- /dev/null
+++ b/src/main/java/net/minecraft/client/gui/createworld/CreateWorldPageRegistry.java
@@ -0,0 +1,21 @@
+package net.minecraft.client.gui.createworld;
+
+import net.minecraft.client.gui.paged.Page;
+import net.minecraft.client.gui.paged.PageRegistry;
+import net.minecraft.core.item.Item;
+import net.minecraft.core.item.ItemStack;
+
+public class CreateWorldPageRegistry
+    extends PageRegistry {
+    private static final PageRegistry INSTANCE = new PageRegistry();
+
+    public static PageRegistry getInstance() {
+        return INSTANCE;
+    }
+
+    public static final Page GENERAL = INSTANCE.register(new Page("gui.create_world.pages.general.title", new ItemStack(Item.map)))
+        .withComponent(new TextFieldComponent("gui.create_world.pages.general.label.world_name"))
+        .withComponent(new TextFieldComponent("gui.create_world.pages.general.label.world_seed"));
+    public static final Page WORLD_SETTINGS = INSTANCE.register(new Page("gui.create_world.pages.world_settings.title", new ItemStack(Item.dustRedstone)));
+    public static final Page GAME_RULES = INSTANCE.register(new Page("gui.create_world.pages.game_rules.title", new ItemStack(Item.book)));
+}
diff --git a/src/main/java/net/minecraft/client/gui/createworld/GuiCreateWorld.java b/src/main/java/net/minecraft/client/gui/createworld/GuiCreateWorld.java
new file mode 100644
index 000000000..fc852217c
--- /dev/null
+++ b/src/main/java/net/minecraft/client/gui/createworld/GuiCreateWorld.java
@@ -0,0 +1,20 @@
+package net.minecraft.client.gui.createworld;
+
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.gui.paged.GuiPaged;
+
+public class GuiCreateWorld
+    extends GuiPaged {
+    public GuiCreateWorld(GuiScreen parent) {
+        super(
+            parent,
+            CreateWorldPageRegistry.getInstance(),
+            CreateWorldPageRegistry.GENERAL,
+            "gui.create_world.label.title",
+            new String[] {
+                "gui.create_world.button.cancel",
+                "gui.create_world.button.create_world",
+            }
+        );
+    }
+}
diff --git a/src/main/java/net/minecraft/client/gui/createworld/TextFieldComponent.java b/src/main/java/net/minecraft/client/gui/createworld/TextFieldComponent.java
new file mode 100644
index 000000000..44e9c5f4b
--- /dev/null
+++ b/src/main/java/net/minecraft/client/gui/createworld/TextFieldComponent.java
@@ -0,0 +1,127 @@
+package net.minecraft.client.gui.createworld;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiButton;
+import net.minecraft.client.gui.GuiTextField;
+import net.minecraft.client.gui.GuiTexturedButton;
+import net.minecraft.client.gui.paged.CallbackComponent;
+import net.minecraft.client.gui.paged.OnValueChangedCallback;
+import net.minecraft.client.render.FontRenderer;
+import net.minecraft.client.render.tessalator.TessellatorStandard;
+import net.minecraft.core.lang.I18n;
+import net.minecraft.core.sound.SoundCategory;
+import org.lwjgl.input.Keyboard;
+import org.lwjgl.opengl.GL11;
+
+import static org.lwjgl.opengl.GL11.*;
+import static org.lwjgl.opengl.GL11.GL_BLEND;
+
+public class TextFieldComponent
+    implements CallbackComponent<String> {
+    protected static final Minecraft mc = Minecraft.getMinecraft(ButtonComponent.class);
+    protected static final int COMPONENT_SPACING = 2;
+    private static final int BUTTON_WIDTH = 150;
+
+    private final String translationKey;
+
+    private final GuiTextField textField;
+
+    private OnValueChangedCallback<String> callback = null;
+
+    public TextFieldComponent(String translationKey)
+    {
+        this.translationKey = translationKey;
+
+        this.textField = new GuiTextField(
+            null,
+            mc.fontRenderer,
+            0, 0,
+            BUTTON_WIDTH,
+            18,
+            "",
+            ""
+        );
+    }
+
+    @Override
+    public int getHeight()
+    {
+        return COMPONENT_SPACING + 20 + COMPONENT_SPACING;
+    }
+
+    @Override
+    public void render(int x, int y, int width, int relativeMouseX, int relativeMouseY)
+    {
+        FontRenderer fr = mc.fontRenderer;
+        String translated = I18n.getInstance().translateKey(translationKey);
+        int textColor = 0xFFFFFFFF;
+        if (relativeMouseX >= 0 && relativeMouseX <= width && relativeMouseY >= COMPONENT_SPACING && relativeMouseY <= getHeight() - COMPONENT_SPACING) {
+            textColor = 0xFFFFFFA0;
+        }
+        fr.drawStringWithShadow(translated, x, y + (getHeight() / 2) - 4, textColor);
+        int stringWidth = fr.getStringWidth(translated);
+        int lineMaxX = x + width - BUTTON_WIDTH - 8;
+        drawRect(x + stringWidth + 8, y + getHeight() / 2, lineMaxX, y + getHeight() / 2 + 1, 0x5F7F7F7F);
+
+        textField.xPosition = x + width - BUTTON_WIDTH;
+        textField.yPosition = y + COMPONENT_SPACING + 1;
+        textField.drawTextBox();
+    }
+
+    @Override
+    public void onMouseClick(int mouseButton, int x, int y, int width, int relativeMouseX, int relativeMouseY)
+    {
+        boolean mouseInside = relativeMouseX >= width - BUTTON_WIDTH && relativeMouseX <= width && relativeMouseY >= COMPONENT_SPACING && relativeMouseY <= COMPONENT_SPACING + 20;
+        if (mouseInside) {
+            textField.setFocused(true);
+            Keyboard.enableRepeatEvents(true);
+        } else {
+            textField.setFocused(false);
+            Keyboard.enableRepeatEvents(false);
+        }
+    }
+
+    @Override
+    public void onMouseMove(int x, int y, int width, int relativeMouseX, int relativeMouseY) {
+    }
+
+    @Override
+    public void onMouseRelease(int mouseButton, int x, int y, int width, int relativeMouseX, int relativeMouseY) {
+    }
+
+    @Override
+    public void onKeyPress(int keyCode, char character) {
+        if (textField.isFocused) {
+            textField.textboxKeyTyped(character, keyCode);
+        }
+    }
+
+    @Override
+    public boolean matchesSearchTerm(String term)
+    {
+        return I18n.getInstance().translateKey(translationKey).toLowerCase().contains(term.toLowerCase());
+    }
+
+    protected void drawRect(int minX, int minY, int maxX, int maxY, int argb)
+    {
+        TessellatorStandard tessellator = TessellatorStandard.instance;
+        GL11.glEnable(GL_BLEND);
+        GL11.glDisable(GL_TEXTURE_2D);
+        GL11.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+        tessellator.startDrawingQuads();
+        tessellator.setColorRGBA_I(argb & 0x00FFFFFF, argb >> 24 & 0xff);
+        tessellator.addVertex(minX, maxY, 0.0D);
+        tessellator.addVertex(maxX, maxY, 0.0D);
+        tessellator.addVertex(maxX, minY, 0.0D);
+        tessellator.addVertex(minX, minY, 0.0D);
+        tessellator.draw();
+        GL11.glEnable(GL_TEXTURE_2D);
+        GL11.glDisable(GL_BLEND);
+    }
+
+    @Override
+    public CallbackComponent<String> withOnValueChangedCallback(OnValueChangedCallback<String> callback) {
+        this.callback = callback;
+        return this;
+    }
+}
diff --git a/src/main/java/net/minecraft/client/gui/createworld/WorldConfig.java b/src/main/java/net/minecraft/client/gui/createworld/WorldConfig.java
new file mode 100644
index 000000000..79816a569
--- /dev/null
+++ b/src/main/java/net/minecraft/client/gui/createworld/WorldConfig.java
@@ -0,0 +1,70 @@
+package net.minecraft.client.gui.createworld;
+
+import net.minecraft.core.player.gamemode.Gamemode;
+import net.minecraft.core.util.helper.MathHelper;
+
+import java.util.Random;
+
+public class WorldConfig {
+    private String name;
+    private long seed;
+    private Gamemode gamemode;
+    private boolean cheatsEnabled;
+
+    public WorldConfig(String name) {
+        this.name = name;
+        this.seed = (new Random()).nextLong();
+        this.gamemode = Gamemode.survival;
+        this.cheatsEnabled = false;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public long getSeed() {
+        return seed;
+    }
+
+    public void setSeed(long seed) {
+        this.seed = seed;
+    }
+
+    public void setSeed(String seed) {
+        if(!MathHelper.stringNullOrLengthZero(seed))
+        {
+            try
+            {
+                long parsedSeed = Long.parseLong(seed);
+                if(parsedSeed != 0L)
+                {
+                    this.seed = parsedSeed;
+                }
+            }
+            catch(NumberFormatException e)
+            {
+                this.seed = seed.hashCode();
+            }
+        }
+    }
+
+    public Gamemode getGamemode() {
+        return gamemode;
+    }
+
+    public void setGamemode(Gamemode gamemode) {
+        this.gamemode = gamemode;
+    }
+
+    public boolean isCheatsEnabled() {
+        return cheatsEnabled;
+    }
+
+    public void setCheatsEnabled(boolean cheatsEnabled) {
+        this.cheatsEnabled = cheatsEnabled;
+    }
+}
diff --git a/src/main/java/net/minecraft/client/gui/paged/CallbackComponent.java b/src/main/java/net/minecraft/client/gui/paged/CallbackComponent.java
new file mode 100644
index 000000000..db856a25b
--- /dev/null
+++ b/src/main/java/net/minecraft/client/gui/paged/CallbackComponent.java
@@ -0,0 +1,6 @@
+package net.minecraft.client.gui.paged;
+
+public interface CallbackComponent<T>
+    extends PageComponent {
+    CallbackComponent<T> withOnValueChangedCallback(OnValueChangedCallback<T> callback);
+}
diff --git a/src/main/java/net/minecraft/client/gui/paged/GuiPaged.java b/src/main/java/net/minecraft/client/gui/paged/GuiPaged.java
index 3ab1e68cb..4019bc1a4 100644
--- a/src/main/java/net/minecraft/client/gui/paged/GuiPaged.java
+++ b/src/main/java/net/minecraft/client/gui/paged/GuiPaged.java
@@ -22,6 +22,9 @@ public class GuiPaged
     private static final int PADDING = 8;
     private static final int PAGE_BUTTON_HEIGHT = 20;
 
+    private final String titleTranslationKey;
+    private final String[] buttonTranslationKeys;
+
     private float rightScrollAmount = 0.0f;
     private float leftScrollAmount = 0.0f;
     private int top, bottom, rightScrollRegionHeight, leftScrollRegionHeight, pageWidth, leftWidth;
@@ -36,11 +39,13 @@ public class GuiPaged
 
     private final PageRegistry pageRegistry;
 
-    public GuiPaged(GuiScreen parent, PageRegistry pageRegistry, Page selectedPage)
+    public GuiPaged(GuiScreen parent, PageRegistry pageRegistry, Page selectedPage, String titleTranslationKey, String[] buttonTranslationKeys)
     {
         super(parent);
         this.pageRegistry = pageRegistry;
         this.selectedPage = selectedPage;
+        this.titleTranslationKey = titleTranslationKey;
+        this.buttonTranslationKeys = buttonTranslationKeys;
     }
 
     @Override
@@ -48,7 +53,12 @@ public class GuiPaged
     {
         super.init();
 
-        controlList.add(new GuiButton(0, width / 2 - 100, height - (BUTTON_SPACING + 20), 200, 20, I18n.getInstance().translateKey("gui.options.button.done")));
+        int buttonWidth = 200 - (buttonTranslationKeys.length - 1) * 40;
+        int totalButtonsWidth = buttonTranslationKeys.length * (buttonWidth + 4) - 4;
+        for (int i = 0; i < buttonTranslationKeys.length; i++) {
+            String buttonTranslationKey = buttonTranslationKeys[i];
+            controlList.add(new GuiButton(i, width / 2 - totalButtonsWidth / 2 + ((buttonWidth + 4) * i), height - (BUTTON_SPACING + 20), buttonWidth, 20, I18n.getInstance().translateKey(buttonTranslationKey)));
+        }
 
         top = TOP_SPACING;
         bottom = height - (BUTTON_SPACING + 20 + BUTTON_SPACING);
@@ -122,39 +132,33 @@ public class GuiPaged
         }
     }
 
-    @Override
-    public void onClosed() {
-        super.onClosed();
-        mc.gameSettings.saveOptions();
-    }
-
-    private void scrollOptions(float amount) {
+    private void scrollRightPanel(float amount) {
         if(amount == 0.0f) return;
 
         rightScrollAmount += amount;
-        onScrollOptions();
+        onScrollRightPanel();
     }
 
-    private void onScrollOptions() {
-        int totalPageHeight = getTotalPageHeight();
-        if (rightScrollAmount < 0 || rightScrollRegionHeight > totalPageHeight) rightScrollAmount = 0;
-        else if (rightScrollAmount > totalPageHeight - rightScrollRegionHeight) rightScrollAmount = totalPageHeight - rightScrollRegionHeight;
+    private void onScrollRightPanel() {
+        int totalRightPanelHeight = getTotalRightPanelHeight();
+        if (rightScrollAmount < 0 || rightScrollRegionHeight > totalRightPanelHeight) rightScrollAmount = 0;
+        else if (rightScrollAmount > totalRightPanelHeight - rightScrollRegionHeight) rightScrollAmount = totalRightPanelHeight - rightScrollRegionHeight;
     }
 
-    private void scrollPagesList(float amount) {
+    private void scrollLeftPanel(float amount) {
         if(amount == 0.0f) return;
 
         leftScrollAmount += amount;
-        onScrollPagesList();
+        onScrollLeftPanel();
     }
 
-    private void onScrollPagesList() {
-        int totalPagesListHeight = getTotalPagesListHeight();
-        if (leftScrollAmount < 0 || leftScrollRegionHeight > totalPagesListHeight) leftScrollAmount = 0;
-        else if (leftScrollAmount > totalPagesListHeight - leftScrollRegionHeight) leftScrollAmount = totalPagesListHeight - leftScrollRegionHeight;
+    private void onScrollLeftPanel() {
+        int totalLeftPanelHeight = getTotalLeftPanelHeight();
+        if (leftScrollAmount < 0 || leftScrollRegionHeight > totalLeftPanelHeight) leftScrollAmount = 0;
+        else if (leftScrollAmount > totalLeftPanelHeight - leftScrollRegionHeight) leftScrollAmount = totalLeftPanelHeight - leftScrollRegionHeight;
     }
 
-    private int getTotalPageHeight()
+    private int getTotalRightPanelHeight()
     {
         int totalPageHeight = 0;
         for (PageComponent component : selectedPage.getComponents())
@@ -164,7 +168,7 @@ public class GuiPaged
         return totalPageHeight;
     }
 
-    private int getTotalPagesListHeight() {
+    private int getTotalLeftPanelHeight() {
         return PAGE_BUTTON_HEIGHT * pageRegistry.getPages().size();
     }
 
@@ -173,18 +177,18 @@ public class GuiPaged
     {
         if (mouseX > leftWidth + SEPARATOR_WIDTH + PADDING && mouseX < width) {
             if (Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL)) {
-                scrollOptions(Mouse.getDWheel() * -1.0f);
+                scrollRightPanel(Mouse.getDWheel() * -1.0f);
             } else {
-                scrollOptions(Mouse.getDWheel() / -5.0f);
+                scrollRightPanel(Mouse.getDWheel() / -5.0f);
             }
-            onScrollOptions();
+            onScrollRightPanel();
         } else if (mouseX >= 0 && mouseX <= leftWidth) {
             if (Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL)) {
-                scrollPagesList(Mouse.getDWheel() * -1.0f);
+                scrollLeftPanel(Mouse.getDWheel() * -1.0f);
             } else {
-                scrollPagesList(Mouse.getDWheel() / -5.0f);
+                scrollLeftPanel(Mouse.getDWheel() / -5.0f);
             }
-            onScrollPagesList();
+            onScrollLeftPanel();
         }
 
         leftWidth = (int)(width * 0.25f);
@@ -204,7 +208,7 @@ public class GuiPaged
         Scissor.disable();
 
         Scissor.enable(0, top, leftWidth, bottom - top);
-        int pagesListHeight = getTotalPagesListHeight();
+        int pagesListHeight = getTotalLeftPanelHeight();
         int pagesListY = top - (int) leftScrollAmount;
         if (pagesListHeight < bottom - top) {
             pagesListY = top + (bottom - top - pagesListHeight) / 2;
@@ -254,17 +258,16 @@ public class GuiPaged
 
         overlayBackground(leftWidth, leftWidth + SEPARATOR_WIDTH, top, bottom);
 
-        String titleLanguageKey = "gui.options.title";
-        drawStringCentered(fontRenderer, i18n.translateKey(titleLanguageKey), width / 2, 5, 0xffffff);
+        drawStringCentered(fontRenderer, i18n.translateKey(titleTranslationKey), width / 2, 5, 0xffffff);
 
-        drawOptionsScrollBar(mouseX, mouseY);
-        drawPagesListScrollBar(mouseX, mouseY);
+        drawRightPanelScrollBar(mouseX, mouseY);
+        drawLeftPanelScrollBar(mouseX, mouseY);
 
         super.drawScreen(mouseX, mouseY, renderPartialTicks);
     }
 
-    protected void drawOptionsScrollBar(int mouseX, int mouseY) {
-        float totalPageHeight = getTotalPageHeight();
+    protected void drawRightPanelScrollBar(int mouseX, int mouseY) {
+        float totalPageHeight = getTotalRightPanelHeight();
         float scrollBarHeightPercent = rightScrollRegionHeight / totalPageHeight;
 
         if(scrollBarHeightPercent > 1.0f) return;
@@ -301,15 +304,15 @@ public class GuiPaged
                     oldRightScrollAmount = rightScrollAmount;
                 }
                 rightScrollAmount = oldRightScrollAmount + (clickY - mouseY) * (1.0f / scrollBarHeightPercent) * -1.0f;
-                onScrollOptions();
+                onScrollRightPanel();
             }
         }else {
             oldRightScrollAmount = null;
         }
     }
 
-    protected void drawPagesListScrollBar(int mouseX, int mouseY) {
-        float totalPagesListHeight = getTotalPagesListHeight();
+    protected void drawLeftPanelScrollBar(int mouseX, int mouseY) {
+        float totalPagesListHeight = getTotalLeftPanelHeight();
         float scrollBarHeightPercent = leftScrollRegionHeight / totalPagesListHeight;
 
         if(scrollBarHeightPercent > 1.0f) return;
@@ -346,7 +349,7 @@ public class GuiPaged
                     oldLeftScrollAmount = leftScrollAmount;
                 }
                 leftScrollAmount = oldLeftScrollAmount + (clickY - mouseY) * (1.0f / scrollBarHeightPercent) * -1.0f;
-                onScrollOptions();
+                onScrollRightPanel();
             }
         }else {
             oldLeftScrollAmount = null;
@@ -373,7 +376,7 @@ public class GuiPaged
                 componentY += component.getHeight();
             }
         } else if (mouseX >= 0 && mouseX <= leftWidth && mouseY >= top && mouseY <= bottom) {
-            int pagesListHeight = getTotalPagesListHeight();
+            int pagesListHeight = getTotalLeftPanelHeight();
             int pagesListY = top - (int) leftScrollAmount;
             if (pagesListHeight < bottom - top) {
                 pagesListY = top + (bottom - top - pagesListHeight) / 2;
diff --git a/src/main/java/net/minecraft/client/gui/paged/OnValueChangedCallback.java b/src/main/java/net/minecraft/client/gui/paged/OnValueChangedCallback.java
new file mode 100644
index 000000000..2fe278b70
--- /dev/null
+++ b/src/main/java/net/minecraft/client/gui/paged/OnValueChangedCallback.java
@@ -0,0 +1,5 @@
+package net.minecraft.client.gui.paged;
+
+public interface OnValueChangedCallback<T> {
+    void onValueChanged(CallbackComponent<T> component, T oldValue, T newValue);
+}
diff --git a/src/main/java/net/minecraft/client/gui/paged/PageRegistry.java b/src/main/java/net/minecraft/client/gui/paged/PageRegistry.java
index c38e82dcf..5ce0ad5c7 100644
--- a/src/main/java/net/minecraft/client/gui/paged/PageRegistry.java
+++ b/src/main/java/net/minecraft/client/gui/paged/PageRegistry.java
@@ -7,10 +7,12 @@ import java.util.List;
 public class PageRegistry {
     private final List<Page> pages = new ArrayList<>();
 
-    public void register(Page page) {
+    public Page register(Page page) {
         if (!pages.contains(page)) {
             pages.add(page);
         }
+
+        return page;
     }
 
     public int getPageIndex(Page page) {
diff --git a/src/main/java/net/minecraft/client/net/handler/NetClientHandler.java b/src/main/java/net/minecraft/client/net/handler/NetClientHandler.java
index 18e1bfc9c..abda90ff7 100644
--- a/src/main/java/net/minecraft/client/net/handler/NetClientHandler.java
+++ b/src/main/java/net/minecraft/client/net/handler/NetClientHandler.java
@@ -15,6 +15,7 @@ import java.util.Random;
 import com.b100.utils.StringUtils;
 
 import net.minecraft.client.Minecraft;
+import net.minecraft.client.entity.fx.EntityPickupFX;
 import net.minecraft.client.entity.player.EntityClientPlayerMP;
 import net.minecraft.client.entity.player.EntityOtherPlayerMP;
 import net.minecraft.client.entity.player.EntityPlayerSP;
@@ -50,7 +51,6 @@ import net.minecraft.core.entity.EntityLightningBolt;
 import net.minecraft.core.entity.EntityLiving;
 import net.minecraft.core.entity.EntityPainting;
 import net.minecraft.core.entity.EntityTNT;
-import net.minecraft.client.entity.fx.EntityPickupFX;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.entity.projectile.EntityArrow;
 import net.minecraft.core.entity.projectile.EntityArrowGolden;
@@ -69,7 +69,67 @@ import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.net.NetworkManager;
 import net.minecraft.core.net.PlayerProfile;
 import net.minecraft.core.net.handler.NetHandler;
-import net.minecraft.core.net.packet.*;
+import net.minecraft.core.net.packet.Packet;
+import net.minecraft.core.net.packet.Packet100OpenWindow;
+import net.minecraft.core.net.packet.Packet101CloseWindow;
+import net.minecraft.core.net.packet.Packet103SetSlot;
+import net.minecraft.core.net.packet.Packet104WindowItems;
+import net.minecraft.core.net.packet.Packet105UpdateProgressbar;
+import net.minecraft.core.net.packet.Packet106Transaction;
+import net.minecraft.core.net.packet.Packet10Flying;
+import net.minecraft.core.net.packet.Packet131MapData;
+import net.minecraft.core.net.packet.Packet132SetMobSpawner;
+import net.minecraft.core.net.packet.Packet136SendKey;
+import net.minecraft.core.net.packet.Packet138PlayerList;
+import net.minecraft.core.net.packet.Packet140TileEntityData;
+import net.minecraft.core.net.packet.Packet142OpenFlagWindow;
+import net.minecraft.core.net.packet.Packet143PhotoMode;
+import net.minecraft.core.net.packet.Packet16BlockItemSwitch;
+import net.minecraft.core.net.packet.Packet17Sleep;
+import net.minecraft.core.net.packet.Packet18Animation;
+import net.minecraft.core.net.packet.Packet1Login;
+import net.minecraft.core.net.packet.Packet200Statistic;
+import net.minecraft.core.net.packet.Packet201Ids;
+import net.minecraft.core.net.packet.Packet20NamedEntitySpawn;
+import net.minecraft.core.net.packet.Packet21PickupSpawn;
+import net.minecraft.core.net.packet.Packet22Collect;
+import net.minecraft.core.net.packet.Packet23VehicleSpawn;
+import net.minecraft.core.net.packet.Packet24MobSpawn;
+import net.minecraft.core.net.packet.Packet250CustomPayload;
+import net.minecraft.core.net.packet.Packet255KickDisconnect;
+import net.minecraft.core.net.packet.Packet25EntityPainting;
+import net.minecraft.core.net.packet.Packet28EntityVelocity;
+import net.minecraft.core.net.packet.Packet29DestroyEntity;
+import net.minecraft.core.net.packet.Packet2Handshake;
+import net.minecraft.core.net.packet.Packet30Entity;
+import net.minecraft.core.net.packet.Packet34EntityTeleport;
+import net.minecraft.core.net.packet.Packet35EntityNickname;
+import net.minecraft.core.net.packet.Packet38EntityStatus;
+import net.minecraft.core.net.packet.Packet39AttachEntity;
+import net.minecraft.core.net.packet.Packet3Chat;
+import net.minecraft.core.net.packet.Packet40EntityMetadata;
+import net.minecraft.core.net.packet.Packet41EntityPlayerGamemode;
+import net.minecraft.core.net.packet.Packet42EntityTagData;
+import net.minecraft.core.net.packet.Packet4UpdateTime;
+import net.minecraft.core.net.packet.Packet50PreChunk;
+import net.minecraft.core.net.packet.Packet51MapChunk;
+import net.minecraft.core.net.packet.Packet52MultiBlockChange;
+import net.minecraft.core.net.packet.Packet53BlockChange;
+import net.minecraft.core.net.packet.Packet54PlayNoteBlock;
+import net.minecraft.core.net.packet.Packet5PlayerInventory;
+import net.minecraft.core.net.packet.Packet60Explosion;
+import net.minecraft.core.net.packet.Packet61PlaySoundEffect;
+import net.minecraft.core.net.packet.Packet62PlaySoundDirect;
+import net.minecraft.core.net.packet.Packet63SpawnParticleEffect;
+import net.minecraft.core.net.packet.Packet6SpawnPosition;
+import net.minecraft.core.net.packet.Packet70Bed;
+import net.minecraft.core.net.packet.Packet71Weather;
+import net.minecraft.core.net.packet.Packet72UpdatePlayerProfile;
+import net.minecraft.core.net.packet.Packet73WeatherStatus;
+import net.minecraft.core.net.packet.Packet74GameRule;
+import net.minecraft.core.net.packet.Packet75RecipeSync;
+import net.minecraft.core.net.packet.Packet8UpdateHealth;
+import net.minecraft.core.net.packet.Packet9Respawn;
 import net.minecraft.core.player.gamemode.Gamemode;
 import net.minecraft.core.player.inventory.Container;
 import net.minecraft.core.player.inventory.InventoryBasic;
@@ -632,25 +692,26 @@ public class NetClientHandler extends NetHandler
         }
     }
 
-    @Override
-    public void handleChat(Packet3Chat packet3chat)
-    {
-        if (packet3chat.encrypted)
-        {
-            try
-            {
-                mc.ingameGUI.addChatMessage(AES.decrypt(packet3chat.message, AES.clientKeyChain));
-            }
-            catch (Exception e)
-            {
-                throw new RuntimeException(e);
-            }
-        }
-        else
-        {
-            mc.ingameGUI.addChatMessage(packet3chat.message);
-        }
-    }
+	@Override
+	public void handleChat(Packet3Chat packet) {
+		String message;
+		if(packet.encrypted) {
+			try {
+				message = AES.decrypt(packet.message, AES.clientKeyChain);
+			}catch (Exception e) {
+				throw new RuntimeException(Packet3Chat.ENCRYPTION_ERROR_MESSAGE, e);
+			}
+		}else {
+			message = packet.message;
+		}
+		
+		int type = packet.type;
+		if(type == 1) {
+			mc.ingameGUI.guiHeldItemTooltip.setString(message);
+		}else {
+			mc.ingameGUI.addChatMessage(message);
+		}
+	}
 
     public void handlePlayerJoin(Packet3Chat packet3chat)
     {
@@ -1097,7 +1158,7 @@ public class NetClientHandler extends NetHandler
         int i = packet70bed.field_25019_b;
         if (i >= 0 && i < Packet70Bed.field_25020_a.length && Packet70Bed.field_25020_a[i] != null)
         {
-            mc.thePlayer.addChatMessage(Packet70Bed.field_25020_a[i]);
+            mc.thePlayer.sendTranslatedChatMessage(Packet70Bed.field_25020_a[i]);
         }
     }
 
diff --git a/src/main/java/net/minecraft/client/render/ChunkRenderer.java b/src/main/java/net/minecraft/client/render/ChunkRenderer.java
index b6a6be774..e2e0a9e87 100644
--- a/src/main/java/net/minecraft/client/render/ChunkRenderer.java
+++ b/src/main/java/net/minecraft/client/render/ChunkRenderer.java
@@ -96,7 +96,7 @@ public class ChunkRenderer
         specialTileEntities.clear();
         int cacheRadius = 1;
         ChunkCache chunkcache = new ChunkCache(worldObj, minX - cacheRadius, minY - cacheRadius, minZ - cacheRadius, maxX + cacheRadius, maxY + cacheRadius, maxZ + cacheRadius);
-        RenderBlocks renderblocks = new RenderBlocks(worldObj, chunkcache);
+        RenderBlocks renderblocks = new RenderBlocks(chunkcache);
         BlockModel.setRenderBlocks(renderblocks);
         int renderPass = 0;
         do
diff --git a/src/main/java/net/minecraft/client/render/ItemRenderer.java b/src/main/java/net/minecraft/client/render/ItemRenderer.java
index 8f50e409e..fb43cd95c 100644
--- a/src/main/java/net/minecraft/client/render/ItemRenderer.java
+++ b/src/main/java/net/minecraft/client/render/ItemRenderer.java
@@ -1,6 +1,10 @@
 package net.minecraft.client.render;
 
 import net.minecraft.client.render.block.color.BlockColorDispatcher;
+import net.minecraft.client.render.block.model.BlockModelStairs;
+import net.minecraft.client.render.block.model.BlockModelStandard;
+import net.minecraft.client.render.item.model.ItemModel;
+import net.minecraft.client.render.item.model.ItemModelStandard;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.block.ItemBlock;
 import org.lwjgl.opengl.GL11;
@@ -133,8 +137,10 @@ public class ItemRenderer
             Block block = Block.blocksList[id];
             BlockModel<Block> model = BlockModelDispatcher.getInstance().getDispatch(block);
 			if(mc.theWorld.isBlockNormalCube(blockX, blockY, blockZ)) {
+                System.out.println(block.getKey());
 				renderInsideOfBlock(partialTicks, model.getBlockTextureFromSideAndMetadata(Side.NORTH, meta));
 			} else {
+                id = 0;
 				for (int i = 0; i < 8; i++) {
 					float x0 = ((float) ((i >> 0) % 2) - 0.5F) * mc.thePlayer.bbWidth * 0.9F;
 					float y0 = ((float) ((i >> 1) % 2) - 0.5F) * mc.thePlayer.bbHeight * 0.2F;
@@ -147,13 +153,15 @@ public class ItemRenderer
 					if(mc.theWorld.isBlockNormalCube(x1, y1, z1)) {
 						id = mc.theWorld.getBlockId(x1, y1, z1);
                         meta = mc.theWorld.getBlockMetadata(x1, y1, z1);
+                        break;
 					}
 				}
+                if(Block.blocksList[id] != null) {
+                    model = BlockModelDispatcher.getInstance().getDispatch(Block.blocksList[id]);
+                    renderInsideOfBlock(partialTicks, model.getBlockTextureFromSideAndMetadata(Side.NORTH, meta));
+                }
 			}
-			
-			if(Block.blocksList[id] != null) {
-				renderInsideOfBlock(partialTicks, model.getBlockTextureFromSideAndMetadata(Side.NORTH, meta));
-			}
+
 		}
 		if(mc.thePlayer.isUnderLiquid(Material.water)) {
 			int k = mc.renderEngine.getTexture("/misc/water.png");
diff --git a/src/main/java/net/minecraft/client/render/PostProcessingManager.java b/src/main/java/net/minecraft/client/render/PostProcessingManager.java
index e2cc3b93d..ff2cc31ab 100644
--- a/src/main/java/net/minecraft/client/render/PostProcessingManager.java
+++ b/src/main/java/net/minecraft/client/render/PostProcessingManager.java
@@ -82,25 +82,25 @@ public class PostProcessingManager
         }
 
         // Perform season effects
-        float seasonProgress = mc.theWorld.seasonManager.getSeasonProgress(); // Ragnes from 0.0 to 1.0
+        float seasonProgress = mc.theWorld.getSeasonManager().getSeasonProgress(); // Ranges from 0.0 to 1.0
         seasonProgress = (seasonProgress * 2) - 1f; // Ranges from -1.0 to 1.0
         seasonProgress = Math.abs(seasonProgress); // Ranges from 1.0 to 0.0 to 1.0
         seasonProgress = -seasonProgress + 1.0f; // Ranges from 0.0 to 1.0 to 0.0
-        if (mc.theWorld.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_SPRING)
+        if (mc.theWorld.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_SPRING)
         {
             saturation += 0.1f * seasonProgress * surfaceness;
         }
-        else if (mc.theWorld.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_SUMMER)
+        else if (mc.theWorld.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_SUMMER)
         {
             rMod += 0.1f * seasonProgress * surfaceness;
             gMod += 0.1f * seasonProgress * surfaceness;
         }
-        else if (mc.theWorld.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_FALL)
+        else if (mc.theWorld.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_FALL)
         {
             contrast -= 0.1f * seasonProgress * surfaceness;
             rMod += 0.1f * seasonProgress * surfaceness;
         }
-        else if (mc.theWorld.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_WINTER)
+        else if (mc.theWorld.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_WINTER)
         {
             contrast -= 0.1f * seasonProgress * surfaceness;
             bMod += 0.1f * seasonProgress * surfaceness;
@@ -136,7 +136,7 @@ public class PostProcessingManager
                 saturation += -0.2f * intensity * surfaceness;
                 brightness += -0.1f * intensity * surfaceness;
             }
-            else if (activeWeather == Weather.overworldFog)
+            else if (activeWeather == Weather.overworldFog && mc.gameSettings.fog.value)
             {
                 saturation += -0.4f * intensity * surfaceness;
                 contrast += -0.25f * intensity * surfaceness;
@@ -156,7 +156,7 @@ public class PostProcessingManager
         }
 
         // Perform heatwave effects
-        if (mc.theWorld.dimension == Dimension.overworld && (mc.theWorld.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_SUMMER || mc.theWorld.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_FALL))
+        if (mc.theWorld.dimension == Dimension.overworld && (mc.theWorld.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_SUMMER || mc.theWorld.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_FALL))
         {
             if (temperature >= 0.85 && humidity <= 0.15)
             {
diff --git a/src/main/java/net/minecraft/client/render/RenderBlocks.java b/src/main/java/net/minecraft/client/render/RenderBlocks.java
index 5fbd182f5..e53048021 100644
--- a/src/main/java/net/minecraft/client/render/RenderBlocks.java
+++ b/src/main/java/net/minecraft/client/render/RenderBlocks.java
@@ -22,7 +22,7 @@ import net.minecraft.core.world.WorldSource;
 public class RenderBlocks
 {
 
-    public RenderBlocks(World world, WorldSource worldSource)
+    public RenderBlocks(WorldSource worldSource)
     {
         overrideBlockTexture = null;
         flipTexture = false;
@@ -37,7 +37,6 @@ public class RenderBlocks
         field_22352_G = 1;
         blockAccess = worldSource;
         renderBitMask = 0;
-        this.world = world;
         this.mc = Minecraft.getMinecraft(this);
     }
 
@@ -128,7 +127,7 @@ public class RenderBlocks
 
     public boolean renderStandardBlock(Tessellator tessellator, BlockModel<Block> blockModel, Block block, int x, int y, int z)
     {
-        int color = BlockColorDispatcher.getInstance().getDispatch(block).getWorldColor(world, x, y, z);
+        int color = BlockColorDispatcher.getInstance().getDispatch(block).getWorldColor(blockAccess, x, y, z);
         float r = (float)(color >> 16 & 0xff) / 255F;
         float g = (float)(color >> 8 & 0xff) / 255F;
         float b = (float)(color & 0xff) / 255F;
@@ -218,7 +217,7 @@ public class RenderBlocks
         if (tex == null || ((renderBitMask >> side) & 1) != 0) return false;
 
         boolean rendered = false;
-        block.setBlockBoundsBasedOnSide(world, x, y, z, Side.getSideById(side));
+        block.setBlockBoundsBasedOnSide(this.blockAccess, x, y, z, Side.getSideById(side));
         if (this.renderAllFaces || blockModel.shouldSideBeRendered(this.blockAccess, x+dirX, y+dirY, z+dirZ, side, meta)) {
 
             setupLighting(r, g, b, side, meta,
@@ -891,7 +890,6 @@ public class RenderBlocks
     }
     public WorldSource blockAccess;
     private final Minecraft mc;
-    public World world;
     public IconCoordinate overrideBlockTexture;
     public boolean flipTexture;
     public boolean renderAllFaces;
diff --git a/src/main/java/net/minecraft/client/render/RenderGlobal.java b/src/main/java/net/minecraft/client/render/RenderGlobal.java
index 78f5eaf18..b3d254975 100644
--- a/src/main/java/net/minecraft/client/render/RenderGlobal.java
+++ b/src/main/java/net/minecraft/client/render/RenderGlobal.java
@@ -227,7 +227,7 @@ public class RenderGlobal
         EntityRenderDispatcher.instance.unloadEntityRenderers();
         EntityRenderDispatcher.instance.setWorld(world);
         worldObj = world;
-        globalRenderBlocks = new RenderBlocks(world, world);
+        globalRenderBlocks = new RenderBlocks(world);
         auroraBrightness = 0.0f;
         targetAuroraBrightness = Float.NaN;
         if(world != null)
@@ -328,7 +328,7 @@ public class RenderGlobal
         double cameraYaw = camera.getYRot(partialTick);
         float temperature = (float)worldObj.getBlockTemperature((int)cameraX, (int)cameraZ);
         float mult = 0.0f;
-        if (temperature <= 0.4f || worldObj.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_WINTER_ENDLESS)
+        if (temperature <= 0.4f || worldObj.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_WINTER_ENDLESS)
         {
             // temperature from 0.0f to 0.4f
             temperature /= 0.4f;
@@ -339,7 +339,7 @@ public class RenderGlobal
         }
 
         float altitude = (float)worldObj.getWorldType().getYPercentage((int)cameraY);
-        if ((temperature <= 0.6f || worldObj.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_WINTER || worldObj.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_WINTER_ENDLESS) && altitude >= 0.8f)
+        if ((temperature <= 0.6f || worldObj.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_WINTER || worldObj.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_WINTER_ENDLESS) && altitude >= 0.8f)
         {
             // altitude from 0.8f to 1.0f
             altitude -= 0.8f;
@@ -899,6 +899,10 @@ public class RenderGlobal
         GL11.glBlendFunc(770, 1);
         GL11.glPushMatrix();
         float f6 = 1.0F - (worldObj.getCurrentWeather() != null && worldObj.getCurrentWeather() != Weather.overworldClear ? (worldObj.weatherManager.getWeatherIntensity() * worldObj.weatherManager.getWeatherPower()) * 1.5f : 0.0f);
+        if (!mc.gameSettings.fog.value && worldObj.getCurrentWeather() == Weather.overworldFog)
+        {
+            f6 = 1f;
+        }
         float f9 = 0.0F;
         float f11 = 0.0F;
         float f13 = 0.0F;
diff --git a/src/main/java/net/minecraft/client/render/WorldRenderer.java b/src/main/java/net/minecraft/client/render/WorldRenderer.java
index b33707119..3af796da9 100644
--- a/src/main/java/net/minecraft/client/render/WorldRenderer.java
+++ b/src/main/java/net/minecraft/client/render/WorldRenderer.java
@@ -668,7 +668,15 @@ public class WorldRenderer
         Debug.change("entities");
         GL11.glShadeModel(7424 /*GL_FLAT*/);
         Lighting.enableLight();
+        if (!mc.gameSettings.fog.value)
+        {
+            GL11.glDisable(GL11.GL_FOG);
+        }
         renderGlobal.renderEntities(mc.activeCamera, partialTick);
+        if (!mc.gameSettings.fog.value)
+        {
+            GL11.glEnable(GL11.GL_FOG);
+        }
         
         Debug.change("particles");
         effectRenderer.renderParticlesAtOrigin(partialTick);
@@ -712,7 +720,15 @@ public class WorldRenderer
             GL11.glColorMask(true, true, true, true);
             if(i1 > 0)
             {
+                if (!mc.gameSettings.fog.value)
+                {
+                    GL11.glDisable(GL11.GL_FOG);
+                }
                 renderGlobal.callAllDisplayLists(1, partialTick);
+                if (!mc.gameSettings.fog.value)
+                {
+                    GL11.glEnable(GL11.GL_FOG);
+                }
             }
             GL11.glShadeModel(GL11.GL_FLAT);
         }
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColor.java b/src/main/java/net/minecraft/client/render/block/color/BlockColor.java
index 565077c26..b9036f77c 100644
--- a/src/main/java/net/minecraft/client/render/block/color/BlockColor.java
+++ b/src/main/java/net/minecraft/client/render/block/color/BlockColor.java
@@ -1,10 +1,10 @@
 package net.minecraft.client.render.block.color;
 
-import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public abstract class BlockColor
 {
     public abstract int getFallbackColor(int meta);
 
-    public abstract int getWorldColor(World world, int x, int y, int z);
+    public abstract int getWorldColor(WorldSource world, int x, int y, int z);
 }
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorDefault.java b/src/main/java/net/minecraft/client/render/block/color/BlockColorDefault.java
index bfd8d518c..ce2dd08ae 100644
--- a/src/main/java/net/minecraft/client/render/block/color/BlockColorDefault.java
+++ b/src/main/java/net/minecraft/client/render/block/color/BlockColorDefault.java
@@ -1,6 +1,6 @@
 package net.minecraft.client.render.block.color;
 
-import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockColorDefault
     extends BlockColor
@@ -12,7 +12,7 @@ public class BlockColorDefault
     }
 
     @Override
-    public int getWorldColor(World world, int x, int y, int z)
+    public int getWorldColor(WorldSource world, int x, int y, int z)
     {
         return 0xFFFFFF;
     }
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorGrass.java b/src/main/java/net/minecraft/client/render/block/color/BlockColorGrass.java
index 6c8463775..6a51cb2ca 100644
--- a/src/main/java/net/minecraft/client/render/block/color/BlockColorGrass.java
+++ b/src/main/java/net/minecraft/client/render/block/color/BlockColorGrass.java
@@ -1,7 +1,7 @@
 package net.minecraft.client.render.block.color;
 
 import net.minecraft.client.render.colorizer.ColorizerGrass;
-import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 import net.minecraft.core.world.noise.ImprovedNoise;
 import net.minecraft.core.world.season.Season;
 import net.minecraft.core.world.season.Seasons;
@@ -20,22 +20,22 @@ public class BlockColorGrass
     }
 
     @Override
-    public int getWorldColor(World world, int x, int y, int z)
+    public int getWorldColor(WorldSource world, int x, int y, int z)
     {
         double localTemperature = world.getBlockTemperature(x, z);
         double localHumidity = world.getBlockHumidity(x, z);
         int baseGrassColor = ColorizerGrass.getGrassColor(localTemperature, localHumidity);
-        Season season = world.seasonManager.getCurrentSeason();
+        Season season = world.getSeasonManager().getCurrentSeason();
         if (season != null)
         {
             boolean isWinter = (season == Seasons.OVERWORLD_WINTER || season == Seasons.OVERWORLD_WINTER_ENDLESS);
 
-            float progress = world.seasonManager.getSeasonProgress();
+            float progress = world.getSeasonManager().getSeasonProgress();
             if(isWinter){
                 baseGrassColor = ColorizerGrass.getGrassColor((localTemperature*progress), localHumidity);
             }
 
-            baseGrassColor = season.modifyGrassColorizer(baseGrassColor, progress > 0.5f ? world.seasonManager.getNextSeason() : world.seasonManager.getPreviousSeason(), Math.abs(progress - 0.5f));
+            baseGrassColor = season.modifyGrassColorizer(baseGrassColor, progress > 0.5f ? world.getSeasonManager().getNextSeason() : world.getSeasonManager().getPreviousSeason(), Math.abs(progress - 0.5f));
 
             if(isWinter){
                 float offsetIntensity = 1 - Math.abs((progress) - 1);
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorLeaves.java b/src/main/java/net/minecraft/client/render/block/color/BlockColorLeaves.java
index 4ef53cf01..66a20d732 100644
--- a/src/main/java/net/minecraft/client/render/block/color/BlockColorLeaves.java
+++ b/src/main/java/net/minecraft/client/render/block/color/BlockColorLeaves.java
@@ -3,7 +3,7 @@ package net.minecraft.client.render.block.color;
 import net.minecraft.client.render.colorizer.ColorProperties;
 import net.minecraft.client.render.colorizer.ColorizerFoliage;
 import net.minecraft.client.render.colorizer.LeavesColorProperties;
-import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 import net.minecraft.core.world.season.Season;
 
 public class BlockColorLeaves
@@ -25,7 +25,7 @@ public class BlockColorLeaves
     }
 
     @Override
-    public int getWorldColor(World world, int x, int y, int z)
+    public int getWorldColor(WorldSource world, int x, int y, int z)
     {
         LeavesColorProperties color = ColorProperties.getLeavesColor(colorId);
         if (color == null) return 0xFFFFFF;
@@ -34,10 +34,10 @@ public class BlockColorLeaves
         {
             double temp = world.getBlockTemperature(x, z);
             double hum = world.getBlockHumidity(x, z);
-            Season season = world.seasonManager.getCurrentSeason();
+            Season season = world.getSeasonManager().getCurrentSeason();
             if (season != null)
             {
-                float progress = world.seasonManager.getSeasonProgress();
+                float progress = world.getSeasonManager().getSeasonProgress();
                 foliageColor = ColorizerFoliage.getSeasonalColor(season, progress, temp, hum, color);
             }
         }
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorLeavesOak.java b/src/main/java/net/minecraft/client/render/block/color/BlockColorLeavesOak.java
index 2cfe538df..b002e3780 100644
--- a/src/main/java/net/minecraft/client/render/block/color/BlockColorLeavesOak.java
+++ b/src/main/java/net/minecraft/client/render/block/color/BlockColorLeavesOak.java
@@ -3,7 +3,7 @@ package net.minecraft.client.render.block.color;
 import net.minecraft.client.render.colorizer.ColorProperties;
 import net.minecraft.client.render.colorizer.ColorizerFoliage;
 import net.minecraft.client.render.colorizer.LeavesColorProperties;
-import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 import net.minecraft.core.world.noise.ImprovedNoise;
 import net.minecraft.core.world.season.Season;
 import net.minecraft.core.world.season.Seasons;
@@ -21,7 +21,7 @@ public class BlockColorLeavesOak
     }
 
     @Override
-    public int getWorldColor(World world, int x, int y, int z)
+    public int getWorldColor(WorldSource world, int x, int y, int z)
     {
         LeavesColorProperties color = ColorProperties.getLeavesColor(colorId);
         if (color == null) return 0xFFFFFF;
@@ -30,10 +30,10 @@ public class BlockColorLeavesOak
         {
             double temp = world.getBlockTemperature(x, z);
             double hum = world.getBlockHumidity(x, z);
-            Season season = world.seasonManager.getCurrentSeason();
+            Season season = world.getSeasonManager().getCurrentSeason();
             if (season != null)
             {
-                float progress = world.seasonManager.getSeasonProgress();
+                float progress = world.getSeasonManager().getSeasonProgress();
                 foliageColor = ColorizerFoliage.getSeasonalColor(season, progress, temp, hum, color, true);
                 if (season == Seasons.OVERWORLD_FALL)
                 {
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorRedstoneWire.java b/src/main/java/net/minecraft/client/render/block/color/BlockColorRedstoneWire.java
index 2ac50e4d3..6aabcc46e 100644
--- a/src/main/java/net/minecraft/client/render/block/color/BlockColorRedstoneWire.java
+++ b/src/main/java/net/minecraft/client/render/block/color/BlockColorRedstoneWire.java
@@ -1,7 +1,7 @@
 package net.minecraft.client.render.block.color;
 
 import net.minecraft.client.util.helper.Colors;
-import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockColorRedstoneWire
     extends BlockColor
@@ -14,7 +14,7 @@ public class BlockColorRedstoneWire
     }
 
     @Override
-    public int getWorldColor(World world, int x, int y, int z)
+    public int getWorldColor(WorldSource world, int x, int y, int z)
     {
         // Colored by renderer
     	return Colors.allRedstoneColors[15].getARGB();
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorTallGrass.java b/src/main/java/net/minecraft/client/render/block/color/BlockColorTallGrass.java
index 901165a44..6ca6f3d1a 100644
--- a/src/main/java/net/minecraft/client/render/block/color/BlockColorTallGrass.java
+++ b/src/main/java/net/minecraft/client/render/block/color/BlockColorTallGrass.java
@@ -2,19 +2,16 @@ package net.minecraft.client.render.block.color;
 
 import net.minecraft.core.block.Block;
 import net.minecraft.client.render.colorizer.ColorizerGrass;
-import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 import net.minecraft.core.world.biome.Biomes;
 import net.minecraft.core.world.season.Season;
 import net.minecraft.core.world.season.Seasons;
-import org.lwjgl.Sys;
-
-import java.util.Random;
 
 public class BlockColorTallGrass
     extends BlockColorGrass
 {
     @Override
-    public int getWorldColor(World world, int x, int y, int z)
+    public int getWorldColor(WorldSource world, int x, int y, int z)
     {
 
         double localTemperature = world.getBlockTemperature(x, z);
@@ -33,78 +30,74 @@ public class BlockColorTallGrass
         localHumidity += offsetH;
 
         int baseGrassColor = ColorizerGrass.getGrassColor(localTemperature, localHumidity);
-        if (world != null)
-        {
-            if(world.getBlockBiome(x, y - 1, z) == Biomes.OVERWORLD_CAATINGA){
-
-                Season season = world.seasonManager.getCurrentSeason();
-                if (season != null)
-                {
-                    boolean ishumid = (season == Seasons.OVERWORLD_WINTER || season == Seasons.OVERWORLD_WINTER_ENDLESS || season == Seasons.OVERWORLD_FALL);
-                    float progress = world.seasonManager.getSeasonProgress();
-
-                    if(ishumid){
-                        baseGrassColor = ColorizerGrass.getGrassColor(1.0, 1.0);
-                    } else {
-                        baseGrassColor = ColorizerGrass.getGrassColor(1.0, 0.0);
-                    }
-                    baseGrassColor = season.modifyGrassColorizer(baseGrassColor, progress > 0.5f ? world.seasonManager.getNextSeason() : world.seasonManager.getPreviousSeason(), Math.abs(progress - 0.5f));
-                }
-                return baseGrassColor;
-            }
+        if (world.getBlockBiome(x, y - 1, z) == Biomes.OVERWORLD_CAATINGA) {
 
-        	int blockBelow = world.getBlockId(x, y - 1, z);
-            if(blockBelow == Block.grassScorched.id || blockBelow == Block.dirtScorched.id || blockBelow == Block.dirtScorchedRich.id ){
+            Season season = world.getSeasonManager().getCurrentSeason();
+            if (season != null) {
+                boolean ishumid = (season == Seasons.OVERWORLD_WINTER || season == Seasons.OVERWORLD_WINTER_ENDLESS || season == Seasons.OVERWORLD_FALL);
+                float progress = world.getSeasonManager().getSeasonProgress();
 
-                return 0xffcc58;
+                if (ishumid) {
+                    baseGrassColor = ColorizerGrass.getGrassColor(1.0, 1.0);
+                } else {
+                    baseGrassColor = ColorizerGrass.getGrassColor(1.0, 0.0);
+                }
+                baseGrassColor = season.modifyGrassColorizer(baseGrassColor, progress > 0.5f ? world.getSeasonManager().getNextSeason() : world.getSeasonManager().getPreviousSeason(), Math.abs(progress - 0.5f));
             }
-            Season season = world.seasonManager.getCurrentSeason();
-            if (season != null)
-            {
+            return baseGrassColor;
+        }
 
-                boolean isWinter = (season == Seasons.OVERWORLD_WINTER || season == Seasons.OVERWORLD_WINTER_ENDLESS);
+        int blockBelow = world.getBlockId(x, y - 1, z);
+        if(blockBelow == Block.grassScorched.id || blockBelow == Block.dirtScorched.id || blockBelow == Block.dirtScorchedRich.id ){
 
+            return 0xffcc58;
+        }
+        Season season = world.getSeasonManager().getCurrentSeason();
+        if (season != null)
+        {
 
-                float progress = world.seasonManager.getSeasonProgress();
+            boolean isWinter = (season == Seasons.OVERWORLD_WINTER || season == Seasons.OVERWORLD_WINTER_ENDLESS);
 
-                if(isWinter){
-                    baseGrassColor = ColorizerGrass.getGrassColor(localTemperature*progress, localHumidity);
-                }
 
-                baseGrassColor = season.modifyGrassColorizer(baseGrassColor, progress > 0.5f ? world.seasonManager.getNextSeason() : world.seasonManager.getPreviousSeason(), Math.abs(progress - 0.5f));
+            float progress = world.getSeasonManager().getSeasonProgress();
+
+            if(isWinter){
+                baseGrassColor = ColorizerGrass.getGrassColor(localTemperature*progress, localHumidity);
+            }
 
-                if(isWinter){
-                    float offsetIntensity = 1 - Math.abs((progress*2F) - 1);
-                    float red = ((baseGrassColor & 0xFF0000) >> 16) / 255F;
-                    float green = ((baseGrassColor & 0x00FF00) >> 8) / 255F;
-                    float blue = (baseGrassColor & 0x0000FF) / 255F;
+            baseGrassColor = season.modifyGrassColorizer(baseGrassColor, progress > 0.5f ? world.getSeasonManager().getNextSeason() : world.getSeasonManager().getPreviousSeason(), Math.abs(progress - 0.5f));
 
-                    float gray = red * green * blue / 3;
-                    float grayOffset = (float)grassColorPerlin.getValue(x / 30D, y / 50D, z / 30D) * offsetIntensity * 0.5f;
-                    if (gray + grayOffset > 0.4f) grayOffset = 0.4f - gray;
-                    if (gray + grayOffset < 0.0f) grayOffset = -gray;
+            if(isWinter){
+                float offsetIntensity = 1 - Math.abs((progress*2F) - 1);
+                float red = ((baseGrassColor & 0xFF0000) >> 16) / 255F;
+                float green = ((baseGrassColor & 0x00FF00) >> 8) / 255F;
+                float blue = (baseGrassColor & 0x0000FF) / 255F;
 
-                    red = ((red + grayOffset));
-                    green = ((green + grayOffset));
-                    blue = ((blue + grayOffset));
+                float gray = red * green * blue / 3;
+                float grayOffset = (float)grassColorPerlin.getValue(x / 30D, y / 50D, z / 30D) * offsetIntensity * 0.5f;
+                if (gray + grayOffset > 0.4f) grayOffset = 0.4f - gray;
+                if (gray + grayOffset < 0.0f) grayOffset = -gray;
 
-                    if (red < 0) red = 0;
-                    if (red > 1) red = 1;
-                    if (green < 0) green = 0;
-                    if (green > 1) green = 1;
-                    if (blue < 0) blue = 0;
-                    if (blue > 1) blue = 1;
+                red = ((red + grayOffset));
+                green = ((green + grayOffset));
+                blue = ((blue + grayOffset));
 
-                    int newRed = (int) (red * 255) & 0xFF;
-                    int newGreen = (int) (green * 255) & 0xFF;
-                    int newBlue = (int) (blue * 255) & 0xFF;
+                if (red < 0) red = 0;
+                if (red > 1) red = 1;
+                if (green < 0) green = 0;
+                if (green > 1) green = 1;
+                if (blue < 0) blue = 0;
+                if (blue > 1) blue = 1;
 
+                int newRed = (int) (red * 255) & 0xFF;
+                int newGreen = (int) (green * 255) & 0xFF;
+                int newBlue = (int) (blue * 255) & 0xFF;
 
-                    baseGrassColor = ((newRed << 16) | (newGreen << 8) | (newBlue));
 
-                }
+                baseGrassColor = ((newRed << 16) | (newGreen << 8) | (newBlue));
 
             }
+
         }
         return baseGrassColor;
     }
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java b/src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java
index f982008b7..83103fa06 100644
--- a/src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java
+++ b/src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java
@@ -2,7 +2,7 @@ package net.minecraft.client.render.block.color;
 
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.render.colorizer.ColorizerWater;
-import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockColorWater
     extends BlockColor
@@ -19,7 +19,7 @@ public class BlockColorWater
     }
 
     @Override
-    public int getWorldColor(World world, int x, int y, int z)
+    public int getWorldColor(WorldSource world, int x, int y, int z)
     {
         if (world != null) {
             if (Minecraft.getMinecraft(this).gameSettings.biomeWater.value)
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelAlgae.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelAlgae.java
index e9ce159d6..8b5ecff40 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelAlgae.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelAlgae.java
@@ -14,16 +14,16 @@ public class BlockModelAlgae<T extends Block> extends BlockModelStandard<T>{
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
-        float brightness = Math.min(getBlockBrightness(renderBlocks.world, x, y - 1, z), getBlockBrightness(renderBlocks.world, x, y, z));
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+        float brightness = Math.min(getBlockBrightness(renderBlocks.blockAccess, x, y - 1, z), getBlockBrightness(renderBlocks.blockAccess, x, y, z));
 
-        int color = BlockColorDispatcher.getInstance().getDispatch(block).getWorldColor(renderBlocks.world, x, y, z);
+        int color = BlockColorDispatcher.getInstance().getDispatch(block).getWorldColor(renderBlocks.blockAccess, x, y, z);
         float red = (float)(color >> 16 & 0xff) / 255F;
         float green = (float)(color >> 8 & 0xff) / 255F;
         float blue = (float)(color & 0xff) / 255F;
 
         tessellator.setColorOpaque_F(red * brightness, green * brightness, blue * brightness);
-        IconCoordinate tex = getBlockTextureFromSideAndMetadata(Side.TOP, renderBlocks.world.getBlockMetadata(x, y, z));
+        IconCoordinate tex = getBlockTextureFromSideAndMetadata(Side.TOP, renderBlocks.blockAccess.getBlockMetadata(x, y, z));
         renderTopFace(tessellator, block, x, y - 0.1125, z, tex);
         renderBottomFace(tessellator, block, x, y + 0.0125, z, tex);
 
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java
index bebc6d9c4..32bc85486 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java
@@ -15,7 +15,7 @@ public class BlockModelAxisAligned<T extends Block> extends BlockModelStandard<T
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int l = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         int i1 = BlockRotatable.getOrientation(l);
         switch(i1)
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelBasket.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelBasket.java
index 17a0c8acc..2a6a6c09c 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelBasket.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelBasket.java
@@ -15,7 +15,7 @@ public class BlockModelBasket<T extends BlockBasket> extends BlockModelStandard<
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         // Render basket
         final float onePix = 1.0f / 16;
         final float basketHeight = onePix * 16;
@@ -43,7 +43,7 @@ public class BlockModelBasket<T extends BlockBasket> extends BlockModelStandard<
         block.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
         renderBlocks.renderBitMask = 0;
 
-        final int height = block.getFillLevel(renderBlocks.world, x, y, z);
+        final int height = block.getFillLevel(renderBlocks.blockAccess, x, y, z);
         // Interior
         if (height > 0)
         {
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java
index 010107def..5287840ee 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java
@@ -22,7 +22,7 @@ public class BlockModelBed<T extends Block> extends BlockModelStandard<T>{
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         renderBlocks.enableAO = true;
         renderBlocks.cache.setupCache(block, renderBlocks.blockAccess, x, y, z);
 
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCacaoLeaves.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelCacaoLeaves.java
index 614059c19..82808cfed 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelCacaoLeaves.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelCacaoLeaves.java
@@ -21,7 +21,7 @@ public class BlockModelCacaoLeaves<T extends Block> extends BlockModelLeaves<T>{
         super.render(tessellator, x, y, z);
 
         final int growthRate = (renderBlocks.blockAccess.getBlockMetadata(x, y, z) & 0XF0) >> 4;
-        final float brightness = getBlockBrightness(renderBlocks.world, x, y, z);
+        final float brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
 
         final float cNorthSouth = 0.8F;
         final float cEastWest = 0.6F;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCactus.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelCactus.java
index 9080f8610..0369abe10 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelCactus.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelCactus.java
@@ -13,7 +13,7 @@ public class BlockModelCactus<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
 
         final float sidesOffset = 0.0625F;
 
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCandle.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelCandle.java
index dc17d6ecd..963f4b0c9 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelCandle.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelCandle.java
@@ -12,9 +12,9 @@ public class BlockModelCandle<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
-        boolean isLit = (renderBlocks.world.getBlockMetadata(x, y, z) & 0b00000001) == 0;
-        float brightness = isLit ? 1.0f : getBlockBrightness(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+        boolean isLit = (renderBlocks.blockAccess.getBlockMetadata(x, y, z) & 0b00000001) == 0;
+        float brightness = isLit ? 1.0f : getBlockBrightness(renderBlocks.blockAccess, x, y, z);
 
         float minX = x + 0.5f - (1.5f / 16f);
         float minY = y + 0f;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsPumpkin.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsPumpkin.java
index 9d7577f8f..71d700e1b 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsPumpkin.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsPumpkin.java
@@ -28,7 +28,7 @@ public class BlockModelCropsPumpkin<T extends Block> extends BlockModelStandard<
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
 
         final float brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
         tessellator.setColorOpaque_F(brightness, brightness, brightness);
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsWheat.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsWheat.java
index 2ba8795ff..98702a48c 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsWheat.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsWheat.java
@@ -25,7 +25,7 @@ public class BlockModelCropsWheat<T extends Block> extends BlockModelStandard<T>
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         float brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
         tessellator.setColorOpaque_F(brightness, brightness, brightness);
 
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCrossedSquares.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelCrossedSquares.java
index d3523ecf5..0ae77411c 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelCrossedSquares.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelCrossedSquares.java
@@ -75,10 +75,10 @@ public class BlockModelCrossedSquares<T extends Block> extends BlockModelStandar
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
 
         float brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
-        int color = BlockColorDispatcher.getInstance().getDispatch(block).getWorldColor(renderBlocks.world, x, y, z);
+        int color = BlockColorDispatcher.getInstance().getDispatch(block).getWorldColor(renderBlocks.blockAccess, x, y, z);
         float r = (float)(color >> 16 & 0xff) / 255F;
         float g = (float)(color >> 8 & 0xff) / 255F;
         float b = (float)(color & 0xff) / 255F;
@@ -98,7 +98,7 @@ public class BlockModelCrossedSquares<T extends Block> extends BlockModelStandar
             zd += ((double)((float)(dRandom >> 24 & 15L) / 15F) - 0.5D) * 0.5D;
         }
 
-        int metadata = renderBlocks.world.getBlockMetadata(x, y, z);
+        int metadata = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         IconCoordinate texIndex = getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata);
         if(renderBlocks.overrideBlockTexture != null)
         {
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 de5da1b0b..9448bae27 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
@@ -205,6 +205,9 @@ public class BlockModelDispatcher
 
         addDispatch(new BlockModelCrossedSquares<>(Block.flowerYellow).withTextures("minecraft:block/flower_yellow"));
         addDispatch(new BlockModelCrossedSquares<>(Block.flowerRed).withTextures("minecraft:block/flower_red"));
+        addDispatch(new BlockModelCrossedSquares<>(Block.flowerPink).withTextures("minecraft:block/flower_pink"));
+        addDispatch(new BlockModelCrossedSquares<>(Block.flowerPurple).withTextures("minecraft:block/flower_purple"));
+        addDispatch(new BlockModelCrossedSquares<>(Block.flowerLightBlue).withTextures("minecraft:block/flower_light_blue"));
 
         addDispatch(new BlockModelCrossedSquares<>(Block.mushroomBrown).withTextures("minecraft:block/mushroom_brown"));
         addDispatch(new BlockModelCrossedSquares<>(Block.mushroomRed).withTextures("minecraft:block/mushroom_red"));
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java
index 4f920b277..ae120f600 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java
@@ -13,15 +13,15 @@ public class BlockModelDoor<T extends BlockDoor> extends BlockModelStandard<T>{
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         float f = 0.5F;
         float f1 = 1.0F;
         float f2 = 0.8F;
         float f3 = 0.6F;
         float f4 = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
         float f5 = getBlockBrightness(renderBlocks.blockAccess, x, y - 1, z);
-        boolean aboveIsDoor = renderBlocks.world.getBlock(x, y + 1, z) instanceof BlockDoor;
-        boolean belowIsDoor = renderBlocks.world.getBlock(x, y - 1, z) instanceof BlockDoor;
+        boolean aboveIsDoor = renderBlocks.blockAccess.getBlock(x, y + 1, z) instanceof BlockDoor;
+        boolean belowIsDoor = renderBlocks.blockAccess.getBlock(x, y - 1, z) instanceof BlockDoor;
         int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         if(block.minY > 0.0D)
         {
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFence.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelFence.java
index 7352c28ca..17d331b43 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFence.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelFence.java
@@ -14,7 +14,7 @@ public class BlockModelFence<T  extends BlockFence> extends BlockModelStandard<T
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         final float f = 0.375F;
         final float f1 = 0.625F;
         block.setBlockBounds(f, 0.0F, f, f1, 1.0F, f1);
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGate.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGate.java
index 94ad81c15..e641ffcf0 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGate.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGate.java
@@ -14,7 +14,7 @@ public class BlockModelFenceGate<T extends BlockFenceGate> extends BlockModelSta
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         boolean flag = true;
         int l = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         boolean flag1 = BlockFenceGate.func_35291_d(l);
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceThin.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceThin.java
index c8e6c6a0f..368e5aa3d 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceThin.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceThin.java
@@ -23,18 +23,18 @@ public class BlockModelFenceThin<T extends BlockFenceThin> extends BlockModelSta
     }
     @Override
     public boolean render(Tessellator t, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
-        float brightness = getBlockBrightness(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+        float brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
 
         float cBottom = 0.5F;
         float cTop = 1.0F;
         float cNorthSouth = 0.8F;
         float cEastWest = 0.6F;
 
-        boolean connectNorth = block.canConnectTo(renderBlocks.world, x + Direction.NORTH.getOffsetX(), y + Direction.NORTH.getOffsetY(), z + Direction.NORTH.getOffsetZ());
-        boolean connectSouth = block.canConnectTo(renderBlocks.world, x + Direction.SOUTH.getOffsetX(), y + Direction.SOUTH.getOffsetY(), z + Direction.SOUTH.getOffsetZ());
-        boolean connectEast = block.canConnectTo(renderBlocks.world, x + Direction.EAST.getOffsetX(), y + Direction.EAST.getOffsetY(), z + Direction.EAST.getOffsetZ());
-        boolean connectWest = block.canConnectTo(renderBlocks.world, x + Direction.WEST.getOffsetX(), y + Direction.WEST.getOffsetY(), z + Direction.WEST.getOffsetZ());
+        boolean connectNorth = block.canConnectTo(renderBlocks.blockAccess, x + Direction.NORTH.getOffsetX(), y + Direction.NORTH.getOffsetY(), z + Direction.NORTH.getOffsetZ());
+        boolean connectSouth = block.canConnectTo(renderBlocks.blockAccess, x + Direction.SOUTH.getOffsetX(), y + Direction.SOUTH.getOffsetY(), z + Direction.SOUTH.getOffsetZ());
+        boolean connectEast = block.canConnectTo(renderBlocks.blockAccess, x + Direction.EAST.getOffsetX(), y + Direction.EAST.getOffsetY(), z + Direction.EAST.getOffsetZ());
+        boolean connectWest = block.canConnectTo(renderBlocks.blockAccess, x + Direction.WEST.getOffsetX(), y + Direction.WEST.getOffsetY(), z + Direction.WEST.getOffsetZ());
 
         boolean lineNorthSouth = connectNorth && connectSouth;
         boolean lineEastWest = connectEast && connectWest;
@@ -70,19 +70,19 @@ public class BlockModelFenceThin<T extends BlockFenceThin> extends BlockModelSta
         double fenceBottommostMaxU = fenceBottommostTex.getSubIconU(onePix * 16);
         double fenceBottommostMaxV = fenceBottommostTex.getSubIconV(onePix * 16);
 
-        Block blockAbove = renderBlocks.world.getBlock(x, y + 1, z);
-        boolean connectUpNorth = blockAbove == block && block.canConnectTo(renderBlocks.world, x + Direction.NORTH.getOffsetX(), y + Direction.NORTH.getOffsetY() + 1, z + Direction.NORTH.getOffsetZ());
-        boolean connectUpSouth = blockAbove == block && block.canConnectTo(renderBlocks.world, x + Direction.SOUTH.getOffsetX(), y + Direction.SOUTH.getOffsetY() + 1, z + Direction.SOUTH.getOffsetZ());
-        boolean connectUpEast = blockAbove == block && block.canConnectTo(renderBlocks.world, x + Direction.EAST.getOffsetX(), y + Direction.EAST.getOffsetY() + 1, z + Direction.EAST.getOffsetZ());
-        boolean connectUpWest = blockAbove == block && block.canConnectTo(renderBlocks.world, x + Direction.WEST.getOffsetX(), y + Direction.WEST.getOffsetY() + 1, z + Direction.WEST.getOffsetZ());
+        Block blockAbove = renderBlocks.blockAccess.getBlock(x, y + 1, z);
+        boolean connectUpNorth = blockAbove == block && block.canConnectTo(renderBlocks.blockAccess, x + Direction.NORTH.getOffsetX(), y + Direction.NORTH.getOffsetY() + 1, z + Direction.NORTH.getOffsetZ());
+        boolean connectUpSouth = blockAbove == block && block.canConnectTo(renderBlocks.blockAccess, x + Direction.SOUTH.getOffsetX(), y + Direction.SOUTH.getOffsetY() + 1, z + Direction.SOUTH.getOffsetZ());
+        boolean connectUpEast = blockAbove == block && block.canConnectTo(renderBlocks.blockAccess, x + Direction.EAST.getOffsetX(), y + Direction.EAST.getOffsetY() + 1, z + Direction.EAST.getOffsetZ());
+        boolean connectUpWest = blockAbove == block && block.canConnectTo(renderBlocks.blockAccess, x + Direction.WEST.getOffsetX(), y + Direction.WEST.getOffsetY() + 1, z + Direction.WEST.getOffsetZ());
 
-        Block blockBelow = renderBlocks.world.getBlock(x, y - 1, z);
-        boolean connectDownNorth = blockBelow == block && block.canConnectTo(renderBlocks.world, x + Direction.NORTH.getOffsetX(), y + Direction.NORTH.getOffsetY() - 1, z + Direction.NORTH.getOffsetZ());
-        boolean connectDownSouth = blockBelow == block && block.canConnectTo(renderBlocks.world, x + Direction.SOUTH.getOffsetX(), y + Direction.SOUTH.getOffsetY() - 1, z + Direction.SOUTH.getOffsetZ());
-        boolean connectDownEast = blockBelow == block && block.canConnectTo(renderBlocks.world, x + Direction.EAST.getOffsetX(), y + Direction.EAST.getOffsetY() - 1, z + Direction.EAST.getOffsetZ());
-        boolean connectDownWest = blockBelow == block && block.canConnectTo(renderBlocks.world, x + Direction.WEST.getOffsetX(), y + Direction.WEST.getOffsetY() - 1, z + Direction.WEST.getOffsetZ());
+        Block blockBelow = renderBlocks.blockAccess.getBlock(x, y - 1, z);
+        boolean connectDownNorth = blockBelow == block && block.canConnectTo(renderBlocks.blockAccess, x + Direction.NORTH.getOffsetX(), y + Direction.NORTH.getOffsetY() - 1, z + Direction.NORTH.getOffsetZ());
+        boolean connectDownSouth = blockBelow == block && block.canConnectTo(renderBlocks.blockAccess, x + Direction.SOUTH.getOffsetX(), y + Direction.SOUTH.getOffsetY() - 1, z + Direction.SOUTH.getOffsetZ());
+        boolean connectDownEast = blockBelow == block && block.canConnectTo(renderBlocks.blockAccess, x + Direction.EAST.getOffsetX(), y + Direction.EAST.getOffsetY() - 1, z + Direction.EAST.getOffsetZ());
+        boolean connectDownWest = blockBelow == block && block.canConnectTo(renderBlocks.blockAccess, x + Direction.WEST.getOffsetX(), y + Direction.WEST.getOffsetY() - 1, z + Direction.WEST.getOffsetZ());
 
-        if (block.shouldDrawColumn(renderBlocks.world, x, y, z))
+        if (block.shouldDrawColumn(renderBlocks.blockAccess, x, y, z))
         {
             double sidesMinU = columnTexIndex.getIconUMin();
             double sidesMinV = columnTexIndex.getIconVMin();
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFire.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelFire.java
index 4c2a7e16d..a493c0a0b 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFire.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelFire.java
@@ -19,7 +19,7 @@ public class BlockModelFire<T extends Block> extends BlockModelStandard<T>{
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         IconCoordinate tex = getBlockTextureFromSideAndMetadata(Side.BOTTOM, renderBlocks.blockAccess.getBlockMetadata(x, y, z));
         if(renderBlocks.overrideBlockTexture != null)
         {
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFluid.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelFluid.java
index 2656b26b8..1130c10e5 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFluid.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelFluid.java
@@ -17,8 +17,8 @@ public class BlockModelFluid<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
-        int color = BlockColorDispatcher.getInstance().getDispatch(block).getWorldColor(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+        int color = BlockColorDispatcher.getInstance().getDispatch(block).getWorldColor(renderBlocks.blockAccess, x, y, z);
         float r = (float)(color >> 16 & 0xff) / 255F;
         float g = (float)(color >> 8 & 0xff) / 255F;
         float b = (float)(color & 0xff) / 255F;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelJar.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelJar.java
index 974410591..7a7c99e72 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelJar.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelJar.java
@@ -15,11 +15,11 @@ public class BlockModelJar<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         // todo: yes, i know this is horrible.
-        float brightness = getBlockBrightness(renderBlocks.world, x, y, z);
+        float brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
         float yOffset = 0f;
-        int meta = renderBlocks.world.getBlockMetadata(x, y, z);
+        int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
 
         float extMinX = x + 0.5f - (3f / 16f);
         float extMinY = y + yOffset;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLadder.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelLadder.java
index 19333b238..db427f2a5 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLadder.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelLadder.java
@@ -12,7 +12,7 @@ public class BlockModelLadder<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int k1 = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         IconCoordinate l = getBlockTextureFromSideAndMetadata(Side.BOTTOM, k1);
         if(renderBlocks.overrideBlockTexture != null)
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLantern.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelLantern.java
index d220fd7ed..12909291f 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLantern.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelLantern.java
@@ -12,12 +12,12 @@ public class BlockModelLantern<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
-        int meta = renderBlocks.world.getBlockMetadata(x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+        int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         boolean isHanging = (meta & 0b00000001) == 0;
         boolean isAngled = (meta & 0b00000010) != 0;
 
-        float brightness = getBlockBrightness(renderBlocks.world, x, y, z);
+        float brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
 
         float yOffset = isHanging ? 0f : 0.375f;
 
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java
index 6ff39c372..e7955c3ee 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java
@@ -13,7 +13,7 @@ public class BlockModelLever<T extends Block> extends BlockModelStandard<T>{
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int l = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         int i1 = l & 7;
         boolean flag = (l & 8) > 0;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelMossyStone.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelMossyStone.java
index 3bd84387d..9ec74f661 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelMossyStone.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelMossyStone.java
@@ -16,7 +16,7 @@ public class BlockModelMossyStone<T extends Block> extends BlockModelStandard<T>
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         renderStandardBlock(tessellator, block, x, y, z, 1.0f, 1.0f, 1.0f);
         renderBlocks.overrideBlockTexture = mossOverlay;
         renderStandardBlock(tessellator, block, x, y, z);
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelPebbles.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelPebbles.java
index fee474548..3a237f44b 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelPebbles.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelPebbles.java
@@ -19,17 +19,17 @@ public class BlockModelPebbles<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         float f1 = 1.0F;
 
-        float f4 = getBlockBrightness(renderBlocks.world, x, y, z);
-        float f5 = getBlockBrightness(renderBlocks.world, x, y - 1, z);
+        float f4 = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
+        float f5 = getBlockBrightness(renderBlocks.blockAccess, x, y - 1, z);
         if(f5 < f4)
         {
             f5 = f4;
         }
         tessellator.setColorOpaque_F(f1 * f5, f1 * f5, f1 * f5);
-        IconCoordinate j = getBlockTextureFromSideAndMetadata(Side.TOP, renderBlocks.world.getBlockMetadata(x, y, z));
+        IconCoordinate j = getBlockTextureFromSideAndMetadata(Side.TOP, renderBlocks.blockAccess.getBlockMetadata(x, y, z));
         renderTopFace(tessellator, block, x, y, z, j);
 
         return true;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java
index 5e2fad6e1..484b0421f 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java
@@ -19,7 +19,7 @@ public class BlockModelPiston<T extends BlockPistonBase> extends BlockModelStand
     }
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z){
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         return renderPistonBase(tessellator, x, y, z, false);
     }
     @Override
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelPistonHead.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelPistonHead.java
index 30911462f..01b4e26fb 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelPistonHead.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelPistonHead.java
@@ -18,7 +18,7 @@ public class BlockModelPistonHead extends BlockModelStandard<BlockPistonHead> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         return renderPistonHead(tessellator, block, x, y, z, true);
     }
     public void renderPistonHeadNoCulling(Tessellator tessellator, BlockPistonHead block, int x, int y, int z, boolean flag) {
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java
index 2b676c8c0..7145f807d 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java
@@ -20,7 +20,7 @@ public class BlockModelRail<T extends BlockRail> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int l = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         IconCoordinate i1 = getBlockTextureFromSideAndMetadata(Side.BOTTOM, l);
         if(renderBlocks.overrideBlockTexture != null)
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelRedstoneWire.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelRedstoneWire.java
index 3f65d860f..93be5df8f 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelRedstoneWire.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelRedstoneWire.java
@@ -13,11 +13,12 @@ public class BlockModelRedstoneWire<T extends Block> extends BlockModelStandard<
     protected IconCoordinate wireCross = TextureRegistry.getTexture("minecraft:block/wire_redstone_cross");
     public BlockModelRedstoneWire(Block block) {
         super(block);
+        withTextures("minecraft:block/wire_redstone_cross");
     }
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         if(renderBlocks.overrideBlockTexture != null)
         {
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelRepeater.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelRepeater.java
index 0c046b458..76e0c5be0 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelRepeater.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelRepeater.java
@@ -16,7 +16,7 @@ public class BlockModelRepeater extends BlockModelStandard<BlockRedstoneRepeater
     }
 
     public boolean render(Tessellator tessellator, int x, int y, int z){
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int l = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         int i1 = l & 3;
         int j1 = (l & 0xc) >> 2;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelRope.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelRope.java
index a7d363cd2..fe78ba935 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelRope.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelRope.java
@@ -1,11 +1,9 @@
 package net.minecraft.client.render.block.model;
 
-import net.minecraft.client.render.stitcher.IconCoordinate;
-import net.minecraft.client.render.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessalator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockRope;
-import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockModelRope<T extends BlockRope>
 extends BlockModelStandard<T> {
@@ -15,54 +13,66 @@ extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        World world = renderBlocks.world;
+        WorldSource world = renderBlocks.blockAccess;
+        boolean hasFloor = world.isBlockOpaqueCube(x, y - 1, z);
         boolean hasBlockNegX = world.getBlockId(x - 1, y, z) == block.id;
         boolean hasBlockPosX = world.getBlockId(x + 1, y, z) == block.id;
-        boolean hasBlockNegY = world.getBlockId(x, y - 1, z) == block.id;
+        boolean hasBlockNegY = world.getBlockId(x, y - 1, z) == block.id || hasFloor;
         boolean hasBlockPosY = world.getBlockId(x, y + 1, z) == block.id || world.isBlockOpaqueCube(x, y + 1, z);
         boolean hasBlockNegZ = world.getBlockId(x, y, z - 1) == block.id;
         boolean hasBlockPosZ = world.getBlockId(x, y, z + 1) == block.id;
 
+
         boolean drawKnot =  !(hasBlockNegX && hasBlockPosX && !hasBlockNegY && !hasBlockPosY && !hasBlockNegZ && !hasBlockPosZ) &&
             !(!hasBlockNegX && !hasBlockPosX && hasBlockNegY && hasBlockPosY && !hasBlockNegZ && !hasBlockPosZ) &&
             !(!hasBlockNegX && !hasBlockPosX && !hasBlockNegY && !hasBlockPosY && hasBlockNegZ && hasBlockPosZ);
 
         block.setBlockBounds(0, 0, 0, 1, 1, 1);
 
+        final float ropeThickness = (1 / 16f);
+        final float knotThickness = (2 / 16f);
+        final float pileWidth = (3 / 16f);
+
         if (drawKnot)
         {
-            block.setBlockBounds(0.5f - (2 / 16f), 0.5f - (2 / 16f), 0.5f - (2 / 16f), 0.5f + (2 / 16f), 0.5f + (2 / 16f), 0.5f + (2 / 16f));
+            block.setBlockBounds(0.5f - knotThickness, 0.5f - knotThickness, 0.5f - knotThickness, 0.5f + knotThickness, 0.5f + knotThickness, 0.5f + knotThickness);
             renderStandardBlock(tessellator, block, x, y, z);
         }
 
         if (hasBlockPosY)
         {
-            block.setBlockBounds(0.5f - (1 / 16f), 0.5f, 0.5f - (1 / 16f), 0.5f + (1 / 16f), 1, 0.5f + (1 / 16f));
+            block.setBlockBounds(0.5f - ropeThickness, 0.5f, 0.5f - ropeThickness, 0.5f + ropeThickness, 1, 0.5f + ropeThickness);
             renderStandardBlock(tessellator, block, x, y, z);
         }
         if (hasBlockNegY)
         {
-            block.setBlockBounds(0.5f - (1 / 16f), 0, 0.5f - (1 / 16f), 0.5f + (1 / 16f), 0.5f, 0.5f + (1 / 16f));
+            block.setBlockBounds(0.5f - ropeThickness, 0, 0.5f - ropeThickness, 0.5f + ropeThickness, 0.5f, 0.5f + ropeThickness);
             renderStandardBlock(tessellator, block, x, y, z);
         }
         if (hasBlockPosX)
         {
-            block.setBlockBounds(0.5f, 0.5f - (1 / 16f), 0.5f - (1 / 16f), 1, 0.5f + (1 / 16f), 0.5f + (1 / 16f));
+            block.setBlockBounds(0.5f, 0.5f - ropeThickness, 0.5f - ropeThickness, 1, 0.5f + ropeThickness, 0.5f + ropeThickness);
             renderStandardBlock(tessellator, block, x, y, z);
         }
         if (hasBlockNegX)
         {
-            block.setBlockBounds(0, 0.5f - (1 / 16f), 0.5f - (1 / 16f), 0.5f, 0.5f + (1 / 16f), 0.5f + (1 / 16f));
+            block.setBlockBounds(0, 0.5f - ropeThickness, 0.5f - ropeThickness, 0.5f, 0.5f + ropeThickness, 0.5f + ropeThickness);
             renderStandardBlock(tessellator, block, x, y, z);
         }
         if (hasBlockPosZ)
         {
-            block.setBlockBounds(0.5f - (1 / 16f), 0.5f - (1 / 16f), 0.5f, 0.5f + (1 / 16f), 0.5f + (1 / 16f), 1);
+            block.setBlockBounds(0.5f - ropeThickness, 0.5f - ropeThickness, 0.5f, 0.5f + ropeThickness, 0.5f + ropeThickness, 1);
             renderStandardBlock(tessellator, block, x, y, z);
         }
         if (hasBlockNegZ)
         {
-            block.setBlockBounds(0.5f - (1 / 16f), 0.5f - (1 / 16f), 0f, 0.5f + (1 / 16f), 0.5f + (1 / 16f), 0.5f);
+            block.setBlockBounds(0.5f - ropeThickness, 0.5f - ropeThickness, 0f, 0.5f + ropeThickness, 0.5f + ropeThickness, 0.5f);
+            renderStandardBlock(tessellator, block, x, y, z);
+        }
+        if (hasFloor){
+            block.setBlockBounds(0.5f - pileWidth, 0,0.5f - pileWidth, 0.5f + pileWidth, knotThickness, 0.5f + pileWidth);
+            renderStandardBlock(tessellator, block, x, y, z);
+            block.setBlockBounds(0.5f - knotThickness, 0,0.5f - knotThickness, 0.5f + knotThickness, ropeThickness * 3, 0.5f + knotThickness);
             renderStandardBlock(tessellator, block, x, y, z);
         }
 
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelSeat.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelSeat.java
index c02c812f3..bf01b719c 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelSeat.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelSeat.java
@@ -11,7 +11,7 @@ public class BlockModelSeat<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
 
         setRenderSide(Side.BOTTOM, false); // Set bottom face to not render
         renderStandardBlock(tessellator, block, x, y, z); // Render seat
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelSpikes.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelSpikes.java
index 308854ff4..3d2ae764f 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelSpikes.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelSpikes.java
@@ -13,7 +13,7 @@ public class BlockModelSpikes<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int metaData = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         IconCoordinate texture = getBlockTextureFromSideAndMetadata(Side.EAST, metaData);
         if(renderBlocks.overrideBlockTexture != null)
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java
index 484b2c605..997b2ee50 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java
@@ -17,7 +17,7 @@ public class BlockModelStairs<T extends BlockStairs> extends BlockModelStandard<
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         int hRotation = meta & 0b0011;
         int vRotation = meta & 0b1000;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java
index 9a80df6e4..1d75ba6ac 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java
@@ -10,7 +10,9 @@ import net.minecraft.core.world.WorldSource;
 import org.lwjgl.opengl.GL11;
 
 public class BlockModelStandard<T extends Block> extends BlockModel<T>{
-    public IconCoordinate[] atlasIndices = new IconCoordinate[6];
+    public static final IconCoordinate BLOCK_TEXTURE_MISSING = TextureRegistry.getTexture("minecraft:block/texture_missing");
+    public static final IconCoordinate BLOCK_TEXTURE_UNASSIGNED = TextureRegistry.getTexture("minecraft:block/texture_unassigned");
+    public IconCoordinate[] atlasIndices = new IconCoordinate[]{BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED};
     public double[] itemRenderBounds = null;
     public IconCoordinate overbrightTexture = null;
 
@@ -20,7 +22,7 @@ public class BlockModelStandard<T extends Block> extends BlockModel<T>{
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         return renderStandardBlock(tessellator, block, x, y, z);
     }
 
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelTorch.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelTorch.java
index fdd82f758..de235fe84 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelTorch.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelTorch.java
@@ -12,7 +12,7 @@ public class BlockModelTorch<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int l = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         float f = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
         if(Block.lightEmission[block.id] > 0)
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java
index 5be959d5f..b484f9e34 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java
@@ -18,7 +18,7 @@ public class BlockModelTrapDoor<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.world, x, y, z);
+        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int metadata = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         boolean isUp = BlockTrapDoor.isTrapdoorOpen(metadata);
 
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCalendar.java b/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCalendar.java
index 7207c4478..27f8f0081 100644
--- a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCalendar.java
+++ b/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCalendar.java
@@ -17,9 +17,9 @@ public class DynamicTextureCalendar extends DynamicTextureAbstractClock {
 		double d = 0.0;
 		if (minecraft.theWorld != null && minecraft.thePlayer != null)
 		{
-			if (minecraft.theWorld.seasonManager instanceof SeasonManagerCycle)
+			if (minecraft.theWorld.getSeasonManager() instanceof SeasonManagerCycle)
 			{
-				SeasonManagerCycle cycleManager = (SeasonManagerCycle) minecraft.theWorld.seasonManager;
+				SeasonManagerCycle cycleManager = (SeasonManagerCycle) minecraft.theWorld.getSeasonManager();
 				float f = cycleManager.getYearProgress() - 0.25f;
 				d = f * Math.PI * 2;
 			}
diff --git a/src/main/java/net/minecraft/client/render/entity/PlayerRenderer.java b/src/main/java/net/minecraft/client/render/entity/PlayerRenderer.java
index 14e31b55e..7d9717daf 100644
--- a/src/main/java/net/minecraft/client/render/entity/PlayerRenderer.java
+++ b/src/main/java/net/minecraft/client/render/entity/PlayerRenderer.java
@@ -163,8 +163,7 @@ public class PlayerRenderer extends LivingRenderer<EntityPlayer>
             }
         }
     }
-
-    protected void renderSpecials(EntityPlayer entity, float f)
+    protected void renderSpecials(EntityPlayer entity, float partialTick)
     {
         if (Minecraft.getMinecraft(this).thePlayer.getGamemode() == Gamemode.spectator && entity.getGamemode() == Gamemode.spectator){
             GL11.glColor4f(1f, 1f, 1f, 0.25f);
@@ -196,36 +195,25 @@ public class PlayerRenderer extends LivingRenderer<EntityPlayer>
     	if(renderCape) {
             GL11.glPushMatrix();
             GL11.glTranslatef(0.0F, 0.0F, 0.125F);
-            double d = (entity.field_20066_r + (entity.field_20063_u - entity.field_20066_r) * (double)f) - (entity.xo + (entity.x - entity.xo) * (double)f);
-            double d1 = (entity.field_20065_s + (entity.field_20062_v - entity.field_20065_s) * (double)f) - (entity.yo + (entity.y - entity.yo) * (double)f);
-            double d2 = (entity.field_20064_t + (entity.field_20061_w - entity.field_20064_t) * (double)f) - (entity.zo + (entity.z - entity.zo) * (double)f);
-            float f8 = entity.prevRenderYawOffset + (entity.renderYawOffset - entity.prevRenderYawOffset) * f;
-            double d3 = MathHelper.sin((f8 * 3.141593F) / 180F);
-            double d4 = -MathHelper.cos((f8 * 3.141593F) / 180F);
-            float f9 = (float)d1 * 10F;
-            if(f9 < -6F)
-            {
-                f9 = -6F;
-            }
-            if(f9 > 32F)
-            {
-                f9 = 32F;
-            }
-            float f10 = (float)(d * d3 + d2 * d4) * 100F;
-            float f11 = (float)(d * d4 - d2 * d3) * 100F;
-            if(f10 < 0.0F)
-            {
-                f10 = 0.0F;
-            }
-            float f12 = entity.field_775_e + (entity.field_774_f - entity.field_775_e) * f;
-            f9 += MathHelper.sin((entity.walkDistO + (entity.walkDist - entity.walkDistO) * f) * 6F) * 32F * f12;
+            float yawOff = entity.prevRenderYawOffset + (entity.renderYawOffset - entity.prevRenderYawOffset) * partialTick;
+            float bodyAngle = 5;
             if(entity.isSneaking())
             {
-                f9 += 25F;
+                bodyAngle += 25F;
             }
-            GL11.glRotatef(6F + f10 / 2.0F + f9, 1.0F, 0.0F, 0.0F);
-            GL11.glRotatef(f11 / 2.0F, 0.0F, 0.0F, 1.0F);
-            GL11.glRotatef(-f11 / 2.0F, 0.0F, 1.0F, 0.0F);
+            double _xd = entity.xdO + (entity.xd - entity.xdO) * partialTick;
+            double _yd = Math.min(entity.ydO + (entity.yd - entity.ydO) * partialTick, 0);
+            double _zd = entity.zd0 + (entity.zd - entity.zd0) * partialTick;
+            double vel = -1/(3 * Math.hypot(_xd, _zd) + 1) + 1;
+            double moveAng = Math.atan2(_xd, _zd);
+            double yawRad = Math.toRadians(yawOff);
+            double multiplier = 1 - Math.abs((((Math.cos(yawRad) + 1) - (Math.cos(moveAng) + 1) + 2)/2) -1); // Hell code, basically measures how similar the angle you're facing is to the angle you're moving, with it returning 1 if the same angle and 0 if opposite angles
+            entity.wobbleTimer += (float) (((entity.tickCount + partialTick) - entity.lastRenderTick)/(30 - 29 * MathHelper.clamp(vel, 0, 1)));
+            entity.lastRenderTick = entity.tickCount;
+            double wobble = Math.sin(entity.wobbleTimer) * (1.5 + 4.5 * vel * multiplier);
+            GL11.glRotatef((float) MathHelper.clamp((MathHelper.clamp(bodyAngle + vel * 100 * multiplier, bodyAngle, 100f) + wobble) - _yd * 60, 0, 180), 1.0F, 0.0F, 0.0F);
+            GL11.glRotatef(0, 0.0F, 0.0F, 1.0F);
+            GL11.glRotatef(0, 0.0F, 1.0F, 0.0F);
             GL11.glRotatef(180F, 0.0F, 1.0F, 0.0F);
             modelBipedMain.renderCloak(0.0625F);
             GL11.glPopMatrix();
@@ -313,9 +301,9 @@ public class PlayerRenderer extends LivingRenderer<EntityPlayer>
     }
 
     @Override
-    protected void renderEquippedItems(EntityPlayer entity, float f)
+    protected void renderEquippedItems(EntityPlayer entity, float partialTick)
     {
-        renderSpecials(entity, f);
+        renderSpecials(entity, partialTick);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelDoorPainted.java b/src/main/java/net/minecraft/client/render/item/model/ItemModelDoorPainted.java
index 7e0675f5a..0152599b4 100644
--- a/src/main/java/net/minecraft/client/render/item/model/ItemModelDoorPainted.java
+++ b/src/main/java/net/minecraft/client/render/item/model/ItemModelDoorPainted.java
@@ -7,6 +7,7 @@ import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemDye;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.helper.MathHelper;
+import org.jetbrains.annotations.NotNull;
 
 public class ItemModelDoorPainted extends ItemModelStandard{
     public static IconCoordinate[] doorIcons = new IconCoordinate[16];
@@ -18,7 +19,7 @@ public class ItemModelDoorPainted extends ItemModelStandard{
     public ItemModelDoorPainted(Item item) {
         super(item, null);
     }
-    public IconCoordinate getIcon(Entity entity, ItemStack itemStack){
+    public @NotNull IconCoordinate getIcon(Entity entity, ItemStack itemStack){
         int meta = itemStack.getMetadata();
         return doorIcons[MathHelper.clamp(meta, 0, 15)];
     }
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelStandard.java b/src/main/java/net/minecraft/client/render/item/model/ItemModelStandard.java
index 0cb51fe93..c93496e82 100644
--- a/src/main/java/net/minecraft/client/render/item/model/ItemModelStandard.java
+++ b/src/main/java/net/minecraft/client/render/item/model/ItemModelStandard.java
@@ -37,8 +37,10 @@ import static org.lwjgl.opengl.GL11.glScaled;
 import static org.lwjgl.opengl.GL11.glTranslated;
 
 public class ItemModelStandard extends ItemModel{
+    public static final IconCoordinate ITEM_TEXTURE_MISSING = TextureRegistry.getTexture("minecraft:item/texture_missing");
+    public static final IconCoordinate ITEM_TEXTURE_UNASSIGNED = TextureRegistry.getTexture("minecraft:item/texture_unassigned");
     protected boolean useColor = true;
-    public IconCoordinate icon;
+    public IconCoordinate icon = ITEM_TEXTURE_UNASSIGNED;
     protected boolean bFull3D = false;
     protected boolean rotateWhenRendering = false;
     protected boolean pointInfrontOfPlayer = false;
@@ -115,21 +117,19 @@ public class ItemModelStandard extends ItemModel{
         glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
         glEnable(GL_CULL_FACE);
         IconCoordinate textureIndex = getIcon(mc.thePlayer, itemStack);
-        if (textureIndex != null) {
-            GL11.glDisable(GL_LIGHTING);
-            textureIndex.parentAtlas.bindTexture();
-            if (useColor) {
-                final int color = getColor(itemStack);
-                final float r = (color >> 16 & 0xff) / 255F;
-                final float g = (color >> 8 & 0xff) / 255F;
-                final float b = (color & 0xff) / 255F;
-                GL11.glColor4f(r * brightness, g * brightness, b * brightness, alpha);
-            } else {
-                GL11.glColor4f(brightness, brightness, brightness, alpha);
-            }
-            renderTexturedQuad(tessellator, x, y, textureIndex);
-            glEnable(GL_LIGHTING);
+        GL11.glDisable(GL_LIGHTING);
+        textureIndex.parentAtlas.bindTexture();
+        if (useColor) {
+            final int color = getColor(itemStack);
+            final float r = (color >> 16 & 0xff) / 255F;
+            final float g = (color >> 8 & 0xff) / 255F;
+            final float b = (color & 0xff) / 255F;
+            GL11.glColor4f(r * brightness, g * brightness, b * brightness, alpha);
+        } else {
+            GL11.glColor4f(brightness, brightness, brightness, alpha);
         }
+        renderTexturedQuad(tessellator, x, y, textureIndex);
+        glEnable(GL_LIGHTING);
         glEnable(GL_CULL_FACE);
         glDisable(GL11.GL_BLEND);
     }
diff --git a/src/main/java/net/minecraft/client/render/stitcher/AtlasStitcher.java b/src/main/java/net/minecraft/client/render/stitcher/AtlasStitcher.java
index b4e92176a..28abaeede 100644
--- a/src/main/java/net/minecraft/client/render/stitcher/AtlasStitcher.java
+++ b/src/main/java/net/minecraft/client/render/stitcher/AtlasStitcher.java
@@ -3,6 +3,7 @@ package net.minecraft.client.render.stitcher;
 import net.minecraft.client.GLAllocation;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.util.helper.Textures;
+import org.jetbrains.annotations.Nullable;
 
 import java.awt.*;
 import java.awt.image.BufferedImage;
@@ -18,16 +19,19 @@ public class AtlasStitcher {
     public Map<String, IconCoordinate> textureMap = new HashMap<>();
     public BufferedImage atlas;
     public final String directoryPath;
+    @Nullable
+    public final String defaultTexture;
     private int atlasWidth;
     private int atlasHeight;
     private double invWidth;
     private double invHeight;
     private final int textureId;
     private final boolean mipmap;
-    public AtlasStitcher(String directoryPath, boolean mipmap){
+    public AtlasStitcher(String directoryPath, boolean mipmap, @Nullable String defaultTexture){
         this.directoryPath = directoryPath;
         this.textureId = GLAllocation.generateTexture();
         this.mipmap = mipmap;
+        this.defaultTexture = defaultTexture;
     }
     protected IconCoordinate getTexture(String key){
         if (textureMap.containsKey(key)) return textureMap.get(key);
@@ -49,9 +53,12 @@ public class AtlasStitcher {
         List<IconCoordinate> coordinateList = new ArrayList<>(textureMap.values());
         for (IconCoordinate coordinate : coordinateList){
             BufferedImage image = Textures.readImage(mc.texturePackList.getResourceAsStream(coordinate.sourceImage));
-            if (image == null) image = Textures.missingTexture;
-            if (image == Textures.missingTexture){
+            if (image == null || image == Textures.missingTexture){
                 System.out.println(coordinate.sourceImage + " could not be found!");
+                if (defaultTexture != null){
+                    image = Textures.readImage(mc.texturePackList.getResourceAsStream(defaultTexture));
+                }
+                if (image == null) image = Textures.missingTexture; // If this ever happens I'll be very sad
             }
             coordinate.setImage(image);
             coordinate.setDimension(image.getWidth(), image.getHeight());
diff --git a/src/main/java/net/minecraft/client/render/stitcher/TextureRegistry.java b/src/main/java/net/minecraft/client/render/stitcher/TextureRegistry.java
index 3979a5400..100726206 100644
--- a/src/main/java/net/minecraft/client/render/stitcher/TextureRegistry.java
+++ b/src/main/java/net/minecraft/client/render/stitcher/TextureRegistry.java
@@ -17,10 +17,10 @@ import java.util.stream.Stream;
 
 public class TextureRegistry {
     public static HashMap<String, AtlasStitcher> stitcherMap = new HashMap<>();
-    public static AtlasStitcher blockAtlas = register("block", new AtlasStitcher("textures/block", true));
-    public static AtlasStitcher itemAtlas =  register("item", new AtlasStitcher("textures/item", true));
-    public static AtlasStitcher particleAtlas = register("particle", new AtlasStitcher("textures/particle", false));
-    public static AtlasStitcher artAtlas = register("art", new AtlasStitcher("textures/art", false));
+    public static AtlasStitcher blockAtlas = register("block", new AtlasStitcher("textures/block", true, "/assets/minecraft/textures/block/texture_missing.png"));
+    public static AtlasStitcher itemAtlas =  register("item", new AtlasStitcher("textures/item", true, "/assets/minecraft/textures/item/texture_missing.png"));
+    public static AtlasStitcher particleAtlas = register("particle", new AtlasStitcher("textures/particle", false, null));
+    public static AtlasStitcher artAtlas = register("art", new AtlasStitcher("textures/art", false, null));
 
     public static IconCoordinate getTexture(String key){
         if (key == null) return null;
diff --git a/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererFlowerJar.java b/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererFlowerJar.java
index 7cbf94aef..aa159027a 100644
--- a/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererFlowerJar.java
+++ b/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererFlowerJar.java
@@ -16,7 +16,7 @@ public class TileEntityRendererFlowerJar extends TileEntityRenderer<TileEntityFl
     @Override
     public void onWorldChanged(World world)
     {
-        renderBlocks = new RenderBlocks(world, world);
+        renderBlocks = new RenderBlocks(world);
     }
     @Override
     public void doRender(Tessellator tessellator, TileEntityFlowerJar tileEntity, double x, double y, double z, float renderPartialTicks) {
diff --git a/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererPiston.java b/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererPiston.java
index ac66cc9a4..a1c191c8e 100644
--- a/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererPiston.java
+++ b/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererPiston.java
@@ -35,7 +35,7 @@ public class TileEntityRendererPiston extends TileEntityRenderer<TileEntityPisto
     @Override
 	public void onWorldChanged(World world)
     {
-        renderBlocks = new RenderBlocks(world, world);
+        renderBlocks = new RenderBlocks(world);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/Block.java b/src/main/java/net/minecraft/core/block/Block.java
index 6d59b85e5..094edce19 100644
--- a/src/main/java/net/minecraft/core/block/Block.java
+++ b/src/main/java/net/minecraft/core/block/Block.java
@@ -2,7 +2,6 @@ package net.minecraft.core.block;
 
 
 import com.b100.utils.Utils;
-import net.minecraft.core.Global;
 import net.minecraft.core.HitResult;
 import net.minecraft.core.achievement.stat.StatList;
 import net.minecraft.core.block.entity.TileEntity;
@@ -37,7 +36,6 @@ import net.minecraft.core.item.block.ItemBlockPiston;
 import net.minecraft.core.item.block.ItemBlockSlab;
 import net.minecraft.core.item.block.ItemBlockSlabPainted;
 import net.minecraft.core.item.block.ItemBlockStairsPainted;
-import net.minecraft.core.item.tool.ItemTool;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.util.phys.BoundingVolume;
@@ -264,7 +262,7 @@ public class Block
         return atlasIndices[side.getId()];
     }
 
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return AABB.getBoundingBoxFromPool((double)x + minX, (double)y + minY, (double)z + minZ, (double)x + maxX, (double)y + maxY, (double)z + maxZ);
     }
@@ -288,7 +286,7 @@ public class Block
         return true;
     }
 
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return AABB.getBoundingBoxFromPool((double)x + minX, (double)y + minY, (double)z + minZ, (double)x + maxX, (double)y + maxY, (double)z + maxZ);
     }
@@ -493,11 +491,10 @@ public class Block
     {
     }
 
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
     }
-
-    public void setBlockBoundsBasedOnSide(World world, int x, int y, int z, Side side)
+    public void setBlockBoundsBasedOnSide(WorldSource world, int x, int y, int z, Side side)
     {
     }
 
@@ -1047,6 +1044,12 @@ public class Block
             .withTags(BlockTags.BROKEN_BY_FLUIDS, BlockTags.PLANTABLE_IN_JAR);
     public static final Block flowerRed = new BlockFlower("flower.red", 331).setKilledByWeather().withHardness(0.0F)
             .withTags(BlockTags.BROKEN_BY_FLUIDS, BlockTags.PLANTABLE_IN_JAR);
+    public static final Block flowerPink = new BlockFlower("flower.pink", 332).setKilledByWeather().withHardness(0.0F)
+            .withTags(BlockTags.BROKEN_BY_FLUIDS, BlockTags.PLANTABLE_IN_JAR);
+    public static final Block flowerPurple = new BlockFlower("flower.purple", 333).setKilledByWeather().withHardness(0.0F)
+            .withTags(BlockTags.BROKEN_BY_FLUIDS, BlockTags.PLANTABLE_IN_JAR);
+    public static final Block flowerLightBlue = new BlockFlower("flower.lightblue", 334).setKilledByWeather().withHardness(0.0F)
+            .withTags(BlockTags.BROKEN_BY_FLUIDS, BlockTags.PLANTABLE_IN_JAR);
 
     public static final Block mushroomBrown = new BlockMushroom("mushroom.brown", 340).withHardness(0.0F).withLightEmission(0.125F)
             .withTags(BlockTags.BROKEN_BY_FLUIDS, BlockTags.PLANTABLE_IN_JAR);
diff --git a/src/main/java/net/minecraft/core/block/BlockAlgae.java b/src/main/java/net/minecraft/core/block/BlockAlgae.java
index a09563cba..0cddb5cf9 100644
--- a/src/main/java/net/minecraft/core/block/BlockAlgae.java
+++ b/src/main/java/net/minecraft/core/block/BlockAlgae.java
@@ -40,19 +40,19 @@ public class BlockAlgae extends Block
     public boolean canPlaceBlockAt(World world, int x, int y, int z)
     {
         int blockId = world.getBlockId(x, y, z);
-        return blockId == 0 && Block.hasTag(world.getBlockId(x, y - 1, z), BlockTags.IS_WATER);
+        return blockId == 0 && Block.hasTag(world.getBlockId(x, y - 1, z), BlockTags.IS_WATER) && world.getBlockMetadata(x, y -1, z) == 0;
     }
 
     @Override
     public void onNeighborBlockChange(World world, int x, int y, int z, int blockId)
     {
-        if(world.getBlockId(x, y -1, z)!= Block.fluidWaterStill.id){
+        if(!Block.hasTag(world.getBlockId(x, y - 1, z), BlockTags.IS_WATER) || world.getBlockMetadata(x, y -1, z) != 0){
             world.setBlock(x, y, z,0);
         }
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockBasket.java b/src/main/java/net/minecraft/core/block/BlockBasket.java
index 8d5ea72cf..92a4b67f7 100644
--- a/src/main/java/net/minecraft/core/block/BlockBasket.java
+++ b/src/main/java/net/minecraft/core/block/BlockBasket.java
@@ -42,7 +42,7 @@ public class BlockBasket extends BlockTileEntity
         return new TileEntityBasket();
     }
 
-    public int getFillLevel(final World world, final int x, final int y, final int z)
+    public int getFillLevel(final WorldSource world, final int x, final int y, final int z)
     {
         final TileEntityBasket te = (TileEntityBasket) world.getBlockTileEntity(x, y, z);
 
diff --git a/src/main/java/net/minecraft/core/block/BlockBed.java b/src/main/java/net/minecraft/core/block/BlockBed.java
index 009303fe8..96c218a3a 100644
--- a/src/main/java/net/minecraft/core/block/BlockBed.java
+++ b/src/main/java/net/minecraft/core/block/BlockBed.java
@@ -7,9 +7,8 @@ import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.enums.EnumSleepStatus;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
-import net.minecraft.core.block.logic.BedDirections;
-import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 import net.minecraft.core.world.chunk.ChunkCoordinates;
 
 public class BlockBed extends Block {
@@ -70,7 +69,7 @@ public class BlockBed extends Block {
 			if(player1 == null) {
 				setBedOccupied(world, x, y, z, false);
 			} else {
-				player.addChatMessage("bed.occupied");
+				player.sendTranslatedChatMessage("bed.occupied");
 				return true;
 			}
 		}
@@ -95,7 +94,7 @@ public class BlockBed extends Block {
 	}
 
 	@Override
-	public void setBlockBoundsBasedOnState(World world, int x, int y, int z) {
+	public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z) {
 		setBounds();
 	}
 
diff --git a/src/main/java/net/minecraft/core/block/BlockButton.java b/src/main/java/net/minecraft/core/block/BlockButton.java
index 4cddadbe6..7f06a83a9 100644
--- a/src/main/java/net/minecraft/core/block/BlockButton.java
+++ b/src/main/java/net/minecraft/core/block/BlockButton.java
@@ -26,7 +26,7 @@ public class BlockButton extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
@@ -176,7 +176,7 @@ public class BlockButton extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z);
         int i1 = l & 7;
diff --git a/src/main/java/net/minecraft/core/block/BlockCactus.java b/src/main/java/net/minecraft/core/block/BlockCactus.java
index 37a366e5a..76535c0ae 100644
--- a/src/main/java/net/minecraft/core/block/BlockCactus.java
+++ b/src/main/java/net/minecraft/core/block/BlockCactus.java
@@ -10,7 +10,6 @@ import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.item.IBonemealable;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.helper.Side;
-import net.minecraft.core.world.IVehicle;
 import net.minecraft.core.world.World;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.util.phys.AABB;
@@ -71,14 +70,14 @@ public class BlockCactus extends Block implements IBonemealable
 
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         float f = 0.0625F;
         return AABB.getBoundingBoxFromPool((float) x + f, y, (float) z + f, (float)(x + 1) - f, (float)(y + 1) - f, (float)(z + 1) - f);
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         float f = 0.0625F;
         return AABB.getBoundingBoxFromPool((float) x + f, y, (float) z + f, (float)(x + 1) - f, y + 1, (float)(z + 1) - f);
diff --git a/src/main/java/net/minecraft/core/block/BlockCake.java b/src/main/java/net/minecraft/core/block/BlockCake.java
index a1eb3db8a..70938f019 100644
--- a/src/main/java/net/minecraft/core/block/BlockCake.java
+++ b/src/main/java/net/minecraft/core/block/BlockCake.java
@@ -8,6 +8,7 @@ import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 // Referenced classes of package net.minecraft.src:
 //            Block, Material, IBlockAccess, World, 
@@ -34,7 +35,7 @@ public class BlockCake extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z);
         float f = 0.0625F;
@@ -44,7 +45,7 @@ public class BlockCake extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z);
         float f = 0.0625F;
@@ -54,7 +55,7 @@ public class BlockCake extends Block
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z);
         float f = 0.0625F;
diff --git a/src/main/java/net/minecraft/core/block/BlockCandle.java b/src/main/java/net/minecraft/core/block/BlockCandle.java
index bc5923791..9000dc5b2 100644
--- a/src/main/java/net/minecraft/core/block/BlockCandle.java
+++ b/src/main/java/net/minecraft/core/block/BlockCandle.java
@@ -6,6 +6,7 @@ import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 import java.util.Random;
 
@@ -21,7 +22,7 @@ public class BlockCandle extends Block
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockCobweb.java b/src/main/java/net/minecraft/core/block/BlockCobweb.java
index df28eb48b..745993810 100644
--- a/src/main/java/net/minecraft/core/block/BlockCobweb.java
+++ b/src/main/java/net/minecraft/core/block/BlockCobweb.java
@@ -8,6 +8,7 @@ import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.world.World;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.util.phys.AABB;
+import net.minecraft.core.world.WorldSource;
 
 // Referenced classes of package net.minecraft.src:
 //            Block, Material, Entity, Item, 
@@ -51,7 +52,7 @@ public class BlockCobweb extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockCropsPumpkin.java b/src/main/java/net/minecraft/core/block/BlockCropsPumpkin.java
index 429f5ea8f..e2b126ae8 100644
--- a/src/main/java/net/minecraft/core/block/BlockCropsPumpkin.java
+++ b/src/main/java/net/minecraft/core/block/BlockCropsPumpkin.java
@@ -9,6 +9,7 @@ import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 import java.util.Random;
 
@@ -19,7 +20,7 @@ public class BlockCropsPumpkin
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z) {
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z) {
         int meta = world.getBlockMetadata(x, y, z);
         float onePix = 1.0F / 16.0F;
         float size = 0.0f;
@@ -100,8 +101,8 @@ public class BlockCropsPumpkin
         if(diagNeighbor || xNeighbor && zNeighbor) {
             growthRate /= 2.0F;
         }
-        if (world.seasonManager.getCurrentSeason() != null) {
-            growthRate *= world.seasonManager.getCurrentSeason().cropGrowthFactor;
+        if (world.getSeasonManager().getCurrentSeason() != null) {
+            growthRate *= world.getSeasonManager().getCurrentSeason().cropGrowthFactor;
         }
         return growthRate;
     }
@@ -111,7 +112,7 @@ public class BlockCropsPumpkin
         return new ItemStack[] { new ItemStack(Item.seedsPumpkin, 1)};
     }
 
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z) {
         setBlockBoundsBasedOnState(world, x, y, z);
         int meta = world.getBlockMetadata(x, y, z);
         if (meta == 0) {
diff --git a/src/main/java/net/minecraft/core/block/BlockCropsWheat.java b/src/main/java/net/minecraft/core/block/BlockCropsWheat.java
index 696cb9d0d..7d82dfdcf 100644
--- a/src/main/java/net/minecraft/core/block/BlockCropsWheat.java
+++ b/src/main/java/net/minecraft/core/block/BlockCropsWheat.java
@@ -96,9 +96,9 @@ public class BlockCropsWheat extends BlockFlower implements IBonemealable
         {
             growthRate /= 2.0F;
         }
-        if (world.seasonManager.getCurrentSeason() != null)
+        if (world.getSeasonManager().getCurrentSeason() != null)
         {
-            growthRate *= world.seasonManager.getCurrentSeason().cropGrowthFactor;
+            growthRate *= world.getSeasonManager().getCurrentSeason().cropGrowthFactor;
         }
         return growthRate;
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockDirtPath.java b/src/main/java/net/minecraft/core/block/BlockDirtPath.java
index 0db1de332..0ac7d9545 100644
--- a/src/main/java/net/minecraft/core/block/BlockDirtPath.java
+++ b/src/main/java/net/minecraft/core/block/BlockDirtPath.java
@@ -6,6 +6,7 @@ import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 //updated
 // Referenced classes of package net.minecraft.src:
 //            Block, Material, AxisAlignedBB, World,
@@ -22,7 +23,7 @@ public class BlockDirtPath extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return AABB.getBoundingBoxFromPool(x + 0, y + 0, z + 0, x + 1, y + 1, z + 1);
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockDoor.java b/src/main/java/net/minecraft/core/block/BlockDoor.java
index 918af89f1..237b81e50 100644
--- a/src/main/java/net/minecraft/core/block/BlockDoor.java
+++ b/src/main/java/net/minecraft/core/block/BlockDoor.java
@@ -9,10 +9,10 @@ import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
-import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.util.phys.Vec3d;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 // Referenced classes of package net.minecraft.src:
 //            Block, Material, IBlockAccess, World, 
@@ -52,21 +52,21 @@ public class BlockDoor extends Block
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         setDoorRotation(getState(world.getBlockMetadata(x, y, z)), true);
         return super.getSelectedBoundingBoxFromPool(world, x, y, z);
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         setBlockBoundsBasedOnState(world, x, y, z);
         return super.getCollisionBoundingBoxFromPool(world, x, y, z);
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         setDoorRotation(getState(world.getBlockMetadata(x, y, z)), false);
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockFarmland.java b/src/main/java/net/minecraft/core/block/BlockFarmland.java
index 54e949042..a65545e48 100644
--- a/src/main/java/net/minecraft/core/block/BlockFarmland.java
+++ b/src/main/java/net/minecraft/core/block/BlockFarmland.java
@@ -10,6 +10,7 @@ import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 import java.util.Random;
 
@@ -24,7 +25,7 @@ public class BlockFarmland extends Block
 	}
 
 	@Override
-	public AABB getCollisionBoundingBoxFromPool(final World world, final int x, final int y, final int z)
+	public AABB getCollisionBoundingBoxFromPool(final WorldSource world, final int x, final int y, final int z)
 	{
 		return AABB.getBoundingBoxFromPool(x + 0, y + 0, z + 0, x + 1, y + 1, z + 1);
 	}
diff --git a/src/main/java/net/minecraft/core/block/BlockFence.java b/src/main/java/net/minecraft/core/block/BlockFence.java
index a89985458..f8290710b 100644
--- a/src/main/java/net/minecraft/core/block/BlockFence.java
+++ b/src/main/java/net/minecraft/core/block/BlockFence.java
@@ -8,7 +8,6 @@ import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.world.WorldSource;
-import net.minecraft.core.world.World;
 
 
 public class BlockFence extends Block
@@ -69,7 +68,7 @@ public class BlockFence extends Block
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
     	boolean connectXPos = canConnectTo(world, x + 1, y, z);
     	boolean connectXNeg = canConnectTo(world, x - 1, y, z);
@@ -79,7 +78,7 @@ public class BlockFence extends Block
     }
     
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
     	return getCollisionBoundingBoxFromPool(world, x, y, z).expand(0, -0.25f, 0).offset(0, -0.25f, 0);
     }
@@ -103,7 +102,7 @@ public class BlockFence extends Block
 //    }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
     	AABB aabb = getCollisionBoundingBoxFromPool(world, x, y, z);
     	minX = aabb.minX - x;
diff --git a/src/main/java/net/minecraft/core/block/BlockFenceChainlink.java b/src/main/java/net/minecraft/core/block/BlockFenceChainlink.java
index 9bfaf6d45..d07523b27 100644
--- a/src/main/java/net/minecraft/core/block/BlockFenceChainlink.java
+++ b/src/main/java/net/minecraft/core/block/BlockFenceChainlink.java
@@ -27,7 +27,7 @@ public class BlockFenceChainlink extends BlockFenceThin
     }
 
     @Override
-    public boolean shouldDrawColumn(World world, int x, int y, int z)
+    public boolean shouldDrawColumn(WorldSource world, int x, int y, int z)
     {
         boolean drawColumn = shouldDrawColumn_do(world, x, y, z);
         if (drawColumn) return true;
@@ -53,7 +53,7 @@ public class BlockFenceChainlink extends BlockFenceThin
         return drawColumnFromOther;
     }
 
-    private boolean shouldDrawColumn_do(World world, int x, int y, int z)
+    private boolean shouldDrawColumn_do(WorldSource world, int x, int y, int z)
     {
         boolean connectNorth = canConnectTo(world, x + Direction.NORTH.getOffsetX(), y + Direction.NORTH.getOffsetY(), z + Direction.NORTH.getOffsetZ());
         boolean connectSouth = canConnectTo(world, x + Direction.SOUTH.getOffsetX(), y + Direction.SOUTH.getOffsetY(), z + Direction.SOUTH.getOffsetZ());
diff --git a/src/main/java/net/minecraft/core/block/BlockFenceGate.java b/src/main/java/net/minecraft/core/block/BlockFenceGate.java
index b3b301528..2617bb3f7 100644
--- a/src/main/java/net/minecraft/core/block/BlockFenceGate.java
+++ b/src/main/java/net/minecraft/core/block/BlockFenceGate.java
@@ -8,6 +8,7 @@ import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 // updated
 // Referenced classes of package net.minecraft.src:
@@ -23,7 +24,7 @@ public class BlockFenceGate extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z);
         if(func_35291_d(l))
@@ -49,13 +50,13 @@ public class BlockFenceGate extends Block
     }
     
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
     	return getAABBFromMeta(world.getBlockMetadata(x, y, z)).offset(x, y, z);
     }
     
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
     	AABB aabb = getAABBFromMeta(world.getBlockMetadata(x, y, z));
     	minX = aabb.minX;
diff --git a/src/main/java/net/minecraft/core/block/BlockFencePaperWall.java b/src/main/java/net/minecraft/core/block/BlockFencePaperWall.java
index 32bcf4d9b..cbed1d345 100644
--- a/src/main/java/net/minecraft/core/block/BlockFencePaperWall.java
+++ b/src/main/java/net/minecraft/core/block/BlockFencePaperWall.java
@@ -3,7 +3,6 @@ package net.minecraft.core.block;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.util.helper.Direction;
-import net.minecraft.core.world.World;
 import net.minecraft.core.world.WorldSource;
 
 public class BlockFencePaperWall extends BlockFenceThin
@@ -21,7 +20,7 @@ public class BlockFencePaperWall extends BlockFenceThin
     }
 
     @Override
-    public boolean shouldDrawColumn(World world, int x, int y, int z)
+    public boolean shouldDrawColumn(WorldSource world, int x, int y, int z)
     {
         boolean drawColumn = shouldDrawColumn_do(world, x, y, z);
         if (drawColumn) return true;
@@ -47,7 +46,7 @@ public class BlockFencePaperWall extends BlockFenceThin
         return drawColumnFromOther;
     }
 
-    private boolean shouldDrawColumn_do(World world, int x, int y, int z)
+    private boolean shouldDrawColumn_do(WorldSource world, int x, int y, int z)
     {
         boolean connectNorth = canConnectTo(world, x + Direction.NORTH.getOffsetX(), y + Direction.NORTH.getOffsetY(), z + Direction.NORTH.getOffsetZ());
         boolean connectSouth = canConnectTo(world, x + Direction.SOUTH.getOffsetX(), y + Direction.SOUTH.getOffsetY(), z + Direction.SOUTH.getOffsetZ());
diff --git a/src/main/java/net/minecraft/core/block/BlockFenceThin.java b/src/main/java/net/minecraft/core/block/BlockFenceThin.java
index ff00d2460..ae287f6b4 100644
--- a/src/main/java/net/minecraft/core/block/BlockFenceThin.java
+++ b/src/main/java/net/minecraft/core/block/BlockFenceThin.java
@@ -2,7 +2,6 @@ package net.minecraft.core.block;
 
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.util.phys.AABB;
-import net.minecraft.core.world.World;
 import net.minecraft.core.world.WorldSource;
 
 public abstract class BlockFenceThin extends Block
@@ -19,7 +18,7 @@ public abstract class BlockFenceThin extends Block
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         boolean connectXPos = canConnectTo(world, x + 1, y, z);
         boolean connectXNeg = canConnectTo(world, x - 1, y, z);
@@ -29,13 +28,13 @@ public abstract class BlockFenceThin extends Block
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return getCollisionBoundingBoxFromPool(world, x, y, z);
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         AABB aabb = getCollisionBoundingBoxFromPool(world, x, y, z);
         minX = aabb.minX - x;
@@ -60,5 +59,5 @@ public abstract class BlockFenceThin extends Block
 
     public abstract boolean canConnectTo(WorldSource iblockaccess, int x, int y, int z);
 
-    public abstract boolean shouldDrawColumn(World world, int x, int y, int z);
+    public abstract boolean shouldDrawColumn(WorldSource iblockaccess, int x, int y, int z);
 }
diff --git a/src/main/java/net/minecraft/core/block/BlockFire.java b/src/main/java/net/minecraft/core/block/BlockFire.java
index 6a6fc15a6..ce2714704 100644
--- a/src/main/java/net/minecraft/core/block/BlockFire.java
+++ b/src/main/java/net/minecraft/core/block/BlockFire.java
@@ -68,7 +68,7 @@ public class BlockFire extends Block {
 	}
 
 	@Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z) {
 		return null;
 	}
 
diff --git a/src/main/java/net/minecraft/core/block/BlockFlag.java b/src/main/java/net/minecraft/core/block/BlockFlag.java
index 095208073..bc752bd81 100644
--- a/src/main/java/net/minecraft/core/block/BlockFlag.java
+++ b/src/main/java/net/minecraft/core/block/BlockFlag.java
@@ -10,6 +10,7 @@ import net.minecraft.core.item.ItemStack;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockFlag extends BlockTileEntity{
 
@@ -21,7 +22,7 @@ public class BlockFlag extends BlockTileEntity{
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z) {
         return null;
     }
 
diff --git a/src/main/java/net/minecraft/core/block/BlockFlower.java b/src/main/java/net/minecraft/core/block/BlockFlower.java
index 7a61708ff..d371b0fbf 100644
--- a/src/main/java/net/minecraft/core/block/BlockFlower.java
+++ b/src/main/java/net/minecraft/core/block/BlockFlower.java
@@ -5,6 +5,7 @@ import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 import java.util.Random;
 
@@ -55,7 +56,7 @@ public class BlockFlower extends Block
     {
         func_268_h(world, x, y, z);
         
-        if (world.seasonManager.getCurrentSeason() != null && world.seasonManager.getCurrentSeason().killFlowers && killedByWeather && rand.nextInt(256) == 0)
+        if (world.getSeasonManager().getCurrentSeason() != null && world.getSeasonManager().getCurrentSeason().killFlowers && killedByWeather && rand.nextInt(256) == 0)
         {
         	world.setBlockWithNotify(x, y, z, 0);
         }
@@ -77,7 +78,7 @@ public class BlockFlower extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockFluid.java b/src/main/java/net/minecraft/core/block/BlockFluid.java
index fe6c0a9e2..9930d4175 100644
--- a/src/main/java/net/minecraft/core/block/BlockFluid.java
+++ b/src/main/java/net/minecraft/core/block/BlockFluid.java
@@ -101,7 +101,7 @@ public abstract class BlockFluid extends Block
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockGrass.java b/src/main/java/net/minecraft/core/block/BlockGrass.java
index 408a178dd..2df3323fe 100644
--- a/src/main/java/net/minecraft/core/block/BlockGrass.java
+++ b/src/main/java/net/minecraft/core/block/BlockGrass.java
@@ -52,7 +52,7 @@ public class BlockGrass extends Block
             {
                 world.setBlockWithNotify(l, i1, j1, this.id);
             }
-            if (world.getGameRule(GameRules.DO_SEASONAL_GROWTH) && world.getBlockId(x, y + 1, z) == 0 && world.seasonManager.getCurrentSeason() != null && world.seasonManager.getCurrentSeason().growFlowers && rand.nextInt(256) == 0)
+            if (world.getGameRule(GameRules.DO_SEASONAL_GROWTH) && world.getBlockId(x, y + 1, z) == 0 && world.getSeasonManager().getCurrentSeason() != null && world.getSeasonManager().getCurrentSeason().growFlowers && rand.nextInt(256) == 0)
             {
                 int idToSpawn = 0;
                 int r = rand.nextInt(400);
diff --git a/src/main/java/net/minecraft/core/block/BlockJar.java b/src/main/java/net/minecraft/core/block/BlockJar.java
index c14ff8f31..2d6271f73 100644
--- a/src/main/java/net/minecraft/core/block/BlockJar.java
+++ b/src/main/java/net/minecraft/core/block/BlockJar.java
@@ -11,6 +11,7 @@ import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.item.block.ItemBlock;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockJar extends BlockTileEntity{
 
@@ -33,18 +34,18 @@ public class BlockJar extends BlockTileEntity{
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         float offset = 0.0F;
         return AABB.getBoundingBoxFromPool(x + 0.3125f, y + offset, z + 0.3125f, x + 1 - 0.3125f, (float) y + 0.375f + offset, z + 1 - 0.3125f);
     }
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return getCollisionBoundingBoxFromPool(world, x, y, z);
     }
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         AABB aabb = getCollisionBoundingBoxFromPool(world, x, y, z);
         minX = aabb.minX - x;
diff --git a/src/main/java/net/minecraft/core/block/BlockLadder.java b/src/main/java/net/minecraft/core/block/BlockLadder.java
index 79d5b1f1f..5bc47b755 100644
--- a/src/main/java/net/minecraft/core/block/BlockLadder.java
+++ b/src/main/java/net/minecraft/core/block/BlockLadder.java
@@ -5,6 +5,7 @@ import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockLadder extends Block {
 
@@ -28,18 +29,18 @@ public class BlockLadder extends Block {
 	}
 	
 	@Override
-	public void setBlockBoundsBasedOnState(World world, int x, int y, int z) {
+	public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z) {
 		setBlockBounds(world.getBlockMetadata(x, y, z));
 	}
 	
 	@Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z) {
 		setBlockBounds(world.getBlockMetadata(x, y, z));
 		return super.getCollisionBoundingBoxFromPool(world, x, y, z);
 	}
 	
 	@Override
-	public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) {
+	public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z) {
 		setBlockBounds(world.getBlockMetadata(x, y, z));
 		return super.getSelectedBoundingBoxFromPool(world, x, y, z);
 	}
diff --git a/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java b/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java
index 0a540323c..0f6aa5149 100644
--- a/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java
+++ b/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java
@@ -12,6 +12,7 @@ import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 import java.util.Random;
 
@@ -27,7 +28,7 @@ public class BlockLanternFirefly extends Block{
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         int metadata = world.getBlockMetadata(x, y, z);
         float offset = 0.0F;
@@ -37,13 +38,13 @@ public class BlockLanternFirefly extends Block{
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return getCollisionBoundingBoxFromPool(world, x, y, z);
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         AABB aabb = getCollisionBoundingBoxFromPool(world, x, y, z);
         minX = aabb.minX - x;
diff --git a/src/main/java/net/minecraft/core/block/BlockLayerBase.java b/src/main/java/net/minecraft/core/block/BlockLayerBase.java
index a48cd0814..ab45fb414 100644
--- a/src/main/java/net/minecraft/core/block/BlockLayerBase.java
+++ b/src/main/java/net/minecraft/core/block/BlockLayerBase.java
@@ -2,7 +2,7 @@ package net.minecraft.core.block;
 
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.util.phys.AABB;
-import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 // Referenced classes of package net.minecraft.src:
 //            Block, Material, World, AxisAlignedBB, 
@@ -25,7 +25,7 @@ public abstract class BlockLayerBase extends Block
     	return this;
     }
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z) & 7;
         float f = (float)(2 * (1 + l)) / 16F;
@@ -45,7 +45,7 @@ public abstract class BlockLayerBase extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z) & 7;
         float f = (float)(2 * (1 + l)) / 16F;
diff --git a/src/main/java/net/minecraft/core/block/BlockLayerLeaves.java b/src/main/java/net/minecraft/core/block/BlockLayerLeaves.java
index 39ee5b794..35d150a6f 100644
--- a/src/main/java/net/minecraft/core/block/BlockLayerLeaves.java
+++ b/src/main/java/net/minecraft/core/block/BlockLayerLeaves.java
@@ -6,6 +6,7 @@ import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.world.World;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.util.phys.AABB;
+import net.minecraft.core.world.WorldSource;
 
 import java.util.Random;
 
@@ -25,7 +26,7 @@ public class BlockLayerLeaves extends BlockLayerBase
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
     	return null;
     }
@@ -99,7 +100,7 @@ public class BlockLayerLeaves extends BlockLayerBase
     @Override
     public void updateTick(World world, int x, int y, int z, Random rand)
     {
-    	if (world.seasonManager.getCurrentSeason() != null && !world.seasonManager.getCurrentSeason().hasFallingLeaves)
+    	if (world.getSeasonManager().getCurrentSeason() != null && !world.getSeasonManager().getCurrentSeason().hasFallingLeaves)
     	{
     		int metadata = world.getBlockMetadata(x, y, z);
             if ((metadata & 0b10000000) == 0)
diff --git a/src/main/java/net/minecraft/core/block/BlockLayerSnow.java b/src/main/java/net/minecraft/core/block/BlockLayerSnow.java
index 516d84a47..4dda1042c 100644
--- a/src/main/java/net/minecraft/core/block/BlockLayerSnow.java
+++ b/src/main/java/net/minecraft/core/block/BlockLayerSnow.java
@@ -8,6 +8,7 @@ import net.minecraft.core.enums.LightLayer;
 import net.minecraft.core.world.World;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.util.phys.AABB;
+import net.minecraft.core.world.WorldSource;
 
 import java.util.Random;
 
@@ -27,7 +28,7 @@ public class BlockLayerSnow extends BlockLayerBase
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z) & 7;
         float f = (float)(2 * (1 + l)) / 16F;
@@ -111,7 +112,7 @@ public class BlockLayerSnow extends BlockLayerBase
             dropBlockWithCause(world, EnumDropCause.WORLD, x, y, z, world.getBlockMetadata(x, y, z), null);
 			world.setBlockWithNotify(x, y, z, 0);
 		}
-        if(world.getBlockBiome(x, y, z) != null && !world.getBlockBiome(x, y, z).hasSurfaceSnow() && world.seasonManager.getCurrentSeason() != null && world.seasonManager.getCurrentSeason().letWeatherCleanUpSnow)
+        if(world.getBlockBiome(x, y, z) != null && !world.getBlockBiome(x, y, z).hasSurfaceSnow() && world.getSeasonManager().getCurrentSeason() != null && world.getSeasonManager().getCurrentSeason().letWeatherCleanUpSnow)
         {
             dropBlockWithCause(world, EnumDropCause.WORLD, x, y, z, world.getBlockMetadata(x, y, z), null);
             world.setBlockWithNotify(x, y, z, 0);
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesBase.java b/src/main/java/net/minecraft/core/block/BlockLeavesBase.java
index 0da3ba0f1..ab68601f5 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesBase.java
+++ b/src/main/java/net/minecraft/core/block/BlockLeavesBase.java
@@ -34,7 +34,7 @@ public abstract class BlockLeavesBase extends Block
     public ItemStack[] getBreakResult(World world, EnumDropCause dropCause, int x, int y, int z, int meta, TileEntity tileEntity)
     {
 
-        Season season = world.seasonManager.getCurrentSeason();
+        Season season = world.getSeasonManager().getCurrentSeason();
         float dropRate = season != null ? 20 / season.saplingDropFactor : 20;
         if (dropCause == EnumDropCause.PICK_BLOCK || dropCause == EnumDropCause.SILK_TOUCH) return new ItemStack[] { new ItemStack(this) };
 
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesCacao.java b/src/main/java/net/minecraft/core/block/BlockLeavesCacao.java
index a2c17faed..87693f8af 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesCacao.java
+++ b/src/main/java/net/minecraft/core/block/BlockLeavesCacao.java
@@ -79,7 +79,7 @@ public class BlockLeavesCacao extends BlockLeavesBase implements IBonemealable {
         int meta = world.getBlockMetadata(x, y, z);
         int growthRate = (meta & 0XF0) >> 4;
         if (rand.nextInt(BEAN_GROWTH_RATE) == 0) {
-            if (world.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_SUMMER) {
+            if (world.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_SUMMER) {
                 if (canBeansGrow(world, x, y, z)) {
                     if ((growthRate) < 4) {
                         world.setBlockMetadataWithNotify(x, y, z, (++growthRate) << 4 | meta);
@@ -106,7 +106,7 @@ public class BlockLeavesCacao extends BlockLeavesBase implements IBonemealable {
         {
             if(!world.isClientSide)
             {
-                if(world.seasonManager.getCurrentSeason() != Seasons.OVERWORLD_SUMMER)
+                if(world.getSeasonManager().getCurrentSeason() != Seasons.OVERWORLD_SUMMER)
                     return true;
                 world.setBlockMetadataWithNotify(blockX, blockY, blockZ, (4 << 4) | meta);
                 if (entityplayer.getGamemode().consumeBlocks())
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesCherry.java b/src/main/java/net/minecraft/core/block/BlockLeavesCherry.java
index 8ba7bcde5..19546388a 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesCherry.java
+++ b/src/main/java/net/minecraft/core/block/BlockLeavesCherry.java
@@ -23,7 +23,7 @@ public class BlockLeavesCherry extends BlockLeavesBase
     @Override
 	public void randomDisplayTick(World world, int x, int y, int z, Random rand)
     {
-        if (world.seasonManager.getCurrentSeason() != null && world.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_SPRING && rand.nextInt(40) == 0)
+        if (world.getSeasonManager().getCurrentSeason() != null && world.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_SPRING && rand.nextInt(40) == 0)
         {
             world.spawnParticle("fallingleaf", x, (double) y - 0.1f, z, 0, 0, 0);
         }
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesCherryFlowering.java b/src/main/java/net/minecraft/core/block/BlockLeavesCherryFlowering.java
index 3322cfb21..a5ff1be95 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesCherryFlowering.java
+++ b/src/main/java/net/minecraft/core/block/BlockLeavesCherryFlowering.java
@@ -64,7 +64,7 @@ public class BlockLeavesCherryFlowering extends BlockLeavesCherry implements IBo
         int meta = world.getBlockMetadata(x, y, z);
         int growthRate = (meta & 0XF0) >> 4;
 
-        if (world.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_SPRING) {
+        if (world.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_SPRING) {
             if (rand.nextInt(20) == 0) {
                 if ((growthRate) == 0) {
                     world.setBlockMetadataWithNotify(x, y, z, 1 << 4 | meta);
@@ -85,7 +85,7 @@ public class BlockLeavesCherryFlowering extends BlockLeavesCherry implements IBo
         {
             if(!world.isClientSide)
             {
-                if(world.seasonManager.getCurrentSeason() != Seasons.OVERWORLD_SPRING)
+                if(world.getSeasonManager().getCurrentSeason() != Seasons.OVERWORLD_SPRING)
                     return true;
                 world.setBlockMetadataWithNotify(blockX, blockY, blockZ, (1 << 4) | meta);
                 if (entityplayer.getGamemode().consumeBlocks())
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java b/src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java
index 7be2f82f8..c74cad9b3 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java
+++ b/src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java
@@ -28,7 +28,7 @@ public class BlockLeavesEucalyptus extends BlockLeavesBase
     @Override
 	public void randomDisplayTick(World world, int x, int y, int z, Random rand)
     {
-    	if (world.seasonManager.getCurrentSeason() != null && world.seasonManager.getCurrentSeason().hasFallingLeaves && rand.nextInt(40) == 0)
+    	if (world.getSeasonManager().getCurrentSeason() != null && world.getSeasonManager().getCurrentSeason().hasFallingLeaves && rand.nextInt(40) == 0)
     	{
     		world.spawnParticle("fallingleaf", x, (double) y - 0.1f, z, 0, 0, 0);
     	}
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesOak.java b/src/main/java/net/minecraft/core/block/BlockLeavesOak.java
index ad842c14d..f3f8bbd14 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesOak.java
+++ b/src/main/java/net/minecraft/core/block/BlockLeavesOak.java
@@ -23,7 +23,7 @@ public class BlockLeavesOak extends BlockLeavesBase
 	public void updateTick(World world, int x, int y, int z, Random rand)
     {
         super.updateTick(world, x, y, z, rand);
-        if (rand.nextInt(128) == 0 && world.seasonManager.getCurrentSeason() != null && world.seasonManager.getCurrentSeason().hasFallingLeaves)
+        if (rand.nextInt(128) == 0 && world.getSeasonManager().getCurrentSeason() != null && world.getSeasonManager().getCurrentSeason().hasFallingLeaves)
         {
             for (int q = -1; q > -16; q--)
             {
@@ -52,7 +52,7 @@ public class BlockLeavesOak extends BlockLeavesBase
     @Override
     public void randomDisplayTick(World world, int x, int y, int z, Random rand)
     {
-    	if (world.seasonManager.getCurrentSeason() != null && world.seasonManager.getCurrentSeason().hasFallingLeaves)
+    	if (world.getSeasonManager().getCurrentSeason() != null && world.getSeasonManager().getCurrentSeason().hasFallingLeaves)
     	{
             WindManager wind = world.getWorldType().getWindManager();
             float windIntensity = wind.getWindIntensity(world, x, y, z);
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesShrub.java b/src/main/java/net/minecraft/core/block/BlockLeavesShrub.java
index a15cfa626..7dcb14aea 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesShrub.java
+++ b/src/main/java/net/minecraft/core/block/BlockLeavesShrub.java
@@ -28,7 +28,7 @@ public class BlockLeavesShrub extends BlockLeavesBase
     @Override
 	public void randomDisplayTick(World world, int x, int y, int z, Random rand)
     {
-        if (world.seasonManager.getCurrentSeason() != null && world.seasonManager.getCurrentSeason().hasFallingLeaves && rand.nextInt(40) == 0)
+        if (world.getSeasonManager().getCurrentSeason() != null && world.getSeasonManager().getCurrentSeason().hasFallingLeaves && rand.nextInt(40) == 0)
         {
             world.spawnParticle("fallingleaf", x, (double) y - 0.1f, z, 0, 0, 0);
         }
diff --git a/src/main/java/net/minecraft/core/block/BlockLever.java b/src/main/java/net/minecraft/core/block/BlockLever.java
index c28f8c9a0..7333aa2eb 100644
--- a/src/main/java/net/minecraft/core/block/BlockLever.java
+++ b/src/main/java/net/minecraft/core/block/BlockLever.java
@@ -24,7 +24,7 @@ public class BlockLever extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
@@ -176,7 +176,7 @@ public class BlockLever extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z) & 7;
         float f = 0.1875F;
diff --git a/src/main/java/net/minecraft/core/block/BlockOverlayPebbles.java b/src/main/java/net/minecraft/core/block/BlockOverlayPebbles.java
index 9b74079d6..61fdb3b3b 100644
--- a/src/main/java/net/minecraft/core/block/BlockOverlayPebbles.java
+++ b/src/main/java/net/minecraft/core/block/BlockOverlayPebbles.java
@@ -7,6 +7,7 @@ import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockOverlayPebbles extends Block
 {
@@ -35,13 +36,13 @@ public class BlockOverlayPebbles extends Block
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return AABB.getBoundingBoxFromPool(x, y, z, x + 1, y + 0.0625f, z + 1);
     }
@@ -57,7 +58,7 @@ public class BlockOverlayPebbles extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         minX = 0;
         minY = 0;
diff --git a/src/main/java/net/minecraft/core/block/BlockPortal.java b/src/main/java/net/minecraft/core/block/BlockPortal.java
index 00a0a7040..419585e3c 100644
--- a/src/main/java/net/minecraft/core/block/BlockPortal.java
+++ b/src/main/java/net/minecraft/core/block/BlockPortal.java
@@ -8,6 +8,7 @@ import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.sound.SoundCategory;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 import java.util.Random;
 
@@ -31,13 +32,13 @@ public class BlockPortal extends BlockTransparent
    
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         int meta = world.getBlockMetadata(x, y, z);
         if((meta & 0x1) > 0)
diff --git a/src/main/java/net/minecraft/core/block/BlockPressurePlate.java b/src/main/java/net/minecraft/core/block/BlockPressurePlate.java
index d7524bc80..f3f4e851a 100644
--- a/src/main/java/net/minecraft/core/block/BlockPressurePlate.java
+++ b/src/main/java/net/minecraft/core/block/BlockPressurePlate.java
@@ -8,10 +8,7 @@ import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.sound.SoundCategory;
 import net.minecraft.core.world.WorldSource;
 import net.minecraft.core.world.World;
-import net.minecraft.core.block.material.Material;
 import net.minecraft.core.util.phys.AABB;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.WorldSource;
 
 import java.util.List;
 import java.util.Random;
@@ -36,7 +33,7 @@ public class BlockPressurePlate extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
@@ -141,7 +138,7 @@ public class BlockPressurePlate extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         int meta = world.getBlockMetadata(x, y, z);
         boolean isPressed = isPressed(meta);
diff --git a/src/main/java/net/minecraft/core/block/BlockRail.java b/src/main/java/net/minecraft/core/block/BlockRail.java
index d3f9ba55c..94302ff9a 100644
--- a/src/main/java/net/minecraft/core/block/BlockRail.java
+++ b/src/main/java/net/minecraft/core/block/BlockRail.java
@@ -7,6 +7,7 @@ import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.util.phys.Vec3d;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 import java.util.Random;
 
@@ -41,7 +42,7 @@ public class BlockRail extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
@@ -60,7 +61,7 @@ public class BlockRail extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z);
         if(l >= 2 && l <= 5)
diff --git a/src/main/java/net/minecraft/core/block/BlockRedstoneWire.java b/src/main/java/net/minecraft/core/block/BlockRedstoneWire.java
index a9699b37c..d9f4cb344 100644
--- a/src/main/java/net/minecraft/core/block/BlockRedstoneWire.java
+++ b/src/main/java/net/minecraft/core/block/BlockRedstoneWire.java
@@ -31,7 +31,7 @@ public class BlockRedstoneWire extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockRope.java b/src/main/java/net/minecraft/core/block/BlockRope.java
index 2459ac1d4..4867ec371 100644
--- a/src/main/java/net/minecraft/core/block/BlockRope.java
+++ b/src/main/java/net/minecraft/core/block/BlockRope.java
@@ -7,6 +7,7 @@ import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockRope
     extends Block {
@@ -30,12 +31,12 @@ public class BlockRope
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
+    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z) {
         return null;
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         boolean hasBlockNegX = world.getBlockId(x - 1, y, z) == this.id;
         boolean hasBlockPosX = world.getBlockId(x + 1, y, z) == this.id;
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingBase.java b/src/main/java/net/minecraft/core/block/BlockSaplingBase.java
index 34a722e10..13e0a0c1f 100644
--- a/src/main/java/net/minecraft/core/block/BlockSaplingBase.java
+++ b/src/main/java/net/minecraft/core/block/BlockSaplingBase.java
@@ -44,8 +44,8 @@ public abstract class BlockSaplingBase extends BlockFlower implements IBonemeala
 
         super.updateTick(world, x, y, z, rand);
         int growthRate = 30;
-        if(world.seasonManager.getCurrentSeason() != null){
-            growthRate = MathHelper.floor_float(growthRate / world.seasonManager.getCurrentSeason().cropGrowthFactor);
+        if(world.getSeasonManager().getCurrentSeason() != null){
+            growthRate = MathHelper.floor_float(growthRate / world.getSeasonManager().getCurrentSeason().cropGrowthFactor);
         }
         if(world.getBlockLightValue(x, y + 1, z) >= 9 && rand.nextInt(growthRate) == 0)
         {
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingOak.java b/src/main/java/net/minecraft/core/block/BlockSaplingOak.java
index ed366e8f9..d0dc98c63 100644
--- a/src/main/java/net/minecraft/core/block/BlockSaplingOak.java
+++ b/src/main/java/net/minecraft/core/block/BlockSaplingOak.java
@@ -23,8 +23,8 @@ public class BlockSaplingOak extends BlockSaplingBase
     @Override
 	public void growTree(World world, int i, int j, int k, Random random)
     {
-    	Object treeBig = new WorldFeatureTreeCaatinga(Block.leavesOak.id, Block.logOak.id);
-        Object treeSmall = new WorldFeatureTreeCaatinga(Block.leavesOak.id, Block.logOak.id);
+    	Object treeBig = new WorldFeatureTreeFancy(Block.leavesOak.id, Block.logOak.id);
+        Object treeSmall = new WorldFeatureTree(Block.leavesOak.id, Block.logOak.id, 4);
     	world.setBlock(i, j, k, 0);
 
         if(!((WorldFeature) (treeSmall)).generate(world, random, i, j, k))
diff --git a/src/main/java/net/minecraft/core/block/BlockSign.java b/src/main/java/net/minecraft/core/block/BlockSign.java
index ebd4240a1..62efa5712 100644
--- a/src/main/java/net/minecraft/core/block/BlockSign.java
+++ b/src/main/java/net/minecraft/core/block/BlockSign.java
@@ -9,6 +9,7 @@ import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.block.material.Material;
+import net.minecraft.core.world.WorldSource;
 
 // Referenced classes of package net.minecraft.src:
 //            BlockContainer, Material, IBlockAccess, TileEntity, 
@@ -28,20 +29,20 @@ public class BlockSign extends BlockTileEntity
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         setBlockBoundsBasedOnState(world, x, y, z);
         return super.getSelectedBoundingBoxFromPool(world, x, y, z);
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         if(isFreestanding)
         {
diff --git a/src/main/java/net/minecraft/core/block/BlockSlab.java b/src/main/java/net/minecraft/core/block/BlockSlab.java
index 2c36309a9..ca636d34f 100644
--- a/src/main/java/net/minecraft/core/block/BlockSlab.java
+++ b/src/main/java/net/minecraft/core/block/BlockSlab.java
@@ -38,7 +38,7 @@ public class BlockSlab extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z) & 0x3;
         if(l == 0)
@@ -50,7 +50,7 @@ public class BlockSlab extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z) & 0x3;
         if(l == 0)
@@ -109,7 +109,7 @@ public class BlockSlab extends Block
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return getCollisionBoundingBoxFromPool(world, x, y, z);
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockSoulSand.java b/src/main/java/net/minecraft/core/block/BlockSoulSand.java
index a62d694de..40419ab71 100644
--- a/src/main/java/net/minecraft/core/block/BlockSoulSand.java
+++ b/src/main/java/net/minecraft/core/block/BlockSoulSand.java
@@ -9,6 +9,7 @@ import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockSoulSand extends Block
 {
@@ -19,7 +20,7 @@ public class BlockSoulSand extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         float f = 0.125F;
         return AABB.getBoundingBoxFromPool(x, y, z, x + 1, (float)(y + 1) - f, z + 1);
diff --git a/src/main/java/net/minecraft/core/block/BlockSpikes.java b/src/main/java/net/minecraft/core/block/BlockSpikes.java
index 7d39736bb..ac1610170 100644
--- a/src/main/java/net/minecraft/core/block/BlockSpikes.java
+++ b/src/main/java/net/minecraft/core/block/BlockSpikes.java
@@ -11,6 +11,7 @@ import net.minecraft.core.world.World;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.util.helper.DamageType;
+import net.minecraft.core.world.WorldSource;
 
 // Referenced classes of package net.minecraft.src:
 //            Block, Material, Entity, Item,
@@ -66,7 +67,7 @@ public class BlockSpikes extends BlockCobweb
 	}
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {	
     	float f = 1.0f / 16.0f;
         return AABB.getBoundingBoxFromPool(x + f, y, z + f, x + 1 - f, y + 0.1875F, z + 1 - f);
diff --git a/src/main/java/net/minecraft/core/block/BlockStairs.java b/src/main/java/net/minecraft/core/block/BlockStairs.java
index 7572f8254..ea26a6f61 100644
--- a/src/main/java/net/minecraft/core/block/BlockStairs.java
+++ b/src/main/java/net/minecraft/core/block/BlockStairs.java
@@ -94,13 +94,13 @@ public class BlockStairs extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return super.getCollisionBoundingBoxFromPool(world, x, y, z);
     }
@@ -217,7 +217,7 @@ public class BlockStairs extends Block
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return modelBlock.getSelectedBoundingBoxFromPool(world, x, y, z);
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockSugarcane.java b/src/main/java/net/minecraft/core/block/BlockSugarcane.java
index 1960f42f7..a9f0517e6 100644
--- a/src/main/java/net/minecraft/core/block/BlockSugarcane.java
+++ b/src/main/java/net/minecraft/core/block/BlockSugarcane.java
@@ -11,6 +11,7 @@ import net.minecraft.core.item.Item;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 import java.util.Random;
 
@@ -118,7 +119,7 @@ public class BlockSugarcane extends Block implements IBonemealable
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockTorch.java b/src/main/java/net/minecraft/core/block/BlockTorch.java
index e8ed69eea..089334c83 100644
--- a/src/main/java/net/minecraft/core/block/BlockTorch.java
+++ b/src/main/java/net/minecraft/core/block/BlockTorch.java
@@ -10,6 +10,7 @@ import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.util.phys.Vec3d;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 // Referenced classes of package net.minecraft.src:
 //            Block, Material, World, AxisAlignedBB, 
@@ -25,7 +26,7 @@ public class BlockTorch extends Block
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         return null;
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockTrapDoor.java b/src/main/java/net/minecraft/core/block/BlockTrapDoor.java
index 08071014c..bde3c5884 100644
--- a/src/main/java/net/minecraft/core/block/BlockTrapDoor.java
+++ b/src/main/java/net/minecraft/core/block/BlockTrapDoor.java
@@ -5,13 +5,12 @@ import net.minecraft.core.block.material.Material;
 import net.minecraft.core.entity.EntityLiving;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.enums.PlacementMode;
-import net.minecraft.core.util.helper.Axis;
 import net.minecraft.core.util.helper.Direction;
 import net.minecraft.core.util.helper.Side;
-import net.minecraft.core.util.helper.Sides;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.util.phys.Vec3d;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 // Referenced classes of package net.minecraft.src:
 //            Block, Material, IBlockAccess, World, 
@@ -45,21 +44,21 @@ public class BlockTrapDoor extends Block
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
+    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         setBlockBoundsBasedOnState(world, x, y, z);
         return super.getSelectedBoundingBoxFromPool(world, x, y, z);
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         setBlockBoundsBasedOnState(world, x, y, z);
         return super.getCollisionBoundingBoxFromPool(world, x, y, z);
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         setBlockBoundsForBlockRender(world.getBlockMetadata(x, y, z));
     }
diff --git a/src/main/java/net/minecraft/core/block/piston/BlockPistonBase.java b/src/main/java/net/minecraft/core/block/piston/BlockPistonBase.java
index a65165aaa..935fb9fd7 100644
--- a/src/main/java/net/minecraft/core/block/piston/BlockPistonBase.java
+++ b/src/main/java/net/minecraft/core/block/piston/BlockPistonBase.java
@@ -13,6 +13,7 @@ import net.minecraft.core.util.helper.Direction;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockPistonBase extends Block
 {
@@ -195,7 +196,7 @@ public class BlockPistonBase extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z);
         if(isPowered(l))
diff --git a/src/main/java/net/minecraft/core/block/piston/BlockPistonHead.java b/src/main/java/net/minecraft/core/block/piston/BlockPistonHead.java
index 97232bea3..3bc54f8e0 100644
--- a/src/main/java/net/minecraft/core/block/piston/BlockPistonHead.java
+++ b/src/main/java/net/minecraft/core/block/piston/BlockPistonHead.java
@@ -11,6 +11,7 @@ import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.block.logic.PistonDirections;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
+import net.minecraft.core.world.WorldSource;
 
 public class BlockPistonHead extends Block
 {
@@ -132,7 +133,7 @@ public class BlockPistonHead extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z);
         switch(getDirectionFromMeta(l))
diff --git a/src/main/java/net/minecraft/core/block/piston/BlockPistonMoving.java b/src/main/java/net/minecraft/core/block/piston/BlockPistonMoving.java
index ace3ba522..12c175d21 100644
--- a/src/main/java/net/minecraft/core/block/piston/BlockPistonMoving.java
+++ b/src/main/java/net/minecraft/core/block/piston/BlockPistonMoving.java
@@ -122,7 +122,7 @@ public class BlockPistonMoving extends BlockTileEntity
     }
 
     @Override
-	public AABB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
+	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
         TileEntityPistonMoving tileEntity = getBlockEntity(world, x, y, z);
         if(tileEntity == null)
@@ -138,7 +138,7 @@ public class BlockPistonMoving extends BlockTileEntity
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(World world, int x, int y, int z)
+    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
         TileEntityPistonMoving tileentitypiston = getBlockEntity(world, x, y, z);
         if(tileentitypiston != null)
@@ -164,7 +164,7 @@ public class BlockPistonMoving extends BlockTileEntity
         }
     }
 
-    public AABB getCollisionShapeFromTileEntity(World world, int x, int y, int z, int l, float f, int i1)
+    public AABB getCollisionShapeFromTileEntity(WorldSource world, int x, int y, int z, int l, float f, int i1)
     {
         if(l == 0 || l == id)
         {
diff --git a/src/main/java/net/minecraft/core/entity/animal/EntityAnimal.java b/src/main/java/net/minecraft/core/entity/animal/EntityAnimal.java
index 40b47b3a2..44c454c83 100644
--- a/src/main/java/net/minecraft/core/entity/animal/EntityAnimal.java
+++ b/src/main/java/net/minecraft/core/entity/animal/EntityAnimal.java
@@ -26,9 +26,9 @@ public abstract class EntityAnimal extends EntityPathfinder
     @Override
 	public int getMaxSpawnedInChunk()
     {
-        if(world.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_SPRING)
+        if(world.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_SPRING)
             return 8;
-        if(world.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_WINTER)
+        if(world.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_WINTER)
             return 1;
         return 4;
     }
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntityMonster.java b/src/main/java/net/minecraft/core/entity/monster/EntityMonster.java
index c30d5a610..2b6ba2314 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntityMonster.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntityMonster.java
@@ -89,9 +89,9 @@ public abstract class EntityMonster extends EntityPathfinder
     @Override
 	public int getMaxSpawnedInChunk()
     {
-        if(world.seasonManager.getCurrentSeason()== Seasons.OVERWORLD_SPRING)
+        if(world.getSeasonManager().getCurrentSeason()== Seasons.OVERWORLD_SPRING)
             return 2;
-        if(world.seasonManager.getCurrentSeason()== Seasons.OVERWORLD_WINTER)
+        if(world.getSeasonManager().getCurrentSeason()== Seasons.OVERWORLD_WINTER)
             return 8;
         return 4;
     }
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntitySnowman.java b/src/main/java/net/minecraft/core/entity/monster/EntitySnowman.java
index e525b393e..5d7bbb07c 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntitySnowman.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntitySnowman.java
@@ -84,7 +84,7 @@ public class EntitySnowman extends EntityMonster
         int z = (int) this.z;
         Biome biome = world.getBlockBiome(x, y, z);
 
-        return super.getCanSpawnHere() && (world.canBlockSeeTheSky(x, y, z) && ((biome == Biomes.OVERWORLD_GLACIER) || ((world.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_WINTER || world.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_WINTER_ENDLESS) && (world.getCurrentWeather() == Weather.overworldSnow || world.getCurrentWeather() == Weather.overworldWinterSnow))));
+        return super.getCanSpawnHere() && (world.canBlockSeeTheSky(x, y, z) && ((biome == Biomes.OVERWORLD_GLACIER) || ((world.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_WINTER || world.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_WINTER_ENDLESS) && (world.getCurrentWeather() == Weather.overworldSnow || world.getCurrentWeather() == Weather.overworldWinterSnow))));
     }
 
     @Override
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 ee9b0542c..a4efec458 100644
--- a/src/main/java/net/minecraft/core/entity/player/EntityPlayer.java
+++ b/src/main/java/net/minecraft/core/entity/player/EntityPlayer.java
@@ -37,6 +37,7 @@ import net.minecraft.core.enums.EnumSleepStatus;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.item.tool.ItemToolSword;
+import net.minecraft.core.lang.I18n;
 import net.minecraft.core.net.command.TextFormatting;
 import net.minecraft.core.player.gamemode.Gamemode;
 import net.minecraft.core.player.inventory.Container;
@@ -128,6 +129,9 @@ public abstract class EntityPlayer extends EntityLiving
     @Override
 	public void tick()
     {
+        xdO = xd;
+        ydO = yd;
+        zd0 = zd;
         setupDwarfMode();
 
         if(isPlayerSleeping())
@@ -164,40 +168,6 @@ public abstract class EntityPlayer extends EntityLiving
             closeScreen();
             craftingInventory = inventorySlots;
         }
-        field_20066_r = field_20063_u;
-        field_20065_s = field_20062_v;
-        field_20064_t = field_20061_w;
-        double d = x - field_20063_u;
-        double d1 = y - field_20062_v;
-        double d2 = z - field_20061_w;
-        double d3 = 10D;
-        if(d > d3)
-        {
-            field_20066_r = field_20063_u = x;
-        }
-        if(d2 > d3)
-        {
-            field_20064_t = field_20061_w = z;
-        }
-        if(d1 > d3)
-        {
-            field_20065_s = field_20062_v = y;
-        }
-        if(d < -d3)
-        {
-            field_20066_r = field_20063_u = x;
-        }
-        if(d2 < -d3)
-        {
-            field_20064_t = field_20061_w = z;
-        }
-        if(d1 < -d3)
-        {
-            field_20065_s = field_20062_v = y;
-        }
-        field_20063_u += d * 0.25D;
-        field_20061_w += d2 * 0.25D;
-        field_20062_v += d1 * 0.25D;
         addStat(StatList.minutesPlayedStat, 1);
         if(vehicle == null)
         {
@@ -881,18 +851,18 @@ public abstract class EntityPlayer extends EntityLiving
             }
             if(bedChunkCoordinates == null || !bedChunkCoordinates.equals(x, y, z)) {
                 if(playerSpawnCoordinate == null || !playerSpawnCoordinate.equals(x, y, z)) {
-                    addChatMessage("bed.setSpawn");
+                    sendTranslatedChatMessage("bed.setSpawn");
                     setPlayerSpawnCoordinate(new ChunkCoordinates(x, y, z));
                 }
             }
             if (!world.getGameRule(GameRules.ALLOW_SLEEPING))
             {
-                addChatMessage("bed.noAllowSleeping");
+				sendStatusMessage(I18n.getInstance().translateKey("bed.noAllowSleeping"));
                 return EnumSleepStatus.DISABLED_BY_GAMERULE;
             }
 
             if(world.isDaytime() && world.getCurrentWeather() != Weather.overworldStorm) {
-            	addChatMessage("bed.noSleep");
+            	sendStatusMessage(I18n.getInstance().translateKey("bed.noSleep"));
                 return EnumSleepStatus.NOT_POSSIBLE_NOW;
             }
         }
@@ -1048,9 +1018,22 @@ public abstract class EntityPlayer extends EntityLiving
         return sleepTimer;
     }
 
-    public void addChatMessage(String s)
-    {
+    /**
+     * Translate the string and send it to this player
+     */
+    public void sendTranslatedChatMessage(String message) {
+    	sendMessage(I18n.getInstance().translateKey(message));
     }
+    
+    /**
+     * Send a string to this player, displayed in chat
+     */
+    public abstract void sendMessage(String message);
+    
+    /**
+     * Send a string to this player, displayed above the hotbar
+     */
+    public abstract void sendStatusMessage(String message);
 
     @Override
     public ItemStack getHeldItem()
@@ -1400,12 +1383,9 @@ public abstract class EntityPlayer extends EntityLiving
     public int swingProgressInt;
     public String username;
     public int dimension;
-    public double field_20066_r;
-    public double field_20065_s;
-    public double field_20064_t;
-    public double field_20063_u;
-    public double field_20062_v;
-    public double field_20061_w;
+    public double xdO;
+    public double ydO;
+    public double zd0;
     protected boolean sleeping;
     public ChunkCoordinates bedChunkCoordinates;
     private int sleepTimer;
@@ -1429,6 +1409,8 @@ public abstract class EntityPlayer extends EntityLiving
     protected float baseSpeed = 0.1f;
     protected float baseFlySpeed = 0.02f;
     protected boolean isDwarf = false;
+    public int lastRenderTick = 0;
+    public float wobbleTimer = 0;
     public static class SortByUsername implements Comparator<EntityPlayer> {
 
         @Override
diff --git a/src/main/java/net/minecraft/core/item/ItemFlag.java b/src/main/java/net/minecraft/core/item/ItemFlag.java
index 85a5da29d..74ec0a021 100644
--- a/src/main/java/net/minecraft/core/item/ItemFlag.java
+++ b/src/main/java/net/minecraft/core/item/ItemFlag.java
@@ -7,6 +7,7 @@ import net.minecraft.core.block.Block;
 import net.minecraft.core.block.entity.TileEntityFlag;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.enums.EnumBlockSoundEffectType;
+import net.minecraft.core.lang.I18n;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.world.World;
 
@@ -35,13 +36,13 @@ public class ItemFlag extends Item
 			if (flag != null) {
 				CompoundTag flagData = stack.getData().getCompoundOrDefault("FlagData", new CompoundTag());
 				if (hasFlagBeenDrawnOn(stack) && doesFlagContainDyes(stack)) {
-					entityplayer.addChatMessage("flag.overwrite");
+					entityplayer.sendStatusMessage(I18n.getInstance().translateKey("flag.overwrite"));
 					return false;
 				}
 				flag.copyFlagNBT(flagData);
                 flagData.putString("Owner", entityplayer.username); // Sets the owner of the copied flag to the current player so they can actually modify the flag once they place it
 				stack.getData().putCompound("FlagData", flagData);
-				entityplayer.addChatMessage("flag.copied");
+				entityplayer.sendStatusMessage(I18n.getInstance().translateKey("flag.copied"));
 				return true;
 			}
 		}
diff --git a/src/main/java/net/minecraft/core/item/ItemMap.java b/src/main/java/net/minecraft/core/item/ItemMap.java
index ef4d2abb1..b82cb45e3 100644
--- a/src/main/java/net/minecraft/core/item/ItemMap.java
+++ b/src/main/java/net/minecraft/core/item/ItemMap.java
@@ -68,7 +68,7 @@ public class ItemMap extends ItemComplex
 			TileEntityFlag flag = (TileEntityFlag) world.getBlockTileEntity(blockX, blockY, blockZ);
 			boolean canCreateMap = mapData.createNewWaypoint(flag);
 			if(!canCreateMap)
-				entityplayer.addChatMessage("flag.full");
+				entityplayer.sendTranslatedChatMessage("flag.full");
 			return canCreateMap;
 		}
 		return false;
diff --git a/src/main/java/net/minecraft/core/net/command/commands/TimeCommand.java b/src/main/java/net/minecraft/core/net/command/commands/TimeCommand.java
index 772d0c743..1c9b318f6 100644
--- a/src/main/java/net/minecraft/core/net/command/commands/TimeCommand.java
+++ b/src/main/java/net/minecraft/core/net/command/commands/TimeCommand.java
@@ -109,7 +109,7 @@ public class TimeCommand extends Command {
 			}
 		}
 
-		SeasonManager seasonManager = world.seasonManager;
+		SeasonManager seasonManager = world.getSeasonManager();
 		if (seasonManager instanceof SeasonManagerCycle)
 		{
 			SeasonManagerCycle cycleManager = (SeasonManagerCycle) seasonManager;
@@ -121,7 +121,7 @@ public class TimeCommand extends Command {
 				int yearLength = 0;
 				Integer seasonStart = null;
 
-				List<Season> seasons = world.seasonManager.getSeasons();
+				List<Season> seasons = world.getSeasonManager().getSeasons();
 				for(Season season : seasons) {
 					if(season == seasonEntry.getValue()) seasonStart = yearLength;
 					yearLength += cycleManager.getConfig().getSeasonLength(season) * Global.DAY_LENGTH_TICKS;
diff --git a/src/main/java/net/minecraft/core/net/packet/Packet3Chat.java b/src/main/java/net/minecraft/core/net/packet/Packet3Chat.java
index 8e77ba265..73bd3618c 100644
--- a/src/main/java/net/minecraft/core/net/packet/Packet3Chat.java
+++ b/src/main/java/net/minecraft/core/net/packet/Packet3Chat.java
@@ -6,72 +6,65 @@ import net.minecraft.core.util.helper.AES;
 import java.io.*;
 import java.security.Key;
 
-// Referenced classes of package net.minecraft.src:
-//            Packet, NetHandler
+public class Packet3Chat extends Packet {
+	
+	public static final String ENCRYPTION_ERROR_MESSAGE = "This crash is caused by outdated Java, please update to 8u161 or newer! If your Java version is out of date due to a technical requirement, please add the JCE Unlimited Strength Jurisdiction Policy Files to your installation. https://www.oracle.com/java/technologies/javase-jce-all-downloads.html";
+	
+	public String message;
+	public int type;
+	public boolean encrypted;
 
-public class Packet3Chat extends Packet
-{
+	public Packet3Chat() {
+		
+	}
 
-    public Packet3Chat()
-    {
-    }
+	public Packet3Chat(String string) {
+		this(string, 0, null);
+	}
 
-    public Packet3Chat(String s)
-    {
-        if(s.length() > 512)
-        {
-            s = s.substring(0, 512);
-        }
-        message = s;
-        encrypted = false;
-    }
+	public Packet3Chat(String string, Key key) {
+		this(string, 0, key);
+	}
+	
+	public Packet3Chat(String string, int type, Key key) {
+		if(string.length() > 512) {
+			string = string.substring(0, 512);
+		}
+		if(key != null) {
+			try {
+				message = AES.encrypt(string, key);
+				encrypted = true;
+			}catch (Exception e) {
+				throw new RuntimeException(ENCRYPTION_ERROR_MESSAGE, e);
+			}
+		}else {
+			this.message = string;
+			this.encrypted = false;
+		}
+		this.type = type;
+	}
 
-    public Packet3Chat(String s, Key AESKey)
-    {
-        if(s.length() > 512)
-        {
-            s = s.substring(0, 512);
-        }
-        try
-        {
-            message = AES.encrypt(s, AESKey);
-        }
-        catch (Exception e)
-        {
-        	String msg = "This crash is caused by outdated Java. Your Java version is more than five years out of date! Please update to 8u161 or newer. If your Java version is out of date due to a technical requirement, please add the JCE Unlimited Strength Jurisdiction Policy Files to your installation. https://www.oracle.com/java/technologies/javase-jce-all-downloads.html";
-            throw new RuntimeException(msg, e);
-        }
-        encrypted = true;
-    }
+	@Override
+	public void readPacketData(DataInputStream in) throws IOException {
+		type = in.readByte();
+		message = readString(in, 1024);
+		encrypted = in.readBoolean();
+	}
 
-    @Override
-	public void readPacketData(DataInputStream dis)
-        throws IOException
-    {
-        message = readString(dis, 1024);
-        encrypted = dis.readBoolean();
-    }
+	@Override
+	public void writePacketData(DataOutputStream out) throws IOException {
+		out.writeByte(type);
+		writeString(message, out);
+		out.writeBoolean(encrypted);
+	}
 
-    @Override
-	public void writePacketData(DataOutputStream dos)
-        throws IOException
-    {
-        writeString(message, dos);
-        dos.writeBoolean(encrypted);
-    }
+	@Override
+	public void processPacket(NetHandler netHandler) {
+		netHandler.handleChat(this);
+	}
 
-    @Override
-	public void processPacket(NetHandler netHandler)
-    {
-        netHandler.handleChat(this);
-    }
-
-    @Override
-	public int getPacketSize()
-    {
-        return message.length();
-    }
-
-    public String message;
-    public boolean encrypted;
+	@Override
+	public int getPacketSize() {
+		return message.length() + 1;
+	}
 }
diff --git a/src/main/java/net/minecraft/core/player/inventory/ContainerPlayerCreative.java b/src/main/java/net/minecraft/core/player/inventory/ContainerPlayerCreative.java
index e503187de..72e607dcb 100644
--- a/src/main/java/net/minecraft/core/player/inventory/ContainerPlayerCreative.java
+++ b/src/main/java/net/minecraft/core/player/inventory/ContainerPlayerCreative.java
@@ -36,7 +36,7 @@ public class ContainerPlayerCreative extends ContainerPlayer
 			int x = i % 6;
 			int y = i / 6;
 			
-			addSlot(new SlotCreative(creativeSlotsStart + i, 174 + (x * 18), 30 + (y * 18), creativeItems.get(i)));
+			addSlot(new SlotCreative(creativeSlotsStart + i, 184 + (x * 18), 30 + (y * 18), creativeItems.get(i)));
 		}
 		
 		searchPage("");
diff --git a/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java b/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java
index dcd6ba559..8eff832af 100644
--- a/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java
+++ b/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java
@@ -1 +1 @@
-package net.minecraft.core.sound;

import net.minecraft.client.util.dispatch.Dispatcher;
import net.minecraft.core.block.Block;

public class BlockSoundDispatcher
    extends Dispatcher<Block, BlockSound>
{
    private static final BlockSoundDispatcher instance = new BlockSoundDispatcher();

    public static BlockSoundDispatcher getInstance()
    {
        return instance;
    }

    private BlockSoundDispatcher()
    {
        addDispatch(Block.stone, BlockSounds.STONE);
        addDispatch(Block.basalt, BlockSounds.STONE);
        addDispatch(Block.limestone, BlockSounds.STONE);
        addDispatch(Block.granite, BlockSounds.STONE);
        addDispatch(Block.marble, BlockSounds.STONE);
        addDispatch(Block.slate, BlockSounds.STONE);
        addDispatch(Block.permafrost, BlockSounds.STONE);

        addDispatch(Block.cobbleStone, BlockSounds.STONE);
        addDispatch(Block.cobbleStoneMossy, BlockSounds.STONE);
        addDispatch(Block.cobbleBasalt, BlockSounds.STONE);
        addDispatch(Block.cobbleLimestone, BlockSounds.STONE);
        addDispatch(Block.cobbleGranite, BlockSounds.STONE);
        addDispatch(Block.cobblePermafrost, BlockSounds.STONE);

        addDispatch(Block.stonePolished, BlockSounds.STONE);
        addDispatch(Block.granitePolished, BlockSounds.STONE);
        addDispatch(Block.limestonePolished, BlockSounds.STONE);
        addDispatch(Block.basaltPolished, BlockSounds.STONE);
        addDispatch(Block.slatePolished, BlockSounds.STONE);

        addDispatch(Block.pillarMarble, BlockSounds.STONE);
        addDispatch(Block.capstoneMarble, BlockSounds.STONE);

        addDispatch(Block.sandstone, BlockSounds.STONE);

        addDispatch(Block.stoneCarved, BlockSounds.STONE);
        addDispatch(Block.graniteCarved, BlockSounds.STONE);
        addDispatch(Block.limestoneCarved, BlockSounds.STONE);
        addDispatch(Block.basaltCarved, BlockSounds.STONE);

        addDispatch(Block.planksOak, BlockSounds.WOOD);
        addDispatch(Block.planksOakPainted, BlockSounds.WOOD);

        addDispatch(Block.torchCoal, BlockSounds.WOOD);
//        addDispatch(Block.candleSoulwax, BlockSounds.CLOTH);

        addDispatch(Block.ladderOak, BlockSounds.WOOD);

        addDispatch(Block.fencePlanksOak, BlockSounds.WOOD);
        addDispatch(Block.fencePlanksOakPainted, BlockSounds.WOOD);

        addDispatch(Block.fencegatePlanksOak, BlockSounds.WOOD);
        addDispatch(Block.fencegatePlanksOakPainted, BlockSounds.WOOD);

        addDispatch(Block.bookshelfPlanksOak, BlockSounds.WOOD);

        addDispatch(Block.wool, BlockSounds.CLOTH);
        addDispatch(Block.rope, BlockSounds.CLOTH);

        addDispatch(Block.brickClay, BlockSounds.STONE);
        addDispatch(Block.brickStonePolished, BlockSounds.STONE);
        addDispatch(Block.brickStonePolishedMossy, BlockSounds.STONE);
        addDispatch(Block.brickSandstone, BlockSounds.STONE);
        addDispatch(Block.brickGold, BlockSounds.METAL);
        addDispatch(Block.brickLapis, BlockSounds.STONE);
        addDispatch(Block.brickBasalt, BlockSounds.STONE);
        addDispatch(Block.brickLimestone, BlockSounds.STONE);
        addDispatch(Block.brickGranite, BlockSounds.STONE);
        addDispatch(Block.brickMarble, BlockSounds.STONE);
        addDispatch(Block.brickSlate, BlockSounds.STONE);
        addDispatch(Block.brickStone, BlockSounds.STONE);
        addDispatch(Block.brickPermafrost, BlockSounds.STONE);
        addDispatch(Block.brickIron, BlockSounds.METAL);

        addDispatch(Block.slabPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.slabCobbleStone, BlockSounds.STONE);
        addDispatch(Block.slabSandstone, BlockSounds.STONE);
        addDispatch(Block.slabBrickStonePolished, BlockSounds.STONE);
        addDispatch(Block.slabStonePolished, BlockSounds.STONE);
        addDispatch(Block.slabBrickMarble, BlockSounds.STONE);
        addDispatch(Block.slabBrickClay, BlockSounds.STONE);
        addDispatch(Block.slabCapstoneMarble, BlockSounds.STONE);
        addDispatch(Block.slabCobbleBasalt, BlockSounds.STONE);
        addDispatch(Block.slabCobbleLimestone, BlockSounds.STONE);
        addDispatch(Block.slabCobbleGranite, BlockSounds.STONE);
        addDispatch(Block.slabBrickBasalt, BlockSounds.STONE);
        addDispatch(Block.slabBrickLimestone, BlockSounds.STONE);
        addDispatch(Block.slabBrickGranite, BlockSounds.STONE);
        addDispatch(Block.slabPlanksOakPainted, BlockSounds.WOOD);
        addDispatch(Block.slabBrickSlate, BlockSounds.STONE);
        addDispatch(Block.slabBrickStone, BlockSounds.STONE);
        addDispatch(Block.slabGranitePolished, BlockSounds.STONE);
        addDispatch(Block.slabLimestonePolished, BlockSounds.STONE);
        addDispatch(Block.slabBasaltPolished, BlockSounds.STONE);

        addDispatch(Block.stairsPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.stairsCobbleStone, BlockSounds.STONE);
        addDispatch(Block.stairsBrickStonePolished, BlockSounds.STONE);
        addDispatch(Block.stairsBrickMarble, BlockSounds.STONE);
        addDispatch(Block.stairsCobbleBasalt, BlockSounds.STONE);
        addDispatch(Block.stairsCobbleLimestone, BlockSounds.STONE);
        addDispatch(Block.stairsCobbleGranite, BlockSounds.STONE);
        addDispatch(Block.stairsBrickBasalt, BlockSounds.STONE);
        addDispatch(Block.stairsBrickLimestone, BlockSounds.STONE);
        addDispatch(Block.stairsBrickGranite, BlockSounds.STONE);
        addDispatch(Block.stairsBrickClay, BlockSounds.STONE);
        addDispatch(Block.stairsPlanksOakPainted, BlockSounds.WOOD);
        addDispatch(Block.stairsBrickSlate, BlockSounds.STONE);
        addDispatch(Block.stairsBrickStone, BlockSounds.STONE);

        addDispatch(Block.obsidian, BlockSounds.STONE);

        addDispatch(Block.glass, BlockSounds.GLASS);
        addDispatch(Block.glassTinted, BlockSounds.GLASS);

        addDispatch(Block.grass, BlockSounds.GRASS);
        addDispatch(Block.grassRetro, BlockSounds.GRASS);
        addDispatch(Block.grassScorched, BlockSounds.GRASS);

        addDispatch(Block.pathDirt, BlockSounds.GRAVEL);

        addDispatch(Block.dirt, BlockSounds.GRAVEL);
        addDispatch(Block.dirtScorched, BlockSounds.GRAVEL);
        addDispatch(Block.dirtScorchedRich, BlockSounds.GRAVEL);

        addDispatch(Block.mud, BlockSounds.GRAVEL);
        addDispatch(Block.mudBaked, BlockSounds.STONE);

        addDispatch(Block.spongeDry, BlockSounds.GRASS);
        addDispatch(Block.spongeWet, BlockSounds.GRASS);

        addDispatch(Block.mossStone, BlockSounds.GRASS);
        addDispatch(Block.mossBasalt, BlockSounds.GRASS);
        addDispatch(Block.mossLimestone, BlockSounds.GRASS);
        addDispatch(Block.mossGranite, BlockSounds.GRASS);

        addDispatch(Block.sand, BlockSounds.SAND);
        addDispatch(Block.gravel, BlockSounds.GRAVEL);

        addDispatch(Block.bedrock, BlockSounds.STONE);

        addDispatch(Block.fluidWaterFlowing, BlockSounds.DEFAULT);
        addDispatch(Block.fluidWaterStill, BlockSounds.DEFAULT);
        addDispatch(Block.fluidLavaFlowing, BlockSounds.DEFAULT);
        addDispatch(Block.fluidLavaStill, BlockSounds.DEFAULT);

        addDispatch(Block.logOak, BlockSounds.WOOD);
        addDispatch(Block.logPine, BlockSounds.WOOD);
        addDispatch(Block.logBirch, BlockSounds.WOOD);
        addDispatch(Block.logCherry, BlockSounds.WOOD);
        addDispatch(Block.logEucalyptus, BlockSounds.WOOD);
        addDispatch(Block.logOakMossy, BlockSounds.WOOD);

        addDispatch(Block.leavesOak, BlockSounds.GRASS);
        addDispatch(Block.leavesOakRetro, BlockSounds.GRASS);
        addDispatch(Block.leavesPine, BlockSounds.GRASS);
        addDispatch(Block.leavesBirch, BlockSounds.GRASS);
        addDispatch(Block.leavesCherry, BlockSounds.GRASS);
        addDispatch(Block.leavesEucalyptus, BlockSounds.GRASS);
        addDispatch(Block.leavesShrub, BlockSounds.GRASS);
        addDispatch(Block.leavesCherryFlowering, BlockSounds.GRASS);
        addDispatch(Block.leavesCacao, BlockSounds.GRASS);
        addDispatch(Block.leavesCaatinga, BlockSounds.GRASS);

        addDispatch(Block.saplingOak, BlockSounds.GRASS);
        addDispatch(Block.saplingOakRetro, BlockSounds.GRASS);
        addDispatch(Block.saplingPine, BlockSounds.GRASS);
        addDispatch(Block.saplingBirch, BlockSounds.GRASS);
        addDispatch(Block.saplingCherry, BlockSounds.GRASS);
        addDispatch(Block.saplingEucalyptus, BlockSounds.GRASS);
        addDispatch(Block.saplingShrub, BlockSounds.GRASS);
        addDispatch(Block.saplingCacao, BlockSounds.GRASS);

        addDispatch(Block.tallgrass, BlockSounds.GRASS);
        addDispatch(Block.tallgrassFern, BlockSounds.GRASS);
        addDispatch(Block.deadbush, BlockSounds.GRASS);
        addDispatch(Block.spinifex, BlockSounds.GRASS);
        addDispatch(Block.algae, BlockSounds.GRASS);

        addDispatch(Block.flowerYellow, BlockSounds.GRASS);
        addDispatch(Block.flowerRed, BlockSounds.GRASS);

        addDispatch(Block.mushroomBrown, BlockSounds.GRASS);
        addDispatch(Block.mushroomRed, BlockSounds.GRASS);

        addDispatch(Block.oreCoalStone, BlockSounds.STONE);
        addDispatch(Block.oreCoalBasalt, BlockSounds.STONE);
        addDispatch(Block.oreCoalLimestone, BlockSounds.STONE);
        addDispatch(Block.oreCoalGranite, BlockSounds.STONE);

        addDispatch(Block.oreIronStone, BlockSounds.STONE);
        addDispatch(Block.oreIronBasalt, BlockSounds.STONE);
        addDispatch(Block.oreIronLimestone, BlockSounds.STONE);
        addDispatch(Block.oreIronGranite, BlockSounds.STONE);

        addDispatch(Block.oreGoldStone, BlockSounds.STONE);
        addDispatch(Block.oreGoldBasalt, BlockSounds.STONE);
        addDispatch(Block.oreGoldLimestone, BlockSounds.STONE);
        addDispatch(Block.oreGoldGranite, BlockSounds.STONE);

        addDispatch(Block.oreLapisStone, BlockSounds.STONE);
        addDispatch(Block.oreLapisBasalt, BlockSounds.STONE);
        addDispatch(Block.oreLapisLimestone, BlockSounds.STONE);
        addDispatch(Block.oreLapisGranite, BlockSounds.STONE);

        addDispatch(Block.oreRedstoneStone, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneBasalt, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneLimestone, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneGranite, BlockSounds.STONE);

        addDispatch(Block.oreRedstoneGlowingStone, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneGlowingBasalt, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneGlowingLimestone, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneGlowingGranite, BlockSounds.STONE);

        addDispatch(Block.oreDiamondStone, BlockSounds.STONE);
        addDispatch(Block.oreDiamondBasalt, BlockSounds.STONE);
        addDispatch(Block.oreDiamondLimestone, BlockSounds.STONE);
        addDispatch(Block.oreDiamondGranite, BlockSounds.STONE);

        addDispatch(Block.oreNethercoalNetherrack, BlockSounds.STONE);

        addDispatch(Block.blockCoal, BlockSounds.STONE);
        addDispatch(Block.blockIron, BlockSounds.METAL);
        addDispatch(Block.blockGold, BlockSounds.METAL);
        addDispatch(Block.blockLapis, BlockSounds.STONE);
        addDispatch(Block.blockRedstone, BlockSounds.STONE);
        addDispatch(Block.blockDiamond, BlockSounds.STONE);
        addDispatch(Block.blockNetherCoal, BlockSounds.STONE);
        addDispatch(Block.blockSteel, BlockSounds.METAL);
        addDispatch(Block.blockQuartz, BlockSounds.STONE);
        addDispatch(Block.blockOlivine, BlockSounds.STONE);
        addDispatch(Block.blockCharcoal, BlockSounds.STONE);

        addDispatch(Block.wireRedstone, BlockSounds.STONE);

        addDispatch(Block.torchRedstoneIdle, BlockSounds.WOOD);
        addDispatch(Block.torchRedstoneActive, BlockSounds.WOOD);

        addDispatch(Block.buttonStone, BlockSounds.STONE);

        addDispatch(Block.leverCobbleStone, BlockSounds.STONE);

        addDispatch(Block.pressureplateStone, BlockSounds.STONE);
        addDispatch(Block.pressureplatePlanksOak, BlockSounds.WOOD);
        addDispatch(Block.pressureplateCobbleStone, BlockSounds.STONE);

        addDispatch(Block.motionsensorIdle, BlockSounds.STONE);
        addDispatch(Block.motionsensorActive, BlockSounds.STONE);

        addDispatch(Block.repeaterIdle, BlockSounds.STONE);
        addDispatch(Block.repeaterActive, BlockSounds.STONE);

        addDispatch(Block.pistonBase, BlockSounds.STONE);
        addDispatch(Block.pistonBaseSticky, BlockSounds.STONE);
        addDispatch(Block.pistonHead, BlockSounds.STONE);
        addDispatch(Block.pistonMoving, BlockSounds.STONE);

        addDispatch(Block.noteblock, BlockSounds.WOOD);

        addDispatch(Block.rail, BlockSounds.METAL);
        addDispatch(Block.railPowered, BlockSounds.METAL);
        addDispatch(Block.railDetector, BlockSounds.METAL);

        addDispatch(Block.spikes, BlockSounds.METAL);

        addDispatch(Block.dispenserCobbleStone, BlockSounds.STONE);

        addDispatch(Block.trapdoorPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.trapdoorPlanksOakPainted, BlockSounds.WOOD);
        addDispatch(Block.trapdoorIron, BlockSounds.METAL);
        addDispatch(Block.trapdoorGlass, BlockSounds.GLASS);

        addDispatch(Block.tnt, BlockSounds.GRASS);

        addDispatch(Block.doorPlanksOakBottom, BlockSounds.WOOD);
        addDispatch(Block.doorPlanksOakTop, BlockSounds.WOOD);
        addDispatch(Block.doorIronBottom, BlockSounds.METAL);
        addDispatch(Block.doorIronTop, BlockSounds.METAL);
        addDispatch(Block.doorPlanksOakPaintedBottom, BlockSounds.WOOD);
        addDispatch(Block.doorPlanksOakPaintedTop, BlockSounds.WOOD);
        addDispatch(Block.doorGlassBottom, BlockSounds.GLASS);
        addDispatch(Block.doorGlassTop, BlockSounds.GLASS);

        addDispatch(Block.mesh, BlockSounds.METAL);
        addDispatch(Block.meshGold, BlockSounds.METAL);

        addDispatch(Block.bed, BlockSounds.WOOD);
        addDispatch(Block.seat, BlockSounds.WOOD);

        addDispatch(Block.cobweb, BlockSounds.CLOTH);

        addDispatch(Block.fire, BlockSounds.FIRE);
        addDispatch(Block.brazierInactive, BlockSounds.METAL);
        addDispatch(Block.brazierActive, BlockSounds.FIRE);

        addDispatch(Block.mobspawner, BlockSounds.METAL);
        addDispatch(Block.mobspawnerDeactivated, BlockSounds.METAL);

        addDispatch(Block.workbench, BlockSounds.WOOD);

        addDispatch(Block.furnaceStoneIdle, BlockSounds.STONE);
        addDispatch(Block.furnaceStoneActive, BlockSounds.STONE);
        addDispatch(Block.furnaceBlastIdle, BlockSounds.METAL);
        addDispatch(Block.furnaceBlastActive, BlockSounds.METAL);

        addDispatch(Block.trommelIdle, BlockSounds.STONE);
        addDispatch(Block.trommelActive, BlockSounds.STONE);

        addDispatch(Block.chestLegacy, BlockSounds.WOOD);
        addDispatch(Block.chestLegacyPainted, BlockSounds.WOOD);
        addDispatch(Block.chestPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.chestPlanksOakPainted, BlockSounds.WOOD);

        addDispatch(Block.basket, BlockSounds.CLOTH);

        addDispatch(Block.cropsWheat, BlockSounds.GRASS);
        addDispatch(Block.cropsPumpkin, BlockSounds.WOOD);

        addDispatch(Block.farmlandDirt, BlockSounds.GRAVEL);

        addDispatch(Block.signPostPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.signWallPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.flag, BlockSounds.WOOD);

        addDispatch(Block.layerSnow, BlockSounds.CLOTH);
        addDispatch(Block.layerLeavesOak, BlockSounds.GRASS);
        addDispatch(Block.layerSlate, BlockSounds.STONE);

        addDispatch(Block.ice, BlockSounds.GLASS);
        addDispatch(Block.permaice, BlockSounds.GLASS);

        addDispatch(Block.blockSnow, BlockSounds.CLOTH);

        addDispatch(Block.cactus, BlockSounds.CLOTH);

        addDispatch(Block.blockClay, BlockSounds.GRAVEL);

        addDispatch(Block.sugarcane, BlockSounds.GRASS);
        addDispatch(Block.blockSugarcane, BlockSounds.GRASS);
        addDispatch(Block.blockSugarcaneBaked, BlockSounds.GRASS);

        addDispatch(Block.jukebox, BlockSounds.WOOD);

        addDispatch(Block.pumpkin, BlockSounds.WOOD);
        addDispatch(Block.pumpkinCarvedIdle, BlockSounds.WOOD);
        addDispatch(Block.pumpkinCarvedActive, BlockSounds.WOOD);

        addDispatch(Block.netherrack, BlockSounds.STONE);
        addDispatch(Block.netherrackIgneous, BlockSounds.STONE);

        addDispatch(Block.soulsand, BlockSounds.SAND);

        addDispatch(Block.glowstone, BlockSounds.GLASS);

        addDispatch(Block.portalNether, BlockSounds.GLASS);
        addDispatch(Block.portalParadise, BlockSounds.GLASS);

        addDispatch(Block.cake, BlockSounds.CLOTH);

        addDispatch(Block.lampIdle, BlockSounds.GLASS);
        addDispatch(Block.lampActive, BlockSounds.GLASS);

        addDispatch(Block.lanternFireflyGreen, BlockSounds.GLASS);
        addDispatch(Block.lanternFireflyBlue, BlockSounds.GLASS);
        addDispatch(Block.lanternFireflyOrange, BlockSounds.GLASS);
        addDispatch(Block.lanternFireflyRed, BlockSounds.GLASS);
        addDispatch(Block.jarGlass, BlockSounds.GLASS);

        addDispatch(Block.overlayPebbles, BlockSounds.STONE);

        addDispatch(Block.fenceChainlink, BlockSounds.METAL);
        addDispatch(Block.fencePaperWall, BlockSounds.CLOTH);
        addDispatch(Block.paperWall, BlockSounds.CLOTH);

        validate();
    }

    @Override
    protected BlockSound getDefault()
    {
        return BlockSounds.DEFAULT;
    }

    private void validate()
    {
        for (Block block : Block.blocksList)
        {
            if (block != null && dispatches.get(block) == null)
            {
                throw new RuntimeException("Block " + block.getKey() + " has no assigned sound!");
            }
        }
    }
}
\ No newline at end of file
+package net.minecraft.core.sound;

import net.minecraft.client.util.dispatch.Dispatcher;
import net.minecraft.core.block.Block;

public class BlockSoundDispatcher
    extends Dispatcher<Block, BlockSound>
{
    private static final BlockSoundDispatcher instance = new BlockSoundDispatcher();

    public static BlockSoundDispatcher getInstance()
    {
        return instance;
    }

    private BlockSoundDispatcher()
    {
        addDispatch(Block.stone, BlockSounds.STONE);
        addDispatch(Block.basalt, BlockSounds.STONE);
        addDispatch(Block.limestone, BlockSounds.STONE);
        addDispatch(Block.granite, BlockSounds.STONE);
        addDispatch(Block.marble, BlockSounds.STONE);
        addDispatch(Block.slate, BlockSounds.STONE);
        addDispatch(Block.permafrost, BlockSounds.STONE);

        addDispatch(Block.cobbleStone, BlockSounds.STONE);
        addDispatch(Block.cobbleStoneMossy, BlockSounds.STONE);
        addDispatch(Block.cobbleBasalt, BlockSounds.STONE);
        addDispatch(Block.cobbleLimestone, BlockSounds.STONE);
        addDispatch(Block.cobbleGranite, BlockSounds.STONE);
        addDispatch(Block.cobblePermafrost, BlockSounds.STONE);

        addDispatch(Block.stonePolished, BlockSounds.STONE);
        addDispatch(Block.granitePolished, BlockSounds.STONE);
        addDispatch(Block.limestonePolished, BlockSounds.STONE);
        addDispatch(Block.basaltPolished, BlockSounds.STONE);
        addDispatch(Block.slatePolished, BlockSounds.STONE);

        addDispatch(Block.pillarMarble, BlockSounds.STONE);
        addDispatch(Block.capstoneMarble, BlockSounds.STONE);

        addDispatch(Block.sandstone, BlockSounds.STONE);

        addDispatch(Block.stoneCarved, BlockSounds.STONE);
        addDispatch(Block.graniteCarved, BlockSounds.STONE);
        addDispatch(Block.limestoneCarved, BlockSounds.STONE);
        addDispatch(Block.basaltCarved, BlockSounds.STONE);

        addDispatch(Block.planksOak, BlockSounds.WOOD);
        addDispatch(Block.planksOakPainted, BlockSounds.WOOD);

        addDispatch(Block.torchCoal, BlockSounds.WOOD);
//        addDispatch(Block.candleSoulwax, BlockSounds.CLOTH);

        addDispatch(Block.ladderOak, BlockSounds.WOOD);

        addDispatch(Block.fencePlanksOak, BlockSounds.WOOD);
        addDispatch(Block.fencePlanksOakPainted, BlockSounds.WOOD);

        addDispatch(Block.fencegatePlanksOak, BlockSounds.WOOD);
        addDispatch(Block.fencegatePlanksOakPainted, BlockSounds.WOOD);

        addDispatch(Block.bookshelfPlanksOak, BlockSounds.WOOD);

        addDispatch(Block.wool, BlockSounds.CLOTH);
        addDispatch(Block.rope, BlockSounds.CLOTH);

        addDispatch(Block.brickClay, BlockSounds.STONE);
        addDispatch(Block.brickStonePolished, BlockSounds.STONE);
        addDispatch(Block.brickStonePolishedMossy, BlockSounds.STONE);
        addDispatch(Block.brickSandstone, BlockSounds.STONE);
        addDispatch(Block.brickGold, BlockSounds.METAL);
        addDispatch(Block.brickLapis, BlockSounds.STONE);
        addDispatch(Block.brickBasalt, BlockSounds.STONE);
        addDispatch(Block.brickLimestone, BlockSounds.STONE);
        addDispatch(Block.brickGranite, BlockSounds.STONE);
        addDispatch(Block.brickMarble, BlockSounds.STONE);
        addDispatch(Block.brickSlate, BlockSounds.STONE);
        addDispatch(Block.brickStone, BlockSounds.STONE);
        addDispatch(Block.brickPermafrost, BlockSounds.STONE);
        addDispatch(Block.brickIron, BlockSounds.METAL);

        addDispatch(Block.slabPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.slabCobbleStone, BlockSounds.STONE);
        addDispatch(Block.slabSandstone, BlockSounds.STONE);
        addDispatch(Block.slabBrickStonePolished, BlockSounds.STONE);
        addDispatch(Block.slabStonePolished, BlockSounds.STONE);
        addDispatch(Block.slabBrickMarble, BlockSounds.STONE);
        addDispatch(Block.slabBrickClay, BlockSounds.STONE);
        addDispatch(Block.slabCapstoneMarble, BlockSounds.STONE);
        addDispatch(Block.slabCobbleBasalt, BlockSounds.STONE);
        addDispatch(Block.slabCobbleLimestone, BlockSounds.STONE);
        addDispatch(Block.slabCobbleGranite, BlockSounds.STONE);
        addDispatch(Block.slabBrickBasalt, BlockSounds.STONE);
        addDispatch(Block.slabBrickLimestone, BlockSounds.STONE);
        addDispatch(Block.slabBrickGranite, BlockSounds.STONE);
        addDispatch(Block.slabPlanksOakPainted, BlockSounds.WOOD);
        addDispatch(Block.slabBrickSlate, BlockSounds.STONE);
        addDispatch(Block.slabBrickStone, BlockSounds.STONE);
        addDispatch(Block.slabGranitePolished, BlockSounds.STONE);
        addDispatch(Block.slabLimestonePolished, BlockSounds.STONE);
        addDispatch(Block.slabBasaltPolished, BlockSounds.STONE);

        addDispatch(Block.stairsPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.stairsCobbleStone, BlockSounds.STONE);
        addDispatch(Block.stairsBrickStonePolished, BlockSounds.STONE);
        addDispatch(Block.stairsBrickMarble, BlockSounds.STONE);
        addDispatch(Block.stairsCobbleBasalt, BlockSounds.STONE);
        addDispatch(Block.stairsCobbleLimestone, BlockSounds.STONE);
        addDispatch(Block.stairsCobbleGranite, BlockSounds.STONE);
        addDispatch(Block.stairsBrickBasalt, BlockSounds.STONE);
        addDispatch(Block.stairsBrickLimestone, BlockSounds.STONE);
        addDispatch(Block.stairsBrickGranite, BlockSounds.STONE);
        addDispatch(Block.stairsBrickClay, BlockSounds.STONE);
        addDispatch(Block.stairsPlanksOakPainted, BlockSounds.WOOD);
        addDispatch(Block.stairsBrickSlate, BlockSounds.STONE);
        addDispatch(Block.stairsBrickStone, BlockSounds.STONE);

        addDispatch(Block.obsidian, BlockSounds.STONE);

        addDispatch(Block.glass, BlockSounds.GLASS);
        addDispatch(Block.glassTinted, BlockSounds.GLASS);

        addDispatch(Block.grass, BlockSounds.GRASS);
        addDispatch(Block.grassRetro, BlockSounds.GRASS);
        addDispatch(Block.grassScorched, BlockSounds.GRASS);

        addDispatch(Block.pathDirt, BlockSounds.GRAVEL);

        addDispatch(Block.dirt, BlockSounds.GRAVEL);
        addDispatch(Block.dirtScorched, BlockSounds.GRAVEL);
        addDispatch(Block.dirtScorchedRich, BlockSounds.GRAVEL);

        addDispatch(Block.mud, BlockSounds.GRAVEL);
        addDispatch(Block.mudBaked, BlockSounds.STONE);

        addDispatch(Block.spongeDry, BlockSounds.GRASS);
        addDispatch(Block.spongeWet, BlockSounds.GRASS);

        addDispatch(Block.mossStone, BlockSounds.GRASS);
        addDispatch(Block.mossBasalt, BlockSounds.GRASS);
        addDispatch(Block.mossLimestone, BlockSounds.GRASS);
        addDispatch(Block.mossGranite, BlockSounds.GRASS);

        addDispatch(Block.sand, BlockSounds.SAND);
        addDispatch(Block.gravel, BlockSounds.GRAVEL);

        addDispatch(Block.bedrock, BlockSounds.STONE);

        addDispatch(Block.fluidWaterFlowing, BlockSounds.DEFAULT);
        addDispatch(Block.fluidWaterStill, BlockSounds.DEFAULT);
        addDispatch(Block.fluidLavaFlowing, BlockSounds.DEFAULT);
        addDispatch(Block.fluidLavaStill, BlockSounds.DEFAULT);

        addDispatch(Block.logOak, BlockSounds.WOOD);
        addDispatch(Block.logPine, BlockSounds.WOOD);
        addDispatch(Block.logBirch, BlockSounds.WOOD);
        addDispatch(Block.logCherry, BlockSounds.WOOD);
        addDispatch(Block.logEucalyptus, BlockSounds.WOOD);
        addDispatch(Block.logOakMossy, BlockSounds.WOOD);

        addDispatch(Block.leavesOak, BlockSounds.GRASS);
        addDispatch(Block.leavesOakRetro, BlockSounds.GRASS);
        addDispatch(Block.leavesPine, BlockSounds.GRASS);
        addDispatch(Block.leavesBirch, BlockSounds.GRASS);
        addDispatch(Block.leavesCherry, BlockSounds.GRASS);
        addDispatch(Block.leavesEucalyptus, BlockSounds.GRASS);
        addDispatch(Block.leavesShrub, BlockSounds.GRASS);
        addDispatch(Block.leavesCherryFlowering, BlockSounds.GRASS);
        addDispatch(Block.leavesCacao, BlockSounds.GRASS);
        addDispatch(Block.leavesCaatinga, BlockSounds.GRASS);

        addDispatch(Block.saplingOak, BlockSounds.GRASS);
        addDispatch(Block.saplingOakRetro, BlockSounds.GRASS);
        addDispatch(Block.saplingPine, BlockSounds.GRASS);
        addDispatch(Block.saplingBirch, BlockSounds.GRASS);
        addDispatch(Block.saplingCherry, BlockSounds.GRASS);
        addDispatch(Block.saplingEucalyptus, BlockSounds.GRASS);
        addDispatch(Block.saplingShrub, BlockSounds.GRASS);
        addDispatch(Block.saplingCacao, BlockSounds.GRASS);

        addDispatch(Block.tallgrass, BlockSounds.GRASS);
        addDispatch(Block.tallgrassFern, BlockSounds.GRASS);
        addDispatch(Block.deadbush, BlockSounds.GRASS);
        addDispatch(Block.spinifex, BlockSounds.GRASS);
        addDispatch(Block.algae, BlockSounds.GRASS);

        addDispatch(Block.flowerYellow, BlockSounds.GRASS);
        addDispatch(Block.flowerRed, BlockSounds.GRASS);

        addDispatch(Block.flowerPurple, BlockSounds.GRASS);
        addDispatch(Block.flowerPink, BlockSounds.GRASS);
        addDispatch(Block.flowerLightBlue, BlockSounds.GRASS);

        addDispatch(Block.mushroomBrown, BlockSounds.GRASS);
        addDispatch(Block.mushroomRed, BlockSounds.GRASS);

        addDispatch(Block.oreCoalStone, BlockSounds.STONE);
        addDispatch(Block.oreCoalBasalt, BlockSounds.STONE);
        addDispatch(Block.oreCoalLimestone, BlockSounds.STONE);
        addDispatch(Block.oreCoalGranite, BlockSounds.STONE);

        addDispatch(Block.oreIronStone, BlockSounds.STONE);
        addDispatch(Block.oreIronBasalt, BlockSounds.STONE);
        addDispatch(Block.oreIronLimestone, BlockSounds.STONE);
        addDispatch(Block.oreIronGranite, BlockSounds.STONE);

        addDispatch(Block.oreGoldStone, BlockSounds.STONE);
        addDispatch(Block.oreGoldBasalt, BlockSounds.STONE);
        addDispatch(Block.oreGoldLimestone, BlockSounds.STONE);
        addDispatch(Block.oreGoldGranite, BlockSounds.STONE);

        addDispatch(Block.oreLapisStone, BlockSounds.STONE);
        addDispatch(Block.oreLapisBasalt, BlockSounds.STONE);
        addDispatch(Block.oreLapisLimestone, BlockSounds.STONE);
        addDispatch(Block.oreLapisGranite, BlockSounds.STONE);

        addDispatch(Block.oreRedstoneStone, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneBasalt, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneLimestone, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneGranite, BlockSounds.STONE);

        addDispatch(Block.oreRedstoneGlowingStone, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneGlowingBasalt, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneGlowingLimestone, BlockSounds.STONE);
        addDispatch(Block.oreRedstoneGlowingGranite, BlockSounds.STONE);

        addDispatch(Block.oreDiamondStone, BlockSounds.STONE);
        addDispatch(Block.oreDiamondBasalt, BlockSounds.STONE);
        addDispatch(Block.oreDiamondLimestone, BlockSounds.STONE);
        addDispatch(Block.oreDiamondGranite, BlockSounds.STONE);

        addDispatch(Block.oreNethercoalNetherrack, BlockSounds.STONE);

        addDispatch(Block.blockCoal, BlockSounds.STONE);
        addDispatch(Block.blockIron, BlockSounds.METAL);
        addDispatch(Block.blockGold, BlockSounds.METAL);
        addDispatch(Block.blockLapis, BlockSounds.STONE);
        addDispatch(Block.blockRedstone, BlockSounds.STONE);
        addDispatch(Block.blockDiamond, BlockSounds.STONE);
        addDispatch(Block.blockNetherCoal, BlockSounds.STONE);
        addDispatch(Block.blockSteel, BlockSounds.METAL);
        addDispatch(Block.blockQuartz, BlockSounds.STONE);
        addDispatch(Block.blockOlivine, BlockSounds.STONE);
        addDispatch(Block.blockCharcoal, BlockSounds.STONE);

        addDispatch(Block.wireRedstone, BlockSounds.STONE);

        addDispatch(Block.torchRedstoneIdle, BlockSounds.WOOD);
        addDispatch(Block.torchRedstoneActive, BlockSounds.WOOD);

        addDispatch(Block.buttonStone, BlockSounds.STONE);

        addDispatch(Block.leverCobbleStone, BlockSounds.STONE);

        addDispatch(Block.pressureplateStone, BlockSounds.STONE);
        addDispatch(Block.pressureplatePlanksOak, BlockSounds.WOOD);
        addDispatch(Block.pressureplateCobbleStone, BlockSounds.STONE);

        addDispatch(Block.motionsensorIdle, BlockSounds.STONE);
        addDispatch(Block.motionsensorActive, BlockSounds.STONE);

        addDispatch(Block.repeaterIdle, BlockSounds.STONE);
        addDispatch(Block.repeaterActive, BlockSounds.STONE);

        addDispatch(Block.pistonBase, BlockSounds.STONE);
        addDispatch(Block.pistonBaseSticky, BlockSounds.STONE);
        addDispatch(Block.pistonHead, BlockSounds.STONE);
        addDispatch(Block.pistonMoving, BlockSounds.STONE);

        addDispatch(Block.noteblock, BlockSounds.WOOD);

        addDispatch(Block.rail, BlockSounds.METAL);
        addDispatch(Block.railPowered, BlockSounds.METAL);
        addDispatch(Block.railDetector, BlockSounds.METAL);

        addDispatch(Block.spikes, BlockSounds.METAL);

        addDispatch(Block.dispenserCobbleStone, BlockSounds.STONE);

        addDispatch(Block.trapdoorPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.trapdoorPlanksOakPainted, BlockSounds.WOOD);
        addDispatch(Block.trapdoorIron, BlockSounds.METAL);
        addDispatch(Block.trapdoorGlass, BlockSounds.GLASS);

        addDispatch(Block.tnt, BlockSounds.GRASS);

        addDispatch(Block.doorPlanksOakBottom, BlockSounds.WOOD);
        addDispatch(Block.doorPlanksOakTop, BlockSounds.WOOD);
        addDispatch(Block.doorIronBottom, BlockSounds.METAL);
        addDispatch(Block.doorIronTop, BlockSounds.METAL);
        addDispatch(Block.doorPlanksOakPaintedBottom, BlockSounds.WOOD);
        addDispatch(Block.doorPlanksOakPaintedTop, BlockSounds.WOOD);
        addDispatch(Block.doorGlassBottom, BlockSounds.GLASS);
        addDispatch(Block.doorGlassTop, BlockSounds.GLASS);

        addDispatch(Block.mesh, BlockSounds.METAL);
        addDispatch(Block.meshGold, BlockSounds.METAL);

        addDispatch(Block.bed, BlockSounds.WOOD);
        addDispatch(Block.seat, BlockSounds.WOOD);

        addDispatch(Block.cobweb, BlockSounds.CLOTH);

        addDispatch(Block.fire, BlockSounds.FIRE);
        addDispatch(Block.brazierInactive, BlockSounds.METAL);
        addDispatch(Block.brazierActive, BlockSounds.FIRE);

        addDispatch(Block.mobspawner, BlockSounds.METAL);
        addDispatch(Block.mobspawnerDeactivated, BlockSounds.METAL);

        addDispatch(Block.workbench, BlockSounds.WOOD);

        addDispatch(Block.furnaceStoneIdle, BlockSounds.STONE);
        addDispatch(Block.furnaceStoneActive, BlockSounds.STONE);
        addDispatch(Block.furnaceBlastIdle, BlockSounds.METAL);
        addDispatch(Block.furnaceBlastActive, BlockSounds.METAL);

        addDispatch(Block.trommelIdle, BlockSounds.STONE);
        addDispatch(Block.trommelActive, BlockSounds.STONE);

        addDispatch(Block.chestLegacy, BlockSounds.WOOD);
        addDispatch(Block.chestLegacyPainted, BlockSounds.WOOD);
        addDispatch(Block.chestPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.chestPlanksOakPainted, BlockSounds.WOOD);

        addDispatch(Block.basket, BlockSounds.CLOTH);

        addDispatch(Block.cropsWheat, BlockSounds.GRASS);
        addDispatch(Block.cropsPumpkin, BlockSounds.WOOD);

        addDispatch(Block.farmlandDirt, BlockSounds.GRAVEL);

        addDispatch(Block.signPostPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.signWallPlanksOak, BlockSounds.WOOD);
        addDispatch(Block.flag, BlockSounds.WOOD);

        addDispatch(Block.layerSnow, BlockSounds.CLOTH);
        addDispatch(Block.layerLeavesOak, BlockSounds.GRASS);
        addDispatch(Block.layerSlate, BlockSounds.STONE);

        addDispatch(Block.ice, BlockSounds.GLASS);
        addDispatch(Block.permaice, BlockSounds.GLASS);

        addDispatch(Block.blockSnow, BlockSounds.CLOTH);

        addDispatch(Block.cactus, BlockSounds.CLOTH);

        addDispatch(Block.blockClay, BlockSounds.GRAVEL);

        addDispatch(Block.sugarcane, BlockSounds.GRASS);
        addDispatch(Block.blockSugarcane, BlockSounds.GRASS);
        addDispatch(Block.blockSugarcaneBaked, BlockSounds.GRASS);

        addDispatch(Block.jukebox, BlockSounds.WOOD);

        addDispatch(Block.pumpkin, BlockSounds.WOOD);
        addDispatch(Block.pumpkinCarvedIdle, BlockSounds.WOOD);
        addDispatch(Block.pumpkinCarvedActive, BlockSounds.WOOD);

        addDispatch(Block.netherrack, BlockSounds.STONE);
        addDispatch(Block.netherrackIgneous, BlockSounds.STONE);

        addDispatch(Block.soulsand, BlockSounds.SAND);

        addDispatch(Block.glowstone, BlockSounds.GLASS);

        addDispatch(Block.portalNether, BlockSounds.GLASS);
        addDispatch(Block.portalParadise, BlockSounds.GLASS);

        addDispatch(Block.cake, BlockSounds.CLOTH);

        addDispatch(Block.lampIdle, BlockSounds.GLASS);
        addDispatch(Block.lampActive, BlockSounds.GLASS);

        addDispatch(Block.lanternFireflyGreen, BlockSounds.GLASS);
        addDispatch(Block.lanternFireflyBlue, BlockSounds.GLASS);
        addDispatch(Block.lanternFireflyOrange, BlockSounds.GLASS);
        addDispatch(Block.lanternFireflyRed, BlockSounds.GLASS);
        addDispatch(Block.jarGlass, BlockSounds.GLASS);

        addDispatch(Block.overlayPebbles, BlockSounds.STONE);

        addDispatch(Block.fenceChainlink, BlockSounds.METAL);
        addDispatch(Block.fencePaperWall, BlockSounds.CLOTH);
        addDispatch(Block.paperWall, BlockSounds.CLOTH);

        validate();
    }

    @Override
    protected BlockSound getDefault()
    {
        return BlockSounds.DEFAULT;
    }

    private void validate()
    {
        for (Block block : Block.blocksList)
        {
            if (block != null && dispatches.get(block) == null)
            {
                throw new RuntimeException("Block " + block.getKey() + " has no assigned sound!");
            }
        }
    }
}
\ No newline at end of file
diff --git a/src/main/java/net/minecraft/core/world/World.java b/src/main/java/net/minecraft/core/world/World.java
index 59cbacaac..caebad2d4 100644
--- a/src/main/java/net/minecraft/core/world/World.java
+++ b/src/main/java/net/minecraft/core/world/World.java
@@ -119,7 +119,7 @@ public class World implements WorldSource {
 
     public AuroraProvider auroraProvider;
 
-    public final SeasonManager seasonManager;
+    private final SeasonManager seasonManager;
 
     public final WeatherManager weatherManager;
 
@@ -414,6 +414,7 @@ public class World implements WorldSource {
         return Block.getBlock(getBlockId(x, y, z));
     }
 
+    @Override
     public double getBlockTemperature(int x, int z)
     {
         if(x < 0xfe17b800 || z < 0xfe17b800 || x >= 0x1e84800 || z > 0x1e84800)
@@ -445,7 +446,7 @@ public class World implements WorldSource {
             return temperature;
         }
     }
-    
+    @Override
     public double getBlockHumidity(int x, int z)
     {
         if(x < 0xfe17b800 || z < 0xfe17b800 || x >= 0x1e84800 || z > 0x1e84800)
@@ -477,6 +478,12 @@ public class World implements WorldSource {
             return humidity;
         }
     }
+
+    @Override
+    public SeasonManager getSeasonManager() {
+        return seasonManager;
+    }
+
     public double getBlockVariety(int x, int z)
     {
         if(x < 0xfe17b800 || z < 0xfe17b800 || x >= 0x1e84800 || z > 0x1e84800)
@@ -508,7 +515,8 @@ public class World implements WorldSource {
             return variety;
         }
     }
-    
+
+    @Override
     public Biome getBlockBiome(int x, int y, int z)
     {
         if(x < 0xfe17b800 || z < 0xfe17b800 || x >= 0x1e84800 || z > 0x1e84800)
diff --git a/src/main/java/net/minecraft/core/world/WorldSource.java b/src/main/java/net/minecraft/core/world/WorldSource.java
index 06c6becbe..de1b74b9b 100644
--- a/src/main/java/net/minecraft/core/world/WorldSource.java
+++ b/src/main/java/net/minecraft/core/world/WorldSource.java
@@ -3,7 +3,10 @@ package net.minecraft.core.world;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.block.material.Material;
+import net.minecraft.core.world.biome.Biome;
 import net.minecraft.core.world.biome.provider.BiomeProvider;
+import net.minecraft.core.world.season.Season;
+import net.minecraft.core.world.season.SeasonManager;
 
 public interface WorldSource
 {
@@ -25,4 +28,8 @@ public interface WorldSource
     boolean isBlockOpaqueCube(int x, int y, int z);
 
     boolean isBlockNormalCube(int x, int y, int z);
+    double getBlockTemperature(int x, int z);
+    double getBlockHumidity(int x, int z);
+    SeasonManager getSeasonManager();
+    Biome getBlockBiome(int x, int y, int z);
 }
diff --git a/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java b/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java
index 8e349da2d..805af9a82 100644
--- a/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java
+++ b/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java
@@ -9,7 +9,9 @@ import net.minecraft.core.world.World;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.material.Material;
+import net.minecraft.core.world.biome.Biome;
 import net.minecraft.core.world.biome.provider.BiomeProvider;
+import net.minecraft.core.world.season.SeasonManager;
 
 public class ChunkCache
     implements WorldSource
@@ -230,4 +232,24 @@ public class ChunkCache
             return block.blockMaterial.blocksMotion() && block.renderAsNormalBlock();
         }
     }
+
+    @Override
+    public double getBlockTemperature(int x, int z) {
+        return worldObj.getBlockTemperature(x, z);
+    }
+
+    @Override
+    public double getBlockHumidity(int x, int z) {
+        return worldObj.getBlockHumidity(x, z);
+    }
+
+    @Override
+    public SeasonManager getSeasonManager() {
+        return worldObj.getSeasonManager();
+    }
+
+    @Override
+    public Biome getBlockBiome(int x, int y, int z) {
+        return worldObj.getBlockBiome(x, y, z);
+    }
 }
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkDecoratorOverworld.java b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkDecoratorOverworld.java
index 7ea2c70fe..806b1a267 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkDecoratorOverworld.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkDecoratorOverworld.java
@@ -286,12 +286,25 @@ public class ChunkDecoratorOverworld
             (new WorldFeatureSugarCaneTall()).generate(world, rand, i18, i21, i23);
         }
 
-        byte byteMeadow = 0;
+        byte byteOrchid = 0;
+        if (biome == Biomes.OVERWORLD_BIRCH_FOREST) {
+            byteOrchid = 3;
+        }
         if (biome == Biomes.OVERWORLD_SEASONAL_FOREST) {
-            byteMeadow = 1;
+            byteOrchid = 1;
+        }
+        for (int l14 = 0; l14 < byteOrchid; l14++) {
+            int blockId = Block.flowerPink.id;
+
+            int l19 = x + rand.nextInt(16) + 8;
+            int k22 = rand.nextInt(world.getHeightBlocks());
+            int j24 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureTallGrass(blockId)).generate(world, rand, l19, k22, j24);
         }
+
+        byte byteMeadow = 0;
         if (biome == Biomes.OVERWORLD_MEADOW) {
-            byteMeadow = 2;
+            byteMeadow = 3;
         }
         if (biome == Biomes.OVERWORLD_BOREAL_FOREST) {
             byteMeadow = 2;
@@ -300,16 +313,43 @@ public class ChunkDecoratorOverworld
             byteMeadow = 1;
         }
         for (int l14 = 0; l14 < byteMeadow; l14++) {
-            int blockId = Block.flowerYellow.id;
-            if (rand.nextInt(3) != 0) {
+            int blockId = Block.flowerPurple.id;
+            if (rand.nextInt(12) == 0) {
                 blockId = Block.flowerRed.id;
             }
+            if (rand.nextInt(6) == 0) {
+                blockId = Block.flowerYellow.id;
+            }
             int l19 = x + rand.nextInt(16) + 8;
             int k22 = rand.nextInt(world.getHeightBlocks());
             int j24 = z + rand.nextInt(16) + 8;
             (new WorldFeatureTallGrass(blockId)).generate(world, rand, l19, k22, j24);
         }
 
+        byte byteBluebells = 0;
+        if (biome == Biomes.OVERWORLD_FOREST) {
+            byteBluebells = 2;
+        }
+        if (biome == Biomes.OVERWORLD_SWAMPLAND) {
+            byteBluebells = 3;
+        }
+        if (biome == Biomes.OVERWORLD_RAINFOREST) {
+            byteBluebells = 4;
+        }
+        if (biome == Biomes.OVERWORLD_GRASSLANDS) {
+            byteBluebells = 3;
+        }
+        if (biome == Biomes.OVERWORLD_CAATINGA) {
+            byteBluebells = 3;
+        }
+
+        for (int i14 = 0; i14 < byteBluebells; i14++) {
+            int k14 = x + rand.nextInt(16) + 8;
+            int l16 = minY + rand.nextInt(rangeY);
+            int k19 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Block.flowerLightBlue.id)).generate(world, rand, k14, l16, k19);
+        }
+
         byte byte0 = 0;
         if (biome == Biomes.OVERWORLD_FOREST) {
             byte0 = 2;
@@ -329,6 +369,7 @@ public class ChunkDecoratorOverworld
         if (biome == Biomes.OVERWORLD_OUTBACK_GRASSY || biome == Biomes.OVERWORLD_OUTBACK) {
             byte0 = 2;
         }
+
         for (int i14 = 0; i14 < byte0; i14++) {
             int k14 = x + rand.nextInt(16) + 8;
             int l16 = minY + rand.nextInt(rangeY);
@@ -374,7 +415,7 @@ public class ChunkDecoratorOverworld
             byte1 = 25;
         }
         if (biome == Biomes.OVERWORLD_BIRCH_FOREST) {
-            byte1 = 10;
+            byte1 = 2;
         }
         for (int l14 = 0; l14 < byte1; l14++) {
             int type = Block.tallgrass.id;
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 58c996abc..9338759c5 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
@@ -15,7 +15,7 @@ public class WorldFeatureTreeCherry extends WorldFeatureTree {
 	@Override
 	public void placeLeaves(World world, int x, int y, int z, Random rand) {
 		if(rand.nextInt(5) == 0) {
-			world.setBlockAndMetadataWithNotify(x, y, z, Block.leavesCherryFlowering.id, world.seasonManager.getCurrentSeason() == Seasons.OVERWORLD_SPRING ? 1 : 0);
+			world.setBlockAndMetadataWithNotify(x, y, z, Block.leavesCherryFlowering.id, world.getSeasonManager().getCurrentSeason() == Seasons.OVERWORLD_SPRING ? 1 : 0);
 		}else {
 			world.setBlockWithNotify(x, y, z, Block.leavesCherry.id);
 		}
diff --git a/src/main/java/net/minecraft/core/world/type/WorldType.java b/src/main/java/net/minecraft/core/world/type/WorldType.java
index 6310d9895..54c62c39f 100644
--- a/src/main/java/net/minecraft/core/world/type/WorldType.java
+++ b/src/main/java/net/minecraft/core/world/type/WorldType.java
@@ -134,19 +134,19 @@ public abstract class WorldType
 
     protected int getDayLengthTicks(World world) {
         float dayLength;
-        float seasonProgress = world.seasonManager.getSeasonProgress();
+        float seasonProgress = world.getSeasonManager().getSeasonProgress();
         if (seasonProgress < 0.5f)
         {
-            float lastSeasonDayLength = world.seasonManager.getPreviousSeason().dayLength;
-            float thisSeasonDayLength = world.seasonManager.getCurrentSeason().dayLength;
-            float seasonModifier = world.seasonManager.getSeasonModifier() * 0.5f + 0.5f;
+            float lastSeasonDayLength = world.getSeasonManager().getPreviousSeason().dayLength;
+            float thisSeasonDayLength = world.getSeasonManager().getCurrentSeason().dayLength;
+            float seasonModifier = world.getSeasonManager().getSeasonModifier() * 0.5f + 0.5f;
             dayLength = (lastSeasonDayLength * (1.0f - seasonModifier)) + (thisSeasonDayLength * seasonModifier);
         }
         else
         {
-            float thisSeasonDayLength = world.seasonManager.getCurrentSeason().dayLength;
-            float nextSeasonDayLength = world.seasonManager.getNextSeason().dayLength;
-            float seasonModifier = world.seasonManager.getSeasonModifier() * 0.5f + 0.5f;
+            float thisSeasonDayLength = world.getSeasonManager().getCurrentSeason().dayLength;
+            float nextSeasonDayLength = world.getSeasonManager().getNextSeason().dayLength;
+            float seasonModifier = world.getSeasonManager().getSeasonModifier() * 0.5f + 0.5f;
             dayLength = (thisSeasonDayLength * seasonModifier) + (nextSeasonDayLength * (1.0f - seasonModifier));
         }
 
diff --git a/src/main/java/net/minecraft/core/world/weather/Weather.java b/src/main/java/net/minecraft/core/world/weather/Weather.java
index b0a0058f4..09fe96f87 100644
--- a/src/main/java/net/minecraft/core/world/weather/Weather.java
+++ b/src/main/java/net/minecraft/core/world/weather/Weather.java
@@ -86,7 +86,7 @@ public abstract class Weather
 	
 	public void doEnvironmentUpdate(World world, Random rand, int x, int z)
 	{
-		if (world.seasonManager.getCurrentSeason() != null && !world.seasonManager.getCurrentSeason().letWeatherCleanUpSnow) return;
+		if (world.getSeasonManager().getCurrentSeason() != null && !world.getSeasonManager().getCurrentSeason().letWeatherCleanUpSnow) return;
 
 		if (rand.nextInt(4) == 0)
 		{
@@ -132,7 +132,7 @@ public abstract class Weather
 
 	public void doChunkLoadEffect(World world, Chunk chunk)
 	{
-		if (world.seasonManager.getCurrentSeason() != null && !world.seasonManager.getCurrentSeason().letWeatherCleanUpSnow) return;
+		if (world.getSeasonManager().getCurrentSeason() != null && !world.getSeasonManager().getCurrentSeason().letWeatherCleanUpSnow) return;
 
 		for (int x = 0; x < 16; x++)
 		{
diff --git a/src/main/java/net/minecraft/core/world/weather/WeatherManager.java b/src/main/java/net/minecraft/core/world/weather/WeatherManager.java
index 9771653e3..47c3d9f4b 100644
--- a/src/main/java/net/minecraft/core/world/weather/WeatherManager.java
+++ b/src/main/java/net/minecraft/core/world/weather/WeatherManager.java
@@ -88,7 +88,7 @@ public class WeatherManager {
         {
             return false;
         }
-        if (world.seasonManager.getCurrentSeason() == null)
+        if (world.getSeasonManager().getCurrentSeason() == null)
             return false;
 
         if (currentWeather == null) currentWeather = world.worldType.getDefaultWeather();
@@ -116,7 +116,7 @@ public class WeatherManager {
             if (currentWeather != world.worldType.getDefaultWeather()) {
                 nextWeather = world.worldType.getDefaultWeather();
             } else {
-                Season season = world.seasonManager.getCurrentSeason();
+                Season season = world.getSeasonManager().getCurrentSeason();
                 boolean foundWeather = false;
                 float acc = 0.0f;
                 float val = world.rand.nextFloat();
diff --git a/src/main/java/net/minecraft/core/world/weather/WeatherSnow.java b/src/main/java/net/minecraft/core/world/weather/WeatherSnow.java
index 1f73c1f0d..da26c916c 100644
--- a/src/main/java/net/minecraft/core/world/weather/WeatherSnow.java
+++ b/src/main/java/net/minecraft/core/world/weather/WeatherSnow.java
@@ -62,7 +62,7 @@ zLoop:		for (int z = 0; z < 16; z++)
 	public void doEnvironmentUpdate(World world, Random rand, int x, int z)
 	{
 		int probability = (int)(64 * (1 / world.weatherManager.getWeatherPower()));
-		if (world.seasonManager.getCurrentSeason() != null && world.seasonManager.getCurrentSeason().hasDeeperSnow)
+		if (world.getSeasonManager().getCurrentSeason() != null && world.getSeasonManager().getCurrentSeason().hasDeeperSnow)
 		{
 			probability /= 2;
 		}
@@ -89,7 +89,7 @@ zLoop:		for (int z = 0; z < 16; z++)
 					world.setBlockWithNotify(x, y, z, Block.layerSnow.id);
 				}
 			}
-			else if (world.weatherManager.getWeatherPower() > 0.5f && blockId == Block.layerSnow.id && world.seasonManager.getCurrentSeason() != null && (world.seasonManager.getCurrentSeason().hasDeeperSnow || biome == Biomes.OVERWORLD_GLACIER))
+			else if (world.weatherManager.getWeatherPower() > 0.5f && blockId == Block.layerSnow.id && world.getSeasonManager().getCurrentSeason() != null && (world.getSeasonManager().getCurrentSeason().hasDeeperSnow || biome == Biomes.OVERWORLD_GLACIER))
 			{
 				if(snow) {
 					((BlockLayerSnow)Block.layerSnow).accumulate(world, x, y, z);
diff --git a/src/main/java/net/minecraft/server/entity/player/EntityPlayerMP.java b/src/main/java/net/minecraft/server/entity/player/EntityPlayerMP.java
index 5dc48367d..95cb97222 100644
--- a/src/main/java/net/minecraft/server/entity/player/EntityPlayerMP.java
+++ b/src/main/java/net/minecraft/server/entity/player/EntityPlayerMP.java
@@ -33,6 +33,7 @@ import net.minecraft.server.world.ServerPlayerController;
 import net.minecraft.core.player.gamemode.Gamemode;
 import net.minecraft.core.player.inventory.*;
 import net.minecraft.core.player.inventory.slot.SlotCrafting;
+import net.minecraft.core.util.helper.AES;
 import net.minecraft.core.util.helper.DamageType;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.phys.AABB;
@@ -889,12 +890,6 @@ public class EntityPlayerMP extends EntityPlayer
         String s1 = stringtranslate.translateKey(s);
         playerNetServerHandler.sendPacket(new Packet3Chat(s1));
     }
-
-    @Override
-	public void addChatMessage(String s)
-    {
-        playerNetServerHandler.sendPacket(new Packet3Chat(I18n.getInstance().translateKey(s)));
-    }
     
     @Override
     public void setCurrentItem(int i) {
@@ -902,6 +897,16 @@ public class EntityPlayerMP extends EntityPlayer
     	playerNetServerHandler.sendPacket(new Packet16BlockItemSwitch(i));
     }
 
+	@Override
+	public void sendMessage(String message) {
+		playerNetServerHandler.sendPacket(new Packet3Chat(message, 0, AES.keyChain.get(username)));
+	}
+
+	@Override
+	public void sendStatusMessage(String message) {
+		playerNetServerHandler.sendPacket(new Packet3Chat(message, 1, AES.keyChain.get(username)));
+	}
+
     public NetServerHandler playerNetServerHandler;
     public MinecraftServer mcServer;
     public ServerPlayerController playerController;
diff --git a/src/main/java/net/minecraft/server/net/PlayerList.java b/src/main/java/net/minecraft/server/net/PlayerList.java
index 1b4542b7c..c4844558e 100644
--- a/src/main/java/net/minecraft/server/net/PlayerList.java
+++ b/src/main/java/net/minecraft/server/net/PlayerList.java
@@ -284,7 +284,7 @@ public class PlayerList
         for (int i = 0; i < playerEntities.size(); i++)
         {
             EntityPlayerMP entityplayermp = playerEntities.get(i);
-            entityplayermp.playerNetServerHandler.sendPacket(new Packet3Chat(message, AES.keyChain.get(entityplayermp.username)));
+            entityplayermp.playerNetServerHandler.sendPacket(new Packet3Chat(message, 1, AES.keyChain.get(entityplayermp.username)));
         }
 
     }
diff --git a/src/main/java/net/minecraft/server/net/handler/NetServerHandler.java b/src/main/java/net/minecraft/server/net/handler/NetServerHandler.java
index 829bf39ad..104992762 100644
--- a/src/main/java/net/minecraft/server/net/handler/NetServerHandler.java
+++ b/src/main/java/net/minecraft/server/net/handler/NetServerHandler.java
@@ -514,53 +514,43 @@ public class NetServerHandler extends NetHandler
         }
     }
 
-    @Override
-    public void handleChat(Packet3Chat packet)
-    {
-        String s;
-        if (packet.encrypted)
-        {
-            try
-            {
-                s = AES.decrypt(packet.message, AES.keyChain.get(playerEntity.username));
-            }
-            catch (Exception e)
-            {
-                throw new RuntimeException(e);
-            }
-        }
-        else
-        {
-            s = packet.message;
-        }
-        if (s.length() > 256)
-        {
-            s = s.substring(0, 255);
-        }
-        s = s.trim();
-        s = s.replace('\u00A7', '$');
-        for (int i = 0; i < s.length(); i++)
-        {
-            char c = s.charAt(i);
-            if (ChatAllowedCharacters.ALLOWED_CHARACTERS.indexOf(c) < 0)
-            {
-                sendPacket(new Packet3Chat(String.valueOf(TextFormatting.GRAY) + TextFormatting.ITALIC + "[SERVER] Illegal characters in chat message."));
-                return;
-            }
-        }
-
-        if (s.startsWith("/"))
-        {
-            handleSlashCommand(s);
-        }
-        else
-        {
-            s = ChatEmotes.process(s);
-            s = "<" + playerEntity.getDisplayName() + TextFormatting.RESET + "> " + TextFormatting.WHITE + s;
-            logger.info(s);
-            mcServer.playerList.sendEncryptedChatToAllPlayers(s);
-        }
-    }
+	@Override
+	public void handleChat(Packet3Chat packet) {
+		String message;
+		if(packet.encrypted) {
+			try {
+				message = AES.decrypt(packet.message, AES.keyChain.get(playerEntity.username));
+			}catch (Exception e) {
+				throw new RuntimeException(Packet3Chat.ENCRYPTION_ERROR_MESSAGE, e);
+			}
+		}else {
+			message = packet.message;
+		}
+		
+		if(message.length() > 256) {
+			message = message.substring(0, 255);
+		}
+		
+		message = message.trim();
+		message = message.replace('\u00A7', '$');
+		
+		for(int i = 0; i < message.length(); i++) {
+			char c = message.charAt(i);
+			if(ChatAllowedCharacters.ALLOWED_CHARACTERS.indexOf(c) < 0) {
+				sendPacket(new Packet3Chat(String.valueOf(TextFormatting.GRAY) + TextFormatting.ITALIC + "[SERVER] Illegal characters in chat message."));
+				return;
+			}
+		}
+		
+		if(message.startsWith("/")) {
+			handleSlashCommand(message);
+		}else {
+			message = ChatEmotes.process(message);
+			message = "<" + playerEntity.getDisplayName() + TextFormatting.RESET + "> " + TextFormatting.WHITE + message;
+			logger.info(message);
+			mcServer.playerList.sendEncryptedChatToAllPlayers(message);
+		}
+	}
 
     private void handleSlashCommand(String s)
     {
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_light_blue.png b/src/main/resources/assets/minecraft/textures/block/flower_light_blue.png
new file mode 100644
index 000000000..f8bbe910c
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/flower_light_blue.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_pink.png b/src/main/resources/assets/minecraft/textures/block/flower_pink.png
new file mode 100644
index 000000000..32c543c79
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/flower_pink.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_purple.png b/src/main/resources/assets/minecraft/textures/block/flower_purple.png
new file mode 100644
index 000000000..5a326bc95
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/flower_purple.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/texture_missing.png b/src/main/resources/assets/minecraft/textures/block/texture_missing.png
new file mode 100644
index 000000000..e7fdcc4d3
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/texture_missing.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/texture_unassigned.png b/src/main/resources/assets/minecraft/textures/block/texture_unassigned.png
new file mode 100644
index 000000000..25535a2fc
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/texture_unassigned.png differ
diff --git a/src/main/resources/assets/minecraft/textures/item/texture_missing.png b/src/main/resources/assets/minecraft/textures/item/texture_missing.png
new file mode 100644
index 000000000..e7fdcc4d3
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/item/texture_missing.png differ
diff --git a/src/main/resources/assets/minecraft/textures/item/texture_unassigned.png b/src/main/resources/assets/minecraft/textures/item/texture_unassigned.png
new file mode 100644
index 000000000..25535a2fc
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/item/texture_unassigned.png differ
diff --git a/src/main/resources/gui/creative.png b/src/main/resources/gui/creative.png
index e76d44785..b149d1323 100644
Binary files a/src/main/resources/gui/creative.png and b/src/main/resources/gui/creative.png differ
diff --git a/src/main/resources/terrain.png b/src/main/resources/terrain.png
index 915404868..d5a427f34 100644
Binary files a/src/main/resources/terrain.png and b/src/main/resources/terrain.png differ
