diff --git a/devPacks/inTestingSoundsPack/assets/minecraft/sounds/sounds.json b/devPacks/inTestingSoundsPack/assets/minecraft/sounds/sounds.json
index b8a2026d6..73da5471f 100644
--- a/devPacks/inTestingSoundsPack/assets/minecraft/sounds/sounds.json
+++ b/devPacks/inTestingSoundsPack/assets/minecraft/sounds/sounds.json
@@ -47,19 +47,19 @@
         ]
     },
     "note.chant": {
-        "subtitle": "subtitle.note.chant",
+        "subtitle": "subtitles.note.chant",
         "sounds": [
             "note/chant.ogg"
         ]
     },
     "note.drum_steel": {
-        "subtitle": "subtitle.note.drum_steel",
+        "subtitle": "subtitles.note.drum_steel",
         "sounds": [
             "note/drum_steel.ogg"
         ]
     },
     "note.chip_triangle": {
-        "subtitle": "subtitle.note.chip_triangle",
+        "subtitle": "subtitles.note.chip_triangle",
         "sounds": [
             {
                 "name": "note/chip_triangle.ogg",
@@ -68,7 +68,7 @@
         ]
     },
     "note.guitar_electric": {
-        "subtitle": "subtitle.note.guitar_electric",
+        "subtitle": "subtitles.note.guitar_electric",
         "sounds": [
             {
                 "name": "note/guitar_electric.ogg",
@@ -77,13 +77,13 @@
         ]
     },
     "note.celesta": {
-        "subtitle": "subtitle.note.celesta",
+        "subtitle": "subtitles.note.celesta",
         "sounds": [
             "note/celesta.ogg"
         ]
     },
     "note.wood_block": {
-        "subtitle": "subtitle.note.wood_block",
+        "subtitle": "subtitles.note.wood_block",
         "sounds": [
             "note/wood_block.ogg"
         ]
diff --git a/src/common/resources/assets/minecraft/sounds/sounds.json b/src/common/resources/assets/minecraft/sounds/sounds.json
index 645098d9f..4b311630a 100644
--- a/src/common/resources/assets/minecraft/sounds/sounds.json
+++ b/src/common/resources/assets/minecraft/sounds/sounds.json
@@ -44,6 +44,39 @@
       "random/door_open.ogg"
     ]
   },
+  "random.bite": {
+    "subtitle": "subtitles.random.bite",
+    "sounds": [
+      "random/bite.ogg"
+    ]
+  },
+  "random.bite_extended": {
+    "subtitle": "subtitles.random.bite",
+    "sounds": [
+      "random/bite.ogg"
+    ]
+  },
+  "random.equip": {
+    "subtitle": "subtitles.random.equip",
+    "sounds": [
+      "random/equip.ogg"
+    ]
+  },
+  "random.page": {
+    "sounds": [
+      "random/page.ogg"
+    ]
+  },
+  "random.whoose.in": {
+    "sounds": [
+      "random/whoosh_in.ogg"
+    ]
+  },
+  "random.whoose.out": {
+    "sounds": [
+      "random/whoosh_out.ogg"
+    ]
+  },
   "mob.spider": {
     "subtitle": "subtitles.mob.spider",
     "sounds": [
@@ -143,6 +176,48 @@
       "note/harp.ogg"
     ]
   },
+  "note.chant": {
+    "subtitle": "subtitles.note.chant",
+    "sounds": [
+      "note/chant.ogg"
+    ]
+  },
+  "note.drum_steel": {
+    "subtitle": "subtitles.note.drum_steel",
+    "sounds": [
+      "note/drum_steel.ogg"
+    ]
+  },
+  "note.chip_triangle": {
+    "subtitle": "subtitles.note.chip_triangle",
+    "sounds": [
+      {
+        "name": "note/chip_triangle.ogg",
+        "volume": 2
+      }
+    ]
+  },
+  "note.guitar_electric": {
+    "subtitle": "subtitles.note.guitar_electric",
+    "sounds": [
+      {
+        "name": "note/guitar_electric.ogg",
+        "volume": 0.75
+      }
+    ]
+  },
+  "note.celesta": {
+    "subtitle": "subtitles.note.celesta",
+    "sounds": [
+      "note/celesta.ogg"
+    ]
+  },
+  "note.wood_block": {
+    "subtitle": "subtitles.note.wood_block",
+    "sounds": [
+      "note/wood_block.ogg"
+    ]
+  },
   "step.snow": {
     "sounds": [
       "step/snow1.ogg",
@@ -151,6 +226,14 @@
       "step/snow4.ogg"
     ]
   },
+  "step.permafrost": {
+    "sounds": [
+      "step/permafrost1.ogg",
+      "step/permafrost2.ogg",
+      "step/permafrost3.ogg",
+      "step/permafrost4.ogg"
+    ]
+  },
   "mob.wolf.whine": {
     "subtitle": "subtitles.mob.wolf.whine",
     "sounds": [
@@ -619,6 +702,104 @@
       "mob/wolf/shake.ogg"
     ]
   },
+  "tile.dispenser.click": {
+    "subtitle": "subtitles.tile.dispenser.click",
+    "sounds": [
+      {
+        "name": "random.click",
+        "type": "event",
+        "pitch": 1.2
+      }
+    ]
+  },
+  "tile.dispenser.eject": {
+    "subtitle": "subtitles.tile.dispenser.eject",
+    "sounds": [
+      {
+        "name": "random.click",
+        "type": "event"
+      }
+    ]
+  },
+  "tile.dispenser.fire": {
+    "subtitle": "subtitles.tile.dispenser.fire",
+    "sounds": [
+      {
+        "name": "random.bow",
+        "type": "event",
+        "pitch": 1.2
+      }
+    ]
+  },
+  "tile.activator.click": {
+    "subtitle": "subtitles.tile.activator.click",
+    "sounds": [
+      {
+        "name": "random.click",
+        "type": "event",
+        "pitch": 1.2
+      }
+    ]
+  },
+  "tile.activator.use": {
+    "subtitle": "subtitles.tile.activator.use",
+    "sounds": [
+      {
+        "name": "random.pop",
+        "type": "event",
+        "pitch": 0.6
+      }
+    ]
+  },
+  "item.pickup": {
+    "subtitle": "subtitles.item.pickup",
+    "sounds": [
+      {
+        "name": "random.pop",
+        "type": "event",
+        "volume": 0.2,
+        "pitch": 0.5
+      }
+    ]
+  },
+  "tile.tnt.fuse": {
+    "subtitle": "subtitles.tile.tnt.fuse",
+    "sounds": [
+      {
+        "name": "random.fuse",
+        "type": "event"
+      }
+    ]
+  },
+  "mob.creeper.fuse": {
+    "subtitle": "subtitles.mob.creeper.fuse",
+    "sounds": [
+      {
+        "name": "random.fuse",
+        "type": "event",
+        "pitch": 0.5
+      }
+    ]
+  },
+  "random.skate": {
+    "subtitle": "subtitles.random.skate",
+    "sounds": [
+      {
+        "name": "random.fuse",
+        "type": "event"
+      }
+    ]
+  },
+  "tile.sensor_block.sense": {
+    "subtitle": "subtitles.tile.sensor_block.sense",
+    "sounds": [
+      {
+        "name": "random.breath",
+        "type": "event",
+        "volume": 0.5
+      }
+    ]
+  },
   "record.mall": {
     "sounds": [
       {
@@ -698,7 +879,7 @@
   "record.wait": {
     "sounds": [
       {
-        "name": "record/wait.mus",
+        "name": "record/wait.ogg",
         "volume": 0.5,
         "attenuation_distance": 64,
         "stream": true
diff --git a/src/common/resources/lang/en_US/item.lang b/src/common/resources/lang/en_US/item.lang
index 5c68d7bfb..cb71745cc 100644
--- a/src/common/resources/lang/en_US/item.lang
+++ b/src/common/resources/lang/en_US/item.lang
@@ -206,7 +206,7 @@ item.minecart.chest.name=Minecart with Chest
 item.minecart.chest.desc=Great for transporting goods across a rail network.
 item.minecart.furnace.name=Minecart with Furnace
 item.minecart.furnace.desc=Pushes itself forward when fuelled.
-item.egg.chicken.name=Chicken Egg
+item.egg.chicken.name=Egg
 item.egg.chicken.desc=Egg.
 item.tool.compass.name=Compass
 item.tool.compass.desc=Always points to home.
diff --git a/src/common/resources/lang/en_US/subtitles.lang b/src/common/resources/lang/en_US/subtitles.lang
index 3cb37f19b..2853ba3af 100644
--- a/src/common/resources/lang/en_US/subtitles.lang
+++ b/src/common/resources/lang/en_US/subtitles.lang
@@ -31,6 +31,7 @@ subtitles.mob.ghast.scream=Ghast Scream
 subtitles.mob.ghast.affectionate_scream=Ghast affectionate scream
 subtitles.mob.creeper=Creeper hiss
 subtitles.mob.creeper.death=Creeper death
+subtitles.mob.creeper.fuse=Creeper fuse
 subtitles.mob.spider.death=Spider death
 subtitles.mob.spider=Spider hiss
 subtitles.mob.ghast.charge=Ghast charging
@@ -49,9 +50,12 @@ subtitles.portal.portal=Portal ambience
 subtitles.portal.trigger=Portal trigger
 subtitles.portal.travel=Portal travel
 
+subtitles.item.pickup=Item pickup
+
 subtitles.random.fizz=Fizzing
 subtitles.random.drr=Arrow drr
 subtitles.random.fuse=Fuse lit
+subtitles.random.skate=Skating
 subtitles.random.pop=Pop
 subtitles.random.glass=Glass
 subtitles.random.door_open=Door opened
@@ -71,6 +75,12 @@ subtitles.note.bd=Note bd
 subtitles.note.pling=Note pling
 subtitles.note.hat=Note hat
 subtitles.note.bassattack=Note bass attack
+subtitles.note.chant=Note chant
+subtitles.note.drum_steel=Note steel drum
+subtitles.note.chip_triangle=Note triangle wave
+subtitles.note.guitar_electric=Note electric guitar
+subtitles.note.celesta=Note celesta
+subtitles.note.wood_block=Note wood block
 
 subtitles.ambient.weather.thunder=Thunder
 subtitles.ambient.cave=Cave ambience
@@ -79,6 +89,16 @@ subtitles.ambient.weather.rain=Rainfall
 subtitles.tile.piston.out=Piston extended
 subtitles.tile.piston.in=Piston retracted
 
+subtitles.tile.tnt.fuse=TNT lit
+subtitles.tile.sensor_block.sense=Mob sensed
+
+subtitles.tile.dispenser.click=Dispenser click
+subtitles.tile.dispenser.eject=Dispenser eject
+subtitles.tile.dispenser.fire=Dispenser fire
+
+subtitles.tile.activator.click=Activator click
+subtitles.tile.activator.use=Activator use
+
 subtitles.hurt.flesh=Hurt flesh
 
 subtitles.fire.ignite=Fire lit
diff --git a/src/common/resources/lang/en_US/tile.lang b/src/common/resources/lang/en_US/tile.lang
index fd26d17bd..c3019c539 100644
--- a/src/common/resources/lang/en_US/tile.lang
+++ b/src/common/resources/lang/en_US/tile.lang
@@ -1 +1 @@
-tile.stone.name=Stone
tile.stone.desc=A block of solid stone.
tile.basalt.name=Basalt
tile.basalt.desc=A block of solid basalt.
tile.limestone.name=Limestone
tile.limestone.desc=A block of solid limestone.
tile.granite.name=Granite
tile.granite.desc=A block of solid granite.
tile.marble.name=Marble
tile.marble.desc=A block of solid marble.
tile.slate.name=Slate
tile.slate.desc=A block of solid slate.
tile.permafrost.name=Permafrost
tile.permafrost.desc=A block of frozen stone.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tile.piston.base.name=Piston
tile.piston.base.desc=Pushes blocks but does not pull them.
tile.piston.base.sticky.name=Sticky Piston
tile.piston.base.sticky.desc=Pushes and pulls blocks.
tile.piston.head.name=Piston Head
tile.piston.head.desc=The pushy part of the piston.
tile.piston.moving.name=Piston Mover
tile.piston.moving.desc=The invisible moving part of the piston.
tile.piston.base.steel.name=Reinforced Piston
tile.piston.base.steel.desc=Pushes blocks and entities with immense force.
tile.piston.head.steel.name=Reinforced Piston Head
tile.piston.head.steel.desc=The pushy part of the steel 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.activator.cobble.netherrack.name=Activator
tile.activator.cobble.netherrack.desc=Uses items for you.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tile.fence.planks.oak.name=Wooden 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.brick.steel.name=Steel Bricks
tile.brick.steel.desc=Stacked bricks of steel.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tile.lever.cobble.stone.name=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.piston.base.steel.name=Reinforced Piston
tile.piston.base.steel.desc=Pushes blocks and entities with immense force.
tile.piston.head.steel.name=Reinforced Piston Head
tile.piston.head.steel.desc=The pushy part of the steel 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.activator.cobble.netherrack.name=Activator
tile.activator.cobble.netherrack.desc=Uses items for you.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 Wooden Trapdoor
tile.trapdoor.planks.oak.painted.black.desc=Like a door, but flat and painted black.
tile.trapdoor.planks.oak.painted.red.name=Red Wooden Trapdoor
tile.trapdoor.planks.oak.painted.red.desc=Like a door, but flat and painted red.
tile.trapdoor.planks.oak.painted.green.name=Green Wooden Trapdoor
tile.trapdoor.planks.oak.painted.green.desc=Like a door, but flat and painted green.
tile.trapdoor.planks.oak.painted.brown.name=Brown Wooden Trapdoor
tile.trapdoor.planks.oak.painted.brown.desc=Like a door, but flat and painted brown.
tile.trapdoor.planks.oak.painted.blue.name=Blue Wooden Trapdoor
tile.trapdoor.planks.oak.painted.blue.desc=Like a door, but flat and painted blue.
tile.trapdoor.planks.oak.painted.purple.name=Purple Wooden Trapdoor
tile.trapdoor.planks.oak.painted.purple.desc=Like a door, but flat and painted purple.
tile.trapdoor.planks.oak.painted.cyan.name=Cyan Wooden 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 Wooden 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 Wooden Trapdoor
tile.trapdoor.planks.oak.painted.gray.desc=Like a door, but flat and painted gray.
tile.trapdoor.planks.oak.painted.pink.name=Pink Wooden Trapdoor
tile.trapdoor.planks.oak.painted.pink.desc=Like a door, but flat and painted pink.
tile.trapdoor.planks.oak.painted.lime.name=Lime Wooden Trapdoor
tile.trapdoor.planks.oak.painted.lime.desc=Like a door, but flat and painted lime.
tile.trapdoor.planks.oak.painted.yellow.name=Yellow Wooden 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 Wooden 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 Wooden Trapdoor
tile.trapdoor.planks.oak.painted.magenta.desc=Like a door, but flat and painted magenta.
tile.trapdoor.planks.oak.painted.orange.name=Orange Wooden Trapdoor
tile.trapdoor.planks.oak.painted.orange.desc=Like a door, but flat and painted orange.
tile.trapdoor.planks.oak.painted.white.name=White Wooden Trapdoor
tile.trapdoor.planks.oak.painted.white.desc=Like a door, but flat and painted white.

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

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

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

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

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

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

tile.rope.name=Rope
tile.rope.desc=Rope, rope, rope your boat.
\ No newline at end of file
diff --git a/src/main/java/net/minecraft/client/Minecraft.java b/src/main/java/net/minecraft/client/Minecraft.java
index 44fd0e8b2..7f00ea053 100644
--- a/src/main/java/net/minecraft/client/Minecraft.java
+++ b/src/main/java/net/minecraft/client/Minecraft.java
@@ -28,12 +28,14 @@ import net.minecraft.client.holiday.Holidays;
 import net.minecraft.client.world.chunk.provider.ChunkProviderStatic;
 import net.minecraft.core.achievement.Achievements;
 import net.minecraft.core.net.command.util.CommandHelper;
+import net.minecraft.core.util.helper.DyeColor;
 import net.minecraft.core.util.helper.LoggedPrintStream;
 import net.minecraft.core.util.helper.UUIDHelper;
 import net.minecraft.core.world.SpawnerMobs;
 import net.minecraft.core.world.type.WorldType;
 import net.minecraft.core.world.type.WorldTypeGroups;
 
+import javax.imageio.ImageIO;
 import javax.swing.JLabel;
 import javax.swing.JOptionPane;
 
@@ -378,6 +380,7 @@ public class Minecraft
     
     public void startGame() throws LWJGLException
     {
+        ImageIO.setUseCache(false); // Speeds up boot time
         LOGGER.info("LWJGL version = {}", org.lwjgl.Sys.getVersion());
         if (Integer.parseInt(org.lwjgl.Sys.getVersion().substring(0, 1)) < 3) {
             JOptionPane.showMessageDialog(null,
@@ -928,7 +931,7 @@ public class Minecraft
                         catch(MinecraftException e)
                         {
                             theWorld = null;
-                            LOGGER.error("MinecraftException occurred while attempting to run tick, existing world!", e);
+                            LOGGER.error("MinecraftException occurred while attempting to run tick, exiting world!", e);
                         }
                         changeWorld(null);
                         displayScreen(new ConflictWarningScreen());
@@ -946,7 +949,11 @@ public class Minecraft
                     if(theWorld != null)
                     {
                     	Debug.change("updatelight");
-                        theWorld.updatingLighting();
+                        try {
+                            theWorld.updatingLighting();
+                        } catch (Throwable t) {
+                            LOGGER.error("Unhandled exception when updating lighting!", t);
+                        }
                         Debug.change("misc");
                     }
                     
@@ -1042,6 +1049,13 @@ public class Minecraft
                 }
                 catch(Throwable throwable)
                 {
+                    if (theWorld != null) {
+                        try {
+                            changeWorld(null);
+                        } catch (Throwable t) {
+                            LOGGER.error("Exception when panic leaving world!", t);
+                        }
+                    }
                     freeUpMemory();
                     onMinecraftCrash(new UnexpectedThrowable("Unexpected error", throwable));	
                 }
@@ -1680,13 +1694,33 @@ public class Minecraft
                 {
                     theWorld.lightningFlicker--;
                 }
-                theWorld.updateEntities();
+                try {
+                    theWorld.updateEntities();
+                } catch (StackOverflowError stackOverflowError) {
+                    LOGGER.error("Stack overflow while updating world entities! Closing world!", stackOverflowError);
+                    changeWorld(null);
+                    throw new RuntimeException(stackOverflowError);
+                } catch (Throwable t) {
+                    LOGGER.error("Unhandled exception while updating world entities! Closing world!", t);
+                    changeWorld(null);
+                    throw t;
+                }
                 Debug.change("misc");
             }
             if(!isGamePaused || isMultiplayerWorld())
             {
                 Debug.change("world");
-                theWorld.tick();
+                try {
+                    theWorld.tick();
+                } catch (StackOverflowError stackOverflowError) {
+                    LOGGER.error("Stack overflow while updating world entities! Closing world!", stackOverflowError);
+                    changeWorld(null);
+                    throw new RuntimeException(stackOverflowError);
+                } catch (Throwable t) {
+                    LOGGER.error("Unhandled exception while ticking world! Closing world!", t);
+                    changeWorld(null);
+                    throw t;
+                }
                 Debug.change("misc");
             }
             if(!isGamePaused && theWorld != null)
@@ -2132,7 +2166,7 @@ public class Minecraft
         }
     }
 
-    public void usePortal(int dim)
+    public void usePortal(int dim, @Nullable DyeColor portalColor)
     {
         Dimension lastDim = Dimension.getDimensionList().get(thePlayer.dimension);
         Dimension newDim = Dimension.getDimensionList().get(dim);
@@ -2179,7 +2213,7 @@ public class Minecraft
         {
             thePlayer.moveTo(x, y, z, thePlayer.yRot, thePlayer.xRot);
             theWorld.updateEntityWithOptionalForce(thePlayer, false);
-            (new PortalHandler()).teleportEntity(theWorld, thePlayer, lastDim, newDim);
+            (new PortalHandler()).teleportEntity(theWorld, thePlayer, portalColor, lastDim, newDim);
         }
     }
 
@@ -2395,7 +2429,7 @@ public class Minecraft
     	@Nullable Player previousPlayer = thePlayer;
         if(!theWorld.isClientSide && !theWorld.dimension.defaultWorldType.mayRespawn())
         {
-            usePortal(targetDimension);
+            usePortal(targetDimension, null);
         }
 
         ChunkCoordinates spawnCoordinates = null;
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleDispatcher.java b/src/main/java/net/minecraft/client/entity/particle/ParticleDispatcher.java
index f5a6351f7..7eb242902 100644
--- a/src/main/java/net/minecraft/client/entity/particle/ParticleDispatcher.java
+++ b/src/main/java/net/minecraft/client/entity/particle/ParticleDispatcher.java
@@ -37,7 +37,7 @@ public final class ParticleDispatcher extends Dispatcher<String, ParticleLambda>
         addDispatch("bubble", (world, x, y, z, motionX, motionY, motionZ, data) -> new BubbleParticle(world, x, y, z, motionX, motionY, motionZ, true));
         addDispatch("smoke", (world, x, y, z, motionX, motionY, motionZ, data) -> new SmokeParticle(world, x, y, z, motionX, motionY, motionX));
         addDispatch("note", (world, x, y, z, motionX, motionY, motionZ, data) -> new NoteParticle(world, x, y, z, motionX, motionY, motionX, data));
-        addDispatch("portal", (world, x, y, z, motionX, motionY, motionZ, data) -> new PortalParticle(world, x, y, z, motionX, motionY, motionX));
+        addDispatch("portal", (world, x, y, z, motionX, motionY, motionZ, data) -> new PortalParticle(world, x, y, z, motionX, motionY, motionX, data));
         addDispatch("explode", (world, x, y, z, motionX, motionY, motionZ, data) -> new ExplodeParticle(world, x, y, z, motionX, motionY, motionX));
         addDispatch("flame", (world, x, y, z, motionX, motionY, motionZ, data) -> new FlameParticle(world, x, y, z, motionX, motionY, motionX, FlameParticle.Type.ORANGE));
         addDispatch("blueflame", (world, x, y, z, motionX, motionY, motionZ, data) -> new FlameParticle(world, x, y, z, motionX, motionY, motionX, FlameParticle.Type.BLUE));
diff --git a/src/main/java/net/minecraft/client/entity/particle/PortalParticle.java b/src/main/java/net/minecraft/client/entity/particle/PortalParticle.java
index 5fb1b84f6..557b522ba 100644
--- a/src/main/java/net/minecraft/client/entity/particle/PortalParticle.java
+++ b/src/main/java/net/minecraft/client/entity/particle/PortalParticle.java
@@ -2,6 +2,8 @@ package net.minecraft.client.entity.particle;
 
 import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessellator.Tessellator;
+import net.minecraft.client.util.helper.Colors;
+import net.minecraft.core.util.helper.Color;
 import net.minecraft.core.world.World;
 
 public class PortalParticle extends Particle {
@@ -10,7 +12,7 @@ public class PortalParticle extends Particle {
     private final double yStart;
     private final double zStart;
 
-    public PortalParticle(World world, double x, double y, double z, double xd, double yd, double zd) {
+    public PortalParticle(World world, double x, double y, double z, double xd, double yd, double zd, int data) {
         super(world, x, y, z, xd, yd, zd);
         this.xd = xd;
         this.yd = yd;
@@ -20,9 +22,11 @@ public class PortalParticle extends Particle {
         this.zStart = this.z = z;
         float br = this.random.nextFloat() * 0.6F + 0.4F;
         this.oSize = this.size = random.nextFloat() * 0.2F + 0.5F;
+        Color color = Colors.allPortalColors[data];
         this.rCol = this.gCol = this.bCol = br;
-        this.gCol *= 0.3F;
-        this.rCol *= 0.9F;
+        this.rCol *= color.getRed()/255f;
+        this.gCol *= color.getGreen()/255f;
+        this.bCol *= color.getBlue()/255f;
         this.lifetime = (int) (Math.random() * 10D) + 40;
         this.noPhysics = true;
         this.tex = TextureRegistry.getTexture("minecraft:particle/puff_" + (int) (Math.random() * 8D));
diff --git a/src/main/java/net/minecraft/client/entity/player/LocalPlayer.java b/src/main/java/net/minecraft/client/entity/player/LocalPlayer.java
index b61ffaf0b..640994d73 100644
--- a/src/main/java/net/minecraft/client/entity/player/LocalPlayer.java
+++ b/src/main/java/net/minecraft/client/entity/player/LocalPlayer.java
@@ -164,11 +164,11 @@ public class LocalPlayer extends Player
                     int targetDim = ((PortalBlock) Block.blocksList[portalID]).targetDimension;
                     if (dimension == targetDim)
                     {
-                        mc.usePortal(0);
+                        mc.usePortal(0, portalColor);
                     }
                     else
                     {
-                        mc.usePortal(targetDim);
+                        mc.usePortal(targetDim, portalColor);
                     }
                 }
             }
diff --git a/src/main/java/net/minecraft/client/gui/GameOverScreen.java b/src/main/java/net/minecraft/client/gui/GameOverScreen.java
index 0faff9750..7bdb3156f 100644
--- a/src/main/java/net/minecraft/client/gui/GameOverScreen.java
+++ b/src/main/java/net/minecraft/client/gui/GameOverScreen.java
@@ -56,6 +56,9 @@ public class GameOverScreen extends Screen
         }
         if(button.id == 2)
         {
+            if (mc.isMultiplayerWorld()) {
+                mc.theWorld.sendQuittingDisconnectingPacket();
+            }
             mc.changeWorld(null);
             mc.displayScreen(new MainMenuScreen());
         }
diff --git a/src/main/java/net/minecraft/client/gui/hud/IngameHud.java b/src/main/java/net/minecraft/client/gui/hud/IngameHud.java
index 213eac8ca..6c6ab960a 100644
--- a/src/main/java/net/minecraft/client/gui/hud/IngameHud.java
+++ b/src/main/java/net/minecraft/client/gui/hud/IngameHud.java
@@ -15,6 +15,8 @@ import net.minecraft.client.gui.chat.ChatScreen;
 import net.minecraft.client.gui.Gui;
 import net.minecraft.client.gui.HeldItemTooltipElement;
 import net.minecraft.client.gui.PhotoModeScreen;
+import net.minecraft.client.render.block.model.BlockModelDispatcher;
+import net.minecraft.core.block.PortalBlock;
 import net.minecraft.core.enums.ChatVisibility;
 import net.minecraft.core.item.IArmorItem;
 import net.minecraft.core.util.helper.Direction;
@@ -942,7 +944,7 @@ public class IngameHud extends Gui
         GL11.glDepthMask(false);
         GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
         GL11.glColor4f(1.0F, 1.0F, 1.0F, intensity);
-        IconCoordinate portal = TextureRegistry.getTexture("minecraft:block/portal_nether");
+        IconCoordinate portal = BlockModelDispatcher.getInstance().getDispatch(Block.getBlock(mc.thePlayer.portalID)).getBlockTextureFromSideAndMetadata(Side.NORTH, mc.thePlayer.portalColor.blockMeta << 4 | PortalBlock.MASK_COLOR_SET);
         portal.parentAtlas.bind();
         float f1 = (float) portal.getIconUMin();
         float f2 = (float) portal.getIconVMin();
diff --git a/src/main/java/net/minecraft/client/net/handler/ClientPacketHandler.java b/src/main/java/net/minecraft/client/net/handler/ClientPacketHandler.java
index ca39d4ace..4184689ad 100644
--- a/src/main/java/net/minecraft/client/net/handler/ClientPacketHandler.java
+++ b/src/main/java/net/minecraft/client/net/handler/ClientPacketHandler.java
@@ -539,7 +539,7 @@ public class ClientPacketHandler extends PacketHandler
         {
             // this class does not seem to handle pick up from server dropped items. find where it is.
             // something about that isn't working on servers if the player changed their gamemode.
-            worldClient.playSoundAtEntity(null, item, "random.pop", 0.2F, ((rand.nextFloat() - rand.nextFloat()) * 0.7F + 1.0F) * 2.0F);
+            worldClient.playSoundAtEntity(null, item, "item.pickup", 1F, ((rand.nextFloat() - rand.nextFloat()) * 0.7F + 1.0F) * 4.0F);
             mc.particleEngine.add(new TakeAnimationParticle(mc.theWorld, item, collector, -0.5F));
             worldClient.removeEntityFromWorld(takeItemEntityPacket.collectedEntityId);
         }
diff --git a/src/main/java/net/minecraft/client/net/thread/ThreadDownloadResources.java b/src/main/java/net/minecraft/client/net/thread/ThreadDownloadResources.java
index fd6f4601d..65d282ec9 100644
--- a/src/main/java/net/minecraft/client/net/thread/ThreadDownloadResources.java
+++ b/src/main/java/net/minecraft/client/net/thread/ThreadDownloadResources.java
@@ -101,6 +101,7 @@ public class ThreadDownloadResources extends Thread {
                 long size = tag.getAsContentTag().get("Size").getAsStringTag().getLong();
 
                 File soundFile = new File(resourcesFolder, "minecraft/sounds/" + fileName);
+                soundFile.mkdirs();
 
                 if (!soundFile.isFile() || (!mc.gameSettings.allowSoundOverrides.value && soundFile.length() != size)) {
                     entries.add(new SoundEntry(soundFile, name, size));
diff --git a/src/main/java/net/minecraft/client/render/RenderGlobal.java b/src/main/java/net/minecraft/client/render/RenderGlobal.java
index 10a5c7881..b11dcc35d 100644
--- a/src/main/java/net/minecraft/client/render/RenderGlobal.java
+++ b/src/main/java/net/minecraft/client/render/RenderGlobal.java
@@ -1718,15 +1718,15 @@ public class RenderGlobal
                 break;
 
             case EVENT_DISPENSER_EMPTY: // Dispenser empty click
-                worldObj.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x, y, z, "random.click", 1.0F, 1.2F);
+                worldObj.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x, y, z, "tile.dispenser.click", 1.0F, 1.0F);
                 break;
 
             case EVENT_DISPENSER_ITEM: // Dispenser fire item
-                worldObj.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x, y, z, "random.click", 1.0F, 1.0F);
+                worldObj.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x, y, z, "tile.dispenser.eject", 1.0F, 1.0F);
                 break;
 
             case EVENT_DISPENSER_PROJECTILE: // Dispenser fire projectile
-                worldObj.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x, y, z, "random.bow", 1.0F, 1.2F);
+                worldObj.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x, y, z, "tile.dispenser.fire", 1.0F, 1.2F);
                 break;
 
             case EVENT_DISPENSER_PARTICLES: // Dispenser eject particles
diff --git a/src/main/java/net/minecraft/client/render/TextureManager.java b/src/main/java/net/minecraft/client/render/TextureManager.java
index f9a052b97..7264eec72 100644
--- a/src/main/java/net/minecraft/client/render/TextureManager.java
+++ b/src/main/java/net/minecraft/client/render/TextureManager.java
@@ -93,7 +93,7 @@ public class TextureManager {
                 addDynamicTexture(new DynamicTextureWaterFlow(TextureRegistry.getTexture("minecraft:block/water_flowing")));
                 addDynamicTexture(new DynamicTextureLavaStill(TextureRegistry.getTexture("minecraft:block/lava_still")));
                 addDynamicTexture(new DynamicTextureLavaFlowing(TextureRegistry.getTexture("minecraft:block/lava_flowing")));
-                addDynamicTexture(new DynamicTexturePortal(TextureRegistry.getTexture("minecraft:block/portal_nether"),false));
+//                addDynamicTexture(new DynamicTexturePortal(TextureRegistry.getTexture("minecraft:block/portal_nether"),false));
                 addDynamicTexture(new DynamicTextureFire(TextureRegistry.getTexture("minecraft:block/fire")));
 
                 String[] fireflycolors = new String[] {"blue", "orange", "green", "red"};
diff --git a/src/main/java/net/minecraft/client/render/block/color/PortalBlockColor.java b/src/main/java/net/minecraft/client/render/block/color/PortalBlockColor.java
new file mode 100644
index 000000000..2d540391f
--- /dev/null
+++ b/src/main/java/net/minecraft/client/render/block/color/PortalBlockColor.java
@@ -0,0 +1,16 @@
+package net.minecraft.client.render.block.color;
+
+import net.minecraft.client.util.helper.Colors;
+import net.minecraft.core.world.WorldSource;
+
+public class PortalBlockColor extends BlockColor{
+    @Override
+    public int getFallbackColor(int meta) {
+        return Colors.allPortalColors[(meta >> 4) & 0xF].getARGB();
+    }
+
+    @Override
+    public int getWorldColor(WorldSource world, int x, int y, int z) {
+        return Colors.allPortalColors[(world.getBlockMetadata(x, y, z) >> 4) & 0xF].getARGB();
+    }
+}
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 6ed2a42b9..d82b4aed1 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
@@ -446,8 +446,8 @@ public class BlockModelDispatcher
 
         addDispatch(new StandardBlockModel<>(Blocks.GLOWSTONE).withTextures("minecraft:block/glowstone"));
 
-        addDispatch(new PortalBlockModel<>(Blocks.PORTAL_NETHER).withTextures("minecraft:block/portal_nether"));
-        addDispatch(new PortalBlockModel<>(Blocks.PORTAL_PARADISE).withTextures("minecraft:block/portal_nether"));
+        addDispatch(new PortalBlockModel<>(Blocks.PORTAL_NETHER, "minecraft:block/portal_nether/").withTextures("minecraft:block/portal_nether"));
+        addDispatch(new PortalBlockModel<>(Blocks.PORTAL_PARADISE, "minecraft:block/portal_paradise/").withTextures("minecraft:block/portal_nether"));
 
         addDispatch(new CakeBlockModel<>(Blocks.CAKE).withTextures("minecraft:block/cake/top", "minecraft:block/cake/bottom", "minecraft:block/cake/side"));
         addDispatch(new PumpkinPieBlockModel<>(Blocks.PUMPKIN_PIE).withTextures("minecraft:block/pumpkin_pie/top", "minecraft:block/pumpkin_pie/bottom", "minecraft:block/pumpkin_pie/side"));
diff --git a/src/main/java/net/minecraft/client/render/block/model/PortalBlockModel.java b/src/main/java/net/minecraft/client/render/block/model/PortalBlockModel.java
index a3adb1a79..6384d6308 100644
--- a/src/main/java/net/minecraft/client/render/block/model/PortalBlockModel.java
+++ b/src/main/java/net/minecraft/client/render/block/model/PortalBlockModel.java
@@ -1,11 +1,20 @@
 package net.minecraft.client.render.block.model;
 
+import net.minecraft.client.render.texture.stitcher.IconCoordinate;
+import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.PortalBlock;
+import net.minecraft.core.util.helper.DyeColor;
+import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.world.WorldSource;
 
-public class PortalBlockModel<T extends Block> extends TransparentBlockModel<T> {
-    public PortalBlockModel(Block block) {
+public class PortalBlockModel<T extends PortalBlock> extends TransparentBlockModel<T> {
+    protected IconCoordinate[] colors = new IconCoordinate[16];
+    public PortalBlockModel(Block block, String rootTexKey) {
         super(block, false);
+        for (DyeColor color : DyeColor.values()) {
+            colors[color.blockMeta] = TextureRegistry.getTexture(rootTexKey + color.colorID);
+        }
     }
     @Override
     public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side)
@@ -14,24 +23,11 @@ public class PortalBlockModel<T extends Block> extends TransparentBlockModel<T>
         {
             return false;
         }
-        boolean flag = blockAccess.getBlockId(x - 1, y, z) == block.id && blockAccess.getBlockId(x - 2, y, z) != block.id;
-        boolean flag1 = blockAccess.getBlockId(x + 1, y, z) == block.id && blockAccess.getBlockId(x + 2, y, z) != block.id;
-        boolean flag2 = blockAccess.getBlockId(x, y, z - 1) == block.id && blockAccess.getBlockId(x, y, z - 2) != block.id;
-        boolean flag3 = blockAccess.getBlockId(x, y, z + 1) == block.id && blockAccess.getBlockId(x, y, z + 2) != block.id;
-        boolean flag4 = flag || flag1;
-        boolean flag5 = flag2 || flag3;
-        if(flag4 && side == 4)
-        {
-            return true;
-        }
-        if(flag4 && side == 5)
-        {
-            return true;
-        }
-        if(flag5 && side == 2)
-        {
-            return true;
-        }
-        return flag5 && side == 3;
+        return super.shouldSideBeRendered(blockAccess, x, y, z, side);
+    }
+
+    @Override
+    public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data) {
+        return colors[block.fromMetadata(data).blockMeta];
     }
 }
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexturePortal.java b/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexturePortal.java
index 170bc5cb5..20fa51499 100644
--- a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexturePortal.java
+++ b/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexturePortal.java
@@ -1,11 +1,17 @@
 package net.minecraft.client.render.dynamictexture;
 
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
 import java.util.Random;
 
 import net.minecraft.client.render.texture.stitcher.IconCoordinate;
 import net.minecraft.client.render.texture.stitcher.TextureRegistry;
+import net.minecraft.core.util.helper.Color;
 import net.minecraft.core.util.helper.MathHelper;
 
+import javax.imageio.ImageIO;
+
 public class DynamicTexturePortal extends DynamicTexture{
 	
 	private boolean altTexture;
@@ -71,20 +77,26 @@ public class DynamicTexturePortal extends DynamicTexture{
 					int g = (int)(f * f * f * f * 255.0F);
 					int a = (int)(f * 100.0F + 155.0F);
 					int l = y * targetTexture.width + x;
-					
-					this.portalTextureData[i][l * 4 + 0] = (byte)r;
-					this.portalTextureData[i][l * 4 + 1] = (byte)g;
-					this.portalTextureData[i][l * 4 + 2] = (byte)b;
+
+//					double bD = (f * 100.0D + 155.0D);
+//					double rD = (f * f * 200.0D + 55.0D);
+//					double gD = (f * f * f * f * 255.0D);
+//					int luma = (int) (MathHelper.clamp((0.299 * rD + 0.587 * gD + 0.114 * bD), 0, 1) * 255);
+
+					this.portalTextureData[i][l * 4 + 0] = (byte)r /*luma*/;
+					this.portalTextureData[i][l * 4 + 1] = (byte)g /*luma*/;
+					this.portalTextureData[i][l * 4 + 2] = (byte)b /*luma*/;
 					this.portalTextureData[i][l * 4 + 3] = (byte)a;
 				}
 			}
 		}
+
+//		exportAnimationStrip();
 	}
 
 	@Override
 	public void update() {
 		++this.portalTickCounter;
-		
 		byte[] var1 = this.portalTextureData[this.portalTickCounter & 31];
 
 		for(int i = 0; i < targetTexture.getArea(); ++i) {
@@ -99,4 +111,34 @@ public class DynamicTexturePortal extends DynamicTexture{
 			this.imageData[i * 4 + 3] = (byte)a;
 		}
 	}
+
+	public void exportAnimationStrip() {
+		File output = new File("./debug/portal_anim_grey.png");
+		output.mkdirs();
+        try {
+            output.createNewFile();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+		BufferedImage portalImage = new BufferedImage(targetTexture.width, targetTexture.height * 32, BufferedImage.TYPE_INT_ARGB);
+		for (int frame = 0; frame < portalTextureData.length; frame++) {
+			byte[] frameImage = portalTextureData[frame];
+			for(int i = 0; i < targetTexture.getArea(); ++i) {
+				int r =frameImage[i * 4 + 0] & 255;
+				int g =frameImage[i * 4 + 1] & 255;
+				int b =frameImage[i * 4 + 2] & 255;
+				int a =frameImage[i * 4 + 3] & 255;
+
+				int argb = Color.intToIntARGB(a, r, g, b);
+				portalImage.setRGB(i % targetTexture.width, (i / targetTexture.height) + targetTexture.height * frame, argb);
+			}
+		}
+
+        try {
+            ImageIO.write(portalImage, "png", output);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }
diff --git a/src/main/java/net/minecraft/client/sound/SoundEngine.java b/src/main/java/net/minecraft/client/sound/SoundEngine.java
index c20b8064d..8d326f7ad 100644
--- a/src/main/java/net/minecraft/client/sound/SoundEngine.java
+++ b/src/main/java/net/minecraft/client/sound/SoundEngine.java
@@ -160,10 +160,18 @@ public class SoundEngine
 	}
 
 	public void playSoundWithID(String name, SoundCategory category, float volume, final float pitch, String soundID) {
-		playSoundWithID(SoundRepository.SOUNDS.getSoundEntry(name), category, volume, pitch, soundID);
+		playSoundWithID(name, category, volume, pitch, soundID, true);
+	}
+
+	private void playSoundWithID(String name, SoundCategory category, float volume, final float pitch, String soundID, boolean allowSubtitle) {
+		playSoundWithID(SoundRepository.SOUNDS.getSoundEntry(name), category, volume, pitch, soundID, allowSubtitle);
 	}
 
 	public void playSoundWithID(SoundEntry entry, SoundCategory category, float volume, final float pitch, String soundID) {
+		playSoundWithID(entry, category, volume, pitch, soundID, true);
+	}
+
+	private void playSoundWithID(SoundEntry entry, SoundCategory category, float volume, final float pitch, String soundID, boolean allowSubtitle) {
 		if (!loaded || soundSystem == null || muted || !SoundCategoryHelper.isAnyEnabled(options))
 		{
 			return;
@@ -186,20 +194,27 @@ public class SoundEngine
 					soundSystem.setVolume(soundID, volume * SoundCategoryHelper.getEffectiveVolume(category, options) * entry.volume);
 					soundSystem.play(soundID);
 				}
-				if (entry.parent.hasSubtitle()) {
-					mc.subtitleTracker.heardSound(entry.parent, 0, 0, 0);
-				}
 			} else if (entry.type == SoundEntry.Type.EVENT) {
-				playSoundWithID(entry.name, category, volume, pitch, soundID);
+				playSoundWithID(entry.name, category, volume * entry.volume, pitch * entry.pitch, soundID, false);
+			}
+			if (allowSubtitle && entry.parent.hasSubtitle()) {
+				mc.subtitleTracker.heardSound(entry.parent, 0, 0, 0);
 			}
 		}
 	}
 
 	public void playSoundWithIdAtPos(String name, SoundCategory category, float x, float y, float z, float volume, final float pitch, String soundID) {
-		playSoundWithIdAtPos(SoundRepository.SOUNDS.getSoundEntry(name), category, x, y, z, volume, pitch, soundID);
+		playSoundWithIdAtPos(name, category, x, y, z, volume, pitch, soundID, true);
 	}
 
+	private void playSoundWithIdAtPos(String name, SoundCategory category, float x, float y, float z, float volume, final float pitch, String soundID, boolean allowSubtitle) {
+		playSoundWithIdAtPos(SoundRepository.SOUNDS.getSoundEntry(name), category, x, y, z, volume, pitch, soundID, allowSubtitle);
+	}
 	public void playSoundWithIdAtPos(SoundEntry entry, SoundCategory category, float x, float y, float z, float volume, final float pitch, String soundID) {
+		playSoundWithIdAtPos(entry, category, x, y, z, volume, pitch, soundID, true);
+	}
+
+	private void playSoundWithIdAtPos(SoundEntry entry, SoundCategory category, float x, float y, float z, float volume, final float pitch, String soundID, boolean allowSubtitle) {
 		if (!loaded || muted || soundSystem == null || !SoundCategoryHelper.isAnyEnabled(options)) {
 			return;
 		}
@@ -227,11 +242,11 @@ public class SoundEngine
 					soundSystem.setVolume(soundID, volume * SoundCategoryHelper.getEffectiveVolume(category, options) * entry.volume);
 					soundSystem.play(soundID);
 				}
-				if (entry.parent.hasSubtitle()) {
-					mc.subtitleTracker.heardSound(entry.parent, x, y, z);
-				}
 			} else if (entry.type == SoundEntry.Type.EVENT) {
-				playSoundWithIdAtPos(entry.name, category, x, y, z, volume, pitch, soundID);
+				playSoundWithIdAtPos(entry.name, category, x, y, z, volume * entry.volume, pitch * entry.pitch, soundID, false);
+			}
+			if (allowSubtitle && entry.parent.hasSubtitle()) {
+				mc.subtitleTracker.heardSound(entry.parent, x, y, z);
 			}
 		}
 	}
diff --git a/src/main/java/net/minecraft/client/util/helper/Colors.java b/src/main/java/net/minecraft/client/util/helper/Colors.java
index 39a9cf811..471359caf 100644
--- a/src/main/java/net/minecraft/client/util/helper/Colors.java
+++ b/src/main/java/net/minecraft/client/util/helper/Colors.java
@@ -19,7 +19,8 @@ public abstract class Colors {
 	public static final Color[] allFlagColors = new Color[16];
 	public static final Color[] allSignColors = new Color[16];
 	public static final Color[] allRedstoneColors = new Color[16];
-	
+	public static final Color[] allPortalColors = new Color[16];
+
 	public static void loadColors() {
 		fillColorArray("/assets/minecraft/textures/misc/colors_chat.png", allChatColors);
 		fillColorArray("/assets/minecraft/textures/misc/colors_planks.png", allPlankColors);
@@ -27,6 +28,7 @@ public abstract class Colors {
 		fillColorArray("/assets/minecraft/textures/misc/colors_lamps.png", allLampColors);
 		fillColorArray("/assets/minecraft/textures/misc/colors_flag.png", allFlagColors);
 		fillColorArray("/assets/minecraft/textures/misc/colors_redstone.png", allRedstoneColors);
+		fillColorArray("/assets/minecraft/textures/misc/colors_portal.png", allPortalColors);
 	}
 	
 	public static void fillColorArray(String path, Color[] colors) {
diff --git a/src/main/java/net/minecraft/client/world/WorldClient.java b/src/main/java/net/minecraft/client/world/WorldClient.java
index 639f0944d..e26ac9d9b 100644
--- a/src/main/java/net/minecraft/client/world/WorldClient.java
+++ b/src/main/java/net/minecraft/client/world/WorldClient.java
@@ -157,6 +157,7 @@ public class WorldClient extends World {
     {
         super.setEntityDead(entity);
         forced.remove(entity);
+        reEntries.remove(entity);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/ActivatorBlock.java b/src/main/java/net/minecraft/core/block/ActivatorBlock.java
index e13060116..15db03bcf 100644
--- a/src/main/java/net/minecraft/core/block/ActivatorBlock.java
+++ b/src/main/java/net/minecraft/core/block/ActivatorBlock.java
@@ -6,6 +6,7 @@ import net.minecraft.core.block.material.Material;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
+import net.minecraft.core.sound.SoundCategory;
 import net.minecraft.core.util.helper.Direction;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.world.LevelListener;
@@ -57,7 +58,7 @@ public class ActivatorBlock extends VeryRotatableEntityBlock
                 if (block != null) {
                     block.onActivatorInteract(world, x + xOffset, y + yOffset, z + zOffset, activator, direction);
                 } else {
-                    world.playBlockEvent(LevelListener.EVENT_DISPENSER_EMPTY, x, y, z, 0);
+                    world.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x, y, z, "tile.activator.click", 1, 1);
                 }
             }
             else
@@ -65,6 +66,7 @@ public class ActivatorBlock extends VeryRotatableEntityBlock
                 Item item = itemStack.getItem();
                 item.onUseByActivator(itemStack, activator, world, random, x, y, z, px, py, pz, direction);
                 activator.nullDeadItems();
+                world.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x, y, z, "tile.activator.use", 1, 1);
                 world.playBlockEvent(LevelListener.EVENT_DISPENSER_PARTICLES, x, y, z, direction.getId());
             }
         } else {
@@ -114,16 +116,7 @@ public class ActivatorBlock extends VeryRotatableEntityBlock
         if(world.getSignal(x, y, z, Side.BOTTOM)) {
             return true;
         }
-        if(world.getSignal(x, y + 1, z - 1, Side.NORTH)) {
-            return true;
-        }
-        if(world.getSignal(x, y + 1, z + 1, Side.SOUTH)) {
-            return true;
-        }
-        if(world.getSignal(x - 1, y + 1, z, Side.WEST)) {
-            return true;
-        }
-        return world.getSignal(x + 1, y + 1, z, Side.EAST);
+        return false;
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/BedrockBlock.java b/src/main/java/net/minecraft/core/block/BedrockBlock.java
index 7136fa1e5..fd2d67119 100644
--- a/src/main/java/net/minecraft/core/block/BedrockBlock.java
+++ b/src/main/java/net/minecraft/core/block/BedrockBlock.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.block;
 
 import net.minecraft.core.block.material.Material;
+import net.minecraft.core.util.helper.DyeColor;
 import net.minecraft.core.world.World;
 
 public class BedrockBlock
@@ -15,7 +16,7 @@ public class BedrockBlock
 	public void onBlockPlacedByWorld(World world, int x, int y, int z)
     {
         if (world.getBlockId(x, y - 1, z) == Blocks.GLOWSTONE.id) {
-            ((PortalBlock) Blocks.PORTAL_PARADISE).tryToCreatePortal(world, x, y, z);
+            ((PortalBlock) Blocks.PORTAL_PARADISE).tryToCreatePortal(world, x, y, z, DyeColor.SILVER);
         }
     }
 }
diff --git a/src/main/java/net/minecraft/core/block/CacaoLeavesBlock.java b/src/main/java/net/minecraft/core/block/CacaoLeavesBlock.java
index 6917f4f25..f6c97c0aa 100644
--- a/src/main/java/net/minecraft/core/block/CacaoLeavesBlock.java
+++ b/src/main/java/net/minecraft/core/block/CacaoLeavesBlock.java
@@ -70,7 +70,7 @@ public class CacaoLeavesBlock extends BaseLeavesBlock implements IBonemealable {
         if(growthRate > 0)
         {
             if (player != null) {
-                world.playSoundAtEntity(player, player, "random.pop", 0.2F, 0.5f);
+                world.playSoundAtEntity(player, player, "item.pickup", 1, 1);
             }
             if(!world.isClientSide)
             {
diff --git a/src/main/java/net/minecraft/core/block/DispenserBlock.java b/src/main/java/net/minecraft/core/block/DispenserBlock.java
index 1cd953bfc..e79a0a7c5 100644
--- a/src/main/java/net/minecraft/core/block/DispenserBlock.java
+++ b/src/main/java/net/minecraft/core/block/DispenserBlock.java
@@ -104,7 +104,7 @@ public class DispenserBlock extends VeryRotatableEntityBlock
     @Override
     public void onNeighborBlockChange(World world, int x, int y, int z, int blockId)
     {
-        boolean flag = world.hasNeighborSignal(x, y, z) || world.hasNeighborSignal(x, y + 1, z);
+        boolean flag = world.hasNeighborSignal(x, y, z);
         int meta = world.getBlockMetadata(x, y, z);
         if(flag && (meta & MASK_POWERED) == 0)
         {
diff --git a/src/main/java/net/minecraft/core/block/FireBlock.java b/src/main/java/net/minecraft/core/block/FireBlock.java
index ee4ee476b..df2735cd6 100644
--- a/src/main/java/net/minecraft/core/block/FireBlock.java
+++ b/src/main/java/net/minecraft/core/block/FireBlock.java
@@ -281,7 +281,7 @@ public class FireBlock extends Block {
 	@Override
 	public void onBlockPlacedByWorld(World world, int x, int y, int z) {
 		if (world.getBlockId(x, y - 1, z) == Blocks.OBSIDIAN.id
-				&& ((PortalBlock) Blocks.PORTAL_NETHER).tryToCreatePortal(world, x, y, z)) {
+				&& ((PortalBlock) Blocks.PORTAL_NETHER).tryToCreatePortal(world, x, y, z, null)) {
 			return;
 		}
 		if (!world.isBlockNormalCube(x, y - 1, z) && !canNeighborCatchFire(world, x, y, z)) {
diff --git a/src/main/java/net/minecraft/core/block/FireflyLanternBlock.java b/src/main/java/net/minecraft/core/block/FireflyLanternBlock.java
index 5a51483d1..442091669 100644
--- a/src/main/java/net/minecraft/core/block/FireflyLanternBlock.java
+++ b/src/main/java/net/minecraft/core/block/FireflyLanternBlock.java
@@ -84,7 +84,7 @@ public class FireflyLanternBlock extends Block{
     public boolean onBlockRightClicked(World world, int x, int y, int z, Player player, Side side, double xHit, double yHit)
     {
         world.setBlockRaw(x, y, z, 0);
-        world.playSoundAtEntity(player, player, "random.pop", 0.2F, 0.5f);
+        world.playSoundAtEntity(player, player, "item.pickup", 1f, 1f);
         if (!world.isClientSide)
         {
             world.dropItem(x, y, z, new ItemStack(itemSupplier.get(), 1, 0));
diff --git a/src/main/java/net/minecraft/core/block/FloweringCherryLeavesBlock.java b/src/main/java/net/minecraft/core/block/FloweringCherryLeavesBlock.java
index 7ab65c9c3..332cbfe1e 100644
--- a/src/main/java/net/minecraft/core/block/FloweringCherryLeavesBlock.java
+++ b/src/main/java/net/minecraft/core/block/FloweringCherryLeavesBlock.java
@@ -54,7 +54,7 @@ public class FloweringCherryLeavesBlock extends CherryLeavesBlock implements IBo
         if(growthRate > 0)
         {
             if (player != null) {
-                world.playSoundAtEntity(player, player, "random.pop", 0.2F, 0.5f);
+                world.playSoundAtEntity(player, player, "item.pickup", 1f, 1f);
             }
             if(!world.isClientSide)
             {
diff --git a/src/main/java/net/minecraft/core/block/JarBlock.java b/src/main/java/net/minecraft/core/block/JarBlock.java
index 63f6e3293..c425fbfac 100644
--- a/src/main/java/net/minecraft/core/block/JarBlock.java
+++ b/src/main/java/net/minecraft/core/block/JarBlock.java
@@ -72,7 +72,7 @@ public class JarBlock extends EntityBlock {
         if(player.getHeldItem() == null) {
             if (world.getBlockMetadata(x, y, z) == 0) {
                 world.setBlockWithNotify(x, y, z, 0);
-                world.playSoundAtEntity(player, player, "random.pop", 0.2F, 0.5f);
+                world.playSoundAtEntity(player, player, "item.pickup", 1f, 1f);
                 if (!world.isClientSide) {
                     world.dropItem(x, y, z, new ItemStack(itemSupplier.get(), 1, 0));
                 }
@@ -83,7 +83,7 @@ public class JarBlock extends EntityBlock {
                 if (flowerInPot > 0 && hasTag(flowerInPot, BlockTags.PLANTABLE_IN_JAR)) {
                     tileEntity.flowerInPot = 0;
                     world.setBlockMetadataWithNotify(x, y, z, 0);
-                    world.playSoundAtEntity(player, player, "random.pop", 0.2F, 0.5f);
+                    world.playSoundAtEntity(player, player, "item.pickup", 1f, 1f);
                     if (!world.isClientSide) {
                         world.dropItem(x, y, z, new ItemStack(flowerInPot, 1, flowerData));
                     }
diff --git a/src/main/java/net/minecraft/core/block/PortalBlock.java b/src/main/java/net/minecraft/core/block/PortalBlock.java
index 200d55d75..99308e108 100644
--- a/src/main/java/net/minecraft/core/block/PortalBlock.java
+++ b/src/main/java/net/minecraft/core/block/PortalBlock.java
@@ -1,23 +1,42 @@
 package net.minecraft.core.block;
 
+import net.minecraft.client.Minecraft;
 import net.minecraft.core.block.entity.BlockEntity;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.entity.Entity;
+import net.minecraft.core.entity.ItemEntity;
 import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.item.ItemStack;
+import net.minecraft.core.item.Items;
 import net.minecraft.core.sound.SoundCategory;
+import net.minecraft.core.util.helper.DyeColor;
+import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.helper.Sides;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.WorldSource;
+import net.minecraft.core.world.chunk.ChunkPosition;
+import org.jetbrains.annotations.Nullable;
 
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
 import java.util.Random;
+import java.util.Set;
 
 // Referenced classes of package net.minecraft.src:
 //            BlockBreakable, Material, IBlockAccess, World, 
 //            Block, FireBlock, Entity, AxisAlignedBB
 
-public class PortalBlock extends TransparentBlock
+public class PortalBlock extends TransparentBlock implements IPainted
 {
+    public static final int MAX_PORTAL_SIZE = 32;
+    public static final int MASK_COLOR = 0b1111_0000;
+    public static final int MASK_ROTATION = 0b0000_0011;
+    public static final int MASK_COLOR_SET = 0b0000_1000;
+
+    public static final int ORIENTATION_X = 0;
+    public static final int ORIENTATION_Z = 1;
 	public int targetDimension;
 	public int portalFrameId;
 	public int portalTriggerId;
@@ -73,7 +92,7 @@ public class PortalBlock extends TransparentBlock
     
     public int[] getPortalDims(World world, int x, int y, int z, boolean swapOrientation, boolean expectMiddle)
     {
-        int maxDims = 32;
+        int maxDims = MAX_PORTAL_SIZE;
         
         int ox = x;
         int oy = y;
@@ -255,8 +274,11 @@ public class PortalBlock extends TransparentBlock
         return new int[] { orientation ? 1 : 0, x, y, z, maxBoundA, maxBoundY };
     }
 
-    public boolean tryToCreatePortal(World world, int x, int y, int z)
+    public boolean tryToCreatePortal(World world, int x, int y, int z, @Nullable DyeColor color)
     {
+        if (color == null) {
+            color = DyeColor.PURPLE;
+        }
         int[] bounds = getPortalDims(world, x, y, z, false);
 
         if (bounds == null) return false;
@@ -270,12 +292,19 @@ public class PortalBlock extends TransparentBlock
         {
             for(int ry = 1; ry < bounds[5]; ry++)
             {
-                world.setBlockAndMetadata(x + (bounds[0] == 0 ? ra : 0), y + ry, z + (bounds[0] == 1 ? ra : 0), this.id, bounds[0] & 0x1);
+                int _x = x + (bounds[0] == 0 ? ra : 0);
+                int _y = y + ry;
+                int _z = z + (bounds[0] == 1 ? ra : 0);
+                world.setBlockAndMetadata(_x, _y, _z, this.id, bounds[0] & 0x1);
             }
 
         }
 
-        world.setBlockMetadata(x + (bounds[0] == 0 ? 1 : 0), y + 1, z + (bounds[0] == 1 ? 1 : 0), (bounds[0] & 0xF) | 0x2);
+        int _x = x + (bounds[0] == ORIENTATION_X ? 1 : 0);
+        int _y = y + 1;
+        int _z = z + (bounds[0] == ORIENTATION_Z ? 1 : 0);
+        world.setBlockMetadata(_x, _y, _z, (bounds[0] & 0xF) | 0x2);
+        setColor(world, _x, _y, _z, color);
         
         world.markBlocksDirty(x + (bounds[0] == 0 ? 1 : 0), y + 1, z + (bounds[0] == 1 ? 1 : 0), x + (bounds[0] == 0 ? bounds[4] : 0), y + bounds[5], z + (bounds[0] == 1 ? bounds[4] : 0));
 
@@ -310,9 +339,21 @@ public class PortalBlock extends TransparentBlock
     @Override
     public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity)
     {
+        if (entity instanceof ItemEntity && ((ItemEntity) entity).item != null && ((ItemEntity) entity).item.itemID == Items.DYE.id) {
+            ItemEntity itemEntity = (ItemEntity) entity;
+            DyeColor color = DyeColor.colorFromItemMeta(itemEntity.item.getMetadata());
+            if (getColor(world, x, y, z) != color) {
+                setColor(world, x, y, z, color);
+                itemEntity.item.stackSize--;
+                if (itemEntity.item.stackSize <= 0) {
+                    itemEntity.remove();
+                    return;
+                }
+            }
+        }
         if(entity.vehicle == null && entity.passenger == null)
         {
-            entity.handlePortal(this.id);
+            entity.handlePortal(this.id, getColor(world, x, y, z));
         }
     }
 
@@ -326,24 +367,87 @@ public class PortalBlock extends TransparentBlock
         }
         for(int l = 0; l < 4; l++)
         {
-            double d = (double) x + rand.nextFloat();
-            double d1 = (double) y + rand.nextFloat();
-            double d2 = (double) z + rand.nextFloat();
+            double px = (double) x + rand.nextFloat();
+            double py = (double) y + rand.nextFloat();
+            double pz = (double) z + rand.nextFloat();
             int i1 = rand.nextInt(2) * 2 - 1;
-            double d3 = ((double) rand.nextFloat() - 0.5D) * 0.5D;
-            double d4 = ((double) rand.nextFloat() - 0.5D) * 0.5D;
-            double d5 = ((double) rand.nextFloat() - 0.5D) * 0.5D;
+            double xd = (rand.nextDouble() - 0.5D) * 0.5D;
+            double yd = (rand.nextDouble() - 0.5D) * 0.5D;
+            double zd = (rand.nextDouble() - 0.5D) * 0.5D;
             if(world.getBlockId(x - 1, y, z) == id || world.getBlockId(x + 1, y, z) == id)
             {
-                d2 = (double) z + 0.5D + 0.25D * (double)i1;
-                d5 = rand.nextFloat() * 2.0D * (double)i1;
+                pz = (double) z + 0.5D + 0.25D * (double)i1;
+                zd = rand.nextFloat() * 2.0D * (double)i1;
             } else
             {
-                d = (double) x + 0.5D + 0.25D * (double)i1;
-                d3 = rand.nextFloat() * 2.0D * (double)i1;
+                px = (double) x + 0.5D + 0.25D * (double)i1;
+                xd = rand.nextFloat() * 2.0D * (double)i1;
+            }
+            world.spawnParticle("portal", px, py, pz, xd, yd, zd, fromMetadata(meta).blockMeta);
+        }
+
+    }
+
+    @Override
+    public DyeColor fromMetadata(int meta) {
+        if ((meta & MASK_COLOR_SET) == 0) return DyeColor.PURPLE;
+        return DyeColor.colorFromBlockMeta((meta & MASK_COLOR) >> 4);
+    }
+
+    @Override
+    public int toMetadata(DyeColor color) {
+        return (color.blockMeta << 4) & MASK_COLOR;
+    }
+
+    @Override
+    public int stripColorFromMetadata(int meta) {
+        return meta & ~MASK_COLOR;
+    }
+
+    @Override
+    public void removeDye(World world, int x, int y, int z) {
+        final int meta = world.getBlockMetadata(x, y, z);
+        world.setBlockAndMetadataWithNotify(x, y, z, Blocks.STAIRS_PLANKS_OAK.id, stripColorFromMetadata(meta));
+    }
+
+    @Override
+    public DyeColor getColor(World world, int x, int y, int z) {
+        return IPainted.super.getColor(world, x, y, z);
+    }
+
+    // TODO implement block updates without causing lag spikes
+    @Override
+    public void setColor(World world, int x, int y, int z, DyeColor color) {
+        int[] bounds = getPortalDims(world, x, y, z, true);
+        if (bounds == null) {
+            world.setBlockWithNotify(x, y, z, 0);
+            return;
+        }
+
+        int px = bounds[1];
+        int py = bounds[2];
+        int pz = bounds[3];
+
+        for(int ra = 1; ra < bounds[4]; ra++)
+        {
+            for(int ry = 1; ry < bounds[5]; ry++)
+            {
+                int _x = px + (bounds[0] == ORIENTATION_X ? ra : 0);
+                int _y = py + ry;
+                int _z = pz + (bounds[0] == ORIENTATION_Z ? ra : 0);
+                setColorRaw(world, _x, _y, _z, color);
             }
-            world.spawnParticle("portal", d, d1, d2, d3, d4, d5, 0);
         }
+//        if (bounds[0] == ORIENTATION_X) {
+//            world.markBlocksDirty(px + 1, py + 1, pz, px + bounds[4], py + bounds[5], pz);
+//        } else {
+//            world.markBlocksDirty(px, py + 1, pz + 1, px, py + bounds[5], pz + bounds[4]);
+//        }
+    }
+
 
+    private void setColorRaw(World world, int x, int y, int z, DyeColor color) {
+        final int meta = world.getBlockMetadata(x, y, z);
+        world.setBlockMetadataWithNotify(x, y, z, stripColorFromMetadata(meta) | toMetadata(color) | MASK_COLOR_SET);
     }
 }
diff --git a/src/main/java/net/minecraft/core/block/TNTBlock.java b/src/main/java/net/minecraft/core/block/TNTBlock.java
index d622a87e2..fc84b92cd 100644
--- a/src/main/java/net/minecraft/core/block/TNTBlock.java
+++ b/src/main/java/net/minecraft/core/block/TNTBlock.java
@@ -62,7 +62,7 @@ public class TNTBlock extends Block {
 		world.setBlockWithNotify(x, y, z, 0);
 		TNTPrimedEntity e = new TNTPrimedEntity(world, x + 0.5F, y + 0.5F, z + 0.5F);
 		world.entityJoinedWorld(e);
-		world.playSoundAtEntity(null, e, "random.fuse", 1.0F, 1.0F);
+		world.playSoundAtEntity(null, e, "tile.tnt.fuse", 1.0F, 1.0F);
 		if (player != null && player.inventory.getCurrentItem() != null && (player.inventory.getCurrentItem().getItem() instanceof FireStrikerItem)) {
 			player.inventory.getCurrentItem().damageItem(1, player);
 		}
diff --git a/src/main/java/net/minecraft/core/block/entity/SensorBlockEntity.java b/src/main/java/net/minecraft/core/block/entity/SensorBlockEntity.java
index eb8c4c438..ac2d70083 100644
--- a/src/main/java/net/minecraft/core/block/entity/SensorBlockEntity.java
+++ b/src/main/java/net/minecraft/core/block/entity/SensorBlockEntity.java
@@ -87,7 +87,7 @@ public class SensorBlockEntity extends BlockEntity {
 		}
 		
 		if(shouldBeActive && id == Blocks.MOTION_SENSOR_IDLE.id) {
-			worldObj.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x + 0.5, y + 0.5, z + 0.5, "random.breath", 0.5f, worldObj.rand.nextFloat());
+			worldObj.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x + 0.5, y + 0.5, z + 0.5, "tile.sensor_block.sense", 1f, worldObj.rand.nextFloat());
 			updateSensorBlockState(true, worldObj);
 		}
 		if(!shouldBeActive && id == Blocks.MOTION_SENSOR_ACTIVE.id) {
@@ -123,7 +123,7 @@ public class SensorBlockEntity extends BlockEntity {
 		}
 
 		if(shouldBeActive && id == Blocks.MOTION_SENSOR_IDLE.id) {
-			world.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x + 0.5, y + 0.5, z + 0.5, "random.breath", 0.5f, world.rand.nextFloat());
+			world.playSoundEffect(null, SoundCategory.WORLD_SOUNDS, x + 0.5, y + 0.5, z + 0.5, "tile.sensor_block.sense", 1f, world.rand.nextFloat());
 			updateSensorBlockState(true, world);
 		}
 		if(!shouldBeActive && id == Blocks.MOTION_SENSOR_ACTIVE.id) {
diff --git a/src/main/java/net/minecraft/core/block/entity/TrommelBlockEntity.java b/src/main/java/net/minecraft/core/block/entity/TrommelBlockEntity.java
index b4b337360..4d3f94909 100644
--- a/src/main/java/net/minecraft/core/block/entity/TrommelBlockEntity.java
+++ b/src/main/java/net/minecraft/core/block/entity/TrommelBlockEntity.java
@@ -23,11 +23,13 @@ import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.player.inventory.container.Container;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.world.World;
+import org.jetbrains.annotations.Nullable;
 import org.slf4j.Logger;
 
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Random;
 
 public class TrommelBlockEntity extends BlockEntity
@@ -440,39 +442,61 @@ public class TrommelBlockEntity extends BlockEntity
     }
 
     private void simulateTrommelDrops(int passes, ItemStack blockToTest){
-        Map<Object, Integer> trommelDropMap = new HashMap<>();
+        Map<Object, ResultEntry> trommelDropMap = new HashMap<>();
         System.out.println();
         System.out.println("Generating simulation of Trommel loot for block: " + blockToTest.getItem().namespaceID);
         for(int i = 0; i < passes; i++){
             ItemStack itemStack = this.getItemResult(blockToTest);
             if(itemStack != null){
                 Item item = itemStack.getItem();
-                trommelDropMap.put(item.namespaceID, trommelDropMap.getOrDefault(item.namespaceID, 0) + 1);
+                if (!trommelDropMap.containsKey(item.namespaceID)) {
+                    trommelDropMap.put(item.namespaceID, new ResultEntry(item));
+                }
+                trommelDropMap.get(item.namespaceID).addStack(itemStack);
             } else {
-                trommelDropMap.put("NULL", trommelDropMap.getOrDefault("NULL", 0) + 1);
+                if (!trommelDropMap.containsKey("NULL")) {
+                    trommelDropMap.put("NULL", new ResultEntry(null));
+                }
+                trommelDropMap.get("NULL").addStack(null);
             }
         }
-        System.out.println("Trommel loot sampling " + passes + " passes:");
+        System.out.printf("Trommel loot sampling %s (%.2f stacks) passes:%n", passes, passes/64f);
         for (Item item : Item.itemsList)
         {
-            if (item == null) continue;;
-            Integer amount = trommelDropMap.get(item.namespaceID);
-            float percentage;
-            if (amount != null)
-            {
-                percentage = amount / (float) (passes);
-                percentage *= 100;
-            } else {
-                percentage = 0.0f;
-            }
-            if(amount != null) {
-                System.out.println("        " + item.namespaceID + " yield: " + amount  + String.format(" (%.2f stacks) - ", (float)(amount)/64F) + String.format("%.2f", percentage) + "%");
+            if (item == null) continue;
+            ResultEntry entry = trommelDropMap.get(item.namespaceID);
+            if (entry != null) {
+                System.out.println(entry);
             }
         }
         if (trommelDropMap.get("NULL") != null) {
-            float percentage = trommelDropMap.get("NULL") / (float) (passes);
-            percentage *= 100;
-            System.out.println("        " + "NULL" + " yield: " + trommelDropMap.get("NULL")  + " (" + MathHelper.floor_float((float)(trommelDropMap.get("NULL"))/64F) + " stacks) - " + String.format("%.2f", percentage) + "%");
+            System.out.println(trommelDropMap.get("NULL"));
+        }
+    }
+
+    private static class ResultEntry {
+        public @Nullable Item item;
+        public int totalItems = 0;
+        public int timesOccured = 0;
+
+        public ResultEntry(Item item) {
+            this.item = item;
+        }
+
+        public void addStack(ItemStack stack) {
+            if (this.item == null) {
+                assert stack == null : "stack must be null for a null item!";
+                timesOccured++;
+            } else {
+                assert item == stack.getItem() : "stack's item must match current item!";
+                timesOccured++;
+                totalItems += stack.stackSize;
+            }
+        }
+
+        @Override
+        public String toString() {
+            return String.format("\t%s - Occurred: %sx - Total Items: %s (%.2f stacks)", item == null ? "NULL" : item.namespaceID, timesOccured, totalItems, totalItems/64f);
         }
     }
 
diff --git a/src/main/java/net/minecraft/core/block/piston/PistonBaseBlock.java b/src/main/java/net/minecraft/core/block/piston/PistonBaseBlock.java
index ca052330d..5be57f85e 100644
--- a/src/main/java/net/minecraft/core/block/piston/PistonBaseBlock.java
+++ b/src/main/java/net/minecraft/core/block/piston/PistonBaseBlock.java
@@ -2,6 +2,7 @@ package net.minecraft.core.block.piston;
 
 import java.util.ArrayList;
 
+import net.minecraft.client.Minecraft;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.BlockEntity;
@@ -330,8 +331,7 @@ public class PistonBaseBlock extends Block
                 return false;
             }
             if (Block.blocksList[blockId].getPistonPushReaction(world, xo, yo, zo) == Material.PISTON_DESTROY_ON_PUSH) {
-                Block.blocksList[blockId].dropBlockWithCause(world, EnumDropCause.WORLD, xo, yo, zo, world.getBlockMetadata(xo, yo, zo), null, null);
-                world.setBlockWithNotify(xo, yo, zo, 0);
+                Block.blocksList[blockId].dropBlockWithCause(world, EnumDropCause.WORLD, xo, yo, zo, world.getBlockMetadata(xo, yo, zo), world.getBlockEntity(xo, yo, zo), null);
                 break;
             }
             if (blocks == maxPushedBlocks) {
diff --git a/src/main/java/net/minecraft/core/entity/Entity.java b/src/main/java/net/minecraft/core/entity/Entity.java
index db8f2bf61..aaefe2bf4 100644
--- a/src/main/java/net/minecraft/core/entity/Entity.java
+++ b/src/main/java/net/minecraft/core/entity/Entity.java
@@ -3,6 +3,7 @@ package net.minecraft.core.entity;
 import java.util.List;
 import java.util.Random;
 
+import net.minecraft.core.util.helper.DyeColor;
 import net.minecraft.core.world.ICarriable;
 import org.jetbrains.annotations.Nullable;
 
@@ -1295,7 +1296,7 @@ public abstract class Entity
         return null;
     }
 
-    public void handlePortal(int portalTileId)
+    public void handlePortal(int portalBlockId, DyeColor portalColor)
     {
     }
 
diff --git a/src/main/java/net/minecraft/core/entity/ItemEntity.java b/src/main/java/net/minecraft/core/entity/ItemEntity.java
index a176c3a65..048f47f69 100644
--- a/src/main/java/net/minecraft/core/entity/ItemEntity.java
+++ b/src/main/java/net/minecraft/core/entity/ItemEntity.java
@@ -226,7 +226,7 @@ public class ItemEntity extends Entity
 				}
 				
 				if(item.stackSize <= 0) {
-					world.playSoundAtEntity(player, this, "random.pop", 0.2F, ((random.nextFloat() - random.nextFloat()) * 0.7F + 1.0F) * 2.0F);
+					world.playSoundAtEntity(player, this, "item.pickup", 1F, ((random.nextFloat() - random.nextFloat()) * 0.7F + 1.0F) * 4.0F);
 					player.onItemPickup(this, item);
 				}
 
diff --git a/src/main/java/net/minecraft/core/entity/Mob.java b/src/main/java/net/minecraft/core/entity/Mob.java
index e8a613df7..efa11e189 100644
--- a/src/main/java/net/minecraft/core/entity/Mob.java
+++ b/src/main/java/net/minecraft/core/entity/Mob.java
@@ -806,7 +806,7 @@ public abstract class Mob extends Entity
             {
                 xd *= 0.8D;
                 zd *= 0.8D;
-                world.playSoundAtEntity(null, this, "random.fuse", (float)Math.sqrt(speedSquared) * 2.0f + random.nextFloat() * 0.2f - 0.25f, 1.75f + (random.nextFloat() * 0.4f - 0.2f));
+                world.playSoundAtEntity(null, this, "random.skate", (float)Math.sqrt(speedSquared) * 2.0f + random.nextFloat() * 0.2f - 0.25f, 1.75f + (random.nextFloat() * 0.4f - 0.2f));
             }
             if ((lastStrafe < 0 && moveStrafing > 0) || (lastStrafe > 0 && moveStrafing < 0))
             {
@@ -822,7 +822,7 @@ public abstract class Mob extends Entity
                     xd = newMotionX;
                     zd = newMotionZ;
                 }
-                world.playSoundAtEntity(null, this, "random.fuse", (float)Math.sqrt(speedSquared) * 0.75f + random.nextFloat() * 0.2f, 2f + (random.nextFloat() * 0.4f - 0.2f));
+                world.playSoundAtEntity(null, this, "random.skate", (float)Math.sqrt(speedSquared) * 0.75f + random.nextFloat() * 0.2f, 2f + (random.nextFloat() * 0.4f - 0.2f));
             }
             if (moveStrafing != 0) lastStrafe = moveStrafing;
         }
diff --git a/src/main/java/net/minecraft/core/entity/monster/CreeperMob.java b/src/main/java/net/minecraft/core/entity/monster/CreeperMob.java
index ecb2eba00..c405fc289 100644
--- a/src/main/java/net/minecraft/core/entity/monster/CreeperMob.java
+++ b/src/main/java/net/minecraft/core/entity/monster/CreeperMob.java
@@ -74,7 +74,7 @@ public class CreeperMob extends Monster
             if(i > 0 && timeSinceIgnited == 0)
             {
             	if(!world.isClientSide) {
-                    world.playSoundAtEntity(null, this, "random.fuse", 1.0F, 0.5F);
+                    world.playSoundAtEntity(null, this, "mob.creeper.fuse", 1.0F, 1.0F);
             	}
             }
             timeSinceIgnited += i;
@@ -126,7 +126,7 @@ public class CreeperMob extends Monster
             if(timeSinceIgnited == 0)
             {
             	if(!world.isClientSide) {
-            		world.playSoundAtEntity(null, this, "random.fuse", 1.0F, 0.5F);	
+            		world.playSoundAtEntity(null, this, "mob.creeper.fuse", 1.0F, 1.0F);
             	}
             }
             setCreeperState(1);
diff --git a/src/main/java/net/minecraft/core/entity/player/Player.java b/src/main/java/net/minecraft/core/entity/player/Player.java
index 5f539bfbb..b49898282 100644
--- a/src/main/java/net/minecraft/core/entity/player/Player.java
+++ b/src/main/java/net/minecraft/core/entity/player/Player.java
@@ -60,6 +60,7 @@ import net.minecraft.core.player.inventory.menu.AbstractContainerMenu;
 import net.minecraft.core.player.inventory.menu.InventoryMenu;
 import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.DamageType;
+import net.minecraft.core.util.helper.DyeColor;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.Dimension;
@@ -112,6 +113,7 @@ public abstract class Player extends Mob
     public int timeUntilPortal;
     protected boolean inPortal;
     public int portalID;
+    public DyeColor portalColor;
     public float timeInPortal;
     public float prevTimeInPortal;
     private final int damageRemainder;
@@ -1477,7 +1479,7 @@ public abstract class Player extends Mob
     }
 
     @Override
-	public void handlePortal(int portalTileId)
+	public void handlePortal(int portalBlockId, DyeColor portalColor)
     {
         if(timeUntilPortal > 0)
         {
@@ -1485,7 +1487,8 @@ public abstract class Player extends Mob
         }
         else
         {
-        	this.portalID = portalTileId;
+        	this.portalID = portalBlockId;
+            this.portalColor = portalColor;
             inPortal = true;
         }
     }
diff --git a/src/main/java/net/minecraft/core/entity/projectile/ArrowProjectile.java b/src/main/java/net/minecraft/core/entity/projectile/ArrowProjectile.java
index 13cd620fc..4cd0e03ed 100644
--- a/src/main/java/net/minecraft/core/entity/projectile/ArrowProjectile.java
+++ b/src/main/java/net/minecraft/core/entity/projectile/ArrowProjectile.java
@@ -274,7 +274,7 @@ public class ArrowProjectile extends Projectile
         {
         	player.inventory.insertItem(stack, true);
         	if(stack.stackSize <= 0) {
-                world.playSoundAtEntity(player, this, "random.pop", 0.2F, ((random.nextFloat() - random.nextFloat()) * 0.7F + 1.0F) * 2.0F);
+                world.playSoundAtEntity(player, this, "item.pickup", 1F, ((random.nextFloat() - random.nextFloat()) * 0.7F + 1.0F) * 4.0F);
                 player.onItemPickup(this, stack);
                 remove();
         	}
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/ItemStackArgumentParser.java b/src/main/java/net/minecraft/core/net/command/helpers/ItemStackArgumentParser.java
index 26c7785d0..c1ee9cf69 100644
--- a/src/main/java/net/minecraft/core/net/command/helpers/ItemStackArgumentParser.java
+++ b/src/main/java/net/minecraft/core/net/command/helpers/ItemStackArgumentParser.java
@@ -66,7 +66,6 @@ public class ItemStackArgumentParser extends ArgumentParser {
             builder.append(reader.read());
         }
         String string = builder.toString();
-        System.out.println(string);
         for (Item itemInList : Item.itemsList) {
             if (itemInList == null) continue;
             if (CommandHelper.matchesNamespaceId(itemInList.namespaceID, string)) {
diff --git a/src/main/java/net/minecraft/core/world/PortalHandler.java b/src/main/java/net/minecraft/core/world/PortalHandler.java
index 3d70844e4..a3d34d141 100644
--- a/src/main/java/net/minecraft/core/world/PortalHandler.java
+++ b/src/main/java/net/minecraft/core/world/PortalHandler.java
@@ -1,10 +1,12 @@
 package net.minecraft.core.world;
 
 import net.minecraft.core.entity.Entity;
+import net.minecraft.core.util.helper.DyeColor;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.PortalBlock;
 import net.minecraft.core.world.type.WorldType;
+import org.jetbrains.annotations.Nullable;
 
 import java.util.Random;
 
@@ -20,15 +22,15 @@ public class PortalHandler
         rand = new Random();
     }
 
-    public void teleportEntity(World world, Entity entity, Dimension oldDim, Dimension newDim)
+    public void teleportEntity(World world, Entity entity, @Nullable DyeColor portalColor, Dimension oldDim, Dimension newDim)
     {
-        if (!attemptToTeleportToClosestPortal(world, entity, oldDim, newDim)) {
-            generatePortal(world, entity, oldDim, newDim);
-            attemptToTeleportToClosestPortal(world, entity, oldDim, newDim);
+        if (!attemptToTeleportToClosestPortal(world, entity, portalColor, oldDim, newDim)) {
+            generatePortal(world, entity, portalColor, oldDim, newDim);
+            attemptToTeleportToClosestPortal(world, entity, portalColor, oldDim, newDim);
         }
     }
 
-    public boolean attemptToTeleportToClosestPortal(World world, Entity entity, Dimension oldDim, Dimension newDim)
+    public boolean attemptToTeleportToClosestPortal(World world, Entity entity, @Nullable DyeColor portalColor, Dimension oldDim, Dimension newDim)
     {
         int searchRadius = 128;
         double lowestEntityDistanceSquared = -1D;
@@ -46,9 +48,13 @@ public class PortalHandler
         int oldDimRangeY = oldWorldType.getMaxY() - oldWorldType.getMinY();
         entityPosYScaled -= oldWorldType.getMinY();
         entityPosYScaled /= oldDimRangeY; // Now 0.0 to 1.0
-        int newDimRangeY = newWorldType.getMaxY() - newWorldType.getMinY();
+        int minY = newWorldType.getMinY();
+        if (newDim == Dimension.NETHER) {
+            minY = 128;
+        }
+        int newDimRangeY = newWorldType.getMaxY() - minY;
         entityPosYScaled *= newDimRangeY;
-        entityPosYScaled += newWorldType.getMinY(); // Now newDim minY to newDim maxY
+        entityPosYScaled += minY; // Now newDim minY to newDim maxY
         
         if (newDim.homeDim == null)
         {
@@ -66,12 +72,16 @@ public class PortalHandler
             for(int dz = entityBlockZ - searchRadius; dz <= entityBlockZ + searchRadius; dz++)
             {
                 double zEntityDistance = ((double)dz + 0.5D) - entity.z;
-                for(int dy = newWorldType.getMaxY() - 1; dy >= newWorldType.getMinY(); dy--)
+                for(int dy = newWorldType.getMaxY() - 1; dy >= minY; dy--)
                 {
                     if(world.getBlockId(dx, dy, dz) != targetPortalId)
                     {
                         continue;
                     }
+
+                    if (portalColor != null && targetPortalId > 0 && ((PortalBlock)Block.getBlock(targetPortalId)).getColor(world, dx, dy, dz) != portalColor) {
+                        continue;
+                    }
                     
                     // Find the bottom portal block of the portal
                     for(; world.getBlockId(dx, dy - 1, dz) == targetPortalId; dy--);
@@ -125,7 +135,7 @@ public class PortalHandler
         }
     }
 
-    public boolean generatePortal(World world, Entity entity, Dimension oldDim, Dimension newDim)
+    public boolean generatePortal(World world, Entity entity, @Nullable DyeColor portalColor, Dimension oldDim, Dimension newDim)
     {
         WorldType oldWorldType = oldDim.getDimensionData(world).getWorldType();
         WorldType newWorldType = newDim.getDimensionData(world).getWorldType();
@@ -134,9 +144,15 @@ public class PortalHandler
         int oldDimRangeY = oldWorldType.getMaxY() - oldWorldType.getMinY();
         entityPosYScaled -= oldWorldType.getMinY();
         entityPosYScaled /= oldDimRangeY; // Now 0.0 to 1.0
-        int newDimRangeY = newWorldType.getMaxY() - newWorldType.getMinY();
+        int minY = newWorldType.getMinY();
+        if (newDim == Dimension.NETHER) {
+            minY = 128;
+        }
+        int newDimRangeY = newWorldType.getMaxY() - minY;
         entityPosYScaled *= newDimRangeY;
-        entityPosYScaled += newWorldType.getMinY(); // Now newDim minY to newDim maxY
+        entityPosYScaled += minY; // Now newDim minY to newDim maxY
+
+
 
         byte portalSearchRadius = 16;
         double lowestEntityDistance = -1D;
@@ -168,7 +184,7 @@ public class PortalHandler
             for(int dz = blockZ - portalSearchRadius; dz <= blockZ + portalSearchRadius; dz++)
             {
                 double zEntityDistance = ((double)dz + 0.5D) - entity.z;
-                for(int dy = newWorldType.getMaxY() - 1; dy >= newWorldType.getMinY(); dy--)
+                for(int dy = newWorldType.getMaxY() - 1; dy >= minY; dy--)
                 {
                     if(!world.isAirBlock(dx, dy, dz))
                     {
@@ -230,7 +246,7 @@ label0:
                 for(int dz = blockZ - portalSearchRadius; dz <= blockZ + portalSearchRadius; dz++)
                 {
                     double entityDistanceZ = ((double)dz + 0.5D) - entity.z;
-                    for(int dy = newWorldType.getMaxY() - 1; dy >= newWorldType.getMinY(); dy--)
+                    for(int dy = newWorldType.getMaxY() - 1; dy >= minY; dy--)
                     {
                         if(!world.isAirBlock(dx, dy, dz))
                         {
@@ -324,7 +340,7 @@ label1:
 
             }
             
-            ((PortalBlock)Block.blocksList[targetPortalId]).tryToCreatePortal(world, portalX,  portalY,  portalZ);
+            ((PortalBlock)Block.blocksList[targetPortalId]).tryToCreatePortal(world, portalX,  portalY,  portalZ, portalColor);
 
             world.noNeighborUpdate = false;
             for(int k6 = 0; k6 < 4; k6++)
diff --git a/src/main/java/net/minecraft/core/world/World.java b/src/main/java/net/minecraft/core/world/World.java
index 2a9e7d557..22077df14 100644
--- a/src/main/java/net/minecraft/core/world/World.java
+++ b/src/main/java/net/minecraft/core/world/World.java
@@ -2341,10 +2341,15 @@ public class World implements WorldSource {
     public void onUnload()
     {
         // Unloads all entities
-        updateEntities();
-
-        loadedEntityList.clear();
-        unloadedEntityList.clear();
+        try {
+            updateEntities();
+        } catch (Throwable t) {
+            LOGGER.error("Unhandled exception while unloading all entities!", t);
+            throw t;
+        } finally {
+            loadedEntityList.clear();
+            unloadedEntityList.clear();
+        }
     }
 
     public void saveWorldIndirectly(ProgressListener iprogressupdate)
@@ -2467,45 +2472,45 @@ public class World implements WorldSource {
 
 	public void tick() {
         Debug.push("misc");
-		immediatelyUpdatedPositions.clear();
+        immediatelyUpdatedPositions.clear();
         Debug.change("weather");
-		weatherManager.tick();
+        weatherManager.tick();
         Debug.change("misc");
-		updateSleepingPlayers();
+        updateSleepingPlayers();
         Debug.change("spawning");
         // TODO mob spawning seems to be the cause of many lag spikes, specifically the checks for is a mob is allowed to spawn at a certain xyz position seem to be the worst offenders
-		SpawnerMobs.performSpawning(this, getSpawnerConfig());
+        SpawnerMobs.performSpawning(this, getSpawnerConfig());
         Debug.change("chunk");
-		chunkProvider.tick();
+        chunkProvider.tick();
 
         Debug.change("autosave");
-		int autosaveTimeInSeconds = Global.accessor.getAutosaveTimer();
-		int autosaveTimeInTicks = (autosaveTimeInSeconds * 20);
+        int autosaveTimeInSeconds = Global.accessor.getAutosaveTimer();
+        int autosaveTimeInTicks = (autosaveTimeInSeconds * 20);
 
-		AUTOSAVE = autosaveTimeInTicks != 0;
-		if(AUTOSAVE && runtime % (long) autosaveTimeInTicks == 0L) {
-			saveWorld(false, null, true);
-		}
+        AUTOSAVE = autosaveTimeInTicks != 0;
+        if(AUTOSAVE && runtime % (long) autosaveTimeInTicks == 0L) {
+            saveWorld(false, null, true);
+        }
 
         Debug.change("misc");
-		if(getGameRuleValue(GameRules.DO_DAY_CYCLE)) {
-			levelData.setWorldTime(levelData.getWorldTime() + 1L);
-		}
+        if(getGameRuleValue(GameRules.DO_DAY_CYCLE)) {
+            levelData.setWorldTime(levelData.getWorldTime() + 1L);
+        }
 
-		runtime++;
+        runtime++;
 
-		tickUpdates(false);
+        tickUpdates(false);
         Debug.change("blocks&cavesSounds");
-		updateBlocksAndPlayCaveSounds();
+        updateBlocksAndPlayCaveSounds();
         Debug.change("season&light");
-		updateSeasonAndLight();
+        updateSeasonAndLight();
         if(rainbowTicks > 0)
         {
             rainbowTicks--;
         }
         Debug.pop();
 	}
-	
+
 	public void updateSeasonAndLight() {
 		boolean seasonChanged = false;
 		boolean lightChanged = false;
diff --git a/src/main/java/net/minecraft/core/world/chunk/ChunkPosition.java b/src/main/java/net/minecraft/core/world/chunk/ChunkPosition.java
index 7a669f107..4af851078 100644
--- a/src/main/java/net/minecraft/core/world/chunk/ChunkPosition.java
+++ b/src/main/java/net/minecraft/core/world/chunk/ChunkPosition.java
@@ -27,8 +27,10 @@ public class ChunkPosition {
     }
 
     @Override
-	public int hashCode()
-    {
-        return x * 0x88f9fa + y * 0xef88b + z;
+    public int hashCode() {
+        int result = x;
+        result = 31 * result + y;
+        result = 31 * result + z;
+        return result;
     }
 }
diff --git a/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java b/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
index 755f6fb77..03b35a1b8 100644
--- a/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
+++ b/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
@@ -288,6 +288,14 @@ class WorkbenchGenerator {
             .addInput('X', Blocks.SAND)
             .create("pebbles_to_limestone", new ItemStack(Blocks.COBBLE_LIMESTONE, 2));
 
+        RecipeBuilder.Shaped(CORE_NAMESPACE)
+            .setShape(
+                "#X",
+                "X#")
+            .addInput('#', Items.AMMO_PEBBLE)
+            .addInput('X', Blocks.ICE)
+            .create("pebbles_to_permafrost", new ItemStack(Blocks.COBBLE_PERMAFROST, 2));
+
         RecipeBuilder.Shaped(CORE_NAMESPACE)
             .setShape(
                 "#X",
@@ -298,11 +306,10 @@ class WorkbenchGenerator {
 
         RecipeBuilder.Shaped(CORE_NAMESPACE)
             .setShape(
-                "FPF",
-                "PFP",
-                "FPF")
-            .addInput('F', Items.FLINT)
-            .addInput('P', Items.AMMO_PEBBLE)
+                "#X",
+                "X#")
+            .addInput('#', Items.AMMO_PEBBLE)
+            .addInput('X', Items.FLINT)
             .create("gravel_from_flint_and_pebbles", Blocks.GRAVEL.getDefaultStack());
 
         RecipeBuilder.Shaped(CORE_NAMESPACE)
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index e21991249..d2a22376b 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -652,9 +652,25 @@ public class MinecraftServer
             {
                 playerList.sendPacketToAllPlayersInDimension(new SetTimePacket(worldServer.getWorldTime()), worldServer.dimension.id);
             }
-            worldServer.tick();
-            while (worldServer.updatingLighting()) ;
-            worldServer.updateEntities();
+            try {
+                worldServer.tick();
+            }  catch (Throwable t) {
+                LOGGER.error("Unhandled exception while ticking dimension {}!", worldServer.dimension, t);
+                initiateShutdown();
+                break;
+            }
+            try {
+                while (worldServer.updatingLighting()) ;
+            } catch (Throwable t) {
+                LOGGER.error("Unhandled exception while updating lighting in dimension {}!", worldServer.dimension, t);
+            }
+            try {
+                worldServer.updateEntities();
+            }  catch (Throwable t) {
+                LOGGER.error("Unhandled exception while updating entities in dimension {}!", worldServer.dimension, t);
+                initiateShutdown();
+                break;
+            }
         }
 
         networkServer.handleNetworkListenThread();
diff --git a/src/main/java/net/minecraft/server/entity/player/ServerPlayer.java b/src/main/java/net/minecraft/server/entity/player/ServerPlayer.java
index 0b1b443c2..6c1b5e3c8 100644
--- a/src/main/java/net/minecraft/server/entity/player/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/entity/player/ServerPlayer.java
@@ -323,11 +323,11 @@ public class ServerPlayer extends Player implements ContainerListener {
                         timeUntilPortal = 10;
                         if (dimension == targetDim)
                         {
-                            mcServer.playerList.sendPlayerToOtherDimension(this, 0, true);
+                            mcServer.playerList.sendPlayerToOtherDimension(this, 0, portalColor, true);
                         }
                         else
                         {
-                            mcServer.playerList.sendPlayerToOtherDimension(this, targetDim, true);
+                            mcServer.playerList.sendPlayerToOtherDimension(this, targetDim, portalColor, true);
                         }
                     }
                 }
@@ -509,6 +509,7 @@ public class ServerPlayer extends Player implements ContainerListener {
     {
         getNextWindowId();
         playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_CRAFTING, "Crafting", 9));
+        craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new CraftingMenu(inventory, world, x, y, z);
         craftingInventory.containerId = currentWindowId;
         craftingInventory.addSlotListener(this);
@@ -526,6 +527,7 @@ public class ServerPlayer extends Player implements ContainerListener {
         getNextWindowId();
         ServerPacketHandler.LOGGER.info("{} interacted with chest at ({}, {}, {})", username, x, y, z);
         playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_GENERIC_CONTAINER, container.getName(), container.getContainerSize()));
+        craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new ContainerMenu(inventory, container);
         craftingInventory.containerId = currentWindowId;
         craftingInventory.addSlotListener(this);
@@ -543,7 +545,7 @@ public class ServerPlayer extends Player implements ContainerListener {
         {
             playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_FURNACE, blockEntity.getName(), blockEntity.getContainerSize()));
         }
-
+        craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new FurnaceMenu(inventory, blockEntity);
         craftingInventory.containerId = currentWindowId;
         craftingInventory.addSlotListener(this);
@@ -554,6 +556,7 @@ public class ServerPlayer extends Player implements ContainerListener {
     {
         getNextWindowId();
         playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_DISPENSER, blockEntity.getName(), blockEntity.getContainerSize()));
+        craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new TrapMenu(inventory, blockEntity);
         craftingInventory.containerId = currentWindowId;
         craftingInventory.addSlotListener(this);
@@ -564,6 +567,7 @@ public class ServerPlayer extends Player implements ContainerListener {
     {
         getNextWindowId();
         playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_ACTIVATOR, blockEntity.getName(), blockEntity.getContainerSize()));
+        craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new ActivatorMenu(inventory, blockEntity);
         craftingInventory.containerId = currentWindowId;
         craftingInventory.addSlotListener(this);
@@ -575,6 +579,7 @@ public class ServerPlayer extends Player implements ContainerListener {
     {
         getNextWindowId();
         playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_TROMMEL, blockEntity.getName(), blockEntity.getContainerSize()));
+        craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new TrommelMenu(inventory, blockEntity);
         craftingInventory.containerId = currentWindowId;
         craftingInventory.addSlotListener(this);
@@ -585,6 +590,7 @@ public class ServerPlayer extends Player implements ContainerListener {
     {
         getNextWindowId();
         playerNetServerHandler.sendPacket(new FlagOpenPacket(currentWindowId, blockEntity.x, blockEntity.y, blockEntity.z));
+        craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new FlagMenu(inventory, blockEntity);
         craftingInventory.containerId = currentWindowId;
         craftingInventory.addSlotListener(this);
@@ -594,6 +600,7 @@ public class ServerPlayer extends Player implements ContainerListener {
     {
         getNextWindowId();
 
+        craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new GuidebookMenu();
         craftingInventory.containerId = currentWindowId;
         craftingInventory.addSlotListener(this);
diff --git a/src/main/java/net/minecraft/server/net/PlayerList.java b/src/main/java/net/minecraft/server/net/PlayerList.java
index 2ca164366..b713dbbbd 100644
--- a/src/main/java/net/minecraft/server/net/PlayerList.java
+++ b/src/main/java/net/minecraft/server/net/PlayerList.java
@@ -5,6 +5,7 @@ import net.minecraft.core.achievement.Achievements;
 import net.minecraft.core.block.entity.BlockEntity;
 import net.minecraft.core.data.registry.Registries;
 import net.minecraft.core.entity.player.Player;
+import net.minecraft.core.util.helper.DyeColor;
 import net.minecraft.core.util.helper.UUIDHelper;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.server.entity.player.ServerPlayer;
@@ -247,7 +248,7 @@ public class PlayerList
         return newPlayer;
     }
 
-    public void sendPlayerToOtherDimension(ServerPlayer serverPlayer, int targetDim, boolean generatePortal)
+    public void sendPlayerToOtherDimension(ServerPlayer serverPlayer, int targetDim, DyeColor portalColor, boolean generatePortal)
     {
         WorldServer worldserver = server.getDimensionWorld(serverPlayer.dimension);
         Dimension lastDim = Dimension.getDimensionList().get(serverPlayer.dimension);
@@ -288,7 +289,7 @@ public class PlayerList
             worldserver1.updateEntityWithOptionalForce(serverPlayer, false);
             if (generatePortal){
                 worldserver1.chunkProviderServer.chunkLoadOverride = true;
-                (new PortalHandler()).teleportEntity(worldserver1, serverPlayer, lastDim, newDim);
+                (new PortalHandler()).teleportEntity(worldserver1, serverPlayer, portalColor, lastDim, newDim);
                 worldserver1.chunkProviderServer.chunkLoadOverride = false;
             }
         }
diff --git a/src/main/java/net/minecraft/server/net/command/ConsoleCommandSource.java b/src/main/java/net/minecraft/server/net/command/ConsoleCommandSource.java
index 399b3dc81..17d60c366 100644
--- a/src/main/java/net/minecraft/server/net/command/ConsoleCommandSource.java
+++ b/src/main/java/net/minecraft/server/net/command/ConsoleCommandSource.java
@@ -98,7 +98,7 @@ public class ConsoleCommandSource implements CommandSource, IServerCommandSource
     @Override
     public void movePlayerToDimension(Player player, int dimension) {
         if (player instanceof ServerPlayer)
-            this.server.playerList.sendPlayerToOtherDimension((ServerPlayer) player, dimension, false);
+            this.server.playerList.sendPlayerToOtherDimension((ServerPlayer) player, dimension, null, false);
         else throw new IllegalStateException("Player is not an instance of ServerPlayer");
     }
 
diff --git a/src/main/java/net/minecraft/server/net/command/ServerCommandSource.java b/src/main/java/net/minecraft/server/net/command/ServerCommandSource.java
index ba637d1ba..57d568ea1 100644
--- a/src/main/java/net/minecraft/server/net/command/ServerCommandSource.java
+++ b/src/main/java/net/minecraft/server/net/command/ServerCommandSource.java
@@ -99,7 +99,7 @@ public class ServerCommandSource implements CommandSource, IServerCommandSource
     @Override
     public void movePlayerToDimension(Player player, int dimension) {
         if (player instanceof ServerPlayer)
-            this.server.playerList.sendPlayerToOtherDimension((ServerPlayer) player, dimension, false);
+            this.server.playerList.sendPlayerToOtherDimension((ServerPlayer) player, dimension, null, false);
         else throw new IllegalStateException("Player is not an instance of ServerPlayer");
     }
 
diff --git a/src/main/resources/assets/minecraft/sounds/mojangSounds.json b/src/main/resources/assets/minecraft/sounds/mojangSounds.json
index 7f11915bd..5a439bcac 100644
--- a/src/main/resources/assets/minecraft/sounds/mojangSounds.json
+++ b/src/main/resources/assets/minecraft/sounds/mojangSounds.json
@@ -223,6 +223,6 @@
     "streaming/stal.mus",
     "streaming/strad.mus",
     "streaming/ward.mus",
-    "streaming/wait.mus"
+    "streaming/wait.ogg"
   ]
 }
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/PortalColors.xcf b/src/main/resources/assets/minecraft/textures/block/portal_nether/PortalColors.xcf
new file mode 100644
index 000000000..b3cdc193f
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/PortalColors.xcf differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png
new file mode 100644
index 000000000..0ea250371
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png
new file mode 100644
index 000000000..ec7ac6035
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png
new file mode 100644
index 000000000..4c7204dd0
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png
new file mode 100644
index 000000000..8fedf8b50
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png
new file mode 100644
index 000000000..2c846a900
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png
new file mode 100644
index 000000000..165d25e6c
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png
new file mode 100644
index 000000000..a6fc847af
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png
new file mode 100644
index 000000000..8637364ea
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png
new file mode 100644
index 000000000..166fa1760
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png
new file mode 100644
index 000000000..b3dee510f
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png
new file mode 100644
index 000000000..8ddef5c3e
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png
new file mode 100644
index 000000000..38f339762
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png
new file mode 100644
index 000000000..bfe9d03a5
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png
new file mode 100644
index 000000000..8cfb1271f
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png
new file mode 100644
index 000000000..a4a82237a
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png b/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png
new file mode 100644
index 000000000..456d1dcad
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/PortalColors.xcf b/src/main/resources/assets/minecraft/textures/block/portal_paradise/PortalColors.xcf
new file mode 100644
index 000000000..b3cdc193f
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/PortalColors.xcf differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png
new file mode 100644
index 000000000..0ea250371
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png
new file mode 100644
index 000000000..ec7ac6035
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png
new file mode 100644
index 000000000..4c7204dd0
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png
new file mode 100644
index 000000000..8fedf8b50
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png
new file mode 100644
index 000000000..2c846a900
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png
new file mode 100644
index 000000000..165d25e6c
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png
new file mode 100644
index 000000000..a6fc847af
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png
new file mode 100644
index 000000000..8637364ea
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png
new file mode 100644
index 000000000..166fa1760
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png
new file mode 100644
index 000000000..b3dee510f
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png
new file mode 100644
index 000000000..8ddef5c3e
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png
new file mode 100644
index 000000000..38f339762
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png
new file mode 100644
index 000000000..bfe9d03a5
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png
new file mode 100644
index 000000000..8cfb1271f
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png
new file mode 100644
index 000000000..a4a82237a
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png b/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png
new file mode 100644
index 000000000..456d1dcad
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png differ
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png.mcmeta b/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png.mcmeta
new file mode 100644
index 000000000..4f0718ac9
--- /dev/null
+++ b/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png.mcmeta
@@ -0,0 +1,3 @@
+{
+  "animation": {}
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/minecraft/textures/misc/colors_portal.png b/src/main/resources/assets/minecraft/textures/misc/colors_portal.png
new file mode 100644
index 000000000..12c3cec31
Binary files /dev/null and b/src/main/resources/assets/minecraft/textures/misc/colors_portal.png differ
diff --git a/src/main/resources/credits.txt b/src/main/resources/credits.txt
index 4cc5a309e..90b048269 100644
--- a/src/main/resources/credits.txt
+++ b/src/main/resources/credits.txt
@@ -28,6 +28,9 @@ Snowman64
 Tocinin
 Vivian (vivianfox.)
 Zaraz7
+H2_AIL
+Bones
+Mzov4j
 
 !Thank you for playing
 !Better than Adventure!
\ No newline at end of file
