diff --git a/src/common/resources/lang/en_US/biomes.lang b/src/common/resources/lang/en_US/biomes.lang
index 41dd17986..4c56f2bb5 100644
--- a/src/common/resources/lang/en_US/biomes.lang
+++ b/src/common/resources/lang/en_US/biomes.lang
@@ -2,6 +2,7 @@ biome.rainforest=Rainforest
 biome.swampland=Swamp
 biome.seasonal_forest=Seasonal Forest
 biome.forest=Forest
+biome.forest.dry=Dry Forest
 biome.grasslands=Grasslands
 biome.outback=Outback
 biome.shrubland=Shrubland
@@ -19,4 +20,5 @@ biome.retro=Retro
 biome.hell=Hell
 biome.swampland.muddy=Muddy Swamp
 biome.outback.grassy=Grassy Outback
-biome.caatinga=Caatinga
\ No newline at end of file
+biome.caatinga=Caatinga
+biome.caatinga.plains=Caatinga Plains
\ 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 8d5cad6a6..175eb1050 100644
--- a/src/common/resources/lang/en_US/gui.lang
+++ b/src/common/resources/lang/en_US/gui.lang
@@ -336,4 +336,5 @@ model.category.block.spawner.button.id=Mob: %s
 model.category.particle.name=Particle
 model.category.particle.info=Particle: %s
 model.category.particle.radius.slider=Radius: %s
-model.category.particle.note.slider=Note: %s
\ No newline at end of file
+model.category.particle.note.slider=Note: %s
+model.category.particle.block.side=Side: %s
\ No newline at end of file
diff --git a/src/common/resources/lang/en_US/tile.lang b/src/common/resources/lang/en_US/tile.lang
index d167c3c12..abd3068de 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.flower.purple.name=Heather
tile.flower.purple.desc=Sprigs of purple petals. Brings good luck.
tile.flower.lightblue.name=Bluebell
tile.flower.lightblue.desc=A sad-looking blue flower.
tile.flower.pink.name=Orchid
tile.flower.pink.desc=A beautiful pink flower.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tile.netherrack.name=Netherrack
tile.netherrack.desc=Dark red rock that burns forever.
tile.netherrack.igneous.name=Igneous Netherrack
tile.netherrack.igneous.desc=Extreme heat has made this rock glow from inside.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tile.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.log.brazilwood.name=Brazilwood Log
tile.log.brazilwood.desc=A log from a brazilwood 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=Orchid
tile.flower.pink.desc=A beautiful pink flower.
tile.flower.orange.name=Marigold
tile.flower.orange.desc=A beautiful orange flower.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tile.netherrack.name=Netherrack
tile.netherrack.desc=Dark red rock that burns forever.
tile.netherrack.igneous.name=Igneous Netherrack
tile.netherrack.igneous.desc=Extreme heat has made this rock glow from inside.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tile.rope.name=Rope
tile.rope.desc=Rope, rope, rope your boat.
\ No newline at end of file
diff --git a/src/common/resources/recipes/workbench.json b/src/common/resources/recipes/workbench.json
index f330a4ac4..6a11b76d5 100644
--- a/src/common/resources/recipes/workbench.json
+++ b/src/common/resources/recipes/workbench.json
@@ -4040,6 +4040,24 @@
       "meta":12
     }
   },
+  {
+    "name": "minecraft:workbench/flower_orange_to_dye",
+    "type": "minecraft:crafting/shapeless",
+    "inputs": [
+      {
+        "stack": {
+          "key": "tile.flower.orange",
+          "amount": 1,
+          "meta": 0
+        }
+      }
+    ],
+    "result": {
+      "key": "item.dye",
+      "amount": 2,
+      "meta":14
+    }
+  },
   {
     "name": "minecraft:workbench/bone_to_dye",
     "type": "minecraft:crafting/shapeless",
@@ -4652,6 +4670,29 @@
     },
     "consumeContainers": true
   },
+  {
+    "name": "minecraft:workbench/brazilwood_log_to_red_wooden_planks",
+    "type": "minecraft:crafting/shaped",
+    "pattern": [
+      "#"
+    ],
+    "symbols": [
+      {
+        "symbol": "#",
+        "stack": {
+          "id": 286,
+          "amount": 1,
+          "meta": 0
+        }
+      }
+    ],
+    "result": {
+      "id": 51,
+      "amount": 4,
+      "meta": 14
+    },
+    "consumeContainers": true
+  },
   {
     "name": "minecraft:workbench/ladder",
     "type": "minecraft:crafting/shaped",
diff --git a/src/main/java/net/minecraft/client/Minecraft.java b/src/main/java/net/minecraft/client/Minecraft.java
index bde651192..023043528 100644
--- a/src/main/java/net/minecraft/client/Minecraft.java
+++ b/src/main/java/net/minecraft/client/Minecraft.java
@@ -384,11 +384,17 @@ public class Minecraft
             setRenderer(new Renderer(this));
         }
 
+        texturePackList = new TexturePackList(this, mcDataDir);
+        renderEngine = new RenderEngine(this, texturePackList, gameSettings);
+        
+        // Show load screen as early as possible
+        // Do not put stuff that takes a while to load before this,
+        // otherwise the loading time will happen while the window is black
+        loadScreen();
+        
         // Initialize overworld biome map
         BiomeProviderOverworld.init();
 
-        texturePackList = new TexturePackList(this, mcDataDir);
-        renderEngine = new RenderEngine(this, texturePackList, gameSettings);
         ColorizerWater.updateColorData(renderEngine.getTextureImageData("/misc/watercolor.png"));
         ColorizerGrass.updateColorData(renderEngine.getTextureImageData("/misc/grasscolor.png"));
         ColorizerFoliage.updateColorData(renderEngine.getTextureImageData("/misc/foliagecolor.png"));
@@ -407,7 +413,9 @@ public class Minecraft
             }
             return String.format(s, gameSettings.keyGuidebook.getKeyName());
         });
-        loadScreen();
+
+        loadScreen();	// Update loading screen so it doesn't say no response
+        
         StatList.init();
 
         System.out.println("Initizalizing input");
@@ -437,8 +445,13 @@ public class Minecraft
         glMatrixMode(5888 /*GL_MODELVIEW0_ARB*/);
         OpenGLHelper.checkError("startup");
         sndManager.loadSoundSettings(gameSettings);
+        
+        loadScreen();	// Update loading screen so it doesn't say no response
+        
         renderEngine.refreshTextures(new ArrayList<>());
 
+        loadScreen();	// Update loading screen so it doesn't say no response
+        
         System.out.println("Initializing Renderer...");
         
         TextureRegistry.blockAtlas.bindTexture();
@@ -475,6 +488,8 @@ public class Minecraft
         System.out.printf("%d item groups.%n",itemGroups);
         System.out.printf("%d recipes in %d groups in %d namespaces.%n",recipes,groups,namespaces);
 
+        loadScreen();	// Update loading screen so it doesn't say no response
+        
         // Enable Discord Rich Presence
         if (gameSettings.discordRichPresence.value)
         {
@@ -1200,6 +1215,9 @@ public class Minecraft
                 chunkproviderloadorgenerate.setCurrentChunkOver(playerChunkX, playerChunkZ);
             }
         }
+        if(theWorld != null) {
+        	theWorld.updateAllOnLightChange = !LightmapHelper.isLightmapEnabled();
+        }
         if(!isGamePaused && theWorld != null)
         {
             playerController.tick();
diff --git a/src/main/java/net/minecraft/client/discord/RichPresenceHandlerThread.java b/src/main/java/net/minecraft/client/discord/RichPresenceHandlerThread.java
index 7eaa8b089..fb3fe72ac 100644
--- a/src/main/java/net/minecraft/client/discord/RichPresenceHandlerThread.java
+++ b/src/main/java/net/minecraft/client/discord/RichPresenceHandlerThread.java
@@ -39,6 +39,7 @@ public class RichPresenceHandlerThread extends Thread
         biomeNamesMap.put(Biomes.OVERWORLD_SWAMPLAND, "the swamplands");
         biomeNamesMap.put(Biomes.OVERWORLD_SEASONAL_FOREST, "a seasonal forest");
         biomeNamesMap.put(Biomes.OVERWORLD_FOREST, "a forest");
+        biomeNamesMap.put(Biomes.OVERWORLD_FOREST_DRY, "a dry forest");
         biomeNamesMap.put(Biomes.OVERWORLD_GRASSLANDS, "the grasslands");
         biomeNamesMap.put(Biomes.OVERWORLD_OUTBACK, "the outback");
         biomeNamesMap.put(Biomes.OVERWORLD_SHRUBLAND, "a shrubland");
@@ -57,6 +58,7 @@ public class RichPresenceHandlerThread extends Thread
         biomeNamesMap.put(Biomes.OVERWORLD_SWAMPLAND_MUDDY, "the swamplands");
         biomeNamesMap.put(Biomes.OVERWORLD_OUTBACK_GRASSY, "the outback");
         biomeNamesMap.put(Biomes.OVERWORLD_CAATINGA, "the caatinga");
+        biomeNamesMap.put(Biomes.OVERWORLD_CAATINGA_PLAINS, "the caatinga");
     }
     private static Map<Weather, String> weatherNamesMap = new HashMap<>();
     static
diff --git a/src/main/java/net/minecraft/client/entity/fx/EntityDiggingFX.java b/src/main/java/net/minecraft/client/entity/fx/EntityDiggingFX.java
index 009811c7b..d49abce12 100644
--- a/src/main/java/net/minecraft/client/entity/fx/EntityDiggingFX.java
+++ b/src/main/java/net/minecraft/client/entity/fx/EntityDiggingFX.java
@@ -74,4 +74,5 @@ public class EntityDiggingFX extends EntityFX
 
     private Block block;
     private Side side;
+
 }
diff --git a/src/main/java/net/minecraft/client/entity/fx/EntityItemFX.java b/src/main/java/net/minecraft/client/entity/fx/EntityItemFX.java
index 5c0cbe9b3..576d4a826 100644
--- a/src/main/java/net/minecraft/client/entity/fx/EntityItemFX.java
+++ b/src/main/java/net/minecraft/client/entity/fx/EntityItemFX.java
@@ -1,5 +1,7 @@
 package net.minecraft.client.entity.fx;
 
+import net.minecraft.client.render.LightmapHelper;
+
 // Referenced classes of package net.minecraft.src:
 //            EntityFX, Item, Block, TessellatorStandard,
 //            World
@@ -39,8 +41,13 @@ public class EntityItemFX extends EntityFX
         float f11 = (float)((xo + (x - xo) * (double) partialTick) - lerpPosX);
         float f12 = (float)((yo + (y - yo) * (double) partialTick) - lerpPosY);
         float f13 = (float)((zo + (z - zo) * (double) partialTick) - lerpPosZ);
-        float f14 = getBrightness(partialTick);
-        t.setColorOpaque_F(f14 * particleRed, f14 * particleGreen, f14 * particleBlue);
+        float brightness = 1.0f;
+        if(LightmapHelper.isLightmapEnabled()) {
+        	t.setLightmapCoord(getLightmapCoord(partialTick));
+        }else {
+        	brightness = getBrightness(partialTick);
+        }
+        t.setColorOpaque_F(brightness * particleRed, brightness * particleGreen, brightness * particleBlue);
         t.addVertexWithUV(f11 - rotationX * f10 - rotationYZ * f10, f12 - rotationXZ * f10, f13 - rotationZ * f10 - rotationXY * f10, f6, f9);
         t.addVertexWithUV((f11 - rotationX * f10) + rotationYZ * f10, f12 + rotationXZ * f10, (f13 - rotationZ * f10) + rotationXY * f10, f6, f8);
         t.addVertexWithUV(f11 + rotationX * f10 + rotationYZ * f10, f12 + rotationXZ * f10, f13 + rotationZ * f10 + rotationXY * f10, f7, f8);
diff --git a/src/main/java/net/minecraft/client/entity/fx/EntityLavaFX.java b/src/main/java/net/minecraft/client/entity/fx/EntityLavaFX.java
index f21e8403c..3c99ebee0 100644
--- a/src/main/java/net/minecraft/client/entity/fx/EntityLavaFX.java
+++ b/src/main/java/net/minecraft/client/entity/fx/EntityLavaFX.java
@@ -52,7 +52,7 @@ public class EntityLavaFX extends EntityFX
         float f = (float)particleAge / (float)particleMaxAge;
         if(random.nextFloat() > f)
         {
-            world.spawnParticle("smoke", x, y, z, xd, yd, zd);
+            world.spawnParticle("smoke", x, y, z, xd, yd, zd, 0);
         }
         yd -= 0.03D;
         move(xd, yd, zd);
diff --git a/src/main/java/net/minecraft/client/entity/fx/EntityLeafFX.java b/src/main/java/net/minecraft/client/entity/fx/EntityLeafFX.java
index df98cfd2a..5ae6ea979 100644
--- a/src/main/java/net/minecraft/client/entity/fx/EntityLeafFX.java
+++ b/src/main/java/net/minecraft/client/entity/fx/EntityLeafFX.java
@@ -1,5 +1,7 @@
 package net.minecraft.client.entity.fx;
 
+import net.minecraft.client.render.LightmapHelper;
+
 // Referenced classes of package net.minecraft.src:
 //            EntityFX, Block, TessellatorStandard, World
 
@@ -87,8 +89,13 @@ public class EntityLeafFX extends EntityFX
         float f11 = (float)((xo + (x - xo) * (double) partialTick) - lerpPosX);
         float f12 = (float)((yo + (y - yo) * (double) partialTick) - lerpPosY);
         float f13 = (float)((zo + (z - zo) * (double) partialTick) - lerpPosZ);
-        float f14 = getBrightness(partialTick);
-        t.setColorOpaque_F(f14 * particleRed, f14 * particleGreen, f14 * particleBlue);
+        float brightness = 1.0f;
+        if(LightmapHelper.isLightmapEnabled()) {
+        	t.setLightmapCoord(getLightmapCoord(partialTick));
+        }else {
+        	brightness = getBrightness(partialTick);
+        }
+        t.setColorOpaque_F(brightness * particleRed, brightness * particleGreen, brightness * particleBlue);
         t.addVertexWithUV(f11 - rotationX * f10 - rotationYZ * f10, f12 - rotationXZ * f10, f13 - rotationZ * f10 - rotationXY * f10, f6, f9);
         t.addVertexWithUV((f11 - rotationX * f10) + rotationYZ * f10, f12 + rotationXZ * f10, (f13 - rotationZ * f10) + rotationXY * f10, f6, f8);
         t.addVertexWithUV(f11 + rotationX * f10 + rotationYZ * f10, f12 + rotationXZ * f10, f13 + rotationZ * f10 + rotationXY * f10, f7, f8);
diff --git a/src/main/java/net/minecraft/client/entity/fx/ParticleDispatcher.java b/src/main/java/net/minecraft/client/entity/fx/ParticleDispatcher.java
index 2c8c5ced7..eb73d7b8b 100644
--- a/src/main/java/net/minecraft/client/entity/fx/ParticleDispatcher.java
+++ b/src/main/java/net/minecraft/client/entity/fx/ParticleDispatcher.java
@@ -5,13 +5,15 @@ import net.minecraft.client.util.dispatch.Dispatcher;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.entity.animal.EntityFireflyCluster;
 import net.minecraft.core.item.Item;
-import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.helper.BlockParticleHelper;
+import net.minecraft.core.util.helper.MathHelper;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class ParticleDispatcher extends Dispatcher<String, ParticleLambda> {
     private static final ParticleDispatcher instance = new ParticleDispatcher();
+    private static final ParticleLambda blank = (world, x, y, z, motionX, motionY, motionZ, data) -> null;
     public static ParticleDispatcher getInstance()
     {
         return instance;
@@ -21,45 +23,44 @@ public class ParticleDispatcher extends Dispatcher<String, ParticleLambda> {
     }
     @Override
     protected ParticleLambda getDefault() {
-        return null;
+        return blank;
     }
     private ParticleDispatcher(){
         Minecraft mc = Minecraft.getMinecraft(this);
-        addDispatch("bubble", (world, x, y, z, motionX, motionY, motionZ) -> new EntityBubbleFX(world, x, y, z, motionX, motionY, motionZ, true));
-        addDispatch("smoke", (world, x, y, z, motionX, motionY, motionZ) -> new EntitySmokeFX(world, x, y, z, motionX, motionY, motionX));
-        addDispatch("note", (world, x, y, z, motionX, motionY, motionZ) -> new EntityNoteFX(world, x, y, z, motionX, motionY, motionX));
-        addDispatch("portal", (world, x, y, z, motionX, motionY, motionZ) -> new EntityPortalFX(world, x, y, z, motionX, motionY, motionX));
-        addDispatch("explode", (world, x, y, z, motionX, motionY, motionZ) -> new EntityExplodeFX(world, x, y, z, motionX, motionY, motionX));
-        addDispatch("flame", (world, x, y, z, motionX, motionY, motionZ) -> new EntityFlameFX(world, x, y, z, motionX, motionY, motionX, EntityFlameFX.Type.ORANGE));
-        addDispatch("blueflame", (world, x, y, z, motionX, motionY, motionZ) -> new EntityFlameFX(world, x, y, z, motionX, motionY, motionX, EntityFlameFX.Type.BLUE));
-        addDispatch("soulflame", (world, x, y, z, motionX, motionY, motionZ) -> new EntityFlameFX(world, x, y, z, motionX, motionY, motionX, EntityFlameFX.Type.SOUL));
-        addDispatch("lava", (world, x, y, z, motionX, motionY, motionZ) -> new EntityLavaFX(world, x, y, z));
-        addDispatch("footstep", (world, x, y, z, motionX, motionY, motionZ) -> new EntityFootStepFX(mc.renderEngine, world, x, y, z));
-        addDispatch("splash", EntitySplashFX::new);
-        addDispatch("largesmoke", (world, x, y, z, motionX, motionY, motionZ) -> new EntitySmokeFX(world, x, y, z, motionX, motionY, motionX, 2.5f));
-        addDispatch("reddust", (world, x, y, z, motionX, motionY, motionZ) -> new EntityReddustFX(world, x, y, z, (float) motionX, (float) motionY, (float) motionX));
-        addDispatch("item", (world, x, y, z, motionX, motionY, motionZ) -> new EntityItemFX(world, x, y, z, Item.itemsList[(int) (motionX + 0.001d)]));
-        addDispatch("block", (world, x, y, z, motionX, motionY, motionZ) -> new EntityDiggingFX(world, x, y, z,0,0,0, Block.blocksList[(int) (motionX + 0.001d)], Side.BOTTOM.getId(),(int) (motionY + 0.001d)));
-        addDispatch("snowshovel", (world, x, y, z, motionX, motionY, motionZ) -> new EntitySnowShovelFX(world, x, y, z, motionX, motionY, motionX));
-        addDispatch("heart", (world, x, y, z, motionX, motionY, motionZ) -> new EntityHeartFX(world, x, y, z, motionX, motionY, motionX));
-        addDispatch("slimechunk", (world, x, y, z, motionX, motionY, motionZ) -> {
+        addDispatch("bubble", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityBubbleFX(world, x, y, z, motionX, motionY, motionZ, true));
+        addDispatch("smoke", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntitySmokeFX(world, x, y, z, motionX, motionY, motionX));
+        addDispatch("note", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityNoteFX(world, x, y, z, motionX, motionY, motionX));
+        addDispatch("portal", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityPortalFX(world, x, y, z, motionX, motionY, motionX));
+        addDispatch("explode", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityExplodeFX(world, x, y, z, motionX, motionY, motionX));
+        addDispatch("flame", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityFlameFX(world, x, y, z, motionX, motionY, motionX, EntityFlameFX.Type.ORANGE));
+        addDispatch("blueflame", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityFlameFX(world, x, y, z, motionX, motionY, motionX, EntityFlameFX.Type.BLUE));
+        addDispatch("soulflame", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityFlameFX(world, x, y, z, motionX, motionY, motionX, EntityFlameFX.Type.SOUL));
+        addDispatch("lava", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityLavaFX(world, x, y, z));
+        addDispatch("footstep", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityFootStepFX(mc.renderEngine, world, x, y, z));
+        addDispatch("splash", (world1, d, d1, d2, d3, d4, d5, data) -> new EntitySplashFX(world1, d, d1, d2, d3, d4, d5));
+        addDispatch("largesmoke", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntitySmokeFX(world, x, y, z, motionX, motionY, motionX, 2.5f));
+        addDispatch("reddust", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityReddustFX(world, x, y, z, (float) motionX, (float) motionY, (float) motionX));
+        addDispatch("item", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityItemFX(world, x, y, z, Item.itemsList[MathHelper.clamp(data, 0, Item.itemsList.length - 1)]));
+        addDispatch("block", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityDiggingFX(world, x, y, z,motionX,motionY,motionZ, Block.blocksList[BlockParticleHelper.decodeBlockID(data)], BlockParticleHelper.decodeBlockSide(data), BlockParticleHelper.decodeBlockMeta(data)).setParticleColor((int) x, (int) y, (int) z));
+        addDispatch("snowshovel", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntitySnowShovelFX(world, x, y, z, motionX, motionY, motionX));
+        addDispatch("heart", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityHeartFX(world, x, y, z, motionX, motionY, motionX));
+        addDispatch("slimechunk", (world, x, y, z, motionX, motionY, motionZ, data) -> {
             if (mc.gameSettings.slimeParticles.value){
                 return new EntitySlimeChunkFX(world, x, y, z, Item.slimeball);
             }
             return null;
         });
-        addDispatch("fireflyGreen", (world, x, y, z, motionX, motionY, motionZ) -> new EntityFireflyFX(world, x, y, z, motionX, motionY, motionX, EntityFireflyCluster.FireflyColor.GREEN.getId()));
-        addDispatch("fireflyBlue", (world, x, y, z, motionX, motionY, motionZ) -> new EntityFireflyFX(world, x, y, z, motionX, motionY, motionX, EntityFireflyCluster.FireflyColor.BLUE.getId()));
-        addDispatch("fireflyOrange", (world, x, y, z, motionX, motionY, motionZ) -> new EntityFireflyFX(world, x, y, z, motionX, motionY, motionX, EntityFireflyCluster.FireflyColor.ORANGE.getId()));
-        addDispatch("fireflyRed", (world, x, y, z, motionX, motionY, motionZ) -> new EntityFireflyFX(world, x, y, z, motionX, motionY, motionX, EntityFireflyCluster.FireflyColor.RED.getId()));
-        addDispatch("arrowtrail", (world, x, y, z, motionX, motionY, motionZ) -> new EntityArrowGoldenFX(world, x, y, z, motionX, motionY, motionX));
-        addDispatch("fallingleaf", (world, x, y, z, motionX, motionY, motionZ) -> {
+        addDispatch("fireflyGreen", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityFireflyFX(world, x, y, z, motionX, motionY, motionX, EntityFireflyCluster.FireflyColor.GREEN.getId()));
+        addDispatch("fireflyBlue", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityFireflyFX(world, x, y, z, motionX, motionY, motionX, EntityFireflyCluster.FireflyColor.BLUE.getId()));
+        addDispatch("fireflyOrange", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityFireflyFX(world, x, y, z, motionX, motionY, motionX, EntityFireflyCluster.FireflyColor.ORANGE.getId()));
+        addDispatch("fireflyRed", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityFireflyFX(world, x, y, z, motionX, motionY, motionX, EntityFireflyCluster.FireflyColor.RED.getId()));
+        addDispatch("arrowtrail", (world, x, y, z, motionX, motionY, motionZ, data) -> new EntityArrowGoldenFX(world, x, y, z, motionX, motionY, motionX));
+        addDispatch("fallingleaf", (world, x, y, z, motionX, motionY, motionZ, data) -> {
             int id = world.getBlockId((int)x, (int)y, (int)z);
             if (id != 0){
                 return new EntityLeafFX(world, x, y, z, motionX, motionY, motionX).func_4041_a((int)x, (int)y, (int)z);
             }
             return null;
         });
-        addDispatch("boatbreak", (world, x, y, z, motionX, motionY, motionZ) -> new EntityDiggingFX(world, x, y, z, motionX, motionY, motionX, Block.planksOak, Side.BOTTOM.getId(), 0));
     }
 }
diff --git a/src/main/java/net/minecraft/client/entity/fx/ParticleLambda.java b/src/main/java/net/minecraft/client/entity/fx/ParticleLambda.java
index 394377380..c7307f955 100644
--- a/src/main/java/net/minecraft/client/entity/fx/ParticleLambda.java
+++ b/src/main/java/net/minecraft/client/entity/fx/ParticleLambda.java
@@ -4,5 +4,5 @@ import net.minecraft.core.world.World;
 
 @FunctionalInterface
 public interface ParticleLambda {
-    EntityFX newParticle(World world, double x, double y, double z, double motionX, double motionY, double motionZ);
+    EntityFX newParticle(World world, double x, double y, double z, double motionX, double motionY, double motionZ, int data);
 }
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/MobSpawnerEntry.java b/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/MobSpawnerEntry.java
index 6a884f8e8..4b8bad0f2 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/MobSpawnerEntry.java
+++ b/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/MobSpawnerEntry.java
@@ -26,8 +26,8 @@ public class MobSpawnerEntry extends BlockEntry{
         double xPos = (double) spawner.x + spawner.worldObj.rand.nextFloat();
         double yPos = (double) spawner.y + spawner.worldObj.rand.nextFloat();
         double zPos = (double) spawner.z + spawner.worldObj.rand.nextFloat();
-        spawner.worldObj.spawnParticle("smoke", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D);
-        spawner.worldObj.spawnParticle("flame", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D);
+        spawner.worldObj.spawnParticle("smoke", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D, 0);
+        spawner.worldObj.spawnParticle("flame", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D, 0);
         for(spawner.yaw += 1000F / ((float)spawner.delay + 200F); spawner.yaw > 360D;)
         {
             spawner.yaw -= 360D;
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityFireflyEntry.java b/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityFireflyEntry.java
index a0d1e6e57..6fde34902 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityFireflyEntry.java
+++ b/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityFireflyEntry.java
@@ -22,7 +22,7 @@ public class EntityFireflyEntry extends EntityEntry<EntityFireflyCluster>{
         double dz = (random.nextFloat() * 2F - 1F) * (fireflyCluster.bbWidth);
 
         if (random.nextInt(Math.max(1, 10 - fireflyCluster.getFireflyCount())) == 0) {
-            fireflyCluster.world.spawnParticle(fireflyCluster.getColor().getParticleName(), fireflyCluster.x + dx, fireflyCluster.y + dy, fireflyCluster.z + dz, fireflyCluster.xd, fireflyCluster.yd, fireflyCluster.zd, 99999D);
+            fireflyCluster.world.spawnParticle(fireflyCluster.getColor().getParticleName(), fireflyCluster.x + dx, fireflyCluster.y + dy, fireflyCluster.z + dz, fireflyCluster.xd, fireflyCluster.yd, fireflyCluster.zd, 0, 99999D);
         }
     }
 
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/BlockFXEntry.java b/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/BlockFXEntry.java
index 10fcb96ff..c9c160cc9 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/BlockFXEntry.java
+++ b/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/BlockFXEntry.java
@@ -5,19 +5,22 @@ import net.minecraft.client.entity.fx.EntityDiggingFX;
 import net.minecraft.client.gui.GuiButton;
 import net.minecraft.client.gui.GuiScreen;
 import net.minecraft.client.gui.modelviewer.GuiModelViewer;
+import net.minecraft.client.gui.modelviewer.elements.GuiListSelectorButton;
 import net.minecraft.client.gui.modelviewer.elements.GuiTextCycle;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.item.Item;
-import net.minecraft.core.item.ItemStack;
+import net.minecraft.core.lang.I18n;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.world.World;
 
+import java.util.Arrays;
 import java.util.List;
 
 public class BlockFXEntry extends GenericFXEntry{
     protected int blockId;
     protected int meta;
+    private Side side = Side.BOTTOM;
 
     public BlockFXEntry() {
         super("block");
@@ -26,7 +29,7 @@ public class BlockFXEntry extends GenericFXEntry{
     @Override
     public List<GuiButton> getEntryButtons(Minecraft mc, GuiScreen parentScreen) {
         List<GuiButton> buttonList = super.getEntryButtons(mc, parentScreen);
-        GuiTextCycle<Integer> blockIdCycle = new GuiTextCycle<Integer>(parentScreen, mc.fontRenderer, - 120, buttonList.get(buttonList.size()-1).yPosition + 21, 120, 20, blockId) {
+        GuiTextCycle<Integer> blockIdCycle = new GuiTextCycle<Integer>(parentScreen, mc.fontRenderer, - 120, buttonList.get(buttonList.size()-1).getY() + 21, 120, 20, blockId) {
             @Override
             public Integer cycleElement(Integer current, int offset) {
                 return GuiModelViewer.cycleBlockId(current, offset);
@@ -51,7 +54,7 @@ public class BlockFXEntry extends GenericFXEntry{
         blockIdCycle.setOnValueChanged(() -> blockId = blockIdCycle.getCurrentElement());
         buttonList.add(blockIdCycle);
 
-        GuiTextCycle<Integer> metaCycle = new GuiTextCycle<Integer>(parentScreen, mc.fontRenderer, - 120, blockIdCycle.yPosition + 21, 120, 20, 0) {
+        GuiTextCycle<Integer> metaCycle = new GuiTextCycle<Integer>(parentScreen, mc.fontRenderer, - 120, blockIdCycle.getY() + 21, 120, 20, 0) {
             @Override
             public Integer cycleElement(Integer current, int offset) {
                 return (current + offset) & 0x3FFF;
@@ -76,12 +79,21 @@ public class BlockFXEntry extends GenericFXEntry{
         metaCycle.setOnValueChanged(() -> meta = metaCycle.getCurrentElement());
         buttonList.add(metaCycle);
 
+        GuiListSelectorButton<Side> sideButton = new GuiListSelectorButton<Side>(-1, -120, metaCycle.getY() + 21, 120, 20, I18n.getInstance().translateKey("model.category.particle.block.side"), Arrays.asList(Side.sides), side) {
+            @Override
+            public String getNameFromElement(Side element) {
+                return element.name();
+            }
+        };
+        sideButton.setOnValueChanged(() -> this.side = sideButton.getCurrentElement());
+        buttonList.add(sideButton);
+
         return buttonList;
     }
 
     @Override
     public void spawnParticle(Minecraft mc, World world, double x, double y, double z) {
-        mc.effectRenderer.addEffect(new EntityDiggingFX(world, x, y, z, motionX,motionY,motionZ, Block.getBlock(blockId), Side.BOTTOM.getId(), meta));
+        mc.effectRenderer.addEffect(new EntityDiggingFX(world, x, y, z, motionX,motionY,motionZ, Block.getBlock(blockId), side.getId(), meta));
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/GenericFXEntry.java b/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/GenericFXEntry.java
index 0dde12094..3d0c226e3 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/GenericFXEntry.java
+++ b/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/GenericFXEntry.java
@@ -6,6 +6,7 @@ import net.minecraft.client.gui.GuiScreen;
 import net.minecraft.client.gui.modelviewer.elements.GuiListenerTextField;
 import net.minecraft.core.lang.I18n;
 import net.minecraft.core.world.World;
+import org.lwjgl.input.Keyboard;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -17,6 +18,7 @@ public class GenericFXEntry extends ParticleEntry{
     protected double motionX;
     protected double motionY;
     protected double motionZ;
+    protected int data;
 
     public GenericFXEntry(String particleID){
         this(particleID, null);
@@ -57,6 +59,19 @@ public class GenericFXEntry extends ParticleEntry{
                 motionZ = Double.parseDouble(mzField.getText());
             } catch (Exception ignored){}
         });
+        GuiListenerTextField dataField = new GuiListenerTextField(parentScreen, mc.fontRenderer, -120, mzField.yPosition + 21, 120, 20, String.valueOf(data), "Data");
+        dataField.setPrefaceText("Data: ");
+        dataField.setKeyListener(key -> {
+            try {
+                data = Integer.parseInt(dataField.getText());
+            } catch (Exception ignored){}
+        });
+        dataField.setActionListener(() -> {
+            if (Keyboard.isKeyDown(Keyboard.KEY_LCONTROL)){
+                dataField.setText(String.valueOf(0));
+                data = 0;
+            }
+        });
         buttons.add(mxField);
         buttons.add(myField);
         buttons.add(mzField);
@@ -65,7 +80,7 @@ public class GenericFXEntry extends ParticleEntry{
 
     @Override
     public void spawnParticle(Minecraft mc, World world, double x, double y, double z) {
-        world.spawnParticle(particleID, x, y, z, motionX, motionY, motionZ);
+        world.spawnParticle(particleID, x, y, z, motionX, motionY, motionZ, data);
     }
 
     @Override
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 abda90ff7..563d0dd58 100644
--- a/src/main/java/net/minecraft/client/net/handler/NetClientHandler.java
+++ b/src/main/java/net/minecraft/client/net/handler/NetClientHandler.java
@@ -1,19 +1,6 @@
 package net.minecraft.client.net.handler;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.InetAddress;
-import java.net.Socket;
-import java.net.URL;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-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;
@@ -145,6 +132,18 @@ import net.minecraft.core.world.save.LevelData;
 import net.minecraft.core.world.saveddata.SavedDataStorage;
 import net.minecraft.core.world.weather.Weather;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.InetAddress;
+import java.net.Socket;
+import java.net.URL;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Random;
+
 public class NetClientHandler extends NetHandler
 {
     private boolean disconnected;
@@ -1202,6 +1201,7 @@ public class NetClientHandler extends NetHandler
                         packet63SpawnParticleEffect.motionX + rand.nextGaussian() * packet63SpawnParticleEffect.randMotionX,
                         packet63SpawnParticleEffect.motionY + rand.nextGaussian() * packet63SpawnParticleEffect.randMotionY,
                         packet63SpawnParticleEffect.motionZ + rand.nextGaussian() * packet63SpawnParticleEffect.randMotionZ,
+                        packet63SpawnParticleEffect.data,
                         packet63SpawnParticleEffect.maxDistance);
             }
         } else {
@@ -1212,6 +1212,7 @@ public class NetClientHandler extends NetHandler
                     packet63SpawnParticleEffect.motionX,
                     packet63SpawnParticleEffect.motionY,
                     packet63SpawnParticleEffect.motionZ,
+                    packet63SpawnParticleEffect.data,
                     packet63SpawnParticleEffect.maxDistance);
         }
 
diff --git a/src/main/java/net/minecraft/client/render/RenderBlocks.java b/src/main/java/net/minecraft/client/render/RenderBlocks.java
index 5f2030421..60e0f15ca 100644
--- a/src/main/java/net/minecraft/client/render/RenderBlocks.java
+++ b/src/main/java/net/minecraft/client/render/RenderBlocks.java
@@ -1,15 +1,14 @@
 package net.minecraft.client.render;
 
-import net.minecraft.client.render.block.model.BlockModel;
-import net.minecraft.client.render.tessalator.Tessellator;
 import org.lwjgl.opengl.GL11;
 
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.render.block.color.BlockColorDispatcher;
+import net.minecraft.client.render.block.model.BlockModel;
 import net.minecraft.client.render.stitcher.IconCoordinate;
+import net.minecraft.client.render.tessalator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.util.helper.Side;
-import net.minecraft.core.world.World;
 import net.minecraft.core.world.WorldSource;
 
 // Referenced classes of package net.minecraft.src:
@@ -71,59 +70,79 @@ public class RenderBlocks
         return blockAccess.getBrightness(x, y, z, Block.lightEmission[id]);
     }
 
-    public void renderBlockFallingSand(Tessellator tessellator, BlockModel<Block> blockModel, Block block, World world, int i, int j, int k)
-    {
-        float f = 0.5F;
-        float f1 = 1.0F;
-        float f2 = 0.8F;
-        float f3 = 0.6F;
-        tessellator.startDrawingQuads();
-        float f4 = getBlockBrightness(world, i, j, k);
-        float f5 = getBlockBrightness(world, i, j - 1, k);
-        int meta = world.getBlockMetadata(i, j, k);
-        if(f5 < f4)
-        {
-            f5 = f4;
-        }
-        tessellator.setColorOpaque_F(f * f5, f * f5, f * f5);
-        renderBottomFace(tessellator, block, -0.5D, -0.5D, -0.5D, blockModel.getBlockTextureFromSideAndMetadata(Side.BOTTOM, meta));
-        f5 = getBlockBrightness(world, i, j + 1, k);
-        if(f5 < f4)
-        {
-            f5 = f4;
-        }
-        tessellator.setColorOpaque_F(f1 * f5, f1 * f5, f1 * f5);
-        renderTopFace(tessellator, block, -0.5D, -0.5D, -0.5D, blockModel.getBlockTextureFromSideAndMetadata(Side.TOP, meta));
-        f5 = getBlockBrightness(world, i, j, k - 1);
-        if(f5 < f4)
-        {
-            f5 = f4;
-        }
-        tessellator.setColorOpaque_F(f2 * f5, f2 * f5, f2 * f5);
-        renderNorthFace(tessellator, block, -0.5D, -0.5D, -0.5D, blockModel.getBlockTextureFromSideAndMetadata(Side.NORTH, meta));
-        f5 = getBlockBrightness(world, i, j, k + 1);
-        if(f5 < f4)
-        {
-            f5 = f4;
-        }
-        tessellator.setColorOpaque_F(f2 * f5, f2 * f5, f2 * f5);
-        renderSouthFace(tessellator, block, -0.5D, -0.5D, -0.5D, blockModel.getBlockTextureFromSideAndMetadata(Side.SOUTH, meta));
-        f5 = getBlockBrightness(world, i - 1, j, k);
-        if(f5 < f4)
-        {
-            f5 = f4;
-        }
-        tessellator.setColorOpaque_F(f3 * f5, f3 * f5, f3 * f5);
-        renderWestFace(tessellator, block, -0.5D, -0.5D, -0.5D, blockModel.getBlockTextureFromSideAndMetadata(Side.WEST, meta));
-        f5 = getBlockBrightness(world, i + 1, j, k);
-        if(f5 < f4)
-        {
-            f5 = f4;
-        }
-        tessellator.setColorOpaque_F(f3 * f5, f3 * f5, f3 * f5);
-        renderEastFace(tessellator, block, -0.5D, -0.5D, -0.5D, blockModel.getBlockTextureFromSideAndMetadata(Side.EAST, meta));
-        tessellator.draw();
-    }
+	public void renderBlockFallingSand(Tessellator tessellator, BlockModel<Block> blockModel, Block block, WorldSource world, int x, int y, int z) {
+		final boolean lightmap = LightmapHelper.isLightmapEnabled();
+		
+		float sideBottom = 0.5f;
+		float sideTop = 1.0f;
+		float sideNorthSouth = 0.8f;
+		float sideEastWest = 0.6f;
+		
+		tessellator.startDrawingQuads();
+		
+		int meta = world.getBlockMetadata(x, y, z);
+		
+		final float brightnessInside = lightmap ? 1.0f : getBlockBrightness(world, x, y, z);
+		float brightness = 1.0f;
+		
+		final int lmcInside = lightmap ? block.getLightmapCoord(world, x, y, z) : 0;
+		
+		// Bottom
+		if(lightmap) {
+			tessellator.setLightmapCoord(LightmapHelper.max(lmcInside, block.getLightmapCoord(world, x, y - 1, z)));
+		}else {
+			brightness = Math.max(getBlockBrightness(world, x, y - 1, z), brightnessInside);
+		}
+		tessellator.setColorOpaque_F(sideBottom * brightness, sideBottom * brightness, sideBottom * brightness);
+		renderBottomFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.BOTTOM, meta));
+		
+		// Top
+		if(lightmap) {
+			tessellator.setLightmapCoord(LightmapHelper.max(lmcInside, block.getLightmapCoord(world, x, y + 1, z)));
+		}else {
+			brightness = Math.max(getBlockBrightness(world, x, y + 1, z), brightnessInside);	
+		}
+		tessellator.setColorOpaque_F(sideTop * brightness, sideTop * brightness, sideTop * brightness);
+		renderTopFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.TOP, meta));
+		
+		// North
+		if(lightmap) {
+			tessellator.setLightmapCoord(LightmapHelper.max(lmcInside, block.getLightmapCoord(world, x, y, z - 1)));
+		}else {
+			brightness = Math.max(getBlockBrightness(world, x, y, z - 1), brightnessInside);
+		}
+		tessellator.setColorOpaque_F(sideNorthSouth * brightness, sideNorthSouth * brightness, sideNorthSouth * brightness);
+		renderNorthFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.NORTH, meta));
+		
+		// South
+		if(lightmap) {
+			tessellator.setLightmapCoord(LightmapHelper.max(lmcInside, block.getLightmapCoord(world, x, y, z + 1)));
+		}else {
+			brightness = Math.max(getBlockBrightness(world, x, y, z + 1), brightnessInside);
+		}
+		tessellator.setColorOpaque_F(sideNorthSouth * brightness, sideNorthSouth * brightness, sideNorthSouth * brightness);
+		renderSouthFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.SOUTH, meta));
+		
+		// West
+		if(lightmap) {
+			tessellator.setLightmapCoord(LightmapHelper.max(lmcInside, block.getLightmapCoord(world, x - 1, y, z)));
+		}else {
+			brightness = Math.max(getBlockBrightness(world, x - 1, y, z), brightnessInside);
+		}
+		tessellator.setColorOpaque_F(sideEastWest * brightness, sideEastWest * brightness, sideEastWest * brightness);
+		renderWestFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.WEST, meta));
+		
+		// East
+		if(lightmap) {
+			tessellator.setLightmapCoord(LightmapHelper.max(lmcInside, block.getLightmapCoord(world, x + 1, y, z)));
+		}else {
+			brightness = Math.max(getBlockBrightness(world, x + 1, y, z), brightnessInside);
+		}
+		tessellator.setColorOpaque_F(sideEastWest * brightness, sideEastWest * brightness, sideEastWest * brightness);
+		renderEastFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.EAST, meta));
+		
+		tessellator.draw();
+	}
 
     public boolean renderStandardBlock(Tessellator tessellator, BlockModel<Block> blockModel, Block block, int x, int y, int z)
     {
diff --git a/src/main/java/net/minecraft/client/render/RenderGlobal.java b/src/main/java/net/minecraft/client/render/RenderGlobal.java
index 3d5a44b5a..17ed21139 100644
--- a/src/main/java/net/minecraft/client/render/RenderGlobal.java
+++ b/src/main/java/net/minecraft/client/render/RenderGlobal.java
@@ -1604,17 +1604,16 @@ public class RenderGlobal
     }
     
     @Override
-	public void addParticle(String particleKey, double x, double y, double z, double motionX, double motionY, double motionZ)
+	public void addParticle(String particleKey, double x, double y, double z, double motionX, double motionY, double motionZ, int data)
     {
-        addParticle(particleKey, x, y, z, motionX, motionY, motionZ, 16D);
+        addParticle(particleKey, x, y, z, motionX, motionY, motionZ, data, 16D);
     }
 
     @Override
 	public void addParticle(String particleId, double x, double y, double z,
-                            double motionX, double motionY, double motionZ, double maxDistance)
+                            double motionX, double motionY, double motionZ, int data, double maxDistance)
     {
-        if(mc == null || mc.activeCamera == null || mc.effectRenderer == null)
-        {
+        if(mc == null || mc.activeCamera == null || mc.effectRenderer == null) {
             return;
         }
         double d6 = mc.activeCamera.getX() - x;
@@ -1624,7 +1623,7 @@ public class RenderGlobal
         {
             return;
         }
-        EntityFX fx = ParticleDispatcher.getInstance().getDispatch(particleId).newParticle(worldObj, x, y, z, motionX, motionY, motionZ);
+        EntityFX fx = ParticleDispatcher.getInstance().getDispatch(particleId).newParticle(worldObj, x, y, z, motionX, motionY, motionZ, data);
         if (fx != null){
             mc.effectRenderer.addEffect(fx);
         }
@@ -1633,9 +1632,6 @@ public class RenderGlobal
     @Override
     public void allChanged()
     {
-    	if(LightmapHelper.isLightmapEnabled()) {
-    		return;
-    	}
         for (ChunkRenderer chunkRenderer : chunkRenderers)
         {
             if (chunkRenderer.isChunkLit && !chunkRenderer.needsUpdate)
@@ -1695,7 +1691,7 @@ public class RenderGlobal
                 double d7 = (double)j1 * d3 + random.nextGaussian() * 0.01D;
                 double d8 = -0.03D + random.nextGaussian() * 0.01D;
                 double d9 = (double)k1 * d3 + random.nextGaussian() * 0.01D;
-                addParticle("smoke", d4, d5, d6, d7, d8, d9);
+                addParticle("smoke", d4, d5, d6, d7, d8, d9, 0);
             }
 
             break;
diff --git a/src/main/java/net/minecraft/client/render/TileEntityRenderDispatcher.java b/src/main/java/net/minecraft/client/render/TileEntityRenderDispatcher.java
index 8a72d7ce2..fd8c3b159 100644
--- a/src/main/java/net/minecraft/client/render/TileEntityRenderDispatcher.java
+++ b/src/main/java/net/minecraft/client/render/TileEntityRenderDispatcher.java
@@ -80,9 +80,13 @@ public class TileEntityRenderDispatcher
     {
         if(tileEntity.getDistanceFrom(viewLerpPosX, viewLerpPosY, viewLerpPosZ) < 4096D)
         {
-            float brightness = worldObj.getLightBrightness(tileEntity.x, tileEntity.y, tileEntity.z);
-            if(Global.accessor.isFullbrightEnabled()) {
-            	brightness = 1.0f;
+            float brightness = 1.0f;
+            if(LightmapHelper.isLightmapEnabled()) {
+            	LightmapHelper.setLightmapCoord(worldObj.getLightmapCoord(tileEntity.x, tileEntity.y, tileEntity.z, 0));
+            }else if(Global.accessor.isFullbrightEnabled()) {
+            	
+            }else {
+            	brightness = worldObj.getLightBrightness(tileEntity.x, tileEntity.y, tileEntity.z);
             }
             GL11.glColor3f(brightness, brightness, brightness);
             renderTileEntity(tessellator,
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 6ca6f3d1a..9a0295cdc 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
@@ -30,7 +30,7 @@ public class BlockColorTallGrass
         localHumidity += offsetH;
 
         int baseGrassColor = ColorizerGrass.getGrassColor(localTemperature, localHumidity);
-        if (world.getBlockBiome(x, y - 1, z) == Biomes.OVERWORLD_CAATINGA) {
+        if (world.getBlockBiome(x, y - 1, z) == Biomes.OVERWORLD_CAATINGA || world.getBlockBiome(x, y - 1, z) == Biomes.OVERWORLD_CAATINGA_PLAINS) {
 
             Season season = world.getSeasonManager().getCurrentSeason();
             if (season != 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 c248b49e6..7f9412778 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
@@ -176,6 +176,7 @@ public class BlockModelDispatcher
         addDispatch(new BlockModelAxisAligned<>(Block.logCherry).withTextures("minecraft:block/log_cherry_top", "minecraft:block/log_cherry_side"));
         addDispatch(new BlockModelAxisAligned<>(Block.logEucalyptus).withTextures("minecraft:block/log_eucalyptus_top", "minecraft:block/log_eucalyptus_side"));
         addDispatch(new BlockModelAxisAligned<>(Block.logOakMossy).withTextures("minecraft:block/log_oak_mossy_top", "minecraft:block/log_oak_mossy_side"));
+        addDispatch(new BlockModelAxisAligned<>(Block.logBrazilwood).withTextures("minecraft:block/log_brazilwood_top", "minecraft:block/log_brazilwood_side"));
 
         addDispatch(new BlockModelLeaves<>(Block.leavesOak, "minecraft:block/leaves_oak"));
         addDispatch(new BlockModelLeaves<>(Block.leavesOakRetro, "minecraft:block/leaves_oak_retro"));
@@ -186,7 +187,7 @@ public class BlockModelDispatcher
         addDispatch(new BlockModelLeaves<>(Block.leavesShrub, "minecraft:block/leaves_shrub"));
         addDispatch(new BlockModelCherryLeavesBloom<>(Block.leavesCherryFlowering));
         addDispatch(new BlockModelCacaoLeaves<>(Block.leavesCacao));
-        addDispatch(new BlockModelLeaves<>(Block.leavesCaatinga, "minecraft:block/leaves_caatinga"));
+        addDispatch(new BlockModelLeaves<>(Block.leavesCaatinga, "minecraft:block/leaves_oak"));
 
         addDispatch(new BlockModelCrossedSquares<>(Block.saplingOak).withTextures("minecraft:block/sapling_oak"));
         addDispatch(new BlockModelCrossedSquares<>(Block.saplingOakRetro).withTextures("minecraft:block/sapling_oak_retro"));
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java
index 8800d2450..bb44de04c 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java
@@ -8,7 +8,7 @@ import net.minecraft.core.world.WorldSource;
 
 public class BlockModelLeaves<T extends Block> extends BlockModelStandard<T> {
     protected static boolean fancyGraphics;
-    private final IconCoordinate fancyLeavesTexture;
+    protected final IconCoordinate fancyLeavesTexture;
 
     public BlockModelLeaves(Block block, String leavesTex) {
         super(block);
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesOverlay.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesOverlay.java
new file mode 100644
index 000000000..9265257cb
--- /dev/null
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesOverlay.java
@@ -0,0 +1,66 @@
+package net.minecraft.client.render.block.model;
+
+import net.minecraft.client.render.tessalator.Tessellator;
+import net.minecraft.client.render.stitcher.IconCoordinate;
+import net.minecraft.client.render.stitcher.TextureRegistry;
+import net.minecraft.core.block.Block;
+import org.lwjgl.opengl.GL11;
+
+public class BlockModelLeavesOverlay<T extends Block> extends BlockModelLeaves<T> {
+    protected final IconCoordinate overlayTexture;
+    public BlockModelLeavesOverlay(Block block, String leavesTex, String overlayTex) {
+        super(block, leavesTex);
+        overlayTexture = TextureRegistry.getTexture(overlayTex);
+    }
+
+    @Override
+    public boolean render(Tessellator tessellator, int x, int y, int z) {
+        super.render(tessellator, x, y, z);
+
+        renderBlocks.overrideBlockTexture = overlayTexture;
+        renderStandardBlock(tessellator, block, x, y, z, 1.0f, 1.0f, 1.0f);
+        renderBlocks.overrideBlockTexture = null;
+
+        return true;
+    }
+    @Override
+    public void renderBlockOnInventory(Tessellator tessellator, int metadata, float brightness, float alpha) {
+        super.renderBlockOnInventory(tessellator, metadata, brightness, alpha);
+        GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
+
+        IconCoordinate overlayCoord = overlayTexture;
+        GL11.glColor4f(brightness, brightness, brightness, alpha);
+
+        tessellator.startDrawingQuads();
+        tessellator.setNormal(0.0F, -1F, 0.0F);
+        renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        tessellator.draw();
+
+        tessellator.startDrawingQuads();
+        tessellator.setNormal(0.0F, 1.0F, 0.0F);
+        renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        tessellator.draw();
+
+        tessellator.startDrawingQuads();
+        tessellator.setNormal(0.0F, 0.0F, -1F);
+        renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        tessellator.draw();
+
+        tessellator.startDrawingQuads();
+        tessellator.setNormal(0.0F, 0.0F, 1.0F);
+        renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        tessellator.draw();
+
+        tessellator.startDrawingQuads();
+        tessellator.setNormal(-1F, 0.0F, 0.0F);
+        renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        tessellator.draw();
+
+        tessellator.startDrawingQuads();
+        tessellator.setNormal(1.0F, 0.0F, 0.0F);
+        renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        tessellator.draw();
+
+        GL11.glTranslatef(0.5F, 0.5F, 0.5F);
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java b/src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java
index 9a859dc47..83cb67696 100644
--- a/src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java
+++ b/src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java
@@ -3,6 +3,7 @@ package net.minecraft.client.render.item.model;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.render.EntityRenderDispatcher;
 import net.minecraft.client.render.ItemRenderer;
+import net.minecraft.client.render.LightmapHelper;
 import net.minecraft.client.render.MapItemRenderer;
 import net.minecraft.client.render.PlayerSkinParser;
 import net.minecraft.client.render.tessalator.Tessellator;
@@ -26,10 +27,20 @@ public class ItemModelMap extends ItemModelStandard {
 
     @Override
     public void renderItemFirstPerson(Tessellator tessellator, ItemRenderer renderer, EntityPlayer player, ItemStack stack, float partialTick) {
+    	int blockX = MathHelper.floor_double(player.x);
+    	int blockY = MathHelper.floor_double(player.y);
+    	int blockZ = MathHelper.floor_double(player.z);
+    	
         // Apply appropriate brightness
-        float brightness = mc.theWorld.getLightBrightness(MathHelper.floor_double(player.x), MathHelper.floor_double(player.y), MathHelper.floor_double(player.z));
-        if (mc.fullbright) brightness = 1.0f;
-        GL11.glColor4f(brightness, brightness, brightness, 1f);
+        float brightness = 1.0f;
+        if(LightmapHelper.isLightmapEnabled()) {
+        	LightmapHelper.setLightmapCoord(mc.theWorld.getLightmapCoord(blockX, blockY, blockZ, 0));
+        }else if(mc.fullbright) {
+        	
+        }else {
+        	brightness = mc.theWorld.getLightBrightness(blockX, blockY, blockZ);
+        }
+        GL11.glColor4f(brightness, brightness, brightness, 1.0f);
 
         final float rotationPitch = player.xRotO + (player.xRot - player.xRotO) * partialTick;
         final float swingProgress = player.getSwingProgress(partialTick);
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 dd6766d9f..29ddb3e2d 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
@@ -111,9 +111,19 @@ public class ItemModelStandard extends ItemModel{
 
     @Override
     public void renderItemThirdPerson(Tessellator tessellator, ItemRenderer renderer, Entity entity, ItemStack itemstack, boolean handheldTransform) {
-        float brightness = entity.getBrightness(1f);
-        if (mc.fullbright || itemfullBright) brightness = 1.0f;
-
+        float brightness = 1.0f;
+        if(mc.fullbright || itemfullBright || LightmapHelper.isLightmapEnabled()) {
+        	if(LightmapHelper.isLightmapEnabled()) {
+            	int lightmapCoord = entity.getLightmapCoord(1.0f);
+            	if(itemfullBright) {
+            		lightmapCoord = LightmapHelper.setBlocklightValue(lightmapCoord, 15);
+            	}
+            	LightmapHelper.setLightmapCoord(lightmapCoord);	
+        	}
+        }else {
+        	brightness = entity.getBrightness(1.0f);
+        }
+        
         GL11.glTranslatef(-0.0625F, 0.4375F, 0.0625F);
         heldTransformThirdPerson(renderer, entity, itemstack);
         renderItem(tessellator, renderer, itemstack, entity, brightness, handheldTransform);
diff --git a/src/main/java/net/minecraft/core/block/Block.java b/src/main/java/net/minecraft/core/block/Block.java
index 334b525cb..936dd5b3b 100644
--- a/src/main/java/net/minecraft/core/block/Block.java
+++ b/src/main/java/net/minecraft/core/block/Block.java
@@ -999,6 +999,8 @@ public class Block
             .withTags(BlockTags.FENCES_CONNECT, BlockTags.MINEABLE_BY_AXE);
     public static final Block logOakMossy = new BlockLog("log.oak.mossy", 285).withHardness(2.0F).withDisabledNeighborNotifyOnMetadataChange()
             .withTags(BlockTags.FENCES_CONNECT, BlockTags.MINEABLE_BY_AXE);
+    public static final Block logBrazilwood = new BlockLog("log.brazilwood", 286).withHardness(2.0F).withDisabledNeighborNotifyOnMetadataChange()
+            .withTags(BlockTags.FENCES_CONNECT, BlockTags.MINEABLE_BY_AXE);
 
     public static final Block leavesOak = new BlockLeavesOak("leaves.oak", 290).withHardness(0.2F).withLightBlock(1).withDisabledStats().withDisabledNeighborNotifyOnMetadataChange()
             .withTags(BlockTags.SHEARS_DO_SILK_TOUCH, BlockTags.MINEABLE_BY_AXE, BlockTags.MINEABLE_BY_HOE, BlockTags.MINEABLE_BY_SWORD, BlockTags.MINEABLE_BY_SHEARS);
@@ -1060,6 +1062,8 @@ public class Block
             .withTags(BlockTags.BROKEN_BY_FLUIDS, BlockTags.PLANTABLE_IN_JAR);
     public static final Block flowerLightBlue = new BlockFlower("flower.lightblue", 334).setKilledByWeather().setBonemealable().withHardness(0.0F)
             .withTags(BlockTags.BROKEN_BY_FLUIDS, BlockTags.PLANTABLE_IN_JAR);
+    public static final Block flowerOrange = new BlockFlower("flower.orange", 335).setKilledByWeather().setBonemealable().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/BlockBlastFurnace.java b/src/main/java/net/minecraft/core/block/BlockBlastFurnace.java
index d26144a94..0e19b5db9 100644
--- a/src/main/java/net/minecraft/core/block/BlockBlastFurnace.java
+++ b/src/main/java/net/minecraft/core/block/BlockBlastFurnace.java
@@ -1,15 +1,15 @@
 package net.minecraft.core.block;
 
-import java.util.Random;
-
 import net.minecraft.core.Global;
-import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.block.entity.TileEntityBlastFurnace;
+import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.world.World;
 
+import java.util.Random;
+
 // Referenced classes of package net.minecraft.src:
 //            BlockContainer, Material, Block, World,
 //            IBlockAccess, TileEntityFurnace, EntityPlayer, TileEntity,
@@ -68,23 +68,23 @@ public class BlockBlastFurnace extends BlockFurnace
         float f4 = rand.nextFloat() * 0.6F - 0.3F;
         if(l == 4)
         {
-            world.spawnParticle("smoke", posX - f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("largeSmoke", posX - f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", posX - f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("largeSmoke", posX - f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D, 0);
         } else
         if(l == 5)
         {
-            world.spawnParticle("smoke", posX + f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("largeSmoke", posX + f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", posX + f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("largeSmoke", posX + f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D, 0);
         } else
         if(l == 2)
         {
-            world.spawnParticle("smoke", posX + f4, posY, posZ - f3, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("largeSmoke", posX + f4, posY, posZ - f3, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", posX + f4, posY, posZ - f3, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("largeSmoke", posX + f4, posY, posZ - f3, 0.0D, 0.0D, 0.0D, 0);
         } else
         if(l == 3)
         {
-            world.spawnParticle("smoke", posX + f4, posY, posZ + f3, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("largeSmoke", posX + f4, posY, posZ + f3, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", posX + f4, posY, posZ + f3, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("largeSmoke", posX + f4, posY, posZ + f3, 0.0D, 0.0D, 0.0D, 0);
         }
     }
 
diff --git a/src/main/java/net/minecraft/core/block/BlockCandle.java b/src/main/java/net/minecraft/core/block/BlockCandle.java
index 9000dc5b2..fe9b40831 100644
--- a/src/main/java/net/minecraft/core/block/BlockCandle.java
+++ b/src/main/java/net/minecraft/core/block/BlockCandle.java
@@ -72,8 +72,8 @@ public class BlockCandle extends Block
         double d = x + 0.5D;
         double d1 = y + 0.7D;
         double d2 = z + 0.5D;
-        world.spawnParticle("smoke", d, d1, d2, 0.0D, 0.0D, 0.0D);
-        world.spawnParticle("soulflame", d, d1, d2, 0.0D, 0.0D, 0.0D);
+        world.spawnParticle("smoke", d, d1, d2, 0.0D, 0.0D, 0.0D, 0);
+        world.spawnParticle("soulflame", d, d1, d2, 0.0D, 0.0D, 0.0D, 0);
     }
 
 }
diff --git a/src/main/java/net/minecraft/core/block/BlockFire.java b/src/main/java/net/minecraft/core/block/BlockFire.java
index ce2714704..af484cb45 100644
--- a/src/main/java/net/minecraft/core/block/BlockFire.java
+++ b/src/main/java/net/minecraft/core/block/BlockFire.java
@@ -87,7 +87,7 @@ public class BlockFire extends Block {
 	{
 		for (int i = 0; i < 8; i++)
 		{
-			world.spawnParticle("largesmoke", (double)x + Math.random(), (double)y + 0.5D, (double)z + Math.random(), 0.0D, 0.0D, 0.0D);
+			world.spawnParticle("largesmoke", (double)x + Math.random(), (double)y + 0.5D, (double)z + Math.random(), 0.0D, 0.0D, 0.0D, 0);
 		}
 	}
 
@@ -299,7 +299,7 @@ public class BlockFire extends Block {
 				double f = (double) x + rand.nextFloat();
 				double f6 = (double) y + rand.nextFloat() * 0.5F + 0.5F;
 				double f12 = (double) z + rand.nextFloat();
-				world.spawnParticle("largesmoke", f, f6, f12, 0.0D, 0.0D, 0.0D);
+				world.spawnParticle("largesmoke", f, f6, f12, 0.0D, 0.0D, 0.0D, 0);
 			}
 
 		} else {
@@ -308,7 +308,7 @@ public class BlockFire extends Block {
 					double f1 = (double) x + rand.nextFloat() * 0.1F;
 					double f7 = (double) y + rand.nextFloat();
 					double f13 = (double) z + rand.nextFloat();
-					world.spawnParticle("largesmoke", f1, f7, f13, 0.0D, 0.0D, 0.0D);
+					world.spawnParticle("largesmoke", f1, f7, f13, 0.0D, 0.0D, 0.0D, 0);
 				}
 
 			}
@@ -317,7 +317,7 @@ public class BlockFire extends Block {
 					double f2 = (double) (x + 1) - rand.nextFloat() * 0.1F;
 					double f8 = (double) y + rand.nextFloat();
 					double f14 = (double) z + rand.nextFloat();
-					world.spawnParticle("largesmoke", f2, f8, f14, 0.0D, 0.0D, 0.0D);
+					world.spawnParticle("largesmoke", f2, f8, f14, 0.0D, 0.0D, 0.0D, 0);
 				}
 
 			}
@@ -326,7 +326,7 @@ public class BlockFire extends Block {
 					double f3 = (double) x + rand.nextFloat();
 					double f9 = (double) y + rand.nextFloat();
 					double f15 = (double) z + rand.nextFloat() * 0.1F;
-					world.spawnParticle("largesmoke", f3, f9, f15, 0.0D, 0.0D, 0.0D);
+					world.spawnParticle("largesmoke", f3, f9, f15, 0.0D, 0.0D, 0.0D, 0);
 				}
 
 			}
@@ -335,7 +335,7 @@ public class BlockFire extends Block {
 					double f4 = (double) x + rand.nextFloat();
 					double f10 = (double) y + rand.nextFloat();
 					double f16 = (double) (z + 1) - rand.nextFloat() * 0.1F;
-					world.spawnParticle("largesmoke", f4, f10, f16, 0.0D, 0.0D, 0.0D);
+					world.spawnParticle("largesmoke", f4, f10, f16, 0.0D, 0.0D, 0.0D, 0);
 				}
 
 			}
@@ -344,7 +344,7 @@ public class BlockFire extends Block {
 					double f5 = (double) x + rand.nextFloat();
 					double f11 = (double) (y + 1) - rand.nextFloat() * 0.1F;
 					double f17 = (double) z + rand.nextFloat();
-					world.spawnParticle("largesmoke", f5, f11, f17, 0.0D, 0.0D, 0.0D);
+					world.spawnParticle("largesmoke", f5, f11, f17, 0.0D, 0.0D, 0.0D, 0);
 				}
 
 			}
diff --git a/src/main/java/net/minecraft/core/block/BlockFluid.java b/src/main/java/net/minecraft/core/block/BlockFluid.java
index 9930d4175..7e695b939 100644
--- a/src/main/java/net/minecraft/core/block/BlockFluid.java
+++ b/src/main/java/net/minecraft/core/block/BlockFluid.java
@@ -212,7 +212,7 @@ public abstract class BlockFluid extends Block
             double xOff = (double) x + rand.nextFloat();
             double yOff = (double) y + maxY;
             double zOff = (double) z + rand.nextFloat();
-            world.spawnParticle("lava", xOff, yOff, zOff, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("lava", xOff, yOff, zOff, 0.0D, 0.0D, 0.0D, 0);
         }
     }
 
@@ -312,7 +312,7 @@ public abstract class BlockFluid extends Block
         world.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, (float)x + 0.5F, (float)y + 0.5F, (float)z + 0.5F, "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F);
         for (int i = 0; i < 8; i++)
         {
-            world.spawnParticle("largesmoke", (double)x + Math.random(), (double)y + 1.2D, (double)z + Math.random(), 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("largesmoke", (double)x + Math.random(), (double)y + 1.2D, (double)z + Math.random(), 0.0D, 0.0D, 0.0D, 0);
         }
     }
 }
diff --git a/src/main/java/net/minecraft/core/block/BlockFurnace.java b/src/main/java/net/minecraft/core/block/BlockFurnace.java
index 560cb0f63..1f14dd775 100644
--- a/src/main/java/net/minecraft/core/block/BlockFurnace.java
+++ b/src/main/java/net/minecraft/core/block/BlockFurnace.java
@@ -1,16 +1,16 @@
 package net.minecraft.core.block;
 
-import java.util.Random;
-
 import net.minecraft.core.Global;
+import net.minecraft.core.block.entity.TileEntity;
+import net.minecraft.core.block.entity.TileEntityFurnace;
+import net.minecraft.core.block.material.Material;
 import net.minecraft.core.entity.EntityItem;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.world.World;
-import net.minecraft.core.block.entity.TileEntity;
-import net.minecraft.core.block.entity.TileEntityFurnace;
-import net.minecraft.core.block.material.Material;
+
+import java.util.Random;
 
 // Referenced classes of package net.minecraft.src:
 //            BlockContainer, Material, Block, World, 
@@ -65,23 +65,23 @@ public class BlockFurnace extends BlockTileEntityRotatable
         double f4 = rand.nextFloat() * 0.6F - 0.3F;
         if(l == 4)
         {
-            world.spawnParticle("smoke", poxX - f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("flame", poxX - f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", poxX - f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("flame", poxX - f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D, 0);
         } else
         if(l == 5)
         {
-            world.spawnParticle("smoke", poxX + f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("flame", poxX + f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", poxX + f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("flame", poxX + f3, posY, posZ + f4, 0.0D, 0.0D, 0.0D, 0);
         } else
         if(l == 2)
         {
-            world.spawnParticle("smoke", poxX + f4, posY, posZ - f3, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("flame", poxX + f4, posY, posZ - f3, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", poxX + f4, posY, posZ - f3, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("flame", poxX + f4, posY, posZ - f3, 0.0D, 0.0D, 0.0D, 0);
         } else
         if(l == 3)
         {
-            world.spawnParticle("smoke", poxX + f4, posY, posZ + f3, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("flame", poxX + f4, posY, posZ + f3, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", poxX + f4, posY, posZ + f3, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("flame", poxX + f4, posY, posZ + f3, 0.0D, 0.0D, 0.0D, 0);
         }
     }
 
diff --git a/src/main/java/net/minecraft/core/block/BlockGrass.java b/src/main/java/net/minecraft/core/block/BlockGrass.java
index d0317fe91..fe1d7d72e 100644
--- a/src/main/java/net/minecraft/core/block/BlockGrass.java
+++ b/src/main/java/net/minecraft/core/block/BlockGrass.java
@@ -69,7 +69,7 @@ public class BlockGrass extends Block
                         idToSpawn = Block.flowerPink.id;
                     } else if (biome == Biomes.OVERWORLD_MEADOW || biome == Biomes.OVERWORLD_BOREAL_FOREST || biome == Biomes.OVERWORLD_SHRUBLAND) {
                         idToSpawn = Block.flowerPurple.id;
-                    } else if (biome == Biomes.OVERWORLD_FOREST || biome == Biomes.OVERWORLD_SWAMPLAND || biome == Biomes.OVERWORLD_RAINFOREST || biome == Biomes.OVERWORLD_GRASSLANDS || biome == Biomes.OVERWORLD_CAATINGA) {
+                    } else if (biome == Biomes.OVERWORLD_FOREST || biome == Biomes.OVERWORLD_SWAMPLAND || biome == Biomes.OVERWORLD_RAINFOREST || biome == Biomes.OVERWORLD_CAATINGA) {
                         idToSpawn = Block.flowerLightBlue.id;
                     }
                 } else {
diff --git a/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java b/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java
index 0f6aa5149..8278fb1fe 100644
--- a/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java
+++ b/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java
@@ -72,7 +72,7 @@ public class BlockLanternFirefly extends Block{
     {
         if(rand.nextInt(3)==0)
         {
-            world.spawnParticle(color.getParticleName(), (double)x + rand.nextFloat(), (double)y + rand.nextFloat(), (double) z + rand.nextFloat(), 0.0D, 0.0D, 0.0D);
+            world.spawnParticle(color.getParticleName(), (double)x + rand.nextFloat(), (double)y + rand.nextFloat(), (double) z + rand.nextFloat(), 0.0D, 0.0D, 0.0D, 0);
         }
     }
 
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesCherry.java b/src/main/java/net/minecraft/core/block/BlockLeavesCherry.java
index 19546388a..5601114a8 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesCherry.java
+++ b/src/main/java/net/minecraft/core/block/BlockLeavesCherry.java
@@ -25,7 +25,7 @@ public class BlockLeavesCherry extends BlockLeavesBase
     {
         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);
+            world.spawnParticle("fallingleaf", x, (double) y - 0.1f, z, 0, 0, 0, 0);
         }
     }
 
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java b/src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java
index c74cad9b3..a0cfebe4b 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java
+++ b/src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java
@@ -30,7 +30,7 @@ public class BlockLeavesEucalyptus extends BlockLeavesBase
     {
     	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);
+    		world.spawnParticle("fallingleaf", x, (double) y - 0.1f, z, 0, 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 f3f8bbd14..de34c8669 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesOak.java
+++ b/src/main/java/net/minecraft/core/block/BlockLeavesOak.java
@@ -58,7 +58,7 @@ public class BlockLeavesOak extends BlockLeavesBase
             float windIntensity = wind.getWindIntensity(world, x, y, z);
             if (rand.nextInt((int)(40 + 200 * (1 - windIntensity))) == 0)
             {
-                world.spawnParticle("fallingleaf", x, (double) y - 0.1f, z, 0, 0, 0);
+                world.spawnParticle("fallingleaf", x, (double) y - 0.1f, z, 0, 0, 0, 0);
             }
     	}
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesShrub.java b/src/main/java/net/minecraft/core/block/BlockLeavesShrub.java
index 7dcb14aea..7a0bb876a 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesShrub.java
+++ b/src/main/java/net/minecraft/core/block/BlockLeavesShrub.java
@@ -30,7 +30,7 @@ public class BlockLeavesShrub extends BlockLeavesBase
     {
         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);
+            world.spawnParticle("fallingleaf", x, (double) y - 0.1f, z, 0, 0, 0, 0);
         }
     }
 }
diff --git a/src/main/java/net/minecraft/core/block/BlockMotionSensor.java b/src/main/java/net/minecraft/core/block/BlockMotionSensor.java
index 16b15db68..eccff28f3 100644
--- a/src/main/java/net/minecraft/core/block/BlockMotionSensor.java
+++ b/src/main/java/net/minecraft/core/block/BlockMotionSensor.java
@@ -85,7 +85,7 @@ public class BlockMotionSensor extends BlockTileEntityRotatable
 			if (i == 5 && !world.isBlockOpaqueCube(x - 1, y, z)) px = (x + 0) - d;
 			
 			if (px < x || px > (x + 1) || py < 0.0D || py > (y + 1) || pz < z || pz > (z + 1)) {
-				world.spawnParticle("reddust", px, py, pz, red, green, blue);
+				world.spawnParticle("reddust", px, py, pz, red, green, blue, 0);
 			}
 		}
 	}
diff --git a/src/main/java/net/minecraft/core/block/BlockMud.java b/src/main/java/net/minecraft/core/block/BlockMud.java
index ba6819318..9c051dc50 100644
--- a/src/main/java/net/minecraft/core/block/BlockMud.java
+++ b/src/main/java/net/minecraft/core/block/BlockMud.java
@@ -178,7 +178,7 @@ public class BlockMud extends Block{
                 world.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x + 0.5D, y + 0.5D, z + 0.5D, "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F);
                 for(int l = 0; l < 8; l++)
                 {
-                    world.spawnParticle("largesmoke", (double)x + Math.random(), (double)y + Math.random(), (double)z + Math.random(), 0.0D, 0.0D, 0.0D);
+                    world.spawnParticle("largesmoke", (double)x + Math.random(), (double)y + Math.random(), (double)z + Math.random(), 0.0D, 0.0D, 0.0D, 0);
                 }
                 world.setBlock(x, y, z, Block.mudBaked.id);
                 world.notifyBlockChange(x, y, z, Block.mudBaked.id);
diff --git a/src/main/java/net/minecraft/core/block/BlockNote.java b/src/main/java/net/minecraft/core/block/BlockNote.java
index aa6847cb3..a67449bb4 100644
--- a/src/main/java/net/minecraft/core/block/BlockNote.java
+++ b/src/main/java/net/minecraft/core/block/BlockNote.java
@@ -95,6 +95,6 @@ public class BlockNote extends BlockTileEntity
             s = "bassattack";
         }
         world.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, (double) x + 0.5D, (double) y + 0.5D, (double) z + 0.5D, (new StringBuilder()).append("note.").append(s).toString(), 3F, f);
-        world.spawnParticle("note", (double) x + 0.5D, (double) y + 1.2D, (double) z + 0.5D, (double) data / 24D, 0.0D, 0.0D);
+        world.spawnParticle("note", (double) x + 0.5D, (double) y + 1.2D, (double) z + 0.5D, (double) data / 24D, 0.0D, 0.0D, 0);
     }
 }
diff --git a/src/main/java/net/minecraft/core/block/BlockOreRedstone.java b/src/main/java/net/minecraft/core/block/BlockOreRedstone.java
index 985c56972..fe4305123 100644
--- a/src/main/java/net/minecraft/core/block/BlockOreRedstone.java
+++ b/src/main/java/net/minecraft/core/block/BlockOreRedstone.java
@@ -8,7 +8,6 @@ import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.helper.Color;
 import net.minecraft.client.util.helper.Colors;
-import net.minecraft.core.world.WorldSource;
 import net.minecraft.core.world.World;
 import net.minecraft.core.block.material.Material;
 
@@ -124,7 +123,7 @@ public class BlockOreRedstone extends Block
 			if (i == 5 && !world.isBlockOpaqueCube(x - 1, y, z)) px = (x + 0) - d;
 			
 			if (px < x || px > (x + 1) || py < 0.0D || py > (y + 1) || pz < z || pz > (z + 1)) {
-				world.spawnParticle("reddust", px, py, pz, red, green, blue);
+				world.spawnParticle("reddust", px, py, pz, red, green, blue, 0);
 			}
 		}
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockPortal.java b/src/main/java/net/minecraft/core/block/BlockPortal.java
index 419585e3c..96b9086b9 100644
--- a/src/main/java/net/minecraft/core/block/BlockPortal.java
+++ b/src/main/java/net/minecraft/core/block/BlockPortal.java
@@ -342,7 +342,7 @@ public class BlockPortal extends BlockTransparent
                 d = (double) x + 0.5D + 0.25D * (double)i1;
                 d3 = rand.nextFloat() * 2.0D * (double)i1;
             }
-            world.spawnParticle("portal", d, d1, d2, d3, d4, d5);
+            world.spawnParticle("portal", d, d1, d2, d3, d4, d5, 0);
         }
 
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockRedstone.java b/src/main/java/net/minecraft/core/block/BlockRedstone.java
index f11810e35..400adb7f8 100644
--- a/src/main/java/net/minecraft/core/block/BlockRedstone.java
+++ b/src/main/java/net/minecraft/core/block/BlockRedstone.java
@@ -87,7 +87,7 @@ public class BlockRedstone extends Block
 			if (i == 5 && !world.isBlockOpaqueCube(x - 1, y, z)) px = (x + 0) - d;
 			
 			if (px < x || px > (x + 1) || py < 0.0D || py > (y + 1) || pz < z || pz > (z + 1)) {
-				world.spawnParticle("reddust", px, py, pz, red, green, blue);
+				world.spawnParticle("reddust", px, py, pz, red, green, blue, 0);
 			}
 		}
 	}
diff --git a/src/main/java/net/minecraft/core/block/BlockRedstoneRepeater.java b/src/main/java/net/minecraft/core/block/BlockRedstoneRepeater.java
index 7d685ad41..402f83cff 100644
--- a/src/main/java/net/minecraft/core/block/BlockRedstoneRepeater.java
+++ b/src/main/java/net/minecraft/core/block/BlockRedstoneRepeater.java
@@ -253,7 +253,7 @@ public class BlockRedstoneRepeater extends Block
 				break;
 			}
 		}
-		world.spawnParticle("reddust", px + xOffset, py, pz + zOffset, red, green, blue);
+		world.spawnParticle("reddust", px + xOffset, py, pz + zOffset, red, green, blue, 0);
 	}
 
     public static final double field_22024_a[] = {
diff --git a/src/main/java/net/minecraft/core/block/BlockRedstoneTorch.java b/src/main/java/net/minecraft/core/block/BlockRedstoneTorch.java
index 376e0c73f..eb26cb3a2 100644
--- a/src/main/java/net/minecraft/core/block/BlockRedstoneTorch.java
+++ b/src/main/java/net/minecraft/core/block/BlockRedstoneTorch.java
@@ -154,7 +154,7 @@ public class BlockRedstoneTorch extends BlockTorch
                         double d = (double) x + rand.nextDouble() * 0.6D + 0.2D;
                         double d1 = (double) y + rand.nextDouble() * 0.6D + 0.2D;
                         double d2 = (double) z + rand.nextDouble() * 0.6D + 0.2D;
-                        world.spawnParticle("smoke", d, d1, d2, 0.0D, 0.0D, 0.0D);
+                        world.spawnParticle("smoke", d, d1, d2, 0.0D, 0.0D, 0.0D, 0);
                     }
                 }
             }
@@ -219,15 +219,15 @@ public class BlockRedstoneTorch extends BlockTorch
 		float blue = color.getBlue() / 255.0f;
 		
 		if (meta == 1) {
-			world.spawnParticle("reddust", px - horizontalOffset, py + verticalOffset, pz, red, green, blue);
+			world.spawnParticle("reddust", px - horizontalOffset, py + verticalOffset, pz, red, green, blue, 0);
 		} else if (meta == 2) {
-			world.spawnParticle("reddust", px + horizontalOffset, py + verticalOffset, pz, red, green, blue);
+			world.spawnParticle("reddust", px + horizontalOffset, py + verticalOffset, pz, red, green, blue, 0);
 		} else if (meta == 3) {
-			world.spawnParticle("reddust", px, py + verticalOffset, pz - horizontalOffset, red, green, blue);
+			world.spawnParticle("reddust", px, py + verticalOffset, pz - horizontalOffset, red, green, blue, 0);
 		} else if (meta == 4) {
-			world.spawnParticle("reddust", px, py + verticalOffset, pz + horizontalOffset, red, green, blue);
+			world.spawnParticle("reddust", px, py + verticalOffset, pz + horizontalOffset, red, green, blue, 0);
 		} else {
-			world.spawnParticle("reddust", px, py, pz, red, green, blue);
+			world.spawnParticle("reddust", px, py, pz, red, green, blue, 0);
 		}
 	}
 
diff --git a/src/main/java/net/minecraft/core/block/BlockRedstoneWire.java b/src/main/java/net/minecraft/core/block/BlockRedstoneWire.java
index d9f4cb344..67ece3c5a 100644
--- a/src/main/java/net/minecraft/core/block/BlockRedstoneWire.java
+++ b/src/main/java/net/minecraft/core/block/BlockRedstoneWire.java
@@ -435,7 +435,7 @@ public class BlockRedstoneWire extends Block
 		float green = color.getGreen() / 255.0f;
 		float blue = color.getBlue() / 255.0f;
 
-		world.spawnParticle("reddust", px, py, pz, red, green, blue);
+		world.spawnParticle("reddust", px, py, pz, red, green, blue, 0);
 	}
 
     public static boolean isPowerProviderOrWire(WorldSource iblockaccess, int i, int j, int k, int l)
diff --git a/src/main/java/net/minecraft/core/block/BlockSponge.java b/src/main/java/net/minecraft/core/block/BlockSponge.java
index 1a4049079..01c82464e 100644
--- a/src/main/java/net/minecraft/core/block/BlockSponge.java
+++ b/src/main/java/net/minecraft/core/block/BlockSponge.java
@@ -29,7 +29,7 @@ public class BlockSponge extends Block
             world.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x + 0.5D, y + 0.5D, z + 0.5D, "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F);
             for(int l = 0; l < 8; l++)
             {
-                world.spawnParticle("largesmoke", (double)x + Math.random(), (double)y + Math.random(), (double)z + Math.random(), 0.0D, 0.0D, 0.0D);
+                world.spawnParticle("largesmoke", (double)x + Math.random(), (double)y + Math.random(), (double)z + Math.random(), 0.0D, 0.0D, 0.0D, 0);
             }
         }
         if(!isWet && inWater(world, x, y, z)) {
diff --git a/src/main/java/net/minecraft/core/block/BlockStone.java b/src/main/java/net/minecraft/core/block/BlockStone.java
index c2415ad80..14604589e 100644
--- a/src/main/java/net/minecraft/core/block/BlockStone.java
+++ b/src/main/java/net/minecraft/core/block/BlockStone.java
@@ -37,7 +37,7 @@ public class BlockStone extends Block {
         Chunk chunk = world.getChunkFromBlockCoords(x, z);
 		if (y <= 32 && chunk.getChunkRandom(0x3ad8025fL).nextInt(10) == 0 && world.getBlockId(x, y - 1, z) == 0) {
 			if (rand.nextInt(50) == 0)
-				world.spawnParticle("slimechunk", x, y, z, 0.0D, 0.0D, 0.0D);
+				world.spawnParticle("slimechunk", x, y, z, 0.0D, 0.0D, 0.0D, 0);
 		}
 	}
 	
diff --git a/src/main/java/net/minecraft/core/block/BlockTorch.java b/src/main/java/net/minecraft/core/block/BlockTorch.java
index 00b469fb5..248a1700a 100644
--- a/src/main/java/net/minecraft/core/block/BlockTorch.java
+++ b/src/main/java/net/minecraft/core/block/BlockTorch.java
@@ -1,7 +1,5 @@
 package net.minecraft.core.block;
 
-import java.util.Random;
-
 import net.minecraft.core.HitResult;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.entity.EntityLiving;
@@ -12,6 +10,8 @@ import net.minecraft.core.util.phys.Vec3d;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.WorldSource;
 
+import java.util.Random;
+
 // Referenced classes of package net.minecraft.src:
 //            Block, Material, World, AxisAlignedBB, 
 //            Vec3D, MovingObjectPosition
@@ -221,27 +221,27 @@ public class BlockTorch extends Block
         double d4 = 0.27D;
         if(l == 1)
         {
-            world.spawnParticle("smoke", xPos - d4, yPos + d3, zPos, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("flame", xPos - d4, yPos + d3, zPos, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", xPos - d4, yPos + d3, zPos, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("flame", xPos - d4, yPos + d3, zPos, 0.0D, 0.0D, 0.0D, 0);
         } else
         if(l == 2)
         {
-            world.spawnParticle("smoke", xPos + d4, yPos + d3, zPos, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("flame", xPos + d4, yPos + d3, zPos, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", xPos + d4, yPos + d3, zPos, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("flame", xPos + d4, yPos + d3, zPos, 0.0D, 0.0D, 0.0D, 0);
         } else
         if(l == 3)
         {
-            world.spawnParticle("smoke", xPos, yPos + d3, zPos - d4, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("flame", xPos, yPos + d3, zPos - d4, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", xPos, yPos + d3, zPos - d4, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("flame", xPos, yPos + d3, zPos - d4, 0.0D, 0.0D, 0.0D, 0);
         } else
         if(l == 4)
         {
-            world.spawnParticle("smoke", xPos, yPos + d3, zPos + d4, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("flame", xPos, yPos + d3, zPos + d4, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", xPos, yPos + d3, zPos + d4, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("flame", xPos, yPos + d3, zPos + d4, 0.0D, 0.0D, 0.0D, 0);
         } else
         {
-            world.spawnParticle("smoke", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D);
-            world.spawnParticle("flame", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D, 0);
+            world.spawnParticle("flame", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D, 0);
         }
     }
     
diff --git a/src/main/java/net/minecraft/core/block/BlockTrommel.java b/src/main/java/net/minecraft/core/block/BlockTrommel.java
index 1c4dc8ffc..d1a330dd1 100644
--- a/src/main/java/net/minecraft/core/block/BlockTrommel.java
+++ b/src/main/java/net/minecraft/core/block/BlockTrommel.java
@@ -1,16 +1,16 @@
 package net.minecraft.core.block;
 
-import java.util.Random;
-
 import net.minecraft.core.Global;
+import net.minecraft.core.block.entity.TileEntity;
+import net.minecraft.core.block.entity.TileEntityTrommel;
+import net.minecraft.core.block.material.Material;
 import net.minecraft.core.entity.EntityItem;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.world.World;
-import net.minecraft.core.block.entity.TileEntity;
-import net.minecraft.core.block.entity.TileEntityTrommel;
-import net.minecraft.core.block.material.Material;
+
+import java.util.Random;
 
 public class BlockTrommel extends BlockTileEntityRotatable
 {
@@ -61,7 +61,7 @@ public class BlockTrommel extends BlockTileEntityRotatable
         double xPos = (double) x + rand.nextFloat();
         double yPos = (double) y + rand.nextFloat() * 0.5D + 1D;
         double zPos = (double) z + rand.nextFloat();
-        world.spawnParticle("smoke", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D);
+        world.spawnParticle("smoke", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D, 0);
     }
     
     public static void updateTrommelBlockState(boolean flag, World world, int i, int j, int k)
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityMobSpawner.java b/src/main/java/net/minecraft/core/block/entity/TileEntityMobSpawner.java
index 7aaeed0b6..a5776d35d 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntityMobSpawner.java
+++ b/src/main/java/net/minecraft/core/block/entity/TileEntityMobSpawner.java
@@ -63,8 +63,8 @@ public class TileEntityMobSpawner extends TileEntity
         double xPos = (double) x + worldObj.rand.nextFloat();
         double yPos = (double) y + worldObj.rand.nextFloat();
         double zPos = (double) z + worldObj.rand.nextFloat();
-        worldObj.spawnParticle("smoke", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D);
-        worldObj.spawnParticle("flame", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D);
+        worldObj.spawnParticle("smoke", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D, 0);
+        worldObj.spawnParticle("flame", xPos, yPos, zPos, 0.0D, 0.0D, 0.0D, 0);
         for(yaw += 1000F / ((float)delay + 200F); yaw > 360D;)
         {
             yaw -= 360D;
@@ -130,8 +130,8 @@ public class TileEntityMobSpawner extends TileEntity
                     double d1 = (double) x + 0.5D + ((double)worldObj.rand.nextFloat() - 0.5D) * 2D;
                     double d3 = (double) y + 0.5D + ((double)worldObj.rand.nextFloat() - 0.5D) * 2D;
                     double d5 = (double) z + 0.5D + ((double)worldObj.rand.nextFloat() - 0.5D) * 2D;
-                    worldObj.spawnParticle("smoke", d1, d3, d5, 0.0D, 0.0D, 0.0D);
-                    worldObj.spawnParticle("flame", d1, d3, d5, 0.0D, 0.0D, 0.0D);
+                    worldObj.spawnParticle("smoke", d1, d3, d5, 0.0D, 0.0D, 0.0D, 0);
+                    worldObj.spawnParticle("flame", d1, d3, d5, 0.0D, 0.0D, 0.0D, 0);
                     worldObj.playSoundAtEntity(null, entityliving, "mob.ghast.fireball", 0.025F, 0.75F);
                 }
 
diff --git a/src/main/java/net/minecraft/core/entity/Entity.java b/src/main/java/net/minecraft/core/entity/Entity.java
index 1817e7995..cf12da4c0 100644
--- a/src/main/java/net/minecraft/core/entity/Entity.java
+++ b/src/main/java/net/minecraft/core/entity/Entity.java
@@ -1,13 +1,9 @@
 package net.minecraft.core.entity;
 
-import java.util.List;
-import java.util.Random;
-
 import com.mojang.nbt.CompoundTag;
 import com.mojang.nbt.DoubleTag;
 import com.mojang.nbt.FloatTag;
 import com.mojang.nbt.ListTag;
-
 import net.minecraft.client.gui.guidebook.mobs.MobInfoRegistry;
 import net.minecraft.client.render.LightmapHelper;
 import net.minecraft.core.Global;
@@ -28,6 +24,9 @@ import net.minecraft.core.world.IVehicle;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.data.SynchedEntityData;
 
+import java.util.List;
+import java.util.Random;
+
 public abstract class Entity
     implements IVehicle
 {
@@ -237,23 +236,26 @@ public abstract class Entity
         zo = z;
         xRotO = xRot;
         yRotO = yRot;
-        if (isSprinting())
-        {
-            int x = MathHelper.floor_double(this.x);
-            int y = MathHelper.floor_double(this.y - 0.2 - (double)heightOffset);
-            int z = MathHelper.floor_double(this.z);
-            int floorBlock = world.getBlockId(x, y, z);
-            if (floorBlock > 0)
-            {
-                world.spawnParticle("tilecrack_" + floorBlock,
-                    this.x + ((double)random.nextFloat() - 0.5D) * (double)bbWidth,
-                    bb.minY + 0.1,
-                    this.z + ((double)random.nextFloat() - 0.5D) * (double)bbWidth,
-                    -xd * 4D,
-                    1.5D,
-                    -zd * 4D);
-            }
-        }
+        // Removed at jonks request, should work though if it ever wants to be uncommented
+//        if (isSprinting())
+//        {
+//            int x = MathHelper.floor_double(this.x);
+//            int y = MathHelper.floor_double(this.y - 0.2 - (double)heightOffset);
+//            int z = MathHelper.floor_double(this.z);
+//            int floorBlock = world.getBlockId(x, y, z);
+//            int meta = world.getBlockMetadata(x, y, z);
+//            if (floorBlock > 0)
+//            {
+//                world.spawnParticle("block",
+//                    this.x + ((double)random.nextFloat() - 0.5D) * (double)bbWidth,
+//                    bb.minY + 0.1,
+//                    this.z + ((double)random.nextFloat() - 0.5D) * (double)bbWidth,
+//                    -xd * 4D,
+//                    1.5D,
+//                    -zd * 4D,
+//                        BlockParticleHelper.encodeBlockData(floorBlock, meta, Side.TOP));
+//            }
+//        }
 
         checkOnWater(true);
 
@@ -327,14 +329,14 @@ public abstract class Entity
                 {
                     double offX = (random.nextFloat() * 2.0F - 1.0F) * bbWidth;
                     double offZ = (random.nextFloat() * 2.0F - 1.0F) * bbWidth;
-                    world.spawnParticle("bubble", x + offX, f1 + 1.0F, z + offZ, xd, yd - (double)(random.nextFloat() * 0.2F), zd);
+                    world.spawnParticle("bubble", x + offX, f1 + 1.0F, z + offZ, xd, yd - (double)(random.nextFloat() * 0.2F), zd, 0);
                 }
 
                 for(int j = 0; (float)j < 1.0F + bbWidth * 20F; j++)
                 {
                     double offX = (random.nextFloat() * 2.0F - 1.0F) * bbWidth;
                     double offZ = (random.nextFloat() * 2.0F - 1.0F) * bbWidth;
-                    world.spawnParticle("splash", x + offX, f1 + 1.0F, z + offZ, xd, yd, zd);
+                    world.spawnParticle("splash", x + offX, f1 + 1.0F, z + offZ, xd, yd, zd, 0);
                 }
             }
             fallDistance = 0.0F;
@@ -803,6 +805,11 @@ public abstract class Entity
     }
     
     public int getLightmapCoord(float partialTicks) {
+    	if(world == null) {
+    		// Happens when the guidebook is rendered
+    		return LightmapHelper.getLightmapCoord(15, 15);
+    	}
+    	
     	int blockX = MathHelper.floor_double(x);
     	int blockY = MathHelper.floor_double(y);
     	int blockZ = MathHelper.floor_double(z);
diff --git a/src/main/java/net/minecraft/core/entity/EntityBobber.java b/src/main/java/net/minecraft/core/entity/EntityBobber.java
index b85e5663a..98a846379 100644
--- a/src/main/java/net/minecraft/core/entity/EntityBobber.java
+++ b/src/main/java/net/minecraft/core/entity/EntityBobber.java
@@ -300,14 +300,14 @@ public class EntityBobber extends Entity
                     {
                         double xOff = (random.nextFloat() * 2.0F - 1.0F) * bbWidth;
                         double zOff = (random.nextFloat() * 2.0F - 1.0F) * bbWidth;
-                        world.spawnParticle("bubble", x + xOff, f3 + 1.0F, z + zOff, xd, yd - (double)(random.nextFloat() * 0.2F), zd);
+                        world.spawnParticle("bubble", x + xOff, f3 + 1.0F, z + zOff, xd, yd - (double)(random.nextFloat() * 0.2F), zd, 0);
                     }
 
                     for(int j1 = 0; (float)j1 < 1.0F + bbWidth * 20F; j1++)
                     {
                         double xOff = (random.nextFloat() * 2.0F - 1.0F) * bbWidth;
                         double zOff = (random.nextFloat() * 2.0F - 1.0F) * bbWidth;
-                        world.spawnParticle("splash", x + xOff, f3 + 1.0F, z + zOff, xd, yd, zd);
+                        world.spawnParticle("splash", x + xOff, f3 + 1.0F, z + zOff, xd, yd, zd, 0);
                     }
 
                 }
diff --git a/src/main/java/net/minecraft/core/entity/EntityLiving.java b/src/main/java/net/minecraft/core/entity/EntityLiving.java
index 7c9cca677..128369d58 100644
--- a/src/main/java/net/minecraft/core/entity/EntityLiving.java
+++ b/src/main/java/net/minecraft/core/entity/EntityLiving.java
@@ -225,7 +225,7 @@ public abstract class EntityLiving extends Entity
                     double motionX = random.nextGaussian() * 0.02D;
                     double motionY = random.nextGaussian() * 0.02D;
                     double motionZ = random.nextGaussian() * 0.02D;
-                    world.spawnParticle("explode", (x + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth, y + (double)(random.nextFloat() * bbHeight), (z + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth, motionX, motionY, motionZ);
+                    world.spawnParticle("explode", (x + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth, y + (double)(random.nextFloat() * bbHeight), (z + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth, motionX, motionY, motionZ, 0);
                 }
 
             }
@@ -257,7 +257,7 @@ public abstract class EntityLiving extends Entity
                     double offX = random.nextFloat() - random.nextFloat();
                     double offY = random.nextFloat() - random.nextFloat();
                     double offZ = random.nextFloat() - random.nextFloat();
-                    world.spawnParticle("bubble", x + offX, y + offY, z + offZ, xd, yd, zd);
+                    world.spawnParticle("bubble", x + offX, y + offY, z + offZ, xd, yd, zd, 0);
                 }
 
                 hurt(null, 2, DamageType.DROWN);
@@ -277,7 +277,7 @@ public abstract class EntityLiving extends Entity
             double d1 = random.nextGaussian() * 0.02D;
             double d2 = random.nextGaussian() * 0.02D;
             double d3 = 10D;
-            world.spawnParticle("explode", (x + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth - d * d3, (y + (double)(random.nextFloat() * bbHeight)) - d1 * d3, (z + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth - d2 * d3, d, d1, d2);
+            world.spawnParticle("explode", (x + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth - d * d3, (y + (double)(random.nextFloat() * bbHeight)) - d1 * d3, (z + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth - d2 * d3, d, d1, d2, 0);
         }
 
     }
diff --git a/src/main/java/net/minecraft/core/entity/EntityTNT.java b/src/main/java/net/minecraft/core/entity/EntityTNT.java
index 6df79289e..0e64d0771 100644
--- a/src/main/java/net/minecraft/core/entity/EntityTNT.java
+++ b/src/main/java/net/minecraft/core/entity/EntityTNT.java
@@ -82,7 +82,7 @@ public class EntityTNT extends Entity
             }
         } else
         {
-            world.spawnParticle("smoke", x, y + 0.5D, z, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("smoke", x, y + 0.5D, z, 0.0D, 0.0D, 0.0D, 0);
         }
     }
 
diff --git a/src/main/java/net/minecraft/core/entity/animal/EntityFireflyCluster.java b/src/main/java/net/minecraft/core/entity/animal/EntityFireflyCluster.java
index 3ed05374d..ccd871241 100644
--- a/src/main/java/net/minecraft/core/entity/animal/EntityFireflyCluster.java
+++ b/src/main/java/net/minecraft/core/entity/animal/EntityFireflyCluster.java
@@ -1,12 +1,6 @@
 package net.minecraft.core.entity.animal;
 
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import com.mojang.nbt.CompoundTag;
-
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.entity.Entity;
@@ -18,6 +12,11 @@ import net.minecraft.core.world.World;
 import net.minecraft.core.world.biome.Biome;
 import net.minecraft.core.world.biome.Biomes;
 
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 public class EntityFireflyCluster extends EntityFlying
         implements IAnimal
 {
@@ -300,7 +299,7 @@ public class EntityFireflyCluster extends EntityFlying
 		double dz = (random.nextFloat() * 2F - 1F) * (bbWidth);
 		
 		if (random.nextInt(Math.max(1, 10 - getFireflyCount())) == 0) {
-			world.spawnParticle(getColor().getParticleName(), x + dx, y + dy, z + dz, xd, yd, zd, 256D);
+			world.spawnParticle(getColor().getParticleName(), x + dx, y + dy, z + dz, xd, yd, zd, 0, 256D);
 		}
 		
 		if(world.isClientSide) {
diff --git a/src/main/java/net/minecraft/core/entity/animal/EntityWolf.java b/src/main/java/net/minecraft/core/entity/animal/EntityWolf.java
index f46ed46a3..2792ac683 100644
--- a/src/main/java/net/minecraft/core/entity/animal/EntityWolf.java
+++ b/src/main/java/net/minecraft/core/entity/animal/EntityWolf.java
@@ -441,7 +441,7 @@ public class EntityWolf extends EntityAnimal
                 {
                     double offX = (random.nextFloat() * 2.0F - 1.0F) * bbWidth * 0.5F;
                     double offZ = (random.nextFloat() * 2.0F - 1.0F) * bbWidth * 0.5F;
-                    world.spawnParticle("splash", x + offX, f + 0.8F, z + offZ, xd, yd, zd);
+                    world.spawnParticle("splash", x + offX, f + 0.8F, z + offZ, xd, yd, zd, 0);
                 }
 
             }
@@ -749,7 +749,7 @@ public class EntityWolf extends EntityAnimal
             double motionX = random.nextGaussian() * 0.02D;
             double motionY = random.nextGaussian() * 0.02D;
             double motionZ = random.nextGaussian() * 0.02D;
-            world.spawnParticle(s, (x + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth, y + 0.5D + (double)(random.nextFloat() * bbHeight), (z + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth, motionX, motionY, motionZ);
+            world.spawnParticle(s, (x + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth, y + 0.5D + (double)(random.nextFloat() * bbHeight), (z + (double)(random.nextFloat() * bbWidth * 2.0F)) - (double) bbWidth, motionX, motionY, motionZ, 0);
         }
 
     }
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntitySlime.java b/src/main/java/net/minecraft/core/entity/monster/EntitySlime.java
index c3bc0d14c..e1b74219a 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntitySlime.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntitySlime.java
@@ -113,7 +113,7 @@ public class EntitySlime extends EntityLiving
                 double f1 = random.nextFloat() * 0.5D + 0.5D;
                 double f2 = MathHelper.sin(f) * (float)i * 0.5D * f1;
                 double f3 = MathHelper.cos(f) * (float)i * 0.5D * f1;
-                world.spawnParticle("item", x + f2, bb.minY, z + f3, Item.slimeball.id, 0.0D, 0.0D);
+                world.spawnParticle("item", x + f2, bb.minY, z + f3, 0.0, 0.0D, 0.0D, Item.slimeball.id);
             }
 
             if(i > 2)
diff --git a/src/main/java/net/minecraft/core/entity/projectile/EntityArrow.java b/src/main/java/net/minecraft/core/entity/projectile/EntityArrow.java
index 3d5b39cef..f9bccaf6e 100644
--- a/src/main/java/net/minecraft/core/entity/projectile/EntityArrow.java
+++ b/src/main/java/net/minecraft/core/entity/projectile/EntityArrow.java
@@ -158,8 +158,8 @@ public class EntityArrow extends EntityProjectile
         }
         else if(this instanceof EntityArrowGolden)
         {
-            world.spawnParticle("arrowtrail", x, y, z, xd * 0.05D, yd * 0.05D - 0.1D, zd * 0.05D);
-            world.spawnParticle("arrowtrail", x + xd * 0.5D, y + yd * 0.5D, z + zd * 0.5D, xd * 0.05D, yd * 0.05D - 0.1D, zd * 0.05D);
+            world.spawnParticle("arrowtrail", x, y, z, xd * 0.05D, yd * 0.05D - 0.1D, zd * 0.05D, 0);
+            world.spawnParticle("arrowtrail", x + xd * 0.5D, y + yd * 0.5D, z + zd * 0.5D, xd * 0.05D, yd * 0.05D - 0.1D, zd * 0.05D, 0);
         }
         super.tick();
     }
@@ -217,7 +217,7 @@ public class EntityArrow extends EntityProjectile
             }
             for(int j = 0; j < 4; j++)
             {
-                world.spawnParticle("item", x, y, z, Item.ammoArrow.id, 0.0D, 0.0D);
+                world.spawnParticle("item", x, y, z, 0.0, 0.0D, 0.0D, Item.ammoArrow.id);
             }
             remove();
             return;
diff --git a/src/main/java/net/minecraft/core/entity/projectile/EntityArrowPurple.java b/src/main/java/net/minecraft/core/entity/projectile/EntityArrowPurple.java
index efa22d751..c11334787 100644
--- a/src/main/java/net/minecraft/core/entity/projectile/EntityArrowPurple.java
+++ b/src/main/java/net/minecraft/core/entity/projectile/EntityArrowPurple.java
@@ -42,7 +42,7 @@ public class EntityArrowPurple extends EntityArrow
         world.playSoundAtEntity(null, this, "random.drr", 1.0F, 1.2F / (random.nextFloat() * 0.2F + 0.9F));
         for(int j = 0; j < 4; j++)
         {
-            world.spawnParticle("item", x, y, z, Item.ammoArrowPurple.id, 0.0D, 0.0D);
+            world.spawnParticle("item", x, y, z, 0.0, 0.0D, 0.0D, Item.ammoArrowPurple.id);
         }
         remove();
     }
diff --git a/src/main/java/net/minecraft/core/entity/projectile/EntityCannonball.java b/src/main/java/net/minecraft/core/entity/projectile/EntityCannonball.java
index c82131758..de6591856 100644
--- a/src/main/java/net/minecraft/core/entity/projectile/EntityCannonball.java
+++ b/src/main/java/net/minecraft/core/entity/projectile/EntityCannonball.java
@@ -38,6 +38,6 @@ public class EntityCannonball extends EntityProjectile
     @Override
     public void afterTick(){
         super.afterTick();
-        world.spawnParticle("largesmoke", x, y, z, 0.0D, 0.0D, 0.0D);
+        world.spawnParticle("largesmoke", x, y, z, 0.0D, 0.0D, 0.0D, 0);
     }
 }
diff --git a/src/main/java/net/minecraft/core/entity/projectile/EntityCannonballBouncy.java b/src/main/java/net/minecraft/core/entity/projectile/EntityCannonballBouncy.java
index 9a899120d..0a6caff95 100644
--- a/src/main/java/net/minecraft/core/entity/projectile/EntityCannonballBouncy.java
+++ b/src/main/java/net/minecraft/core/entity/projectile/EntityCannonballBouncy.java
@@ -1,7 +1,5 @@
 package net.minecraft.core.entity.projectile;
 
-import java.util.List;
-
 import net.minecraft.core.HitResult;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityLiving;
@@ -11,6 +9,8 @@ import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.Vec3d;
 import net.minecraft.core.world.World;
 
+import java.util.List;
+
 public class EntityCannonballBouncy extends EntityCannonball
 {
     private int fuse = 50;
@@ -120,12 +120,12 @@ public class EntityCannonballBouncy extends EntityCannonball
             for(int i = 0; i < 4; i++)
             {
                 double particleDistance = 0.25D;
-                world.spawnParticle("bubble", x - xd * particleDistance, y - yd * particleDistance, z - zd * particleDistance, xd, yd, zd);
+                world.spawnParticle("bubble", x - xd * particleDistance, y - yd * particleDistance, z - zd * particleDistance, xd, yd, zd, 0);
             }
 
             deceleration = 0.8F;
         }
-        world.spawnParticle("largesmoke", x, y, z, 0.0D, 0.0D, 0.0D);
+        world.spawnParticle("largesmoke", x, y, z, 0.0D, 0.0D, 0.0D, 0);
         xd *= deceleration;
         yd *= deceleration;
         zd *= deceleration;
diff --git a/src/main/java/net/minecraft/core/entity/projectile/EntityFireball.java b/src/main/java/net/minecraft/core/entity/projectile/EntityFireball.java
index 1a24bf808..251f33b33 100644
--- a/src/main/java/net/minecraft/core/entity/projectile/EntityFireball.java
+++ b/src/main/java/net/minecraft/core/entity/projectile/EntityFireball.java
@@ -6,13 +6,9 @@ import net.minecraft.core.util.phys.Vec3d;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityLiving;
 import net.minecraft.core.util.helper.MathHelper;
-import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.world.World;
-import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.util.helper.DamageType;
 
-import java.util.List;
-
 // Referenced classes of package net.minecraft.src:
 //            Entity, AxisAlignedBB, MathHelper, EntityLiving, 
 //            World, Vec3D, MovingObjectPosition, NBTTagCompound
@@ -73,8 +69,8 @@ public class EntityFireball extends EntityProjectile
 	public void tick()
     {
         remainingFireTicks = 10;
-        world.spawnParticle("flame", x, y, z, xd * 0.05D, yd * 0.05D - 0.1D, zd * 0.05D);
-        world.spawnParticle("flame", x + xd * 0.5D, y + yd * 0.5D, z + zd * 0.5D, xd * 0.05D, yd * 0.05D - 0.1D, zd * 0.05D);
+        world.spawnParticle("flame", x, y, z, xd * 0.05D, yd * 0.05D - 0.1D, zd * 0.05D, 0);
+        world.spawnParticle("flame", x + xd * 0.5D, y + yd * 0.5D, z + zd * 0.5D, xd * 0.05D, yd * 0.05D - 0.1D, zd * 0.05D, 0);
         super.tick();
     }
     public void onHit(HitResult result){
@@ -99,7 +95,7 @@ public class EntityFireball extends EntityProjectile
         xd += accelX;
         yd += accelY;
         zd += accelZ;
-        world.spawnParticle("largesmoke", x, y, z, 0.0D, 0.0D, 0.0D);
+        world.spawnParticle("largesmoke", x, y, z, 0.0D, 0.0D, 0.0D, 0);
     }
     @Override
 	public boolean isPickable()
diff --git a/src/main/java/net/minecraft/core/entity/projectile/EntityProjectile.java b/src/main/java/net/minecraft/core/entity/projectile/EntityProjectile.java
index 07bc09a96..be5cb3aee 100644
--- a/src/main/java/net/minecraft/core/entity/projectile/EntityProjectile.java
+++ b/src/main/java/net/minecraft/core/entity/projectile/EntityProjectile.java
@@ -199,7 +199,7 @@ public class EntityProjectile extends Entity {
         if (modelItem != null){
             for(int j = 0; j < 8; j++)
             {
-                world.spawnParticle("item", x, y, z, modelItem.id, 0.0D, 0.0D);
+                world.spawnParticle("item", x, y, z, 0.0, 0.0D, 0.0D, modelItem.id);
             }
         }
         remove();
@@ -239,7 +239,7 @@ public class EntityProjectile extends Entity {
         for(int k = 0; k < 4; k++)
         {
             double particleDistance = 0.25F;
-            world.spawnParticle("bubble", x - xd * particleDistance, y - yd * particleDistance, z - zd * particleDistance, xd, yd, zd);
+            world.spawnParticle("bubble", x - xd * particleDistance, y - yd * particleDistance, z - zd * particleDistance, xd, yd, zd, 0);
         }
 
         projectileSpeed = 0.8F;
diff --git a/src/main/java/net/minecraft/core/entity/vehicle/EntityBoat.java b/src/main/java/net/minecraft/core/entity/vehicle/EntityBoat.java
index 6c59604f7..2534592c4 100644
--- a/src/main/java/net/minecraft/core/entity/vehicle/EntityBoat.java
+++ b/src/main/java/net/minecraft/core/entity/vehicle/EntityBoat.java
@@ -1,22 +1,24 @@
 package net.minecraft.core.entity.vehicle;
 
+import com.mojang.nbt.CompoundTag;
 import net.minecraft.client.entity.player.EntityClientPlayerMP;
 import net.minecraft.client.entity.player.EntityPlayerSP;
+import net.minecraft.core.block.Block;
 import net.minecraft.core.block.entity.TileEntityFlag;
+import net.minecraft.core.block.material.Material;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.net.packet.Packet26BoatControl;
-import net.minecraft.core.util.helper.MathHelper;
-import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.player.gamemode.Gamemode;
-import net.minecraft.core.world.World;
-import net.minecraft.core.block.Block;
-import net.minecraft.core.block.material.Material;
-import net.minecraft.core.util.phys.AABB;
+import net.minecraft.core.util.helper.BlockParticleHelper;
 import net.minecraft.core.util.helper.DamageType;
+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.server.entity.player.EntityPlayerMP;
 
 import java.util.List;
@@ -99,7 +101,7 @@ public class EntityBoat extends Entity
         int numParticles = random.nextInt(8) + 1;
         for (int q = 0; q < numParticles; q++)
         {
-            world.spawnParticle("boatbreak", x, y, z, xd, yd, zd);
+            world.spawnParticle("block", x, y, z, xd, yd, zd, BlockParticleHelper.encodeBlockData(Block.planksOak.id, 0, Side.BOTTOM));
         }
         if(world.isClientSide || removed)
         {
@@ -281,12 +283,12 @@ public class EntityBoat extends Entity
                 {
                     double posX = (x - d12 * d18 * 0.8D) + d15 * d20;
                     double posZ = z - d15 * d18 * 0.8D - d12 * d20;
-                    world.spawnParticle("splash", posX, y - 0.125D, posZ, xd, yd, zd);
+                    world.spawnParticle("splash", posX, y - 0.125D, posZ, xd, yd, zd, 0);
                 } else
                 {
                     double posX = x + d12 + d15 * d18 * 0.7D;
                     double posZ = (z + d15) - d12 * d18 * 0.7D;
-                    world.spawnParticle("splash", posX, y - 0.125D, posZ, xd, yd, zd);
+                    world.spawnParticle("splash", posX, y - 0.125D, posZ, xd, yd, zd, 0);
                 }
             }
 
diff --git a/src/main/java/net/minecraft/core/entity/vehicle/EntityMinecart.java b/src/main/java/net/minecraft/core/entity/vehicle/EntityMinecart.java
index cba03dafb..867ed29f3 100644
--- a/src/main/java/net/minecraft/core/entity/vehicle/EntityMinecart.java
+++ b/src/main/java/net/minecraft/core/entity/vehicle/EntityMinecart.java
@@ -17,7 +17,6 @@ import net.minecraft.core.player.inventory.IInventory;
 import net.minecraft.core.world.World;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockRail;
-import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.util.helper.DamageType;
 
 import java.util.List;
@@ -589,7 +588,7 @@ label0:
             {
                 pushX = pushZ = 0.0D;
             }
-            world.spawnParticle("largesmoke", x, y + 0.8D, z, 0.0D, 0.0D, 0.0D);
+            world.spawnParticle("largesmoke", x, y + 0.8D, z, 0.0D, 0.0D, 0.0D, 0);
         }
     }
 
diff --git a/src/main/java/net/minecraft/core/item/ItemBucket.java b/src/main/java/net/minecraft/core/item/ItemBucket.java
index 1a3f5603b..7786f940b 100644
--- a/src/main/java/net/minecraft/core/item/ItemBucket.java
+++ b/src/main/java/net/minecraft/core/item/ItemBucket.java
@@ -89,7 +89,7 @@ public class ItemBucket extends Item
 			if(world.dimension == Dimension.nether && idToPlace == Block.fluidWaterFlowing.id) {
 				world.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, z + 0.5, y + 0.5, x + 0.5, "random.fizz", 0.5F, 2.6F + (world.rand.nextFloat() - world.rand.nextFloat()) * 0.8F);
 				for (int l = 0; l < 8; l++) {
-					world.spawnParticle("largesmoke", x + Math.random(), y + Math.random(), z + Math.random(), 0.0D, 0.0D, 0.0D);
+					world.spawnParticle("largesmoke", x + Math.random(), y + Math.random(), z + Math.random(), 0.0D, 0.0D, 0.0D, 0);
 				}
 			} else {
 				if(idToPlace == Block.fluidWaterFlowing.id) {
diff --git a/src/main/java/net/minecraft/core/item/ItemDye.java b/src/main/java/net/minecraft/core/item/ItemDye.java
index 128d44818..ef766900a 100644
--- a/src/main/java/net/minecraft/core/item/ItemDye.java
+++ b/src/main/java/net/minecraft/core/item/ItemDye.java
@@ -130,7 +130,7 @@ label0:
                                 world.setBlockWithNotify(k1, l1, i2, Block.tallgrass.id);
                             continue;
                         }
-                        int r = itemRand.nextInt(10);
+                        int r = itemRand.nextInt(12);
                         Biome biome = world.getBlockBiome(k1, l1, i2);
                         if (r < 1){
                             world.setBlockWithNotify(k1, l1, i2, Block.flowerYellow.id);
@@ -142,6 +142,8 @@ label0:
                             world.setBlockWithNotify(k1, l1, i2, Block.flowerPurple.id);
                         } else if (r < 8 && (biome == Biomes.OVERWORLD_FOREST || biome == Biomes.OVERWORLD_SWAMPLAND || biome == Biomes.OVERWORLD_RAINFOREST || biome == Biomes.OVERWORLD_GRASSLANDS || biome == Biomes.OVERWORLD_CAATINGA)) {
                             world.setBlockWithNotify(k1, l1, i2, Block.flowerLightBlue.id);
+                        } else if (r < 10 && (biome == Biomes.OVERWORLD_PLAINS || biome == Biomes.OVERWORLD_GRASSLANDS || biome == Biomes.OVERWORLD_OUTBACK || biome == Biomes.OVERWORLD_OUTBACK_GRASSY)) {
+                            world.setBlockWithNotify(k1, l1, i2, Block.flowerOrange.id);
                         }
                     }
                 }
diff --git a/src/main/java/net/minecraft/core/net/command/commands/SpawnParticleCommand.java b/src/main/java/net/minecraft/core/net/command/commands/SpawnParticleCommand.java
index a66e60b15..aeffaf830 100644
--- a/src/main/java/net/minecraft/core/net/command/commands/SpawnParticleCommand.java
+++ b/src/main/java/net/minecraft/core/net/command/commands/SpawnParticleCommand.java
@@ -29,6 +29,7 @@ public class SpawnParticleCommand extends Command {
         double motionX = 0;
         double motionY = 0;
         double motionZ = 0;
+        int data = 0;
         Double maxDistance = null;
         if (args.length >= 1){
             particleKey = args[0];
@@ -50,20 +51,23 @@ public class SpawnParticleCommand extends Command {
                     motionX = Double.parseDouble(args[4]);
                     motionY = Double.parseDouble(args[5]);
                     motionZ = Double.parseDouble(args[6]);
-                    if (args.length == 8){
-                        maxDistance = Double.parseDouble(args[7]);
+                    if (args.length >= 8){
+                        data = Integer.parseInt(args[7]);
+                        if (args.length == 9){
+                            maxDistance = Double.parseDouble(args[8]);
+                        }
                     }
                 }
             }
         }
         if (particleKey != null && x != null){
             if (handler instanceof ServerCommandHandler){
-                ((ServerCommandHandler) handler).minecraftServer.playerList.sendPacketToPlayersAroundPoint(x, y, z, maxDistance == null ? 16 : maxDistance, dimension, new Packet63SpawnParticleEffect(particleKey, x, y, z, motionX, motionY, motionZ));
+                ((ServerCommandHandler) handler).minecraftServer.playerList.sendPacketToPlayersAroundPoint(x, y, z, maxDistance == null ? 16 : maxDistance, dimension, new Packet63SpawnParticleEffect(particleKey, x, y, z, motionX, motionY, motionZ, data));
             } else if (handler instanceof ClientCommandHandler){
                 if (maxDistance == null){
-                    ((ClientCommandHandler) handler).minecraft.renderGlobal.addParticle(particleKey, x, y, z, motionX, motionY, motionZ);
+                    ((ClientCommandHandler) handler).minecraft.renderGlobal.addParticle(particleKey, x, y, z, motionX, motionY, motionZ, data);
                 } else {
-                    ((ClientCommandHandler) handler).minecraft.renderGlobal.addParticle(particleKey, x, y, z, motionX, motionY, motionZ, maxDistance);
+                    ((ClientCommandHandler) handler).minecraft.renderGlobal.addParticle(particleKey, x, y, z, motionX, motionY, motionZ, data, maxDistance);
                 }
             }
             return true;
@@ -84,6 +88,7 @@ public class SpawnParticleCommand extends Command {
         }
         sender.sendMessage("/spawnparticle <ParticleKey> <x> <y> <z>");
         sender.sendMessage("/spawnparticle <ParticleKey> <x> <y> <z> <MotionX> <MotionY> <MotionZ>");
-        sender.sendMessage("/spawnparticle <ParticleKey> <x> <y> <z> <MotionX> <MotionY> <MotionZ> <MaxDistance>");
+        sender.sendMessage("/spawnparticle <ParticleKey> <x> <y> <z> <MotionX> <MotionY> <MotionZ> <data>");
+        sender.sendMessage("/spawnparticle <ParticleKey> <x> <y> <z> <MotionX> <MotionY> <MotionZ> <data> <MaxDistance>");
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/packet/Packet63SpawnParticleEffect.java b/src/main/java/net/minecraft/core/net/packet/Packet63SpawnParticleEffect.java
index 178243b0a..a239b82b5 100644
--- a/src/main/java/net/minecraft/core/net/packet/Packet63SpawnParticleEffect.java
+++ b/src/main/java/net/minecraft/core/net/packet/Packet63SpawnParticleEffect.java
@@ -14,6 +14,7 @@ public class Packet63SpawnParticleEffect extends Packet{
     public double motionX;
     public double motionY;
     public double motionZ;
+    public int data;
     public double maxDistance;
     public boolean isGroup = false;
     public byte amount;
@@ -28,18 +29,18 @@ public class Packet63SpawnParticleEffect extends Packet{
 
     }
     public Packet63SpawnParticleEffect(String particleKey, double x, double y, double z,
-                                       double motionX, double motionY, double motionZ){
-        this(particleKey, x, y, z, motionX, motionY, motionZ, 16D);
+                                       double motionX, double motionY, double motionZ, int data){
+        this(particleKey, x, y, z, motionX, motionY, motionZ, data, 16D);
     }
     public Packet63SpawnParticleEffect(String particleKey, double x, double y, double z,
-                                       double motionX, double motionY, double motionZ, double maxDistance){
-        this(particleKey, x, y, z, motionX, motionY, motionZ, maxDistance,
-                (byte) -1, 0, 0, 0, 0, 0, 0);
+                                       double motionX, double motionY, double motionZ, int data, double maxDistance){
+        this(particleKey, x, y, z, motionX, motionY, motionZ, data,
+                maxDistance, (byte) -1, 0, 0, 0, 0, 0, 0);
 
     }
     public Packet63SpawnParticleEffect(String particleKey, double x, double y, double z,
                                        double motionX, double motionY, double motionZ,
-                                       double maxDistance, byte amount, float randOffX,
+                                       int data, double maxDistance, byte amount, float randOffX,
                                        float randOffY, float randOffZ, float randMotionX,
                                        float randMotionY, float randMotionZ){
         this.particleKey = particleKey;
@@ -49,6 +50,7 @@ public class Packet63SpawnParticleEffect extends Packet{
         this.motionX = motionX;
         this.motionY = motionY;
         this.motionZ = motionZ;
+        this.data = data;
         this.maxDistance = maxDistance;
         if (amount > 0){
             this.isGroup = true;
diff --git a/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java b/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java
index 95cc34bb8..29786538c 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.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.trapdoorGlassTinted, 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.doorGlassTintedBottom, BlockSounds.GLASS);
        addDispatch(Block.doorGlassTintedTop, 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.pumpkinPie, 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.logBrazilwood, 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.flowerOrange, 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.trapdoorGlassTinted, 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.doorGlassTintedBottom, BlockSounds.GLASS);
        addDispatch(Block.doorGlassTintedTop, 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.pumpkinPie, 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/util/helper/BlockParticleHelper.java b/src/main/java/net/minecraft/core/util/helper/BlockParticleHelper.java
new file mode 100644
index 000000000..c6e247265
--- /dev/null
+++ b/src/main/java/net/minecraft/core/util/helper/BlockParticleHelper.java
@@ -0,0 +1,16 @@
+package net.minecraft.core.util.helper;
+
+public class BlockParticleHelper {
+    public static int encodeBlockData(int blockId, int meta, Side side){
+        return blockId & 0x3FFF | (meta & 0xFF) << 14 | (side.getId() << 22);
+    }
+    public static int decodeBlockID(int data){
+        return data & 0x3FFF;
+    }
+    public static int decodeBlockMeta(int data){
+        return data >> 14 & 0xFF;
+    }
+    public static int decodeBlockSide(int data){
+        return data >> 22 & 0xF;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/Explosion.java b/src/main/java/net/minecraft/core/world/Explosion.java
index 07416fc62..8efb8d859 100644
--- a/src/main/java/net/minecraft/core/world/Explosion.java
+++ b/src/main/java/net/minecraft/core/world/Explosion.java
@@ -83,8 +83,8 @@ public class Explosion {
                 d3 *= d7;
                 d4 *= d7;
                 d5 *= d7;
-                worldObj.spawnParticle("explode", (xPos + explosionX) / 2D, (yPos + explosionY) / 2D, (zPos + explosionZ) / 2D, d3, d4, d5);
-                worldObj.spawnParticle("smoke", xPos, yPos, zPos, d3, d4, d5);
+                worldObj.spawnParticle("explode", (xPos + explosionX) / 2D, (yPos + explosionY) / 2D, (zPos + explosionZ) / 2D, d3, d4, d5, 0);
+                worldObj.spawnParticle("smoke", xPos, yPos, zPos, d3, d4, d5, 0);
             }
             if(id > 0)
             {
diff --git a/src/main/java/net/minecraft/core/world/ExplosionCannonball.java b/src/main/java/net/minecraft/core/world/ExplosionCannonball.java
index 09bfbbcac..02bff9f40 100644
--- a/src/main/java/net/minecraft/core/world/ExplosionCannonball.java
+++ b/src/main/java/net/minecraft/core/world/ExplosionCannonball.java
@@ -160,8 +160,8 @@ public class ExplosionCannonball extends Explosion{
                 d3 *= d7;
                 d4 *= d7;
                 d5 *= d7;
-                worldObj.spawnParticle("explode", (d + explosionX) / 2D, (d1 + explosionY) / 2D, (d2 + explosionZ) / 2D, d3, d4, d5);
-                worldObj.spawnParticle("smoke", d, d1, d2, d3, d4, d5);
+                worldObj.spawnParticle("explode", (d + explosionX) / 2D, (d1 + explosionY) / 2D, (d2 + explosionZ) / 2D, d3, d4, d5, 0 );
+                worldObj.spawnParticle("smoke", d, d1, d2, d3, d4, d5, 0);
             }
             if(i1 > 0 && (Block.blocksList[i1].id == Block.glass.id
                     ||  Block.blocksList[i1].blockMaterial == Material.topSnow
diff --git a/src/main/java/net/minecraft/core/world/LevelListener.java b/src/main/java/net/minecraft/core/world/LevelListener.java
index 0787f49d3..6bb967ef3 100644
--- a/src/main/java/net/minecraft/core/world/LevelListener.java
+++ b/src/main/java/net/minecraft/core/world/LevelListener.java
@@ -27,10 +27,10 @@ public interface LevelListener
                    float volume, float pitch);
 
     void addParticle(String particleKey, double x, double y, double z,
-                     double motionX, double motionY, double motionZ, double maxDistance);
+                     double motionX, double motionY, double motionZ, int data, double maxDistance);
 
     void addParticle(String particleKey, double x, double y, double z,
-                     double motionX, double motionY, double motionZ);
+                     double motionX, double motionY, double motionZ, int data);
 
     void entityAdded(Entity entity);
 
diff --git a/src/main/java/net/minecraft/core/world/World.java b/src/main/java/net/minecraft/core/world/World.java
index e6727abc0..36ed8c103 100644
--- a/src/main/java/net/minecraft/core/world/World.java
+++ b/src/main/java/net/minecraft/core/world/World.java
@@ -1,19 +1,6 @@
 package net.minecraft.core.world;
 
-import static net.minecraft.core.Global.*;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
-import java.util.TreeSet;
-
 import com.mojang.nbt.CompoundTag;
-
 import net.minecraft.client.render.LightmapHelper;
 import net.minecraft.client.render.camera.ICamera;
 import net.minecraft.client.world.chunk.provider.ChunkProviderViewer;
@@ -67,6 +54,19 @@ import net.minecraft.core.world.type.WorldTypes;
 import net.minecraft.core.world.weather.Weather;
 import net.minecraft.core.world.weather.WeatherManager;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+import java.util.TreeSet;
+
+import static net.minecraft.core.Global.DAY_LENGTH_TICKS;
+import static net.minecraft.core.Global.accessor;
+
 public class World implements WorldSource {
 
     public static boolean AUTOSAVE = true;
@@ -117,6 +117,7 @@ public class World implements WorldSource {
     public boolean isClientSide = false;
     public int sleepPercent = 100;
     private long runtime = 0;
+    public boolean updateAllOnLightChange = false;
 
     private final BiomeProvider biomeProvider;
 
@@ -1350,22 +1351,22 @@ public class World implements WorldSource {
     }
 
     public void spawnParticle(String particleKey, double x, double y, double z,
-                              double motionX, double motionY, double motionZ, double maxDistance)
+                              double motionX, double motionY, double motionZ, int data, double maxDistance)
     {
         for(int i = 0; i < listeners.size(); i++)
         {
-            listeners.get(i).addParticle(particleKey, x, y, z, motionX, motionY, motionZ, maxDistance);
+            listeners.get(i).addParticle(particleKey, x, y, z, motionX, motionY, motionZ, data, maxDistance);
         }
 
     }
 
 
     public void spawnParticle(String particleKey, double x, double y, double z,
-            double motionX, double motionY, double motionZ)
+                              double motionX, double motionY, double motionZ, int data)
     {
         for(int i = 0; i < listeners.size(); i++)
         {
-            listeners.get(i).addParticle(particleKey, x, y, z, motionX, motionY, motionZ);
+            listeners.get(i).addParticle(particleKey, x, y, z, motionX, motionY, motionZ, data);
         }
 
     }
@@ -2471,9 +2472,11 @@ public class World implements WorldSource {
         if(i != skyDarken)
         {
             skyDarken = i;
-            for(int j = 0; j < listeners.size(); j++)
-            {
-                ((LevelListener) listeners.get(j)).allChanged();
+            if(updateAllOnLightChange) {
+                for(int j = 0; j < listeners.size(); j++)
+                {
+                    ((LevelListener) listeners.get(j)).allChanged();
+                }	
             }
         }
     }
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeCaatinga.java b/src/main/java/net/minecraft/core/world/biome/BiomeCaatinga.java
index 71b6c0d33..fcce4cc74 100644
--- a/src/main/java/net/minecraft/core/world/biome/BiomeCaatinga.java
+++ b/src/main/java/net/minecraft/core/world/biome/BiomeCaatinga.java
@@ -4,9 +4,7 @@
 
 package net.minecraft.core.world.biome;
 
-import net.minecraft.core.entity.animal.EntityWolf;
 import net.minecraft.core.block.Block;
-import net.minecraft.core.entity.SpawnListEntry;
 import net.minecraft.core.world.generate.feature.tree.*;
 import net.minecraft.core.world.generate.feature.WorldFeature;
 
@@ -26,12 +24,21 @@ public class BiomeCaatinga extends Biome
     @Override
     public WorldFeature getRandomWorldGenForTrees(Random random)
     {
-        if(random.nextInt(5) == 0)
+        if(random.nextInt(2) == 0)
         {
             return new WorldFeatureTreeShrub(Block.leavesCaatinga.id, Block.logOak.id);
         } else
+        if(random.nextInt(3) == 0)
         {
-            return new WorldFeatureTreeCaatinga(Block.leavesCaatinga.id, Block.logOak.id);
+            return new WorldFeatureTree(Block.leavesCaatinga.id, Block.logOak.id, 6);
+
+        } else
+        if(random.nextInt(3) == 0)
+        {
+            return new WorldFeatureTreeFancy(Block.leavesCaatinga.id, Block.logOak.id);
+        } else
+        {
+            return new WorldFeatureTreeCaatinga(Block.leavesCaatinga.id, Block.logBrazilwood.id);
         }
     }
 }
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeDryForest.java b/src/main/java/net/minecraft/core/world/biome/BiomeDryForest.java
new file mode 100644
index 000000000..2dfd2d990
--- /dev/null
+++ b/src/main/java/net/minecraft/core/world/biome/BiomeDryForest.java
@@ -0,0 +1,37 @@
+package net.minecraft.core.world.biome;
+
+import net.minecraft.core.entity.animal.EntityWolf;
+import net.minecraft.core.block.Block;
+import net.minecraft.core.entity.SpawnListEntry;
+import net.minecraft.core.world.generate.feature.tree.WorldFeatureTreeCherry;
+import net.minecraft.core.world.generate.feature.tree.WorldFeatureTree;
+import net.minecraft.core.world.generate.feature.tree.WorldFeatureTreeEucalyptus;
+import net.minecraft.core.world.generate.feature.tree.WorldFeatureTreeFancy;
+import net.minecraft.core.world.generate.feature.WorldFeature;
+
+import java.util.Random;
+
+public class BiomeDryForest extends BiomeForest
+{
+
+    public BiomeDryForest(String key)
+    {
+        super(key);
+    }
+    @Override
+    public WorldFeature getRandomWorldGenForTrees(Random random)
+    {
+
+        if(random.nextInt(20) == 0)
+        {
+            return new WorldFeatureTree(Block.leavesBirch.id, Block.logBirch.id, 5);
+        }
+        if(random.nextInt(6) == 0)
+        {
+            return new WorldFeatureTreeEucalyptus(Block.leavesEucalyptus.id, Block.logEucalyptus.id);
+        } else
+        {
+            return new WorldFeatureTree(Block.leavesOak.id, Block.logOak.id, 4);
+        }
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeForest.java b/src/main/java/net/minecraft/core/world/biome/BiomeForest.java
index e3fbe53fe..fc55be3af 100644
--- a/src/main/java/net/minecraft/core/world/biome/BiomeForest.java
+++ b/src/main/java/net/minecraft/core/world/biome/BiomeForest.java
@@ -26,10 +26,6 @@ public class BiomeForest extends Biome
         {
             return new WorldFeatureTree(Block.leavesBirch.id, Block.logBirch.id, 5);
         }
-        if(random.nextInt(20) == 0)
-        {
-            return new WorldFeatureTreeCherry(Block.leavesCherry.id, Block.logCherry.id, 4);
-        }
         if(random.nextInt(3) == 0)
         {
             return new WorldFeatureTreeFancy(Block.leavesOak.id, Block.logOak.id);
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomePlains.java b/src/main/java/net/minecraft/core/world/biome/BiomePlains.java
new file mode 100644
index 000000000..13de075e0
--- /dev/null
+++ b/src/main/java/net/minecraft/core/world/biome/BiomePlains.java
@@ -0,0 +1,20 @@
+package net.minecraft.core.world.biome;
+
+import net.minecraft.core.block.Block;
+import net.minecraft.core.world.generate.feature.WorldFeature;
+import net.minecraft.core.world.generate.feature.tree.WorldFeatureTreeEucalyptus;
+
+import java.util.Random;
+
+public class BiomePlains extends Biome
+{
+    public BiomePlains(String key) {
+        super(key);
+    }
+
+    @Override
+    public WorldFeature getRandomWorldGenForTrees(Random random)
+    {
+        return new WorldFeatureTreeEucalyptus(Block.leavesEucalyptus.id, Block.logEucalyptus.id);
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/biome/Biomes.java b/src/main/java/net/minecraft/core/world/biome/Biomes.java
index 0f37427e6..450145efe 100644
--- a/src/main/java/net/minecraft/core/world/biome/Biomes.java
+++ b/src/main/java/net/minecraft/core/world/biome/Biomes.java
@@ -12,12 +12,12 @@ public class Biomes
     public static final Biome OVERWORLD_SEASONAL_FOREST = register("minecraft:overworld.seasonal_forest", new BiomeSeasonalForest("seasonal_forest").setColor(0x64ce15));
     public static final Biome OVERWORLD_FOREST = register("minecraft:overworld.forest", new BiomeForest("forest").setColor(0x26a615));
     public static final Biome OVERWORLD_GRASSLANDS = register("minecraft:overworld.grasslands", new Biome("grasslands").setColor(0xf0f048).setBlockedWeathers(Weather.overworldSnow));
-    public static final Biome OVERWORLD_OUTBACK = register("minecraft:overworld.outback", new Biome("outback").setColor(0xd95e20).setBlockedWeathers(Weather.overworldSnow).setTopBlock(Block.dirtScorched.id).setFillerBlock(Block.dirtScorched.id));
+    public static final Biome OVERWORLD_OUTBACK = register("minecraft:overworld.outback", new BiomeOutback("outback").setColor(0xd95e20).setBlockedWeathers(Weather.overworldSnow).setTopBlock(Block.dirtScorched.id).setFillerBlock(Block.dirtScorched.id));
     public static final Biome OVERWORLD_SHRUBLAND = register("minecraft:overworld.shrubland", new BiomeShrubland("shrubland").setColor(0xbaba38));
     public static final Biome OVERWORLD_TAIGA = register("minecraft:overworld.taiga", new BiomeTaiga("taiga").setColor(0x8abcff).setSurfaceSnow());
     public static final Biome OVERWORLD_BOREAL_FOREST = register("minecraft:overworld.boreal_forest", new BiomeBorealForest("boreal_forest").setColor(0x148564));
     public static final Biome OVERWORLD_DESERT = register("minecraft:overworld.desert", new Biome("desert").setColor(0xEDE26F).setBlockedWeathers(Weather.overworldRain, Weather.overworldSnow, Weather.overworldStorm).setTopBlock(Block.sand.id).setFillerBlock(Block.sand.id));
-    public static final Biome OVERWORLD_PLAINS = register("minecraft:overworld.plains", new Biome("plains").setColor(0xA3C649));
+    public static final Biome OVERWORLD_PLAINS = register("minecraft:overworld.plains", new BiomePlains("plains").setColor(0xA3C649));
     public static final Biome OVERWORLD_GLACIER = register("minecraft:overworld.glacier", new Biome("glacier").setColor(0xcbf6ff).setSurfaceSnow().setTopBlock(Block.blockSnow.id).setFillerBlock(Block.blockSnow.id));
     public static final Biome OVERWORLD_TUNDRA = register("minecraft:overworld.tundra", new Biome("tundra").setColor(0x57e0ff).setSurfaceSnow());
     public static final Biome OVERWORLD_MEADOW = register("minecraft:overworld.meadow", new BiomeBorealForest("meadow").setColor(0x8c8c22));
@@ -28,7 +28,9 @@ public class Biomes
     public static final Biome OVERWORLD_HELL = register("minecraft:overworld.hell", new Biome("hell").setColor(0xD96223).setTopBlock(Block.dirtScorched.id).setTopBlock(Block.dirtScorched.id));
     public static final Biome OVERWORLD_SWAMPLAND_MUDDY = register("minecraft:overworld.swampland.muddy", new BiomeSwamp("swampland.muddy").setColor(0x522700));
     public static final Biome OVERWORLD_OUTBACK_GRASSY = register("minecraft:overworld.outback.grassy", new BiomeOutback("outback.grassy").setColor(0xf09037).setBlockedWeathers(Weather.overworldSnow).setTopBlock(Block.grassScorched.id).setFillerBlock(Block.dirtScorched.id));
-    public static final Biome OVERWORLD_CAATINGA = register("minecraft:overworld.caatinga", new BiomeCaatinga("caatinga").setColor(0xFFFFFF).setTopBlock(Block.mudBaked.id).setFillerBlock(Block.mudBaked.id).setBlockedWeathers(Weather.overworldSnow));
+    public static final Biome OVERWORLD_CAATINGA = register("minecraft:overworld.caatinga", new BiomeCaatinga("caatinga").setColor(0xdecda6).setTopBlock(Block.mudBaked.id).setFillerBlock(Block.mudBaked.id).setBlockedWeathers(Weather.overworldSnow));
+    public static final Biome OVERWORLD_CAATINGA_PLAINS = register("minecraft:overworld.caatinga.plains", new Biome("caatinga.plains").setColor(0xa19477).setTopBlock(Block.mudBaked.id).setFillerBlock(Block.mudBaked.id).setBlockedWeathers(Weather.overworldSnow));
+    public static final Biome OVERWORLD_FOREST_DRY = register("minecraft:overworld.forest.dry", new BiomeDryForest("forest.dry").setColor(0x85c472));
 
     public static Biome register(String key, Biome biome)
     {
diff --git a/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderOverworld.java b/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderOverworld.java
index f02eb65cd..f61fcaf5f 100644
--- a/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderOverworld.java
+++ b/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderOverworld.java
@@ -349,7 +349,6 @@ public final class BiomeProviderOverworld
         );
         brm.addRange(Biomes.OVERWORLD_GRASSLANDS,
             new BiomeRange(0.5, 0.98, 0.0, 0.05, 0.0, 1.0, 0.0, 1.0),
-                new BiomeRange(0.75, 0.95, 0.05, 0.3, 0.0, 1.0, 0.0, 1.0),
                 new BiomeRange(0.95, 1.0, 0.2, 0.5, 0.0, 1.0, 0.0, 1.0)
         );
         brm.addRange(Biomes.OVERWORLD_MEADOW,
@@ -358,13 +357,12 @@ public final class BiomeProviderOverworld
         brm.addRange(Biomes.OVERWORLD_BIRCH_FOREST,
                 new BiomeRange(0.5, 0.75, 0.2, 0.4, 0.0, 1.0, 0.0, 1.0)
         );
-
         brm.addRange(Biomes.OVERWORLD_SHRUBLAND,
                 new BiomeRange(0.5, 0.75, 0.05, 0.2, 0.0, 1.0, 0.0, 1.0)
         );
-
         brm.addRange(Biomes.OVERWORLD_PLAINS,
-                new BiomeRange(0.90, 1.0, 0.0125, 0.5, 0.0, 1.0, 0.0, 1.0)
+                new BiomeRange(0.75, 0.95, 0.01, 0.2, 0.0, 1.0, 0.0, 1.0),
+                new BiomeRange(0.75, 0.95, 0.2, 0.4, 0.0, 1.0, 0.95, 1.0)
         );
         brm.addRange(Biomes.OVERWORLD_DESERT,
                 new BiomeRange(0.95, 1.0, 0.0, 0.2, 0.0, 1.0, 0.0, 1.0)
@@ -383,22 +381,26 @@ public final class BiomeProviderOverworld
                 new BiomeRange(0.75, 0.95, 0.85, 1.0, 0.0, 1.0, 0.0, 1.0)
         );
         brm.addRange(Biomes.OVERWORLD_FOREST,
-                new BiomeRange(0.75, 0.95, 0.2, 0.85, 0.0, 1.0, 0.0, 1.0),
-                new BiomeRange(0.95, 1.0, 0.5, 0.85, 0.0, 1.0, 0.0, 1.0)
+                new BiomeRange(0.75, 0.95, 0.2, 0.85, 0.0, 1.0, 0.0, 1),
+                new BiomeRange(0.95, 1.0, 0.4, 0.85, 0.0, 1.0, 0.0, 1)
+        );
+        brm.addRange(Biomes.OVERWORLD_FOREST_DRY,
+                new BiomeRange(0.75, 0.95, 0.2, 0.4, 0.0, 1.0, 0.0, 0.95)
         );
         brm.addRange(Biomes.OVERWORLD_CAATINGA,
-                new BiomeRange(0.98, 1.0, 0.2, 0.65, 0.0, 1.0, 0.0, 1.0)
+                new BiomeRange(0.95, 1.0, 0.2, 0.4, 0.0, 1.0, 0.0, 0.75)
+        );
+        brm.addRange(Biomes.OVERWORLD_CAATINGA_PLAINS,
+                new BiomeRange(0.95, 1.0, 0.2, 0.4, 0.0, 1.0, 0.75, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_CAATINGA,
+                new BiomeRange(0.95, 1.0, 0.2, 0.4, 0.0, 1.0, 0.0, 1.0)
         );
         brm.addRange(Biomes.OVERWORLD_RAINFOREST,
                 new BiomeRange(0.95, 1.0, 0.85, 1.0, 0.0, 1.0, 0.0, 1.0)
         );
         brm.lock();
 
-//        if (brm.hasGaps())
-//        {
-//            throw new RuntimeException("Gap in biome map!");
-//        }
-
-//        brm.generateDebugImage(true);
+        brm.generateDebugImage(true);
     }
 }
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 5bfae16bc..d1a857c08 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
@@ -234,6 +234,9 @@ public class ChunkDecoratorOverworld
         if (biome == Biomes.OVERWORLD_FOREST) {
             treeDensity += k4 + 5;
         }
+        if (biome == Biomes.OVERWORLD_FOREST_DRY) {
+            treeDensity += k4 + 1;
+        }
         if (biome == Biomes.OVERWORLD_BIRCH_FOREST) {
             treeDensity += k4 + 4;
         }
@@ -255,11 +258,11 @@ public class ChunkDecoratorOverworld
         if (biome == Biomes.OVERWORLD_TUNDRA) {
             treeDensity -= 20;
         }
-        if (biome == Biomes.OVERWORLD_PLAINS) {
-            treeDensity -= 20;
-        }
         if (biome == Biomes.OVERWORLD_CAATINGA) {
-            treeDensity += k4 + 2;
+            treeDensity += k4 + 10;
+        }
+        if (biome == Biomes.OVERWORLD_CAATINGA_PLAINS) {
+            treeDensity -= 10;
         }
         if (biome == Biomes.OVERWORLD_SWAMPLAND) {
             treeDensity += k4 + 4;
@@ -336,10 +339,7 @@ public class ChunkDecoratorOverworld
         if (biome == Biomes.OVERWORLD_RAINFOREST) {
             byteBluebells = 4;
         }
-        if (biome == Biomes.OVERWORLD_GRASSLANDS) {
-            byteBluebells = 3;
-        }
-        if (biome == Biomes.OVERWORLD_CAATINGA) {
+        if (biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_CAATINGA_PLAINS) {
             byteBluebells = 3;
         }
 
@@ -350,6 +350,28 @@ public class ChunkDecoratorOverworld
             (new WorldFeatureFlowers(Block.flowerLightBlue.id)).generate(world, rand, k14, l16, k19);
         }
 
+        byte byteMarigold = 0;
+
+        if (biome == Biomes.OVERWORLD_GRASSLANDS) {
+            byteMarigold = 1;
+        }
+        if (biome == Biomes.OVERWORLD_FOREST_DRY) {
+            byteMarigold = 1;
+        }
+        if (biome == Biomes.OVERWORLD_PLAINS) {
+            byteMarigold = 5;
+        }
+        if (biome == Biomes.OVERWORLD_OUTBACK_GRASSY || biome == Biomes.OVERWORLD_OUTBACK) {
+            byteMarigold = 3;
+        }
+
+        for (int i14 = 0; i14 < byteMarigold; i14++) {
+            int k14 = x + rand.nextInt(16) + 8;
+            int l16 = minY + rand.nextInt(rangeY);
+            int k19 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Block.flowerOrange.id)).generate(world, rand, k14, l16, k19);
+        }
+
         byte byte0 = 0;
         if (biome == Biomes.OVERWORLD_FOREST) {
             byte0 = 2;
@@ -363,9 +385,10 @@ public class ChunkDecoratorOverworld
         if (biome == Biomes.OVERWORLD_PLAINS) {
             byte0 = 3;
         }
-        if (biome == Biomes.OVERWORLD_CAATINGA) {
+        if (biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_CAATINGA_PLAINS) {
             byte0 = 5;
         }
+
         if (biome == Biomes.OVERWORLD_OUTBACK_GRASSY || biome == Biomes.OVERWORLD_OUTBACK) {
             byte0 = 2;
         }
@@ -405,6 +428,9 @@ public class ChunkDecoratorOverworld
         if (biome == Biomes.OVERWORLD_CAATINGA) {
             byte1 = 3;
         }
+        if (biome == Biomes.OVERWORLD_CAATINGA_PLAINS) {
+            byte1 = 1;
+        }
         if (biome == Biomes.OVERWORLD_SWAMPLAND) {
             byte1 = 4;
         }
@@ -417,6 +443,9 @@ public class ChunkDecoratorOverworld
         if (biome == Biomes.OVERWORLD_BIRCH_FOREST) {
             byte1 = 2;
         }
+        if (biome == Biomes.OVERWORLD_FOREST_DRY) {
+            byte1 = 3;
+        }
         for (int l14 = 0; l14 < byte1; l14++) {
             int type = Block.tallgrass.id;
             if ((biome == Biomes.OVERWORLD_RAINFOREST || biome == Biomes.OVERWORLD_SWAMPLAND || biome == Biomes.OVERWORLD_BOREAL_FOREST || biome == Biomes.OVERWORLD_TAIGA) && rand.nextInt(3) != 0) {
@@ -496,7 +525,7 @@ public class ChunkDecoratorOverworld
         {
             k16 += 10;
         }
-        if(biome == Biomes.OVERWORLD_CAATINGA)
+        if(biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_CAATINGA_PLAINS)
         {
             k16 += 3;
         }
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/SurfaceGeneratorOverworld.java b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/SurfaceGeneratorOverworld.java
index 500c7c9df..fc4baade8 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/SurfaceGeneratorOverworld.java
+++ b/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/SurfaceGeneratorOverworld.java
@@ -142,31 +142,40 @@ public class SurfaceGeneratorOverworld
                             topBlock = 0;
                             fillerBlock = (short) worldFillBlock;
                         }
-                        else if(y >= minY + oceanY - 4 && y <= minY + oceanY + 1)
-                        {
-                            // generate coastlines
-                            topBlock = biome.topBlock;
-                            fillerBlock = biome.fillerBlock;
-                            if(biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_SWAMPLAND || biome == Biomes.OVERWORLD_SWAMPLAND_MUDDY)
-                            {
-                                topBlock = (short) Block.mud.id;
-                                fillerBlock = (short) Block.mud.id;
-                            }
-                            else if(generateGravelBeach)
-                            {
-                                topBlock = 0;
-                                fillerBlock = (short) Block.gravel.id;
-                            }
-                            else if(generateSandBeach)
-                            {
-                                topBlock = (short) Block.sand.id;
-                                fillerBlock = (short) Block.sand.id;
-                            }
-                        } else if (y <= oceanY) {
-                            if(biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_SWAMPLAND || biome == Biomes.OVERWORLD_SWAMPLAND_MUDDY) // Make mud under the ocean always be regular mud
+                        else {
+                            //todo: biome tags
+                            boolean biomeGeneratesMud = biome ==
+                                    Biomes.OVERWORLD_CAATINGA_PLAINS ||
+                                    biome == Biomes.OVERWORLD_CAATINGA ||
+                                    biome == Biomes.OVERWORLD_SWAMPLAND ||
+                                    biome == Biomes.OVERWORLD_SWAMPLAND_MUDDY;
+
+                            if(y >= minY + oceanY - 4 && y <= minY + oceanY + 1)
                             {
-                                topBlock = (short) Block.mud.id;
-                                fillerBlock = (short) Block.mud.id;
+                                // generate coastlines
+                                topBlock = biome.topBlock;
+                                fillerBlock = biome.fillerBlock;
+                                if(biomeGeneratesMud)
+                                {
+                                    topBlock = (short) Block.mud.id;
+                                    fillerBlock = (short) Block.mud.id;
+                                }
+                                else if(generateGravelBeach)
+                                {
+                                    topBlock = 0;
+                                    fillerBlock = (short) Block.gravel.id;
+                                }
+                                else if(generateSandBeach)
+                                {
+                                    topBlock = (short) Block.sand.id;
+                                    fillerBlock = (short) Block.sand.id;
+                                }
+                            } else if (y <= oceanY) {
+                                if(biomeGeneratesMud) // Make mud under the ocean always be regular mud
+                                {
+                                    topBlock = (short) Block.mud.id;
+                                    fillerBlock = (short) Block.mud.id;
+                                }
                             }
                         }
 
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java
index a50560754..5f990d1b3 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java
+++ b/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java
@@ -12,7 +12,7 @@ public class WorldFeatureTreeCaatinga extends WorldFeature
 {
     protected int leavesID;
     protected int logID;
-    protected int heightMod = 2;
+    protected int heightMod = 3;
 
     public WorldFeatureTreeCaatinga(int leavesID, int logID)
     {
@@ -122,9 +122,9 @@ public class WorldFeatureTreeCaatinga extends WorldFeature
         }
         WorldFeatureTree.onTreeGrown(world, x, y, z);
         for(int i = 0; i < noCanopies; i++) {
-            int modX = random.nextInt(6) - 3;
-            int modZ = random.nextInt(6) - 3;
-            int modY = random.nextInt(3) + 1;
+            int modX = random.nextInt(8) - 4;
+            int modZ = random.nextInt(8) - 4;
+            int modY = random.nextInt(4) + 1;
             int x1 = x + modX;
             int z1 = z + modZ;
 
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldDefault.java b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldDefault.java
index 70f76266b..7cf10558a 100644
--- a/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldDefault.java
+++ b/src/main/java/net/minecraft/core/world/type/WorldTypeOverworldDefault.java
@@ -18,10 +18,10 @@ public class WorldTypeOverworldDefault
             Weather.overworldClear,
             new WindManagerGeneric(),
             SeasonConfig.builder()
-                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 7)
-                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 7)
+                .withSeasonInCycle(Seasons.OVERWORLD_SPRING, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_SUMMER, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_FALL, 14)
+                .withSeasonInCycle(Seasons.OVERWORLD_WINTER, 14)
                 .build()
         );
     }
diff --git a/src/main/java/net/minecraft/server/world/WorldManager.java b/src/main/java/net/minecraft/server/world/WorldManager.java
index 049791685..eeada38d3 100644
--- a/src/main/java/net/minecraft/server/world/WorldManager.java
+++ b/src/main/java/net/minecraft/server/world/WorldManager.java
@@ -36,13 +36,13 @@ public class WorldManager
 
     @Override
 	public void addParticle(String particleKey, double x, double y, double z,
-                            double motionX, double motionY, double motionZ, double maxDistance)
+                            double motionX, double motionY, double motionZ, int data, double maxDistance)
     {
     }
 
     @Override
 	public void addParticle(String particleKey, double x, double y, double z,
-                            double motionX, double motionY, double motionZ)
+                            double motionX, double motionY, double motionZ, int data)
     {
     }
 
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_orange.png b/src/main/resources/assets/minecraft/textures/block/flower_orange.png
new file mode 100644
index 000000000..f9b6b9d6f
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/flower_orange.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves_caatinga.png b/src/main/resources/assets/minecraft/textures/block/leaves_caatinga.png
index 0cdfe6878..154080044 100644
Binary files a/src/main/resources/assets/minecraft/textures/block/leaves_caatinga.png and b/src/main/resources/assets/minecraft/textures/block/leaves_caatinga.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves_caatinga_fancy.png b/src/main/resources/assets/minecraft/textures/block/leaves_caatinga_fancy.png
index 41d657b0c..a04c7fda3 100644
Binary files a/src/main/resources/assets/minecraft/textures/block/leaves_caatinga_fancy.png and b/src/main/resources/assets/minecraft/textures/block/leaves_caatinga_fancy.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/log_brazilwood_side.png b/src/main/resources/assets/minecraft/textures/block/log_brazilwood_side.png
new file mode 100644
index 000000000..5029d4a78
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/log_brazilwood_side.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/log_brazilwood_top.png b/src/main/resources/assets/minecraft/textures/block/log_brazilwood_top.png
new file mode 100644
index 000000000..2f0ed4d97
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/log_brazilwood_top.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/sapling_brazilwood.png b/src/main/resources/assets/minecraft/textures/block/sapling_brazilwood.png
new file mode 100644
index 000000000..016521fec
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/sapling_brazilwood.png differ
diff --git a/src/main/resources/misc/colors.properties b/src/main/resources/misc/colors.properties
index 7364b1198..47b722a09 100644
--- a/src/main/resources/misc/colors.properties
+++ b/src/main/resources/misc/colors.properties
@@ -95,15 +95,15 @@ override.leaves.shrub.winter.r=0.561
 override.leaves.shrub.winter.g=0.514
 override.leaves.shrub.winter.b=0.369
 
-override.leaves.caatinga.spring.r=0.675
-override.leaves.caatinga.spring.g=0.640
-override.leaves.caatinga.spring.b=0.164
-override.leaves.caatinga.summer.r=0.675
-override.leaves.caatinga.summer.g=0.640
-override.leaves.caatinga.summer.b=0.164
-override.leaves.caatinga.fall.r=0.343
-override.leaves.caatinga.fall.g=0.679
-override.leaves.caatinga.fall.b=0.203
+override.leaves.caatinga.spring.r=0.343
+override.leaves.caatinga.spring.g=0.679
+override.leaves.caatinga.spring.b=0.203
+override.leaves.caatinga.summer.r=0.714
+override.leaves.caatinga.summer.g=0.718
+override.leaves.caatinga.summer.b=0.339
+override.leaves.caatinga.fall.r=0.714
+override.leaves.caatinga.fall.g=0.718
+override.leaves.caatinga.fall.b=0.339
 override.leaves.caatinga.winter.r=0.343
 override.leaves.caatinga.winter.g=0.679
 override.leaves.caatinga.winter.b=0.203
