diff --git a/src/common/resources/achievement/icons.png b/src/common/resources/achievement/icons.png
deleted file mode 100644
index 6a3f3ea58..000000000
Binary files a/src/common/resources/achievement/icons.png and /dev/null differ
diff --git a/src/common/resources/lang/en_US/gui.lang b/src/common/resources/lang/en_US/gui.lang
index 3c4dd0830..8d5cad6a6 100644
--- a/src/common/resources/lang/en_US/gui.lang
+++ b/src/common/resources/lang/en_US/gui.lang
@@ -25,6 +25,16 @@ gui.bad_java_arch.label.body.4=Please consider downloading a 64-bit JRE such as
 gui.bad_java_arch.button.download=Download
 gui.bad_java_arch.button.continue=Continue
 
+gui.no_minecraft.label.title=Minecraft Beta 1.7.3 is Missing!
+gui.no_minecraft.label.body.1=It looks like you're running Better than Adventure! without Minecraft Beta 1.7.3.
+gui.no_minecraft.label.body.2=Better than Adventure! must be installed with an official copy of
+gui.no_minecraft.label.body.3=Minecraft Beta 1.7.3 in order to function properly.
+gui.no_minecraft.label.body.4=This issue normally happens if you made a mistake in the installation process.
+gui.no_minecraft.label.body.5=Please review the install guide linked below.
+gui.no_minecraft.button.guide=Install Guide
+gui.no_minecraft.button.quit=Quit Game
+
+
 gui.conflict_warning.label.title=Level safe conflict
 gui.conflict_warning.label.body.1=Minecraft detected a conflict in the level save data.
 gui.conflict_warning.label.body.2=This could be caused by two copies of the game
diff --git a/src/common/resources/lang/en_US/item.lang b/src/common/resources/lang/en_US/item.lang
index 3f8f8fc72..8c5c11543 100644
--- a/src/common/resources/lang/en_US/item.lang
+++ b/src/common/resources/lang/en_US/item.lang
@@ -411,6 +411,9 @@ item.door.oak.painted.white.desc=Every house needs one.
 item.door.glass.name=Glass Door
 item.door.glass.desc=Great for aesthetics, terrible for privacy.
 
+item.door.glass.tinted.name=Tinted Glass Door
+item.door.glass.tinted.desc=Okay for aesthetics, okay for privacy.
+
 item.rope.name=Rope
 item.rope.desc=Strong enough to climb.
 
diff --git a/src/common/resources/lang/en_US/tile.lang b/src/common/resources/lang/en_US/tile.lang
index d9c265e44..d167c3c12 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.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.rope.name=Rope
tile.rope.desc=Rope, rope, rope your boat.
\ No newline at end of file
+tile.stone.name=Stone
tile.stone.desc=A block of solid stone.
tile.basalt.name=Basalt
tile.basalt.desc=A block of solid basalt.
tile.limestone.name=Limestone
tile.limestone.desc=A block of solid limestone.
tile.granite.name=Granite
tile.granite.desc=A block of solid granite.
tile.marble.name=Marble
tile.marble.desc=A block of solid marble.
tile.slate.name=Slate
tile.slate.desc=A block of solid slate.
tile.permafrost.name=Permafrost
tile.permafrost.desc=A block of frozen stone.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tile.sponge.dry.name=Sponge
tile.sponge.dry.desc=A dry sponge, good for soaking up water.
tile.sponge.wet.name=Wet Sponge
tile.sponge.wet.desc=A sponge full of water.

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

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

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

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

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

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

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

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

tile.flower.yellow.name=Dandelion
tile.flower.yellow.desc=A beautiful yellow flower.
tile.flower.red.name=Rose
tile.flower.red.desc=A beautiful red flower.
tile.flower.purple.name=Heather
tile.flower.purple.desc=Sprigs of purple petals. Brings good luck.
tile.flower.lightblue.name=Bluebell
tile.flower.lightblue.desc=A sad-looking blue flower.
tile.flower.pink.name=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
diff --git a/src/common/resources/recipes/workbench.json b/src/common/resources/recipes/workbench.json
index 9d7a6afc5..f330a4ac4 100644
--- a/src/common/resources/recipes/workbench.json
+++ b/src/common/resources/recipes/workbench.json
@@ -6648,6 +6648,30 @@
     },
     "consumeContainers": true
   },
+  {
+    "name": "minecraft:workbench/tinted_glass_trapdoor",
+    "type": "minecraft:crafting/shaped",
+    "pattern": [
+      "###",
+      "###"
+    ],
+    "symbols": [
+      {
+        "symbol": "#",
+        "stack": {
+          "key": "tile.glass.tinted",
+          "amount": 1,
+          "meta": 0
+        }
+      }
+    ],
+    "result": {
+      "key": "tile.trapdoor.glass.tinted",
+      "amount": 6,
+      "meta": 0
+    },
+    "consumeContainers": true
+  },
   {
     "name": "minecraft:workbench/tnt",
     "type": "minecraft:crafting/shaped",
@@ -11231,14 +11255,39 @@
         "stack": {
           "id": 190,
           "amount": 1,
-          "meta": 2
+          "meta": 0
         }
       }
     ],
     "result": {
       "id": 16533,
       "amount": 2,
-      "meta": 13
+      "meta": 0
+    },
+    "consumeContainers": true
+  },
+  {
+    "name": "minecraft:workbench/tinted_glass_door",
+    "type": "minecraft:crafting/shaped",
+    "pattern": [
+      "##",
+      "##",
+      "##"
+    ],
+    "symbols": [
+      {
+        "symbol": "#",
+        "stack": {
+          "key": "tile.glass.tinted",
+          "amount": 1,
+          "meta": 0
+        }
+      }
+    ],
+    "result": {
+      "key": "item.door.glass.tinted",
+      "amount": 2,
+      "meta": 0
     },
     "consumeContainers": true
   },
diff --git a/src/main/java/net/minecraft/client/Minecraft.java b/src/main/java/net/minecraft/client/Minecraft.java
index 91718ee61..bde651192 100644
--- a/src/main/java/net/minecraft/client/Minecraft.java
+++ b/src/main/java/net/minecraft/client/Minecraft.java
@@ -1,25 +1,6 @@
 package net.minecraft.client;
 
-import static net.minecraft.core.Global.*;
-import static org.lwjgl.opengl.GL11.*;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Random;
-
-import net.minecraft.client.gui.modelviewer.GuiModelViewer;
-import net.minecraft.client.render.block.model.BlockModelDispatcher;
-import net.minecraft.client.render.item.model.ItemModelDispatcher;
-import net.minecraft.client.render.stitcher.TextureRegistry;
-import net.minecraft.client.render.tessalator.TessellatorStandard;
-import org.lwjgl.LWJGLException;
-import org.lwjgl.input.Keyboard;
-import org.lwjgl.input.Mouse;
-import org.lwjgl.opengl.Display;
-
 import com.mojang.nbt.CompoundTag;
-
 import net.minecraft.client.achievement.stat.StatStringFormatKeyInv;
 import net.minecraft.client.discord.RichPresenceHandlerThread;
 import net.minecraft.client.entity.ClientSkinVariantList;
@@ -39,6 +20,7 @@ import net.minecraft.client.gui.GuiIngameMenu;
 import net.minecraft.client.gui.GuiInventory;
 import net.minecraft.client.gui.GuiInventoryCreative;
 import net.minecraft.client.gui.GuiMainMenu;
+import net.minecraft.client.gui.GuiMissingMinecraft;
 import net.minecraft.client.gui.GuiOutOfMemory;
 import net.minecraft.client.gui.GuiPhotoMode;
 import net.minecraft.client.gui.GuiScreen;
@@ -46,6 +28,7 @@ import net.minecraft.client.gui.GuiSelectWorld;
 import net.minecraft.client.gui.GuiSleepMP;
 import net.minecraft.client.gui.GuiSleepSP;
 import net.minecraft.client.gui.MainMenuBackground;
+import net.minecraft.client.gui.modelviewer.GuiModelViewer;
 import net.minecraft.client.gui.popup.GuiPopup;
 import net.minecraft.client.input.InputHandler;
 import net.minecraft.client.input.InputType;
@@ -76,14 +59,18 @@ import net.minecraft.client.render.RenderEngine;
 import net.minecraft.client.render.RenderGlobal;
 import net.minecraft.client.render.Renderer;
 import net.minecraft.client.render.WorldRenderer;
+import net.minecraft.client.render.block.model.BlockModelDispatcher;
 import net.minecraft.client.render.camera.EntityCameraFirstPerson;
 import net.minecraft.client.render.camera.ICamera;
 import net.minecraft.client.render.colorizer.ColorizerFoliage;
 import net.minecraft.client.render.colorizer.ColorizerGrass;
 import net.minecraft.client.render.colorizer.ColorizerWater;
+import net.minecraft.client.render.item.model.ItemModelDispatcher;
 import net.minecraft.client.render.model.ModelBiped;
 import net.minecraft.client.render.shader.Shaders;
 import net.minecraft.client.render.shader.ShadersRenderer;
+import net.minecraft.client.render.stitcher.TextureRegistry;
+import net.minecraft.client.render.tessalator.TessellatorStandard;
 import net.minecraft.client.render.texturepack.TexturePackList;
 import net.minecraft.client.render.window.GameWindow;
 import net.minecraft.client.render.window.GameWindowLWJGL2;
@@ -142,6 +129,35 @@ import net.minecraft.core.world.save.LevelStorage;
 import net.minecraft.core.world.save.SaveConverters;
 import net.minecraft.core.world.save.SaveFormats;
 import net.minecraft.core.world.save.mcregion.SaveFormat19134;
+import org.lwjgl.LWJGLException;
+import org.lwjgl.input.Keyboard;
+import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.Display;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Random;
+
+import static net.minecraft.core.Global.CURRENT_SAVE_VERSION;
+import static org.lwjgl.opengl.GL11.GL_ALPHA_TEST;
+import static org.lwjgl.opengl.GL11.GL_TEXTURE_2D;
+import static org.lwjgl.opengl.GL11.glAlphaFunc;
+import static org.lwjgl.opengl.GL11.glBindTexture;
+import static org.lwjgl.opengl.GL11.glClear;
+import static org.lwjgl.opengl.GL11.glClearColor;
+import static org.lwjgl.opengl.GL11.glClearDepth;
+import static org.lwjgl.opengl.GL11.glColor4f;
+import static org.lwjgl.opengl.GL11.glCullFace;
+import static org.lwjgl.opengl.GL11.glDepthFunc;
+import static org.lwjgl.opengl.GL11.glDisable;
+import static org.lwjgl.opengl.GL11.glEnable;
+import static org.lwjgl.opengl.GL11.glLoadIdentity;
+import static org.lwjgl.opengl.GL11.glMatrixMode;
+import static org.lwjgl.opengl.GL11.glOrtho;
+import static org.lwjgl.opengl.GL11.glShadeModel;
+import static org.lwjgl.opengl.GL11.glTranslatef;
+import static org.lwjgl.opengl.GL11.glViewport;
 
 // Referenced classes of package net.minecraft.client:
 //            MinecraftApplet
@@ -469,8 +485,19 @@ public class Minecraft
         }
 
         gameStarted = true;
-        
-        if (System.getProperty("sun.arch.data.model").equals("32"))
+
+        boolean hasBeta173 = true;
+
+        try {
+            Class.forName("a"); // Check if a.class from the beta 1.7.3 jar is present
+        } catch (Exception e){
+            hasBeta173 = false;
+        }
+
+        if (!hasBeta173) {
+            displayGuiScreen(new GuiMissingMinecraft());
+        }
+        else if (System.getProperty("sun.arch.data.model").equals("32"))
         {
             displayGuiScreen(new GuiBadJavaArch());
         }
diff --git a/src/main/java/net/minecraft/client/entity/ClientSkinVariantList.java b/src/main/java/net/minecraft/client/entity/ClientSkinVariantList.java
index 67db04d4b..272696398 100644
--- a/src/main/java/net/minecraft/client/entity/ClientSkinVariantList.java
+++ b/src/main/java/net/minecraft/client/entity/ClientSkinVariantList.java
@@ -38,14 +38,14 @@ public class ClientSkinVariantList extends SkinVariantList {
 		load(mc.texturePackList.getDefaultTexturePack(), errors);
 		
 		// Load custom skin variants
-		if(mc.texturePackList.getHighestPriorityPack() != mc.texturePackList.getDefaultTexturePack() && mc.texturePackList.getHighestPriorityPack().hasFile("/mob/variants.json")) {
+		if(mc.texturePackList.getHighestPriorityPack() != mc.texturePackList.getDefaultTexturePack() && mc.texturePackList.getHighestPriorityPack().hasFile("/entity/variants.json")) {
 			load(mc.texturePackList.getHighestPriorityPack(), errors);
 		}
 	}
 	
 	public void load(TexturePack texturePack, List<Throwable> errors) {
 		try {
-			JsonObject rootObject = TexturePackJsonHelper.readJsonObject(texturePack, "/mob/variants.json");
+			JsonObject rootObject = TexturePackJsonHelper.readJsonObject(texturePack, "/entity/variants.json");
 			try {
 				if(rootObject.has("replace") && rootObject.getBoolean("replace")) {
 					entitySkinCounts.clear();
diff --git a/src/main/java/net/minecraft/client/entity/fx/EntityReddustFX.java b/src/main/java/net/minecraft/client/entity/fx/EntityReddustFX.java
index dec5d5e63..338ae8b97 100644
--- a/src/main/java/net/minecraft/client/entity/fx/EntityReddustFX.java
+++ b/src/main/java/net/minecraft/client/entity/fx/EntityReddustFX.java
@@ -11,14 +11,14 @@ import net.minecraft.core.world.World;
 public class EntityReddustFX extends EntityFX
 {
 
-    public EntityReddustFX(World world, double d, double d1, double d2, float f, float f1, float f2)
+    public EntityReddustFX(World world, double x, double y, double z, float red, float green, float blue)
     {
-        this(world, d, d1, d2, 1.0F, f, f1, f2);
+        this(world, x, y, z, 1.0F, red, green, blue);
     }
 
-    public EntityReddustFX(World world, double d, double d1, double d2, float f, float red, float green, float blue)
+    public EntityReddustFX(World world, double x, double y, double z, float scale, float red, float green, float blue)
     {
-        super(world, d, d1, d2, 0.0D, 0.0D, 0.0D);
+        super(world, x, y, z, 0.0D, 0.0D, 0.0D);
         xd *= 0.1D;
         yd *= 0.1D;
         zd *= 0.1D;
@@ -27,10 +27,10 @@ public class EntityReddustFX extends EntityFX
         this.particleGreen = ((float)(Math.random() * 0.2D) + 0.8F) * green * f4;
         this.particleBlue = ((float)(Math.random() * 0.2D) + 0.8F) * blue * f4;
         particleScale *= 0.75F;
-        particleScale *= f;
+        particleScale *= scale;
         field_673_a = particleScale;
         particleMaxAge = (int)(8D / (Math.random() * 0.8D + 0.2D));
-        particleMaxAge *= f;
+        particleMaxAge *= scale;
         noPhysics = false;
     }
 
diff --git a/src/main/java/net/minecraft/client/entity/fx/ParticleDispatcher.java b/src/main/java/net/minecraft/client/entity/fx/ParticleDispatcher.java
new file mode 100644
index 000000000..2c8c5ced7
--- /dev/null
+++ b/src/main/java/net/minecraft/client/entity/fx/ParticleDispatcher.java
@@ -0,0 +1,65 @@
+package net.minecraft.client.entity.fx;
+
+import net.minecraft.client.Minecraft;
+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 java.util.ArrayList;
+import java.util.List;
+
+public class ParticleDispatcher extends Dispatcher<String, ParticleLambda> {
+    private static final ParticleDispatcher instance = new ParticleDispatcher();
+    public static ParticleDispatcher getInstance()
+    {
+        return instance;
+    }
+    public List<String> getParticleIds(){
+        return new ArrayList<>(dispatches.keySet());
+    }
+    @Override
+    protected ParticleLambda getDefault() {
+        return null;
+    }
+    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) -> {
+            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) -> {
+            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
new file mode 100644
index 000000000..394377380
--- /dev/null
+++ b/src/main/java/net/minecraft/client/entity/fx/ParticleLambda.java
@@ -0,0 +1,8 @@
+package net.minecraft.client.entity.fx;
+
+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);
+}
diff --git a/src/main/java/net/minecraft/client/gui/Gui.java b/src/main/java/net/minecraft/client/gui/Gui.java
index afc24c7ba..3f61e3c09 100644
--- a/src/main/java/net/minecraft/client/gui/Gui.java
+++ b/src/main/java/net/minecraft/client/gui/Gui.java
@@ -260,7 +260,7 @@ public class Gui
         float r = (float)(argb >> 16 & 0xff) / 255F;
         float g = (float)(argb >> 8 & 0xff) / 255F;
         float b = (float)(argb & 0xff) / 255F;
-        re.bindTexture(re.getTexture("/gui/slot.png"));
+        re.bindTexture(re.getTexture("/assets/minecraft/textures/gui/slot.png"));
         GL11.glColor4f(r,g,b,a);
         drawTexturedModalRect(x,y,0,0,18,18,18,0.0078125F);
 
diff --git a/src/main/java/net/minecraft/client/gui/GuiAchievement.java b/src/main/java/net/minecraft/client/gui/GuiAchievement.java
index 9515f1954..dcb5ccfd9 100644
--- a/src/main/java/net/minecraft/client/gui/GuiAchievement.java
+++ b/src/main/java/net/minecraft/client/gui/GuiAchievement.java
@@ -128,7 +128,7 @@ public class GuiAchievement extends Gui
         d1 *= d1;
         int i = achievementWindowWidth - 160;
         int j = (int) (-d1 * 36D);
-        int k = theGame.renderEngine.getTexture("/achievement/bg.png");
+        int k = theGame.renderEngine.getTexture("/assets/minecraft/textures/gui/achievement/bg.png");
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         GL11.glEnable(GL11.GL_TEXTURE_2D);
         GL11.glBindTexture(GL11.GL_TEXTURE_2D, k);
diff --git a/src/main/java/net/minecraft/client/gui/GuiAchievements.java b/src/main/java/net/minecraft/client/gui/GuiAchievements.java
index f6bc71a32..56f529dc5 100644
--- a/src/main/java/net/minecraft/client/gui/GuiAchievements.java
+++ b/src/main/java/net/minecraft/client/gui/GuiAchievements.java
@@ -177,7 +177,7 @@ public class GuiAchievements extends GuiScreen
             l = field_27123_v - 1;
         }
         int i1 = TextureRegistry.blockAtlas.getTextureId();
-        int j1 = mc.renderEngine.getTexture("/achievement/bg.png");
+        int j1 = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/achievement/bg.png");
         int k1 = (width - field_27121_a) / 2;
         int l1 = (height - field_27119_i) / 2;
         int i2 = k1 + 16;
diff --git a/src/main/java/net/minecraft/client/gui/GuiButton.java b/src/main/java/net/minecraft/client/gui/GuiButton.java
index 2c910ffbe..6f06d42f6 100644
--- a/src/main/java/net/minecraft/client/gui/GuiButton.java
+++ b/src/main/java/net/minecraft/client/gui/GuiButton.java
@@ -62,7 +62,7 @@ public class GuiButton extends Gui implements GuiElement
         boolean mouseOver = mouseX >= xPosition && mouseY >= yPosition && mouseX < xPosition + width && mouseY < yPosition + height;
         int state = getButtonState(mouseOver);
 
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/gui.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/gui.png"));
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         drawTexturedModalRect(xPosition, yPosition, 0, 46 + state * 20, width / 2, height);
         drawTexturedModalRect(xPosition + width / 2, yPosition, 200 - width / 2, 46 + state * 20, width / 2, height);
diff --git a/src/main/java/net/minecraft/client/gui/GuiChest.java b/src/main/java/net/minecraft/client/gui/GuiChest.java
index 440e190e8..55075fdce 100644
--- a/src/main/java/net/minecraft/client/gui/GuiChest.java
+++ b/src/main/java/net/minecraft/client/gui/GuiChest.java
@@ -34,7 +34,7 @@ public class GuiChest extends GuiContainer
     @Override
 	protected void drawGuiContainerBackgroundLayer(float f)
     {
-        int i = mc.renderEngine.getTexture("/gui/container.png");
+        int i = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/container.png");
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         mc.renderEngine.bindTexture(i);
         int x = (width - xSize) / 2;
diff --git a/src/main/java/net/minecraft/client/gui/GuiClickableLabel.java b/src/main/java/net/minecraft/client/gui/GuiClickableLabel.java
index 0a3a460f1..5f1144053 100644
--- a/src/main/java/net/minecraft/client/gui/GuiClickableLabel.java
+++ b/src/main/java/net/minecraft/client/gui/GuiClickableLabel.java
@@ -33,7 +33,7 @@ public class GuiClickableLabel extends GuiButton
             return;
         }
         FontRenderer fontrenderer = mc.fontRenderer;
-        GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, mc.renderEngine.getTexture("/gui/gui.png"));
+        GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/gui.png"));
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         boolean hovered = mouseX >= xPosition && mouseY >= yPosition && mouseX < xPosition + width && mouseY < yPosition + height;
         width = fontrenderer.getStringWidth(displayString) + 4;
diff --git a/src/main/java/net/minecraft/client/gui/GuiControllerSetup.java b/src/main/java/net/minecraft/client/gui/GuiControllerSetup.java
index 05a5c368e..72e2cbde3 100644
--- a/src/main/java/net/minecraft/client/gui/GuiControllerSetup.java
+++ b/src/main/java/net/minecraft/client/gui/GuiControllerSetup.java
@@ -100,7 +100,7 @@ public class GuiControllerSetup extends GuiScreen{
 			glDisable(GL_TEXTURE_2D);
 			
 //			glEnable(GL_TEXTURE_2D);
-//			glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/controller.png"));
+//			glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/controller.png"));
 //			drawTexturedModalRect(width / 2 - 64, height / 2 - 46, 0, 0, 128, 92);
 			
 			glDisable(GL_TEXTURE_2D);
@@ -127,7 +127,7 @@ public class GuiControllerSetup extends GuiScreen{
 			fontRenderer.drawStringWithShadow("L", x1+228, 132, controller.buttonL.isPressed() ? 0xFFFFFF : 0x505050);
 			fontRenderer.drawStringWithShadow("R", x1+238, 132, controller.buttonR.isPressed() ? 0xFFFFFF : 0x505050);
 			
-			glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/controller/xbox360.png"));
+			glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/controller/xbox360.png"));
 
 			glColor3d(1.0, 1.0, 1.0);
 			glBegin(GL_QUADS);
diff --git a/src/main/java/net/minecraft/client/gui/GuiCrafting.java b/src/main/java/net/minecraft/client/gui/GuiCrafting.java
index b05288594..e3cf65bf0 100644
--- a/src/main/java/net/minecraft/client/gui/GuiCrafting.java
+++ b/src/main/java/net/minecraft/client/gui/GuiCrafting.java
@@ -36,7 +36,7 @@ public class GuiCrafting extends GuiContainer
     @Override
 	protected void drawGuiContainerBackgroundLayer(float f)
     {
-        int i = mc.renderEngine.getTexture("/gui/crafting.png");
+        int i = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/crafting.png");
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         mc.renderEngine.bindTexture(i);
         int j = (width - xSize) / 2;
diff --git a/src/main/java/net/minecraft/client/gui/GuiCreateWorld.java b/src/main/java/net/minecraft/client/gui/GuiCreateWorld.java
index 5f0fe83fc..ebb29ce57 100644
--- a/src/main/java/net/minecraft/client/gui/GuiCreateWorld.java
+++ b/src/main/java/net/minecraft/client/gui/GuiCreateWorld.java
@@ -93,8 +93,8 @@ public class GuiCreateWorld extends GuiScreen
         controlList.add(gamemodeButton = new GuiButton(2, width / 2 - 100, 100 + 20 + 4, 98, 20, ""));
         controlList.add(cheatsButton = new GuiButton(3, width / 2 - 100 + 102, 100 + 20 + 4, 98, 20, ""));
         controlList.add(worldTypeButton = new GuiButton(4, width / 2 - 100, 100 + 20 + 20 + 4 + 4, ""));
-        controlList.add(buttonRandomWorldName = new GuiTexturedButton(5, "/gui/gui.png", width / 2 + 100 - 20, 60, 60, 86, 20, 20));
-        controlList.add(buttonRandomSeed = new GuiTexturedButton(6, "/gui/gui.png", width / 2 + 100 - 20, 100, 60, 86, 20, 20));
+        controlList.add(buttonRandomWorldName = new GuiTexturedButton(5, "/assets/minecraft/textures/gui/gui.png", width / 2 + 100 - 20, 60, 60, 86, 20, 20));
+        controlList.add(buttonRandomSeed = new GuiTexturedButton(6, "/assets/minecraft/textures/gui/gui.png", width / 2 + 100 - 20, 100, 60, 86, 20, 20));
         updateButtons();
         updateFolderName();
     }
diff --git a/src/main/java/net/minecraft/client/gui/GuiDispenser.java b/src/main/java/net/minecraft/client/gui/GuiDispenser.java
index a5b24e400..568b8fdf6 100644
--- a/src/main/java/net/minecraft/client/gui/GuiDispenser.java
+++ b/src/main/java/net/minecraft/client/gui/GuiDispenser.java
@@ -28,7 +28,7 @@ public class GuiDispenser extends GuiContainer
     @Override
 	protected void drawGuiContainerBackgroundLayer(float f)
     {
-        int i = mc.renderEngine.getTexture("/gui/trap.png");
+        int i = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/trap.png");
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         mc.renderEngine.bindTexture(i);
         int j = (width - xSize) / 2;
diff --git a/src/main/java/net/minecraft/client/gui/GuiEditFlag.java b/src/main/java/net/minecraft/client/gui/GuiEditFlag.java
index d48877e15..2297177f7 100644
--- a/src/main/java/net/minecraft/client/gui/GuiEditFlag.java
+++ b/src/main/java/net/minecraft/client/gui/GuiEditFlag.java
@@ -71,7 +71,7 @@ public class GuiEditFlag
 
         for (int i = 0; i < 7; i++)
         {
-            toolBtns[i] = new GuiTexturedButton(i, "/gui/flag_editor.png", (width - xSize) / 2 + 12 + 22 * i, (height - ySize) / 2 + 76, 20 * i, 195, 20, 20);
+            toolBtns[i] = new GuiTexturedButton(i, "/assets/minecraft/textures/gui/flag_editor.png", (width - xSize) / 2 + 12 + 22 * i, (height - ySize) / 2 + 76, 20 * i, 195, 20, 20);
             if (i == activeTool) toolBtns[i].enabled = false;
             controlList.add(toolBtns[i]);
         }
@@ -317,7 +317,7 @@ public class GuiEditFlag
     @Override
     protected void drawGuiContainerBackgroundLayer(float f) 
     {
-        int i = mc.renderEngine.getTexture("/gui/flag_editor.png");
+        int i = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/flag_editor.png");
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         mc.renderEngine.bindTexture(i);
         int j = (width - xSize) / 2;
diff --git a/src/main/java/net/minecraft/client/gui/GuiEditLabel.java b/src/main/java/net/minecraft/client/gui/GuiEditLabel.java
index 804034319..684d93e2d 100644
--- a/src/main/java/net/minecraft/client/gui/GuiEditLabel.java
+++ b/src/main/java/net/minecraft/client/gui/GuiEditLabel.java
@@ -67,7 +67,7 @@ public class GuiEditLabel extends GuiScreen
     public void drawScreen(final int mouseX, final int mouseY, final float f)
     {
         drawDefaultBackground();
-        final int bgTex = mc.renderEngine.getTexture("/gui/scroll.png");
+        final int bgTex = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/scroll.png");
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         mc.renderEngine.bindTexture(bgTex);
         final int widthBG = width / 2 - 56;
diff --git a/src/main/java/net/minecraft/client/gui/GuiFurnace.java b/src/main/java/net/minecraft/client/gui/GuiFurnace.java
index 11cbd510d..9af439b44 100644
--- a/src/main/java/net/minecraft/client/gui/GuiFurnace.java
+++ b/src/main/java/net/minecraft/client/gui/GuiFurnace.java
@@ -34,9 +34,9 @@ public class GuiFurnace extends GuiContainer
     {
         int guiTexture;
         if(furnaceInventory instanceof TileEntityBlastFurnace) {
-            guiTexture = mc.renderEngine.getTexture("/gui/blastfurnace.png");
+            guiTexture = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/blastfurnace.png");
         } else {
-            guiTexture = mc.renderEngine.getTexture("/gui/furnace.png");
+            guiTexture = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/furnace.png");
         }
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         mc.renderEngine.bindTexture(guiTexture);
diff --git a/src/main/java/net/minecraft/client/gui/GuiHudDesigner.java b/src/main/java/net/minecraft/client/gui/GuiHudDesigner.java
index cf10db505..7f30c253d 100644
--- a/src/main/java/net/minecraft/client/gui/GuiHudDesigner.java
+++ b/src/main/java/net/minecraft/client/gui/GuiHudDesigner.java
@@ -33,7 +33,7 @@ public class GuiHudDesigner
         mc.gameSettings.screenPadding.set(0.0f);
 
         add(new GuiButton(0, width / 2 - 100, height - BOTTOM_SPACE + (BOTTOM_SPACE - 20) / 2, 178, 20, I18n.getInstance().translateKey("gui.hud_designer.button.done")));
-        add(resetButton = new GuiTexturedButton(1, "/gui/gui.png", width / 2 + 80, height - BOTTOM_SPACE + (BOTTOM_SPACE - 20) / 2, 20 * 4, 86, 20, 20));
+        add(resetButton = new GuiTexturedButton(1, "/assets/minecraft/textures/gui/gui.png", width / 2 + 80, height - BOTTOM_SPACE + (BOTTOM_SPACE - 20) / 2, 20 * 4, 86, 20, 20));
     }
 
     @Override
@@ -267,7 +267,7 @@ public class GuiHudDesigner
         GL11.glDisable(GL11.GL_LIGHTING);
         GL11.glDisable(GL11.GL_FOG);
         TessellatorStandard tessellator = TessellatorStandard.instance;
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/designer_bg.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/designer_bg.png"));
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         float scale = 32F;
         tessellator.startDrawingQuads();
diff --git a/src/main/java/net/minecraft/client/gui/GuiIngame.java b/src/main/java/net/minecraft/client/gui/GuiIngame.java
index 5b7adb0b3..5de98c011 100644
--- a/src/main/java/net/minecraft/client/gui/GuiIngame.java
+++ b/src/main/java/net/minecraft/client/gui/GuiIngame.java
@@ -120,7 +120,7 @@ public class GuiIngame extends Gui
         }
 
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
-        GL11.glBindTexture(3553 /* GL_TEXTURE_2D */, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(3553 /* GL_TEXTURE_2D */, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
 
         //Sleep Overlay
         Lighting.disable();
diff --git a/src/main/java/net/minecraft/client/gui/GuiIngameDoom.java b/src/main/java/net/minecraft/client/gui/GuiIngameDoom.java
index 8be9ea3fa..9076add53 100644
--- a/src/main/java/net/minecraft/client/gui/GuiIngameDoom.java
+++ b/src/main/java/net/minecraft/client/gui/GuiIngameDoom.java
@@ -69,7 +69,7 @@ public class GuiIngameDoom
         drawStacks();
 
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
-        GL11.glBindTexture(3553 /* GL_TEXTURE_2D */, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(3553 /* GL_TEXTURE_2D */, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
 
         if (mc.gameSettings.immersiveMode.drawCrosshair() && mc.gameSettings.thirdPersonView.value == 0)
         {
@@ -87,7 +87,7 @@ public class GuiIngameDoom
         int height = mc.resolution.scaledHeight;
 
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/doom.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/doom.png"));
 
         // Draw main hotbar
         drawTexturedModalRect(width / 2 - 197, height - 43, 0, 0, 197, 43);
@@ -155,7 +155,7 @@ public class GuiIngameDoom
     private void drawNumber(int i, int x, int y)
     {
         GL11.glColor4f(1f, 1f, 1f, 1f);
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/doom.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/doom.png"));
 
         List<Integer> parts = new ArrayList<>();
 
@@ -207,7 +207,7 @@ public class GuiIngameDoom
     private void drawArmsButton(int x, int y, int number, boolean active)
     {
         GL11.glColor4f(1f, 1f, 1f, 1f);
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/doom.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/doom.png"));
 
         int u = 13;
         int v = 196;
@@ -237,7 +237,7 @@ public class GuiIngameDoom
     private void drawHotbarIndicator()
     {
 //        GL11.glColor4f(1f, 1f, 1f, 1f);
-//        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/doom.png"));
+//        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/doom.png"));
 
         int width = mc.resolution.scaledWidth;
         int height = mc.resolution.scaledHeight;
diff --git a/src/main/java/net/minecraft/client/gui/GuiInventory.java b/src/main/java/net/minecraft/client/gui/GuiInventory.java
index 0588d754a..f4924e723 100644
--- a/src/main/java/net/minecraft/client/gui/GuiInventory.java
+++ b/src/main/java/net/minecraft/client/gui/GuiInventory.java
@@ -153,7 +153,7 @@ public class GuiInventory extends GuiContainer
         if(mc.gameSettings.armorProtectionOverlay.value && armorButton.enabled) {
         	drawProtectionOverlay(mouseX, mouseY);
         }
-        int inventoryTex = mc.renderEngine.getTexture("/gui/inventory.png");
+        int inventoryTex = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/inventory.png");
         mc.renderEngine.bindTexture(inventoryTex);
         
         glColor4d(1.0, 1.0, 1.0, 1.0);
@@ -200,7 +200,7 @@ public class GuiInventory extends GuiContainer
         glEnable(GL_BLEND);
         drawGradientRect(x, y, x + w, y + h, protectionOverlayBgColor.getARGB(), protectionOverlayBgColor.getARGB());
 
-        int iconsTex = mc.renderEngine.getTexture("/gui/icons.png");
+        int iconsTex = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png");
         mc.renderEngine.bindTexture(iconsTex);
         
         glDisable(GL_BLEND);
@@ -258,7 +258,7 @@ public class GuiInventory extends GuiContainer
     @Override
 	protected void drawGuiContainerBackgroundLayer(float f)
     {
-        int inventoryTex = mc.renderEngine.getTexture("/gui/inventory.png");
+        int inventoryTex = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/inventory.png");
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         mc.renderEngine.bindTexture(inventoryTex);
         int j = (width - xSize) / 2;
diff --git a/src/main/java/net/minecraft/client/gui/GuiInventoryCreative.java b/src/main/java/net/minecraft/client/gui/GuiInventoryCreative.java
index 780b5760c..417a77347 100644
--- a/src/main/java/net/minecraft/client/gui/GuiInventoryCreative.java
+++ b/src/main/java/net/minecraft/client/gui/GuiInventoryCreative.java
@@ -167,7 +167,7 @@ public class GuiInventoryCreative extends GuiInventory implements ITextChangeLis
     {
 		scroll(Mouse.getDWheel());
 		
-        int i = mc.renderEngine.getTexture("/gui/creative.png");
+        int i = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/creative.png");
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         mc.renderEngine.bindTexture(i);
         int x = (width - xSize) / 2;
diff --git a/src/main/java/net/minecraft/client/gui/GuiMainMenu.java b/src/main/java/net/minecraft/client/gui/GuiMainMenu.java
index 554d88199..c3e197dc1 100644
--- a/src/main/java/net/minecraft/client/gui/GuiMainMenu.java
+++ b/src/main/java/net/minecraft/client/gui/GuiMainMenu.java
@@ -168,7 +168,7 @@ public class GuiMainMenu extends GuiScreen
         controlList.add(new GuiClickableLabel(5, d, height - 36 - d, i18n.translateKey("gui.main_menu.button.discord"), 0x5865F2));
         controlList.add(new GuiClickableLabel(6, d, height - 24 - d, i18n.translateKey("gui.main_menu.button.minecraft_forum"), 0x63A121));
         controlList.add(new GuiClickableLabel(7, d, height - 12 - d, i18n.translateKey("gui.main_menu.button.youtube"), 0xFF0000));
-        controlList.add(new GuiTexturedButton(8, "/gui/gui.png", width / 2 + 104, i + 72 + 12, 0, 86, 20, 20));
+        controlList.add(new GuiTexturedButton(8, "/assets/minecraft/textures/gui/gui.png", width / 2 + 104, i + 72 + 12, 0, 86, 20, 20));
         GuiButton debugButton = new GuiButton(9, width - 8, height - 8, 8, 8, "");
         debugButton.visible = false;
         controlList.add(debugButton);
diff --git a/src/main/java/net/minecraft/client/gui/GuiMissingMinecraft.java b/src/main/java/net/minecraft/client/gui/GuiMissingMinecraft.java
new file mode 100644
index 000000000..2e8f3621e
--- /dev/null
+++ b/src/main/java/net/minecraft/client/gui/GuiMissingMinecraft.java
@@ -0,0 +1,110 @@
+package net.minecraft.client.gui;
+
+import net.minecraft.client.render.tessalator.TessellatorStandard;
+import net.minecraft.core.lang.I18n;
+import net.minecraft.core.util.helper.MathHelper;
+import org.lwjgl.opengl.GL11;
+
+import java.awt.*;
+import java.net.URI;
+
+public class GuiMissingMinecraft extends GuiScreen{
+    public int ticks = 0;
+    @Override
+    public void init()
+    {
+        I18n i = I18n.getInstance();
+        controlList.clear();
+        String downloadString = i.translateKey("gui.no_minecraft.button.guide");
+        controlList.add(new GuiButton(0, width / 2 - 100, height / 4 + 120 + 12, i.translateKey("gui.no_minecraft.button.quit")));
+        GuiClickableLabel installLabel = new GuiClickableLabel(1, width / 2 - 170, (height / 4 - 60) + 60 + 64, downloadString, 0x7C99EA);
+        controlList.add(installLabel);
+        controlList.add(new GuiClickableLabel(2, 0,  height - fontRenderer.fontHeight - 4, i.translateKey("gui.main_menu.button.discord"), 0x5865F2));
+    }
+    @Override
+    public void drawScreen(int mouseX, int mouseY, float partialTick)
+    {
+        I18n i = I18n.getInstance();
+        drawBackground(partialTick);
+        drawStringCentered(fontRenderer, i.translateKey("gui.no_minecraft.label.title"), width / 2, (height / 4 - 60) + 20, 0xffff60);
+        drawString(fontRenderer, i.translateKey("gui.no_minecraft.label.body.1"), width / 2 - 170, (height / 4 - 60) + 60 + 0, 0xdedede);
+        drawString(fontRenderer, i.translateKey("gui.no_minecraft.label.body.2"), width / 2 - 170, (height / 4 - 60) + 60 + 18, 0xdedede);
+        drawString(fontRenderer, i.translateKey("gui.no_minecraft.label.body.3"), width / 2 - 170, (height / 4 - 60) + 60 + 27, 0xdedede);
+        drawString(fontRenderer, i.translateKey("gui.no_minecraft.label.body.4"), width / 2 - 170, (height / 4 - 60) + 60 + 45, 0xdedede);
+        drawString(fontRenderer, i.translateKey("gui.no_minecraft.label.body.5"), width / 2 - 170, (height / 4 - 60) + 60 + 54, 0xdedede);
+        super.drawScreen(mouseX, mouseY, partialTick);
+    }
+    @Override
+    protected void buttonPressed(GuiButton button)
+    {
+        if(!button.enabled)
+        {
+            return;
+        }
+        if(button.id == 0)
+        {
+            mc.shutdown();
+        }
+        Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null;
+        if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE))
+        {
+            if (button.id == 1)
+            {
+                try
+                {
+                    desktop.browse(URI.create("https://www.betterthanadventure.net/installation-guide/"));
+                }
+                catch (Exception e)
+                {
+                    e.printStackTrace();
+                }
+            } else if (button.id == 2) {
+                try {
+                    desktop.browse(URI.create("https://betterthanadventure.net/discord"));
+                } catch (Exception e){
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+    @Override
+    public void tick(){
+        ticks += 1;
+    }
+
+    public void drawBackground(float partialTick)
+    {
+        GL11.glDisable(2896 /*GL_LIGHTING*/);
+        GL11.glDisable(2912 /*GL_FOG*/);
+
+        TessellatorStandard tessellator = TessellatorStandard.instance;
+        GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, mc.renderEngine.getTexture("/assets/minecraft/textures/block/netherrack_mossy.png"));
+        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
+        GL11.glEnable(GL11.GL_BLEND);
+
+        // Draw mossy netherrack first
+        float f = 32F;
+        tessellator.startDrawingQuads();
+        tessellator.setColorOpaque_I(0x404040);
+        tessellator.addVertexWithUV(0.0D, height, 0.0D, 0.0D, (float)height / f);
+        tessellator.addVertexWithUV(width, height, 0.0D, (float)width / f, (float)height / f);
+        tessellator.addVertexWithUV(width, 0.0D, 0.0D, (float)width / f, 0);
+        tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0);
+        tessellator.draw();
+
+        GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, mc.renderEngine.getTexture("/assets/minecraft/textures/block/dirt.png"));
+        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0f);
+
+        // Then Draw dirt texture
+        tessellator.startDrawingQuads();
+        tessellator.setColorRGBA_F(64/255f, 64/255f, 64/255f, MathHelper.clamp(1f - ((float)ticks + partialTick)/80000f, 0f, 1f)); // Fade from dirt texture to mossy netherrack in the span of 66.6 minutes :)
+        tessellator.addVertexWithUV(0.0D, height, 0.0D, 0.0D, (float)height / f);
+        tessellator.addVertexWithUV(width, height, 0.0D, (float)width / f, (float)height / f);
+        tessellator.addVertexWithUV(width, 0.0D, 0.0D, (float)width / f, 0);
+        tessellator.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0);
+        tessellator.draw();
+
+        // Then gradient
+        drawGradientRect(0, 0, width, height, 0x22402020, 0xff501010);
+    }
+}
diff --git a/src/main/java/net/minecraft/client/gui/GuiScreen.java b/src/main/java/net/minecraft/client/gui/GuiScreen.java
index 0643984d7..5dcbbab5f 100644
--- a/src/main/java/net/minecraft/client/gui/GuiScreen.java
+++ b/src/main/java/net/minecraft/client/gui/GuiScreen.java
@@ -183,7 +183,7 @@ public class GuiScreen extends Gui
         GL11.glDisable(2896 /*GL_LIGHTING*/);
         GL11.glDisable(2912 /*GL_FOG*/);
         TessellatorStandard tessellator = TessellatorStandard.instance;
-        GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, mc.renderEngine.getTexture("/gui/background.png"));
+        GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/background.png"));
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         float f = 32F;
         tessellator.startDrawingQuads();
@@ -199,7 +199,7 @@ public class GuiScreen extends Gui
     	glDisable(GL_DEPTH_TEST);
     	glEnable(GL_BLEND);
     	glColor3d(1.0, 1.0, 1.0);
-    	glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/gui.png"));
+    	glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/gui.png"));
     	drawTexturedModalRect(mc.controllerInput.cursorX - 8, mc.controllerInput.cursorY - 8, 224, 0, 16, 16, 32, 32);
     	glDisable(GL_BLEND);
     }
diff --git a/src/main/java/net/minecraft/client/gui/GuiSlider.java b/src/main/java/net/minecraft/client/gui/GuiSlider.java
index 8eca290df..1d1fe3308 100644
--- a/src/main/java/net/minecraft/client/gui/GuiSlider.java
+++ b/src/main/java/net/minecraft/client/gui/GuiSlider.java
@@ -58,7 +58,7 @@ public class GuiSlider extends GuiButton {
 		boolean mouseOver = mouseX >= xPosition && mouseY >= yPosition && mouseX < xPosition + width && mouseY < yPosition + height;
 		int state = getButtonState(mouseOver);
 
-		GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/gui.png"));
+		GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/gui.png"));
 		GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
 
 		// Draw background
diff --git a/src/main/java/net/minecraft/client/gui/GuiSliderInteger.java b/src/main/java/net/minecraft/client/gui/GuiSliderInteger.java
index f9f8c4f8f..15796b184 100644
--- a/src/main/java/net/minecraft/client/gui/GuiSliderInteger.java
+++ b/src/main/java/net/minecraft/client/gui/GuiSliderInteger.java
@@ -59,7 +59,7 @@ public class GuiSliderInteger extends GuiButton {
 		boolean mouseOver = mouseX >= xPosition && mouseY >= yPosition && mouseX < xPosition + width && mouseY < yPosition + height;
 		int state = getButtonState(mouseOver);
 
-		GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/gui.png"));
+		GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/gui.png"));
 		GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
 
 		// Draw background
diff --git a/src/main/java/net/minecraft/client/gui/GuiStats.java b/src/main/java/net/minecraft/client/gui/GuiStats.java
index e9c185198..8008afb06 100644
--- a/src/main/java/net/minecraft/client/gui/GuiStats.java
+++ b/src/main/java/net/minecraft/client/gui/GuiStats.java
@@ -114,7 +114,7 @@ public class GuiStats extends GuiScreen
 
     private void func_27136_c(int i, int j, int k, int l)
     {
-        int i1 = mc.renderEngine.getTexture("/gui/slot.png");
+        int i1 = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/slot.png");
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         mc.renderEngine.bindTexture(i1);
         TessellatorStandard tessellator = TessellatorStandard.instance;
diff --git a/src/main/java/net/minecraft/client/gui/GuiSwitchButton.java b/src/main/java/net/minecraft/client/gui/GuiSwitchButton.java
index b18a7db78..17d69129c 100644
--- a/src/main/java/net/minecraft/client/gui/GuiSwitchButton.java
+++ b/src/main/java/net/minecraft/client/gui/GuiSwitchButton.java
@@ -56,7 +56,7 @@ public class GuiSwitchButton
         int state = getButtonState(mouseOver);
         int xBar = on ? width / 3 : 0;
 
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/gui.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/gui.png"));
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
 
         // Draw background
diff --git a/src/main/java/net/minecraft/client/gui/GuiTrommel.java b/src/main/java/net/minecraft/client/gui/GuiTrommel.java
index 5553d6c82..793d0f229 100644
--- a/src/main/java/net/minecraft/client/gui/GuiTrommel.java
+++ b/src/main/java/net/minecraft/client/gui/GuiTrommel.java
@@ -30,7 +30,7 @@ public class GuiTrommel extends GuiContainer
     @Override
 	protected void drawGuiContainerBackgroundLayer(float f)
     {
-        int guiTexture = mc.renderEngine.getTexture("/gui/trommel.png");
+        int guiTexture = mc.renderEngine.getTexture("/assets/minecraft/textures/gui/trommel.png");
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         mc.renderEngine.bindTexture(guiTexture);
         int j = (width - xSize) / 2;
diff --git a/src/main/java/net/minecraft/client/gui/ScrolledSelectionList.java b/src/main/java/net/minecraft/client/gui/ScrolledSelectionList.java
index 62c0c649f..21aed2804 100644
--- a/src/main/java/net/minecraft/client/gui/ScrolledSelectionList.java
+++ b/src/main/java/net/minecraft/client/gui/ScrolledSelectionList.java
@@ -155,7 +155,7 @@ public abstract class ScrolledSelectionList {
         GL11.glDisable(2896 /*GL_LIGHTING*/);
         GL11.glDisable(2912 /*GL_FOG*/);
         TessellatorStandard tessellator = TessellatorStandard.instance;
-        GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, minecraft.renderEngine.getTexture("/gui/background.png"));
+        GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, minecraft.renderEngine.getTexture("/assets/minecraft/textures/gui/background.png"));
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         float f1 = 32F;
         tessellator.startDrawingQuads();
@@ -267,7 +267,7 @@ public abstract class ScrolledSelectionList {
 
     private void renderHoleBackground(int y0, int y1, int a0, int a1) {
         TessellatorStandard tessellator = TessellatorStandard.instance;
-        GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, minecraft.renderEngine.getTexture("/gui/background.png"));
+        GL11.glBindTexture(3553 /*GL_TEXTURE_2D*/, minecraft.renderEngine.getTexture("/assets/minecraft/textures/gui/background.png"));
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
         float f = 32F;
         tessellator.startDrawingQuads();
diff --git a/src/main/java/net/minecraft/client/gui/createworld/ButtonComponent.java b/src/main/java/net/minecraft/client/gui/createworld/ButtonComponent.java
index 56e9743d3..54ea3feee 100644
--- a/src/main/java/net/minecraft/client/gui/createworld/ButtonComponent.java
+++ b/src/main/java/net/minecraft/client/gui/createworld/ButtonComponent.java
@@ -26,7 +26,7 @@ public abstract class ButtonComponent
     public ButtonComponent(String translationKey)
     {
         this.translationKey = translationKey;
-        this.resetButton = new GuiTexturedButton(0, "/gui/gui.png", 0, 0, 40, 86, 20, 20);
+        this.resetButton = new GuiTexturedButton(0, "/assets/minecraft/textures/gui/gui.png", 0, 0, 40, 86, 20, 20);
     }
 
     public abstract void resetValue();
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/GuiGuidebook.java b/src/main/java/net/minecraft/client/gui/guidebook/GuiGuidebook.java
index e3f226f95..847c4ccd3 100644
--- a/src/main/java/net/minecraft/client/gui/guidebook/GuiGuidebook.java
+++ b/src/main/java/net/minecraft/client/gui/guidebook/GuiGuidebook.java
@@ -376,7 +376,7 @@ public class GuiGuidebook
         int left = width / 2 - xSize / 2 + xOffset;
         int right = width / 2 + xSize / 2 + xOffset;
 
-        mc.renderEngine.bindTexture(mc.renderEngine.getTexture("/gui/guidebook/guidebook.png"));
+        mc.renderEngine.bindTexture(mc.renderEngine.getTexture("/assets/minecraft/textures/gui/guidebook/guidebook.png"));
 
         GL11.glColor4f(1, 1, 1, 1);
         if (pageManager.getLeftPage() != null && pageManager.hasPreviousPage()) {
@@ -435,7 +435,7 @@ public class GuiGuidebook
         public void render(RenderEngine re, FontRenderer fr, int mouseX, int mouseY) {
             boolean mouseOver = mouseOver(mouseX, mouseY);
 
-            re.bindTexture(re.getTexture("/gui/guidebook/guidebook.png"));
+            re.bindTexture(re.getTexture("/assets/minecraft/textures/gui/guidebook/guidebook.png"));
 
             int xo = 16;
             if (mouseOver || active) {
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/GuidebookPage.java b/src/main/java/net/minecraft/client/gui/guidebook/GuidebookPage.java
index 587363aef..796332b4e 100644
--- a/src/main/java/net/minecraft/client/gui/guidebook/GuidebookPage.java
+++ b/src/main/java/net/minecraft/client/gui/guidebook/GuidebookPage.java
@@ -21,7 +21,7 @@ public abstract class GuidebookPage
 
     protected void renderBackground(RenderEngine re, int x, int y) {
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
-        re.bindTexture(re.getTexture("/gui/guidebook/guidebook.png"));
+        re.bindTexture(re.getTexture("/assets/minecraft/textures/gui/guidebook/guidebook.png"));
         drawTexturedModalRect(x, y, 0, 0, width, height);
     }
 
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/cover/CoverPage.java b/src/main/java/net/minecraft/client/gui/guidebook/cover/CoverPage.java
index ede4615d5..ee980c743 100644
--- a/src/main/java/net/minecraft/client/gui/guidebook/cover/CoverPage.java
+++ b/src/main/java/net/minecraft/client/gui/guidebook/cover/CoverPage.java
@@ -19,7 +19,7 @@ public class CoverPage
 
     @Override
     public void renderBackground(RenderEngine re, int x, int y) {
-        re.bindTexture(re.getTexture("/gui/guidebook/cover.png"));
+        re.bindTexture(re.getTexture("/assets/minecraft/textures/gui/guidebook/cover.png"));
         drawTexturedModalRect(x, y, 0, 0, 158, 220);
     }
 
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/CraftingPage.java b/src/main/java/net/minecraft/client/gui/guidebook/crafting/CraftingPage.java
index b3679d733..3c5101454 100644
--- a/src/main/java/net/minecraft/client/gui/guidebook/crafting/CraftingPage.java
+++ b/src/main/java/net/minecraft/client/gui/guidebook/crafting/CraftingPage.java
@@ -3,19 +3,22 @@ package net.minecraft.client.gui.guidebook.crafting;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.gui.GuiRenderItem;
 import net.minecraft.client.gui.GuiTooltip;
-import net.minecraft.client.gui.guidebook.*;
+import net.minecraft.client.gui.guidebook.GuiGuidebook;
+import net.minecraft.client.gui.guidebook.GuidebookPage;
+import net.minecraft.client.gui.guidebook.GuidebookSection;
+import net.minecraft.client.gui.guidebook.GuidebookSections;
+import net.minecraft.client.gui.guidebook.PageManager;
+import net.minecraft.client.gui.guidebook.RecipePage;
 import net.minecraft.client.gui.guidebook.search.SearchPage;
-import net.minecraft.core.data.registry.recipe.SearchQuery;
 import net.minecraft.client.render.FontRenderer;
 import net.minecraft.client.render.RenderEngine;
 import net.minecraft.core.achievement.AchievementList;
-import net.minecraft.core.achievement.stat.StatList;
+import net.minecraft.core.data.registry.recipe.RecipeSymbol;
+import net.minecraft.core.data.registry.recipe.SearchQuery;
 import net.minecraft.core.data.registry.recipe.entry.RecipeEntryCrafting;
 import net.minecraft.core.data.registry.recipe.entry.RecipeEntryCraftingShaped;
 import net.minecraft.core.data.registry.recipe.entry.RecipeEntryCraftingShapeless;
-import net.minecraft.core.data.registry.recipe.RecipeSymbol;
 import net.minecraft.core.entity.player.EntityPlayer;
-import net.minecraft.core.player.gamemode.Gamemode;
 import net.minecraft.core.player.inventory.slot.Slot;
 import net.minecraft.core.player.inventory.slot.SlotGuidebook;
 import org.lwjgl.input.Keyboard;
@@ -239,11 +242,11 @@ public class CraftingPage
     @Override
     protected void renderBackground(RenderEngine re, int x, int y) {
         super.renderBackground(re, x, y);
-        re.bindTexture(re.getTexture("/gui/crafting.png"));
+        re.bindTexture(re.getTexture("/assets/minecraft/textures/gui/guidebook/guidebook.png"));
         for (int i = 1; i <= recipes.size(); i++) {
             RecipeEntryCrafting<?, ?> recipe = recipes.get(i-1);
             List<SlotGuidebook> list = map.get(recipe);
-            drawTexturedModalRect(x + list.get(list.size()-1).xDisplayPosition - 25, y +  list.get(list.size()-1).yDisplayPosition, 90, 35, 22, 15);
+            drawTexturedModalRect(x + list.get(list.size()-1).xDisplayPosition - 25, y +  list.get(list.size()-1).yDisplayPosition, 234, 0, 22, 15);
         }
     }
 
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/mobs/MobPage.java b/src/main/java/net/minecraft/client/gui/guidebook/mobs/MobPage.java
index 7765d0baa..cd403ce4d 100644
--- a/src/main/java/net/minecraft/client/gui/guidebook/mobs/MobPage.java
+++ b/src/main/java/net/minecraft/client/gui/guidebook/mobs/MobPage.java
@@ -99,7 +99,7 @@ public class MobPage
     @Override
     protected void renderBackground(RenderEngine re, int x, int y) {
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
-        re.bindTexture(re.getTexture("/gui/guidebook/mob.png"));
+        re.bindTexture(re.getTexture("/assets/minecraft/textures/gui/guidebook/mob.png"));
         drawTexturedModalRect(x, y, 0, 0, 158, 220);
     }
 
@@ -139,7 +139,7 @@ public class MobPage
                         drawStringNoShadow(fr, i18n.translateKey("guidebook.section.mob.health"), x + 66, yOffset, 0x505050);
                         yOffset += 6;
                         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-                        GL11.glBindTexture(GL11.GL_TEXTURE_2D, re.getTexture("/gui/icons.png"));
+                        GL11.glBindTexture(GL11.GL_TEXTURE_2D, re.getTexture("/assets/minecraft/textures/gui/icons.png"));
                         yOffset += 4;
                         drawTexturedModalRect(x + 66, yOffset, 16, 0, 9, 9);
                         drawTexturedModalRect(x + 66, yOffset, 52, 0, 9, 9);
@@ -150,7 +150,7 @@ public class MobPage
                         drawStringNoShadow(fr, i18n.translateKey("guidebook.section.mob.health"), x + 66, yOffset, 0x505050);
                         yOffset += 6;
                         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-                        GL11.glBindTexture(GL11.GL_TEXTURE_2D, re.getTexture("/gui/icons.png"));
+                        GL11.glBindTexture(GL11.GL_TEXTURE_2D, re.getTexture("/assets/minecraft/textures/gui/icons.png"));
                         for (int i = 0; i < mobInfo.getHealth() / 2; i++) {
                             if (i % 10 == 0) {
                                 yOffset += 4;
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/smelting/BlastSmeltingPage.java b/src/main/java/net/minecraft/client/gui/guidebook/smelting/BlastSmeltingPage.java
index ac592bf48..e2fd8bb4c 100644
--- a/src/main/java/net/minecraft/client/gui/guidebook/smelting/BlastSmeltingPage.java
+++ b/src/main/java/net/minecraft/client/gui/guidebook/smelting/BlastSmeltingPage.java
@@ -3,17 +3,20 @@ package net.minecraft.client.gui.guidebook.smelting;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.gui.GuiRenderItem;
 import net.minecraft.client.gui.GuiTooltip;
-import net.minecraft.client.gui.guidebook.*;
+import net.minecraft.client.gui.guidebook.GuiGuidebook;
+import net.minecraft.client.gui.guidebook.GuidebookPage;
+import net.minecraft.client.gui.guidebook.GuidebookSection;
+import net.minecraft.client.gui.guidebook.GuidebookSections;
+import net.minecraft.client.gui.guidebook.PageManager;
+import net.minecraft.client.gui.guidebook.RecipePage;
 import net.minecraft.client.gui.guidebook.search.SearchPage;
-import net.minecraft.core.data.registry.recipe.SearchQuery;
 import net.minecraft.client.render.FontRenderer;
 import net.minecraft.client.render.RenderEngine;
 import net.minecraft.core.achievement.AchievementList;
-import net.minecraft.core.achievement.stat.StatList;
-import net.minecraft.core.data.registry.recipe.entry.RecipeEntryBlastFurnace;
 import net.minecraft.core.data.registry.recipe.RecipeSymbol;
+import net.minecraft.core.data.registry.recipe.SearchQuery;
+import net.minecraft.core.data.registry.recipe.entry.RecipeEntryBlastFurnace;
 import net.minecraft.core.entity.player.EntityPlayer;
-import net.minecraft.core.player.gamemode.Gamemode;
 import net.minecraft.core.player.inventory.slot.Slot;
 import net.minecraft.core.player.inventory.slot.SlotGuidebook;
 import org.lwjgl.input.Keyboard;
@@ -121,11 +124,11 @@ public class BlastSmeltingPage
     @Override
     protected void renderBackground(RenderEngine re, int x, int y) {
         super.renderBackground(re, x, y);
-        re.bindTexture(re.getTexture("/gui/crafting.png"));
+        re.bindTexture(re.getTexture("/assets/minecraft/textures/gui/guidebook/guidebook.png"));
         for (int i = 1; i <= recipes.size(); i++) {
             RecipeEntryBlastFurnace recipe = recipes.get(i-1);
             List<SlotGuidebook> list = map.get(recipe);
-            drawTexturedModalRect(x + list.get(list.size()-1).xDisplayPosition - 32, y +  list.get(list.size()-1).yDisplayPosition, 90, 35, 22, 15);
+            drawTexturedModalRect(x + list.get(list.size()-1).xDisplayPosition - 32, y +  list.get(list.size()-1).yDisplayPosition, 234, 0, 22, 15);
         }
     }
 
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/smelting/SmeltingPage.java b/src/main/java/net/minecraft/client/gui/guidebook/smelting/SmeltingPage.java
index e4cb5901b..a767038d4 100644
--- a/src/main/java/net/minecraft/client/gui/guidebook/smelting/SmeltingPage.java
+++ b/src/main/java/net/minecraft/client/gui/guidebook/smelting/SmeltingPage.java
@@ -3,17 +3,20 @@ package net.minecraft.client.gui.guidebook.smelting;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.gui.GuiRenderItem;
 import net.minecraft.client.gui.GuiTooltip;
-import net.minecraft.client.gui.guidebook.*;
+import net.minecraft.client.gui.guidebook.GuiGuidebook;
+import net.minecraft.client.gui.guidebook.GuidebookPage;
+import net.minecraft.client.gui.guidebook.GuidebookSection;
+import net.minecraft.client.gui.guidebook.GuidebookSections;
+import net.minecraft.client.gui.guidebook.PageManager;
+import net.minecraft.client.gui.guidebook.RecipePage;
 import net.minecraft.client.gui.guidebook.search.SearchPage;
-import net.minecraft.core.data.registry.recipe.SearchQuery;
 import net.minecraft.client.render.FontRenderer;
 import net.minecraft.client.render.RenderEngine;
 import net.minecraft.core.achievement.AchievementList;
-import net.minecraft.core.achievement.stat.StatList;
-import net.minecraft.core.data.registry.recipe.entry.RecipeEntryFurnace;
 import net.minecraft.core.data.registry.recipe.RecipeSymbol;
+import net.minecraft.core.data.registry.recipe.SearchQuery;
+import net.minecraft.core.data.registry.recipe.entry.RecipeEntryFurnace;
 import net.minecraft.core.entity.player.EntityPlayer;
-import net.minecraft.core.player.gamemode.Gamemode;
 import net.minecraft.core.player.inventory.slot.Slot;
 import net.minecraft.core.player.inventory.slot.SlotGuidebook;
 import org.lwjgl.input.Keyboard;
@@ -121,11 +124,11 @@ public class SmeltingPage
     @Override
     protected void renderBackground(RenderEngine re, int x, int y) {
         super.renderBackground(re, x, y);
-        re.bindTexture(re.getTexture("/gui/crafting.png"));
+        re.bindTexture(re.getTexture("/assets/minecraft/textures/gui/guidebook/guidebook.png"));
         for (int i = 1; i <= recipes.size(); i++) {
             RecipeEntryFurnace recipe = recipes.get(i-1);
             List<SlotGuidebook> list = map.get(recipe);
-            drawTexturedModalRect(x + list.get(list.size()-1).xDisplayPosition - 32, y +  list.get(list.size()-1).yDisplayPosition, 90, 35, 22, 15);
+            drawTexturedModalRect(x + list.get(list.size()-1).xDisplayPosition - 32, y +  list.get(list.size()-1).yDisplayPosition, 234, 0, 22, 15);
         }
     }
 
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/trommeling/TrommelPage.java b/src/main/java/net/minecraft/client/gui/guidebook/trommeling/TrommelPage.java
index f66625e1f..e8c4dd3ed 100644
--- a/src/main/java/net/minecraft/client/gui/guidebook/trommeling/TrommelPage.java
+++ b/src/main/java/net/minecraft/client/gui/guidebook/trommeling/TrommelPage.java
@@ -3,20 +3,23 @@ package net.minecraft.client.gui.guidebook.trommeling;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.gui.GuiRenderItem;
 import net.minecraft.client.gui.GuiTooltip;
-import net.minecraft.client.gui.guidebook.*;
+import net.minecraft.client.gui.guidebook.GuiGuidebook;
+import net.minecraft.client.gui.guidebook.GuidebookPage;
+import net.minecraft.client.gui.guidebook.GuidebookSection;
+import net.minecraft.client.gui.guidebook.GuidebookSections;
+import net.minecraft.client.gui.guidebook.PageManager;
+import net.minecraft.client.gui.guidebook.RecipePage;
 import net.minecraft.client.gui.guidebook.search.SearchPage;
-import net.minecraft.core.data.registry.recipe.SearchQuery;
 import net.minecraft.client.render.FontRenderer;
 import net.minecraft.client.render.RenderEngine;
 import net.minecraft.core.WeightedRandomBag;
 import net.minecraft.core.WeightedRandomLootObject;
 import net.minecraft.core.achievement.AchievementList;
-import net.minecraft.core.achievement.stat.StatList;
-import net.minecraft.core.data.registry.recipe.entry.RecipeEntryTrommel;
 import net.minecraft.core.data.registry.recipe.RecipeSymbol;
+import net.minecraft.core.data.registry.recipe.SearchQuery;
+import net.minecraft.core.data.registry.recipe.entry.RecipeEntryTrommel;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.item.ItemStack;
-import net.minecraft.core.player.gamemode.Gamemode;
 import net.minecraft.core.player.inventory.slot.Slot;
 import net.minecraft.core.player.inventory.slot.SlotGuidebook;
 import org.lwjgl.input.Keyboard;
@@ -169,11 +172,11 @@ public class TrommelPage
     @Override
     protected void renderBackground(RenderEngine re, int x, int y) {
         super.renderBackground(re, x, y);
-        re.bindTexture(re.getTexture("/gui/crafting.png"));
+        re.bindTexture(re.getTexture("/assets/minecraft/textures/gui/guidebook/guidebook.png"));
         for (int i = 1; i <= recipes.size(); i++) {
             RecipeEntryTrommel recipe = recipes.get(i-1);
             List<SlotGuidebook> list = map.get(recipe);
-            drawTexturedModalRect(x + list.get(list.size()-1).xDisplayPosition + 25, y +  list.get(list.size()-1).yDisplayPosition, 90, 35, 22, 15);
+            drawTexturedModalRect(x + list.get(list.size()-1).xDisplayPosition + 25, y +  list.get(list.size()-1).yDisplayPosition, 234, 0, 22, 15);
         }
     }
 
diff --git a/src/main/java/net/minecraft/client/gui/hud/ArmorBarComponent.java b/src/main/java/net/minecraft/client/gui/hud/ArmorBarComponent.java
index 142c10698..fbf8a40bb 100644
--- a/src/main/java/net/minecraft/client/gui/hud/ArmorBarComponent.java
+++ b/src/main/java/net/minecraft/client/gui/hud/ArmorBarComponent.java
@@ -23,7 +23,7 @@ public class ArmorBarComponent
 
         // Setup rendering
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
         GL11.glDisable(GL11.GL_BLEND);
 
         int armorValue = mc.thePlayer.getPlayerProtectionAmount();
@@ -57,7 +57,7 @@ public class ArmorBarComponent
 
         // Setup rendering
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
         GL11.glDisable(GL11.GL_BLEND);
 
         int armorValue = 11;
diff --git a/src/main/java/net/minecraft/client/gui/hud/CrosshairComponent.java b/src/main/java/net/minecraft/client/gui/hud/CrosshairComponent.java
index a01201c99..f228bde20 100644
--- a/src/main/java/net/minecraft/client/gui/hud/CrosshairComponent.java
+++ b/src/main/java/net/minecraft/client/gui/hud/CrosshairComponent.java
@@ -23,7 +23,7 @@ public class CrosshairComponent
 
         // Setup crosshair texture
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
 
         // Render crosshair
         GL11.glEnable(GL11.GL_BLEND);
@@ -39,7 +39,7 @@ public class CrosshairComponent
 
         // Setup crosshair texture
         GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
 
         // Render crosshair
         gui.drawTexturedModalRect(x, y, 0, 0, 15, 15);
diff --git a/src/main/java/net/minecraft/client/gui/hud/FireBarComponent.java b/src/main/java/net/minecraft/client/gui/hud/FireBarComponent.java
index 0e4c36042..1bfc5d1d9 100644
--- a/src/main/java/net/minecraft/client/gui/hud/FireBarComponent.java
+++ b/src/main/java/net/minecraft/client/gui/hud/FireBarComponent.java
@@ -23,7 +23,7 @@ public class FireBarComponent
 
         // Setup rendering
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
         GL11.glDisable(GL11.GL_BLEND);
 
         float fire = (float) mc.thePlayer.remainingFireTicks / (float) mc.thePlayer.maxFireTicks;
@@ -41,7 +41,7 @@ public class FireBarComponent
 
         // Setup rendering
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
         GL11.glDisable(GL11.GL_BLEND);
 
         int fireBar = 11;
diff --git a/src/main/java/net/minecraft/client/gui/hud/HealthBarComponent.java b/src/main/java/net/minecraft/client/gui/hud/HealthBarComponent.java
index 89016fb6a..ea72f10af 100644
--- a/src/main/java/net/minecraft/client/gui/hud/HealthBarComponent.java
+++ b/src/main/java/net/minecraft/client/gui/hud/HealthBarComponent.java
@@ -30,7 +30,7 @@ public class HealthBarComponent
 
         // Setup rendering
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
         GL11.glDisable(GL11.GL_BLEND);
 
         boolean heartsFlash = (mc.thePlayer.heartsFlashTime / 3) % 2 == 1;
@@ -118,7 +118,7 @@ public class HealthBarComponent
 
         // Setup rendering
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
         GL11.glDisable(GL11.GL_BLEND);
 
         int health = 11;
diff --git a/src/main/java/net/minecraft/client/gui/hud/HotbarComponent.java b/src/main/java/net/minecraft/client/gui/hud/HotbarComponent.java
index 7dae5f901..1fff3afdb 100644
--- a/src/main/java/net/minecraft/client/gui/hud/HotbarComponent.java
+++ b/src/main/java/net/minecraft/client/gui/hud/HotbarComponent.java
@@ -57,7 +57,7 @@ public class HotbarComponent
 
         // Setup hotbar texture
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/gui.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/gui.png"));
 
         // Render hotbar
         gui.drawTexturedModalRect(x + 5, y, 0, 0, 182, 22);
@@ -119,7 +119,7 @@ public class HotbarComponent
 
         // Setup hotbar texture
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/gui.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/gui.png"));
 
         // Render selector
         gui.drawTexturedModalRect((x + 4) + (inv.currentItem % 9) * 20, y - 1, 0, 22, 24, 24);
@@ -132,7 +132,7 @@ public class HotbarComponent
 
         // Setup hotbar texture
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/gui.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/gui.png"));
 
         // Render hotbar
         gui.drawTexturedModalRect(x + 5, y, 0, 0, 182, 22);
diff --git a/src/main/java/net/minecraft/client/gui/hud/OxygenBarComponent.java b/src/main/java/net/minecraft/client/gui/hud/OxygenBarComponent.java
index f5fcd1a91..f1a5542d3 100644
--- a/src/main/java/net/minecraft/client/gui/hud/OxygenBarComponent.java
+++ b/src/main/java/net/minecraft/client/gui/hud/OxygenBarComponent.java
@@ -24,7 +24,7 @@ public class OxygenBarComponent
 
         // Setup rendering
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
         GL11.glDisable(GL11.GL_BLEND);
 
         int numBubbles = (int) Math.ceil(((double) (mc.thePlayer.airSupply - 2) * 10D) / 300D);
@@ -49,7 +49,7 @@ public class OxygenBarComponent
 
         // Setup rendering
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
         GL11.glDisable(GL11.GL_BLEND);
 
         int numBubbles = 5;
diff --git a/src/main/java/net/minecraft/client/gui/hud/RotationLockComponent.java b/src/main/java/net/minecraft/client/gui/hud/RotationLockComponent.java
index 51458fc85..9856d4d73 100644
--- a/src/main/java/net/minecraft/client/gui/hud/RotationLockComponent.java
+++ b/src/main/java/net/minecraft/client/gui/hud/RotationLockComponent.java
@@ -22,7 +22,7 @@ public class RotationLockComponent
     public void render(Minecraft mc, GuiIngame gui, int xSizeScreen, int ySizeScreen, float partialTick) {
         // Setup rendering
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
         GL11.glDisable(GL11.GL_BLEND);
 
         int x = this.getLayout().getComponentX(mc, this, xSizeScreen);
@@ -90,7 +90,7 @@ public class RotationLockComponent
 
         // Setup rendering
         GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Reset color
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/icons.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/icons.png"));
         GL11.glDisable(GL11.GL_BLEND);
 
         int u = mc.gameSettings.rotationOverlayMode.value % 2 == 1 ? 16 : 0;
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/BlockCategory.java b/src/main/java/net/minecraft/client/gui/modelviewer/categories/BlockCategory.java
index d699db98a..022063230 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/BlockCategory.java
+++ b/src/main/java/net/minecraft/client/gui/modelviewer/categories/BlockCategory.java
@@ -16,12 +16,10 @@ import net.minecraft.core.lang.I18n;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.world.chunk.DisplayChunk;
 
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 
 public class BlockCategory extends ModelViewerCategory {
-    public List<GuiButton> buttonBuffer = new ArrayList<>();
     public HashMap<Block, BlockEntry> entryHashMap = new HashMap<>();
     public GuiTextCycle<Integer> blockIdTextField;
     public GuiTextCycle<Integer> blockMetaTextField;
@@ -62,7 +60,6 @@ public class BlockCategory extends ModelViewerCategory {
     @Override
     public void addContextButtons(List<GuiButton> buttonList) {
         GuiButton lastButton = buttonList.get(buttonList.size()-1);
-        buttonBuffer.clear();
 
         modelViewer.buttonNextEntry.enabled = false;
         modelViewer.buttonPrevEntry.enabled = false;
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/ParticleCategory.java b/src/main/java/net/minecraft/client/gui/modelviewer/categories/ParticleCategory.java
index a015ecdc8..49ea7430d 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/ParticleCategory.java
+++ b/src/main/java/net/minecraft/client/gui/modelviewer/categories/ParticleCategory.java
@@ -1,5 +1,6 @@
 package net.minecraft.client.gui.modelviewer.categories;
 
+import net.minecraft.client.entity.fx.ParticleDispatcher;
 import net.minecraft.client.gui.GuiButton;
 import net.minecraft.client.gui.modelviewer.GuiModelViewer;
 import net.minecraft.client.gui.modelviewer.categories.entries.particle.BlockFXEntry;
@@ -14,43 +15,33 @@ import net.minecraft.client.gui.modelviewer.elements.GuiListenerSlider;
 import net.minecraft.core.lang.I18n;
 
 import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public class ParticleCategory extends ModelViewerCategory{
-    public List<ParticleEntry> entries = new ArrayList<>();
+    public Map<String, ParticleEntry> entryMap = new HashMap<>();
+    public List<ParticleEntry> entriesList;
     public double spawnRadius = 0;
     public ParticleEntry currentEntry;
 
     public ParticleCategory(GuiModelViewer modelViewer) {
         super(modelViewer);
         initEntries();
+        entriesList = new ArrayList<>(entryMap.values());
+        entriesList.sort(Comparator.comparing(o -> o.getParticleName(I18n.getInstance())));
     }
     private void initEntries(){
-        entries.add(new BubbleFXEntry());
-        entries.add(new GenericFXEntry("smoke"));
-        entries.add(new NoteFXEntry());
-        entries.add(new GenericFXEntry("portal"));
-        entries.add(new GenericFXEntry("explode"));
-        entries.add(new GenericFXEntry("flame"));
-        entries.add(new GenericFXEntry("blueflame"));
-        entries.add(new GenericFXEntry("soulflame"));
-        entries.add(new GenericFXEntry("lava"));
-        entries.add(new GenericFXEntry("footstep"));
-        entries.add(new GenericFXEntry("splash"));
-        entries.add(new GenericFXEntry("largesmoke"));
-        entries.add(new RedDustFXEntry());
-        entries.add(new ItemFXEntry());
-        entries.add(new BlockFXEntry());
-        entries.add(new GenericFXEntry("snowshovel"));
-        entries.add(new GenericFXEntry("heart"));
-        entries.add(new GenericFXEntry("slimechunk"));
-        entries.add(new GenericFXEntry("fireflyGreen"));
-        entries.add(new GenericFXEntry("fireflyBlue"));
-        entries.add(new GenericFXEntry("fireflyOrange"));
-        entries.add(new GenericFXEntry("fireflyRed"));
-        entries.add(new GenericFXEntry("arrowtrail"));
-        entries.add(new LeafFXEntry());
-        entries.add(new GenericFXEntry("boatbreak"));
+        for (String s : ParticleDispatcher.getInstance().getParticleIds()){
+            entryMap.put(s, new GenericFXEntry(s));
+        }
+        entryMap.put("bubble", new BubbleFXEntry());
+        entryMap.put("note", new NoteFXEntry());
+        entryMap.put("reddust", new RedDustFXEntry());
+        entryMap.put("item", new ItemFXEntry());
+        entryMap.put("block", new BlockFXEntry());
+        entryMap.put("fallingleaf", new LeafFXEntry());
     }
     private void setCurrentEntry(ParticleEntry entry){
         if (currentEntry != null){
@@ -97,7 +88,7 @@ public class ParticleCategory extends ModelViewerCategory{
 
     @Override
     public void cycleCategoryEntry(int offset) {
-        setCurrentEntry(entries.get((entries.indexOf(currentEntry) + entries.size() + offset) % entries.size()));
+        setCurrentEntry(entriesList.get((entriesList.indexOf(currentEntry) + entriesList.size() + offset) % entriesList.size()));
         mc.effectRenderer.clearEffects(mc.theWorld);
         modelViewer.init();
     }
@@ -105,7 +96,7 @@ public class ParticleCategory extends ModelViewerCategory{
     @Override
     public void onOpen() {
         spawnRadius = 0;
-        setCurrentEntry(entries.get(0));
+        setCurrentEntry(entriesList.get(0));
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityWolfEntry.java b/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityWolfEntry.java
index 3cc3a7c9e..0c305b3c3 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityWolfEntry.java
+++ b/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityWolfEntry.java
@@ -59,12 +59,12 @@ public class EntityWolfEntry extends EntityEntry<EntityWolf>{
         GuiListSelectorButton<ArmorMaterial> armor = new GuiListSelectorButton<ArmorMaterial>(-1, - 120, angry.yPosition + 21, 120, 20, I18n.getInstance().translateKey("model.category.entity.wolf.button.armor"), armorMaterials,null) {
             @Override
             public String getNameFromElement(ArmorMaterial element) {
-                return element == null ? "none" : element.name;
+                return element == null ? "none" : element.identifier.toString();
             }
         };
         armor.setActionListener(() -> {
             ArmorMaterial material = armor.getCurrentElement();
-            entityWolf.getEntityData().set(19, material == null ? "" : material.name);
+            entityWolf.getEntityData().set(19, material == null ? "" : material.identifier.toString());
         });
 
         entityWolf.setWolfHeldItem(null);
diff --git a/src/main/java/net/minecraft/client/gui/options/GuiOptions.java b/src/main/java/net/minecraft/client/gui/options/GuiOptions.java
index 18a3e4f5c..a3795479e 100644
--- a/src/main/java/net/minecraft/client/gui/options/GuiOptions.java
+++ b/src/main/java/net/minecraft/client/gui/options/GuiOptions.java
@@ -470,7 +470,7 @@ public class GuiOptions
         if (mc.theWorld == null)
         {
             TessellatorStandard tessellator = TessellatorStandard.instance;
-            GL11.glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/background.png"));
+            GL11.glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/background.png"));
             GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
             float scale = 32F;
             tessellator.startDrawingQuads();
@@ -501,7 +501,7 @@ public class GuiOptions
         if (mc.theWorld == null)
         {
             TessellatorStandard tessellator = TessellatorStandard.instance;
-            GL11.glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/background.png"));
+            GL11.glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/background.png"));
             GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
             float scale = 32F;
             tessellator.startDrawingQuads();
diff --git a/src/main/java/net/minecraft/client/gui/options/components/ButtonComponent.java b/src/main/java/net/minecraft/client/gui/options/components/ButtonComponent.java
index 76e76b2b1..0855d3aef 100644
--- a/src/main/java/net/minecraft/client/gui/options/components/ButtonComponent.java
+++ b/src/main/java/net/minecraft/client/gui/options/components/ButtonComponent.java
@@ -26,7 +26,7 @@ public abstract class ButtonComponent
     public ButtonComponent(String translationKey)
     {
         this.translationKey = translationKey;
-        this.resetButton = new GuiTexturedButton(0, "/gui/gui.png", 0, 0, 40, 86, 20, 20);
+        this.resetButton = new GuiTexturedButton(0, "/assets/minecraft/textures/gui/gui.png", 0, 0, 40, 86, 20, 20);
     }
 
     public abstract void resetValue();
diff --git a/src/main/java/net/minecraft/client/gui/paged/GuiPaged.java b/src/main/java/net/minecraft/client/gui/paged/GuiPaged.java
index 4019bc1a4..d28f1abc4 100644
--- a/src/main/java/net/minecraft/client/gui/paged/GuiPaged.java
+++ b/src/main/java/net/minecraft/client/gui/paged/GuiPaged.java
@@ -427,7 +427,7 @@ public class GuiPaged
         if (mc.theWorld == null)
         {
             TessellatorStandard tessellator = TessellatorStandard.instance;
-            GL11.glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/background.png"));
+            GL11.glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/background.png"));
             GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
             float scale = 32F;
             tessellator.startDrawingQuads();
@@ -458,7 +458,7 @@ public class GuiPaged
         if (mc.theWorld == null)
         {
             TessellatorStandard tessellator = TessellatorStandard.instance;
-            GL11.glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/background.png"));
+            GL11.glBindTexture(GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/background.png"));
             GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
             float scale = 32F;
             tessellator.startDrawingQuads();
diff --git a/src/main/java/net/minecraft/client/gui/popup/GuiPopup.java b/src/main/java/net/minecraft/client/gui/popup/GuiPopup.java
index 985033b8c..18c063e48 100644
--- a/src/main/java/net/minecraft/client/gui/popup/GuiPopup.java
+++ b/src/main/java/net/minecraft/client/gui/popup/GuiPopup.java
@@ -202,7 +202,7 @@ public final class GuiPopup
         GL11.glEnable(GL11.GL_TEXTURE_2D);
         float f = 32F;
         tessellator.startDrawingQuads();
-        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/gui/background.png"));
+        GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.renderEngine.getTexture("/assets/minecraft/textures/gui/background.png"));
         tessellator.setColorOpaque_I(0x404040);
         tessellator.addVertexWithUV(popupX, popupY + popupHeight, 0.0D, 0.0D, (float)popupHeight / f);
         tessellator.addVertexWithUV(popupX + popupWidth, popupY + popupHeight, 0.0D, (float)popupWidth / f, (float)popupHeight / f);
diff --git a/src/main/java/net/minecraft/client/option/enums/TooltipStyle.java b/src/main/java/net/minecraft/client/option/enums/TooltipStyle.java
index 37aeab055..432451967 100644
--- a/src/main/java/net/minecraft/client/option/enums/TooltipStyle.java
+++ b/src/main/java/net/minecraft/client/option/enums/TooltipStyle.java
@@ -28,7 +28,7 @@ public enum TooltipStyle
 
     public String getFilePath()
     {
-        return "/gui/tooltip/" + name + ".png";
+        return "/assets/minecraft/textures/gui/tooltip/" + name + ".png";
     }
 
     public String getTranslationKey()
diff --git a/src/main/java/net/minecraft/client/render/LoadingScreenRenderer.java b/src/main/java/net/minecraft/client/render/LoadingScreenRenderer.java
index be6e8b94d..d0513efb6 100644
--- a/src/main/java/net/minecraft/client/render/LoadingScreenRenderer.java
+++ b/src/main/java/net/minecraft/client/render/LoadingScreenRenderer.java
@@ -25,7 +25,7 @@ public class LoadingScreenRenderer
     private String title = "";
     private long startTime = System.currentTimeMillis();
     private boolean canStop = false;
-    private String backgroundPath = "/gui/background.png";
+    private String backgroundPath = "/assets/minecraft/textures/gui/background.png";
     private int startStackDepth = 0;
     private String tip = "";
 
@@ -110,15 +110,15 @@ public class LoadingScreenRenderer
     {
         if (dimension == Dimension.nether)
         {
-            backgroundPath = "/gui/background-loading-nether.png";
+            backgroundPath = "/assets/minecraft/textures/gui/background-loading-nether.png";
         }
         else if (dimension == Dimension.paradise)
         {
-            backgroundPath = "/gui/background-loading-paradise.png";
+            backgroundPath = "/assets/minecraft/textures/gui/background-loading-paradise.png";
         }
         else
         {
-            backgroundPath = "/gui/background.png";
+            backgroundPath = "/assets/minecraft/textures/gui/background.png";
         }
     }
 
diff --git a/src/main/java/net/minecraft/client/render/RenderEngine.java b/src/main/java/net/minecraft/client/render/RenderEngine.java
index 9c469d4ad..0aaf51545 100644
--- a/src/main/java/net/minecraft/client/render/RenderEngine.java
+++ b/src/main/java/net/minecraft/client/render/RenderEngine.java
@@ -36,8 +36,6 @@ import net.minecraft.client.util.helper.Colors;
 import net.minecraft.client.util.helper.TexturePackJsonHelper;
 import net.minecraft.client.util.helper.Textures;
 import net.minecraft.core.util.helper.Buffer;
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL12;
 
 import java.awt.image.BufferedImage;
 import java.io.IOException;
@@ -211,6 +209,7 @@ public class RenderEngine {
                         String id = TexturePackJsonHelper.getString(animationObject, "id");
 						String name = TexturePackJsonHelper.getString(animationObject, "name");
 
+						if (!TextureRegistry.hasTexture(id)) throw new TexturePackException("Texture id '" + id + "' appears to be invalid!");
 						IconCoordinate texture = TextureRegistry.getTexture(id);
 
 						String texturePath = "/anim/" + name + ".png";
diff --git a/src/main/java/net/minecraft/client/render/RenderGlobal.java b/src/main/java/net/minecraft/client/render/RenderGlobal.java
index 0d21ec3bf..3d5a44b5a 100644
--- a/src/main/java/net/minecraft/client/render/RenderGlobal.java
+++ b/src/main/java/net/minecraft/client/render/RenderGlobal.java
@@ -1,38 +1,11 @@
 package net.minecraft.client.render;
 
-import java.nio.IntBuffer;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Random;
-
-import net.minecraft.client.gui.modelviewer.GuiModelViewer;
-import org.lwjgl.opengl.ARBOcclusionQuery;
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL15;
-
 import net.minecraft.client.GLAllocation;
 import net.minecraft.client.Minecraft;
-import net.minecraft.client.entity.fx.EntityArrowGoldenFX;
-import net.minecraft.client.entity.fx.EntityBubbleFX;
-import net.minecraft.client.entity.fx.EntityDiggingFX;
-import net.minecraft.client.entity.fx.EntityExplodeFX;
-import net.minecraft.client.entity.fx.EntityFireflyFX;
-import net.minecraft.client.entity.fx.EntityFlameFX;
-import net.minecraft.client.entity.fx.EntityFlameFX.Type;
-import net.minecraft.client.entity.fx.EntityFootStepFX;
-import net.minecraft.client.entity.fx.EntityHeartFX;
-import net.minecraft.client.entity.fx.EntityItemFX;
-import net.minecraft.client.entity.fx.EntityLavaFX;
-import net.minecraft.client.entity.fx.EntityLeafFX;
-import net.minecraft.client.entity.fx.EntityNoteFX;
-import net.minecraft.client.entity.fx.EntityPortalFX;
-import net.minecraft.client.entity.fx.EntityReddustFX;
-import net.minecraft.client.entity.fx.EntitySlimeChunkFX;
-import net.minecraft.client.entity.fx.EntitySmokeFX;
-import net.minecraft.client.entity.fx.EntitySnowShovelFX;
-import net.minecraft.client.entity.fx.EntitySplashFX;
+import net.minecraft.client.entity.fx.EntityFX;
+import net.minecraft.client.entity.fx.ParticleDispatcher;
 import net.minecraft.client.gui.GuiPhotoMode;
+import net.minecraft.client.gui.modelviewer.GuiModelViewer;
 import net.minecraft.client.option.enums.RenderDistance;
 import net.minecraft.client.render.block.model.BlockModel;
 import net.minecraft.client.render.block.model.BlockModelDispatcher;
@@ -40,15 +13,14 @@ import net.minecraft.client.render.block.model.BlockModelLeaves;
 import net.minecraft.client.render.camera.EntityCamera;
 import net.minecraft.client.render.camera.ICamera;
 import net.minecraft.client.render.culling.CameraFrustum;
-import net.minecraft.client.render.tessalator.Tessellator;
-import net.minecraft.client.render.tessalator.TessellatorStandard;
 import net.minecraft.client.render.stitcher.IconCoordinate;
 import net.minecraft.client.render.stitcher.TextureRegistry;
+import net.minecraft.client.render.tessalator.Tessellator;
+import net.minecraft.client.render.tessalator.TessellatorStandard;
 import net.minecraft.core.HitResult;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.entity.Entity;
-import net.minecraft.core.entity.animal.EntityFireflyCluster;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.enums.EnumBlockSoundEffectType;
 import net.minecraft.core.item.Item;
@@ -65,6 +37,9 @@ import net.minecraft.core.world.LevelListener;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.season.Seasons;
 import net.minecraft.core.world.weather.Weather;
+import org.lwjgl.opengl.ARBOcclusionQuery;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL15;
 
 import java.nio.IntBuffer;
 import java.util.ArrayList;
@@ -72,10 +47,6 @@ import java.util.Arrays;
 import java.util.List;
 import java.util.Random;
 
-import org.lwjgl.opengl.ARBOcclusionQuery;
-import org.lwjgl.opengl.GL11;
-import org.lwjgl.opengl.GL15;
-
 
 import static org.lwjgl.opengl.GL11.GL_FOG;
 import static org.lwjgl.opengl.GL11.GL_LINES;
@@ -1604,11 +1575,15 @@ public class RenderGlobal
     }
 
     @Override
-	public void playStreamingMusic(String soundPath, int x, int y, int z)
+	public void playStreamingMusic(String soundPath, String author, int x, int y, int z)
     {
         if(soundPath != null)
         {
-            mc.ingameGUI.setRecordPlayingMessage("C418 - " + soundPath);
+            if (author != null && !author.isEmpty()){
+                mc.ingameGUI.setRecordPlayingMessage(author + " - " + soundPath);
+            } else {
+                mc.ingameGUI.setRecordPlayingMessage(soundPath);
+            }
         }
         mc.sndManager.playStreaming(soundPath, x, y, z, 1.0F, 1.0F);
     }
@@ -1649,111 +1624,9 @@ public class RenderGlobal
         {
             return;
         }
-        if(particleId.equals("bubble"))
-        {
-            mc.effectRenderer.addEffect(new EntityBubbleFX(worldObj, x, y, z, motionX, motionY, motionZ, true));
-        }
-        else if(particleId.equals("smoke"))
-        {
-            mc.effectRenderer.addEffect(new EntitySmokeFX(worldObj, x, y, z, motionX, motionY, motionZ));
-        }
-        else if(particleId.equals("note"))
-        {
-            mc.effectRenderer.addEffect(new EntityNoteFX(worldObj, x, y, z, motionX, motionY, motionZ));
-        }
-        else if(particleId.equals("portal"))
-        {
-            mc.effectRenderer.addEffect(new EntityPortalFX(worldObj, x, y, z, motionX, motionY, motionZ));
-        }
-        else if(particleId.equals("explode"))
-        {
-            mc.effectRenderer.addEffect(new EntityExplodeFX(worldObj, x, y, z, motionX, motionY, motionZ));
-        }
-        else if(particleId.equals("flame"))
-        {
-            mc.effectRenderer.addEffect(new EntityFlameFX(worldObj, x, y, z, motionX, motionY, motionZ, Type.ORANGE));
-        }
-        else if(particleId.equals("blueflame"))
-        {
-            mc.effectRenderer.addEffect(new EntityFlameFX(worldObj, x, y, z, motionX, motionY, motionZ, Type.BLUE));
-        }
-        else if(particleId.equals("soulflame"))
-        {
-            mc.effectRenderer.addEffect(new EntityFlameFX(worldObj, x, y, z, motionX, motionY, motionZ, Type.SOUL));
-        }
-        else if(particleId.equals("lava"))
-        {
-            mc.effectRenderer.addEffect(new EntityLavaFX(worldObj, x, y, z));
-        }
-        else if(particleId.equals("footstep"))
-        {
-            mc.effectRenderer.addEffect(new EntityFootStepFX(renderEngine, worldObj, x, y, z));
-        }
-        else if(particleId.equals("splash"))
-        {
-            mc.effectRenderer.addEffect(new EntitySplashFX(worldObj, x, y, z, motionX, motionY, motionZ));
-        }
-        else if(particleId.equals("largesmoke"))
-        {
-            mc.effectRenderer.addEffect(new EntitySmokeFX(worldObj, x, y, z, motionX, motionY, motionZ, 2.5F));
-        }
-        else if(particleId.equals("reddust"))
-        {
-            mc.effectRenderer.addEffect(new EntityReddustFX(worldObj, x, y, z, (float)motionX, (float)motionY, (float)motionZ));
-        }
-        else if(particleId.equals("item"))
-        {
-            mc.effectRenderer.addEffect(new EntityItemFX(worldObj, x, y, z, Item.itemsList[(int) (motionX + 0.001d)]));
-        }
-        else if(particleId.equals("block"))
-        {
-            mc.effectRenderer.addEffect(new EntityDiggingFX(worldObj, x, y, z, 0, 0, 0, Block.blocksList[(int) (motionX + 0.001d)], 0,(int) (motionY + 0.001d) ));
-        }
-        else if(particleId.equals("snowshovel"))
-        {
-            mc.effectRenderer.addEffect(new EntitySnowShovelFX(worldObj, x, y, z, motionX, motionY, motionZ));
-        }
-        else if(particleId.equals("heart"))
-        {
-            mc.effectRenderer.addEffect(new EntityHeartFX(worldObj, x, y, z, motionX, motionY, motionZ));
-        }
-        else if(particleId.equals("slimechunk"))
-        {
-        	if(mc.gameSettings.slimeParticles.value) {
-        		mc.effectRenderer.addEffect(new EntitySlimeChunkFX(worldObj, x, y, z, Item.slimeball));
-        	}
-        }
-        else if(particleId.equals("fireflyGreen"))
-        {
-            mc.effectRenderer.addEffect(new EntityFireflyFX(worldObj, x, y, z, motionX, motionY, motionZ, 2.5F, EntityFireflyCluster.FireflyColor.GREEN.getId()));
-        }
-        else if(particleId.equals("fireflyBlue"))
-        {
-            mc.effectRenderer.addEffect(new EntityFireflyFX(worldObj, x, y, z, motionX, motionY, motionZ, 2.5F, EntityFireflyCluster.FireflyColor.BLUE.getId()));
-        }
-        else if(particleId.equals("fireflyOrange"))
-        {
-            mc.effectRenderer.addEffect(new EntityFireflyFX(worldObj, x, y, z, motionX, motionY, motionZ, 2.5F, EntityFireflyCluster.FireflyColor.ORANGE.getId()));
-        }
-        else if(particleId.equals("fireflyRed"))
-        {
-            mc.effectRenderer.addEffect(new EntityFireflyFX(worldObj, x, y, z, motionX, motionY, motionZ, 2.5F, EntityFireflyCluster.FireflyColor.RED.getId()));
-        }
-        else if(particleId.equals("arrowtrail"))
-        {
-        	mc.effectRenderer.addEffect(new EntityArrowGoldenFX(worldObj, x, y, z, motionX, motionY, motionZ));
-        }
-        else if(particleId.equals("fallingleaf"))
-        {
-        	int id = worldObj.getBlockId((int)x, (int)y, (int)z);
-        	if (id != 0)
-        	{
-        		mc.effectRenderer.addEffect(new EntityLeafFX(worldObj, x, y, z, motionX, motionY, motionZ).func_4041_a((int)x, (int)y, (int)z));
-        	}
-        }
-        else if (particleId.equals("boatbreak"))
-        {
-            mc.effectRenderer.addEffect(new EntityDiggingFX(worldObj, x, y, z, motionX, motionY, motionZ, Block.planksOak, 0,0));
+        EntityFX fx = ParticleDispatcher.getInstance().getDispatch(particleId).newParticle(worldObj, x, y, z, motionX, motionY, motionZ);
+        if (fx != null){
+            mc.effectRenderer.addEffect(fx);
         }
     }
     
@@ -1855,10 +1728,11 @@ public class RenderGlobal
         case 1005: // Jukebox play/stop record
             if(Item.itemsList[data] instanceof ItemRecord)
             {
-                worldObj.playRecord(((ItemRecord)Item.itemsList[data]).recordName, x, y, z);
+                ItemRecord record = ((ItemRecord)Item.itemsList[data]);
+                worldObj.playRecord(record.recordName, record.recordAuthor, x, y, z);
             } else
             {
-                worldObj.playRecord(null, x, y, z);
+                worldObj.playRecord(null, null, x, y, z);
             }
             break;
         case 1006: // Piston extend
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 dad6f9dc5..c248b49e6 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
@@ -298,6 +298,7 @@ public class BlockModelDispatcher
         addDispatch(new BlockModelTrapDoor<>(Block.trapdoorPlanksOak).withTextures("minecraft:block/trapdoor_planks_oak_top", "minecraft:block/trapdoor_planks_oak_side"));
         addDispatch(new BlockModelTrapDoor<>(Block.trapdoorIron).withTextures("minecraft:block/trapdoor_iron_top", "minecraft:block/trapdoor_iron_side"));
         addDispatch(new BlockModelTrapDoor<>(Block.trapdoorGlass).withTextures("minecraft:block/glass", "minecraft:block/trapdoor_glass_side"));
+        addDispatch(new BlockModelTrapDoor<>(Block.trapdoorGlassTinted).withTextures("minecraft:block/glass_tinted", "minecraft:block/trapdoor_glass_tinted_side"));
         addDispatch(new BlockModelTrapDoorPainted<>(Block.trapdoorPlanksOakPainted));
 
         addDispatch(new BlockModelStandard<>(Block.tnt).withTextures("minecraft:block/tnt_top", "minecraft:block/tnt_bottom", "minecraft:block/tnt_side"));
@@ -310,6 +311,8 @@ public class BlockModelDispatcher
         addDispatch(new BlockModelDoorPainted<>(Block.doorPlanksOakPaintedTop, true).withTextures("minecraft:block/trapdoor_planks_oak_top", "minecraft:block/door_planks_oak_top"));
         addDispatch(new BlockModelDoorGlass<>(Block.doorGlassBottom).withTextures("minecraft:block/glass", "minecraft:block/door_glass_bottom"));
         addDispatch(new BlockModelDoorGlass<>(Block.doorGlassTop).withTextures("minecraft:block/glass", "minecraft:block/door_glass_top"));
+        addDispatch(new BlockModelDoorGlass<>(Block.doorGlassTintedBottom).withTextures("minecraft:block/glass_tinted", "minecraft:block/door_glass_tinted_bottom"));
+        addDispatch(new BlockModelDoorGlass<>(Block.doorGlassTintedTop).withTextures("minecraft:block/glass_tinted", "minecraft:block/door_glass_tinted_top"));
 
         addDispatch(new BlockModelTransparent<>(Block.mesh, true).withTextures("minecraft:block/mesh"));
         addDispatch(new BlockModelTransparent<>(Block.meshGold, true).withTextures("minecraft:block/mesh_gold"));
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java
index 4d1034b65..4ffaf1152 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java
+++ b/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java
@@ -4,6 +4,7 @@ import net.minecraft.client.render.tessalator.Tessellator;
 import net.minecraft.client.render.LightmapHelper;
 import net.minecraft.client.render.stitcher.IconCoordinate;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.Vec3d;
 
@@ -16,8 +17,8 @@ public class BlockModelLever<T extends Block> extends BlockModelStandard<T>{
     public boolean render(Tessellator tessellator, int x, int y, int z) {
         block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int l = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
-        int i1 = l & 7;
-        boolean flag = (l & 8) > 0;
+        int i1 = l & 15;
+        boolean flag = (l & 16) > 0;
         boolean flag1 = renderBlocks.overrideBlockTexture != null;
         if(!flag1)
         {
@@ -26,27 +27,28 @@ public class BlockModelLever<T extends Block> extends BlockModelStandard<T>{
         float f = 0.25F;
         float f1 = 0.1875F;
         float f2 = 0.1875F;
-        if(i1 == 5)
+        if(i1 == 7)
+        {
+            block.setBlockBounds(0.5F - f1, 1f - f2, 0.5F - f, 0.5F + f1, 1f, 0.5F + f);
+        } else if(i1 == 8)
+        {
+            block.setBlockBounds(0.5F - f, 1f - f2, 0.5F - f1, 0.5F + f, 1f, 0.5F + f1);
+        } else if(i1 == 5)
         {
             block.setBlockBounds(0.5F - f1, 0.0F, 0.5F - f, 0.5F + f1, f2, 0.5F + f);
-        } else
-        if(i1 == 6)
+        } else if(i1 == 6)
         {
             block.setBlockBounds(0.5F - f, 0.0F, 0.5F - f1, 0.5F + f, f2, 0.5F + f1);
-        } else
-        if(i1 == 4)
+        } else if(i1 == 4)
         {
             block.setBlockBounds(0.5F - f1, 0.5F - f, 1.0F - f2, 0.5F + f1, 0.5F + f, 1.0F);
-        } else
-        if(i1 == 3)
+        } else if(i1 == 3)
         {
             block.setBlockBounds(0.5F - f1, 0.5F - f, 0.0F, 0.5F + f1, 0.5F + f, f2);
-        } else
-        if(i1 == 2)
+        } else if(i1 == 2)
         {
             block.setBlockBounds(1.0F - f2, 0.5F - f, 0.5F - f1, 1.0F, 0.5F + f, 0.5F + f1);
-        } else
-        if(i1 == 1)
+        } else if(i1 == 1)
         {
             block.setBlockBounds(0.0F, 0.5F - f, 0.5F - f1, f2, 0.5F + f, 0.5F + f1);
         }
@@ -99,38 +101,43 @@ public class BlockModelLever<T extends Block> extends BlockModelStandard<T>{
                 avec3d[i2].zCoord += 0.0625D;
                 avec3d[i2].rotateAroundX(-0.6981317F);
             }
-            if(i1 == 6)
+            if(i1 == 6 || i1 == 8)
             {
-                avec3d[i2].rotateAroundY(1.570796F);
+                avec3d[i2].rotateAroundY(MathHelper.PI/2f);
             }
             if(i1 < 5)
             {
                 avec3d[i2].yCoord -= 0.375D;
-                avec3d[i2].rotateAroundX(1.570796F);
+                avec3d[i2].rotateAroundX(MathHelper.PI/2f);
                 if(i1 == 4)
                 {
                     avec3d[i2].rotateAroundY(0.0F);
                 }
                 if(i1 == 3)
                 {
-                    avec3d[i2].rotateAroundY(3.141593F);
+                    avec3d[i2].rotateAroundY(MathHelper.PI);
                 }
                 if(i1 == 2)
                 {
-                    avec3d[i2].rotateAroundY(1.570796F);
+                    avec3d[i2].rotateAroundY(MathHelper.PI/2f);
                 }
                 if(i1 == 1)
                 {
-                    avec3d[i2].rotateAroundY(-1.570796F);
+                    avec3d[i2].rotateAroundY(-MathHelper.PI/2f);
                 }
                 avec3d[i2].xCoord += (double)x + 0.5D;
                 avec3d[i2].yCoord += (float)y + 0.5F;
                 avec3d[i2].zCoord += (double)z + 0.5D;
-            } else
+            } else if (i1 == 5 || i1 == 6)
             {
                 avec3d[i2].xCoord += (double)x + 0.5D;
                 avec3d[i2].yCoord += (float)y + 0.125F;
                 avec3d[i2].zCoord += (double)z + 0.5D;
+            } else {
+                avec3d[i2].rotateAroundX(MathHelper.PI);
+                avec3d[i2].xCoord += (double)x + 0.5D;
+                avec3d[i2].yCoord += (float)(y + 1) - 0.125F;
+                avec3d[i2].zCoord += (double)z + 0.5D;
             }
         }
 
diff --git a/src/main/java/net/minecraft/client/render/canvas/CanvasMojangLogo.java b/src/main/java/net/minecraft/client/render/canvas/CanvasMojangLogo.java
index f66040ded..05aee87a8 100644
--- a/src/main/java/net/minecraft/client/render/canvas/CanvasMojangLogo.java
+++ b/src/main/java/net/minecraft/client/render/canvas/CanvasMojangLogo.java
@@ -17,7 +17,7 @@ public class CanvasMojangLogo extends Canvas
     {
         try
         {
-            logo = ImageIO.read((PanelCrashReport.class).getResource("/gui/logo.png"));
+            logo = ImageIO.read((PanelCrashReport.class).getResource("/assets/minecraft/textures/gui/logo.png"));
         }
         catch(IOException ioexception) { }
         byte byte0 = 100;
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCustom.java b/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCustom.java
index 3d2c8f200..2995f22ed 100644
--- a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCustom.java
+++ b/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCustom.java
@@ -1,10 +1,6 @@
 package net.minecraft.client.render.dynamictexture;
 
-import java.awt.image.BufferedImage;
-import java.util.Random;
-
 import com.b100.json.element.JsonObject;
-
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.render.stitcher.IconCoordinate;
 import net.minecraft.client.render.texturepack.TexturePack;
@@ -12,6 +8,9 @@ import net.minecraft.client.render.texturepack.TexturePackException;
 import net.minecraft.client.util.helper.TexturePackJsonHelper;
 import net.minecraft.client.util.helper.Textures;
 
+import java.awt.image.BufferedImage;
+import java.util.Random;
+
 public class DynamicTextureCustom extends DynamicTexture{
 	
 	private static Random rand = new Random();
diff --git a/src/main/java/net/minecraft/client/render/entity/ArrowRenderer.java b/src/main/java/net/minecraft/client/render/entity/ArrowRenderer.java
index 6cf990707..6c6bd7ace 100644
--- a/src/main/java/net/minecraft/client/render/entity/ArrowRenderer.java
+++ b/src/main/java/net/minecraft/client/render/entity/ArrowRenderer.java
@@ -12,7 +12,7 @@ public class ArrowRenderer extends EntityRenderer<EntityArrow>
     public void renderArrow(EntityArrow arrow, double x, double y, double z,
                             float yaw, float partialTick)
     {
-        loadTexture("/item/arrows.png");
+        loadTexture("/assets/minecraft/textures/entity/arrows.png");
         GL11.glPushMatrix();
         GL11.glTranslatef((float)x, (float)y, (float)z);
         GL11.glRotatef((arrow.yRotO + (arrow.yRot - arrow.yRotO) * partialTick) - 90F, 0.0F, 1.0F, 0.0F);
diff --git a/src/main/java/net/minecraft/client/render/entity/CannonballRenderer.java b/src/main/java/net/minecraft/client/render/entity/CannonballRenderer.java
index 8ab12c68d..f50f2e07b 100644
--- a/src/main/java/net/minecraft/client/render/entity/CannonballRenderer.java
+++ b/src/main/java/net/minecraft/client/render/entity/CannonballRenderer.java
@@ -24,7 +24,7 @@ public class CannonballRenderer extends EntityRenderer<EntityCannonball>
         GL11.glPushMatrix();
         GL11.glTranslatef((float)d, (float)d1, (float)d2);
         GL11.glRotatef(180F - f, 0.0F, 1.0F, 0.0F);
-        loadTexture("/item/cannonball.png");
+        loadTexture("/assets/minecraft/textures/entity/cannonball.png");
         GL11.glScalef(-1F, -1F, 1.0F);
         modelCannonball.render(0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.03125F);
         GL11.glPopMatrix();
diff --git a/src/main/java/net/minecraft/client/render/entity/PaintingRenderer.java b/src/main/java/net/minecraft/client/render/entity/PaintingRenderer.java
index d922e676c..127aa1642 100644
--- a/src/main/java/net/minecraft/client/render/entity/PaintingRenderer.java
+++ b/src/main/java/net/minecraft/client/render/entity/PaintingRenderer.java
@@ -1,8 +1,5 @@
 package net.minecraft.client.render.entity;
 
-import java.util.Random;
-
-import net.minecraft.client.Minecraft;
 import net.minecraft.client.render.stitcher.IconCoordinate;
 import net.minecraft.client.render.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessalator.Tessellator;
@@ -11,10 +8,13 @@ import net.minecraft.core.Global;
 import net.minecraft.core.entity.EntityPainting;
 import net.minecraft.core.enums.ArtType;
 import net.minecraft.core.item.ItemStack;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.MathHelper;
 import org.lwjgl.opengl.GL11;
 import org.lwjgl.opengl.GL12;
 
+import java.util.Random;
+
 public class PaintingRenderer extends EntityRenderer<EntityPainting>
 {
     private static final IconCoordinate paintingBack = TextureRegistry.getTexture("minecraft:art/backing");
@@ -146,7 +146,8 @@ public class PaintingRenderer extends EntityRenderer<EntityPainting>
             GL11.glEnable(GL11.GL_BLEND);
             GL11.glBlendFunc(770, 771);
             GL11.glColor4f(1f, 1f, 1f, 1f);
-            loadTexture(EntityPainting.getBorder(borderStack));
+            NamespaceID id = EntityPainting.getBorder(borderStack);
+            loadTexture(String.format("/assets/%s/textures/art/borders/%s.png", id.namespace, id.value));
             renderBorder(entity, entity.art.sizeX, entity.art.sizeY);
             GL11.glDisable(GL11.GL_BLEND);
         }
diff --git a/src/main/java/net/minecraft/client/render/entity/PigRenderer.java b/src/main/java/net/minecraft/client/render/entity/PigRenderer.java
index fc9df826e..1006165b7 100644
--- a/src/main/java/net/minecraft/client/render/entity/PigRenderer.java
+++ b/src/main/java/net/minecraft/client/render/entity/PigRenderer.java
@@ -18,7 +18,7 @@ public class PigRenderer extends LivingRenderer<EntityPig>
 
     protected boolean renderSaddledPig(EntityPig entity, int i, float f)
     {
-        loadTexture("/mob/saddle.png");
+        loadTexture("/assets/minecraft/textures/entity/saddle.png");
         return i == 0 && entity != null && entity.getSaddled();
     }
 
diff --git a/src/main/java/net/minecraft/client/render/entity/PlayerRenderer.java b/src/main/java/net/minecraft/client/render/entity/PlayerRenderer.java
index 7d9717daf..231e97e1e 100644
--- a/src/main/java/net/minecraft/client/render/entity/PlayerRenderer.java
+++ b/src/main/java/net/minecraft/client/render/entity/PlayerRenderer.java
@@ -50,7 +50,7 @@ public class PlayerRenderer extends LivingRenderer<EntityPlayer>
             Item item = itemstack.getItem();
             if(item instanceof ItemQuiver)
             {
-                loadTexture("/armor/quiver.png");
+                loadTexture("/assets/minecraft/textures/armor/quiver.png");
                 ModelBiped modelbiped = modelArmorChestplate;
                 modelbiped.bipedBody.showModel = renderPass == 1 || renderPass == 2;
                 setRenderPassModel(modelbiped);
@@ -58,7 +58,7 @@ public class PlayerRenderer extends LivingRenderer<EntityPlayer>
             }
             if(item instanceof ItemQuiverEndless)
             {
-                loadTexture("/armor/quiver_golden.png");
+                loadTexture("/assets/minecraft/textures/armor/quiver_golden.png");
                 ModelBiped modelbiped = modelArmorChestplate;
                 modelbiped.bipedBody.showModel = renderPass == 1 || renderPass == 2;
                 setRenderPassModel(modelbiped);
@@ -66,7 +66,7 @@ public class PlayerRenderer extends LivingRenderer<EntityPlayer>
             }
             if(item == Item.armorBootsIceskates)
             {
-                loadTexture("/armor/skates.png");
+                loadTexture("/assets/minecraft/textures/armor/skates.png");
                 ModelBiped modelbiped = modelArmorChestplate;
                 modelbiped.bipedRightLeg.showModel = renderPass == 2 || renderPass == 3;
                 modelbiped.bipedLeftLeg.showModel = renderPass == 2 || renderPass == 3;
@@ -76,7 +76,7 @@ public class PlayerRenderer extends LivingRenderer<EntityPlayer>
             if(item instanceof ItemArmor)
             {
                 ItemArmor itemarmor = (ItemArmor)item;
-                loadTexture("/armor/"+itemarmor.material.name+"_"+(renderPass != 2 ? 1 : 2)+".png");
+                loadTexture(String.format("/assets/%s/textures/armor/%s_%d.png", itemarmor.material.identifier.namespace, itemarmor.material.identifier.value, (renderPass != 2 ? 1 : 2)));
                 ModelBiped modelbiped = renderPass != 2 ? modelArmorChestplate : modelArmor;
                 modelbiped.bipedHead.showModel = renderPass == 0;
                 modelbiped.bipedHeadOverlay.showModel = renderPass == 0;
diff --git a/src/main/java/net/minecraft/client/render/entity/SheepRenderer.java b/src/main/java/net/minecraft/client/render/entity/SheepRenderer.java
index 7d5359f1f..495bcad9f 100644
--- a/src/main/java/net/minecraft/client/render/entity/SheepRenderer.java
+++ b/src/main/java/net/minecraft/client/render/entity/SheepRenderer.java
@@ -16,14 +16,14 @@ public class SheepRenderer extends LivingRenderer<EntitySheep>
     {
         super(body, f);
         setRenderPassModel(wool);
-        setOverlayModel(overlay, "/mob/sheep_overlay.png");
+        setOverlayModel(overlay, "/assets/minecraft/textures/entity/sheep_overlay.png");
     }
 
     protected boolean setWoolColorAndRender(EntitySheep entitysheep, int i, float f)
     {
         if(i == 0 && !entitysheep.getSheared())
         {
-            loadTexture("/mob/sheep_fur.png");
+            loadTexture("/assets/minecraft/textures/entity/sheep_fur.png");
             float brightness = 1.0f;
             if(LightmapHelper.isLightmapEnabled() || Global.accessor.isFullbrightEnabled()) {
             	
diff --git a/src/main/java/net/minecraft/client/render/entity/SpiderRenderer.java b/src/main/java/net/minecraft/client/render/entity/SpiderRenderer.java
index c764fa89b..67517ddd6 100644
--- a/src/main/java/net/minecraft/client/render/entity/SpiderRenderer.java
+++ b/src/main/java/net/minecraft/client/render/entity/SpiderRenderer.java
@@ -14,8 +14,8 @@ public class SpiderRenderer extends LivingRenderer<EntitySpider>
 
     public SpiderRenderer()
     {
-        super(new ModelSpider(), 1.0F);
-        setRenderPassModel(new ModelSpider());
+        super(new ModelSpider(0), 1.0F);
+        setRenderPassModel(new ModelSpider(0.01f));
     }
 
     protected float setSpiderDeathMaxRotation(EntitySpider spider)
@@ -23,11 +23,12 @@ public class SpiderRenderer extends LivingRenderer<EntitySpider>
         return 180F;
     }
 
-    protected boolean setSpiderEyeBrightness(EntitySpider spider, int i, float f)
+    protected boolean setSpiderEyeBrightness(EntitySpider spider, int renderPass, float partialTick)
     {
-        if(i == 0)
+        if(renderPass == 0)
         {
-            loadTexture("/mob/spider_eyes.png");
+            boolean useVariants = Minecraft.getMinecraft(this).gameSettings.mobVariants.value;
+            loadTexture("/assets/minecraft/textures/entity/spider/eyes/" + (useVariants ? spider.getSkinVariant() : 0) + ".png");
             float brightness = spider.getBrightness(1.0f);
             if (Global.accessor.isFullbrightEnabled()) brightness = 1.0f;
             float f1 = (1.0F - brightness) * 0.5F;
diff --git a/src/main/java/net/minecraft/client/render/entity/WolfRenderer.java b/src/main/java/net/minecraft/client/render/entity/WolfRenderer.java
index dc79d6443..fae8fea94 100644
--- a/src/main/java/net/minecraft/client/render/entity/WolfRenderer.java
+++ b/src/main/java/net/minecraft/client/render/entity/WolfRenderer.java
@@ -28,7 +28,7 @@ public class WolfRenderer extends LivingRenderer<EntityWolf>
         if (material == null) {
             return false;
         }
-        loadTexture("/armor/wolf/" + material.name.toLowerCase() + ".png");
+        loadTexture(String.format("/assets/%s/textures/armor/wolf/%s.png", material.identifier.namespace, material.identifier.value));
         setRenderPassModel(modelArmor);
         return true;
     }
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java b/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
index 3bc301f0e..2c35b8392 100644
--- a/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
+++ b/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
@@ -113,6 +113,7 @@ public class ItemModelDispatcher extends Dispatcher<Item, ItemModel> {
         addDispatch(new ItemModelStandard(Item.sign, "minecraft"));
         addDispatch(new ItemModelStandard(Item.doorOak, "minecraft"));
         addDispatch(new ItemModelStandard(Item.doorGlass, "minecraft"));
+        addDispatch(new ItemModelStandard(Item.doorGlassTinted, "minecraft"));
         addDispatch(new ItemModelDoorPainted(Item.doorOakPainted));
         addDispatch(new ItemModelStandard(Item.bucket, "minecraft"));
         addDispatch(new ItemModelStandard(Item.bucketWater, "minecraft"));
diff --git a/src/main/java/net/minecraft/client/render/model/ModelSpider.java b/src/main/java/net/minecraft/client/render/model/ModelSpider.java
index bf5ba0546..c685d7ca3 100644
--- a/src/main/java/net/minecraft/client/render/model/ModelSpider.java
+++ b/src/main/java/net/minecraft/client/render/model/ModelSpider.java
@@ -9,42 +9,41 @@ import net.minecraft.core.util.helper.MathHelper;
 public class ModelSpider extends ModelBase
 {
 
-    public ModelSpider()
+    public ModelSpider(float expandAmount)
     {
-        float f = 0.0F;
         int i = 15;
         spiderHead = new Cube(32, 4);
-        spiderHead.addBox(-4F, -4F, -8F, 8, 8, 8, f);
+        spiderHead.addBox(-4F, -4F, -8F, 8, 8, 8, expandAmount);
         spiderHead.setRotationPoint(0.0F, 0 + i, -3F);
         spiderNeck = new Cube(0, 0);
-        spiderNeck.addBox(-3F, -3F, -3F, 6, 6, 6, f);
+        spiderNeck.addBox(-3F, -3F, -3F, 6, 6, 6, expandAmount);
         spiderNeck.setRotationPoint(0.0F, i, 0.0F);
         spiderBody = new Cube(0, 12);
-        spiderBody.addBox(-5F, -4F, -6F, 10, 8, 12, f);
+        spiderBody.addBox(-5F, -4F, -6F, 10, 8, 12, expandAmount);
         spiderBody.setRotationPoint(0.0F, 0 + i, 9F);
         spiderLeg1 = new Cube(18, 0);
-        spiderLeg1.addBox(-15F, -1F, -1F, 16, 2, 2, f);
+        spiderLeg1.addBox(-15F, -1F, -1F, 16, 2, 2, expandAmount);
         spiderLeg1.setRotationPoint(-4F, 0 + i, 2.0F);
         spiderLeg2 = new Cube(18, 0);
-        spiderLeg2.addBox(-1F, -1F, -1F, 16, 2, 2, f);
+        spiderLeg2.addBox(-1F, -1F, -1F, 16, 2, 2, expandAmount);
         spiderLeg2.setRotationPoint(4F, 0 + i, 2.0F);
         spiderLeg3 = new Cube(18, 0);
-        spiderLeg3.addBox(-15F, -1F, -1F, 16, 2, 2, f);
+        spiderLeg3.addBox(-15F, -1F, -1F, 16, 2, 2, expandAmount);
         spiderLeg3.setRotationPoint(-4F, 0 + i, 1.0F);
         spiderLeg4 = new Cube(18, 0);
-        spiderLeg4.addBox(-1F, -1F, -1F, 16, 2, 2, f);
+        spiderLeg4.addBox(-1F, -1F, -1F, 16, 2, 2, expandAmount);
         spiderLeg4.setRotationPoint(4F, 0 + i, 1.0F);
         spiderLeg5 = new Cube(18, 0);
-        spiderLeg5.addBox(-15F, -1F, -1F, 16, 2, 2, f);
+        spiderLeg5.addBox(-15F, -1F, -1F, 16, 2, 2, expandAmount);
         spiderLeg5.setRotationPoint(-4F, 0 + i, 0.0F);
         spiderLeg6 = new Cube(18, 0);
-        spiderLeg6.addBox(-1F, -1F, -1F, 16, 2, 2, f);
+        spiderLeg6.addBox(-1F, -1F, -1F, 16, 2, 2, expandAmount);
         spiderLeg6.setRotationPoint(4F, 0 + i, 0.0F);
         spiderLeg7 = new Cube(18, 0);
-        spiderLeg7.addBox(-15F, -1F, -1F, 16, 2, 2, f);
+        spiderLeg7.addBox(-15F, -1F, -1F, 16, 2, 2, expandAmount);
         spiderLeg7.setRotationPoint(-4F, 0 + i, -1F);
         spiderLeg8 = new Cube(18, 0);
-        spiderLeg8.addBox(-1F, -1F, -1F, 16, 2, 2, f);
+        spiderLeg8.addBox(-1F, -1F, -1F, 16, 2, 2, expandAmount);
         spiderLeg8.setRotationPoint(4F, 0 + i, -1F);
     }
 
diff --git a/src/main/java/net/minecraft/client/render/stitcher/TextureRegistry.java b/src/main/java/net/minecraft/client/render/stitcher/TextureRegistry.java
index 100726206..2fe4a0519 100644
--- a/src/main/java/net/minecraft/client/render/stitcher/TextureRegistry.java
+++ b/src/main/java/net/minecraft/client/render/stitcher/TextureRegistry.java
@@ -34,6 +34,18 @@ public class TextureRegistry {
 
         return atlas.getTexture(split1[0] + ":" + split2[1]);
     }
+    public static Boolean hasTexture(String key){
+        if (key == null) return null;
+
+        String[] split1 = key.split(":");
+        if (split1.length != 2) throw new IllegalArgumentException("Key '" + key + "' is improperly formatted! should follow the scheme 'key:atlas/id'");
+
+        String[] split2 = split1[1].split("/", 2);
+        AtlasStitcher atlas = stitcherMap.get(split2[0]);
+        if (atlas == null) throw new IllegalArgumentException("Failed to find atlas '" + split2[0] + "'!");
+
+        return atlas.textureMap.containsKey(split1[0] + ":" + split2[1]);
+    }
     public static AtlasStitcher register(String id, AtlasStitcher atlas){
         stitcherMap.put(id, atlas);
         return atlas;
diff --git a/src/main/java/net/minecraft/client/render/texturepack/TexturePackCustom.java b/src/main/java/net/minecraft/client/render/texturepack/TexturePackCustom.java
index d70e2a7d8..1a3774c65 100644
--- a/src/main/java/net/minecraft/client/render/texturepack/TexturePackCustom.java
+++ b/src/main/java/net/minecraft/client/render/texturepack/TexturePackCustom.java
@@ -190,7 +190,7 @@ public class TexturePackCustom extends TexturePack
             minecraft.renderEngine.bindTexture(thumbnailImage);
         } else
         {
-            GL11.glBindTexture(GL11.GL_TEXTURE_2D, minecraft.renderEngine.getTexture("/gui/unknown_pack.png"));
+            GL11.glBindTexture(GL11.GL_TEXTURE_2D, minecraft.renderEngine.getTexture("/assets/minecraft/textures/gui/unknown_pack.png"));
         }
     }
 
diff --git a/src/main/java/net/minecraft/client/render/texturepack/TexturePackDefault.java b/src/main/java/net/minecraft/client/render/texturepack/TexturePackDefault.java
index b7e0c3cef..58749dd1f 100644
--- a/src/main/java/net/minecraft/client/render/texturepack/TexturePackDefault.java
+++ b/src/main/java/net/minecraft/client/render/texturepack/TexturePackDefault.java
@@ -52,7 +52,7 @@ public class TexturePackDefault extends TexturePack
         }
         else
         {
-            GL11.glBindTexture(GL11.GL_TEXTURE_2D, minecraft.renderEngine.getTexture("/gui/unknown_pack.png"));
+            GL11.glBindTexture(GL11.GL_TEXTURE_2D, minecraft.renderEngine.getTexture("/assets/minecraft/textures/gui/unknown_pack.png"));
         }
     }
 
diff --git a/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererFlag.java b/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererFlag.java
index 958efc0d4..dbcd6f4d4 100644
--- a/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererFlag.java
+++ b/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererFlag.java
@@ -54,7 +54,7 @@ public class TileEntityRendererFlag extends TileEntityRenderer<TileEntityFlag>
         final float scale = 1F;
         GL11.glTranslatef((float) x + 0.5F, (float) y + 0.75F * scale, (float) z + 0.5F);
         GL11.glScalef(scale, -scale, -scale);
-        loadTexture("/item/flag.png");
+        loadTexture("/assets/minecraft/textures/entity/flag.png");
         if (shortPole)
         {
             flagModel.renderPoleShort();
diff --git a/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java b/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java
index 4f8801ad8..c98681103 100644
--- a/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java
+++ b/src/main/java/net/minecraft/client/render/tileentity/TileEntityRendererSign.java
@@ -77,7 +77,7 @@ public class TileEntityRendererSign extends TileEntityRenderer<TileEntitySign>
         GL11.glNormal3f(0.0F, 0.0F, -1F * f4);
         GL11.glDepthMask(false);
         EnumSignPicture picture = tileEntity.getPicture();
-        renderDispatcher.renderEngine.bindTexture(renderDispatcher.renderEngine.getTexture("/gui/sign_images.png"));
+        renderDispatcher.renderEngine.bindTexture(renderDispatcher.renderEngine.getTexture("/assets/minecraft/textures/gui/sign_images.png"));
         drawTexturedModalRect(-48, -24, picture.getU(), picture.getV(), 48, 24);
         GL11.glPopMatrix();
         
diff --git a/src/main/java/net/minecraft/core/block/Block.java b/src/main/java/net/minecraft/core/block/Block.java
index de85fed6c..334b525cb 100644
--- a/src/main/java/net/minecraft/core/block/Block.java
+++ b/src/main/java/net/minecraft/core/block/Block.java
@@ -1219,6 +1219,8 @@ public class Block
             .withTags(BlockTags.MINEABLE_BY_PICKAXE);
     public static final Block trapdoorPlanksOakPainted = new BlockTrapDoorPainted("trapdoor.planks.oak.painted", 573, Material.wood).withHardness(3F).withDisabledStats().withDisabledNeighborNotifyOnMetadataChange()
             .withTags(BlockTags.MINEABLE_BY_AXE);
+    public static final Block trapdoorGlassTinted = new BlockTrapDoorTinted("trapdoor.glass.tinted", 574, Material.glass, false).withHardness(0.3F).withDisabledStats().withDisabledNeighborNotifyOnMetadataChange()
+            .withTags(BlockTags.MINEABLE_BY_PICKAXE);
 
     public static final Block tnt = new BlockTNT("tnt", 580).withHardness(0.0F);
 
@@ -1238,6 +1240,10 @@ public class Block
             .withTags(BlockTags.NOT_IN_CREATIVE_MENU, BlockTags.MINEABLE_BY_PICKAXE);
     public static final Block doorGlassTop = new BlockDoorGlass("door.glass.top", 597, Material.glass, true).withHardness(0.3F).withDisabledStats().withDisabledNeighborNotifyOnMetadataChange()
             .withTags(BlockTags.NOT_IN_CREATIVE_MENU, BlockTags.MINEABLE_BY_PICKAXE);
+    public static final Block doorGlassTintedBottom = new BlockDoorGlassTinted("door.glass.tinted.bottom", 598, Material.glass, false).withHardness(0.3F).withDisabledStats().withDisabledNeighborNotifyOnMetadataChange()
+            .withTags(BlockTags.NOT_IN_CREATIVE_MENU, BlockTags.MINEABLE_BY_PICKAXE);
+    public static final Block doorGlassTintedTop = new BlockDoorGlassTinted("door.glass.tinted.top", 599, Material.glass, true).withHardness(0.3F).withDisabledStats().withDisabledNeighborNotifyOnMetadataChange()
+            .withTags(BlockTags.NOT_IN_CREATIVE_MENU, BlockTags.MINEABLE_BY_PICKAXE);
 
     public static final Block mesh = new BlockMesh("mesh", 600).withHardness(1.5F)
             .withTags(BlockTags.MINEABLE_BY_PICKAXE, BlockTags.CAN_HANG_OFF);
diff --git a/src/main/java/net/minecraft/core/block/BlockButton.java b/src/main/java/net/minecraft/core/block/BlockButton.java
index 7f06a83a9..79f0052fc 100644
--- a/src/main/java/net/minecraft/core/block/BlockButton.java
+++ b/src/main/java/net/minecraft/core/block/BlockButton.java
@@ -1,7 +1,5 @@
 package net.minecraft.core.block;
 
-import java.util.Random;
-
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.entity.EntityLiving;
 import net.minecraft.core.entity.player.EntityPlayer;
@@ -9,8 +7,10 @@ import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.sound.SoundCategory;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.phys.AABB;
-import net.minecraft.core.world.WorldSource;
 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, IBlockAccess, 
@@ -52,7 +52,13 @@ public class BlockButton extends Block
     @Override
     public boolean canPlaceBlockOnSide(World world, int x, int y, int z, int side)
     {
-        if(side == 2 && world.isBlockNormalCube(x, y, z + 1))
+        if (side == 0 && world.isBlockNormalCube(x, y + 1, z)){
+            return true;
+        }
+        else if (side == 1 && world.isBlockNormalCube(x, y - 1, z)){
+            return true;
+        }
+        else if(side == 2 && world.isBlockNormalCube(x, y, z + 1))
         {
             return true;
         }
@@ -70,6 +76,14 @@ public class BlockButton extends Block
     @Override
 	public boolean canPlaceBlockAt(World world, int x, int y, int z)
     {
+        if(world.isBlockNormalCube(x, y - 1, z))
+        {
+            return true;
+        }
+        if(world.isBlockNormalCube(x, y + 1, z))
+        {
+            return true;
+        }
         if(world.isBlockNormalCube(x - 1, y, z))
         {
             return true;
@@ -87,47 +101,51 @@ public class BlockButton extends Block
     
     @Override
     public void onBlockPlaced(World world, int x, int y, int z, Side side, EntityLiving entity, double sideHeight) {
-    	int l = side.getId();
         int i1 = world.getBlockMetadata(x, y, z);
         int j1 = i1 & 8;
         i1 &= 7;
-        if(l == 2 && world.isBlockNormalCube(x, y, z + 1))
-        {
+        if(side == Side.BOTTOM && world.isBlockNormalCube(x, y + 1, z)) {
+            i1 = 5;
+        } else if(side == Side.TOP && world.isBlockNormalCube(x, y - 1, z)) {
+            i1 = 6;
+        } else if(side == Side.NORTH && world.isBlockNormalCube(x, y, z + 1)) {
             i1 = 4;
-        } else
-        if(l == 3 && world.isBlockNormalCube(x, y, z - 1))
-        {
+        } else if(side == Side.SOUTH && world.isBlockNormalCube(x, y, z - 1)) {
             i1 = 3;
-        } else
-        if(l == 4 && world.isBlockNormalCube(x + 1, y, z))
-        {
+        } else if(side == Side.WEST && world.isBlockNormalCube(x + 1, y, z)) {
             i1 = 2;
-        } else
-        if(l == 5 && world.isBlockNormalCube(x - 1, y, z))
-        {
+        } else if(side == Side.EAST && world.isBlockNormalCube(x - 1, y, z)) {
             i1 = 1;
-        } else
-        {
+        } else {
             i1 = getOrientation(world, x, y, z);
         }
         world.setBlockMetadataWithNotify(x, y, z, i1 + j1);
     }
     
-    private int getOrientation(World world, int i, int j, int k)
+    private int getOrientation(World world, int x, int y, int z)
     {
-        if(world.isBlockNormalCube(i - 1, j, k))
+        if(world.isBlockNormalCube(x - 1, y, z))
         {
             return 1;
         }
-        if(world.isBlockNormalCube(i + 1, j, k))
+        if(world.isBlockNormalCube(x + 1, y, z))
         {
             return 2;
         }
-        if(world.isBlockNormalCube(i, j, k - 1))
+        if(world.isBlockNormalCube(x, y, z - 1))
         {
             return 3;
         }
-        return !world.isBlockNormalCube(i, j, k + 1) ? 1 : 4;
+        if (world.isBlockNormalCube(x, y, z + 1)){
+            return 4;
+        }
+        if (world.isBlockNormalCube(x, y + 1, z)){
+            return 5;
+        }
+        if (world.isBlockNormalCube(x, y - 1, z)){
+            return 6;
+        }
+        return 1;
     }
 
     @Override
@@ -153,6 +171,14 @@ public class BlockButton extends Block
             {
                 flag = true;
             }
+            if(!world.isBlockNormalCube(x, y + 1, z) && i1 == 5)
+            {
+                flag = true;
+            }
+            if(!world.isBlockNormalCube(x, y - 1, z) && i1 == 6)
+            {
+                flag = true;
+            }
             if(flag)
             {
                 dropBlockWithCause(world, EnumDropCause.WORLD, x, y, z, i1, null);
@@ -189,21 +215,18 @@ public class BlockButton extends Block
         {
             f3 = 0.0625F;
         }
-        if(i1 == 1)
-        {
+        if(i1 == 1) {
             setBlockBounds(0.0F, f, 0.5F - f2, f3, f1, 0.5F + f2);
-        } else
-        if(i1 == 2)
-        {
+        } else if(i1 == 2) {
             setBlockBounds(1.0F - f3, f, 0.5F - f2, 1.0F, f1, 0.5F + f2);
-        } else
-        if(i1 == 3)
-        {
+        } else if(i1 == 3) {
             setBlockBounds(0.5F - f2, f, 0.0F, 0.5F + f2, f1, f3);
-        } else
-        if(i1 == 4)
-        {
+        } else if(i1 == 4) {
             setBlockBounds(0.5F - f2, f, 1.0F - f3, 0.5F + f2, f1, 1.0F);
+        } else if(i1 == 5) { // Top
+            setBlockBounds(0.5f - f2, 1 - f3, f, 0.5f + f2, 1.0, f1);
+        } else if(i1 == 6) { // Bottom
+            setBlockBounds(0.5f - f2, 0, f, 0.5f + f2, f3, f1);
         }
     }
 
@@ -229,23 +252,17 @@ public class BlockButton extends Block
         world.markBlocksDirty(x, y, z, x, y, z);
         world.playSoundEffect(player, SoundCategory.WORLD_SOUNDS, (double) x + 0.5D, (double) y + 0.5D, (double) z + 0.5D, "random.click", 0.3F, 0.6F);
         world.notifyBlocksOfNeighborChange(x, y, z, id);
-        if(i1 == 1)
-        {
+        if(i1 == 1) {
             world.notifyBlocksOfNeighborChange(x - 1, y, z, id);
-        } else
-        if(i1 == 2)
-        {
+        } else if(i1 == 2) {
             world.notifyBlocksOfNeighborChange(x + 1, y, z, id);
-        } else
-        if(i1 == 3)
-        {
+        } else if(i1 == 3) {
             world.notifyBlocksOfNeighborChange(x, y, z - 1, id);
-        } else
-        if(i1 == 4)
-        {
+        } else if(i1 == 4) {
             world.notifyBlocksOfNeighborChange(x, y, z + 1, id);
-        } else
-        {
+        } else if(i1 == 5) {
+            world.notifyBlocksOfNeighborChange(x, y + 1, z, id);
+        } else {
             world.notifyBlocksOfNeighborChange(x, y - 1, z, id);
         }
         world.scheduleBlockUpdate(x, y, z, id, tickRate());
@@ -259,23 +276,17 @@ public class BlockButton extends Block
         {
             world.notifyBlocksOfNeighborChange(x, y, z, id);
             int i1 = data & 7;
-            if(i1 == 1)
-            {
+            if(i1 == 1) {
                 world.notifyBlocksOfNeighborChange(x - 1, y, z, id);
-            } else
-            if(i1 == 2)
-            {
+            } else if(i1 == 2) {
                 world.notifyBlocksOfNeighborChange(x + 1, y, z, id);
-            } else
-            if(i1 == 3)
-            {
+            } else if(i1 == 3) {
                 world.notifyBlocksOfNeighborChange(x, y, z - 1, id);
-            } else
-            if(i1 == 4)
-            {
+            } else if(i1 == 4) {
                 world.notifyBlocksOfNeighborChange(x, y, z + 1, id);
-            } else
-            {
+            } else if(i1 == 5) {
+                world.notifyBlocksOfNeighborChange(x, y + 1, z, id);
+            } else {
                 world.notifyBlocksOfNeighborChange(x, y - 1, z, id);
             }
         }
@@ -297,7 +308,11 @@ public class BlockButton extends Block
             return false;
         }
         int j1 = i1 & 7;
-        if(j1 == 5 && side == 1)
+        if(j1 == 6 && side == 1)
+        {
+            return true;
+        }
+        if(j1 == 5 && side == 0)
         {
             return true;
         }
@@ -337,25 +352,20 @@ public class BlockButton extends Block
         world.setBlockMetadataWithNotify(x, y, z, l & 7);
         world.notifyBlocksOfNeighborChange(x, y, z, id);
         int i1 = l & 7;
-        if(i1 == 1)
-        {
+        if(i1 == 1) {
             world.notifyBlocksOfNeighborChange(x - 1, y, z, id);
-        } else
-        if(i1 == 2)
-        {
+        } else if(i1 == 2) {
             world.notifyBlocksOfNeighborChange(x + 1, y, z, id);
-        } else
-        if(i1 == 3)
-        {
+        } else if(i1 == 3) {
             world.notifyBlocksOfNeighborChange(x, y, z - 1, id);
-        } else
-        if(i1 == 4)
-        {
+        } else if(i1 == 4) {
             world.notifyBlocksOfNeighborChange(x, y, z + 1, id);
-        } else
-        {
+        } else if(i1 == 5) {
+            world.notifyBlocksOfNeighborChange(x, y + 1, z, id);
+        } else {
             world.notifyBlocksOfNeighborChange(x, y - 1, z, id);
         }
+
         world.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, (double) x + 0.5D, (double) y + 0.5D, (double) z + 0.5D, "random.click", 0.3F, 0.5F);
         world.markBlocksDirty(x, y, z, x, y, z);
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockDoorGlassTinted.java b/src/main/java/net/minecraft/core/block/BlockDoorGlassTinted.java
new file mode 100644
index 000000000..f010dde7f
--- /dev/null
+++ b/src/main/java/net/minecraft/core/block/BlockDoorGlassTinted.java
@@ -0,0 +1,30 @@
+package net.minecraft.core.block;
+
+import net.minecraft.core.block.entity.TileEntity;
+import net.minecraft.core.block.material.Material;
+import net.minecraft.core.enums.EnumDropCause;
+import net.minecraft.core.item.Item;
+import net.minecraft.core.item.ItemStack;
+import net.minecraft.core.world.World;
+
+public class BlockDoorGlassTinted extends BlockDoorGlass{
+    public BlockDoorGlassTinted(String key, int id, Material material, boolean isTop) {
+        super(key, id, material, isTop);
+    }
+    @Override
+    public boolean blocksLight()
+    {
+        return true;
+    }
+
+    @Override
+    public int getRenderBlockPass()
+    {
+        return 1;
+    }
+    @Override
+    public ItemStack[] getBreakResult(World world, EnumDropCause dropCause, int x, int y, int z, int meta, TileEntity tileEntity)
+    {
+        return new ItemStack[] { new ItemStack(Item.doorGlassTinted) };
+    }
+}
diff --git a/src/main/java/net/minecraft/core/block/BlockJukeBox.java b/src/main/java/net/minecraft/core/block/BlockJukeBox.java
index 67fa6eb09..4ecbe18b0 100644
--- a/src/main/java/net/minecraft/core/block/BlockJukeBox.java
+++ b/src/main/java/net/minecraft/core/block/BlockJukeBox.java
@@ -53,14 +53,14 @@ public class BlockJukeBox extends BlockTileEntity
         int l = tileentityrecordplayer.record;
         if (l != 0) {
             world.playSoundEffect(1005, i, j, k, 0);
-            world.playRecord(null, i, j, k);
+            world.playRecord(null, null, i, j, k);
             tileentityrecordplayer.record = 0;
             tileentityrecordplayer.onInventoryChanged();
             world.setBlockMetadataWithNotify(i, j, k, 0);
             int i1 = l;
             float f = 0.7F;
             double d = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
-            double d1 = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.20000000000000001D + 0.59999999999999998D;
+            double d1 = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.2D + 0.6D;
             double d2 = (double) (world.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D;
             EntityItem entityitem = new EntityItem(world, (double) i + d, (double) j + d1, (double) k + d2, new ItemStack(i1, 1, 0));
             entityitem.delayBeforeCanPickup = 10;
diff --git a/src/main/java/net/minecraft/core/block/BlockLever.java b/src/main/java/net/minecraft/core/block/BlockLever.java
index 7333aa2eb..c0dc45b1f 100644
--- a/src/main/java/net/minecraft/core/block/BlockLever.java
+++ b/src/main/java/net/minecraft/core/block/BlockLever.java
@@ -44,22 +44,11 @@ public class BlockLever extends Block
     @Override
     public boolean canPlaceBlockOnSide(World world, int x, int y, int z, int side)
     {
-        if(side == 1 && world.canPlaceOnSurfaceOfBlock(x, y - 1, z))
-        {
-            return true;
-        }
-        if(side == 2 && world.isBlockNormalCube(x, y, z + 1))
-        {
-            return true;
-        }
-        if(side == 3 && world.isBlockNormalCube(x, y, z - 1))
-        {
-            return true;
-        }
-        if(side == 4 && world.isBlockNormalCube(x + 1, y, z))
-        {
-            return true;
-        }
+        if (side == 0 && world.isBlockNormalCube(x, y + 1, z)){return true;}
+        if(side == 1 && world.canPlaceOnSurfaceOfBlock(x, y - 1, z)) {return true;}
+        if(side == 2 && world.isBlockNormalCube(x, y, z + 1)) {return true;}
+        if(side == 3 && world.isBlockNormalCube(x, y, z - 1)) {return true;}
+        if(side == 4 && world.isBlockNormalCube(x + 1, y, z)) {return true;}
         return side == 5 && world.isBlockNormalCube(x - 1, y, z);
     }
 
@@ -67,49 +56,41 @@ public class BlockLever extends Block
     @Override
 	public boolean canPlaceBlockAt(World world, int x, int y, int z)
     {
-        if(world.isBlockNormalCube(x - 1, y, z))
-        {
-            return true;
-        }
-        if(world.isBlockNormalCube(x + 1, y, z))
-        {
-            return true;
-        }
-        if(world.isBlockNormalCube(x, y, z - 1))
-        {
-            return true;
-        }
-        if(world.isBlockNormalCube(x, y, z + 1))
-        {
-            return true;
-        }
+        if(world.isBlockNormalCube(x - 1, y, z)) {return true;}
+        if(world.isBlockNormalCube(x + 1, y, z)) {return true;}
+        if(world.isBlockNormalCube(x, y, z - 1)) {return true;}
+        if(world.isBlockNormalCube(x, y, z + 1)) {return true;}
+        if (world.isBlockNormalCube(x, y + 1, z)) return true;
         return world.canPlaceOnSurfaceOfBlock(x, y - 1, z);
     }
     
     @Override
     public void onBlockPlaced(World world, int x, int y, int z, Side side, EntityLiving entity, double sideHeight) {
-    	int l = side.getId();
         int i1 = world.getBlockMetadata(x, y, z);
-        int j1 = i1 & 8;
-        i1 &= 7;
+        int j1 = i1 & 16;
+        i1 &= 15;
         i1 = -1;
-        if(l == 1 && world.canPlaceOnSurfaceOfBlock(x, y - 1, z))
+        if(side == Side.BOTTOM && world.canPlaceOnSurfaceOfBlock(x, y + 1, z))
+        {
+            i1 = 7 + (entity.getHorizontalPlacementDirection(side).getAxis() == Axis.Z ? 1 : 0);
+        }
+        if(side == Side.TOP && world.canPlaceOnSurfaceOfBlock(x, y - 1, z))
         {
             i1 = 5 + (entity.getHorizontalPlacementDirection(side).getAxis() == Axis.Z ? 1 : 0);
         }
-        if(l == 2 && world.isBlockNormalCube(x, y, z + 1))
+        if(side == Side.NORTH && world.isBlockNormalCube(x, y, z + 1))
         {
             i1 = 4;
         }
-        if(l == 3 && world.isBlockNormalCube(x, y, z - 1))
+        if(side == Side.SOUTH && world.isBlockNormalCube(x, y, z - 1))
         {
             i1 = 3;
         }
-        if(l == 4 && world.isBlockNormalCube(x + 1, y, z))
+        if(side == Side.WEST && world.isBlockNormalCube(x + 1, y, z))
         {
             i1 = 2;
         }
-        if(l == 5 && world.isBlockNormalCube(x - 1, y, z))
+        if(side == Side.EAST && world.isBlockNormalCube(x - 1, y, z))
         {
             i1 = 1;
         }
@@ -128,7 +109,7 @@ public class BlockLever extends Block
     {
         if(checkIfAttachedToBlock(world, x, y, z))
         {
-            int i1 = world.getBlockMetadata(x, y, z) & 7;
+            int i1 = world.getBlockMetadata(x, y, z) & 15;
             boolean flag = false;
             if(!world.isBlockNormalCube(x - 1, y, z) && i1 == 1)
             {
@@ -154,6 +135,14 @@ public class BlockLever extends Block
             {
                 flag = true;
             }
+            if(!world.canPlaceOnSurfaceOfBlock(x, y + 1, z) && i1 == 7)
+            {
+                flag = true;
+            }
+            if(!world.canPlaceOnSurfaceOfBlock(x, y + 1, z) && i1 == 8)
+            {
+                flag = true;
+            }
             if(flag)
             {
                 dropBlockWithCause(world, EnumDropCause.WORLD, x, y, z, world.getBlockMetadata(x, y, z), null);
@@ -178,27 +167,22 @@ public class BlockLever extends Block
     @Override
     public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
     {
-        int l = world.getBlockMetadata(x, y, z) & 7;
+        int l = world.getBlockMetadata(x, y, z) & 15;
         float f = 0.1875F;
-        if(l == 1)
-        {
+        if(l == 1) {
             setBlockBounds(0.0F, 0.2F, 0.5F - f, f * 2.0F, 0.8F, 0.5F + f);
-        } else
-        if(l == 2)
-        {
+        } else if(l == 2) {
             setBlockBounds(1.0F - f * 2.0F, 0.2F, 0.5F - f, 1.0F, 0.8F, 0.5F + f);
-        } else
-        if(l == 3)
-        {
+        } else if(l == 3) {
             setBlockBounds(0.5F - f, 0.2F, 0.0F, 0.5F + f, 0.8F, f * 2.0F);
-        } else
-        if(l == 4)
-        {
+        } else if(l == 4) {
             setBlockBounds(0.5F - f, 0.2F, 1.0F - f * 2.0F, 0.5F + f, 0.8F, 1.0F);
-        } else
-        {
+        } else if (l == 5 || l == 6) {
             float f1 = 0.25F;
             setBlockBounds(0.5F - f1, 0.0F, 0.5F - f1, 0.5F + f1, 0.6F, 0.5F + f1);
+        } else {
+            float f1 = 0.25F;
+            setBlockBounds(0.5F - f1, 0.4, 0.5F - f1, 0.5F + f1, 1F, 0.5F + f1);
         }
     }
 
@@ -214,30 +198,24 @@ public class BlockLever extends Block
     public boolean blockActivated(World world, int x, int y, int z, EntityPlayer player)
     {
         int l = world.getBlockMetadata(x, y, z);
-        int i1 = l & 7;
-        int j1 = 8 - (l & 8);
+        int i1 = l & 15;
+        int j1 = 16 - (l & 16);
         world.setBlockMetadataWithNotify(x, y, z, i1 + j1);
         world.markBlocksDirty(x, y, z, x, y, z);
         world.playSoundEffect(player, SoundCategory.WORLD_SOUNDS, (double) x + 0.5D, (double) y + 0.5D, (double) z + 0.5D, "random.click", 0.3F, j1 <= 0 ? 0.5F : 0.6F);
         world.notifyBlocksOfNeighborChange(x, y, z, id);
-        if(i1 == 1)
-        {
+        if(i1 == 1) {
             world.notifyBlocksOfNeighborChange(x - 1, y, z, id);
-        } else
-        if(i1 == 2)
-        {
+        } else if(i1 == 2) {
             world.notifyBlocksOfNeighborChange(x + 1, y, z, id);
-        } else
-        if(i1 == 3)
-        {
+        } else if(i1 == 3) {
             world.notifyBlocksOfNeighborChange(x, y, z - 1, id);
-        } else
-        if(i1 == 4)
-        {
+        } else if(i1 == 4) {
             world.notifyBlocksOfNeighborChange(x, y, z + 1, id);
-        } else
-        {
+        } else if (i1 == 5 || i1 == 6){
             world.notifyBlocksOfNeighborChange(x, y - 1, z, id);
+        } else {
+            world.notifyBlocksOfNeighborChange(x, y + 1, z, id);
         }
         return true;
     }
@@ -245,28 +223,22 @@ public class BlockLever extends Block
     @Override
     public void onBlockRemoved(World world, int x, int y, int z, int data)
     {
-        if((data & 8) > 0)
+        if((data & 16) > 0)
         {
             world.notifyBlocksOfNeighborChange(x, y, z, id);
-            int i1 = data & 7;
-            if(i1 == 1)
-            {
+            int i1 = data & 15;
+            if(i1 == 1) {
                 world.notifyBlocksOfNeighborChange(x - 1, y, z, id);
-            } else
-            if(i1 == 2)
-            {
+            } else if(i1 == 2) {
                 world.notifyBlocksOfNeighborChange(x + 1, y, z, id);
-            } else
-            if(i1 == 3)
-            {
+            } else if(i1 == 3) {
                 world.notifyBlocksOfNeighborChange(x, y, z - 1, id);
-            } else
-            if(i1 == 4)
-            {
+            } else if(i1 == 4) {
                 world.notifyBlocksOfNeighborChange(x, y, z + 1, id);
-            } else
-            {
+            } else if (i1 == 5 || i1 == 6){
                 world.notifyBlocksOfNeighborChange(x, y - 1, z, id);
+            } else {
+                world.notifyBlocksOfNeighborChange(x, y + 1, z, id);
             }
         }
         super.onBlockRemoved(world, x, y, z, data);
@@ -275,18 +247,26 @@ public class BlockLever extends Block
     @Override
     public boolean isPoweringTo(WorldSource blockAccess, int x, int y, int z, int side)
     {
-        return (blockAccess.getBlockMetadata(x, y, z) & 8) > 0;
+        return (blockAccess.getBlockMetadata(x, y, z) & 16) > 0;
     }
 
     @Override
     public boolean isIndirectlyPoweringTo(World world, int x, int y, int z, int side)
     {
         int i1 = world.getBlockMetadata(x, y, z);
-        if((i1 & 8) == 0)
+        if((i1 & 16) == 0)
         {
             return false;
         }
-        int j1 = i1 & 7;
+        int j1 = i1 & 15;
+        if(j1 == 8 && side == 0)
+        {
+            return true;
+        }
+        if(j1 == 7 && side == 0)
+        {
+            return true;
+        }
         if(j1 == 6 && side == 1)
         {
             return true;
diff --git a/src/main/java/net/minecraft/core/block/BlockTrapDoorTinted.java b/src/main/java/net/minecraft/core/block/BlockTrapDoorTinted.java
new file mode 100644
index 000000000..c5bca7d7d
--- /dev/null
+++ b/src/main/java/net/minecraft/core/block/BlockTrapDoorTinted.java
@@ -0,0 +1,20 @@
+package net.minecraft.core.block;
+
+import net.minecraft.core.block.material.Material;
+
+public class BlockTrapDoorTinted extends BlockTrapDoor{
+    public BlockTrapDoorTinted(String key, int id, Material material, boolean isIron) {
+        super(key, id, material, isIron);
+    }
+    @Override
+    public boolean blocksLight()
+    {
+        return true;
+    }
+
+    @Override
+    public int getRenderBlockPass()
+    {
+        return 1;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/entity/EntityLiving.java b/src/main/java/net/minecraft/core/entity/EntityLiving.java
index 65ab75554..7c9cca677 100644
--- a/src/main/java/net/minecraft/core/entity/EntityLiving.java
+++ b/src/main/java/net/minecraft/core/entity/EntityLiving.java
@@ -1,12 +1,7 @@
 package net.minecraft.core.entity;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import com.b100.utils.StringUtils;
 import com.mojang.nbt.CompoundTag;
-
 import net.minecraft.core.Global;
 import net.minecraft.core.HitResult;
 import net.minecraft.core.WeightedRandomLootObject;
@@ -20,6 +15,7 @@ import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemFood;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.net.command.TextFormatting;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.DamageType;
 import net.minecraft.core.util.helper.Direction;
 import net.minecraft.core.util.helper.MathHelper;
@@ -29,8 +25,9 @@ import net.minecraft.core.util.phys.Vec3d;
 import net.minecraft.core.world.World;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
-import java.util.Random;
+import java.util.Map;
 
 // Referenced classes of package net.minecraft.src:
 //            Entity, Vec3D, World, Material,
@@ -95,9 +92,8 @@ public abstract class EntityLiving extends Entity
     }
 
     @Override
-	public String getEntityTexture()
-    {
-        return "/mob/" + skinName + "/" + getSkinVariant() + ".png";
+	public String getEntityTexture() {
+        return String.format("/assets/%s/textures/entity/%s/%d.png", textureIdentifier.namespace, textureIdentifier.value, getSkinVariant());
     }
 
     public int getSkinVariant() {
@@ -109,9 +105,8 @@ public abstract class EntityLiving extends Entity
         entityData.set(1, (byte)(MathHelper.clamp(skinVariant, 0, Byte.MAX_VALUE)));
     }
 
-    public String getDefaultEntityTexture()
-    {
-        return "/mob/" + skinName + "/0.png";
+    public String getDefaultEntityTexture() {
+        return String.format("/assets/%s/textures/entity/%s/0.png", textureIdentifier.namespace, textureIdentifier.value);
     }
 
     @Override
@@ -1282,7 +1277,7 @@ public abstract class EntityLiving extends Entity
     protected int numTicksToChaseTarget;
     public String nickname = "";
     public byte chatColor = 0;
-    protected String skinName = "char";
+    protected NamespaceID textureIdentifier = new NamespaceID("minecraft", "char");
     protected float lastStrafe = 0.0f;
     
     public boolean isSkating = false;
diff --git a/src/main/java/net/minecraft/core/entity/EntityPainting.java b/src/main/java/net/minecraft/core/entity/EntityPainting.java
index c3fc62647..da621a032 100644
--- a/src/main/java/net/minecraft/core/entity/EntityPainting.java
+++ b/src/main/java/net/minecraft/core/entity/EntityPainting.java
@@ -7,6 +7,7 @@ import net.minecraft.core.enums.EnumBlockSoundEffectType;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.net.packet.Packet25EntityPainting;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.MathHelper;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.world.World;
@@ -331,22 +332,22 @@ public class EntityPainting extends Entity
             MinecraftServer.getInstance().playerList.sendPacketToAllPlayers(new Packet25EntityPainting(this));
         }
     }
-    private static final HashMap<String, String> borderMaterialMap = new HashMap<>();
-    public static void addBorder(ItemStack stack, String imagePath){
+    private static final HashMap<String, NamespaceID> borderMaterialMap = new HashMap<>();
+    public static void addBorder(ItemStack stack, NamespaceID imagePath){
         borderMaterialMap.put(stack.itemID + "|" + stack.getMetadata(), imagePath);
     }
-    public static String getBorder(ItemStack stack){
+    public static NamespaceID getBorder(ItemStack stack){
         return borderMaterialMap.get(stack.itemID + "|" + stack.getMetadata());
     }
     static {
-        addBorder(Item.ingotIron.getDefaultStack(), "/art/borders/border_iron.png");
-        addBorder(Item.ingotGold.getDefaultStack(), "/art/borders/border_gold.png");
-        addBorder(Item.ingotSteel.getDefaultStack(), "/art/borders/border_steel.png");
-        addBorder(new ItemStack(Item.dye, 1, 4), "/art/borders/border_lapis.png");
-        addBorder(Item.diamond.getDefaultStack(), "/art/borders/border_diamond.png");
-        addBorder(Item.dustRedstone.getDefaultStack(), "/art/borders/border_redstone.png");
-        addBorder(Item.olivine.getDefaultStack(), "/art/borders/border_olivine.png");
-        addBorder(Item.quartz.getDefaultStack(), "/art/borders/border_quartz.png");
+        addBorder(Item.ingotIron.getDefaultStack(), new NamespaceID("minecraft", "border_iron"));
+        addBorder(Item.ingotGold.getDefaultStack(), new NamespaceID("minecraft", "border_gold"));
+        addBorder(Item.ingotSteel.getDefaultStack(), new NamespaceID("minecraft", "border_steel"));
+        addBorder(new ItemStack(Item.dye, 1, 4), new NamespaceID("minecraft", "border_lapis"));
+        addBorder(Item.diamond.getDefaultStack(), new NamespaceID("minecraft", "border_diamond"));
+        addBorder(Item.dustRedstone.getDefaultStack(), new NamespaceID("minecraft", "border_redstone"));
+        addBorder(Item.olivine.getDefaultStack(), new NamespaceID("minecraft", "border_olivine"));
+        addBorder(Item.quartz.getDefaultStack(), new NamespaceID("minecraft", "border_quartz"));
     }
     private int updateCounter;
     public int direction;
diff --git a/src/main/java/net/minecraft/core/entity/animal/EntityChicken.java b/src/main/java/net/minecraft/core/entity/animal/EntityChicken.java
index 4d02a290c..706f9d260 100644
--- a/src/main/java/net/minecraft/core/entity/animal/EntityChicken.java
+++ b/src/main/java/net/minecraft/core/entity/animal/EntityChicken.java
@@ -6,6 +6,7 @@ package net.minecraft.core.entity.animal;
 import net.minecraft.core.WeightedRandomLootObject;
 import net.minecraft.core.item.Item;
 import com.mojang.nbt.CompoundTag;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.world.World;
 
 public class EntityChicken extends EntityAnimal
@@ -18,7 +19,7 @@ public class EntityChicken extends EntityAnimal
         field_752_b = 0.0F;
         destPos = 0.0F;
         field_755_h = 1.0F;
-        skinName = "chicken";
+        textureIdentifier = new NamespaceID("minecraft", "chicken");
         setSize(0.4F, 0.8F);
         timeUntilNextEgg = random.nextInt(6000) + 6000;
         mobDrops.add(new WeightedRandomLootObject(Item.featherChicken.getDefaultStack(), 0, 2));
diff --git a/src/main/java/net/minecraft/core/entity/animal/EntityCow.java b/src/main/java/net/minecraft/core/entity/animal/EntityCow.java
index 2b308b7d6..4878e4d23 100644
--- a/src/main/java/net/minecraft/core/entity/animal/EntityCow.java
+++ b/src/main/java/net/minecraft/core/entity/animal/EntityCow.java
@@ -11,6 +11,7 @@ import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemBucketEmpty;
 import net.minecraft.core.item.ItemStack;
 import com.mojang.nbt.CompoundTag;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.world.World;
 
 public class EntityCow extends EntityAnimal
@@ -19,7 +20,7 @@ public class EntityCow extends EntityAnimal
     public EntityCow(World world)
     {
         super(world);
-        skinName = "cow";
+        textureIdentifier = new NamespaceID("minecraft", "cow");
         setSize(0.9F, 1.3F);
         mobDrops.add(new WeightedRandomLootObject(Item.leather.getDefaultStack(), 1, 5));
     }
diff --git a/src/main/java/net/minecraft/core/entity/animal/EntityPig.java b/src/main/java/net/minecraft/core/entity/animal/EntityPig.java
index 8a5217753..068acdc77 100644
--- a/src/main/java/net/minecraft/core/entity/animal/EntityPig.java
+++ b/src/main/java/net/minecraft/core/entity/animal/EntityPig.java
@@ -13,6 +13,7 @@ import net.minecraft.core.entity.monster.EntityPigZombie;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.item.Item;
 import com.mojang.nbt.CompoundTag;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.world.World;
 
 import java.util.ArrayList;
@@ -24,7 +25,7 @@ public class EntityPig extends EntityAnimal
     public EntityPig(World world)
     {
         super(world);
-        skinName = "pig";
+        textureIdentifier = new NamespaceID("minecraft", "pig");
         setSize(0.9F, 0.9F);
         mobDrops.add(new WeightedRandomLootObject(Item.foodPorkchopRaw.getDefaultStack(), 1, 2));
         burningMobDrops.add(new WeightedRandomLootObject(Item.foodPorkchopCooked.getDefaultStack(), 1, 2));
diff --git a/src/main/java/net/minecraft/core/entity/animal/EntitySheep.java b/src/main/java/net/minecraft/core/entity/animal/EntitySheep.java
index 277a83beb..797bdabb8 100644
--- a/src/main/java/net/minecraft/core/entity/animal/EntitySheep.java
+++ b/src/main/java/net/minecraft/core/entity/animal/EntitySheep.java
@@ -5,10 +5,10 @@ import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityItem;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.enums.EnumBlockSoundEffectType;
-import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.item.ItemToolShears;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.world.World;
 import net.minecraft.core.util.helper.DamageType;
 import net.minecraft.core.util.helper.MathHelper;
@@ -26,7 +26,7 @@ public class EntitySheep extends EntityAnimal
     public EntitySheep(World world)
     {
         super(world);
-        skinName = "sheep";
+        textureIdentifier = new NamespaceID("minecraft", "sheep");
         setSize(0.9F, 1.3F);
     }
 
diff --git a/src/main/java/net/minecraft/core/entity/animal/EntitySquid.java b/src/main/java/net/minecraft/core/entity/animal/EntitySquid.java
index 3add3ec2e..cdf580f08 100644
--- a/src/main/java/net/minecraft/core/entity/animal/EntitySquid.java
+++ b/src/main/java/net/minecraft/core/entity/animal/EntitySquid.java
@@ -6,11 +6,10 @@ package net.minecraft.core.entity.animal;
 //            EntityPlayer
 
 import net.minecraft.core.WeightedRandomLootObject;
-import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.item.Item;
-import net.minecraft.core.item.ItemStack;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.DamageType;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.world.World;
@@ -37,7 +36,7 @@ public class EntitySquid extends EntityWaterAnimal
         randomMotionVecZ = 0.0F;
         tickOutOfWater = 5;
         isInWater();
-        skinName = "squid";
+        textureIdentifier = new NamespaceID("minecraft", "squid");
         setSize(0.95F, 0.95F);
         animationVelocity = (1.0F / (random.nextFloat() + 1.0F)) * 0.2F;
         mobDrops.add(new WeightedRandomLootObject(Item.dye.getDefaultStack(), 1, 3));
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 662a5ad6a..f46ed46a3 100644
--- a/src/main/java/net/minecraft/core/entity/animal/EntityWolf.java
+++ b/src/main/java/net/minecraft/core/entity/animal/EntityWolf.java
@@ -10,6 +10,7 @@ import net.minecraft.core.item.ItemArmor;
 import net.minecraft.core.item.ItemFood;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.item.material.ArmorMaterial;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.MathHelper;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.world.pathfinder.Path;
@@ -32,7 +33,7 @@ public class EntityWolf extends EntityAnimal
     {
         super(world);
         looksWithInterest = false;
-        skinName = "wolf";
+        textureIdentifier = new NamespaceID("minecraft", "wolf");
         setSize(0.8F, 0.8F);
         moveSpeed = 1.1F;
         scoreValue = 500;
@@ -58,7 +59,7 @@ public class EntityWolf extends EntityAnimal
         ArmorMaterial material = null;
         String name = entityData.getString(19);
         for (ArmorMaterial mat : ArmorMaterial.getArmorMaterials()) {
-            if (mat.name.equalsIgnoreCase(name)) {
+            if (mat.identifier.toString().equalsIgnoreCase(name)) {
                 material = mat;
                 break;
             }
@@ -76,7 +77,7 @@ public class EntityWolf extends EntityAnimal
         if (material == null) {
             entityData.set(19, "");
         } else {
-            entityData.set(19, material.name);
+            entityData.set(19, material.identifier.toString());
         }
     }
 
@@ -91,11 +92,11 @@ public class EntityWolf extends EntityAnimal
     {
         if(isWolfTamed())
         {
-            return "/mob/wolf_tame/" + getSkinVariant() + ".png";
+            return "/assets/minecraft/textures/entity/wolf_tame/" + getSkinVariant() + ".png";
         }
         else if(isWolfAngry())
         {
-            return "/mob/wolf_angry/" + getSkinVariant() + ".png";
+            return "/assets/minecraft/textures/entity/wolf_angry/" + getSkinVariant() + ".png";
         }
         else
         {
@@ -108,11 +109,11 @@ public class EntityWolf extends EntityAnimal
     {
         if(isWolfTamed())
         {
-            return "/mob/wolf_tame/0.png";
+            return "/assets/minecraft/textures/entity/wolf_tame/0.png";
         }
         else if(isWolfAngry())
         {
-            return "/mob/wolf_angry/0.png";
+            return "/assets/minecraft/textures/entity/wolf_angry/0.png";
         }
         else
         {
@@ -182,7 +183,7 @@ public class EntityWolf extends EntityAnimal
             String name = tag.getString("Armor");
             if (!name.isEmpty()){
                 for (ArmorMaterial mat : ArmorMaterial.getArmorMaterials()) {
-                    if (mat.name.equalsIgnoreCase(name)) {
+                    if (mat.identifier.toString().equalsIgnoreCase(name)) {
                         material = mat;
                         break;
                     }
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntityArmoredZombie.java b/src/main/java/net/minecraft/core/entity/monster/EntityArmoredZombie.java
index dbc518430..bad5261e2 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntityArmoredZombie.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntityArmoredZombie.java
@@ -4,17 +4,16 @@ package net.minecraft.core.entity.monster;
 //            EntityMob, World, MathHelper, Item
 
 
-
-import java.util.ArrayList;
-import java.util.List;
-
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityItem;
-import net.minecraft.core.util.helper.DamageType;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
+import net.minecraft.core.util.collection.NamespaceID;
+import net.minecraft.core.util.helper.DamageType;
 import net.minecraft.core.world.World;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Random;
 
 public class EntityArmoredZombie extends EntityZombie
@@ -23,7 +22,7 @@ public class EntityArmoredZombie extends EntityZombie
     public EntityArmoredZombie(World world)
     {
         super(world);
-        skinName = "zombie_armored";
+        textureIdentifier = new NamespaceID("minecraft", "zombie_armored");
         Random rand = new Random();
         setHoldingSword(rand.nextInt(5)==0);
         List<Integer> armorItems = new ArrayList<>();
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntityCreeper.java b/src/main/java/net/minecraft/core/entity/monster/EntityCreeper.java
index 312ee1ce6..16380e8a0 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntityCreeper.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntityCreeper.java
@@ -9,6 +9,7 @@ import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityLightningBolt;
 import net.minecraft.core.item.Item;
 import com.mojang.nbt.CompoundTag;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.world.World;
 
 public class EntityCreeper extends EntityMonster
@@ -17,7 +18,7 @@ public class EntityCreeper extends EntityMonster
     public EntityCreeper(World world)
     {
         super(world);
-        skinName = "creeper";
+        textureIdentifier = new NamespaceID("minecraft", "creeper");
         scoreValue = 800;
         setSize(0.6F, 1.6F);
         mobDrops.add(new WeightedRandomLootObject(Item.sulphur.getDefaultStack(), 0, 2));
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntityGhast.java b/src/main/java/net/minecraft/core/entity/monster/EntityGhast.java
index 640cc5ca4..e3f7c39bd 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntityGhast.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntityGhast.java
@@ -6,6 +6,7 @@ package net.minecraft.core.entity.monster;
 //            Vec3D, Item
 
 import net.minecraft.core.WeightedRandomLootObject;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.phys.Vec3d;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.projectile.EntityFireball;
@@ -29,7 +30,7 @@ public class EntityGhast extends EntityFlying
         aggroCooldown = 0;
         prevAttackCounter = 0;
         attackCounter = 0;
-        skinName = "ghast";
+        textureIdentifier = new NamespaceID("minecraft", "ghast");
         setSize(4F, 7F);
         fireImmune = true;
         scoreValue = 1000;
@@ -53,7 +54,7 @@ public class EntityGhast extends EntityFlying
         }
         else
         {
-            return "/mob/ghast_fire/" + getSkinVariant() + ".png";
+            return "/assets/minecraft/textures/entity/ghast_fire/" + getSkinVariant() + ".png";
         }
     }
 
@@ -66,7 +67,7 @@ public class EntityGhast extends EntityFlying
         }
         else
         {
-            return "/mob/ghast_fire/0.png";
+            return "/assets/minecraft/textures/entity/ghast_fire/0.png";
         }
     }
 
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntityGiant.java b/src/main/java/net/minecraft/core/entity/monster/EntityGiant.java
index 2a595d13c..c196c8446 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntityGiant.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntityGiant.java
@@ -4,6 +4,7 @@ package net.minecraft.core.entity.monster;
 // Referenced classes of package net.minecraft.src:
 //            EntityMob, World
 
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.world.World;
 
 public class EntityGiant extends EntityMonster
@@ -12,7 +13,7 @@ public class EntityGiant extends EntityMonster
     public EntityGiant(World world)
     {
         super(world);
-        skinName = "zombie";
+        textureIdentifier = new NamespaceID("minecraft", "zombie");
         moveSpeed = 0.5F;
         attackStrength = 50;
         heightOffset *= 6F;
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntityPigZombie.java b/src/main/java/net/minecraft/core/entity/monster/EntityPigZombie.java
index 0f3c53f7e..2c4a21eed 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntityPigZombie.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntityPigZombie.java
@@ -6,6 +6,7 @@ import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.enums.LightLayer;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.MathHelper;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.world.World;
@@ -26,7 +27,7 @@ public class EntityPigZombie extends EntityZombie
         super(world);
         angerLevel = 0;
         randomSoundDelay = 0;
-        skinName = "pigzombie";
+        textureIdentifier = new NamespaceID("minecraft", "pigzombie");
         moveSpeed = 0.5F;
         attackStrength = 5;
         fireImmune = false;
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntityScorpion.java b/src/main/java/net/minecraft/core/entity/monster/EntityScorpion.java
index 7bb168abd..8cb38c277 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntityScorpion.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntityScorpion.java
@@ -7,6 +7,7 @@ package net.minecraft.core.entity.monster;
 import net.minecraft.core.WeightedRandomLootObject;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.player.EntityPlayer;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.item.Item;
 import com.mojang.nbt.CompoundTag;
@@ -18,7 +19,7 @@ public class EntityScorpion extends EntityMonster
     public EntityScorpion(World world)
     {
         super(world);
-        skinName = "scorpion";
+        textureIdentifier = new NamespaceID("minecraft", "scorpion");
         setSize(1F, 0.2F);
         moveSpeed = 0.8F;
         scoreValue = 200;
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntitySkeleton.java b/src/main/java/net/minecraft/core/entity/monster/EntitySkeleton.java
index fc1b0dc41..8deb6a437 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntitySkeleton.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntitySkeleton.java
@@ -9,6 +9,7 @@ import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.projectile.EntityArrow;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.MathHelper;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.world.World;
@@ -20,7 +21,7 @@ public class EntitySkeleton extends EntityMonster
     public EntitySkeleton(World world)
     {
         super(world);
-        skinName = "skeleton";
+        textureIdentifier = new NamespaceID("minecraft", "skeleton");
         scoreValue = 500;
         mobDrops.add(new WeightedRandomLootObject(Item.ammoArrow.getDefaultStack(), 0, 2));
         mobDrops.add(new WeightedRandomLootObject(Item.bone.getDefaultStack(), 0, 2));
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 057928564..c3bc0d14c 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntitySlime.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntitySlime.java
@@ -9,6 +9,7 @@ import net.minecraft.core.WeightedRandomLootObject;
 import net.minecraft.core.entity.EntityLiving;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.item.Item;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.MathHelper;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.world.World;
@@ -25,7 +26,7 @@ public class EntitySlime extends EntityLiving
     {
         super(world);
         slimeJumpDelay = 0;
-        skinName = "slime";
+        textureIdentifier = new NamespaceID("minecraft", "slime");
         heightOffset = 0.0F;
         slimeJumpDelay = 20;
         scoreValue = 100;
@@ -35,7 +36,7 @@ public class EntitySlime extends EntityLiving
     {
         super(world);
         slimeJumpDelay = 0;
-        skinName = "slime";
+        textureIdentifier = new NamespaceID("minecraft", "slime");
         heightOffset = 0.0F;
         slimeJumpDelay = 20;
         scoreValue = 100;
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntitySnowman.java b/src/main/java/net/minecraft/core/entity/monster/EntitySnowman.java
index ec36a28fc..9b9e2b196 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntitySnowman.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntitySnowman.java
@@ -7,6 +7,7 @@ import net.minecraft.core.WeightedRandomLootObject;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.projectile.EntitySnowball;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.world.World;
@@ -21,7 +22,7 @@ public class EntitySnowman extends EntityMonster
     public EntitySnowman(World world)
     {
         super(world);
-        skinName = "snowman";
+        textureIdentifier = new NamespaceID("minecraft", "snowman");
         moveSpeed = 0.5F;
         attackStrength = 5;
         scoreValue = 300;
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntitySpider.java b/src/main/java/net/minecraft/core/entity/monster/EntitySpider.java
index 5b9b12698..8f3712397 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntitySpider.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntitySpider.java
@@ -8,6 +8,7 @@ import net.minecraft.core.WeightedRandomLootObject;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.item.Item;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.MathHelper;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.world.World;
@@ -18,7 +19,7 @@ public class EntitySpider extends EntityMonster
     public EntitySpider(World world)
     {
         super(world);
-        skinName = "spider";
+        textureIdentifier = new NamespaceID("minecraft", "spider");
         setSize(1.4F, 0.9F);
         moveSpeed = 0.8F;
         scoreValue = 200;
diff --git a/src/main/java/net/minecraft/core/entity/monster/EntityZombie.java b/src/main/java/net/minecraft/core/entity/monster/EntityZombie.java
index 82a52c88c..49832f78b 100644
--- a/src/main/java/net/minecraft/core/entity/monster/EntityZombie.java
+++ b/src/main/java/net/minecraft/core/entity/monster/EntityZombie.java
@@ -5,6 +5,7 @@ package net.minecraft.core.entity.monster;
 
 import net.minecraft.core.WeightedRandomLootObject;
 import net.minecraft.core.item.Item;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.world.weather.Weather;
 import net.minecraft.core.world.World;
@@ -15,7 +16,7 @@ public class EntityZombie extends EntityMonster
     public EntityZombie(World world)
     {
         super(world);
-        skinName = "zombie";
+        textureIdentifier = new NamespaceID("minecraft", "zombie");
         moveSpeed = 0.5F;
         attackStrength = 5;
         scoreValue = 300;
diff --git a/src/main/java/net/minecraft/core/entity/player/EntityPlayer.java b/src/main/java/net/minecraft/core/entity/player/EntityPlayer.java
index 973776d4a..f9366a192 100644
--- a/src/main/java/net/minecraft/core/entity/player/EntityPlayer.java
+++ b/src/main/java/net/minecraft/core/entity/player/EntityPlayer.java
@@ -1,17 +1,10 @@
 package net.minecraft.core.entity.player;
 
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-
 import com.mojang.nbt.CompoundTag;
 import com.mojang.nbt.ListTag;
-
 import net.minecraft.core.achievement.AchievementList;
 import net.minecraft.core.achievement.stat.Stat;
 import net.minecraft.core.achievement.stat.StatList;
-import net.minecraft.core.data.gamerule.GameRules;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockBed;
 import net.minecraft.core.block.entity.TileEntity;
@@ -21,7 +14,12 @@ import net.minecraft.core.block.entity.TileEntityFurnace;
 import net.minecraft.core.block.entity.TileEntitySign;
 import net.minecraft.core.block.entity.TileEntityTrommel;
 import net.minecraft.core.block.material.Material;
-import net.minecraft.core.entity.*;
+import net.minecraft.core.data.gamerule.GameRules;
+import net.minecraft.core.entity.Entity;
+import net.minecraft.core.entity.EntityBobber;
+import net.minecraft.core.entity.EntityDispatcher;
+import net.minecraft.core.entity.EntityItem;
+import net.minecraft.core.entity.EntityLiving;
 import net.minecraft.core.entity.animal.EntityPig;
 import net.minecraft.core.entity.animal.EntityWolf;
 import net.minecraft.core.entity.monster.EntityCreeper;
@@ -44,6 +42,7 @@ import net.minecraft.core.player.inventory.Container;
 import net.minecraft.core.player.inventory.ContainerPlayer;
 import net.minecraft.core.player.inventory.IInventory;
 import net.minecraft.core.player.inventory.InventoryPlayer;
+import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.DamageType;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.phys.AABB;
@@ -52,6 +51,11 @@ import net.minecraft.core.world.chunk.ChunkCoordinates;
 import net.minecraft.core.world.chunk.provider.IChunkProvider;
 import net.minecraft.core.world.weather.Weather;
 
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
 public abstract class EntityPlayer extends EntityLiving
 {
 
@@ -74,7 +78,7 @@ public abstract class EntityPlayer extends EntityLiving
         entityType = "humanoid";
         unusedRotation2 = 180F;
         fireImmuneTicks = 20;
-        skinName = "char";
+        textureIdentifier = new NamespaceID("minecraft", "char");
         damageRemainder = 0;
     }
     @Override
diff --git a/src/main/java/net/minecraft/core/item/Item.java b/src/main/java/net/minecraft/core/item/Item.java
index 3086c9d15..c2b1306ca 100644
--- a/src/main/java/net/minecraft/core/item/Item.java
+++ b/src/main/java/net/minecraft/core/item/Item.java
@@ -365,18 +365,18 @@ public class Item
     public static Item foodCookie = (new ItemFood("food.cookie", 16485, 1, 0, false, 16));
     public static ItemMap map = new ItemMap("map", 16486);
     public static ItemToolShears toolShears = new ItemToolShears("tool.shears", 16487, ToolMaterial.iron);
-    public static Item record13 = (new ItemRecord("record.13", 18384, "13"));
-    public static Item recordCat = (new ItemRecord("record.cat", 18385, "cat"));
-    public static Item recordBlocks = (new ItemRecord("record.blocks", 18386, "blocks"));
-    public static Item recordChirp = (new ItemRecord("record.chirp", 18387, "chirp"));
-    public static Item recordFar = (new ItemRecord("record.far", 18388, "far"));
-    public static Item recordMall = (new ItemRecord("record.mall", 18389, "mall"));
-    public static Item recordMellohi = (new ItemRecord("record.mellohi", 18390, "mellohi"));
-    public static Item recordStal = (new ItemRecord("record.stal", 18391, "stal"));
-    public static Item recordStrad = (new ItemRecord("record.strad", 18392, "strad"));
-    public static Item recordWard = (new ItemRecord("record.ward", 18393, "ward"));
-    public static Item recordWait = (new ItemRecord("record.wait", 18394, "wait"));
-    public static Item recordDog = (new ItemRecord("record.dog", 18395, "dog"));
+    public static Item record13 = (new ItemRecord("record.13", 18384, "13", "C418"));
+    public static Item recordCat = (new ItemRecord("record.cat", 18385, "cat", "C418"));
+    public static Item recordBlocks = (new ItemRecord("record.blocks", 18386, "blocks", "C418"));
+    public static Item recordChirp = (new ItemRecord("record.chirp", 18387, "chirp", "C418"));
+    public static Item recordFar = (new ItemRecord("record.far", 18388, "far", "C418"));
+    public static Item recordMall = (new ItemRecord("record.mall", 18389, "mall", "C418"));
+    public static Item recordMellohi = (new ItemRecord("record.mellohi", 18390, "mellohi", "C418"));
+    public static Item recordStal = (new ItemRecord("record.stal", 18391, "stal", "C418"));
+    public static Item recordStrad = (new ItemRecord("record.strad", 18392, "strad", "C418"));
+    public static Item recordWard = (new ItemRecord("record.ward", 18393, "ward", "C418"));
+    public static Item recordWait = (new ItemRecord("record.wait", 18394, "wait", "C418"));
+    public static Item recordDog = (new ItemRecord("record.dog", 18395, "dog", "C418"));
     public static Item nethercoal = (new Item("nethercoal", 16488));
     public static Item armorHelmetSteel = (new ItemArmor("armor.helmet.steel", 16489, ArmorMaterial.STEEL, 0));
     public static Item armorChestplateSteel = (new ItemArmor("armor.chestplate.steel", 16490, ArmorMaterial.STEEL, 1));
@@ -428,7 +428,7 @@ public class Item
     public static Item rope = new ItemRope("rope", 16534, Block.rope);
     public static Item foodPumpkinPie = (new ItemPlaceable("food.pumpkin_pie", 16535, Block.pumpkinPie)).setMaxStackSize(1);
     public static Item wandMonsterSpawner = (new ItemWandSpawner("wand.monster", 16536)).setMaxStackSize(1);
-
+    public static Item doorGlassTinted = (new ItemDoor("door.glass.tinted", 16537, Block.doorGlassTintedBottom, Block.doorGlassTintedTop));
 
     public static int highestItemId = 0;
     public int id;
diff --git a/src/main/java/net/minecraft/core/item/ItemRecord.java b/src/main/java/net/minecraft/core/item/ItemRecord.java
index 70e859f16..92f661a18 100644
--- a/src/main/java/net/minecraft/core/item/ItemRecord.java
+++ b/src/main/java/net/minecraft/core/item/ItemRecord.java
@@ -13,12 +13,15 @@ import net.minecraft.core.world.World;
 
 public class ItemRecord extends Item
 {
+    public final String recordName;
+    public final String recordAuthor;
 
 
-    protected ItemRecord(String name, int id, String s)
+    public ItemRecord(String name, int id, String recordName, String recordAuthor)
     {
         super(name, id);
-        recordName = s;
+        this.recordName = recordName;
+        this.recordAuthor = recordAuthor;
         maxStackSize = 1;
     }
 
@@ -38,6 +41,4 @@ public class ItemRecord extends Item
             return false;
         }
     }
-
-    public final String recordName;
 }
diff --git a/src/main/java/net/minecraft/core/item/material/ArmorMaterial.java b/src/main/java/net/minecraft/core/item/material/ArmorMaterial.java
index fa214125f..36e513964 100644
--- a/src/main/java/net/minecraft/core/item/material/ArmorMaterial.java
+++ b/src/main/java/net/minecraft/core/item/material/ArmorMaterial.java
@@ -1,10 +1,18 @@
 package net.minecraft.core.item.material;
 
-import static net.minecraft.core.util.helper.DamageType.*;
+import net.minecraft.core.util.collection.NamespaceID;
+import net.minecraft.core.util.helper.DamageType;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
-import net.minecraft.core.util.helper.DamageType;
+import static net.minecraft.core.util.helper.DamageType.BLAST;
+import static net.minecraft.core.util.helper.DamageType.COMBAT;
+import static net.minecraft.core.util.helper.DamageType.FALL;
+import static net.minecraft.core.util.helper.DamageType.FIRE;
 
 public class ArmorMaterial {
 	private static final List<ArmorMaterial> ARMOR_MATERIALS = new ArrayList<>();
@@ -17,14 +25,14 @@ public class ArmorMaterial {
 	}
 
 
-	public final String name;
+	public final NamespaceID identifier;
 	public final int durability;
 	public final int renderIndex;
 	
 	private final Map<DamageType, Float> protection = new HashMap<>();
 	
-	public ArmorMaterial(String name, int renderIndex, int durability) {
-		this.name = name;
+	public ArmorMaterial(NamespaceID identifier, int renderIndex, int durability) {
+		this.identifier = identifier;
 		this.renderIndex = renderIndex;
 		this.durability = durability;
 
@@ -44,37 +52,37 @@ public class ArmorMaterial {
 		return this;
 	}
 	
-	public static final ArmorMaterial LEATHER = register(new ArmorMaterial("cloth", 0, 180)
+	public static final ArmorMaterial LEATHER = register(new ArmorMaterial(new NamespaceID("minecraft", "cloth"), 0, 180)
 		.withProtectionPercentage(COMBAT, 20.0f)
 		.withProtectionPercentage(BLAST, 20.0f)
 		.withProtectionPercentage(FIRE, 20.0f)
 		.withProtectionPercentage(FALL, 120.0f)
 	);
-	public static final ArmorMaterial CHAINMAIL = register(new ArmorMaterial("chain", 1, 240)
+	public static final ArmorMaterial CHAINMAIL = register(new ArmorMaterial(new NamespaceID("minecraft", "chain"), 1, 240)
 		.withProtectionPercentage(COMBAT, 120.0f)
 		.withProtectionPercentage(BLAST, 35.0f)
 		.withProtectionPercentage(FIRE, 35.0f)
 		.withProtectionPercentage(FALL, 35.0f)
 	);
-	public static final ArmorMaterial IRON = register(new ArmorMaterial("iron", 2, 200)
+	public static final ArmorMaterial IRON = register(new ArmorMaterial(new NamespaceID("minecraft", "iron"), 2, 200)
 		.withProtectionPercentage(COMBAT, 45.0f)
 		.withProtectionPercentage(BLAST, 45.0f)
 		.withProtectionPercentage(FIRE, 45.0f)
 		.withProtectionPercentage(FALL, 45.0f)
 	);
-	public static final ArmorMaterial GOLD = register(new ArmorMaterial("gold", 4, 120)
+	public static final ArmorMaterial GOLD = register(new ArmorMaterial(new NamespaceID("minecraft", "gold"), 4, 120)
 		.withProtectionPercentage(COMBAT, 70.0f)
 		.withProtectionPercentage(BLAST, 70.0f)
 		.withProtectionPercentage(FIRE, 70.0f)
 		.withProtectionPercentage(FALL, 70.0f)
 	);
-	public static final ArmorMaterial DIAMOND = register(new ArmorMaterial("diamond", 3, 800)
+	public static final ArmorMaterial DIAMOND = register(new ArmorMaterial(new NamespaceID("minecraft", "diamond"), 3, 800)
 		.withProtectionPercentage(COMBAT, 66.0f)
 		.withProtectionPercentage(BLAST, 66.0f)
 		.withProtectionPercentage(FIRE, 124.0f)
 		.withProtectionPercentage(FALL, 66.0f)
 	);
-	public static final ArmorMaterial STEEL = register(new ArmorMaterial("steel", 5, 1200)
+	public static final ArmorMaterial STEEL = register(new ArmorMaterial(new NamespaceID("minecraft", "steel"), 5, 1200)
 		.withProtectionPercentage(COMBAT, 55.0f)
 		.withProtectionPercentage(BLAST, 150.0f)
 		.withProtectionPercentage(FIRE, 55.0f)
diff --git a/src/main/java/net/minecraft/core/net/command/commands/GameruleCommand.java b/src/main/java/net/minecraft/core/net/command/commands/GameruleCommand.java
index 285bf53ff..38cc02556 100644
--- a/src/main/java/net/minecraft/core/net/command/commands/GameruleCommand.java
+++ b/src/main/java/net/minecraft/core/net/command/commands/GameruleCommand.java
@@ -20,10 +20,10 @@ public class GameruleCommand
 
         if (args[0].equalsIgnoreCase("list"))
         {
-            handler.sendCommandFeedback(sender, "List of game rules:");
+            sender.sendMessage("List of game rules:");
             for (GameRule<?> gameRule : Registries.GAME_RULES)
             {
-                handler.sendCommandFeedback(sender, " - " + gameRule.getKey());
+                sender.sendMessage(" - " + gameRule.getKey());
             }
             return true;
         }
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 d41706a07..a66e60b15 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
@@ -1,5 +1,6 @@
 package net.minecraft.core.net.command.commands;
 
+import net.minecraft.client.entity.fx.ParticleDispatcher;
 import net.minecraft.core.net.command.ClientCommandHandler;
 import net.minecraft.core.net.command.Command;
 import net.minecraft.core.net.command.CommandHandler;
@@ -31,6 +32,16 @@ public class SpawnParticleCommand extends Command {
         Double maxDistance = null;
         if (args.length >= 1){
             particleKey = args[0];
+
+            if (particleKey.equalsIgnoreCase("list")){
+                sender.sendMessage("List of particles:");
+                for (String s: ParticleDispatcher.getInstance().getParticleIds())
+                {
+                    sender.sendMessage(" - " + s);
+                }
+                return true;
+            }
+
             if (args.length >= 4){
                 x = Double.parseDouble(args[1]);
                 y = Double.parseDouble(args[2]);
@@ -67,6 +78,7 @@ public class SpawnParticleCommand extends Command {
 
     @Override
     public void sendCommandSyntax(CommandHandler handler, CommandSender sender) {
+        sender.sendMessage("/spawnparticle list");
         if (sender.getPlayer() != null){
             sender.sendMessage("/spawnparticle <ParticleKey>");
         }
diff --git a/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java b/src/main/java/net/minecraft/core/sound/BlockSoundDispatcher.java
index 36916fe64..95cc34bb8 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.tnt, BlockSounds.GRASS);

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

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

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

        addDispatch(Block.cobweb, BlockSounds.CLOTH);

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

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

        addDispatch(Block.workbench, BlockSounds.WOOD);

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

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

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

        addDispatch(Block.basket, BlockSounds.CLOTH);

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

        addDispatch(Block.farmlandDirt, BlockSounds.GRAVEL);

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

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

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

        addDispatch(Block.blockSnow, BlockSounds.CLOTH);

        addDispatch(Block.cactus, BlockSounds.CLOTH);

        addDispatch(Block.blockClay, BlockSounds.GRAVEL);

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

        addDispatch(Block.jukebox, BlockSounds.WOOD);

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

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

        addDispatch(Block.soulsand, BlockSounds.SAND);

        addDispatch(Block.glowstone, BlockSounds.GLASS);

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

        addDispatch(Block.cake, BlockSounds.CLOTH);
        addDispatch(Block.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.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
diff --git a/src/main/java/net/minecraft/core/util/collection/NamespaceID.java b/src/main/java/net/minecraft/core/util/collection/NamespaceID.java
new file mode 100644
index 000000000..95aae1e59
--- /dev/null
+++ b/src/main/java/net/minecraft/core/util/collection/NamespaceID.java
@@ -0,0 +1,38 @@
+package net.minecraft.core.util.collection;
+
+import java.util.Comparator;
+
+public final class NamespaceID implements Comparator<NamespaceID> {
+    public final String namespace;
+    public final String value;
+    public NamespaceID(String namespace, String value){
+        if (namespace.contains(":")) throw new IllegalArgumentException(namespace + " cannot contain the ':' character!");
+        if (value.contains(":")) throw new IllegalArgumentException(value + " cannot contain the ':' character!");
+        this.namespace = namespace;
+        this.value = value;
+    }
+    public NamespaceID(String formattedString){
+        if (!formattedString.contains(":")) throw new IllegalArgumentException("Formatted String '" + formattedString + "' missing ':' character all namespace ids must follow the format <namespace>:<value>!");
+        String[] split = formattedString.split(":");
+        if (split.length != 2) throw new IllegalArgumentException("Formatted String '" + formattedString + "' has more then 1 ':' character! all namespace ids must follow the format <namespace>:<value>!");
+        namespace = split[0];
+        value = split[1];
+    }
+    @Override
+    public int hashCode(){
+        return toString().hashCode();
+    }
+    @Override
+    public boolean equals(Object other){
+        if (other == null) return false;
+        return super.equals(other) | (other.toString().equals(this.toString()));
+    }
+    @Override
+    public String toString(){
+        return namespace + ":" + value;
+    }
+    @Override
+    public int compare(NamespaceID o1, NamespaceID o2) {
+        return o1.toString().compareTo(o2.toString());
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/LevelListener.java b/src/main/java/net/minecraft/core/world/LevelListener.java
index 77f2a3dde..0787f49d3 100644
--- a/src/main/java/net/minecraft/core/world/LevelListener.java
+++ b/src/main/java/net/minecraft/core/world/LevelListener.java
@@ -3,11 +3,9 @@ package net.minecraft.core.world;
 // Referenced classes of package net.minecraft.src:
 //            Entity, TileEntity, EntityPlayer
 
-import net.minecraft.core.block.Block;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.player.EntityPlayer;
 import net.minecraft.core.block.entity.TileEntity;
-import net.minecraft.core.enums.EnumBlockSoundEffectType;
 import net.minecraft.core.sound.SoundCategory;
 
 public interface LevelListener
@@ -40,7 +38,7 @@ public interface LevelListener
 
     void allChanged();
 
-    void playStreamingMusic(String soundPath, int x, int y, int z);
+    void playStreamingMusic(String soundPath, String Author, int x, int y, int z);
 
     void tileEntityChanged(int x, int y, int z, TileEntity tileEntity);
 
diff --git a/src/main/java/net/minecraft/core/world/World.java b/src/main/java/net/minecraft/core/world/World.java
index 7df0318d5..e6727abc0 100644
--- a/src/main/java/net/minecraft/core/world/World.java
+++ b/src/main/java/net/minecraft/core/world/World.java
@@ -63,7 +63,6 @@ import net.minecraft.core.world.saveddata.SavedDataStorage;
 import net.minecraft.core.world.season.SeasonManager;
 import net.minecraft.core.world.season.Seasons;
 import net.minecraft.core.world.type.WorldType;
-import net.minecraft.core.world.type.WorldTypeDebug;
 import net.minecraft.core.world.type.WorldTypes;
 import net.minecraft.core.world.weather.Weather;
 import net.minecraft.core.world.weather.WeatherManager;
@@ -1341,11 +1340,11 @@ public class World implements WorldSource {
         playSoundEffect(player, SoundCategory.WORLD_SOUNDS, x, y, z, name, soundType.modifyVolume(sound.getVolume()), soundType.modifyPitch(sound.getPitch()));
     }
 
-    public void playRecord(String s, int i, int j, int k)
+    public void playRecord(String soundPath, String author, int x, int y, int z)
     {
         for(int l = 0; l < listeners.size(); l++)
         {
-            listeners.get(l).playStreamingMusic(s, i, j, k);
+            listeners.get(l).playStreamingMusic(soundPath, author, x, y, z);
         }
 
     }
diff --git a/src/main/java/net/minecraft/server/world/WorldManager.java b/src/main/java/net/minecraft/server/world/WorldManager.java
index 6730b4ac3..049791685 100644
--- a/src/main/java/net/minecraft/server/world/WorldManager.java
+++ b/src/main/java/net/minecraft/server/world/WorldManager.java
@@ -3,16 +3,12 @@ package net.minecraft.server.world;
 import java.util.HashSet;
 import java.util.Set;
 
-import net.minecraft.core.block.Block;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityItem;
 import net.minecraft.core.entity.player.EntityPlayer;
-import net.minecraft.core.enums.EnumBlockSoundEffectType;
 import net.minecraft.core.net.packet.Packet61PlaySoundEffect;
 import net.minecraft.core.net.packet.Packet62PlaySoundDirect;
-import net.minecraft.core.sound.BlockSound;
-import net.minecraft.core.sound.BlockSoundDispatcher;
 import net.minecraft.core.sound.SoundTypes;
 import net.minecraft.core.sound.SoundCategory;
 import net.minecraft.core.world.LevelListener;
@@ -113,7 +109,7 @@ public class WorldManager
     }
 
     @Override
-	public void playStreamingMusic(String soundPath, int x, int y, int z)
+	public void playStreamingMusic(String soundPath, String Author, int x, int y, int z)
     {
     }
 
diff --git a/src/main/resources/art/kz.png b/src/main/resources/art/kz.png
deleted file mode 100644
index 11f804eef..000000000
Binary files a/src/main/resources/art/kz.png and /dev/null differ
diff --git a/src/main/resources/armor/chain_1.png b/src/main/resources/assets/minecraft/textures/armor/chain_1.png
similarity index 100%
rename from src/main/resources/armor/chain_1.png
rename to src/main/resources/assets/minecraft/textures/armor/chain_1.png
diff --git a/src/main/resources/armor/chain_2.png b/src/main/resources/assets/minecraft/textures/armor/chain_2.png
similarity index 100%
rename from src/main/resources/armor/chain_2.png
rename to src/main/resources/assets/minecraft/textures/armor/chain_2.png
diff --git a/src/main/resources/armor/cloth_1.png b/src/main/resources/assets/minecraft/textures/armor/cloth_1.png
similarity index 100%
rename from src/main/resources/armor/cloth_1.png
rename to src/main/resources/assets/minecraft/textures/armor/cloth_1.png
diff --git a/src/main/resources/armor/cloth_2.png b/src/main/resources/assets/minecraft/textures/armor/cloth_2.png
similarity index 100%
rename from src/main/resources/armor/cloth_2.png
rename to src/main/resources/assets/minecraft/textures/armor/cloth_2.png
diff --git a/src/main/resources/armor/diamond_1.png b/src/main/resources/assets/minecraft/textures/armor/diamond_1.png
similarity index 100%
rename from src/main/resources/armor/diamond_1.png
rename to src/main/resources/assets/minecraft/textures/armor/diamond_1.png
diff --git a/src/main/resources/armor/diamond_2.png b/src/main/resources/assets/minecraft/textures/armor/diamond_2.png
similarity index 100%
rename from src/main/resources/armor/diamond_2.png
rename to src/main/resources/assets/minecraft/textures/armor/diamond_2.png
diff --git a/src/main/resources/armor/gold_1.png b/src/main/resources/assets/minecraft/textures/armor/gold_1.png
similarity index 100%
rename from src/main/resources/armor/gold_1.png
rename to src/main/resources/assets/minecraft/textures/armor/gold_1.png
diff --git a/src/main/resources/armor/gold_2.png b/src/main/resources/assets/minecraft/textures/armor/gold_2.png
similarity index 100%
rename from src/main/resources/armor/gold_2.png
rename to src/main/resources/assets/minecraft/textures/armor/gold_2.png
diff --git a/src/main/resources/armor/iron_1.png b/src/main/resources/assets/minecraft/textures/armor/iron_1.png
similarity index 100%
rename from src/main/resources/armor/iron_1.png
rename to src/main/resources/assets/minecraft/textures/armor/iron_1.png
diff --git a/src/main/resources/armor/iron_2.png b/src/main/resources/assets/minecraft/textures/armor/iron_2.png
similarity index 100%
rename from src/main/resources/armor/iron_2.png
rename to src/main/resources/assets/minecraft/textures/armor/iron_2.png
diff --git a/src/main/resources/armor/power.png b/src/main/resources/assets/minecraft/textures/armor/power.png
similarity index 100%
rename from src/main/resources/armor/power.png
rename to src/main/resources/assets/minecraft/textures/armor/power.png
diff --git a/src/main/resources/armor/quiver.png b/src/main/resources/assets/minecraft/textures/armor/quiver.png
similarity index 100%
rename from src/main/resources/armor/quiver.png
rename to src/main/resources/assets/minecraft/textures/armor/quiver.png
diff --git a/src/main/resources/armor/quiver_golden.png b/src/main/resources/assets/minecraft/textures/armor/quiver_golden.png
similarity index 100%
rename from src/main/resources/armor/quiver_golden.png
rename to src/main/resources/assets/minecraft/textures/armor/quiver_golden.png
diff --git a/src/main/resources/armor/skates.png b/src/main/resources/assets/minecraft/textures/armor/skates.png
similarity index 100%
rename from src/main/resources/armor/skates.png
rename to src/main/resources/assets/minecraft/textures/armor/skates.png
diff --git a/src/main/resources/armor/steel_1.png b/src/main/resources/assets/minecraft/textures/armor/steel_1.png
similarity index 100%
rename from src/main/resources/armor/steel_1.png
rename to src/main/resources/assets/minecraft/textures/armor/steel_1.png
diff --git a/src/main/resources/armor/steel_2.png b/src/main/resources/assets/minecraft/textures/armor/steel_2.png
similarity index 100%
rename from src/main/resources/armor/steel_2.png
rename to src/main/resources/assets/minecraft/textures/armor/steel_2.png
diff --git a/src/main/resources/armor/wolf/chain.png b/src/main/resources/assets/minecraft/textures/armor/wolf/chain.png
similarity index 100%
rename from src/main/resources/armor/wolf/chain.png
rename to src/main/resources/assets/minecraft/textures/armor/wolf/chain.png
diff --git a/src/main/resources/armor/wolf/cloth.png b/src/main/resources/assets/minecraft/textures/armor/wolf/cloth.png
similarity index 100%
rename from src/main/resources/armor/wolf/cloth.png
rename to src/main/resources/assets/minecraft/textures/armor/wolf/cloth.png
diff --git a/src/main/resources/armor/wolf/diamond.png b/src/main/resources/assets/minecraft/textures/armor/wolf/diamond.png
similarity index 100%
rename from src/main/resources/armor/wolf/diamond.png
rename to src/main/resources/assets/minecraft/textures/armor/wolf/diamond.png
diff --git a/src/main/resources/armor/wolf/gold.png b/src/main/resources/assets/minecraft/textures/armor/wolf/gold.png
similarity index 100%
rename from src/main/resources/armor/wolf/gold.png
rename to src/main/resources/assets/minecraft/textures/armor/wolf/gold.png
diff --git a/src/main/resources/armor/wolf/iron.png b/src/main/resources/assets/minecraft/textures/armor/wolf/iron.png
similarity index 100%
rename from src/main/resources/armor/wolf/iron.png
rename to src/main/resources/assets/minecraft/textures/armor/wolf/iron.png
diff --git a/src/main/resources/armor/wolf/steel.png b/src/main/resources/assets/minecraft/textures/armor/wolf/steel.png
similarity index 100%
rename from src/main/resources/armor/wolf/steel.png
rename to src/main/resources/assets/minecraft/textures/armor/wolf/steel.png
diff --git a/src/main/resources/art/borders/border_diamond.png b/src/main/resources/assets/minecraft/textures/art/borders/border_diamond.png
similarity index 100%
rename from src/main/resources/art/borders/border_diamond.png
rename to src/main/resources/assets/minecraft/textures/art/borders/border_diamond.png
diff --git a/src/main/resources/art/borders/border_gold.png b/src/main/resources/assets/minecraft/textures/art/borders/border_gold.png
similarity index 100%
rename from src/main/resources/art/borders/border_gold.png
rename to src/main/resources/assets/minecraft/textures/art/borders/border_gold.png
diff --git a/src/main/resources/art/borders/border_iron.png b/src/main/resources/assets/minecraft/textures/art/borders/border_iron.png
similarity index 100%
rename from src/main/resources/art/borders/border_iron.png
rename to src/main/resources/assets/minecraft/textures/art/borders/border_iron.png
diff --git a/src/main/resources/art/borders/border_lapis.png b/src/main/resources/assets/minecraft/textures/art/borders/border_lapis.png
similarity index 100%
rename from src/main/resources/art/borders/border_lapis.png
rename to src/main/resources/assets/minecraft/textures/art/borders/border_lapis.png
diff --git a/src/main/resources/art/borders/border_olivine.png b/src/main/resources/assets/minecraft/textures/art/borders/border_olivine.png
similarity index 100%
rename from src/main/resources/art/borders/border_olivine.png
rename to src/main/resources/assets/minecraft/textures/art/borders/border_olivine.png
diff --git a/src/main/resources/art/borders/border_quartz.png b/src/main/resources/assets/minecraft/textures/art/borders/border_quartz.png
similarity index 100%
rename from src/main/resources/art/borders/border_quartz.png
rename to src/main/resources/assets/minecraft/textures/art/borders/border_quartz.png
diff --git a/src/main/resources/art/borders/border_redstone.png b/src/main/resources/assets/minecraft/textures/art/borders/border_redstone.png
similarity index 100%
rename from src/main/resources/art/borders/border_redstone.png
rename to src/main/resources/assets/minecraft/textures/art/borders/border_redstone.png
diff --git a/src/main/resources/art/borders/border_steel.png b/src/main/resources/assets/minecraft/textures/art/borders/border_steel.png
similarity index 100%
rename from src/main/resources/art/borders/border_steel.png
rename to src/main/resources/assets/minecraft/textures/art/borders/border_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_bottom.png b/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_bottom.png
new file mode 100644
index 000000000..9eb0fb6a2
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_bottom.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_top.png b/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_top.png
new file mode 100644
index 000000000..8c11cf4f2
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/door_glass_tinted_top.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor_glass_tinted_side.png b/src/main/resources/assets/minecraft/textures/block/trapdoor_glass_tinted_side.png
new file mode 100644
index 000000000..b4fef8b08
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/trapdoor_glass_tinted_side.png differ
diff --git a/src/main/resources/item/anactualsign.png b/src/main/resources/assets/minecraft/textures/entity/anactualsign.png
similarity index 100%
rename from src/main/resources/item/anactualsign.png
rename to src/main/resources/assets/minecraft/textures/entity/anactualsign.png
diff --git a/src/main/resources/item/arrows.png b/src/main/resources/assets/minecraft/textures/entity/arrows.png
similarity index 100%
rename from src/main/resources/item/arrows.png
rename to src/main/resources/assets/minecraft/textures/entity/arrows.png
diff --git a/src/main/resources/item/boat.png b/src/main/resources/assets/minecraft/textures/entity/boat.png
similarity index 100%
rename from src/main/resources/item/boat.png
rename to src/main/resources/assets/minecraft/textures/entity/boat.png
diff --git a/src/main/resources/item/cannonball.png b/src/main/resources/assets/minecraft/textures/entity/cannonball.png
similarity index 100%
rename from src/main/resources/item/cannonball.png
rename to src/main/resources/assets/minecraft/textures/entity/cannonball.png
diff --git a/src/main/resources/item/cart.png b/src/main/resources/assets/minecraft/textures/entity/cart.png
similarity index 100%
rename from src/main/resources/item/cart.png
rename to src/main/resources/assets/minecraft/textures/entity/cart.png
diff --git a/src/main/resources/mob/char/0.png b/src/main/resources/assets/minecraft/textures/entity/char/0.png
similarity index 100%
rename from src/main/resources/mob/char/0.png
rename to src/main/resources/assets/minecraft/textures/entity/char/0.png
diff --git a/src/main/resources/mob/chicken/0.png b/src/main/resources/assets/minecraft/textures/entity/chicken/0.png
similarity index 100%
rename from src/main/resources/mob/chicken/0.png
rename to src/main/resources/assets/minecraft/textures/entity/chicken/0.png
diff --git a/src/main/resources/mob/chicken/1.png b/src/main/resources/assets/minecraft/textures/entity/chicken/1.png
similarity index 100%
rename from src/main/resources/mob/chicken/1.png
rename to src/main/resources/assets/minecraft/textures/entity/chicken/1.png
diff --git a/src/main/resources/mob/chicken/2.png b/src/main/resources/assets/minecraft/textures/entity/chicken/2.png
similarity index 100%
rename from src/main/resources/mob/chicken/2.png
rename to src/main/resources/assets/minecraft/textures/entity/chicken/2.png
diff --git a/src/main/resources/mob/chicken/3.png b/src/main/resources/assets/minecraft/textures/entity/chicken/3.png
similarity index 100%
rename from src/main/resources/mob/chicken/3.png
rename to src/main/resources/assets/minecraft/textures/entity/chicken/3.png
diff --git a/src/main/resources/mob/cow/0.png b/src/main/resources/assets/minecraft/textures/entity/cow/0.png
similarity index 100%
rename from src/main/resources/mob/cow/0.png
rename to src/main/resources/assets/minecraft/textures/entity/cow/0.png
diff --git a/src/main/resources/mob/cow/1.png b/src/main/resources/assets/minecraft/textures/entity/cow/1.png
similarity index 100%
rename from src/main/resources/mob/cow/1.png
rename to src/main/resources/assets/minecraft/textures/entity/cow/1.png
diff --git a/src/main/resources/mob/cow/2.png b/src/main/resources/assets/minecraft/textures/entity/cow/2.png
similarity index 100%
rename from src/main/resources/mob/cow/2.png
rename to src/main/resources/assets/minecraft/textures/entity/cow/2.png
diff --git a/src/main/resources/mob/cow/3.png b/src/main/resources/assets/minecraft/textures/entity/cow/3.png
similarity index 100%
rename from src/main/resources/mob/cow/3.png
rename to src/main/resources/assets/minecraft/textures/entity/cow/3.png
diff --git a/src/main/resources/mob/creeper/0.png b/src/main/resources/assets/minecraft/textures/entity/creeper/0.png
similarity index 100%
rename from src/main/resources/mob/creeper/0.png
rename to src/main/resources/assets/minecraft/textures/entity/creeper/0.png
diff --git a/src/main/resources/item/door.png b/src/main/resources/assets/minecraft/textures/entity/door.png
similarity index 100%
rename from src/main/resources/item/door.png
rename to src/main/resources/assets/minecraft/textures/entity/door.png
diff --git a/src/main/resources/item/flag.png b/src/main/resources/assets/minecraft/textures/entity/flag.png
similarity index 100%
rename from src/main/resources/item/flag.png
rename to src/main/resources/assets/minecraft/textures/entity/flag.png
diff --git a/src/main/resources/item/flag_ui.png b/src/main/resources/assets/minecraft/textures/entity/flag_ui.png
similarity index 100%
rename from src/main/resources/item/flag_ui.png
rename to src/main/resources/assets/minecraft/textures/entity/flag_ui.png
diff --git a/src/main/resources/mob/ghast/0.png b/src/main/resources/assets/minecraft/textures/entity/ghast/0.png
similarity index 100%
rename from src/main/resources/mob/ghast/0.png
rename to src/main/resources/assets/minecraft/textures/entity/ghast/0.png
diff --git a/src/main/resources/mob/ghast_fire/0.png b/src/main/resources/assets/minecraft/textures/entity/ghast_fire/0.png
similarity index 100%
rename from src/main/resources/mob/ghast_fire/0.png
rename to src/main/resources/assets/minecraft/textures/entity/ghast_fire/0.png
diff --git a/src/main/resources/mob/pig/0.png b/src/main/resources/assets/minecraft/textures/entity/pig/0.png
similarity index 100%
rename from src/main/resources/mob/pig/0.png
rename to src/main/resources/assets/minecraft/textures/entity/pig/0.png
diff --git a/src/main/resources/mob/pig/1.png b/src/main/resources/assets/minecraft/textures/entity/pig/1.png
similarity index 100%
rename from src/main/resources/mob/pig/1.png
rename to src/main/resources/assets/minecraft/textures/entity/pig/1.png
diff --git a/src/main/resources/mob/pig/2.png b/src/main/resources/assets/minecraft/textures/entity/pig/2.png
similarity index 100%
rename from src/main/resources/mob/pig/2.png
rename to src/main/resources/assets/minecraft/textures/entity/pig/2.png
diff --git a/src/main/resources/mob/pig/3.png b/src/main/resources/assets/minecraft/textures/entity/pig/3.png
similarity index 100%
rename from src/main/resources/mob/pig/3.png
rename to src/main/resources/assets/minecraft/textures/entity/pig/3.png
diff --git a/src/main/resources/mob/pig/4.png b/src/main/resources/assets/minecraft/textures/entity/pig/4.png
similarity index 100%
rename from src/main/resources/mob/pig/4.png
rename to src/main/resources/assets/minecraft/textures/entity/pig/4.png
diff --git a/src/main/resources/mob/pigman/0.png b/src/main/resources/assets/minecraft/textures/entity/pigman/0.png
similarity index 100%
rename from src/main/resources/mob/pigman/0.png
rename to src/main/resources/assets/minecraft/textures/entity/pigman/0.png
diff --git a/src/main/resources/mob/pigzombie/0.png b/src/main/resources/assets/minecraft/textures/entity/pigzombie/0.png
similarity index 100%
rename from src/main/resources/mob/pigzombie/0.png
rename to src/main/resources/assets/minecraft/textures/entity/pigzombie/0.png
diff --git a/src/main/resources/mob/saddle.png b/src/main/resources/assets/minecraft/textures/entity/saddle.png
similarity index 100%
rename from src/main/resources/mob/saddle.png
rename to src/main/resources/assets/minecraft/textures/entity/saddle.png
diff --git a/src/main/resources/mob/scorpion/0.png b/src/main/resources/assets/minecraft/textures/entity/scorpion/0.png
similarity index 100%
rename from src/main/resources/mob/scorpion/0.png
rename to src/main/resources/assets/minecraft/textures/entity/scorpion/0.png
diff --git a/src/main/resources/mob/sheep/0.png b/src/main/resources/assets/minecraft/textures/entity/sheep/0.png
similarity index 100%
rename from src/main/resources/mob/sheep/0.png
rename to src/main/resources/assets/minecraft/textures/entity/sheep/0.png
diff --git a/src/main/resources/mob/sheep_fur.png b/src/main/resources/assets/minecraft/textures/entity/sheep_fur.png
similarity index 100%
rename from src/main/resources/mob/sheep_fur.png
rename to src/main/resources/assets/minecraft/textures/entity/sheep_fur.png
diff --git a/src/main/resources/mob/sheep_overlay.png b/src/main/resources/assets/minecraft/textures/entity/sheep_overlay.png
similarity index 100%
rename from src/main/resources/mob/sheep_overlay.png
rename to src/main/resources/assets/minecraft/textures/entity/sheep_overlay.png
diff --git a/src/main/resources/item/sign.png b/src/main/resources/assets/minecraft/textures/entity/sign.png
similarity index 100%
rename from src/main/resources/item/sign.png
rename to src/main/resources/assets/minecraft/textures/entity/sign.png
diff --git a/src/main/resources/mob/skeleton/0.png b/src/main/resources/assets/minecraft/textures/entity/skeleton/0.png
similarity index 100%
rename from src/main/resources/mob/skeleton/0.png
rename to src/main/resources/assets/minecraft/textures/entity/skeleton/0.png
diff --git a/src/main/resources/mob/skeleton/1.png b/src/main/resources/assets/minecraft/textures/entity/skeleton/1.png
similarity index 100%
rename from src/main/resources/mob/skeleton/1.png
rename to src/main/resources/assets/minecraft/textures/entity/skeleton/1.png
diff --git a/src/main/resources/mob/skeleton/2.png b/src/main/resources/assets/minecraft/textures/entity/skeleton/2.png
similarity index 100%
rename from src/main/resources/mob/skeleton/2.png
rename to src/main/resources/assets/minecraft/textures/entity/skeleton/2.png
diff --git a/src/main/resources/mob/skeleton/3.png b/src/main/resources/assets/minecraft/textures/entity/skeleton/3.png
similarity index 100%
rename from src/main/resources/mob/skeleton/3.png
rename to src/main/resources/assets/minecraft/textures/entity/skeleton/3.png
diff --git a/src/main/resources/mob/skeleton/4.png b/src/main/resources/assets/minecraft/textures/entity/skeleton/4.png
similarity index 100%
rename from src/main/resources/mob/skeleton/4.png
rename to src/main/resources/assets/minecraft/textures/entity/skeleton/4.png
diff --git a/src/main/resources/mob/slime/0.png b/src/main/resources/assets/minecraft/textures/entity/slime/0.png
similarity index 100%
rename from src/main/resources/mob/slime/0.png
rename to src/main/resources/assets/minecraft/textures/entity/slime/0.png
diff --git a/src/main/resources/mob/snowman/0.png b/src/main/resources/assets/minecraft/textures/entity/snowman/0.png
similarity index 100%
rename from src/main/resources/mob/snowman/0.png
rename to src/main/resources/assets/minecraft/textures/entity/snowman/0.png
diff --git a/src/main/resources/mob/snowman/1.png b/src/main/resources/assets/minecraft/textures/entity/snowman/1.png
similarity index 100%
rename from src/main/resources/mob/snowman/1.png
rename to src/main/resources/assets/minecraft/textures/entity/snowman/1.png
diff --git a/src/main/resources/mob/snowman/2.png b/src/main/resources/assets/minecraft/textures/entity/snowman/2.png
similarity index 100%
rename from src/main/resources/mob/snowman/2.png
rename to src/main/resources/assets/minecraft/textures/entity/snowman/2.png
diff --git a/src/main/resources/mob/snowman/3.png b/src/main/resources/assets/minecraft/textures/entity/snowman/3.png
similarity index 100%
rename from src/main/resources/mob/snowman/3.png
rename to src/main/resources/assets/minecraft/textures/entity/snowman/3.png
diff --git a/src/main/resources/mob/snowman/4.png b/src/main/resources/assets/minecraft/textures/entity/snowman/4.png
similarity index 100%
rename from src/main/resources/mob/snowman/4.png
rename to src/main/resources/assets/minecraft/textures/entity/snowman/4.png
diff --git a/src/main/resources/mob/spider/0.png b/src/main/resources/assets/minecraft/textures/entity/spider/0.png
similarity index 100%
rename from src/main/resources/mob/spider/0.png
rename to src/main/resources/assets/minecraft/textures/entity/spider/0.png
diff --git a/src/main/resources/mob/spider/1.png b/src/main/resources/assets/minecraft/textures/entity/spider/1.png
similarity index 100%
rename from src/main/resources/mob/spider/1.png
rename to src/main/resources/assets/minecraft/textures/entity/spider/1.png
diff --git a/src/main/resources/mob/spider/2.png b/src/main/resources/assets/minecraft/textures/entity/spider/2.png
similarity index 100%
rename from src/main/resources/mob/spider/2.png
rename to src/main/resources/assets/minecraft/textures/entity/spider/2.png
diff --git a/src/main/resources/mob/spider/3.png b/src/main/resources/assets/minecraft/textures/entity/spider/3.png
similarity index 100%
rename from src/main/resources/mob/spider/3.png
rename to src/main/resources/assets/minecraft/textures/entity/spider/3.png
diff --git a/src/main/resources/mob/spider_eyes.png b/src/main/resources/assets/minecraft/textures/entity/spider/eyes/0.png
similarity index 100%
rename from src/main/resources/mob/spider_eyes.png
rename to src/main/resources/assets/minecraft/textures/entity/spider/eyes/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/eyes/1.png b/src/main/resources/assets/minecraft/textures/entity/spider/eyes/1.png
new file mode 100644
index 000000000..45cd1daa3
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/entity/spider/eyes/1.png differ
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/eyes/2.png b/src/main/resources/assets/minecraft/textures/entity/spider/eyes/2.png
new file mode 100644
index 000000000..e5687ff05
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/entity/spider/eyes/2.png differ
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/eyes/3.png b/src/main/resources/assets/minecraft/textures/entity/spider/eyes/3.png
new file mode 100644
index 000000000..43145a612
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/entity/spider/eyes/3.png differ
diff --git a/src/main/resources/mob/squid/0.png b/src/main/resources/assets/minecraft/textures/entity/squid/0.png
similarity index 100%
rename from src/main/resources/mob/squid/0.png
rename to src/main/resources/assets/minecraft/textures/entity/squid/0.png
diff --git a/src/main/resources/mob/squid/1.png b/src/main/resources/assets/minecraft/textures/entity/squid/1.png
similarity index 100%
rename from src/main/resources/mob/squid/1.png
rename to src/main/resources/assets/minecraft/textures/entity/squid/1.png
diff --git a/src/main/resources/mob/squid/2.png b/src/main/resources/assets/minecraft/textures/entity/squid/2.png
similarity index 100%
rename from src/main/resources/mob/squid/2.png
rename to src/main/resources/assets/minecraft/textures/entity/squid/2.png
diff --git a/src/main/resources/mob/squid/3.png b/src/main/resources/assets/minecraft/textures/entity/squid/3.png
similarity index 100%
rename from src/main/resources/mob/squid/3.png
rename to src/main/resources/assets/minecraft/textures/entity/squid/3.png
diff --git a/src/main/resources/mob/wolf/0.png b/src/main/resources/assets/minecraft/textures/entity/wolf/0.png
similarity index 100%
rename from src/main/resources/mob/wolf/0.png
rename to src/main/resources/assets/minecraft/textures/entity/wolf/0.png
diff --git a/src/main/resources/mob/wolf_angry/0.png b/src/main/resources/assets/minecraft/textures/entity/wolf_angry/0.png
similarity index 100%
rename from src/main/resources/mob/wolf_angry/0.png
rename to src/main/resources/assets/minecraft/textures/entity/wolf_angry/0.png
diff --git a/src/main/resources/mob/wolf_tame/0.png b/src/main/resources/assets/minecraft/textures/entity/wolf_tame/0.png
similarity index 100%
rename from src/main/resources/mob/wolf_tame/0.png
rename to src/main/resources/assets/minecraft/textures/entity/wolf_tame/0.png
diff --git a/src/main/resources/mob/zombie/0.png b/src/main/resources/assets/minecraft/textures/entity/zombie/0.png
similarity index 100%
rename from src/main/resources/mob/zombie/0.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/0.png
diff --git a/src/main/resources/mob/zombie/1.png b/src/main/resources/assets/minecraft/textures/entity/zombie/1.png
similarity index 100%
rename from src/main/resources/mob/zombie/1.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/1.png
diff --git a/src/main/resources/mob/zombie/10.png b/src/main/resources/assets/minecraft/textures/entity/zombie/10.png
similarity index 100%
rename from src/main/resources/mob/zombie/10.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/10.png
diff --git a/src/main/resources/mob/zombie/11.png b/src/main/resources/assets/minecraft/textures/entity/zombie/11.png
similarity index 100%
rename from src/main/resources/mob/zombie/11.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/11.png
diff --git a/src/main/resources/mob/zombie/12.png b/src/main/resources/assets/minecraft/textures/entity/zombie/12.png
similarity index 100%
rename from src/main/resources/mob/zombie/12.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/12.png
diff --git a/src/main/resources/mob/zombie/13.png b/src/main/resources/assets/minecraft/textures/entity/zombie/13.png
similarity index 100%
rename from src/main/resources/mob/zombie/13.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/13.png
diff --git a/src/main/resources/mob/zombie/14.png b/src/main/resources/assets/minecraft/textures/entity/zombie/14.png
similarity index 100%
rename from src/main/resources/mob/zombie/14.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/14.png
diff --git a/src/main/resources/mob/zombie/15.png b/src/main/resources/assets/minecraft/textures/entity/zombie/15.png
similarity index 100%
rename from src/main/resources/mob/zombie/15.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/15.png
diff --git a/src/main/resources/mob/zombie/2.png b/src/main/resources/assets/minecraft/textures/entity/zombie/2.png
similarity index 100%
rename from src/main/resources/mob/zombie/2.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/2.png
diff --git a/src/main/resources/mob/zombie/3.png b/src/main/resources/assets/minecraft/textures/entity/zombie/3.png
similarity index 100%
rename from src/main/resources/mob/zombie/3.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/3.png
diff --git a/src/main/resources/mob/zombie/4.png b/src/main/resources/assets/minecraft/textures/entity/zombie/4.png
similarity index 100%
rename from src/main/resources/mob/zombie/4.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/4.png
diff --git a/src/main/resources/mob/zombie/5.png b/src/main/resources/assets/minecraft/textures/entity/zombie/5.png
similarity index 100%
rename from src/main/resources/mob/zombie/5.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/5.png
diff --git a/src/main/resources/mob/zombie/6.png b/src/main/resources/assets/minecraft/textures/entity/zombie/6.png
similarity index 100%
rename from src/main/resources/mob/zombie/6.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/6.png
diff --git a/src/main/resources/mob/zombie/7.png b/src/main/resources/assets/minecraft/textures/entity/zombie/7.png
similarity index 100%
rename from src/main/resources/mob/zombie/7.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/7.png
diff --git a/src/main/resources/mob/zombie/8.png b/src/main/resources/assets/minecraft/textures/entity/zombie/8.png
similarity index 100%
rename from src/main/resources/mob/zombie/8.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/8.png
diff --git a/src/main/resources/mob/zombie/9.png b/src/main/resources/assets/minecraft/textures/entity/zombie/9.png
similarity index 100%
rename from src/main/resources/mob/zombie/9.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie/9.png
diff --git a/src/main/resources/mob/zombie_armored/0.png b/src/main/resources/assets/minecraft/textures/entity/zombie_armored/0.png
similarity index 100%
rename from src/main/resources/mob/zombie_armored/0.png
rename to src/main/resources/assets/minecraft/textures/entity/zombie_armored/0.png
diff --git a/src/common/resources/achievement/bg.png b/src/main/resources/assets/minecraft/textures/gui/achievement/bg.png
similarity index 100%
rename from src/common/resources/achievement/bg.png
rename to src/main/resources/assets/minecraft/textures/gui/achievement/bg.png
diff --git a/src/main/resources/gui/background-loading-nether.png b/src/main/resources/assets/minecraft/textures/gui/background-loading-nether.png
similarity index 100%
rename from src/main/resources/gui/background-loading-nether.png
rename to src/main/resources/assets/minecraft/textures/gui/background-loading-nether.png
diff --git a/src/main/resources/gui/background-loading-paradise.png b/src/main/resources/assets/minecraft/textures/gui/background-loading-paradise.png
similarity index 100%
rename from src/main/resources/gui/background-loading-paradise.png
rename to src/main/resources/assets/minecraft/textures/gui/background-loading-paradise.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/background.png b/src/main/resources/assets/minecraft/textures/gui/background.png
new file mode 100644
index 000000000..b29e0092a
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/gui/background.png differ
diff --git a/src/main/resources/gui/blastfurnace.png b/src/main/resources/assets/minecraft/textures/gui/blastfurnace.png
similarity index 100%
rename from src/main/resources/gui/blastfurnace.png
rename to src/main/resources/assets/minecraft/textures/gui/blastfurnace.png
diff --git a/src/main/resources/gui/container.png b/src/main/resources/assets/minecraft/textures/gui/container.png
similarity index 100%
rename from src/main/resources/gui/container.png
rename to src/main/resources/assets/minecraft/textures/gui/container.png
diff --git a/src/main/resources/gui/controller/xbox360.png b/src/main/resources/assets/minecraft/textures/gui/controller/xbox360.png
similarity index 100%
rename from src/main/resources/gui/controller/xbox360.png
rename to src/main/resources/assets/minecraft/textures/gui/controller/xbox360.png
diff --git a/src/main/resources/gui/controller/xbox360.psd b/src/main/resources/assets/minecraft/textures/gui/controller/xbox360.psd
similarity index 100%
rename from src/main/resources/gui/controller/xbox360.psd
rename to src/main/resources/assets/minecraft/textures/gui/controller/xbox360.psd
diff --git a/src/main/resources/gui/crafting.png b/src/main/resources/assets/minecraft/textures/gui/crafting.png
similarity index 100%
rename from src/main/resources/gui/crafting.png
rename to src/main/resources/assets/minecraft/textures/gui/crafting.png
diff --git a/src/main/resources/gui/creative.png b/src/main/resources/assets/minecraft/textures/gui/creative.png
similarity index 100%
rename from src/main/resources/gui/creative.png
rename to src/main/resources/assets/minecraft/textures/gui/creative.png
diff --git a/src/main/resources/gui/designer_bg.png b/src/main/resources/assets/minecraft/textures/gui/designer_bg.png
similarity index 100%
rename from src/main/resources/gui/designer_bg.png
rename to src/main/resources/assets/minecraft/textures/gui/designer_bg.png
diff --git a/src/main/resources/gui/doom.png b/src/main/resources/assets/minecraft/textures/gui/doom.png
similarity index 100%
rename from src/main/resources/gui/doom.png
rename to src/main/resources/assets/minecraft/textures/gui/doom.png
diff --git a/src/main/resources/gui/flag.png b/src/main/resources/assets/minecraft/textures/gui/flag.png
similarity index 100%
rename from src/main/resources/gui/flag.png
rename to src/main/resources/assets/minecraft/textures/gui/flag.png
diff --git a/src/main/resources/gui/flag_editor.png b/src/main/resources/assets/minecraft/textures/gui/flag_editor.png
similarity index 100%
rename from src/main/resources/gui/flag_editor.png
rename to src/main/resources/assets/minecraft/textures/gui/flag_editor.png
diff --git a/src/main/resources/gui/furnace.png b/src/main/resources/assets/minecraft/textures/gui/furnace.png
similarity index 100%
rename from src/main/resources/gui/furnace.png
rename to src/main/resources/assets/minecraft/textures/gui/furnace.png
diff --git a/src/main/resources/gui/gui.png b/src/main/resources/assets/minecraft/textures/gui/gui.png
similarity index 100%
rename from src/main/resources/gui/gui.png
rename to src/main/resources/assets/minecraft/textures/gui/gui.png
diff --git a/src/main/resources/gui/guidebook/cover.png b/src/main/resources/assets/minecraft/textures/gui/guidebook/cover.png
similarity index 100%
rename from src/main/resources/gui/guidebook/cover.png
rename to src/main/resources/assets/minecraft/textures/gui/guidebook/cover.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/guidebook/guidebook.png b/src/main/resources/assets/minecraft/textures/gui/guidebook/guidebook.png
new file mode 100644
index 000000000..b217752d6
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/gui/guidebook/guidebook.png differ
diff --git a/src/main/resources/gui/guidebook/mob.png b/src/main/resources/assets/minecraft/textures/gui/guidebook/mob.png
similarity index 100%
rename from src/main/resources/gui/guidebook/mob.png
rename to src/main/resources/assets/minecraft/textures/gui/guidebook/mob.png
diff --git a/src/main/resources/gui/icons.png b/src/main/resources/assets/minecraft/textures/gui/icons.png
similarity index 100%
rename from src/main/resources/gui/icons.png
rename to src/main/resources/assets/minecraft/textures/gui/icons.png
diff --git a/src/main/resources/gui/inventory.png b/src/main/resources/assets/minecraft/textures/gui/inventory.png
similarity index 100%
rename from src/main/resources/gui/inventory.png
rename to src/main/resources/assets/minecraft/textures/gui/inventory.png
diff --git a/src/main/resources/gui/logo.png b/src/main/resources/assets/minecraft/textures/gui/logo.png
similarity index 100%
rename from src/main/resources/gui/logo.png
rename to src/main/resources/assets/minecraft/textures/gui/logo.png
diff --git a/src/main/resources/gui/particles.png b/src/main/resources/assets/minecraft/textures/gui/particles.png
similarity index 100%
rename from src/main/resources/gui/particles.png
rename to src/main/resources/assets/minecraft/textures/gui/particles.png
diff --git a/src/main/resources/gui/scroll.png b/src/main/resources/assets/minecraft/textures/gui/scroll.png
similarity index 100%
rename from src/main/resources/gui/scroll.png
rename to src/main/resources/assets/minecraft/textures/gui/scroll.png
diff --git a/src/main/resources/gui/sign_images.pdn b/src/main/resources/assets/minecraft/textures/gui/sign_images.pdn
similarity index 100%
rename from src/main/resources/gui/sign_images.pdn
rename to src/main/resources/assets/minecraft/textures/gui/sign_images.pdn
diff --git a/src/main/resources/gui/sign_images.png b/src/main/resources/assets/minecraft/textures/gui/sign_images.png
similarity index 100%
rename from src/main/resources/gui/sign_images.png
rename to src/main/resources/assets/minecraft/textures/gui/sign_images.png
diff --git a/src/main/resources/gui/slot.png b/src/main/resources/assets/minecraft/textures/gui/slot.png
similarity index 100%
rename from src/main/resources/gui/slot.png
rename to src/main/resources/assets/minecraft/textures/gui/slot.png
diff --git a/src/main/resources/gui/titlebackground.png b/src/main/resources/assets/minecraft/textures/gui/titlebackground.png
similarity index 100%
rename from src/main/resources/gui/titlebackground.png
rename to src/main/resources/assets/minecraft/textures/gui/titlebackground.png
diff --git a/src/main/resources/gui/tooltip/battle_ui.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/battle_ui.png
similarity index 100%
rename from src/main/resources/gui/tooltip/battle_ui.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/battle_ui.png
diff --git a/src/main/resources/gui/tooltip/comfy.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/comfy.png
similarity index 100%
rename from src/main/resources/gui/tooltip/comfy.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/comfy.png
diff --git a/src/main/resources/gui/tooltip/creep-o-vision.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/creep-o-vision.png
similarity index 100%
rename from src/main/resources/gui/tooltip/creep-o-vision.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/creep-o-vision.png
diff --git a/src/main/resources/gui/tooltip/crt.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/crt.png
similarity index 100%
rename from src/main/resources/gui/tooltip/crt.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/crt.png
diff --git a/src/main/resources/gui/tooltip/default.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/default.png
similarity index 100%
rename from src/main/resources/gui/tooltip/default.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/default.png
diff --git a/src/main/resources/gui/tooltip/detailed.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/detailed.png
similarity index 100%
rename from src/main/resources/gui/tooltip/detailed.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/detailed.png
diff --git a/src/main/resources/gui/tooltip/interdimensional.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/interdimensional.png
similarity index 100%
rename from src/main/resources/gui/tooltip/interdimensional.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/interdimensional.png
diff --git a/src/main/resources/gui/tooltip/noteblock.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/noteblock.png
similarity index 100%
rename from src/main/resources/gui/tooltip/noteblock.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/noteblock.png
diff --git a/src/main/resources/gui/tooltip/picnic.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/picnic.png
similarity index 100%
rename from src/main/resources/gui/tooltip/picnic.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/picnic.png
diff --git a/src/main/resources/gui/tooltip/planks.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/planks.png
similarity index 100%
rename from src/main/resources/gui/tooltip/planks.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/planks.png
diff --git a/src/main/resources/gui/tooltip/redstone_goggles.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/redstone_goggles.png
similarity index 100%
rename from src/main/resources/gui/tooltip/redstone_goggles.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/redstone_goggles.png
diff --git a/src/main/resources/gui/tooltip/retro.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/retro.png
similarity index 100%
rename from src/main/resources/gui/tooltip/retro.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/retro.png
diff --git a/src/main/resources/gui/tooltip/rpg.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/rpg.png
similarity index 100%
rename from src/main/resources/gui/tooltip/rpg.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/rpg.png
diff --git a/src/main/resources/gui/tooltip/steve.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/steve.png
similarity index 100%
rename from src/main/resources/gui/tooltip/steve.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/steve.png
diff --git a/src/main/resources/gui/tooltip/stone.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/stone.png
similarity index 100%
rename from src/main/resources/gui/tooltip/stone.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/stone.png
diff --git a/src/main/resources/gui/tooltip/template.png b/src/main/resources/assets/minecraft/textures/gui/tooltip/template.png
similarity index 100%
rename from src/main/resources/gui/tooltip/template.png
rename to src/main/resources/assets/minecraft/textures/gui/tooltip/template.png
diff --git a/src/main/resources/gui/trap.png b/src/main/resources/assets/minecraft/textures/gui/trap.png
similarity index 100%
rename from src/main/resources/gui/trap.png
rename to src/main/resources/assets/minecraft/textures/gui/trap.png
diff --git a/src/main/resources/gui/trommel.png b/src/main/resources/assets/minecraft/textures/gui/trommel.png
similarity index 100%
rename from src/main/resources/gui/trommel.png
rename to src/main/resources/assets/minecraft/textures/gui/trommel.png
diff --git a/src/main/resources/gui/unknown_pack.png b/src/main/resources/assets/minecraft/textures/gui/unknown_pack.png
similarity index 100%
rename from src/main/resources/gui/unknown_pack.png
rename to src/main/resources/assets/minecraft/textures/gui/unknown_pack.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_glass_tinted.png b/src/main/resources/assets/minecraft/textures/item/door_glass_tinted.png
new file mode 100644
index 000000000..6ee8a8946
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/item/door_glass_tinted.png differ
diff --git a/src/main/resources/mob/variants.json b/src/main/resources/entity/variants.json
similarity index 100%
rename from src/main/resources/mob/variants.json
rename to src/main/resources/entity/variants.json
diff --git a/src/main/resources/gui/guidebook/guidebook.png b/src/main/resources/gui/guidebook/guidebook.png
deleted file mode 100644
index fd18c8f18..000000000
Binary files a/src/main/resources/gui/guidebook/guidebook.png and /dev/null differ
diff --git a/src/main/resources/gui/items.png b/src/main/resources/gui/items.png
deleted file mode 100644
index fb814b554..000000000
Binary files a/src/main/resources/gui/items.png and /dev/null differ
diff --git a/src/main/resources/terrain.png b/src/main/resources/terrain.png
deleted file mode 100644
index d5a427f34..000000000
Binary files a/src/main/resources/terrain.png and /dev/null differ
