diff --git a/README.md b/README.md
index 6220d9db0..8fa817470 100644
--- a/README.md
+++ b/README.md
@@ -1,77 +1 @@
-# To-do List and ideas page:
-
-## 1.7.7
-- Increased nether height limit
-- Frozen nether biome
-- Warrens
-- Quarries
-- Ignium tools - made of gold tools encrusted with ignium instantly smelts anything it mines but has low durability since its made of gold and ignium
-- Ignium armour - makes you immune to fire but burning takes down its durability 
-- Brimstone - new stone type with variants only found in the nether.
-- Bloody pigmen and nether blood rain
-- Bloody pigmen drop Strange Meat - like better pork
-- Nether dungeons with flaming skeleton spawners that shoot fire arrows
-- Ash (fertilises farmland, dropped from flaming skeletons)
-- Burning creepers explode instantly
-- The Haunting
-- Spectral ash
-- Spectral torches (spawns mobs nearby but wards off the haunted)
-- Mob essenses (drops from spawners. Can be stuffed inside a scarecrow to lure a certain mob to it)
-- Scarecrows: wards away mobs, can be stuffed with essense to lure mobs of a certain type
-- New bow mechanics (click to spam shoot, hold to draw back for a longer shot)
-- Steel bows (draws back slower but shoots faster + has better durability)
-- Stone oven - can smelt multiple food items at once, and can smelt 1 wheat into bread instantly
-- Glacier biome
-- Compact ice - doesn't melt or turn into water, can be crafted into bricks.
-- New fog mechanics
-- Bigger caves
-- Cave vines with berries for dyes
-- Stalactites
-- Farmable cocoa beans
-- Glow slime that can be thrown for light
-- Throwable slime balls that slow mobs down
-- Molten ores - spawn in the Warrens, when cooled in water and broken give 2x ingots
-
-## Planned for the future (1.7.6 and beyond)
-+ **Nether Overhaul [1.7.7]**
-  - adds a number of biomes based on levels of Dante's Hell
-  - moves the default Nether up 128 blocks to utilise world height properly
-  - adds a layer from Y=0 to Y=128 of solid netherrack and many many interlacing caves, called the Warrens
-+ **Nether Quarries/Mines [1.7.7]**
-  - giant holes in the nether surrounded by bleeding (weeping?) netherrack. chests at the bottom featuring gold and gold tools
-  - signals a nearby ignium vein.
-  - will sometimes punch through into the Warrens
-  - ignium can be crafted with gold tools to create ignium tools which can instantly smelt anything they mine
-  - ignium armour can also be crafted which grants fire resistance, a full set grants immunity but be careful - the armour's durabiity still ticks down.
-+ **General tool rebalancing**
-  - leather can deflect arrows (or maybe gives you pockets?)
-  - unsure on the rest
-+ **Flags**
-  - crafted with sticks, cloth and a dye
-  - colour assigned through a colourizer
-  - can be placed down on blocks (will appear as markers on a map)
-  - or can be placed on boats as sails (does nothing, but looks aesthetically pleasing)
-  - killing a player with a flag grants extra points (useful for capture the flag gamemodes)
-+ **Buffed minecarts and minecart tethering** [1.7.9]
-  - use chains to link minecarts together (crafted with chainlinks)
-  - new rail types for loading and unloading minecarts from chests
-+ **Paradise (sky dimension)** [1.7.8]
-  - new blocks, items and generated structures (perhaps ruined temples made of marble)
-  - ruined bridges between islands
-  - pigmen villages
-    - can barter with pigmen for random items, giving them gold or other items in return
-  - mithril
-    - the sky alternative to ignium
-    - can be used to mine multiple gems from 1 ore. i.e. 1 diamond ore = a random chance of 1-3 diamonds
-  - new mob: the nimbus. floats above the player and shoots down lightining bolts, or blows them away from a distance.
-  - can be visited via a portal placed above ground
-+ **Height dependent biomes**
-## Technical changes/refactors
-+ **The Great Repackaging**
-  - repackage every class into its own package for ease of readability and use
-  - will require some rewrites where classes reference protected static objects within other classes that will now be in a seperate package.
-  - will also require some way to assure people need the base 1.7.3 jar to avoid piracy. probably going to take the NSSS method and omit paulscode
-+ **New media server for sound downloads**
-  - allows for new music (volume alpha tracks i.e. droopy likes ricochet and calm 4)
-    
-  test
+# Better than Adventure!
diff --git a/build.gradle.kts b/build.gradle.kts
index 333ceca85..9b61f98b1 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,122 +1,9 @@
-import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
-import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer
-import java.text.SimpleDateFormat
-import java.util.*
+group = providers.gradleProperty("bta.group").get()
+version = providers.gradleProperty("bta.version").get()
 
-plugins {
-    id("java")
-    id("com.github.johnrengelman.shadow").version("8.1.0")
-    id("maven-publish")
-}
-
-group = "net.minecraft"
-version = "7.3"
-val texturePackVersion = 3;
-val buildChannel = "DEVELOPMENT"
-
-run {
-    val file = File("version.txt")
-    if (file.exists()) {
-        val ver = file.readText().trim()
-        version = ver
-    }
-}
-
-val serverInclude: Configuration by configurations.creating
-val clientInclude: Configuration by configurations.creating
-
-sourceSets {
-    create("common")
-    create("template")
-}
-
-task("generateJava", Copy::class) {
-    group = "bta"
-    delete("src/main/java/net/minecraft/core/Version.java")
-    from("src/template/java")
-    into("src/main/java")
-    include("**/*.java")
-    expand(mapOf("version" to version, "buildTime" to SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date()), "buildChannel" to buildChannel, "packVersion" to texturePackVersion))
-}
-
-task("runRecipeGenerator", JavaExec::class) {
-    group = "bta"
-    mainClass.set("net.minecraft.datagen.RecipesGenerator")
-    classpath = sourceSets["main"].runtimeClasspath
-
-    args = listOf("--output", File(buildDir, "resources/common/recipes").toString())
-}
-
-tasks.withType(JavaCompile::class.java) {
-    dependsOn(tasks["generateJava"])
-    options.isIncremental = false
-    options.encoding = "UTF-8"
-    if (JavaVersion.current() != JavaVersion.VERSION_1_8) {
-        options.compilerArgs.add("--release")
-        options.compilerArgs.add("8")
-    }
-}
-
-task("jarClient", ShadowJar::class) {
-    group = "bta"
-    configurations = listOf(clientInclude)
-    dependsOn(tasks["generateJava"], tasks["runRecipeGenerator"])
-
-    from(sourceSets["main"].output.classesDirs)
-    from(sourceSets["main"].resources)
-    exclude("fabric.mod.json")
-
-    archiveFileName.set("bta-client.jar")
-    manifest {
-        attributes["Main-Class"] = "net.minecraft.client.Minecraft"
-        attributes["Implementation-Version"] = version
-    }
-}
-
-task("jarServer", ShadowJar::class) {
-    group = "bta"
-    configurations = listOf(serverInclude)
-    dependsOn(tasks["generateJava"], tasks["runRecipeGenerator"])
-
-    from(sourceSets["main"].output.classesDirs)
-    exclude("fabric.mod.json")
-
-    archiveFileName.set("bta-server.jar")
-    transform(Log4j2PluginsCacheFileTransformer::class.java)
-    manifest {
-        attributes["Main-Class"] = "net.minecraft.server.MinecraftServer"
-        attributes["Implementation-Version"] = version
-    }
-}
-
-repositories {
-    mavenCentral()
-    maven("https://libraries.minecraft.net/")
-    maven("https://jitpack.io")
-    ivy {
-        url = uri("https://piston-data.mojang.com")
-        patternLayout {
-            artifact("v1/[organisation]/[revision]/[module].jar")
-            m2Compatible
-        }
-        metadataSources { artifact() }
-    }
-    ivy {
-        url = uri("https://github.com/Turnip-Labs")
-        patternLayout {
-            artifact("[organisation]/releases/download/[revision]/[module]-bta-[revision].jar")
-            m2Compatible
-        }
-        metadataSources { artifact() }
-    }
-    jcenter()
-}
-
-val lwjglVersion = "3.3.4"
-
-val lwjglNatives = Pair(
-    System.getProperty("os.name")!!,
-    System.getProperty("os.arch")!!
+ext["lwjglNatives"] = Pair(
+        System.getProperty("os.name")!!,
+        System.getProperty("os.arch")!!
 ).let { (name, arch) ->
     when {
         arrayOf("Linux", "SunOS", "Unit").any { name.startsWith(it) } ->
@@ -139,111 +26,3 @@ val lwjglNatives = Pair(
             throw Error("Unrecognized or unsupported platform. Please set \"lwjglNatives\" manually")
     }
 }
-dependencies {
-    implementation("org.jetbrains:annotations:24.0.0")?.let { clientInclude(it); serverInclude(it) }
-    implementation("legacy-lwjgl3:legacy-lwjgl3:1.0.1")?.let { clientInclude(it) }
-    implementation(platform("org.lwjgl:lwjgl-bom:$lwjglVersion"))
-
-    implementation("org.lwjgl", "lwjgl")
-    implementation("org.lwjgl", "lwjgl-assimp")
-    implementation("org.lwjgl", "lwjgl-glfw")
-    implementation("org.lwjgl", "lwjgl-openal")
-    implementation("org.lwjgl", "lwjgl-opengl")
-    implementation("org.lwjgl", "lwjgl-stb")
-    runtimeOnly("org.lwjgl", "lwjgl", classifier = lwjglNatives)
-    runtimeOnly("org.lwjgl", "lwjgl-assimp", classifier = lwjglNatives)
-    runtimeOnly("org.lwjgl", "lwjgl-glfw", classifier = lwjglNatives)
-    runtimeOnly("org.lwjgl", "lwjgl-openal", classifier = lwjglNatives)
-    runtimeOnly("org.lwjgl", "lwjgl-opengl", classifier = lwjglNatives)
-    runtimeOnly("org.lwjgl", "lwjgl-stb", classifier = lwjglNatives)
-    implementation("com.google.code.gson:gson:2.10.1")?.let { clientInclude(it); serverInclude(it) }
-
-    implementation("com.github.JnCrMx:discord-game-sdk4j:v0.5.5")?.let { clientInclude(it) }
-
-    implementation("objects:client:43db9b498cb67058d2e12d394e6507722e71bb45") // Minecraft client jar
-    implementation("com.mojang:brigadier:1.0.18")?.let { clientInclude(it); serverInclude(it) }
-
-    implementation("com.formdev:flatlaf:3.1.1")?.let { clientInclude(it) } // Dark theme used by SeedViewer
-    
-    implementation("org.slf4j:slf4j-api:2.0.7")?.let { clientInclude(it); serverInclude(it) }
-
-    val log4jVersion = "2.19.0"
-    implementation("org.apache.logging.log4j:log4j-core:${log4jVersion}")?.let { clientInclude(it); serverInclude(it) }
-    implementation("org.apache.logging.log4j:log4j-api:${log4jVersion}")?.let { clientInclude(it); serverInclude(it) }
-    implementation("org.apache.logging.log4j:log4j-slf4j2-impl:${log4jVersion}")?.let { clientInclude(it); serverInclude(it) }
-
-    runtimeOnly(sourceSets.getByName("common").output)?.let { clientInclude(it); serverInclude(it) }
-}
-
-task("copyNatives", Copy::class) {
-    configurations.runtimeClasspath.get()
-        .filter { it.extension == "jar" && it.name.contains("platform") }
-        .forEach { from(zipTree(it).filter { file -> !file.name.contains("META-INF") && !file.name.contains(".MF") }).into("$buildDir/natives") }
-}
-
-task("runServer", JavaExec::class) {
-    dependsOn(tasks["runRecipeGenerator"])
-    val mpDir = File(workingDir, "mp")
-    mpDir.mkdir()
-    workingDir = mpDir
-    group = "bta"
-    mainClass.set("net.minecraft.server.MinecraftServer")
-    classpath = sourceSets["main"].runtimeClasspath
-    jvmArgs = listOf("-ea")
-}
-
-task("runClient", JavaExec::class) {
-    dependsOn(tasks["copyNatives"], tasks["runRecipeGenerator"])
-    group = "bta"
-    mainClass.set("net.minecraft.client.Minecraft")
-    classpath = sourceSets["main"].runtimeClasspath
-    if (arrayOf("Mac OS X", "Darwin").any { System.getProperty("os.name").startsWith(it) }) {
-        jvmArgs = listOf("-XstartOnFirstThread", "-Djava.awt.headless=true", "-ea")
-    } else {
-        jvmArgs = listOf("-ea")
-    }
-
-    systemProperty("java.library.path", layout.buildDirectory.dir("natives").get().asFile.absolutePath)
-}
-
-task("runColorizerGenerator", JavaExec::class) {
-    dependsOn(tasks["copyNatives"])
-    group = "bta"
-    mainClass.set("net.betterthanadventure.utils.ColorizerGenerator")
-    classpath = sourceSets["main"].runtimeClasspath
-
-    systemProperty("java.library.path", layout.buildDirectory.dir("natives").get().asFile.absolutePath)
-}
-
-val createManifestFileTask = tasks.register("createManifestFileTask") {
-    group = "bta"
-    outputs.dir(temporaryDir)
-
-    doLast {
-        val resource = File(temporaryDir, "manifest.json")
-        resource.writeText(
-            "{\n" +
-                "    \"description\": {\n" +
-                "        \"name\": \"Default\",\n" +
-                "        \"line1\": \"The default look of Minecraft.\",\n" +
-                "        \"line2\": \"\",\n" +
-                "        \"packVersion\": \"$version\",\n" +
-                "        \"format\": $texturePackVersion\n" +
-                "    }\n" +
-                "}")
-    }
-}
-
-sourceSets {
-    main {
-        resources {
-            srcDir(createManifestFileTask.map { it.temporaryDir })
-        }
-    }
-}
-
-java {
-    sourceCompatibility = JavaVersion.VERSION_1_8
-    targetCompatibility = JavaVersion.VERSION_1_8
-}
-
diff --git a/game/client/.gitignore b/game/client/.gitignore
new file mode 100644
index 000000000..2959db291
--- /dev/null
+++ b/game/client/.gitignore
@@ -0,0 +1,2 @@
+build
+logs
\ No newline at end of file
diff --git a/game/client/build.gradle.kts b/game/client/build.gradle.kts
new file mode 100644
index 000000000..b850ec707
--- /dev/null
+++ b/game/client/build.gradle.kts
@@ -0,0 +1,134 @@
+import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
+
+plugins {
+    id("java")
+    alias(libs.plugins.shadow)
+}
+
+group = providers.gradleProperty("bta.group").get()
+version = providers.gradleProperty("bta.version").get()
+val texturePackFormat = providers.gradleProperty("bta.texturePackFormat").get()
+
+val include: Configuration by configurations.creating
+
+repositories {
+    mavenCentral()
+    maven("https://libraries.minecraft.net/")
+    maven("https://jitpack.io")
+    ivy {
+        url = uri("https://piston-data.mojang.com")
+        patternLayout {
+            artifact("v1/[organisation]/[revision]/[module].jar")
+            m2Compatible
+        }
+        metadataSources { artifact() }
+    }
+    ivy {
+        url = uri("https://github.com/Turnip-Labs")
+        patternLayout {
+            artifact("[organisation]/releases/download/[revision]/[module]-bta-[revision].jar")
+            m2Compatible
+        }
+        metadataSources { artifact() }
+    }
+}
+
+dependencies {
+    implementation(project(":game:core"))?.let { include(it) }
+    runtimeOnly(project(path = ":util:datagen", configuration = "output"))?.let { include(it) }
+
+    // <core dependencies>
+    implementation(libs.jetbrains.annotations)?.let { include(it) }
+    implementation(libs.gson)?.let { include(it) }
+    implementation(libs.brigadier)?.let { include(it) }
+    implementation(libs.bundles.log4j)?.let { include(it) }
+    // </core dependencies>
+
+    implementation("legacy-lwjgl3:legacy-lwjgl3:1.0.1")?.let { include(it) }
+
+    implementation(libs.bundles.lwjgl)
+    for (lib in libs.bundles.lwjgl.get()) {
+        runtimeOnly(lib.group, lib.name, classifier = rootProject.ext["lwjglNatives"].toString())
+    }
+    implementation(platform(libs.lwjgl.bom))
+
+    implementation("com.github.JnCrMx:discord-game-sdk4j:v0.5.5")?.let { include(it) }
+
+    implementation("objects:client:43db9b498cb67058d2e12d394e6507722e71bb45") // Minecraft client jar
+
+    implementation("com.formdev:flatlaf:3.1.1")?.let { include(it) } // Dark theme used by SeedViewer
+}
+
+java {
+    sourceCompatibility = JavaVersion.VERSION_1_8
+    targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+//region Tasks
+val manifestGenerator by tasks.registering {
+    group = "bta.generator"
+    outputs.dir(temporaryDir)
+
+    doLast {
+        val outputFile = File(temporaryDir, "manifest.json")
+        outputFile.writeText(
+                """
+                    {
+                        "description": {
+                            "name": "Default",
+                            "line1": "The default look of Minecraft.",
+                            "line2": "",
+                            "packVersion": "$version",
+                            "format": $texturePackFormat
+                        }
+                    }
+                """.trimIndent()
+        )
+    }
+}
+
+val run by tasks.registering(JavaExec::class) {
+    group = "bta"
+
+    mainClass.set("net.minecraft.client.Minecraft")
+    classpath += sourceSets["main"].runtimeClasspath
+    jvmArgs = if (arrayOf("Mac OS X", "Darwin").any { System.getProperty("os.name").startsWith(it) }) {
+        listOf("-XstartOnFirstThread", "-Djava.awt.headless=true", "-ea")
+    } else {
+        listOf("-ea")
+    }
+
+    systemProperty("java.library.path", layout.buildDirectory.dir("natives").get().asFile.absolutePath)
+}
+
+val buildJar by tasks.registering(ShadowJar::class) {
+    group = "bta"
+    configurations = listOf(include)
+
+    from(sourceSets.main.get().output.classesDirs)
+    from(sourceSets.main.get().resources)
+    exclude("fabric.mod.json")
+
+    archiveFileName = "bta-client.jar"
+    manifest {
+        attributes["Main-Class"] = "net.minecraft.client.Minecraft"
+        attributes["Implementation-Version"] = version
+    }
+}
+
+tasks.withType(JavaCompile::class.java) {
+    options.isIncremental = false
+    options.encoding = "UTF-8"
+    if (JavaVersion.current() != JavaVersion.VERSION_1_8) {
+        options.compilerArgs.add("--release")
+        options.compilerArgs.add("8")
+    }
+}
+//endregion
+
+sourceSets.main {
+    resources {
+        srcDir(manifestGenerator)
+    }
+}
+
diff --git a/src/main/java/net/betterthanadventure/sound/ChannelLWJGL3OpenAL.java b/game/client/src/main/java/net/betterthanadventure/sound/ChannelLWJGL3OpenAL.java
similarity index 100%
rename from src/main/java/net/betterthanadventure/sound/ChannelLWJGL3OpenAL.java
rename to game/client/src/main/java/net/betterthanadventure/sound/ChannelLWJGL3OpenAL.java
diff --git a/src/main/java/net/betterthanadventure/sound/LibraryLWJGL3OpenAL.java b/game/client/src/main/java/net/betterthanadventure/sound/LibraryLWJGL3OpenAL.java
similarity index 100%
rename from src/main/java/net/betterthanadventure/sound/LibraryLWJGL3OpenAL.java
rename to game/client/src/main/java/net/betterthanadventure/sound/LibraryLWJGL3OpenAL.java
diff --git a/src/main/java/net/betterthanadventure/sound/SourceLWJGL3OpenAL.java b/game/client/src/main/java/net/betterthanadventure/sound/SourceLWJGL3OpenAL.java
similarity index 100%
rename from src/main/java/net/betterthanadventure/sound/SourceLWJGL3OpenAL.java
rename to game/client/src/main/java/net/betterthanadventure/sound/SourceLWJGL3OpenAL.java
diff --git a/src/main/java/net/betterthanadventure/utils/BiomeFinder.java b/game/client/src/main/java/net/betterthanadventure/utils/BiomeFinder.java
similarity index 100%
rename from src/main/java/net/betterthanadventure/utils/BiomeFinder.java
rename to game/client/src/main/java/net/betterthanadventure/utils/BiomeFinder.java
diff --git a/src/main/java/net/betterthanadventure/utils/ColorizerGenerator.java b/game/client/src/main/java/net/betterthanadventure/utils/ColorizerGenerator.java
similarity index 100%
rename from src/main/java/net/betterthanadventure/utils/ColorizerGenerator.java
rename to game/client/src/main/java/net/betterthanadventure/utils/ColorizerGenerator.java
diff --git a/src/main/java/net/betterthanadventure/utils/DataDumper.java b/game/client/src/main/java/net/betterthanadventure/utils/DataDumper.java
similarity index 96%
rename from src/main/java/net/betterthanadventure/utils/DataDumper.java
rename to game/client/src/main/java/net/betterthanadventure/utils/DataDumper.java
index 6e62d8e54..2b9d5de72 100644
--- a/src/main/java/net/betterthanadventure/utils/DataDumper.java
+++ b/game/client/src/main/java/net/betterthanadventure/utils/DataDumper.java
@@ -75,8 +75,8 @@ public class DataDumper implements MinecraftAccessor {
 
         writer = new BufferedWriter(new FileWriter(new File(wikiDumpFile, "blocks.csv")));
         writer.write("ID,Translation Key,Hardness,Blast Resistance,Mining Level,Stacksize,Name,Description,Tags\n");
-        for (int i = 0; i < Block.blocksList.length; i++) {
-            Block block = Block.blocksList[i];
+        for (int i = 0; i < Blocks.blocksList.length; i++) {
+            Block block = Blocks.blocksList[i];
             String string = blockToCSV(block);
             if (string.isEmpty() && !hideUnused){
                 string = i + "\n";
@@ -87,7 +87,7 @@ public class DataDumper implements MinecraftAccessor {
 
         writer = new BufferedWriter(new FileWriter(new File(wikiDumpFile, "items.csv")));
         writer.write("ID,Translation Key,Durability,Restores,Stacksize,Name,Description,Tags\n");
-        for (int i = Block.blocksList.length; i < Item.itemsList.length; i++) {
+        for (int i = Blocks.blocksList.length; i < Item.itemsList.length; i++) {
             Item item = Item.itemsList[i];
             String string = itemToCSV(item);
             if (string.isEmpty() && !hideUnused){
@@ -147,8 +147,8 @@ public class DataDumper implements MinecraftAccessor {
                 .append(Registries.BIOMES.getNumericIdOfItem(biome)).append(",")
                 .append(biome.translationKey).append(",")
                 .append(String.format("0x%06X", biome.color)).append(",")
-                .append(Block.blocksList[biome.topBlock].getKey()).append(",")
-                .append(Block.blocksList[biome.fillerBlock].getKey()).append(",")
+                .append(Blocks.blocksList[biome.topBlock].getKey()).append(",")
+                .append(Blocks.blocksList[biome.fillerBlock].getKey()).append(",")
                 .append(biome.hasSurfaceSnow()).append(",");
 
         builder.append("\"");
diff --git a/src/main/java/net/betterthanadventure/utils/ResetBiomes.java b/game/client/src/main/java/net/betterthanadventure/utils/ResetBiomes.java
similarity index 100%
rename from src/main/java/net/betterthanadventure/utils/ResetBiomes.java
rename to game/client/src/main/java/net/betterthanadventure/utils/ResetBiomes.java
diff --git a/src/main/java/net/minecraft/client/GLAllocation.java b/game/client/src/main/java/net/minecraft/client/GLAllocation.java
similarity index 100%
rename from src/main/java/net/minecraft/client/GLAllocation.java
rename to game/client/src/main/java/net/minecraft/client/GLAllocation.java
diff --git a/src/main/java/net/minecraft/client/Minecraft.java b/game/client/src/main/java/net/minecraft/client/Minecraft.java
similarity index 99%
rename from src/main/java/net/minecraft/client/Minecraft.java
rename to game/client/src/main/java/net/minecraft/client/Minecraft.java
index ed22306f2..bd05f7846 100644
--- a/src/main/java/net/minecraft/client/Minecraft.java
+++ b/game/client/src/main/java/net/minecraft/client/Minecraft.java
@@ -158,7 +158,7 @@ import net.minecraft.core.player.gamemode.Gamemode;
 import net.minecraft.core.util.helper.Axis;
 import net.minecraft.core.util.helper.Direction;
 import net.minecraft.core.util.helper.MathHelper;
-import net.minecraft.core.util.helper.ScreenShot;
+import net.minecraft.client.util.helper.ScreenShot;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.util.helper.Time;
 import net.minecraft.core.util.phys.AABB;
diff --git a/src/main/java/net/minecraft/client/MinecraftApplet.java b/game/client/src/main/java/net/minecraft/client/MinecraftApplet.java
similarity index 100%
rename from src/main/java/net/minecraft/client/MinecraftApplet.java
rename to game/client/src/main/java/net/minecraft/client/MinecraftApplet.java
diff --git a/src/main/java/net/minecraft/client/ScaledResolution.java b/game/client/src/main/java/net/minecraft/client/ScaledResolution.java
similarity index 100%
rename from src/main/java/net/minecraft/client/ScaledResolution.java
rename to game/client/src/main/java/net/minecraft/client/ScaledResolution.java
diff --git a/src/main/java/net/minecraft/client/discord/DownloadNativeLibrary.java b/game/client/src/main/java/net/minecraft/client/discord/DownloadNativeLibrary.java
similarity index 100%
rename from src/main/java/net/minecraft/client/discord/DownloadNativeLibrary.java
rename to game/client/src/main/java/net/minecraft/client/discord/DownloadNativeLibrary.java
diff --git a/src/main/java/net/minecraft/client/discord/RichPresenceHandlerThread.java b/game/client/src/main/java/net/minecraft/client/discord/RichPresenceHandlerThread.java
similarity index 100%
rename from src/main/java/net/minecraft/client/discord/RichPresenceHandlerThread.java
rename to game/client/src/main/java/net/minecraft/client/discord/RichPresenceHandlerThread.java
diff --git a/src/main/java/net/minecraft/client/entity/ClientSkinVariantList.java b/game/client/src/main/java/net/minecraft/client/entity/ClientSkinVariantList.java
similarity index 82%
rename from src/main/java/net/minecraft/client/entity/ClientSkinVariantList.java
rename to game/client/src/main/java/net/minecraft/client/entity/ClientSkinVariantList.java
index 530b597ed..09f700a35 100644
--- a/src/main/java/net/minecraft/client/entity/ClientSkinVariantList.java
+++ b/game/client/src/main/java/net/minecraft/client/entity/ClientSkinVariantList.java
@@ -42,23 +42,33 @@ public class ClientSkinVariantList extends SkinVariantList {
 
 	@Override
 	public @NotNull String getSkinReference(@Nullable String variantJsonPath, @NotNull String defaultKey, int skinIndex) {
+		EntityVariants variants = getEntityVariants(variantJsonPath);
+		if (variants == null) return defaultKey;
+		return variants.getKeyFromIndex(skinIndex);
+	}
+
+	protected @Nullable EntityVariants getEntityVariants(@Nullable String variantJsonPath) {
 		try {
-			if (!Minecraft.getMinecraft(this).gameSettings.mobVariants.value) return defaultKey;
-			if (variantJsonPath == null) return defaultKey;
+			if (!Minecraft.getMinecraft(this).gameSettings.mobVariants.value) return null;
+			if (variantJsonPath == null) return null;
 			if (!variantProcessorMap.containsKey(variantJsonPath)) {
 				loadJson(variantJsonPath);
 			}
-			EntityVariants var = variantProcessorMap.get(variantJsonPath);
-			if (var != null) {
-				return var.getKeyFromIndex(skinIndex);
-			}
+			return variantProcessorMap.get(variantJsonPath);
 		} catch (Exception e) {
-      LOGGER.error("Failed to load json at '{}'!", variantJsonPath, e);
+			LOGGER.error("Failed to load json at '{}'!", variantJsonPath, e);
 			variantProcessorMap.put(variantJsonPath, null); // Null the path after an exception happened trying to load it, prevents exception spam
-			e.printStackTrace();
 		}
-		return defaultKey;
+		return null;
 	}
+
+	@Override
+	public int nextSkinVariant(@Nullable String variantJsonPath, int skinIndex) {
+		EntityVariants variants = getEntityVariants(variantJsonPath);
+		if (variants == null) return skinIndex;
+		return variants.getNextVariant(skinIndex);
+	}
+
 	public void loadJson(String variantJsonPath) {
 		load: try (InputStream stream = mc.texturePackList.getResourceAsStream(variantJsonPath)){
 			if (stream == null) return;
@@ -163,6 +173,20 @@ public class ClientSkinVariantList extends SkinVariantList {
 			return String.valueOf(index % skins);
 		}
 
+		public int getNextVariant(int index) {
+			if (variantEntries != null) {
+				VariantEntry currentEntry = variantEntries[index];
+				for (int i = 1; i < variantEntries.length; i++) {
+					if (currentEntry != variantEntries[(index + i)%variantEntries.length]) {
+						return (index + i)%variantEntries.length;
+					}
+				}
+				return index;
+			} else {
+				return (index + 1) % skins;
+			}
+		}
+
 		protected static class VariantEntry {
 			public final String textureKey;
 			public final double weight;
diff --git a/src/main/java/net/minecraft/client/entity/particle/Particle.java b/game/client/src/main/java/net/minecraft/client/entity/particle/Particle.java
similarity index 98%
rename from src/main/java/net/minecraft/client/entity/particle/Particle.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/Particle.java
index 28bbe4f01..4b9a0c36f 100644
--- a/src/main/java/net/minecraft/client/entity/particle/Particle.java
+++ b/game/client/src/main/java/net/minecraft/client/entity/particle/Particle.java
@@ -123,9 +123,9 @@ public class Particle extends Entity {
     public void render(Tessellator t, float partialTick, double xOff, double yOff, double zOff, float xa, float ya, float za, float xa2, float za2) {
         if (this.tex == null) return;
         float u0 = (float) this.tex.getIconUMin();
-        float u2 = (float) this.tex.getSubIconU(1);
+        float u2 = (float) this.tex.getIconUMax();
         float v0 = (float) this.tex.getIconVMin();
-        float v2 = (float) this.tex.getSubIconV(1);
+        float v2 = (float) this.tex.getIconVMax();
         float r = 0.1F * this.size;
         float x = (float)(this.xo + (this.x - this.xo) * partialTick - xOff);
         float y = (float)(this.yo + (this.y - this.yo) * partialTick - yOff);
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleArrowGolden.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleArrowGolden.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleArrowGolden.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleArrowGolden.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleBlockBreaking.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleBlockBreaking.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleBlockBreaking.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleBlockBreaking.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleBubble.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleBubble.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleBubble.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleBubble.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleDispatcher.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleDispatcher.java
similarity index 97%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleDispatcher.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleDispatcher.java
index 32d9a47d9..cd2bd043d 100644
--- a/src/main/java/net/minecraft/client/entity/particle/ParticleDispatcher.java
+++ b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleDispatcher.java
@@ -52,7 +52,7 @@ public final class ParticleDispatcher extends Dispatcher<String, ParticleLambda>
         addDispatch("puffrgb", (world, x, y, z, motionX, motionY, motionZ, data) -> new ParticlePuffRGB(world, x, y, z, (float) motionX, (float) motionY, (float) motionZ, data));
         addDispatch("reddust", (world, x, y, z, motionX, motionY, motionZ, data) -> new ParticleRedstoneDust(world, x, y, z, data));
         addDispatch("item", (world, x, y, z, motionX, motionY, motionZ, data) -> new ParticleItemBreaking(world, x, y, z, Item.itemsList[MathHelper.clamp(data, 0, Item.itemsList.length - 1)]));
-        addDispatch("block", (world, x, y, z, motionX, motionY, motionZ, data) -> new ParticleBlockBreaking(world, x, y, z, motionX, motionY, motionZ, Block.blocksList[BlockParticleHelper.decodeBlockID(data)], BlockParticleHelper.decodeBlockSide(data), BlockParticleHelper.decodeBlockMeta(data)).init((int) x, (int) y, (int) z));
+        addDispatch("block", (world, x, y, z, motionX, motionY, motionZ, data) -> new ParticleBlockBreaking(world, x, y, z, motionX, motionY, motionZ, Blocks.blocksList[BlockParticleHelper.decodeBlockID(data)], BlockParticleHelper.decodeBlockSide(data), BlockParticleHelper.decodeBlockMeta(data)).init((int) x, (int) y, (int) z));
         addDispatch("snowshovel", (world, x, y, z, motionX, motionY, motionZ, data) -> new ParticleSnowShovel(world, x, y, z, motionX, motionY, motionX));
         addDispatch("heart", (world, x, y, z, motionX, motionY, motionZ, data) -> new ParticleHeart(world, x, y, z, motionX, motionY, motionX));
         addDispatch("slimechunk", (world, x, y, z, motionX, motionY, motionZ, data) -> {
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleExplode.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleExplode.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleExplode.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleExplode.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleFirefly.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleFirefly.java
similarity index 89%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleFirefly.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleFirefly.java
index d0c7a43ac..d4ed48f6f 100644
--- a/src/main/java/net/minecraft/client/entity/particle/ParticleFirefly.java
+++ b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleFirefly.java
@@ -115,24 +115,25 @@ public class ParticleFirefly extends Particle {
         this.gCol += this.oG;
         this.bCol += this.oB;
 
-        float u0 = (float) tex.getIconUMin();
-        float u2 = (float) tex.getSubIconU(1 / 16f);
-        float v0 = (float) tex.getIconVMin();
-        float v2 = (float) tex.getSubIconV(1 / 16f);
+        float u0 = (float) this.tex.getIconUMin();
+        float u2 = (float) this.tex.getIconUMax();
+        float v0 = (float) this.tex.getIconVMin();
+        float v2 = (float) this.tex.getIconVMax();
         float r = 0.1F * size;
         float x = (float) (xo + (this.x - xo) * partialTick);
         float y = (float) (yo + (this.y - yo) * partialTick);
+        float z = (float) (zo + (this.z - zo) * partialTick);
         float br = 1.0f;
         if (LightmapHelper.isLightmapEnabled()) {
             t.setLightmapCoord(getLightmapCoord(partialTick));
         } else {
             br = getBrightness(partialTick);
         }
-        t.setColorOpaque_F(rCol * br, gCol * br, bCol * br);
-        t.addVertexWithUV(x + r, y - r, 0, u2, v2);
-        t.addVertexWithUV(x + r, y + r, 0, u2, v0);
-        t.addVertexWithUV(x - r, y + r, 0, u0, v0);
-        t.addVertexWithUV(x - r, y - r, 0, u0, v2);
+        t.setColorOpaque_F(this.rCol * br, this.gCol * br, this.bCol * br);
+        t.addVertexWithUV(x + r, y - r, z/10, u2, v2);
+        t.addVertexWithUV(x + r, y + r, z/10, u2, v0);
+        t.addVertexWithUV(x - r, y + r, z/10, u0, v0);
+        t.addVertexWithUV(x - r, y - r, z/10, u0, v2);
     }
 
     @Override
@@ -152,13 +153,16 @@ public class ParticleFirefly extends Particle {
 
         this.xo = this.x;
         this.yo = this.y;
+        this.zo = this.z;
         this.xd = (MathHelper.sin((this.sinTimer) * 0.15f)) / 60f;
         this.yd = (MathHelper.cos((this.sinTimer) * 0.15f)) / 60f;
+        this.zd = (MathHelper.cos(this.sinTimer * 0.15f)) / 60f;
         if (this.isReversed) {
             this.xd = -this.xd;
             this.yd = -this.yd;
+            this.zd = -this.zd;
         }
-        this.move(this.xd, this.yd, 0);
+        this.move(this.xd, this.yd, this.zd);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleFlame.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleFlame.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleFlame.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleFlame.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleFluidDrip.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleFluidDrip.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleFluidDrip.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleFluidDrip.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleFootstep.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleFootstep.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleFootstep.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleFootstep.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleHeart.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleHeart.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleHeart.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleHeart.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleItemBreaking.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleItemBreaking.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleItemBreaking.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleItemBreaking.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleLambda.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleLambda.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleLambda.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleLambda.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleLava.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleLava.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleLava.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleLava.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleLeaf.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleLeaf.java
similarity index 97%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleLeaf.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleLeaf.java
index 2981c08c6..02499f5af 100644
--- a/src/main/java/net/minecraft/client/entity/particle/ParticleLeaf.java
+++ b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleLeaf.java
@@ -7,6 +7,7 @@ import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockLeavesBase;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.World;
 
 public class ParticleLeaf extends Particle {
@@ -27,7 +28,7 @@ public class ParticleLeaf extends Particle {
     }
 
     public ParticleLeaf init(int x, int y, int z) {
-        Block block = Block.blocksList[this.world.getBlockId(x, y, z)];
+        Block block = Blocks.blocksList[this.world.getBlockId(x, y, z)];
         if (!(block instanceof BlockLeavesBase)) this.remove();
         int col = BlockColorDispatcher.getInstance().getDispatch(block).getWorldColor(world, x, y, z);
         this.rCol *= (float) (col >> 16 & 0xff) / 255F;
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleNote.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleNote.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleNote.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleNote.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticlePickupAnimation.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticlePickupAnimation.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticlePickupAnimation.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticlePickupAnimation.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticlePortal.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticlePortal.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticlePortal.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticlePortal.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticlePuffRGB.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticlePuffRGB.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticlePuffRGB.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticlePuffRGB.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleRedstoneDust.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleRedstoneDust.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleRedstoneDust.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleRedstoneDust.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleSlimeChunk.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleSlimeChunk.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleSlimeChunk.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleSlimeChunk.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleSmoke.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleSmoke.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleSmoke.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleSmoke.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleSnowShovel.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleSnowShovel.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleSnowShovel.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleSnowShovel.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleSplash.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleSplash.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleSplash.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleSplash.java
diff --git a/src/main/java/net/minecraft/client/entity/particle/ParticleWaterDrop.java b/game/client/src/main/java/net/minecraft/client/entity/particle/ParticleWaterDrop.java
similarity index 100%
rename from src/main/java/net/minecraft/client/entity/particle/ParticleWaterDrop.java
rename to game/client/src/main/java/net/minecraft/client/entity/particle/ParticleWaterDrop.java
diff --git a/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java b/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java
similarity index 99%
rename from src/main/java/net/minecraft/client/entity/player/PlayerLocal.java
rename to game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java
index 5f8093ad6..40642c06a 100644
--- a/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java
+++ b/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocal.java
@@ -27,6 +27,7 @@ import net.minecraft.core.achievement.stat.StatList;
 import net.minecraft.client.gui.toasts.AchievementToast;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockPortal;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntityActivator;
 import net.minecraft.core.block.entity.TileEntityDispenser;
 import net.minecraft.core.block.entity.TileEntityFlag;
@@ -162,7 +163,7 @@ public class PlayerLocal extends Player
                 {
                     timeUntilPortal = 10;
                     mc.sndManager.playSound("portal.travel", SoundCategory.WORLD_SOUNDS, 1.0F, random.nextFloat() * 0.4F + 0.8F);
-                    int targetDim = ((BlockPortal) Block.blocksList[portalID]).targetDimension;
+                    int targetDim = ((BlockPortal) Blocks.blocksList[portalID]).targetDimension;
                     if (dimension == targetDim)
                     {
                         mc.usePortal(0, portalColor);
diff --git a/src/main/java/net/minecraft/client/entity/player/PlayerLocalMultiplayer.java b/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocalMultiplayer.java
similarity index 74%
rename from src/main/java/net/minecraft/client/entity/player/PlayerLocalMultiplayer.java
rename to game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocalMultiplayer.java
index cc674e2b1..765a860fc 100644
--- a/src/main/java/net/minecraft/client/entity/player/PlayerLocalMultiplayer.java
+++ b/game/client/src/main/java/net/minecraft/client/entity/player/PlayerLocalMultiplayer.java
@@ -8,18 +8,18 @@ import net.minecraft.core.data.registry.Registries;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityItem;
 import net.minecraft.core.entity.vehicle.EntityBoat;
-import net.minecraft.core.net.packet.BoatControlPacket;
-import net.minecraft.core.net.packet.ChatPacket;
-import net.minecraft.core.net.packet.UpdatePlayerStatePacket;
-import net.minecraft.core.net.packet.MovePlayerPacket;
-import net.minecraft.core.net.packet.ContainerClosePacket;
-import net.minecraft.core.net.packet.UpdateCreativeInventoryPacket;
-import net.minecraft.core.net.packet.SetHotbarOffsetPacket;
-import net.minecraft.core.net.packet.GuidebookPacket;
-import net.minecraft.core.net.packet.PlayerActionPacket;
-import net.minecraft.core.net.packet.AnimatePacket;
-import net.minecraft.core.net.packet.CustomPayloadPacket;
-import net.minecraft.core.net.packet.RespawnPacket;
+import net.minecraft.core.net.packet.PacketBoatControl;
+import net.minecraft.core.net.packet.PacketChat;
+import net.minecraft.core.net.packet.PacketUpdatePlayerState;
+import net.minecraft.core.net.packet.PacketMovePlayer;
+import net.minecraft.core.net.packet.PacketContainerClose;
+import net.minecraft.core.net.packet.PacketUpdateCreativeInventory;
+import net.minecraft.core.net.packet.PacketSetHotbarOffset;
+import net.minecraft.core.net.packet.PacketGuidebook;
+import net.minecraft.core.net.packet.PacketPlayerAction;
+import net.minecraft.core.net.packet.PacketAnimate;
+import net.minecraft.core.net.packet.PacketCustomPayload;
+import net.minecraft.core.net.packet.PacketRespawn;
 import net.minecraft.core.player.Session;
 import net.minecraft.core.util.helper.AES;
 import net.minecraft.core.util.helper.DamageType;
@@ -89,10 +89,10 @@ public class PlayerLocalMultiplayer extends PlayerLocal
         {
             if(flag)
             {
-                sendQueue.addToSendQueue(new UpdatePlayerStatePacket(UpdatePlayerStatePacket.STATE_SNEAK));
+                sendQueue.addToSendQueue(new PacketUpdatePlayerState(PacketUpdatePlayerState.STATE_SNEAK));
             } else
             {
-                sendQueue.addToSendQueue(new UpdatePlayerStatePacket(UpdatePlayerStatePacket.STATE_UN_SNEAK));
+                sendQueue.addToSendQueue(new PacketUpdatePlayerState(PacketUpdatePlayerState.STATE_UN_SNEAK));
             }
             wasSneaking = flag;
         }
@@ -108,30 +108,30 @@ public class PlayerLocalMultiplayer extends PlayerLocal
         {
             if(flag2)
             {
-                sendQueue.addToSendQueue(new MovePlayerPacket.Pos(xd, -999D, zd, onGround));
+                sendQueue.addToSendQueue(new PacketMovePlayer.Pos(xd, -999D, zd, onGround));
             } else
             {
-                sendQueue.addToSendQueue(new MovePlayerPacket.PosRot(xd, -999D, zd, yRot, xRot, onGround));
+                sendQueue.addToSendQueue(new PacketMovePlayer.PosRot(xd, -999D, zd, yRot, xRot, onGround));
             }
             flag1 = false;
         } else
         if(flag1 && flag2)
         {
-            sendQueue.addToSendQueue(new MovePlayerPacket.PosRot(x, bb.minY, z, yRot, xRot, onGround));
+            sendQueue.addToSendQueue(new PacketMovePlayer.PosRot(x, bb.minY, z, yRot, xRot, onGround));
             noSendTime = 0;
         } else
         if(flag1)
         {
-            sendQueue.addToSendQueue(new MovePlayerPacket.Pos(x, bb.minY, z, onGround));
+            sendQueue.addToSendQueue(new PacketMovePlayer.Pos(x, bb.minY, z, onGround));
             noSendTime = 0;
         } else
         if(flag2)
         {
-            sendQueue.addToSendQueue(new MovePlayerPacket.Rot(yRot, xRot, onGround));
+            sendQueue.addToSendQueue(new PacketMovePlayer.Rot(yRot, xRot, onGround));
             noSendTime = 0;
         } else
         {
-            sendQueue.addToSendQueue(new MovePlayerPacket(onGround));
+            sendQueue.addToSendQueue(new PacketMovePlayer(onGround));
             if(wasOnGround != onGround || noSendTime > 200)
             {
                 noSendTime = 0;
@@ -157,7 +157,7 @@ public class PlayerLocalMultiplayer extends PlayerLocal
 
     @Override
     public void dropCurrentItem(boolean dropFullStack) {
-        sendQueue.addToSendQueue(new PlayerActionPacket(dropFullStack ? PlayerActionPacket.ACTION_DROP_ITEM_STACK : PlayerActionPacket.ACTION_DROP_ITEM_SINGLE, 0, 0, 0, Side.NONE, 0.0, 0.0));
+        sendQueue.addToSendQueue(new PacketPlayerAction(dropFullStack ? PacketPlayerAction.ACTION_DROP_ITEM_STACK : PacketPlayerAction.ACTION_DROP_ITEM_SINGLE, 0, 0, 0, Side.NONE, 0.0, 0.0));
     }
 
     private void sendInventoryChanged()
@@ -172,42 +172,42 @@ public class PlayerLocalMultiplayer extends PlayerLocal
     @Override
 	public void sendChatMessage(String s)
     {
-        sendQueue.addToSendQueue(new ChatPacket(s, AES.clientKeyChain));
+        sendQueue.addToSendQueue(new PacketChat(s, AES.clientKeyChain));
     	addToSendHistory(s);
     }
     
     @Override
 	public void updateCreativeInventory(int page, String searchText)
     {
-    	sendQueue.addToSendQueue(new UpdateCreativeInventoryPacket(craftingInventory.containerId, page, searchText));
+    	sendQueue.addToSendQueue(new PacketUpdateCreativeInventory(craftingInventory.containerId, page, searchText));
     }
 
     @Override
     public void setHotbarOffset(int offset)
     {
         super.setHotbarOffset(offset);
-        sendQueue.addToSendQueue(new SetHotbarOffsetPacket(offset));
+        sendQueue.addToSendQueue(new PacketSetHotbarOffset(offset));
     }
 
     @Override
 	public void displayGuidebookScreen()
     {
         mc.displayScreen(new ScreenGuidebook(mc.currentScreen));
-        sendQueue.addToSendQueue(new GuidebookPacket(mc.currentScreen instanceof ScreenGuidebook));
+        sendQueue.addToSendQueue(new PacketGuidebook(mc.currentScreen instanceof ScreenGuidebook));
     }
 
     @Override
 	public void swingItem()
     {
         super.swingItem();
-        sendQueue.addToSendQueue(new AnimatePacket(this, 1));
+        sendQueue.addToSendQueue(new PacketAnimate(this, 1));
     }
 
     @Override
 	public void respawnPlayer()
     {
         sendInventoryChanged();
-        sendQueue.addToSendQueue(new RespawnPacket((byte)dimension, (byte) Registries.WORLD_TYPES.getNumericIdOfItem(world.worldType)));
+        sendQueue.addToSendQueue(new PacketRespawn((byte)dimension, (byte) Registries.WORLD_TYPES.getNumericIdOfItem(world.worldType)));
     }
 
     @Override
@@ -219,7 +219,7 @@ public class PlayerLocalMultiplayer extends PlayerLocal
     @Override
 	public void closeScreen()
     {
-        sendQueue.addToSendQueue(new ContainerClosePacket(craftingInventory.containerId));
+        sendQueue.addToSendQueue(new PacketContainerClose(craftingInventory.containerId));
         inventory.setHeldItemStack(null);
         super.closeScreen();
     }
@@ -269,18 +269,18 @@ public class PlayerLocalMultiplayer extends PlayerLocal
     	data[2] = (byte) (rotationLockVertical != null ? rotationLockVertical.getId() : -1);
     	data[3] = (byte) (placementModeOverride != null ? placementModeOverride.index() : -1);
     	
-    	sendQueue.addToSendQueue(new CustomPayloadPacket("BTA|RotationLock", data));
+    	sendQueue.addToSendQueue(new PacketCustomPayload("BTA|RotationLock", data));
     }
     
     @Override
     public void pickBlock(int x, int y, int z) {
-    	sendQueue.addToSendQueue(new PlayerActionPacket(PlayerActionPacket.ACTION_PICK_BLOCK, x, y, z, Side.NONE, 0.0, 0.0));
+    	sendQueue.addToSendQueue(new PacketPlayerAction(PacketPlayerAction.ACTION_PICK_BLOCK, x, y, z, Side.NONE, 0.0, 0.0));
     }
 
     @Override
     public void sendSpecialVehiclePacket() {
         if (vehicle instanceof EntityBoat) {
-            sendQueue.addToSendQueue(new BoatControlPacket((EntityBoat) vehicle));
+            sendQueue.addToSendQueue(new PacketBoatControl((EntityBoat) vehicle));
         }
     }
 }
diff --git a/src/main/java/net/minecraft/client/entity/player/PlayerRemote.java b/game/client/src/main/java/net/minecraft/client/entity/player/PlayerRemote.java
similarity index 97%
rename from src/main/java/net/minecraft/client/entity/player/PlayerRemote.java
rename to game/client/src/main/java/net/minecraft/client/entity/player/PlayerRemote.java
index 0b184bcee..05400c3d4 100644
--- a/src/main/java/net/minecraft/client/entity/player/PlayerRemote.java
+++ b/game/client/src/main/java/net/minecraft/client/entity/player/PlayerRemote.java
@@ -153,4 +153,10 @@ public class PlayerRemote extends Player
 	public void sendStatusMessage(String message) {
 		
 	}
+
+    @Override
+    public float getHeadHeight()
+    {
+        return getHeightOffset();
+    }
 }
diff --git a/src/main/java/net/minecraft/client/gui/ButtonElement.java b/game/client/src/main/java/net/minecraft/client/gui/ButtonElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ButtonElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/ButtonElement.java
diff --git a/src/main/java/net/minecraft/client/gui/ClickableLabelElement.java b/game/client/src/main/java/net/minecraft/client/gui/ClickableLabelElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ClickableLabelElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/ClickableLabelElement.java
diff --git a/src/main/java/net/minecraft/client/gui/ControllerGlyphElement.java b/game/client/src/main/java/net/minecraft/client/gui/ControllerGlyphElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ControllerGlyphElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/ControllerGlyphElement.java
diff --git a/src/main/java/net/minecraft/client/gui/DrawableSurfaceElement.java b/game/client/src/main/java/net/minecraft/client/gui/DrawableSurfaceElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/DrawableSurfaceElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/DrawableSurfaceElement.java
diff --git a/src/main/java/net/minecraft/client/gui/ExceptionPopupElement.java b/game/client/src/main/java/net/minecraft/client/gui/ExceptionPopupElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ExceptionPopupElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/ExceptionPopupElement.java
diff --git a/src/main/java/net/minecraft/client/gui/Gui.java b/game/client/src/main/java/net/minecraft/client/gui/Gui.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/Gui.java
rename to game/client/src/main/java/net/minecraft/client/gui/Gui.java
diff --git a/src/main/java/net/minecraft/client/gui/GuiElement.java b/game/client/src/main/java/net/minecraft/client/gui/GuiElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/GuiElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/GuiElement.java
diff --git a/src/main/java/net/minecraft/client/gui/HeldItemTooltipElement.java b/game/client/src/main/java/net/minecraft/client/gui/HeldItemTooltipElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/HeldItemTooltipElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/HeldItemTooltipElement.java
diff --git a/src/main/java/net/minecraft/client/gui/IntegerSliderElement.java b/game/client/src/main/java/net/minecraft/client/gui/IntegerSliderElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/IntegerSliderElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/IntegerSliderElement.java
diff --git a/src/main/java/net/minecraft/client/gui/ItemElement.java b/game/client/src/main/java/net/minecraft/client/gui/ItemElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ItemElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/ItemElement.java
diff --git a/src/main/java/net/minecraft/client/gui/ListLayout.java b/game/client/src/main/java/net/minecraft/client/gui/ListLayout.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ListLayout.java
rename to game/client/src/main/java/net/minecraft/client/gui/ListLayout.java
diff --git a/src/main/java/net/minecraft/client/gui/MainMenuBackground.java b/game/client/src/main/java/net/minecraft/client/gui/MainMenuBackground.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/MainMenuBackground.java
rename to game/client/src/main/java/net/minecraft/client/gui/MainMenuBackground.java
diff --git a/src/main/java/net/minecraft/client/gui/Screen.java b/game/client/src/main/java/net/minecraft/client/gui/Screen.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/Screen.java
rename to game/client/src/main/java/net/minecraft/client/gui/Screen.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenAddServer.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenAddServer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenAddServer.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenAddServer.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenBadJavaArch.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenBadJavaArch.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenBadJavaArch.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenBadJavaArch.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenBlank.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenBlank.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenBlank.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenBlank.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenConflictWarning.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenConflictWarning.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenConflictWarning.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenConflictWarning.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenConnectFailed.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenConnectFailed.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenConnectFailed.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenConnectFailed.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenConnectToIp.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenConnectToIp.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenConnectToIp.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenConnectToIp.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenConnecting.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenConnecting.java
similarity index 97%
rename from src/main/java/net/minecraft/client/gui/ScreenConnecting.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenConnecting.java
index 2a5f3399b..db864d7c9 100644
--- a/src/main/java/net/minecraft/client/gui/ScreenConnecting.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/ScreenConnecting.java
@@ -4,7 +4,7 @@ import com.mojang.logging.LogUtils;
 import net.minecraft.client.Minecraft;
 import net.minecraft.client.net.handler.PacketHandlerClient;
 import net.minecraft.core.lang.I18n;
-import net.minecraft.core.net.packet.PreLoginPacket;
+import net.minecraft.core.net.packet.PacketPreLogin;
 import org.slf4j.Logger;
 
 import java.net.ConnectException;
@@ -27,7 +27,7 @@ public class ScreenConnecting extends Screen
                 {
                     return;
                 }
-                clientHandler.addToSendQueue(new PreLoginPacket(mc.session.username));
+                clientHandler.addToSendQueue(new PacketPreLogin(mc.session.username));
             }
             catch(UnknownHostException unknownhostexception)
             {
diff --git a/src/main/java/net/minecraft/client/gui/ScreenControllerSetup.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenControllerSetup.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenControllerSetup.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenControllerSetup.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenCreateWorld.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenCreateWorld.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenCreateWorld.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenCreateWorld.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenCredits.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenCredits.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenCredits.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenCredits.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenDownloadTerrain.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenDownloadTerrain.java
similarity index 91%
rename from src/main/java/net/minecraft/client/gui/ScreenDownloadTerrain.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenDownloadTerrain.java
index 03be6e8fa..f83249655 100644
--- a/src/main/java/net/minecraft/client/gui/ScreenDownloadTerrain.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/ScreenDownloadTerrain.java
@@ -1,7 +1,7 @@
 package net.minecraft.client.gui;
 
 import net.minecraft.client.net.handler.PacketHandlerClient;
-import net.minecraft.core.net.packet.KeepAlivePacket;
+import net.minecraft.core.net.packet.PacketKeepAlive;
 import net.minecraft.core.lang.I18n;
 
 public class ScreenDownloadTerrain extends Screen
@@ -30,7 +30,7 @@ public class ScreenDownloadTerrain extends Screen
         updateCounter++;
         if(updateCounter % 20 == 0)
         {
-            netHandler.addToSendQueue(new KeepAlivePacket());
+            netHandler.addToSendQueue(new PacketKeepAlive());
         }
         if(netHandler != null)
         {
diff --git a/src/main/java/net/minecraft/client/gui/ScreenGameOver.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenGameOver.java
similarity index 95%
rename from src/main/java/net/minecraft/client/gui/ScreenGameOver.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenGameOver.java
index eb0c99ed2..04f3aed52 100644
--- a/src/main/java/net/minecraft/client/gui/ScreenGameOver.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/ScreenGameOver.java
@@ -2,7 +2,7 @@ package net.minecraft.client.gui;
 
 import net.minecraft.client.entity.player.PlayerLocalMultiplayer;
 import net.minecraft.core.lang.I18n;
-import net.minecraft.core.net.packet.KeepAlivePacket;
+import net.minecraft.core.net.packet.PacketKeepAlive;
 import net.minecraft.core.player.gamemode.Gamemode;
 import org.lwjgl.opengl.GL11;
 
@@ -20,7 +20,7 @@ public class ScreenGameOver extends Screen
         tickCount++;
         if (mc.isMultiplayerWorld() && mc.thePlayer instanceof PlayerLocalMultiplayer && tickCount % 10 == 0){
             PlayerLocalMultiplayer clientPlayerMP = (PlayerLocalMultiplayer) mc.thePlayer;
-            clientPlayerMP.sendQueue.addToSendQueue(new KeepAlivePacket());
+            clientPlayerMP.sendQueue.addToSendQueue(new PacketKeepAlive());
         }
     }
 
diff --git a/src/main/java/net/minecraft/client/gui/ScreenHudDesigner.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenHudDesigner.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenHudDesigner.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenHudDesigner.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenLabelEditor.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenLabelEditor.java
similarity index 95%
rename from src/main/java/net/minecraft/client/gui/ScreenLabelEditor.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenLabelEditor.java
index c015c5720..a308de9fc 100644
--- a/src/main/java/net/minecraft/client/gui/ScreenLabelEditor.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/ScreenLabelEditor.java
@@ -3,7 +3,7 @@ package net.minecraft.client.gui;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.lang.I18n;
 import net.minecraft.core.net.command.TextFormatting;
-import net.minecraft.core.net.packet.SetItemNamePacket;
+import net.minecraft.core.net.packet.PacketSetItemName;
 import net.minecraft.core.util.helper.ChatAllowedCharacters;
 import org.lwjgl.input.Keyboard;
 import org.lwjgl.opengl.GL11;
@@ -53,7 +53,7 @@ public class ScreenLabelEditor extends Screen
 
             if (mc.currentWorld.isClientSide)
             {
-                mc.getSendQueue().addToSendQueue(new SetItemNamePacket(slot, text));
+                mc.getSendQueue().addToSendQueue(new PacketSetItemName(slot, text));
             }
         }
     }
diff --git a/src/main/java/net/minecraft/client/gui/ScreenMainMenu.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenMainMenu.java
similarity index 98%
rename from src/main/java/net/minecraft/client/gui/ScreenMainMenu.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenMainMenu.java
index 284e13ab8..fff1eafad 100644
--- a/src/main/java/net/minecraft/client/gui/ScreenMainMenu.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/ScreenMainMenu.java
@@ -7,7 +7,9 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Random;
 
@@ -21,6 +23,7 @@ import net.minecraft.client.render.block.model.BlockModelDispatcher;
 import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.Global;
+import net.minecraft.core.Version;
 import org.lwjgl.input.Keyboard;
 import org.lwjgl.opengl.GL11;
 import org.lwjgl.util.glu.GLU;
@@ -60,6 +63,7 @@ public class ScreenMainMenu extends Screen
     private int indexToDraw = 0;
     private int codeProgress = 0;
     private boolean showBuildTime = false;
+    private String buildTimeString = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(Version.BUILD_TIME));
     
     static {
     	loadLogo();
@@ -339,7 +343,7 @@ public class ScreenMainMenu extends Screen
         GL11.glPopMatrix();
         int versionTextColor = mc.gameSettings.alphaMenu.value || !mc.mainMenuBackground.isEnabled() ? 0x505050 : 0xFFFFFF;
         if (showBuildTime) {
-            drawString(font, Global.BUILD_TIME, 2, 2, versionTextColor);
+            drawString(font, buildTimeString, 2, 2, versionTextColor);
         } else {
             drawString(font, "Better than Adventure! " + Minecraft.VERSION, 2, 2, versionTextColor);
         }
@@ -436,7 +440,7 @@ public class ScreenMainMenu extends Screen
 
                         GL11.glTranslatef((float)var7, (float)var6, var10);
                         GL11.glScalef(var11, var11, var11);
-                        var5.renderBlockAsItem(Tessellator.instance, BlockModelDispatcher.getInstance().getDispatch(BLOCKS_TO_DRAW[indexToDraw]), BLOCKS_TO_DRAW[indexToDraw], var12);
+                        var5.renderBlockAsItem(Tessellator.instance, BlockModelDispatcher.getInstance().getDispatch(BLOCKS_TO_DRAW[indexToDraw]), var12);
                         GL11.glPopMatrix();
                     }
                 }
diff --git a/src/main/java/net/minecraft/client/gui/ScreenMissingMinecraft.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenMissingMinecraft.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenMissingMinecraft.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenMissingMinecraft.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenMobPicker.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenMobPicker.java
similarity index 94%
rename from src/main/java/net/minecraft/client/gui/ScreenMobPicker.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenMobPicker.java
index af589e346..323df04c2 100644
--- a/src/main/java/net/minecraft/client/gui/ScreenMobPicker.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/ScreenMobPicker.java
@@ -7,7 +7,7 @@ import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityDispatcher;
 import net.minecraft.core.entity.Mob;
 import net.minecraft.core.entity.animal.MobFireflyCluster;
-import net.minecraft.core.net.packet.SetMobSpawnerPacket;
+import net.minecraft.core.net.packet.PacketSetMobSpawner;
 import net.minecraft.core.util.collection.NamespaceID;
 
 import java.lang.reflect.Modifier;
@@ -68,7 +68,7 @@ public class ScreenMobPicker
                         }
                         spawner.setMobId(mobId);
                     } else {
-                        mc.getSendQueue().addToSendQueue(new SetMobSpawnerPacket(x, y, z, EntityDispatcher.classForId(mobId)));
+                        mc.getSendQueue().addToSendQueue(new PacketSetMobSpawner(x, y, z, EntityDispatcher.classForId(mobId)));
                     }
                 }
                 shouldClose = true;
diff --git a/src/main/java/net/minecraft/client/gui/ScreenOutOfMemory.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenOutOfMemory.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenOutOfMemory.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenOutOfMemory.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenPaintingPicker.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenPaintingPicker.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenPaintingPicker.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenPaintingPicker.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenPause.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenPause.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenPause.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenPause.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenPhotoMode.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenPhotoMode.java
similarity index 99%
rename from src/main/java/net/minecraft/client/gui/ScreenPhotoMode.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenPhotoMode.java
index 2f0f807b9..5293cb726 100644
--- a/src/main/java/net/minecraft/client/gui/ScreenPhotoMode.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/ScreenPhotoMode.java
@@ -14,7 +14,7 @@ import net.minecraft.core.lang.I18n;
 import net.minecraft.client.render.Renderer;
 import net.minecraft.client.render.shader.PhotoModeRenderer;
 import net.minecraft.client.render.shader.Shaders;
-import net.minecraft.core.util.helper.ScreenShot;
+import net.minecraft.client.util.helper.ScreenShot;
 
 import java.io.File;
 import java.util.Locale;
diff --git a/src/main/java/net/minecraft/client/gui/ScreenSelectServer.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenSelectServer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenSelectServer.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenSelectServer.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenSelectWorld.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenSelectWorld.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenSelectWorld.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenSelectWorld.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenSignEditor.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenSignEditor.java
similarity index 96%
rename from src/main/java/net/minecraft/client/gui/ScreenSignEditor.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenSignEditor.java
index 1e7dc56f8..78734166e 100644
--- a/src/main/java/net/minecraft/client/gui/ScreenSignEditor.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/ScreenSignEditor.java
@@ -5,7 +5,7 @@ import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntitySign;
 import net.minecraft.core.enums.EnumSignPicture;
 import net.minecraft.core.util.helper.ChatAllowedCharacters;
-import net.minecraft.core.net.packet.SignUpdatePacket;
+import net.minecraft.core.net.packet.PacketSignUpdate;
 import net.minecraft.client.render.BlockEntityRenderDispatcher;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.lang.I18n;
@@ -47,7 +47,7 @@ public class ScreenSignEditor extends Screen
         // but thaboar was getting a crash from the world being null
         if(mc.currentWorld != null && mc.currentWorld.isClientSide)
         {
-            mc.getSendQueue().addToSendQueue(new SignUpdatePacket(entitySign.x, entitySign.y, entitySign.z, entitySign.signText, entitySign.getPicture().getId(), entitySign.getColor().id));
+            mc.getSendQueue().addToSendQueue(new PacketSignUpdate(entitySign.x, entitySign.y, entitySign.z, entitySign.signText, entitySign.getPicture().getId(), entitySign.getColor().id));
         }
     }
 
diff --git a/src/main/java/net/minecraft/client/gui/ScreenSleepSP.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenSleepSP.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenSleepSP.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenSleepSP.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenSoundTest.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenSoundTest.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenSoundTest.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenSoundTest.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenStats.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenStats.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenStats.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenStats.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenTextureViewer.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenTextureViewer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScreenTextureViewer.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenTextureViewer.java
diff --git a/src/main/java/net/minecraft/client/gui/ScreenWandMobPicker.java b/game/client/src/main/java/net/minecraft/client/gui/ScreenWandMobPicker.java
similarity index 95%
rename from src/main/java/net/minecraft/client/gui/ScreenWandMobPicker.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScreenWandMobPicker.java
index 4006dac6b..922125d27 100644
--- a/src/main/java/net/minecraft/client/gui/ScreenWandMobPicker.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/ScreenWandMobPicker.java
@@ -6,7 +6,7 @@ import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityDispatcher;
 import net.minecraft.core.entity.Mob;
 import net.minecraft.core.item.ItemStack;
-import net.minecraft.core.net.packet.CustomPayloadPacket;
+import net.minecraft.core.net.packet.PacketCustomPayload;
 import net.minecraft.core.util.collection.NamespaceID;
 
 import java.lang.reflect.Modifier;
@@ -58,7 +58,7 @@ public class ScreenWandMobPicker extends Screen {
                         if (!mc.currentWorld.isClientSide) {
                             wand.getData().putString("monster", mobId);
                         } else {
-                            mc.getSendQueue().addToSendQueue(new CustomPayloadPacket("BTA|WandMonster", mobId.getBytes(StandardCharsets.UTF_8)));
+                            mc.getSendQueue().addToSendQueue(new PacketCustomPayload("BTA|WandMonster", mobId.getBytes(StandardCharsets.UTF_8)));
                         }
                     }
                     shouldClose = true;
diff --git a/src/main/java/net/minecraft/client/gui/ScrolledSelectionList.java b/game/client/src/main/java/net/minecraft/client/gui/ScrolledSelectionList.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/ScrolledSelectionList.java
rename to game/client/src/main/java/net/minecraft/client/gui/ScrolledSelectionList.java
diff --git a/src/main/java/net/minecraft/client/gui/SliderElement.java b/game/client/src/main/java/net/minecraft/client/gui/SliderElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/SliderElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/SliderElement.java
diff --git a/src/main/java/net/minecraft/client/gui/SwitchElement.java b/game/client/src/main/java/net/minecraft/client/gui/SwitchElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/SwitchElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/SwitchElement.java
diff --git a/src/main/java/net/minecraft/client/gui/TextFieldElement.java b/game/client/src/main/java/net/minecraft/client/gui/TextFieldElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/TextFieldElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/TextFieldElement.java
diff --git a/src/main/java/net/minecraft/client/gui/TexturedButtonElement.java b/game/client/src/main/java/net/minecraft/client/gui/TexturedButtonElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/TexturedButtonElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/TexturedButtonElement.java
diff --git a/src/main/java/net/minecraft/client/gui/TooltipElement.java b/game/client/src/main/java/net/minecraft/client/gui/TooltipElement.java
similarity index 99%
rename from src/main/java/net/minecraft/client/gui/TooltipElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/TooltipElement.java
index a6e2035c4..bc12a1438 100644
--- a/src/main/java/net/minecraft/client/gui/TooltipElement.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/TooltipElement.java
@@ -260,6 +260,7 @@ public class TooltipElement extends Gui
             }
 
 			if(debug) {
+                text.append('\n').append(TextFormatting.LIGHT_GRAY).append(itemStack.getItem().namespaceID);
                 text.append('\n').append(TextFormatting.LIGHT_GRAY).append(itemStack.getItemKey());
 				CompoundTag data = itemStack.getData();
 				if(data != null) {
diff --git a/src/main/java/net/minecraft/client/gui/achievements/ScreenAchievements.java b/game/client/src/main/java/net/minecraft/client/gui/achievements/ScreenAchievements.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/achievements/ScreenAchievements.java
rename to game/client/src/main/java/net/minecraft/client/gui/achievements/ScreenAchievements.java
diff --git a/src/main/java/net/minecraft/client/gui/achievements/data/AchievementPage.java b/game/client/src/main/java/net/minecraft/client/gui/achievements/data/AchievementPage.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/achievements/data/AchievementPage.java
rename to game/client/src/main/java/net/minecraft/client/gui/achievements/data/AchievementPage.java
diff --git a/src/main/java/net/minecraft/client/gui/achievements/data/AchievementPageRegistry.java b/game/client/src/main/java/net/minecraft/client/gui/achievements/data/AchievementPageRegistry.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/achievements/data/AchievementPageRegistry.java
rename to game/client/src/main/java/net/minecraft/client/gui/achievements/data/AchievementPageRegistry.java
diff --git a/src/main/java/net/minecraft/client/gui/achievements/data/AchievementPages.java b/game/client/src/main/java/net/minecraft/client/gui/achievements/data/AchievementPages.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/achievements/data/AchievementPages.java
rename to game/client/src/main/java/net/minecraft/client/gui/achievements/data/AchievementPages.java
diff --git a/src/main/java/net/minecraft/client/gui/achievements/pages/AchievementPageNether.java b/game/client/src/main/java/net/minecraft/client/gui/achievements/pages/AchievementPageNether.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/achievements/pages/AchievementPageNether.java
rename to game/client/src/main/java/net/minecraft/client/gui/achievements/pages/AchievementPageNether.java
diff --git a/src/main/java/net/minecraft/client/gui/achievements/pages/AchievementPageOverworld.java b/game/client/src/main/java/net/minecraft/client/gui/achievements/pages/AchievementPageOverworld.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/achievements/pages/AchievementPageOverworld.java
rename to game/client/src/main/java/net/minecraft/client/gui/achievements/pages/AchievementPageOverworld.java
diff --git a/src/main/java/net/minecraft/client/gui/chat/GuiElementChatEmotePicker.java b/game/client/src/main/java/net/minecraft/client/gui/chat/GuiElementChatEmotePicker.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/chat/GuiElementChatEmotePicker.java
rename to game/client/src/main/java/net/minecraft/client/gui/chat/GuiElementChatEmotePicker.java
diff --git a/src/main/java/net/minecraft/client/gui/chat/GuiElementChatSuggestions.java b/game/client/src/main/java/net/minecraft/client/gui/chat/GuiElementChatSuggestions.java
similarity index 99%
rename from src/main/java/net/minecraft/client/gui/chat/GuiElementChatSuggestions.java
rename to game/client/src/main/java/net/minecraft/client/gui/chat/GuiElementChatSuggestions.java
index 08beed35b..d33404c98 100644
--- a/src/main/java/net/minecraft/client/gui/chat/GuiElementChatSuggestions.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/chat/GuiElementChatSuggestions.java
@@ -23,7 +23,7 @@ import net.minecraft.client.net.command.ClientCommandSource;
 import net.minecraft.client.render.Font;
 import net.minecraft.core.net.command.*;
 import net.minecraft.core.net.command.util.CommandHelper;
-import net.minecraft.core.net.packet.RequestCommandManagerPacket;
+import net.minecraft.core.net.packet.PacketRequestCommandManager;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.input.Keyboard;
 import org.lwjgl.input.Mouse;
@@ -229,7 +229,7 @@ public class GuiElementChatSuggestions extends Gui {
 
         if (this.mc.isMultiplayerWorld()) {
             this.parseResults = null;
-            this.mc.getSendQueue().addToSendQueue(new RequestCommandManagerPacket(this.mc.thePlayer.username, text, cursor));
+            this.mc.getSendQueue().addToSendQueue(new PacketRequestCommandManager(this.mc.thePlayer.username, text, cursor));
         } else {
             if (stringReader.canRead() && stringReader.peek() == '/') stringReader.skip();
             CommandDispatcher<CommandSource> dispatcher = this.getManager().getDispatcher();
diff --git a/src/main/java/net/minecraft/client/gui/chat/PositionSupplier.java b/game/client/src/main/java/net/minecraft/client/gui/chat/PositionSupplier.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/chat/PositionSupplier.java
rename to game/client/src/main/java/net/minecraft/client/gui/chat/PositionSupplier.java
diff --git a/src/main/java/net/minecraft/client/gui/chat/ScreenChat.java b/game/client/src/main/java/net/minecraft/client/gui/chat/ScreenChat.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/chat/ScreenChat.java
rename to game/client/src/main/java/net/minecraft/client/gui/chat/ScreenChat.java
diff --git a/src/main/java/net/minecraft/client/gui/chat/ScreenSleepMP.java b/game/client/src/main/java/net/minecraft/client/gui/chat/ScreenSleepMP.java
similarity index 91%
rename from src/main/java/net/minecraft/client/gui/chat/ScreenSleepMP.java
rename to game/client/src/main/java/net/minecraft/client/gui/chat/ScreenSleepMP.java
index bc8a452aa..454f11fc3 100644
--- a/src/main/java/net/minecraft/client/gui/chat/ScreenSleepMP.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/chat/ScreenSleepMP.java
@@ -3,7 +3,7 @@ package net.minecraft.client.gui.chat;
 import net.minecraft.client.entity.player.PlayerLocalMultiplayer;
 import net.minecraft.client.gui.ButtonElement;
 import net.minecraft.client.net.handler.PacketHandlerClient;
-import net.minecraft.core.net.packet.UpdatePlayerStatePacket;
+import net.minecraft.core.net.packet.PacketUpdatePlayerState;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.net.ChatEmotes;
 import net.minecraft.core.lang.I18n;
@@ -65,7 +65,7 @@ public class ScreenSleepMP extends ScreenChat
         if(mc.thePlayer instanceof PlayerLocalMultiplayer)
         {
             PacketHandlerClient sendQueue = ((PlayerLocalMultiplayer)mc.thePlayer).sendQueue;
-            sendQueue.addToSendQueue(new UpdatePlayerStatePacket(UpdatePlayerStatePacket.STATE_LEAVE_BED));
+            sendQueue.addToSendQueue(new PacketUpdatePlayerState(PacketUpdatePlayerState.STATE_LEAVE_BED));
         }
     }
 }
diff --git a/src/main/java/net/minecraft/client/gui/container/ScreenActivator.java b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenActivator.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/container/ScreenActivator.java
rename to game/client/src/main/java/net/minecraft/client/gui/container/ScreenActivator.java
diff --git a/src/main/java/net/minecraft/client/gui/container/ScreenContainer.java b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenContainer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/container/ScreenContainer.java
rename to game/client/src/main/java/net/minecraft/client/gui/container/ScreenContainer.java
diff --git a/src/main/java/net/minecraft/client/gui/container/ScreenContainerAbstract.java b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenContainerAbstract.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/container/ScreenContainerAbstract.java
rename to game/client/src/main/java/net/minecraft/client/gui/container/ScreenContainerAbstract.java
diff --git a/src/main/java/net/minecraft/client/gui/container/ScreenCrafting.java b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenCrafting.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/container/ScreenCrafting.java
rename to game/client/src/main/java/net/minecraft/client/gui/container/ScreenCrafting.java
diff --git a/src/main/java/net/minecraft/client/gui/container/ScreenDispenser.java b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenDispenser.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/container/ScreenDispenser.java
rename to game/client/src/main/java/net/minecraft/client/gui/container/ScreenDispenser.java
diff --git a/src/main/java/net/minecraft/client/gui/container/ScreenFlagEditor.java b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenFlagEditor.java
similarity index 99%
rename from src/main/java/net/minecraft/client/gui/container/ScreenFlagEditor.java
rename to game/client/src/main/java/net/minecraft/client/gui/container/ScreenFlagEditor.java
index 5eba67777..d940e33a1 100644
--- a/src/main/java/net/minecraft/client/gui/container/ScreenFlagEditor.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenFlagEditor.java
@@ -16,7 +16,7 @@ import net.minecraft.core.item.Items;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.lang.I18n;
 import net.minecraft.core.net.command.TextFormatting;
-import net.minecraft.core.net.packet.CustomPayloadPacket;
+import net.minecraft.core.net.packet.PacketCustomPayload;
 import net.minecraft.core.player.inventory.menu.MenuFlag;
 import net.minecraft.core.util.helper.MathHelper;
 
@@ -412,7 +412,7 @@ public class ScreenFlagEditor
         {
     		// Flag packet needs to be sent before the close screen packet is sent!
     		if(mc.currentWorld.isClientSide) {
-    			mc.getSendQueue().addToSendQueue(new CustomPayloadPacket("BTA|Flag", flagEntity.flagColors));
+    			mc.getSendQueue().addToSendQueue(new PacketCustomPayload("BTA|Flag", flagEntity.flagColors));
     		}
             mc.thePlayer.closeScreen();
         }
diff --git a/src/main/java/net/minecraft/client/gui/container/ScreenFurnace.java b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenFurnace.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/container/ScreenFurnace.java
rename to game/client/src/main/java/net/minecraft/client/gui/container/ScreenFurnace.java
diff --git a/src/main/java/net/minecraft/client/gui/container/ScreenInventory.java b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenInventory.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/container/ScreenInventory.java
rename to game/client/src/main/java/net/minecraft/client/gui/container/ScreenInventory.java
diff --git a/src/main/java/net/minecraft/client/gui/container/ScreenInventoryCreative.java b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenInventoryCreative.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/container/ScreenInventoryCreative.java
rename to game/client/src/main/java/net/minecraft/client/gui/container/ScreenInventoryCreative.java
diff --git a/src/main/java/net/minecraft/client/gui/container/ScreenTrommel.java b/game/client/src/main/java/net/minecraft/client/gui/container/ScreenTrommel.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/container/ScreenTrommel.java
rename to game/client/src/main/java/net/minecraft/client/gui/container/ScreenTrommel.java
diff --git a/src/main/java/net/minecraft/client/gui/createworld/ButtonComponent.java b/game/client/src/main/java/net/minecraft/client/gui/createworld/ButtonComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/createworld/ButtonComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/createworld/ButtonComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/createworld/CreateWorldPageRegistry.java b/game/client/src/main/java/net/minecraft/client/gui/createworld/CreateWorldPageRegistry.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/createworld/CreateWorldPageRegistry.java
rename to game/client/src/main/java/net/minecraft/client/gui/createworld/CreateWorldPageRegistry.java
diff --git a/src/main/java/net/minecraft/client/gui/createworld/ScreenCreateWorld.java b/game/client/src/main/java/net/minecraft/client/gui/createworld/ScreenCreateWorld.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/createworld/ScreenCreateWorld.java
rename to game/client/src/main/java/net/minecraft/client/gui/createworld/ScreenCreateWorld.java
diff --git a/src/main/java/net/minecraft/client/gui/createworld/TextFieldComponent.java b/game/client/src/main/java/net/minecraft/client/gui/createworld/TextFieldComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/createworld/TextFieldComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/createworld/TextFieldComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/createworld/WorldConfig.java b/game/client/src/main/java/net/minecraft/client/gui/createworld/WorldConfig.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/createworld/WorldConfig.java
rename to game/client/src/main/java/net/minecraft/client/gui/createworld/WorldConfig.java
diff --git a/src/main/java/net/minecraft/client/gui/drawing/DrawableEditor.java b/game/client/src/main/java/net/minecraft/client/gui/drawing/DrawableEditor.java
similarity index 96%
rename from src/main/java/net/minecraft/client/gui/drawing/DrawableEditor.java
rename to game/client/src/main/java/net/minecraft/client/gui/drawing/DrawableEditor.java
index 5ad69df7e..f6370c2c3 100644
--- a/src/main/java/net/minecraft/client/gui/drawing/DrawableEditor.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/drawing/DrawableEditor.java
@@ -1,251 +1,251 @@
-package net.minecraft.client.gui.drawing;
-
-import net.minecraft.core.util.collection.Pair;
-
-import java.util.Stack;
-
-public final class DrawableEditor<T>
-{
-    private final IDrawableSurface<T> surface;
-
-    public DrawableEditor(IDrawableSurface<T> surface)
-    {
-        this.surface = surface;
-    }
-
-    public void drawPixel(int x, int y, T value)
-    {
-        surface.setPixelValue(x, y, value);
-    }
-
-    public void drawLine(int x0, int y0, int x1, int y1, T value, int size)
-    {
-        if (Math.abs(y1 - y0) < Math.abs(x1 - x0))
-        {
-            if (x0 > x1)
-            {
-                doDrawLine(x1, y1, x0, y0, value, size, false);
-            }
-            else
-            {
-                doDrawLine(x0, y0, x1, y1, value, size, false);
-            }
-        }
-        else
-        {
-            if (y0 > y1)
-            {
-                doDrawLine(y1, x1, y0, x0, value, size, true);
-            }
-            else
-            {
-                doDrawLine(y0, x0, y1, x1, value, size, true);
-            }
-        }
-    }
-
-    private void doDrawLine(int a0, int b0, int a1, int b1, T value, int size, boolean swapped)
-    {
-        int sizeHalfMinus = (size - 1) / 2;
-        int sizeHalfPlus = (size - 1) / 2;
-        if (size % 2 == 0)
-        {
-            sizeHalfPlus++;
-        }
-
-        int da = a1 - a0;
-        int db = b1 - b0;
-        int bi = 1;
-        if (db < 0)
-        {
-            bi = -1;
-            db = -db;
-        }
-        int D = (2 * db) - da;
-        int b = b0;
-
-        for (int a = a0; a <= a1; a++)
-        {
-            for (int dx = -sizeHalfMinus; dx <= sizeHalfPlus; dx++)
-            {
-                for (int dy = -sizeHalfMinus; dy <= sizeHalfPlus; dy++)
-                {
-                    if (swapped)
-                    {
-                        drawPixel(dx + b, dy + a, value);
-                    }
-                    else
-                    {
-                        drawPixel(dx + a, dy + b, value);
-                    }
-                }
-            }
-            if (D > 0)
-            {
-                b = b + bi;
-                D = D + (2 * (db - da));
-            }
-            else
-            {
-                D = D + 2 * db;
-            }
-        }
-    }
-
-    public void drawRectangle(int x0, int y0, int x1, int y1, T value)
-    {
-        if (x0 > x1)
-        {
-            int temp = x1;
-            x1 = x0;
-            x0 = temp;
-        }
-        if (y0 > y1)
-        {
-            int temp = y1;
-            y1 = y0;
-            y0 = temp;
-        }
-        for (int x = x0; x <= x1; x++)
-        {
-            for (int y = y0; y <= y1; y++)
-            {
-                if (x == x0 || x == x1 || y == y0 || y == y1)
-                {
-                    drawPixel(x, y, value);
-                }
-            }
-        }
-    }
-
-    public void drawEllipse(int x0, int y0, int x1, int y1, T value)
-    {
-        if (x0 > x1)
-        {
-            int temp = x1;
-            x1 = x0;
-            x0 = temp;
-        }
-        if (y0 > y1)
-        {
-            int temp = y1;
-            y1 = y0;
-            y0 = temp;
-        }
-        if (x1 - x0 < 2 || y1 - y0 < 2)
-        {
-            drawRectangle(x0, y0, x1, y1, value);
-            return;
-        }
-        x1++;
-        y1++;
-        boolean xSkipMiddle = false, ySkipMiddle = false;
-        if ((x1 - x0) % 2 == 0) xSkipMiddle = true;
-        if ((y1 - y0) % 2 == 0) ySkipMiddle = true;
-
-        int steps = 0;
-
-        int xRadius = (x1 - x0) / 2;
-        int yRadius = (y1 - y0) / 2;
-        int cx = x0 + xRadius;
-        int cy = y0 + yRadius;
-        int x, y;
-        int xChange, yChange;
-        int ellipseError;
-        int twoASquare, twoBSquare;
-        int stoppingX, stoppingY;
-
-        twoASquare = 2 * xRadius * xRadius;
-        twoBSquare = 2 * yRadius * yRadius;
-
-        x = xRadius;
-        y = 0;
-        xChange = yRadius * yRadius * (1 - 2 * xRadius);
-        yChange = xRadius * xRadius;
-        ellipseError = 0;
-        stoppingX = twoBSquare * xRadius;
-        stoppingY = 0;
-
-        while (stoppingX >= stoppingY)
-        {
-            drawEllipsePoints(cx, cy, x, y, xSkipMiddle, ySkipMiddle, value);
-            y++;
-            stoppingY += twoASquare;
-            ellipseError += yChange;
-            yChange += twoASquare;
-            if ((2 * ellipseError + xChange) > 0)
-            {
-                x--;
-                stoppingX -= twoBSquare;
-                ellipseError += xChange;
-                xChange += twoBSquare;
-            }
-            steps++;
-            if (steps > 100) break;
-        }
-
-        steps = 0;
-        x = 0;
-        y = yRadius;
-        xChange = yRadius * yRadius;
-        yChange = xRadius * xRadius * (1 - 2 * yRadius);
-        ellipseError = 0;
-        stoppingX = 0;
-        stoppingY = twoASquare * yRadius;
-        while (stoppingX <= stoppingY)
-        {
-            drawEllipsePoints(cx, cy, x, y, xSkipMiddle, ySkipMiddle, value);
-            x++;
-            stoppingX += twoBSquare;
-            ellipseError += xChange;
-            xChange += twoBSquare;
-            if ((2 * ellipseError + yChange) > 0)
-            {
-                y--;
-                stoppingY -= twoASquare;
-                ellipseError += yChange;
-                yChange += twoASquare;
-            }
-            steps++;
-            if (steps > 100) break;
-        }
-    }
-
-    private void drawEllipsePoints(int cx, int cy, int x, int y, boolean xSkipMiddle, boolean ySkipMiddle, T value)
-    {
-        int xOffset = 0, yOffset = 0;
-        if (xSkipMiddle)
-        {
-            xOffset = 1;
-        }
-        if (ySkipMiddle)
-        {
-            yOffset = 1;
-        }
-        drawPixel(cx + x - xOffset, cy + y - yOffset, value);
-        drawPixel(cx - x, cy + y - yOffset, value);
-        drawPixel(cx - x, cy - y, value);
-        drawPixel(cx + x - xOffset, cy - y, value);
-    }
-
-    public void floodFill(int x, int y, T value)
-    {
-        Stack<Pair<Integer, Integer>> floodFillStack = new Stack<>();
-        T floodColor = surface.getPixelValue(x, y);
-        if (floodColor == value) return;
-
-        floodFillStack.push(Pair.of(x, y));
-        while (!floodFillStack.isEmpty())
-        {
-            Pair<Integer, Integer> item = floodFillStack.pop();
-            if (surface.getPixelValue(item.getLeft(), item.getRight()) == floodColor)
-            {
-                drawPixel(item.getLeft(), item.getRight(), value);
-                if (item.getLeft() - 1 >= 0) floodFillStack.push(Pair.of(item.getLeft() - 1, item.getRight()));
-                if (item.getLeft() + 1 < surface.getWidth()) floodFillStack.push(Pair.of(item.getLeft() + 1, item.getRight()));
-                if (item.getRight() - 1 >= 0) floodFillStack.push(Pair.of(item.getLeft(), item.getRight() - 1));
-                if (item.getRight() + 1 < surface.getHeight()) floodFillStack.push(Pair.of(item.getLeft(), item.getRight() + 1));
-            }
-        }
-    }
-}
+package net.minecraft.client.gui.drawing;
+
+import net.minecraft.core.util.collection.Pair;
+
+import java.util.Stack;
+
+public final class DrawableEditor<T>
+{
+    private final IDrawableSurface<T> surface;
+
+    public DrawableEditor(IDrawableSurface<T> surface)
+    {
+        this.surface = surface;
+    }
+
+    public void drawPixel(int x, int y, T value)
+    {
+        surface.setPixelValue(x, y, value);
+    }
+
+    public void drawLine(int x0, int y0, int x1, int y1, T value, int size)
+    {
+        if (Math.abs(y1 - y0) < Math.abs(x1 - x0))
+        {
+            if (x0 > x1)
+            {
+                doDrawLine(x1, y1, x0, y0, value, size, false);
+            }
+            else
+            {
+                doDrawLine(x0, y0, x1, y1, value, size, false);
+            }
+        }
+        else
+        {
+            if (y0 > y1)
+            {
+                doDrawLine(y1, x1, y0, x0, value, size, true);
+            }
+            else
+            {
+                doDrawLine(y0, x0, y1, x1, value, size, true);
+            }
+        }
+    }
+
+    private void doDrawLine(int a0, int b0, int a1, int b1, T value, int size, boolean swapped)
+    {
+        int sizeHalfMinus = (size - 1) / 2;
+        int sizeHalfPlus = (size - 1) / 2;
+        if (size % 2 == 0)
+        {
+            sizeHalfPlus++;
+        }
+
+        int da = a1 - a0;
+        int db = b1 - b0;
+        int bi = 1;
+        if (db < 0)
+        {
+            bi = -1;
+            db = -db;
+        }
+        int D = (2 * db) - da;
+        int b = b0;
+
+        for (int a = a0; a <= a1; a++)
+        {
+            for (int dx = -sizeHalfMinus; dx <= sizeHalfPlus; dx++)
+            {
+                for (int dy = -sizeHalfMinus; dy <= sizeHalfPlus; dy++)
+                {
+                    if (swapped)
+                    {
+                        drawPixel(dx + b, dy + a, value);
+                    }
+                    else
+                    {
+                        drawPixel(dx + a, dy + b, value);
+                    }
+                }
+            }
+            if (D > 0)
+            {
+                b = b + bi;
+                D = D + (2 * (db - da));
+            }
+            else
+            {
+                D = D + 2 * db;
+            }
+        }
+    }
+
+    public void drawRectangle(int x0, int y0, int x1, int y1, T value)
+    {
+        if (x0 > x1)
+        {
+            int temp = x1;
+            x1 = x0;
+            x0 = temp;
+        }
+        if (y0 > y1)
+        {
+            int temp = y1;
+            y1 = y0;
+            y0 = temp;
+        }
+        for (int x = x0; x <= x1; x++)
+        {
+            for (int y = y0; y <= y1; y++)
+            {
+                if (x == x0 || x == x1 || y == y0 || y == y1)
+                {
+                    drawPixel(x, y, value);
+                }
+            }
+        }
+    }
+
+    public void drawEllipse(int x0, int y0, int x1, int y1, T value)
+    {
+        if (x0 > x1)
+        {
+            int temp = x1;
+            x1 = x0;
+            x0 = temp;
+        }
+        if (y0 > y1)
+        {
+            int temp = y1;
+            y1 = y0;
+            y0 = temp;
+        }
+        if (x1 - x0 < 2 || y1 - y0 < 2)
+        {
+            drawRectangle(x0, y0, x1, y1, value);
+            return;
+        }
+        x1++;
+        y1++;
+        boolean xSkipMiddle = false, ySkipMiddle = false;
+        if ((x1 - x0) % 2 == 0) xSkipMiddle = true;
+        if ((y1 - y0) % 2 == 0) ySkipMiddle = true;
+
+        int steps = 0;
+
+        int xRadius = (x1 - x0) / 2;
+        int yRadius = (y1 - y0) / 2;
+        int cx = x0 + xRadius;
+        int cy = y0 + yRadius;
+        int x, y;
+        int xChange, yChange;
+        int ellipseError;
+        int twoASquare, twoBSquare;
+        int stoppingX, stoppingY;
+
+        twoASquare = 2 * xRadius * xRadius;
+        twoBSquare = 2 * yRadius * yRadius;
+
+        x = xRadius;
+        y = 0;
+        xChange = yRadius * yRadius * (1 - 2 * xRadius);
+        yChange = xRadius * xRadius;
+        ellipseError = 0;
+        stoppingX = twoBSquare * xRadius;
+        stoppingY = 0;
+
+        while (stoppingX >= stoppingY)
+        {
+            drawEllipsePoints(cx, cy, x, y, xSkipMiddle, ySkipMiddle, value);
+            y++;
+            stoppingY += twoASquare;
+            ellipseError += yChange;
+            yChange += twoASquare;
+            if ((2 * ellipseError + xChange) > 0)
+            {
+                x--;
+                stoppingX -= twoBSquare;
+                ellipseError += xChange;
+                xChange += twoBSquare;
+            }
+            steps++;
+            if (steps > 100) break;
+        }
+
+        steps = 0;
+        x = 0;
+        y = yRadius;
+        xChange = yRadius * yRadius;
+        yChange = xRadius * xRadius * (1 - 2 * yRadius);
+        ellipseError = 0;
+        stoppingX = 0;
+        stoppingY = twoASquare * yRadius;
+        while (stoppingX <= stoppingY)
+        {
+            drawEllipsePoints(cx, cy, x, y, xSkipMiddle, ySkipMiddle, value);
+            x++;
+            stoppingX += twoBSquare;
+            ellipseError += xChange;
+            xChange += twoBSquare;
+            if ((2 * ellipseError + yChange) > 0)
+            {
+                y--;
+                stoppingY -= twoASquare;
+                ellipseError += yChange;
+                yChange += twoASquare;
+            }
+            steps++;
+            if (steps > 100) break;
+        }
+    }
+
+    private void drawEllipsePoints(int cx, int cy, int x, int y, boolean xSkipMiddle, boolean ySkipMiddle, T value)
+    {
+        int xOffset = 0, yOffset = 0;
+        if (xSkipMiddle)
+        {
+            xOffset = 1;
+        }
+        if (ySkipMiddle)
+        {
+            yOffset = 1;
+        }
+        drawPixel(cx + x - xOffset, cy + y - yOffset, value);
+        drawPixel(cx - x, cy + y - yOffset, value);
+        drawPixel(cx - x, cy - y, value);
+        drawPixel(cx + x - xOffset, cy - y, value);
+    }
+
+    public void floodFill(int x, int y, T value)
+    {
+        Stack<Pair<Integer, Integer>> floodFillStack = new Stack<>();
+        T floodColor = surface.getPixelValue(x, y);
+        if (floodColor == value) return;
+
+        floodFillStack.push(Pair.of(x, y));
+        while (!floodFillStack.isEmpty())
+        {
+            Pair<Integer, Integer> item = floodFillStack.pop();
+            if (surface.getPixelValue(item.getLeft(), item.getRight()) == floodColor)
+            {
+                drawPixel(item.getLeft(), item.getRight(), value);
+                if (item.getLeft() - 1 >= 0) floodFillStack.push(Pair.of(item.getLeft() - 1, item.getRight()));
+                if (item.getLeft() + 1 < surface.getWidth()) floodFillStack.push(Pair.of(item.getLeft() + 1, item.getRight()));
+                if (item.getRight() - 1 >= 0) floodFillStack.push(Pair.of(item.getLeft(), item.getRight() - 1));
+                if (item.getRight() + 1 < surface.getHeight()) floodFillStack.push(Pair.of(item.getLeft(), item.getRight() + 1));
+            }
+        }
+    }
+}
diff --git a/src/main/java/net/minecraft/client/gui/drawing/IDrawableSurface.java b/game/client/src/main/java/net/minecraft/client/gui/drawing/IDrawableSurface.java
similarity index 96%
rename from src/main/java/net/minecraft/client/gui/drawing/IDrawableSurface.java
rename to game/client/src/main/java/net/minecraft/client/gui/drawing/IDrawableSurface.java
index c700c4b7f..590b95884 100644
--- a/src/main/java/net/minecraft/client/gui/drawing/IDrawableSurface.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/drawing/IDrawableSurface.java
@@ -1,34 +1,34 @@
-package net.minecraft.client.gui.drawing;
-
-/**
- * Implements a 2-dimensional surface comprised of pixels set to a particular value.
- */
-public interface IDrawableSurface<T>
-{
-    /**
-     * @return the width of the surface.
-     */
-    int getWidth();
-
-    /**
-     * @return the height of the surface.
-     */
-    int getHeight();
-
-    /**
-     * Fetches the value of the pixel at the given coordinates, or a default value if the pixel is out of range.
-     * @param x The X coordinate of the pixel to read.
-     * @param y The Y coordinate of the pixel to read.
-     * @return The value of the pixel.
-     */
-    T getPixelValue(int x, int y);
-
-    /**
-     * Sets the value of the pixel at the given coordinates, if possible
-     * @param x The X coordinate of the pixel to write.
-     * @param y The Y coordinate of the pixel to write.
-     * @param value The value to write to the given pixel.
-     * @return true if the write was possible, false otherwise.
-     */
-    boolean setPixelValue(int x, int y, T value);
-}
+package net.minecraft.client.gui.drawing;
+
+/**
+ * Implements a 2-dimensional surface comprised of pixels set to a particular value.
+ */
+public interface IDrawableSurface<T>
+{
+    /**
+     * @return the width of the surface.
+     */
+    int getWidth();
+
+    /**
+     * @return the height of the surface.
+     */
+    int getHeight();
+
+    /**
+     * Fetches the value of the pixel at the given coordinates, or a default value if the pixel is out of range.
+     * @param x The X coordinate of the pixel to read.
+     * @param y The Y coordinate of the pixel to read.
+     * @return The value of the pixel.
+     */
+    T getPixelValue(int x, int y);
+
+    /**
+     * Sets the value of the pixel at the given coordinates, if possible
+     * @param x The X coordinate of the pixel to write.
+     * @param y The Y coordinate of the pixel to write.
+     * @param value The value to write to the given pixel.
+     * @return true if the write was possible, false otherwise.
+     */
+    boolean setPixelValue(int x, int y, T value);
+}
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/GuidebookPage.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/GuidebookPage.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/GuidebookPage.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/GuidebookPage.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/GuidebookPageManager.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/GuidebookPageManager.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/GuidebookPageManager.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/GuidebookPageManager.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/GuidebookSection.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/GuidebookSection.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/GuidebookSection.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/GuidebookSection.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/GuidebookSections.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/GuidebookSections.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/GuidebookSections.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/GuidebookSections.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/PageNavigationStack.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/PageNavigationStack.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/PageNavigationStack.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/PageNavigationStack.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/RecipePage.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/RecipePage.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/RecipePage.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/RecipePage.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/ScreenGuidebook.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/ScreenGuidebook.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/ScreenGuidebook.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/ScreenGuidebook.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/SearchableGuidebookSection.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/SearchableGuidebookSection.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/SearchableGuidebookSection.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/SearchableGuidebookSection.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/SlotGuidebook.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/SlotGuidebook.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/SlotGuidebook.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/SlotGuidebook.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/cover/GuidebookPageCover.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/cover/GuidebookPageCover.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/cover/GuidebookPageCover.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/cover/GuidebookPageCover.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/cover/GuidebookSectionCover.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/cover/GuidebookSectionCover.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/cover/GuidebookSectionCover.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/cover/GuidebookSectionCover.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/GuidebookSectionCrafting.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/GuidebookSectionCrafting.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/GuidebookSectionCrafting.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/GuidebookSectionCrafting.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/RecipePageCrafting.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/RecipePageCrafting.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/RecipePageCrafting.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/RecipePageCrafting.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterLabel.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterLabel.java
similarity index 98%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterLabel.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterLabel.java
index 371bccdb9..2d101d333 100644
--- a/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterLabel.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterLabel.java
@@ -2,6 +2,7 @@ package net.minecraft.client.gui.guidebook.crafting.displays;
 
 import net.minecraft.client.gui.guidebook.SlotGuidebook;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.data.registry.recipe.RecipeEntryBase;
 import net.minecraft.core.data.registry.recipe.RecipeSymbol;
 import net.minecraft.core.data.registry.recipe.entry.RecipeEntryLabel;
@@ -25,7 +26,7 @@ public class DisplayAdapterLabel implements RecipeDisplayAdapter<RecipeEntryLabe
             while (blocksAdded < 50) {
                 Block b = null;
                 while (b == null) {
-                    b = Block.getBlock(lastId + offset++);
+                    b = Blocks.getBlock(lastId + offset++);
                 }
                 randomOptions[blocksAdded++] = b;
                 lastId = b.id;
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterLabelDye.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterLabelDye.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterLabelDye.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterLabelDye.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterMapDuplication.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterMapDuplication.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterMapDuplication.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterMapDuplication.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterRepairable.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterRepairable.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterRepairable.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterRepairable.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterShaped.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterShaped.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterShaped.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterShaped.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterShapeless.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterShapeless.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterShapeless.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterShapeless.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterTool.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterTool.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterTool.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterTool.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterUndye.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterUndye.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterUndye.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/DisplayAdapterUndye.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/RecipeDisplayAdapter.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/RecipeDisplayAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/RecipeDisplayAdapter.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/RecipeDisplayAdapter.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/displayAdapterScrap.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/displayAdapterScrap.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/displayAdapterScrap.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/crafting/displays/displayAdapterScrap.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/index/GuidebookPageIndex.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/index/GuidebookPageIndex.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/index/GuidebookPageIndex.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/index/GuidebookPageIndex.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/index/GuidebookSectionIndex.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/index/GuidebookSectionIndex.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/index/GuidebookSectionIndex.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/index/GuidebookSectionIndex.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/mobs/GuidebookPageMob.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/mobs/GuidebookPageMob.java
similarity index 93%
rename from src/main/java/net/minecraft/client/gui/guidebook/mobs/GuidebookPageMob.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/mobs/GuidebookPageMob.java
index c805c8b50..9a65149f5 100644
--- a/src/main/java/net/minecraft/client/gui/guidebook/mobs/GuidebookPageMob.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/guidebook/mobs/GuidebookPageMob.java
@@ -216,19 +216,8 @@ public class GuidebookPageMob
 
         if (discovered) {
             if (mouseX > x + 9 && mouseX < x + 9 + 52 && mouseY > y + 9 && mouseY < y + 9 + 70) {
-                // TODO possibly replace with a function to be called inside the Entity itself?
-//                int highestSkinVariant = Global.accessor.getSkinVariantList().getNumSkinsForEntity(mobClass) - 1;
-//                if (highestSkinVariant > 0) {
-//                    int newSkinVariant = (example.getSkinVariant() + 1) % (highestSkinVariant + 1);
-//                    example.setSkinVariant(newSkinVariant);
-//                }
-                if (example instanceof MobFireflyCluster){
-                    MobFireflyCluster.FireflyColor color = MobFireflyCluster.FireflyColor.fireFlyColors.get(
-                            ((MobFireflyCluster) example).getColor().getId() + 1 % MobFireflyCluster.FireflyColor.fireFlyColors.size());
-                    ((MobFireflyCluster) example).setColor(color == null ? MobFireflyCluster.FireflyColor.GREEN : color);
-                }
                 String livingSound = example.getLivingSound();
-                if (livingSound != null) {
+                if (example.cycleVariant() && livingSound != null) {
                     Minecraft mc = Minecraft.getMinecraft(this);
                     Random random = new Random();
                     mc.currentWorld.playSoundAtEntity(null, mc.thePlayer, livingSound, 0.25f, (random.nextFloat() - random.nextFloat()) * 0.2F + 1.0F);
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/mobs/GuidebookSectionMob.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/mobs/GuidebookSectionMob.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/mobs/GuidebookSectionMob.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/mobs/GuidebookSectionMob.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/mobs/MobInfoRegistry.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/mobs/MobInfoRegistry.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/mobs/MobInfoRegistry.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/mobs/MobInfoRegistry.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/search/GuidebookPageSearch.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/search/GuidebookPageSearch.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/search/GuidebookPageSearch.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/search/GuidebookPageSearch.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/search/GuidebookSectionSearch.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/search/GuidebookSectionSearch.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/search/GuidebookSectionSearch.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/search/GuidebookSectionSearch.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/smelting/GuidebookSectionBlastSmelting.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/smelting/GuidebookSectionBlastSmelting.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/smelting/GuidebookSectionBlastSmelting.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/smelting/GuidebookSectionBlastSmelting.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/smelting/GuidebookSectionSmelting.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/smelting/GuidebookSectionSmelting.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/smelting/GuidebookSectionSmelting.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/smelting/GuidebookSectionSmelting.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/smelting/RecipePageBlastSmelting.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/smelting/RecipePageBlastSmelting.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/smelting/RecipePageBlastSmelting.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/smelting/RecipePageBlastSmelting.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/smelting/RecipePageSmelting.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/smelting/RecipePageSmelting.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/smelting/RecipePageSmelting.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/smelting/RecipePageSmelting.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/trommeling/GuidebookSectionTrommel.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/trommeling/GuidebookSectionTrommel.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/trommeling/GuidebookSectionTrommel.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/trommeling/GuidebookSectionTrommel.java
diff --git a/src/main/java/net/minecraft/client/gui/guidebook/trommeling/RecipePageTrommel.java b/game/client/src/main/java/net/minecraft/client/gui/guidebook/trommeling/RecipePageTrommel.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/guidebook/trommeling/RecipePageTrommel.java
rename to game/client/src/main/java/net/minecraft/client/gui/guidebook/trommeling/RecipePageTrommel.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/HudIngame.java b/game/client/src/main/java/net/minecraft/client/gui/hud/HudIngame.java
similarity index 98%
rename from src/main/java/net/minecraft/client/gui/hud/HudIngame.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/HudIngame.java
index 77c914c5e..0aeba6b6f 100644
--- a/src/main/java/net/minecraft/client/gui/hud/HudIngame.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/hud/HudIngame.java
@@ -367,8 +367,8 @@ public class HudIngame extends Gui
                 {
                     debugOffset += space;
 
-                    Block block = Block.blocksList[mc.currentWorld.getBlockId(mc.objectMouseOver.x, mc.objectMouseOver.y, mc.objectMouseOver.z)];
-                    if (block.id > 0 && block.id < Block.blocksList.length)
+                    Block block = Blocks.blocksList[mc.currentWorld.getBlockId(mc.objectMouseOver.x, mc.objectMouseOver.y, mc.objectMouseOver.z)];
+                    if (block.id > 0 && block.id < Blocks.blocksList.length)
                     {
                         drawDebugScreenLineRight("Looking at:");
 
@@ -383,9 +383,10 @@ public class HudIngame extends Gui
                             name = "<ERROR>";
                         }
 
-                        String id = block.getLanguageKey(meta) + " [" + block.id + ":" + meta + "]";
+                        String id = block.namespaceID + " [" + block.id + ":" + meta + "]";
 
                         drawDebugScreenLineRight(name);
+                        drawDebugScreenLineRight(block.getLanguageKey(meta));
                         drawDebugScreenLineRight(id);
 
                         if (compass)
@@ -944,7 +945,7 @@ public class HudIngame 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 = BlockModelDispatcher.getInstance().getDispatch(Block.getBlock(mc.thePlayer.portalID)).getBlockTextureFromSideAndMetadata(Side.NORTH, mc.thePlayer.portalColor.blockMeta << 4 | BlockPortal.MASK_COLOR_SET);
+        IconCoordinate portal = BlockModelDispatcher.getInstance().getDispatch(Blocks.getBlock(mc.thePlayer.portalID)).getBlockTextureFromSideAndMetadata(Side.NORTH, mc.thePlayer.portalColor.blockMeta << 4 | BlockPortal.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/gui/hud/HudIngameDoom.java b/game/client/src/main/java/net/minecraft/client/gui/hud/HudIngameDoom.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/HudIngameDoom.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/HudIngameDoom.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/ComponentAnchor.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/ComponentAnchor.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/ComponentAnchor.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/ComponentAnchor.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/HubComponentSubtitles.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HubComponentSubtitles.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/HubComponentSubtitles.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/HubComponentSubtitles.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/HudComponent.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/HudComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/HudComponentArmorBar.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentArmorBar.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/HudComponentArmorBar.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentArmorBar.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/HudComponentCrosshair.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentCrosshair.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/HudComponentCrosshair.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentCrosshair.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/HudComponentFireBar.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentFireBar.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/HudComponentFireBar.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentFireBar.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/HudComponentHealthBar.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentHealthBar.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/HudComponentHealthBar.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentHealthBar.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/HudComponentHotbar.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentHotbar.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/HudComponentHotbar.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentHotbar.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/HudComponentMovable.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentMovable.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/HudComponentMovable.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentMovable.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/HudComponentOxygenBar.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentOxygenBar.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/HudComponentOxygenBar.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentOxygenBar.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/HudComponentRotationLock.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentRotationLock.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/HudComponentRotationLock.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponentRotationLock.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/HudComponents.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponents.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/HudComponents.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/HudComponents.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/layout/Layout.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/layout/Layout.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/layout/Layout.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/layout/Layout.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/layout/LayoutAbsolute.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/layout/LayoutAbsolute.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/layout/LayoutAbsolute.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/layout/LayoutAbsolute.java
diff --git a/src/main/java/net/minecraft/client/gui/hud/component/layout/LayoutSnap.java b/game/client/src/main/java/net/minecraft/client/gui/hud/component/layout/LayoutSnap.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/hud/component/layout/LayoutSnap.java
rename to game/client/src/main/java/net/minecraft/client/gui/hud/component/layout/LayoutSnap.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/ScreenModelViewer.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/ScreenModelViewer.java
similarity index 98%
rename from src/main/java/net/minecraft/client/gui/modelviewer/ScreenModelViewer.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/ScreenModelViewer.java
index 0f529e099..fd8b9830f 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/ScreenModelViewer.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/ScreenModelViewer.java
@@ -23,6 +23,7 @@ import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.client.render.texture.Texture;
 import net.minecraft.client.util.helper.Textures;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.lang.I18n;
@@ -404,9 +405,9 @@ public class ScreenModelViewer extends ScreenPhotoMode implements ListenerTextFi
         mc.displayScreen(new OptionsScreen(null, OptionsPages.DEBUG));
     }
     public static int cycleBlockId(int id, int idOff){
-        int id2 = (id + Block.blocksList.length + idOff) % Block.blocksList.length;
-        while (Block.blocksList[id2] == null){
-            id2 = (id2 + (int) Math.signum(idOff) + Block.blocksList.length) % Block.blocksList.length;
+        int id2 = (id + Blocks.blocksList.length + idOff) % Blocks.blocksList.length;
+        while (Blocks.blocksList[id2] == null){
+            id2 = (id2 + (int) Math.signum(idOff) + Blocks.blocksList.length) % Blocks.blocksList.length;
         }
         return id2;
     }
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/ModelViewerCategory.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/ModelViewerCategory.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/ModelViewerCategory.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/ModelViewerCategory.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryBlock.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryBlock.java
similarity index 90%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryBlock.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryBlock.java
index 1a3b3dd61..60084e433 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryBlock.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryBlock.java
@@ -29,7 +29,7 @@ public class ViewerCategoryBlock extends ModelViewerCategory {
         createEntries();
     }
     public void createEntries(){
-        for (Block block : Block.blocksList){
+        for (Block block : Blocks.blocksList){
             if (block == null) continue;
             entryHashMap.put(block, new BlockEntryBasic(block));
         }
@@ -46,7 +46,7 @@ public class ViewerCategoryBlock extends ModelViewerCategory {
 
     @Override
     public String getCurrentDisplayInfo(I18n translator) {
-        Block displayBlock = Block.getBlock(DisplayChunk.displayBlockId);
+        Block displayBlock = Blocks.getBlock(DisplayChunk.displayBlockId);
         String name = "None";
         if (displayBlock != null){
             name = I18n.getInstance().translateNameKey(displayBlock.getKey());
@@ -78,8 +78,8 @@ public class ViewerCategoryBlock extends ModelViewerCategory {
             @Override
             public Integer getElementFromString(String s) {
                 try {
-                    int id = MathHelper.clamp(Integer.parseInt(s), 0, Block.blocksList.length);
-                    if (Block.getBlock(id) != null){
+                    int id = MathHelper.clamp(Integer.parseInt(s), 0, Blocks.blocksList.length);
+                    if (Blocks.getBlock(id) != null){
                         return id;
                     }
                 } catch (Exception ignored){}
@@ -131,7 +131,7 @@ public class ViewerCategoryBlock extends ModelViewerCategory {
         int yPos = blockMetaTextField.yPosition + 21;
         int xPos = modelViewer.width;
 
-        BlockEntry entry = entryHashMap.get(Block.getBlock(DisplayChunk.displayBlockId));
+        BlockEntry entry = entryHashMap.get(Blocks.getBlock(DisplayChunk.displayBlockId));
 
         if (entry != null){
             List<ButtonElement> list = entry.getEntryButtons(mc, modelViewer, mc.currentWorld, DisplayChunk.displayBlockMeta);
@@ -162,7 +162,7 @@ public class ViewerCategoryBlock extends ModelViewerCategory {
 
     @Override
     public void onTick() {
-        BlockEntry entry = entryHashMap.get(Block.getBlock(DisplayChunk.displayBlockId));
+        BlockEntry entry = entryHashMap.get(Blocks.getBlock(DisplayChunk.displayBlockId));
         if (entry != null){
             entry.onTick(mc.currentWorld, DisplayChunk.displayBlockMeta);
         }
@@ -170,8 +170,8 @@ public class ViewerCategoryBlock extends ModelViewerCategory {
         mc.currentWorld.loadedEntityList.removeIf(entity -> entity instanceof EntityItem);
     }
     public void setDisplayBlock(int id, int meta){
-        Block displayBlock = Block.blocksList[DisplayChunk.displayBlockId];
-        BlockEntry entry = entryHashMap.get(Block.getBlock(DisplayChunk.displayBlockId));
+        Block displayBlock = Blocks.blocksList[DisplayChunk.displayBlockId];
+        BlockEntry entry = entryHashMap.get(Blocks.getBlock(DisplayChunk.displayBlockId));
         int _id = DisplayChunk.displayBlockId;
         int _meta = DisplayChunk.displayBlockMeta;
 
@@ -186,9 +186,9 @@ public class ViewerCategoryBlock extends ModelViewerCategory {
         DisplayChunk.displayBlockPosZ = (int) mc.thePlayer.z;
         DisplayChunk.displayBlockId = id;
         DisplayChunk.displayBlockMeta = meta;
-        displayBlock = Block.blocksList[id];
+        displayBlock = Blocks.blocksList[id];
         if (displayBlock != null && _id != id){
-            entry = entryHashMap.get(Block.getBlock(DisplayChunk.displayBlockId));
+            entry = entryHashMap.get(Blocks.getBlock(DisplayChunk.displayBlockId));
             displayBlock.onBlockPlacedByWorld(mc.currentWorld, (int) mc.thePlayer.x, (int) mc.thePlayer.y, (int) mc.thePlayer.z);
             if (entry != null) entry.onOpen(mc.currentWorld, DisplayChunk.displayBlockMeta);
         }
@@ -196,6 +196,6 @@ public class ViewerCategoryBlock extends ModelViewerCategory {
             modelViewer.init();
         }
         mc.particleEngine.setWorld(mc.currentWorld);
-        mc.renderGlobal.loadRenderers();
+        mc.currentWorld.markBlockDirty(DisplayChunk.displayBlockPosX, DisplayChunk.displayBlockPosY, DisplayChunk.displayBlockPosZ);
     }
 }
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryEntity.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryEntity.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryEntity.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryEntity.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryParticle.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryParticle.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryParticle.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/ViewerCategoryParticle.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntry.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntry.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntry.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryBasic.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryBasic.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryBasic.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryBasic.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryJar.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryJar.java
similarity index 96%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryJar.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryJar.java
index b9e61263f..90c02ceb8 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryJar.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryJar.java
@@ -36,8 +36,8 @@ public class BlockEntryJar extends BlockEntry{
             @Override
             public Integer getElementFromString(String s) {
                 try {
-                    int id = MathHelper.clamp(Integer.parseInt(s), 0, Block.blocksList.length);
-                    if (Block.getBlock(id) != null){
+                    int id = MathHelper.clamp(Integer.parseInt(s), 0, Blocks.blocksList.length);
+                    if (Blocks.getBlock(id) != null){
                         return id;
                     }
                 } catch (Exception ignored){}
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryMobSpawner.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryMobSpawner.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryMobSpawner.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntryMobSpawner.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntrySign.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntrySign.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntrySign.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/block/BlockEntrySign.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntry.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntry.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntry.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryArmoredZombie.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryArmoredZombie.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryArmoredZombie.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryArmoredZombie.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryBlank.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryBlank.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryBlank.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryBlank.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryBoat.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryBoat.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryBoat.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryBoat.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryCreeper.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryCreeper.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryCreeper.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryCreeper.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryDispatcher.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryDispatcher.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryDispatcher.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryDispatcher.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryFallingBlock.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryFallingBlock.java
similarity index 95%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryFallingBlock.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryFallingBlock.java
index a3882b080..435785984 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryFallingBlock.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryFallingBlock.java
@@ -7,6 +7,7 @@ import net.minecraft.client.gui.modelviewer.ScreenModelViewer;
 import net.minecraft.client.gui.modelviewer.elements.TextCycleElement;
 import net.minecraft.core.block.Block;
 
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.entity.EntityFallingBlock;
 import net.minecraft.core.world.World;
 
@@ -31,7 +32,7 @@ public class EntityEntryFallingBlock extends EntityEntry<EntityFallingBlock>{
             public Integer getElementFromString(String s) {
                 try {
                     int id = Integer.parseInt(s);
-                    if (Block.blocksList[id] != null) return id;
+                    if (Blocks.blocksList[id] != null) return id;
                 } catch (Exception ignored){}
                 return sand.carriedBlock.blockId;
             }
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryFirefly.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryFirefly.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryFirefly.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryFirefly.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryItem.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryItem.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryItem.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryItem.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryMinecart.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryMinecart.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryMinecart.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryMinecart.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryPainting.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryPainting.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryPainting.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryPainting.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntrySheep.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntrySheep.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntrySheep.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntrySheep.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntrySlime.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntrySlime.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntrySlime.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntrySlime.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryTNT.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryTNT.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryTNT.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryTNT.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryWolf.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryWolf.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryWolf.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/entity/EntityEntryWolf.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntry.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntry.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntry.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryBlock.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryBlock.java
similarity index 97%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryBlock.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryBlock.java
index 93b81b16f..6ba13b55c 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryBlock.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryBlock.java
@@ -8,6 +8,7 @@ import net.minecraft.client.gui.modelviewer.ScreenModelViewer;
 import net.minecraft.client.gui.modelviewer.elements.ListSelectorButtonElement;
 import net.minecraft.client.gui.modelviewer.elements.TextCycleElement;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.lang.I18n;
 import net.minecraft.core.util.helper.MathHelper;
@@ -93,7 +94,7 @@ public class ParticleEntryBlock extends ParticleEntryGeneric {
 
     @Override
     public void spawnParticle(Minecraft mc, World world, double x, double y, double z) {
-        mc.particleEngine.add(new ParticleBlockBreaking(world, x, y, z, motionX,motionY,motionZ, Block.getBlock(blockId), side, meta));
+        mc.particleEngine.add(new ParticleBlockBreaking(world, x, y, z, motionX,motionY,motionZ, Blocks.getBlock(blockId), side, meta));
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryBubble.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryBubble.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryBubble.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryBubble.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryGeneric.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryGeneric.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryGeneric.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryGeneric.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryItem.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryItem.java
similarity index 91%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryItem.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryItem.java
index d982b4cde..44390d55f 100644
--- a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryItem.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryItem.java
@@ -6,6 +6,7 @@ import net.minecraft.client.gui.ButtonElement;
 import net.minecraft.client.gui.Screen;
 import net.minecraft.client.gui.modelviewer.elements.TextCycleElement;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.lang.I18n;
 import net.minecraft.core.util.helper.MathHelper;
@@ -68,13 +69,13 @@ public class ParticleEntryItem extends ParticleEntry{
 
     }
     private int cycleItemId(int itemId, int offset){
-        int numItems = Item.itemsList.length - Block.blocksList.length;
+        int numItems = Item.itemsList.length - Blocks.blocksList.length;
 
         int _itemId = MathHelper.clamp(itemId - numItems, 0, numItems);
         int id = (_itemId + numItems + offset) % numItems;
-        while (Item.itemsList[id + Block.blocksList.length] == null){
+        while (Item.itemsList[id + Blocks.blocksList.length] == null){
             id = (id + (int) Math.signum(offset) + numItems) % numItems;
         }
-        return id + Block.blocksList.length;
+        return id + Blocks.blocksList.length;
     }
 }
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryLeaf.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryLeaf.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryLeaf.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryLeaf.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryNote.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryNote.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryNote.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryNote.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryRedstone.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryRedstone.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryRedstone.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/categories/entries/particle/ParticleEntryRedstone.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/elements/IActionListener.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/IActionListener.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/elements/IActionListener.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/IActionListener.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/elements/IKeyListener.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/IKeyListener.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/elements/IKeyListener.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/IKeyListener.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/elements/IListenerElement.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/IListenerElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/elements/IListenerElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/IListenerElement.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListSelectorButtonElement.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListSelectorButtonElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/elements/ListSelectorButtonElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListSelectorButtonElement.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerButtonElement.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerButtonElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerButtonElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerButtonElement.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerSliderElement.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerSliderElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerSliderElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerSliderElement.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerTextFieldElement.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerTextFieldElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerTextFieldElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/ListenerTextFieldElement.java
diff --git a/src/main/java/net/minecraft/client/gui/modelviewer/elements/TextCycleElement.java b/game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/TextCycleElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/modelviewer/elements/TextCycleElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/modelviewer/elements/TextCycleElement.java
diff --git a/src/main/java/net/minecraft/client/gui/options/OptionsButtonElement.java b/game/client/src/main/java/net/minecraft/client/gui/options/OptionsButtonElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/OptionsButtonElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/OptionsButtonElement.java
diff --git a/src/main/java/net/minecraft/client/gui/options/OptionsScreen.java b/game/client/src/main/java/net/minecraft/client/gui/options/OptionsScreen.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/OptionsScreen.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/OptionsScreen.java
diff --git a/src/main/java/net/minecraft/client/gui/options/OverlayButtonElement.java b/game/client/src/main/java/net/minecraft/client/gui/options/OverlayButtonElement.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/OverlayButtonElement.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/OverlayButtonElement.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/AvailableTexturePackListComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/AvailableTexturePackListComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/AvailableTexturePackListComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/AvailableTexturePackListComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/BooleanOptionComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/BooleanOptionComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/BooleanOptionComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/BooleanOptionComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/ButtonComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/ButtonComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/ButtonComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/ButtonComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/DifficultyOptionComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/DifficultyOptionComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/DifficultyOptionComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/DifficultyOptionComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/FloatOptionComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/FloatOptionComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/FloatOptionComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/FloatOptionComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/FramerateOptionComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/FramerateOptionComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/FramerateOptionComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/FramerateOptionComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/IntegerOptionComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/IntegerOptionComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/IntegerOptionComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/IntegerOptionComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/KeyBindingComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/KeyBindingComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/KeyBindingComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/KeyBindingComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/LanguagePackListComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/LanguagePackListComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/LanguagePackListComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/LanguagePackListComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/OptionsCategory.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/OptionsCategory.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/OptionsCategory.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/OptionsCategory.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/OptionsComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/OptionsComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/OptionsComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/OptionsComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/SearchFieldComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/SearchFieldComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/SearchFieldComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/SearchFieldComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/SelectedTexturePackListComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/SelectedTexturePackListComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/SelectedTexturePackListComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/SelectedTexturePackListComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/ShortcutComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/ShortcutComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/ShortcutComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/ShortcutComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/ToggleableOptionComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/ToggleableOptionComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/ToggleableOptionComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/ToggleableOptionComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/components/TooltipPickerComponent.java b/game/client/src/main/java/net/minecraft/client/gui/options/components/TooltipPickerComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/components/TooltipPickerComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/components/TooltipPickerComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/options/data/OptionsPage.java b/game/client/src/main/java/net/minecraft/client/gui/options/data/OptionsPage.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/data/OptionsPage.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/data/OptionsPage.java
diff --git a/src/main/java/net/minecraft/client/gui/options/data/OptionsPageRegistry.java b/game/client/src/main/java/net/minecraft/client/gui/options/data/OptionsPageRegistry.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/data/OptionsPageRegistry.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/data/OptionsPageRegistry.java
diff --git a/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java b/game/client/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
rename to game/client/src/main/java/net/minecraft/client/gui/options/data/OptionsPages.java
diff --git a/src/main/java/net/minecraft/client/gui/paged/CallbackComponent.java b/game/client/src/main/java/net/minecraft/client/gui/paged/CallbackComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/paged/CallbackComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/paged/CallbackComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/paged/OnValueChangedCallback.java b/game/client/src/main/java/net/minecraft/client/gui/paged/OnValueChangedCallback.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/paged/OnValueChangedCallback.java
rename to game/client/src/main/java/net/minecraft/client/gui/paged/OnValueChangedCallback.java
diff --git a/src/main/java/net/minecraft/client/gui/paged/Page.java b/game/client/src/main/java/net/minecraft/client/gui/paged/Page.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/paged/Page.java
rename to game/client/src/main/java/net/minecraft/client/gui/paged/Page.java
diff --git a/src/main/java/net/minecraft/client/gui/paged/PageComponent.java b/game/client/src/main/java/net/minecraft/client/gui/paged/PageComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/paged/PageComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/paged/PageComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/paged/PageRegistry.java b/game/client/src/main/java/net/minecraft/client/gui/paged/PageRegistry.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/paged/PageRegistry.java
rename to game/client/src/main/java/net/minecraft/client/gui/paged/PageRegistry.java
diff --git a/src/main/java/net/minecraft/client/gui/paged/ScreenPaged.java b/game/client/src/main/java/net/minecraft/client/gui/paged/ScreenPaged.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/paged/ScreenPaged.java
rename to game/client/src/main/java/net/minecraft/client/gui/paged/ScreenPaged.java
diff --git a/src/main/java/net/minecraft/client/gui/popup/ButtonComponent.java b/game/client/src/main/java/net/minecraft/client/gui/popup/ButtonComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/popup/ButtonComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/popup/ButtonComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/popup/ButtonGroupComponent.java b/game/client/src/main/java/net/minecraft/client/gui/popup/ButtonGroupComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/popup/ButtonGroupComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/popup/ButtonGroupComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/popup/InteractivePopupComponent.java b/game/client/src/main/java/net/minecraft/client/gui/popup/InteractivePopupComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/popup/InteractivePopupComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/popup/InteractivePopupComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/popup/LabelComponent.java b/game/client/src/main/java/net/minecraft/client/gui/popup/LabelComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/popup/LabelComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/popup/LabelComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/popup/ListComponent.java b/game/client/src/main/java/net/minecraft/client/gui/popup/ListComponent.java
similarity index 96%
rename from src/main/java/net/minecraft/client/gui/popup/ListComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/popup/ListComponent.java
index c48a547f8..01c1eac8d 100644
--- a/src/main/java/net/minecraft/client/gui/popup/ListComponent.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/popup/ListComponent.java
@@ -1,278 +1,278 @@
-package net.minecraft.client.gui.popup;
-
-import net.minecraft.client.render.Scissor;
-import net.minecraft.client.render.tessellator.Tessellator;
-import net.minecraft.core.sound.SoundCategory;
-import org.lwjgl.input.Mouse;
-import org.lwjgl.opengl.GL11;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.ButtonElement;
-import net.minecraft.client.gui.TooltipElement;
-import net.minecraft.core.util.helper.MathHelper;
-
-public class ListComponent
-    extends InteractivePopupComponent<Integer>
-{
-    private final Minecraft minecraft;
-    private int selectedItem = 0;
-    private float scrollAmount = 0;
-    private final ButtonElement[] buttons;
-    private final int height;
-    private int lastX = 0;
-    private int lastY = 0;
-    private final boolean closeOnItemSelected;
-    private final TooltipElement tooltip;
-    private final String[] buttonTooltips;
-    
-    private int scrollbarX;
-    private int scrollbarY;
-    private int scrollbarWidth;
-    private int scrollbarHeight;
-    private boolean isScrolling = false;
-    private int clickY;
-    private float previousScrollAmount = 0.0f;
-    
-    public ListComponent(int width, int height, String[] buttonLabels, String[] buttonTooltips, int selectedItem, boolean closeOnItemSelected)
-    {
-        super(width);
-
-        this.minecraft = Minecraft.getMinecraft(this);
-        this.height = height;
-        this.closeOnItemSelected = closeOnItemSelected;
-        this.tooltip = new TooltipElement(minecraft);
-
-        this.selectedItem = selectedItem;
-        this.buttonTooltips = buttonTooltips;
-
-        this.buttons = new ButtonElement[buttonLabels.length];
-        for (int i = 0; i < this.buttons.length; i++)
-        {
-            this.buttons[i] = new ButtonElement(i, 0, 0, width - 2 - 6, 20, buttonLabels[i]);
-            if (i == selectedItem)
-            {
-                this.buttons[i].enabled = false;
-            }
-        }
-
-        // Scroll so selected item is in view
-        float ratio = (float)(getScrollableHeight() + this.height) / getScrollableHeight();
-        float sc = (selectedItem / (float)(this.buttons.length - 4)) * ratio;
-        sc -= ((float)this.height / getScrollableHeight());
-        scroll(sc);
-    }
-
-    private boolean canScroll()
-    {
-        return getScrollableHeight() > height - 2;
-    }
-
-    @Override
-    public Integer getOutput()
-    {
-        return this.selectedItem;
-    }
-
-    @Override
-    public int getHeight()
-    {
-        return height;
-    }
-
-    private void scroll(float amount)
-    {
-        if (!canScroll()) {
-            scrollAmount = 0.0f;
-        } else {
-            scrollAmount = MathHelper.clamp(scrollAmount + amount, 0.0f, 1.0f);
-        }
-    }
-
-    @Override
-    public void render(int x, int y, int mouseX, int mouseY)
-    {
-        this.lastX = x;
-        this.lastY = y;
-
-        // Do scroll
-        if (canScroll() && mouseInRegion(x, y, mouseX, mouseY))
-        {
-            float wheel = Mouse.getDWheel();
-            if (wheel != 0.0f)
-                scroll(wheel / -12.0f);
-        }
-
-        GL11.glDisable(GL11.GL_TEXTURE_2D);
-        drawBackground(x, y);
-        drawScrollbar(x, y, mouseX, mouseY);
-
-        Scissor.enable(x + 1, y + 1, getWidth() - 2, getHeight() - 2);
-        GL11.glEnable(GL11.GL_TEXTURE_2D);
-
-        // Draw buttons
-        for (int i = 0; i < buttons.length; i++)
-        {
-            if (canScroll()) {
-                buttons[i].width = getWidth() - 2 - 6;
-            } else {
-                buttons[i].width = getWidth() - 2;
-            }
-
-            ButtonElement button = buttons[i];
-            button.xPosition = x + 1;
-            button.yPosition = (y + 1) + (i * 20) - getScrollPixels();
-            if (mouseInRegion(x, y, mouseX, mouseY))
-            {
-                button.drawButton(minecraft, mouseX, mouseY);
-            }
-            else
-            {
-                button.drawButton(minecraft, -1, -1);
-            }
-        }
-
-        Scissor.disable();
-
-        if (buttonTooltips != null && mouseInRegion(x, y, mouseX, mouseY))
-        {
-            for (int i = 0; i < buttons.length; i++)
-            {
-                ButtonElement button = buttons[i];
-                if (button.isHovered(mouseX, mouseY))
-                {
-                    tooltip.render(buttonTooltips[i], mouseX, mouseY, 0, 0);
-                    break;
-                }
-            }
-        }
-    }
-
-    private boolean mouseInRegion(int x, int y, int mouseX, int mouseY)
-    {
-        return mouseX >= x && mouseX < x + getWidth() && mouseY >= y && mouseY < y + height;
-    }
-
-    private int getScrollPixels()
-    {
-        return (int)(scrollAmount * (getScrollableHeight() - (height - 2)));
-    }
-
-    private int getScrollableHeight()
-    {
-        return 20 * buttons.length;
-    }
-
-    @Override
-    public void onClick(int x, int y, int button)
-    {
-        super.onClick(x, y, button);
-
-        int scrollableHeight = getScrollableHeight();
-        int displayRegionHeight = height - 2;
-        boolean canScroll = scrollableHeight > displayRegionHeight;
-
-        if(canScroll && button == 0 && x >= scrollbarX && x < scrollbarX + scrollbarWidth && y >= scrollbarY && y < scrollbarY + scrollbarHeight) {
-        	isScrolling = true;
-        	previousScrollAmount = scrollAmount;
-        	clickY = y;
-        	return;
-        }
-        
-        if (mouseInRegion(lastX, lastY, x, y))
-        {
-            for (ButtonElement b : this.buttons)
-            {
-                if (b.mouseClicked(minecraft, x, y))
-                {
-                    for (ButtonElement b2 : this.buttons)
-                    {
-                        b2.enabled = true;
-                    }
-
-                    b.enabled = false;
-                    this.selectedItem = b.id;
-
-                    if (closeOnItemSelected)
-                    {
-                        getParent().close(1);
-                        minecraft.sndManager.playSound("random.click", SoundCategory.GUI_SOUNDS, 1.0F, 1.0F);
-                    }
-
-                    break;
-                }
-            }
-        }
-    }
-    
-    @Override
-    public void mouseMovedOrUp(int x, int y, int button)
-    {
-    	super.mouseMovedOrUp(x, y, button);
-    	if(button == 0) {
-    		isScrolling = false;
-    		previousScrollAmount = 0.0f;
-    		clickY = 0;
-    	}
-    }
-
-    private void drawBackground(int x, int y)
-    {
-        Tessellator tessellator = Tessellator.instance;
-        tessellator.startDrawingQuads();
-        tessellator.setColorOpaque_I(0xA0A0A0);
-        tessellator.addVertex(x, y + height, 0.0D);
-        tessellator.addVertex(x + getWidth(), y + height, 0.0D);
-        tessellator.addVertex(x + getWidth(), y, 0.0D);
-        tessellator.addVertex(x, y, 0.0D);
-        tessellator.draw();
-        tessellator.startDrawingQuads();
-        tessellator.setColorOpaque_I(0x000000);
-        tessellator.addVertex(x + 1, y + height - 1, 0.0D);
-        tessellator.addVertex(x + getWidth() - 1, y + height - 1, 0.0D);
-        tessellator.addVertex(x + getWidth() - 1, y + 1, 0.0D);
-        tessellator.addVertex(x + 1, y + 1, 0.0D);
-        tessellator.draw();
-    }
-
-    private void drawScrollbar(int x, int y, int mouseX, int mouseY)
-    {
-    	int scrollableHeight = getScrollableHeight();
-        int displayRegionHeight = height - 2;
-
-        if (!canScroll()) {
-        	return;
-        }
-
-        float scrollbarScale = (float) displayRegionHeight / scrollableHeight;
-        
-    	scrollbarWidth = 6;
-        scrollbarHeight = (int) (scrollbarScale * displayRegionHeight);
-        
-        int minScrollbarY = 0;
-        int maxScrollbarY = displayRegionHeight - scrollbarHeight;
-        
-        int scrollbarDelta = maxScrollbarY - minScrollbarY;
-        
-        scrollbarY = y + 1 + (int) (scrollAmount * scrollbarDelta);
-        scrollbarX = x + getWidth() - 1 - 6;
-        
-        Tessellator t = Tessellator.instance;
-
-        t.startDrawingQuads();
-        t.setColorRGBA_I(0x808080, 255);
-        t.drawRectangle(scrollbarX, scrollbarY, 6, scrollbarHeight);
-        t.setColorRGBA_I(0xc0c0c0, 255);
-        t.drawRectangle(scrollbarX, scrollbarY, 5, scrollbarHeight - 1);
-        t.draw();
-        
-        if(isScrolling) {
-        	int delta = mouseY - clickY;
-        	float scrolledScreens = delta / (float) scrollbarHeight;
-        	float scrolledPixels = displayRegionHeight * scrolledScreens;
-        	float scrolledAmount = scrolledPixels / (float) (scrollableHeight - displayRegionHeight);
-        	
-        	scrollAmount = MathHelper.clamp(previousScrollAmount + scrolledAmount, 0.0f, 1.0f);
-        }
-        
-    }
-}
+package net.minecraft.client.gui.popup;
+
+import net.minecraft.client.render.Scissor;
+import net.minecraft.client.render.tessellator.Tessellator;
+import net.minecraft.core.sound.SoundCategory;
+import org.lwjgl.input.Mouse;
+import org.lwjgl.opengl.GL11;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.ButtonElement;
+import net.minecraft.client.gui.TooltipElement;
+import net.minecraft.core.util.helper.MathHelper;
+
+public class ListComponent
+    extends InteractivePopupComponent<Integer>
+{
+    private final Minecraft minecraft;
+    private int selectedItem = 0;
+    private float scrollAmount = 0;
+    private final ButtonElement[] buttons;
+    private final int height;
+    private int lastX = 0;
+    private int lastY = 0;
+    private final boolean closeOnItemSelected;
+    private final TooltipElement tooltip;
+    private final String[] buttonTooltips;
+    
+    private int scrollbarX;
+    private int scrollbarY;
+    private int scrollbarWidth;
+    private int scrollbarHeight;
+    private boolean isScrolling = false;
+    private int clickY;
+    private float previousScrollAmount = 0.0f;
+    
+    public ListComponent(int width, int height, String[] buttonLabels, String[] buttonTooltips, int selectedItem, boolean closeOnItemSelected)
+    {
+        super(width);
+
+        this.minecraft = Minecraft.getMinecraft(this);
+        this.height = height;
+        this.closeOnItemSelected = closeOnItemSelected;
+        this.tooltip = new TooltipElement(minecraft);
+
+        this.selectedItem = selectedItem;
+        this.buttonTooltips = buttonTooltips;
+
+        this.buttons = new ButtonElement[buttonLabels.length];
+        for (int i = 0; i < this.buttons.length; i++)
+        {
+            this.buttons[i] = new ButtonElement(i, 0, 0, width - 2 - 6, 20, buttonLabels[i]);
+            if (i == selectedItem)
+            {
+                this.buttons[i].enabled = false;
+            }
+        }
+
+        // Scroll so selected item is in view
+        float ratio = (float)(getScrollableHeight() + this.height) / getScrollableHeight();
+        float sc = (selectedItem / (float)(this.buttons.length - 4)) * ratio;
+        sc -= ((float)this.height / getScrollableHeight());
+        scroll(sc);
+    }
+
+    private boolean canScroll()
+    {
+        return getScrollableHeight() > height - 2;
+    }
+
+    @Override
+    public Integer getOutput()
+    {
+        return this.selectedItem;
+    }
+
+    @Override
+    public int getHeight()
+    {
+        return height;
+    }
+
+    private void scroll(float amount)
+    {
+        if (!canScroll()) {
+            scrollAmount = 0.0f;
+        } else {
+            scrollAmount = MathHelper.clamp(scrollAmount + amount, 0.0f, 1.0f);
+        }
+    }
+
+    @Override
+    public void render(int x, int y, int mouseX, int mouseY)
+    {
+        this.lastX = x;
+        this.lastY = y;
+
+        // Do scroll
+        if (canScroll() && mouseInRegion(x, y, mouseX, mouseY))
+        {
+            float wheel = Mouse.getDWheel();
+            if (wheel != 0.0f)
+                scroll(wheel / -12.0f);
+        }
+
+        GL11.glDisable(GL11.GL_TEXTURE_2D);
+        drawBackground(x, y);
+        drawScrollbar(x, y, mouseX, mouseY);
+
+        Scissor.enable(x + 1, y + 1, getWidth() - 2, getHeight() - 2);
+        GL11.glEnable(GL11.GL_TEXTURE_2D);
+
+        // Draw buttons
+        for (int i = 0; i < buttons.length; i++)
+        {
+            if (canScroll()) {
+                buttons[i].width = getWidth() - 2 - 6;
+            } else {
+                buttons[i].width = getWidth() - 2;
+            }
+
+            ButtonElement button = buttons[i];
+            button.xPosition = x + 1;
+            button.yPosition = (y + 1) + (i * 20) - getScrollPixels();
+            if (mouseInRegion(x, y, mouseX, mouseY))
+            {
+                button.drawButton(minecraft, mouseX, mouseY);
+            }
+            else
+            {
+                button.drawButton(minecraft, -1, -1);
+            }
+        }
+
+        Scissor.disable();
+
+        if (buttonTooltips != null && mouseInRegion(x, y, mouseX, mouseY))
+        {
+            for (int i = 0; i < buttons.length; i++)
+            {
+                ButtonElement button = buttons[i];
+                if (button.isHovered(mouseX, mouseY))
+                {
+                    tooltip.render(buttonTooltips[i], mouseX, mouseY, 0, 0);
+                    break;
+                }
+            }
+        }
+    }
+
+    private boolean mouseInRegion(int x, int y, int mouseX, int mouseY)
+    {
+        return mouseX >= x && mouseX < x + getWidth() && mouseY >= y && mouseY < y + height;
+    }
+
+    private int getScrollPixels()
+    {
+        return (int)(scrollAmount * (getScrollableHeight() - (height - 2)));
+    }
+
+    private int getScrollableHeight()
+    {
+        return 20 * buttons.length;
+    }
+
+    @Override
+    public void onClick(int x, int y, int button)
+    {
+        super.onClick(x, y, button);
+
+        int scrollableHeight = getScrollableHeight();
+        int displayRegionHeight = height - 2;
+        boolean canScroll = scrollableHeight > displayRegionHeight;
+
+        if(canScroll && button == 0 && x >= scrollbarX && x < scrollbarX + scrollbarWidth && y >= scrollbarY && y < scrollbarY + scrollbarHeight) {
+        	isScrolling = true;
+        	previousScrollAmount = scrollAmount;
+        	clickY = y;
+        	return;
+        }
+        
+        if (mouseInRegion(lastX, lastY, x, y))
+        {
+            for (ButtonElement b : this.buttons)
+            {
+                if (b.mouseClicked(minecraft, x, y))
+                {
+                    for (ButtonElement b2 : this.buttons)
+                    {
+                        b2.enabled = true;
+                    }
+
+                    b.enabled = false;
+                    this.selectedItem = b.id;
+
+                    if (closeOnItemSelected)
+                    {
+                        getParent().close(1);
+                        minecraft.sndManager.playSound("random.click", SoundCategory.GUI_SOUNDS, 1.0F, 1.0F);
+                    }
+
+                    break;
+                }
+            }
+        }
+    }
+    
+    @Override
+    public void mouseMovedOrUp(int x, int y, int button)
+    {
+    	super.mouseMovedOrUp(x, y, button);
+    	if(button == 0) {
+    		isScrolling = false;
+    		previousScrollAmount = 0.0f;
+    		clickY = 0;
+    	}
+    }
+
+    private void drawBackground(int x, int y)
+    {
+        Tessellator tessellator = Tessellator.instance;
+        tessellator.startDrawingQuads();
+        tessellator.setColorOpaque_I(0xA0A0A0);
+        tessellator.addVertex(x, y + height, 0.0D);
+        tessellator.addVertex(x + getWidth(), y + height, 0.0D);
+        tessellator.addVertex(x + getWidth(), y, 0.0D);
+        tessellator.addVertex(x, y, 0.0D);
+        tessellator.draw();
+        tessellator.startDrawingQuads();
+        tessellator.setColorOpaque_I(0x000000);
+        tessellator.addVertex(x + 1, y + height - 1, 0.0D);
+        tessellator.addVertex(x + getWidth() - 1, y + height - 1, 0.0D);
+        tessellator.addVertex(x + getWidth() - 1, y + 1, 0.0D);
+        tessellator.addVertex(x + 1, y + 1, 0.0D);
+        tessellator.draw();
+    }
+
+    private void drawScrollbar(int x, int y, int mouseX, int mouseY)
+    {
+    	int scrollableHeight = getScrollableHeight();
+        int displayRegionHeight = height - 2;
+
+        if (!canScroll()) {
+        	return;
+        }
+
+        float scrollbarScale = (float) displayRegionHeight / scrollableHeight;
+        
+    	scrollbarWidth = 6;
+        scrollbarHeight = (int) (scrollbarScale * displayRegionHeight);
+        
+        int minScrollbarY = 0;
+        int maxScrollbarY = displayRegionHeight - scrollbarHeight;
+        
+        int scrollbarDelta = maxScrollbarY - minScrollbarY;
+        
+        scrollbarY = y + 1 + (int) (scrollAmount * scrollbarDelta);
+        scrollbarX = x + getWidth() - 1 - 6;
+        
+        Tessellator t = Tessellator.instance;
+
+        t.startDrawingQuads();
+        t.setColorRGBA_I(0x808080, 255);
+        t.drawRectangle(scrollbarX, scrollbarY, 6, scrollbarHeight);
+        t.setColorRGBA_I(0xc0c0c0, 255);
+        t.drawRectangle(scrollbarX, scrollbarY, 5, scrollbarHeight - 1);
+        t.draw();
+        
+        if(isScrolling) {
+        	int delta = mouseY - clickY;
+        	float scrolledScreens = delta / (float) scrollbarHeight;
+        	float scrolledPixels = displayRegionHeight * scrolledScreens;
+        	float scrolledAmount = scrolledPixels / (float) (scrollableHeight - displayRegionHeight);
+        	
+        	scrollAmount = MathHelper.clamp(previousScrollAmount + scrolledAmount, 0.0f, 1.0f);
+        }
+        
+    }
+}
diff --git a/src/main/java/net/minecraft/client/gui/popup/MessageBoxComponent.java b/game/client/src/main/java/net/minecraft/client/gui/popup/MessageBoxComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/popup/MessageBoxComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/popup/MessageBoxComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/popup/PopupBuilder.java b/game/client/src/main/java/net/minecraft/client/gui/popup/PopupBuilder.java
similarity index 97%
rename from src/main/java/net/minecraft/client/gui/popup/PopupBuilder.java
rename to game/client/src/main/java/net/minecraft/client/gui/popup/PopupBuilder.java
index 5dc36b76d..eb93e8ac1 100644
--- a/src/main/java/net/minecraft/client/gui/popup/PopupBuilder.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/popup/PopupBuilder.java
@@ -1,184 +1,184 @@
-package net.minecraft.client.gui.popup;
-
-import net.minecraft.client.gui.Screen;
-import net.minecraft.core.lang.I18n;
-import net.minecraft.core.util.collection.Pair;
-
-import java.util.*;
-
-import static net.minecraft.client.gui.popup.PopupScreen.VERTICAL_MARGIN;
-import static net.minecraft.client.gui.popup.PopupScreen.HORIZONTAL_MARGIN;
-import static net.minecraft.client.gui.popup.PopupScreen.COMPONENT_GAP;
-
-public class PopupBuilder
-{
-    private final Screen parent;
-    private final int width;
-    private Integer statusCodeOnEsc = null;
-    private Integer statusCodeOnEnter = null;
-    private Integer statusCodeOnClickOut = null;
-    private final List<PopupComponent> components = new ArrayList<>();
-    private final Map<PopupComponent, String> componentKeyMap = new HashMap<>();
-    private final List<PopupCloseListener> onCloseListeners = new ArrayList<>();
-    private Pair<Integer,Integer> backgroundColor = null;
-
-    public PopupBuilder(Screen parent, int width)
-    {
-        this.parent = parent;
-        this.width = width;
-    }
-
-    public PopupScreen build()
-    {
-        PopupScreen popup = new PopupScreen(
-                parent,
-                width,
-                getHeight(),
-                statusCodeOnEsc,
-                statusCodeOnEnter,
-                statusCodeOnClickOut,
-                components,
-                componentKeyMap,
-                onCloseListeners,
-                backgroundColor
-        );
-        for (PopupComponent component : components)
-        {
-            component.setParent(popup);
-        }
-        return popup;
-    }
-
-    private int getHeight()
-    {
-        int accY = VERTICAL_MARGIN;
-
-        for (PopupComponent component : components)
-        {
-            accY += component.getHeight() + COMPONENT_GAP;
-        }
-
-        accY -= COMPONENT_GAP;
-        accY += VERTICAL_MARGIN;
-
-        return accY;
-    }
-
-    public PopupBuilder closeOnEsc(int statusCode)
-    {
-        this.statusCodeOnEsc = statusCode;
-        return this;
-    }
-
-    public PopupBuilder closeOnEnter(int statusCode)
-    {
-        this.statusCodeOnEnter = statusCode;
-        return this;
-    }
-
-    public PopupBuilder closeOnClickOut(int statusCode)
-    {
-        this.statusCodeOnClickOut = statusCode;
-        return this;
-    }
-
-    public PopupBuilder withLabelLiteral(String text, int color)
-    {
-        PopupComponent component = new LabelComponent(width, text, color);
-        this.components.add(component);
-        return this;
-    }
-
-    public PopupBuilder withLabelLiteral(String text)
-    {
-        return withLabelLiteral(text, 0xFFFFFFFF);
-    }
-
-    public PopupBuilder withLabel(String translationKey, int color)
-    {
-        return withLabelLiteral(I18n.getInstance().translateKey(translationKey), color);
-    }
-
-    public PopupBuilder withLabel(String translationKey)
-    {
-        return withLabel(translationKey, 0xFFFFFFFF);
-    }
-
-    public PopupBuilder withTextField(String key, String defaultText)
-    {
-        PopupComponent component = new TextInputComponent(width - (HORIZONTAL_MARGIN * 2), defaultText, "");
-        this.components.add(component);
-        this.componentKeyMap.put(component, key);
-        return this;
-    }
-
-    public PopupBuilder withTextField(String key, String defaultText, String placeholderTranslationKey)
-    {
-        PopupComponent component = new TextInputComponent(width - (HORIZONTAL_MARGIN * 2), defaultText, I18n.getInstance().translateKey(placeholderTranslationKey));
-        this.components.add(component);
-        this.componentKeyMap.put(component, key);
-        return this;
-    }
-
-    public PopupBuilder withButtonGroup(String key, String[] buttonTranslationKeys, int[] buttonStatusCodes)
-    {
-        String[] buttonLabels = new String[buttonTranslationKeys.length];
-        for (int i = 0; i < buttonTranslationKeys.length; i++)
-        {
-            buttonLabels[i] = I18n.getInstance().translateKey(buttonTranslationKeys[i]);
-        }
-        boolean[] enabled = new boolean[buttonTranslationKeys.length];
-        Arrays.fill(enabled,true);
-        PopupComponent component = new ButtonGroupComponent(width - (HORIZONTAL_MARGIN * 2), buttonLabels, buttonStatusCodes, enabled);
-        this.components.add(component);
-        this.componentKeyMap.put(component, key);
-        return this;
-    }
-
-    public PopupBuilder withButtonGroup(String key, String[] buttonTranslationKeys, int[] buttonStatusCodes, boolean[] enabled)
-    {
-        String[] buttonLabels = new String[buttonTranslationKeys.length];
-        for (int i = 0; i < buttonTranslationKeys.length; i++)
-        {
-            buttonLabels[i] = I18n.getInstance().translateKey(buttonTranslationKeys[i]);
-        }
-        PopupComponent component = new ButtonGroupComponent(width - (HORIZONTAL_MARGIN * 2), buttonLabels, buttonStatusCodes, enabled);
-        this.components.add(component);
-        this.componentKeyMap.put(component, key);
-        return this;
-    }
-
-    public PopupBuilder withList(String key, int height, String[] buttons, String[] buttonDescs, int selectedItem, boolean closeOnItemSelected)
-    {
-        PopupComponent component = new ListComponent(width - (HORIZONTAL_MARGIN * 2), height, buttons, buttonDescs, selectedItem, closeOnItemSelected);
-        this.components.add(component);
-        this.componentKeyMap.put(component, key);
-        return this;
-    }
-
-    public PopupBuilder withMessageBox(String key, int height, String text, int chars)
-    {
-        PopupComponent component = new MessageBoxComponent(width - (HORIZONTAL_MARGIN * 2), height, text, chars);
-        this.components.add(component);
-        this.componentKeyMap.put(component, key);
-        return this;
-    }
-
-    public PopupBuilder withButton(String key, String labelTranslationKey, int defaultValue, String... valueTranslationKeys) {
-        PopupComponent component = new ButtonComponent(width - (HORIZONTAL_MARGIN * 2), labelTranslationKey, valueTranslationKeys, defaultValue);
-        this.components.add(component);
-        this.componentKeyMap.put(component, key);
-        return this;
-    }
-
-    public PopupBuilder withBackgroundColor(int color, int color2){
-        this.backgroundColor = Pair.of(color,color2);
-        return this;
-    }
-
-    public PopupBuilder withOnCloseListener(PopupCloseListener listener)
-    {
-        this.onCloseListeners.add(listener);
-        return this;
-    }
-}
+package net.minecraft.client.gui.popup;
+
+import net.minecraft.client.gui.Screen;
+import net.minecraft.core.lang.I18n;
+import net.minecraft.core.util.collection.Pair;
+
+import java.util.*;
+
+import static net.minecraft.client.gui.popup.PopupScreen.VERTICAL_MARGIN;
+import static net.minecraft.client.gui.popup.PopupScreen.HORIZONTAL_MARGIN;
+import static net.minecraft.client.gui.popup.PopupScreen.COMPONENT_GAP;
+
+public class PopupBuilder
+{
+    private final Screen parent;
+    private final int width;
+    private Integer statusCodeOnEsc = null;
+    private Integer statusCodeOnEnter = null;
+    private Integer statusCodeOnClickOut = null;
+    private final List<PopupComponent> components = new ArrayList<>();
+    private final Map<PopupComponent, String> componentKeyMap = new HashMap<>();
+    private final List<PopupCloseListener> onCloseListeners = new ArrayList<>();
+    private Pair<Integer,Integer> backgroundColor = null;
+
+    public PopupBuilder(Screen parent, int width)
+    {
+        this.parent = parent;
+        this.width = width;
+    }
+
+    public PopupScreen build()
+    {
+        PopupScreen popup = new PopupScreen(
+                parent,
+                width,
+                getHeight(),
+                statusCodeOnEsc,
+                statusCodeOnEnter,
+                statusCodeOnClickOut,
+                components,
+                componentKeyMap,
+                onCloseListeners,
+                backgroundColor
+        );
+        for (PopupComponent component : components)
+        {
+            component.setParent(popup);
+        }
+        return popup;
+    }
+
+    private int getHeight()
+    {
+        int accY = VERTICAL_MARGIN;
+
+        for (PopupComponent component : components)
+        {
+            accY += component.getHeight() + COMPONENT_GAP;
+        }
+
+        accY -= COMPONENT_GAP;
+        accY += VERTICAL_MARGIN;
+
+        return accY;
+    }
+
+    public PopupBuilder closeOnEsc(int statusCode)
+    {
+        this.statusCodeOnEsc = statusCode;
+        return this;
+    }
+
+    public PopupBuilder closeOnEnter(int statusCode)
+    {
+        this.statusCodeOnEnter = statusCode;
+        return this;
+    }
+
+    public PopupBuilder closeOnClickOut(int statusCode)
+    {
+        this.statusCodeOnClickOut = statusCode;
+        return this;
+    }
+
+    public PopupBuilder withLabelLiteral(String text, int color)
+    {
+        PopupComponent component = new LabelComponent(width, text, color);
+        this.components.add(component);
+        return this;
+    }
+
+    public PopupBuilder withLabelLiteral(String text)
+    {
+        return withLabelLiteral(text, 0xFFFFFFFF);
+    }
+
+    public PopupBuilder withLabel(String translationKey, int color)
+    {
+        return withLabelLiteral(I18n.getInstance().translateKey(translationKey), color);
+    }
+
+    public PopupBuilder withLabel(String translationKey)
+    {
+        return withLabel(translationKey, 0xFFFFFFFF);
+    }
+
+    public PopupBuilder withTextField(String key, String defaultText)
+    {
+        PopupComponent component = new TextInputComponent(width - (HORIZONTAL_MARGIN * 2), defaultText, "");
+        this.components.add(component);
+        this.componentKeyMap.put(component, key);
+        return this;
+    }
+
+    public PopupBuilder withTextField(String key, String defaultText, String placeholderTranslationKey)
+    {
+        PopupComponent component = new TextInputComponent(width - (HORIZONTAL_MARGIN * 2), defaultText, I18n.getInstance().translateKey(placeholderTranslationKey));
+        this.components.add(component);
+        this.componentKeyMap.put(component, key);
+        return this;
+    }
+
+    public PopupBuilder withButtonGroup(String key, String[] buttonTranslationKeys, int[] buttonStatusCodes)
+    {
+        String[] buttonLabels = new String[buttonTranslationKeys.length];
+        for (int i = 0; i < buttonTranslationKeys.length; i++)
+        {
+            buttonLabels[i] = I18n.getInstance().translateKey(buttonTranslationKeys[i]);
+        }
+        boolean[] enabled = new boolean[buttonTranslationKeys.length];
+        Arrays.fill(enabled,true);
+        PopupComponent component = new ButtonGroupComponent(width - (HORIZONTAL_MARGIN * 2), buttonLabels, buttonStatusCodes, enabled);
+        this.components.add(component);
+        this.componentKeyMap.put(component, key);
+        return this;
+    }
+
+    public PopupBuilder withButtonGroup(String key, String[] buttonTranslationKeys, int[] buttonStatusCodes, boolean[] enabled)
+    {
+        String[] buttonLabels = new String[buttonTranslationKeys.length];
+        for (int i = 0; i < buttonTranslationKeys.length; i++)
+        {
+            buttonLabels[i] = I18n.getInstance().translateKey(buttonTranslationKeys[i]);
+        }
+        PopupComponent component = new ButtonGroupComponent(width - (HORIZONTAL_MARGIN * 2), buttonLabels, buttonStatusCodes, enabled);
+        this.components.add(component);
+        this.componentKeyMap.put(component, key);
+        return this;
+    }
+
+    public PopupBuilder withList(String key, int height, String[] buttons, String[] buttonDescs, int selectedItem, boolean closeOnItemSelected)
+    {
+        PopupComponent component = new ListComponent(width - (HORIZONTAL_MARGIN * 2), height, buttons, buttonDescs, selectedItem, closeOnItemSelected);
+        this.components.add(component);
+        this.componentKeyMap.put(component, key);
+        return this;
+    }
+
+    public PopupBuilder withMessageBox(String key, int height, String text, int chars)
+    {
+        PopupComponent component = new MessageBoxComponent(width - (HORIZONTAL_MARGIN * 2), height, text, chars);
+        this.components.add(component);
+        this.componentKeyMap.put(component, key);
+        return this;
+    }
+
+    public PopupBuilder withButton(String key, String labelTranslationKey, int defaultValue, String... valueTranslationKeys) {
+        PopupComponent component = new ButtonComponent(width - (HORIZONTAL_MARGIN * 2), labelTranslationKey, valueTranslationKeys, defaultValue);
+        this.components.add(component);
+        this.componentKeyMap.put(component, key);
+        return this;
+    }
+
+    public PopupBuilder withBackgroundColor(int color, int color2){
+        this.backgroundColor = Pair.of(color,color2);
+        return this;
+    }
+
+    public PopupBuilder withOnCloseListener(PopupCloseListener listener)
+    {
+        this.onCloseListeners.add(listener);
+        return this;
+    }
+}
diff --git a/src/main/java/net/minecraft/client/gui/popup/PopupCloseListener.java b/game/client/src/main/java/net/minecraft/client/gui/popup/PopupCloseListener.java
similarity index 95%
rename from src/main/java/net/minecraft/client/gui/popup/PopupCloseListener.java
rename to game/client/src/main/java/net/minecraft/client/gui/popup/PopupCloseListener.java
index 4ee765aca..6103a514c 100644
--- a/src/main/java/net/minecraft/client/gui/popup/PopupCloseListener.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/popup/PopupCloseListener.java
@@ -1,8 +1,8 @@
-package net.minecraft.client.gui.popup;
-
-import java.util.Map;
-
-public interface PopupCloseListener
-{
-    void onClosed(int statusCode, Map<String, ?> results);
-}
+package net.minecraft.client.gui.popup;
+
+import java.util.Map;
+
+public interface PopupCloseListener
+{
+    void onClosed(int statusCode, Map<String, ?> results);
+}
diff --git a/src/main/java/net/minecraft/client/gui/popup/PopupComponent.java b/game/client/src/main/java/net/minecraft/client/gui/popup/PopupComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/popup/PopupComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/popup/PopupComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/popup/PopupScreen.java b/game/client/src/main/java/net/minecraft/client/gui/popup/PopupScreen.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/popup/PopupScreen.java
rename to game/client/src/main/java/net/minecraft/client/gui/popup/PopupScreen.java
diff --git a/src/main/java/net/minecraft/client/gui/popup/TextInputComponent.java b/game/client/src/main/java/net/minecraft/client/gui/popup/TextInputComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/popup/TextInputComponent.java
rename to game/client/src/main/java/net/minecraft/client/gui/popup/TextInputComponent.java
diff --git a/src/main/java/net/minecraft/client/gui/subtitles/SubtitleTracker.java b/game/client/src/main/java/net/minecraft/client/gui/subtitles/SubtitleTracker.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/subtitles/SubtitleTracker.java
rename to game/client/src/main/java/net/minecraft/client/gui/subtitles/SubtitleTracker.java
diff --git a/src/main/java/net/minecraft/client/gui/text/ITextField.java b/game/client/src/main/java/net/minecraft/client/gui/text/ITextField.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/text/ITextField.java
rename to game/client/src/main/java/net/minecraft/client/gui/text/ITextField.java
diff --git a/src/main/java/net/minecraft/client/gui/text/TextFieldEditor.java b/game/client/src/main/java/net/minecraft/client/gui/text/TextFieldEditor.java
similarity index 96%
rename from src/main/java/net/minecraft/client/gui/text/TextFieldEditor.java
rename to game/client/src/main/java/net/minecraft/client/gui/text/TextFieldEditor.java
index 67ebfd662..5ae069048 100644
--- a/src/main/java/net/minecraft/client/gui/text/TextFieldEditor.java
+++ b/game/client/src/main/java/net/minecraft/client/gui/text/TextFieldEditor.java
@@ -1,287 +1,287 @@
-package net.minecraft.client.gui.text;
-
-import com.mojang.logging.LogUtils;
-import org.lwjgl.input.Keyboard;
-
-import net.minecraft.core.util.helper.MathHelper;
-import org.slf4j.Logger;
-
-import java.awt.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.StringSelection;
-import java.awt.datatransfer.Transferable;
-
-public class TextFieldEditor
-{
-    private static final Logger LOGGER = LogUtils.getLogger();
-    public static String substring(String s, int start, int end)
-    {
-        if (start < 0) start = 0;
-        if (end > s.length()) end = s.length();
-        if (start > end) return "";
-
-        return s.substring(start, end);
-    }
-
-    public static String substring(String s, int start)
-    {
-        return substring(s, start, s.length());
-    }
-
-    private final ITextField textField;
-    private int cursor;
-
-    public TextFieldEditor(ITextField textField)
-    {
-        this.textField = textField;
-        this.cursor = textField.getText().length();
-    }
-
-    public int getCursor()
-    {
-        if (cursor < 0)
-        {
-            setCursor(0);
-        }
-        if (cursor > textField.getText().length())
-        {
-            setCursor(textField.getText().length());
-        }
-        return cursor;
-    }
-
-    public String getText()
-    {
-        return textField.getText();
-    }
-
-    public void setText(String s)
-    {
-        if (s.length() > textField.maxLength())
-        {
-            s = substring(s, 0, textField.maxLength());
-        }
-
-        textField.setText(s);
-    }
-
-    public boolean handleInput(int key, char c)
-    {
-        // Handle copy-paste
-        if (Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL))
-        {
-            if (key == Keyboard.KEY_C)
-            {
-                stringToClipboard(getText());
-                return false;
-            }
-            else if (key == Keyboard.KEY_V)
-            {
-                String pasteString = clipboardToString();
-                if (pasteString != null)
-                {
-                    addStringAtCursor(pasteString);
-                }
-                return true;
-            }
-            else if (key == Keyboard.KEY_LEFT)
-            {
-                setCursor(findNextAnchor(-1));
-                return false;
-            }
-            else if (key == Keyboard.KEY_RIGHT)
-            {
-                setCursor(findNextAnchor(1));
-                return false;
-            }
-            else if (key == Keyboard.KEY_BACK)
-            {
-                int next = findNextAnchor(-1);
-                int d = cursor - next;
-                deleteCharsBeforeCursor(d);
-                return true;
-            }
-            else if (key == Keyboard.KEY_DELETE)
-            {
-                int next = findNextAnchor(1);
-                int d = next - cursor;
-                deleteCharsAfterCursor(d);
-                return true;
-            }
-        }
-
-        // Handle home and end
-        if (key == Keyboard.KEY_HOME)
-        {
-            setCursor(0);
-            return false;
-        }
-        if (key == Keyboard.KEY_END)
-        {
-            setCursor(getText().length());
-            return false;
-        }
-
-        // Handle single directionality
-        if (key == Keyboard.KEY_LEFT)
-        {
-            moveCursor(-1);
-            return false;
-        }
-        if (key == Keyboard.KEY_RIGHT)
-        {
-            moveCursor(1);
-            return false;
-        }
-
-        // Handle backspace
-        if (key == Keyboard.KEY_BACK)
-        {
-            deleteCharsBeforeCursor(1);
-            return true;
-        }
-
-        // Handle delete
-        if (key == Keyboard.KEY_DELETE)
-        {
-            deleteCharsAfterCursor(1);
-            return true;
-        }
-
-        addCharAtCursor(c);
-        return true;
-    }
-
-    public void moveCursor(int i)
-    {
-        setCursor(cursor + i);
-    }
-
-    public void setCursor(int i)
-    {
-        if (i <= 0)
-        {
-            i = 0;
-        }
-        if (i > getText().length())
-        {
-            i = getText().length();
-        }
-        cursor = i;
-    }
-
-    public void addCharAtCursor(char c)
-    {
-        String currentText = getText();
-
-        int remaining = textField.maxLength() - currentText.length();
-        if (remaining == 0) return;
-        if (!textField.isCharacterAllowed(c)) return;
-        if (cursor > currentText.length()) setCursor(currentText.length());
-        if (cursor < 0) setCursor(0);
-
-        if (currentText.isEmpty())
-        {
-            setText(String.valueOf(c));
-        }
-        else if (cursor == currentText.length())
-        {
-            setText(currentText + c);
-        }
-        else
-        {
-            String before = substring(currentText, 0, cursor);
-            String after = substring(currentText, cursor);
-            setText(before + c + after);
-        }
-        cursor++;
-    }
-
-    public void addStringAtCursor(String s)
-    {
-        for (char c : s.toCharArray())
-        {
-            addCharAtCursor(c);
-        }
-    }
-
-    public void deleteCharsBeforeCursor(int i)
-    {
-        String before, after;
-        if (cursor < 0) cursor = 0;
-        if (i > cursor)
-        {
-            before = "";
-        }
-        else
-        {
-            before = substring(getText(), 0, cursor - i);
-        }
-        after = substring(getText(), cursor);
-        setText(before + after);
-        if (!after.isEmpty())
-        {
-            setCursor(before.length());
-        }
-    }
-
-    public void deleteCharsAfterCursor(int i)
-    {
-        String before, after;
-        if (cursor == getText().length()) return;
-        if (cursor + i > getText().length())
-        {
-            after = "";
-        }
-        else
-        {
-            after = substring(getText(), cursor + i);
-        }
-        before = substring(getText(), 0, cursor);
-        setText(before + after);
-    }
-
-	public int findNextAnchor(int direction) {
-		direction = MathHelper.clamp(direction, -1, 1);
-		if(direction == 0) return cursor;
-		String text = getText();
-		
-		for(int i = cursor + direction; i > 0 && i < text.length(); i += direction) {
-			if(text.charAt(i) != ' ' && Character.isWhitespace(text.charAt(i - 1))) return i;
-		}
-		
-		return direction > 0 ? text.length() : 0;
-	}
-
-    private void stringToClipboard(String string)
-    {
-        try
-        {
-            StringSelection selection = new StringSelection(string);
-            Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
-            clipboard.setContents(selection, selection);
-        }
-        catch (Exception e)
-        {
-            LOGGER.error("Exception while trying to copy text field to clipboard!", e);
-        }
-    }
-
-    private String clipboardToString()
-    {
-        try
-        {
-            Transferable trans = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
-            if (trans != null && trans.isDataFlavorSupported(DataFlavor.stringFlavor))
-            {
-                return (String) trans.getTransferData(DataFlavor.stringFlavor);
-            }
-        }
-        catch (Exception e)
-        {
-            LOGGER.error("Exception while trying to read clipboard!", e);
-        }
-        return null;
-    }
-}
+package net.minecraft.client.gui.text;
+
+import com.mojang.logging.LogUtils;
+import org.lwjgl.input.Keyboard;
+
+import net.minecraft.core.util.helper.MathHelper;
+import org.slf4j.Logger;
+
+import java.awt.*;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+
+public class TextFieldEditor
+{
+    private static final Logger LOGGER = LogUtils.getLogger();
+    public static String substring(String s, int start, int end)
+    {
+        if (start < 0) start = 0;
+        if (end > s.length()) end = s.length();
+        if (start > end) return "";
+
+        return s.substring(start, end);
+    }
+
+    public static String substring(String s, int start)
+    {
+        return substring(s, start, s.length());
+    }
+
+    private final ITextField textField;
+    private int cursor;
+
+    public TextFieldEditor(ITextField textField)
+    {
+        this.textField = textField;
+        this.cursor = textField.getText().length();
+    }
+
+    public int getCursor()
+    {
+        if (cursor < 0)
+        {
+            setCursor(0);
+        }
+        if (cursor > textField.getText().length())
+        {
+            setCursor(textField.getText().length());
+        }
+        return cursor;
+    }
+
+    public String getText()
+    {
+        return textField.getText();
+    }
+
+    public void setText(String s)
+    {
+        if (s.length() > textField.maxLength())
+        {
+            s = substring(s, 0, textField.maxLength());
+        }
+
+        textField.setText(s);
+    }
+
+    public boolean handleInput(int key, char c)
+    {
+        // Handle copy-paste
+        if (Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL))
+        {
+            if (key == Keyboard.KEY_C)
+            {
+                stringToClipboard(getText());
+                return false;
+            }
+            else if (key == Keyboard.KEY_V)
+            {
+                String pasteString = clipboardToString();
+                if (pasteString != null)
+                {
+                    addStringAtCursor(pasteString);
+                }
+                return true;
+            }
+            else if (key == Keyboard.KEY_LEFT)
+            {
+                setCursor(findNextAnchor(-1));
+                return false;
+            }
+            else if (key == Keyboard.KEY_RIGHT)
+            {
+                setCursor(findNextAnchor(1));
+                return false;
+            }
+            else if (key == Keyboard.KEY_BACK)
+            {
+                int next = findNextAnchor(-1);
+                int d = cursor - next;
+                deleteCharsBeforeCursor(d);
+                return true;
+            }
+            else if (key == Keyboard.KEY_DELETE)
+            {
+                int next = findNextAnchor(1);
+                int d = next - cursor;
+                deleteCharsAfterCursor(d);
+                return true;
+            }
+        }
+
+        // Handle home and end
+        if (key == Keyboard.KEY_HOME)
+        {
+            setCursor(0);
+            return false;
+        }
+        if (key == Keyboard.KEY_END)
+        {
+            setCursor(getText().length());
+            return false;
+        }
+
+        // Handle single directionality
+        if (key == Keyboard.KEY_LEFT)
+        {
+            moveCursor(-1);
+            return false;
+        }
+        if (key == Keyboard.KEY_RIGHT)
+        {
+            moveCursor(1);
+            return false;
+        }
+
+        // Handle backspace
+        if (key == Keyboard.KEY_BACK)
+        {
+            deleteCharsBeforeCursor(1);
+            return true;
+        }
+
+        // Handle delete
+        if (key == Keyboard.KEY_DELETE)
+        {
+            deleteCharsAfterCursor(1);
+            return true;
+        }
+
+        addCharAtCursor(c);
+        return true;
+    }
+
+    public void moveCursor(int i)
+    {
+        setCursor(cursor + i);
+    }
+
+    public void setCursor(int i)
+    {
+        if (i <= 0)
+        {
+            i = 0;
+        }
+        if (i > getText().length())
+        {
+            i = getText().length();
+        }
+        cursor = i;
+    }
+
+    public void addCharAtCursor(char c)
+    {
+        String currentText = getText();
+
+        int remaining = textField.maxLength() - currentText.length();
+        if (remaining == 0) return;
+        if (!textField.isCharacterAllowed(c)) return;
+        if (cursor > currentText.length()) setCursor(currentText.length());
+        if (cursor < 0) setCursor(0);
+
+        if (currentText.isEmpty())
+        {
+            setText(String.valueOf(c));
+        }
+        else if (cursor == currentText.length())
+        {
+            setText(currentText + c);
+        }
+        else
+        {
+            String before = substring(currentText, 0, cursor);
+            String after = substring(currentText, cursor);
+            setText(before + c + after);
+        }
+        cursor++;
+    }
+
+    public void addStringAtCursor(String s)
+    {
+        for (char c : s.toCharArray())
+        {
+            addCharAtCursor(c);
+        }
+    }
+
+    public void deleteCharsBeforeCursor(int i)
+    {
+        String before, after;
+        if (cursor < 0) cursor = 0;
+        if (i > cursor)
+        {
+            before = "";
+        }
+        else
+        {
+            before = substring(getText(), 0, cursor - i);
+        }
+        after = substring(getText(), cursor);
+        setText(before + after);
+        if (!after.isEmpty())
+        {
+            setCursor(before.length());
+        }
+    }
+
+    public void deleteCharsAfterCursor(int i)
+    {
+        String before, after;
+        if (cursor == getText().length()) return;
+        if (cursor + i > getText().length())
+        {
+            after = "";
+        }
+        else
+        {
+            after = substring(getText(), cursor + i);
+        }
+        before = substring(getText(), 0, cursor);
+        setText(before + after);
+    }
+
+	public int findNextAnchor(int direction) {
+		direction = MathHelper.clamp(direction, -1, 1);
+		if(direction == 0) return cursor;
+		String text = getText();
+		
+		for(int i = cursor + direction; i > 0 && i < text.length(); i += direction) {
+			if(text.charAt(i) != ' ' && Character.isWhitespace(text.charAt(i - 1))) return i;
+		}
+		
+		return direction > 0 ? text.length() : 0;
+	}
+
+    private void stringToClipboard(String string)
+    {
+        try
+        {
+            StringSelection selection = new StringSelection(string);
+            Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
+            clipboard.setContents(selection, selection);
+        }
+        catch (Exception e)
+        {
+            LOGGER.error("Exception while trying to copy text field to clipboard!", e);
+        }
+    }
+
+    private String clipboardToString()
+    {
+        try
+        {
+            Transferable trans = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null);
+            if (trans != null && trans.isDataFlavorSupported(DataFlavor.stringFlavor))
+            {
+                return (String) trans.getTransferData(DataFlavor.stringFlavor);
+            }
+        }
+        catch (Exception e)
+        {
+            LOGGER.error("Exception while trying to read clipboard!", e);
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/net/minecraft/client/gui/toasts/AchievementToast.java b/game/client/src/main/java/net/minecraft/client/gui/toasts/AchievementToast.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/toasts/AchievementToast.java
rename to game/client/src/main/java/net/minecraft/client/gui/toasts/AchievementToast.java
diff --git a/src/main/java/net/minecraft/client/gui/toasts/GuiElementToastsHud.java b/game/client/src/main/java/net/minecraft/client/gui/toasts/GuiElementToastsHud.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/toasts/GuiElementToastsHud.java
rename to game/client/src/main/java/net/minecraft/client/gui/toasts/GuiElementToastsHud.java
diff --git a/src/main/java/net/minecraft/client/gui/toasts/IToastable.java b/game/client/src/main/java/net/minecraft/client/gui/toasts/IToastable.java
similarity index 100%
rename from src/main/java/net/minecraft/client/gui/toasts/IToastable.java
rename to game/client/src/main/java/net/minecraft/client/gui/toasts/IToastable.java
diff --git a/src/main/java/net/minecraft/client/holiday/Holiday.java b/game/client/src/main/java/net/minecraft/client/holiday/Holiday.java
similarity index 100%
rename from src/main/java/net/minecraft/client/holiday/Holiday.java
rename to game/client/src/main/java/net/minecraft/client/holiday/Holiday.java
diff --git a/src/main/java/net/minecraft/client/holiday/Holidays.java b/game/client/src/main/java/net/minecraft/client/holiday/Holidays.java
similarity index 100%
rename from src/main/java/net/minecraft/client/holiday/Holidays.java
rename to game/client/src/main/java/net/minecraft/client/holiday/Holidays.java
diff --git a/src/main/java/net/minecraft/client/input/InputDevice.java b/game/client/src/main/java/net/minecraft/client/input/InputDevice.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/InputDevice.java
rename to game/client/src/main/java/net/minecraft/client/input/InputDevice.java
diff --git a/src/main/java/net/minecraft/client/input/InputDeviceKeyboard.java b/game/client/src/main/java/net/minecraft/client/input/InputDeviceKeyboard.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/InputDeviceKeyboard.java
rename to game/client/src/main/java/net/minecraft/client/input/InputDeviceKeyboard.java
diff --git a/src/main/java/net/minecraft/client/input/InputDeviceMouse.java b/game/client/src/main/java/net/minecraft/client/input/InputDeviceMouse.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/InputDeviceMouse.java
rename to game/client/src/main/java/net/minecraft/client/input/InputDeviceMouse.java
diff --git a/src/main/java/net/minecraft/client/input/InputHandler.java b/game/client/src/main/java/net/minecraft/client/input/InputHandler.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/InputHandler.java
rename to game/client/src/main/java/net/minecraft/client/input/InputHandler.java
diff --git a/src/main/java/net/minecraft/client/input/InputType.java b/game/client/src/main/java/net/minecraft/client/input/InputType.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/InputType.java
rename to game/client/src/main/java/net/minecraft/client/input/InputType.java
diff --git a/src/main/java/net/minecraft/client/input/MouseFilter.java b/game/client/src/main/java/net/minecraft/client/input/MouseFilter.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/MouseFilter.java
rename to game/client/src/main/java/net/minecraft/client/input/MouseFilter.java
diff --git a/src/main/java/net/minecraft/client/input/MouseInput.java b/game/client/src/main/java/net/minecraft/client/input/MouseInput.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/MouseInput.java
rename to game/client/src/main/java/net/minecraft/client/input/MouseInput.java
diff --git a/src/main/java/net/minecraft/client/input/PlayerInput.java b/game/client/src/main/java/net/minecraft/client/input/PlayerInput.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/PlayerInput.java
rename to game/client/src/main/java/net/minecraft/client/input/PlayerInput.java
diff --git a/src/main/java/net/minecraft/client/input/controller/Button.java b/game/client/src/main/java/net/minecraft/client/input/controller/Button.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/controller/Button.java
rename to game/client/src/main/java/net/minecraft/client/input/controller/Button.java
diff --git a/src/main/java/net/minecraft/client/input/controller/ControllerInput.java b/game/client/src/main/java/net/minecraft/client/input/controller/ControllerInput.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/controller/ControllerInput.java
rename to game/client/src/main/java/net/minecraft/client/input/controller/ControllerInput.java
diff --git a/src/main/java/net/minecraft/client/input/controller/ControllerInventoryHandler.java b/game/client/src/main/java/net/minecraft/client/input/controller/ControllerInventoryHandler.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/controller/ControllerInventoryHandler.java
rename to game/client/src/main/java/net/minecraft/client/input/controller/ControllerInventoryHandler.java
diff --git a/src/main/java/net/minecraft/client/input/controller/ControllerType.java b/game/client/src/main/java/net/minecraft/client/input/controller/ControllerType.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/controller/ControllerType.java
rename to game/client/src/main/java/net/minecraft/client/input/controller/ControllerType.java
diff --git a/src/main/java/net/minecraft/client/input/controller/ControllerTypeDatabase.java b/game/client/src/main/java/net/minecraft/client/input/controller/ControllerTypeDatabase.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/controller/ControllerTypeDatabase.java
rename to game/client/src/main/java/net/minecraft/client/input/controller/ControllerTypeDatabase.java
diff --git a/src/main/java/net/minecraft/client/input/controller/DigitalPad.java b/game/client/src/main/java/net/minecraft/client/input/controller/DigitalPad.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/controller/DigitalPad.java
rename to game/client/src/main/java/net/minecraft/client/input/controller/DigitalPad.java
diff --git a/src/main/java/net/minecraft/client/input/controller/IButton.java b/game/client/src/main/java/net/minecraft/client/input/controller/IButton.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/controller/IButton.java
rename to game/client/src/main/java/net/minecraft/client/input/controller/IButton.java
diff --git a/src/main/java/net/minecraft/client/input/controller/IButtonListener.java b/game/client/src/main/java/net/minecraft/client/input/controller/IButtonListener.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/controller/IButtonListener.java
rename to game/client/src/main/java/net/minecraft/client/input/controller/IButtonListener.java
diff --git a/src/main/java/net/minecraft/client/input/controller/IJoystickListener.java b/game/client/src/main/java/net/minecraft/client/input/controller/IJoystickListener.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/controller/IJoystickListener.java
rename to game/client/src/main/java/net/minecraft/client/input/controller/IJoystickListener.java
diff --git a/src/main/java/net/minecraft/client/input/controller/Joystick.java b/game/client/src/main/java/net/minecraft/client/input/controller/Joystick.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/controller/Joystick.java
rename to game/client/src/main/java/net/minecraft/client/input/controller/Joystick.java
diff --git a/src/main/java/net/minecraft/client/input/glfw/FakeGamepad.java b/game/client/src/main/java/net/minecraft/client/input/glfw/FakeGamepad.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/glfw/FakeGamepad.java
rename to game/client/src/main/java/net/minecraft/client/input/glfw/FakeGamepad.java
diff --git a/src/main/java/net/minecraft/client/input/glfw/GlfwGamepad.java b/game/client/src/main/java/net/minecraft/client/input/glfw/GlfwGamepad.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/glfw/GlfwGamepad.java
rename to game/client/src/main/java/net/minecraft/client/input/glfw/GlfwGamepad.java
diff --git a/src/main/java/net/minecraft/client/input/glfw/GlfwJoystick.java b/game/client/src/main/java/net/minecraft/client/input/glfw/GlfwJoystick.java
similarity index 100%
rename from src/main/java/net/minecraft/client/input/glfw/GlfwJoystick.java
rename to game/client/src/main/java/net/minecraft/client/input/glfw/GlfwJoystick.java
diff --git a/src/main/java/net/minecraft/client/net/command/ClientCommandSource.java b/game/client/src/main/java/net/minecraft/client/net/command/ClientCommandSource.java
similarity index 100%
rename from src/main/java/net/minecraft/client/net/command/ClientCommandSource.java
rename to game/client/src/main/java/net/minecraft/client/net/command/ClientCommandSource.java
diff --git a/src/main/java/net/minecraft/client/net/handler/PacketHandlerClient.java b/game/client/src/main/java/net/minecraft/client/net/handler/PacketHandlerClient.java
similarity index 89%
rename from src/main/java/net/minecraft/client/net/handler/PacketHandlerClient.java
rename to game/client/src/main/java/net/minecraft/client/net/handler/PacketHandlerClient.java
index bd0ddce0e..b047b70bb 100644
--- a/src/main/java/net/minecraft/client/net/handler/PacketHandlerClient.java
+++ b/game/client/src/main/java/net/minecraft/client/net/handler/PacketHandlerClient.java
@@ -153,7 +153,7 @@ public class PacketHandlerClient extends PacketHandler
 
 
     @Override
-    public void handleLogin(LoginPacket loginPacket)
+    public void handleLogin(PacketLogin loginPacket)
     {
         mc.playerController = new PlayerControllerMP(mc, this);
         mc.statsCounter.add(StatList.joinMultiplayerStat, 1);
@@ -168,7 +168,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handlePickupSpawn(AddItemEntityPacket addItemEntityPacket)
+    public void handlePickupSpawn(PacketAddItemEntity addItemEntityPacket)
     {
         double x = addItemEntityPacket.xPosition / 32D;
         double y = addItemEntityPacket.yPosition / 32D;
@@ -185,7 +185,7 @@ public class PacketHandlerClient extends PacketHandler
 
 
     @Override
-    public void handleVehicleSpawn(AddEntityPacket addEntityPacket) {
+    public void handleVehicleSpawn(PacketAddEntity addEntityPacket) {
         if (!NetEntityHandler.hasType(addEntityPacket.type)){ return; }
         double xPosition = ((double) addEntityPacket.xPosition) / 32D;
         double yPosition = ((double) addEntityPacket.yPosition) / 32D;
@@ -215,13 +215,13 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleWeather(WeatherEffectPacket weatherEffectPacket)
+    public void handleWeather(PacketWeatherEffect weatherEffectPacket)
     {
         double x = (double) weatherEffectPacket.x / 32D;
         double y = (double) weatherEffectPacket.y / 32D;
         double z = (double) weatherEffectPacket.z / 32D;
         Entity weatherEntity = null;
-        if (weatherEffectPacket.effectId == WeatherEffectPacket.EFFECT_LIGHTNING) {
+        if (weatherEffectPacket.effectId == PacketWeatherEffect.EFFECT_LIGHTNING) {
             weatherEntity = new EntityLightning(worldClientMP, x, y, z);
         }
         if (weatherEntity != null)
@@ -237,7 +237,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleWeatherStatus(WeatherStatusPacket packet)
+    public void handleWeatherStatus(PacketWeatherStatus packet)
     {
         if (worldClientMP.dimension.id != packet.dimId) return;
         Weather currentWeather = packet.id == -1 ? null : Weathers.WEATHERS[packet.id];
@@ -246,7 +246,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleEntityPainting(AddPaintingPacket addPaintingPacket)
+    public void handleEntityPainting(PacketAddPainting addPaintingPacket)
     {
         Entity entity = worldClientMP.getEntityFromId(addPaintingPacket.entityId);
         if (entity instanceof EntityPainting){
@@ -272,7 +272,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleEntityVelocity(SetEntityMotionPacket setEntityMotionPacket)
+    public void handleEntityVelocity(PacketSetEntityMotion setEntityMotionPacket)
     {
         Entity entity = getEntityByID(setEntityMotionPacket.entityId);
         if (entity != null) {
@@ -281,7 +281,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleEntityMetadata(SetEntityDataPacket setEntityDataPacket)
+    public void handleEntityMetadata(PacketSetEntityData setEntityDataPacket)
     {
         Entity entity = getEntityByID(setEntityDataPacket.entityId);
         if (entity != null && setEntityDataPacket.getUnpackedData() != null)
@@ -291,7 +291,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleNamedEntitySpawn(AddPlayerPacket addPlayerPacket)
+    public void handleNamedEntitySpawn(PacketAddPlayer addPlayerPacket)
     {
         double d = (double) addPlayerPacket.xPosition / 32D;
         double d1 = (double) addPlayerPacket.yPosition / 32D;
@@ -320,7 +320,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleEntityTeleport(TeleportEntityPacket teleportEntityPacket)
+    public void handleEntityTeleport(PacketTeleportEntity teleportEntityPacket)
     {
         Entity entity = getEntityByID(teleportEntityPacket.id);
         if (entity != null) {
@@ -337,7 +337,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleEntity(MoveEntityPacket moveEntityPacket)
+    public void handleEntity(PacketMoveEntity moveEntityPacket)
     {
         Entity entity = getEntityByID(moveEntityPacket.id);
         if (entity != null) {
@@ -354,7 +354,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleEntityTagData(EntityTagDataPacket entityTagDataPacket) {
+    public void handleEntityTagData(PacketEntityTagData entityTagDataPacket) {
         Entity entity = getEntityByID(entityTagDataPacket.entityId);
         if (entity != null) {
             entity.readAdditionalSaveData(entityTagDataPacket.tag);
@@ -362,7 +362,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleSetMobSpawner(SetMobSpawnerPacket setMobSpawnerPacket)
+    public void handleSetMobSpawner(PacketSetMobSpawner setMobSpawnerPacket)
     {
         if (mc.currentWorld.isBlockLoaded(setMobSpawnerPacket.xPosition, setMobSpawnerPacket.yPosition, setMobSpawnerPacket.zPosition))
         {
@@ -378,19 +378,19 @@ public class PacketHandlerClient extends PacketHandler
         }
     }
     @Override
-    public void handleSetHotbarOffset(SetHotbarOffsetPacket setHotbarOffsetPacket)
+    public void handleSetHotbarOffset(PacketSetHotbarOffset setHotbarOffsetPacket)
     {
         mc.thePlayer.inventory.setHotbarOffset(setHotbarOffsetPacket.hotbarOffset, true);
     }
 
     @Override
-    public void handleDestroyEntity(RemoveEntityPacket removeEntityPacket)
+    public void handleDestroyEntity(PacketRemoveEntity removeEntityPacket)
     {
         worldClientMP.removeEntityFromWorld(removeEntityPacket.entityId);
     }
 
     @Override
-    public void handleFlying(MovePlayerPacket movePlayerPacket)
+    public void handleFlying(PacketMovePlayer movePlayerPacket)
     {
         PlayerLocal entityplayersp = mc.thePlayer;
         double d = ((Player) (entityplayersp)).x;
@@ -427,13 +427,13 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handlePreChunk(ChunkVisibilityPacket chunkVisibilityPacket)
+    public void handlePreChunk(PacketChunkVisibility chunkVisibilityPacket)
     {
         worldClientMP.doPreChunk(chunkVisibilityPacket.chunkX, chunkVisibilityPacket.chunkZ, chunkVisibilityPacket.playerAdded);
     }
 
     @Override
-    public void handleMultiBlockChange(ChunkBlocksUpdatePacket chunkBlocksUpdatePacket)
+    public void handleMultiBlockChange(PacketChunkBlocksUpdate chunkBlocksUpdatePacket)
     {
         int xBase = chunkBlocksUpdatePacket.xChunk * 16;
         int zBase = chunkBlocksUpdatePacket.zChunk * 16;
@@ -453,20 +453,20 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleMapChunk(BlockRegionUpdatePacket blockRegionUpdatePacket)
+    public void handleMapChunk(PacketBlockRegionUpdate blockRegionUpdatePacket)
     {
         worldClientMP.removePositionTypesInBounds(blockRegionUpdatePacket.xPosition, blockRegionUpdatePacket.yPosition, blockRegionUpdatePacket.zPosition, (blockRegionUpdatePacket.xPosition + blockRegionUpdatePacket.xSize) - 1, (blockRegionUpdatePacket.yPosition + blockRegionUpdatePacket.ySize) - 1, (blockRegionUpdatePacket.zPosition + blockRegionUpdatePacket.zSize) - 1);
         worldClientMP.setChunkData(blockRegionUpdatePacket.xPosition, blockRegionUpdatePacket.yPosition, blockRegionUpdatePacket.zPosition, blockRegionUpdatePacket.xSize, blockRegionUpdatePacket.ySize, blockRegionUpdatePacket.zSize, blockRegionUpdatePacket.chunk);
     }
 
     @Override
-    public void handleBlockUpdate(BlockUpdatePacket blockUpdatePacket)
+    public void handleBlockUpdate(PacketBlockUpdate blockUpdatePacket)
     {
         worldClientMP.blockChange(blockUpdatePacket.xPosition, blockUpdatePacket.yPosition, blockUpdatePacket.zPosition, blockUpdatePacket.blockId, blockUpdatePacket.metadata);
     }
 
     @Override
-    public void handleKickDisconnect(DisconnectPacket packet255KickdisconnectPacket)
+    public void handleKickDisconnect(PacketDisconnect packet255KickdisconnectPacket)
     {
         netManager.networkShutdown("disconnect.kicked", new Object[0]);
         disconnected = true;
@@ -512,7 +512,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleCollect(TakeItemEntityPacket takeItemEntityPacket)
+    public void handleCollect(PacketTakeItemEntity takeItemEntityPacket)
     {
         Entity item = getEntityByID(takeItemEntityPacket.collectedEntityId);
         Entity collector = getEntityByID(takeItemEntityPacket.collectorEntityId);
@@ -531,13 +531,13 @@ public class PacketHandlerClient extends PacketHandler
     }
 
 	@Override
-	public void handleChat(ChatPacket packet) {
+	public void handleChat(PacketChat packet) {
 		String message;
 		if(packet.encrypted) {
 			try {
 				message = AES.decrypt(packet.message, AES.clientKeyChain);
 			}catch (Exception e) {
-				throw new RuntimeException(ChatPacket.ENCRYPTION_ERROR_MESSAGE, e);
+				throw new RuntimeException(PacketChat.ENCRYPTION_ERROR_MESSAGE, e);
 			}
 		}else {
 			message = packet.message;
@@ -551,18 +551,18 @@ public class PacketHandlerClient extends PacketHandler
 		}
 	}
 
-    public void handlePlayerJoin(ChatPacket chatPacket)
+    public void handlePlayerJoin(PacketChat chatPacket)
     {
         mc.hudIngame.addChatMessage(chatPacket.message);
     }
 
-    public void handlePlayerLeave(ChatPacket chatPacket)
+    public void handlePlayerLeave(PacketChat chatPacket)
     {
         mc.hudIngame.addChatMessage(chatPacket.message);
     }
 
     @Override
-    public void handleAnimation(AnimatePacket animatePacket)
+    public void handleAnimation(PacketAnimate animatePacket)
     {
         Entity entity = getEntityByID(animatePacket.entityId);
         if (entity == null)
@@ -591,7 +591,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleBoatControl(BoatControlPacket boatControlPacket)
+    public void handleBoatControl(PacketBoatControl boatControlPacket)
     {
         Entity e = worldClientMP.getEntityFromId(boatControlPacket.entityId);
         if (e instanceof EntityBoat) {
@@ -600,7 +600,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleSleep(SleepPacket sleepPacket)
+    public void handleSleep(PacketSleep sleepPacket)
     {
         Entity entity = getEntityByID(sleepPacket.entityID);
         if (entity == null)
@@ -615,14 +615,14 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleHandshake(PreLoginPacket preLoginPacket)
+    public void handleHandshake(PacketPreLogin preLoginPacket)
     {
         if (preLoginPacket.username.equals("-"))
         {
             try
             {
                 RSA.RSAKeyChain = RSA.generateKeyPair();
-                addToSendQueue(new LoginPacket(mc.session.username, mc.session.uuid, Global.MP_PROTOCOL_VERSION, RSA.getPublicKey(RSA.RSAKeyChain.getPublic())));
+                addToSendQueue(new PacketLogin(mc.session.username, mc.session.uuid, Global.MP_PROTOCOL_VERSION, RSA.getPublicKey(RSA.RSAKeyChain.getPublic())));
             }
             catch (Exception e)
             {
@@ -642,7 +642,7 @@ public class PacketHandlerClient extends PacketHandler
                     try
                     {
                         RSA.RSAKeyChain = RSA.generateKeyPair();
-                        addToSendQueue(new LoginPacket(mc.session.username, mc.session.uuid, Global.MP_PROTOCOL_VERSION, RSA.getPublicKey(RSA.RSAKeyChain.getPublic())));
+                        addToSendQueue(new PacketLogin(mc.session.username, mc.session.uuid, Global.MP_PROTOCOL_VERSION, RSA.getPublicKey(RSA.RSAKeyChain.getPublic())));
                     }
                     catch (Exception e)
                     {
@@ -667,7 +667,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleSendKey(AESSendKeyPacket AESSendKeyPacket)
+    public void handleSendKey(PacketAESSendKey AESSendKeyPacket)
     {
         try
         {
@@ -680,7 +680,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handlePlayerList(PlayerListPacket playerListPacket)
+    public void handlePlayerList(PacketPlayerList playerListPacket)
     {
         playerList.clear();
         String[] players = playerListPacket.players;
@@ -699,7 +699,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleMobSpawn(AddMobPacket addMobPacket)
+    public void handleMobSpawn(PacketAddMob addMobPacket)
     {
         double d = (double) addMobPacket.x / 32D;
         double d1 = (double) addMobPacket.y / 32D;
@@ -724,20 +724,20 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleUpdateTime(SetTimePacket setTimePacket)
+    public void handleUpdateTime(PacketSetTime setTimePacket)
     {
         mc.currentWorld.setWorldTime(setTimePacket.time);
     }
 
     @Override
-    public void handleSpawnPosition(SetSpawnPositionPacket setSpawnPositionPacket)
+    public void handleSpawnPosition(PacketSetSpawnPosition setSpawnPositionPacket)
     {
         mc.thePlayer.setPlayerSpawnCoordinate(new ChunkCoordinates(setSpawnPositionPacket.x, setSpawnPositionPacket.y, setSpawnPositionPacket.z));
         mc.currentWorld.getLevelData().setSpawn(setSpawnPositionPacket.x, setSpawnPositionPacket.y, setSpawnPositionPacket.z);
     }
 
     @Override
-    public void handleAttachEntity(SetRidingPacket setRidingPacket)
+    public void handleAttachEntity(PacketSetRiding setRidingPacket)
     {
         Entity passenger = getEntityByID(setRidingPacket.passengerId);
         IVehicle vehicle;
@@ -756,7 +756,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleEntityStatus(EnitityEventPacket enitityEventPacket)
+    public void handleEntityStatus(PacketEntityEvent enitityEventPacket)
     {
         Entity entity = getEntityByID(enitityEventPacket.entityId);
         if (entity != null)
@@ -778,13 +778,13 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleUpdateHealth(SetHealthPacket setHealthPacket)
+    public void handleUpdateHealth(PacketSetHealth setHealthPacket)
     {
         mc.thePlayer.setHealth(setHealthPacket.healthMP);
     }
 
     @Override
-    public void handleUpdatePlayerProfile(UpdatePlayerProfilePacket profilePacket)
+    public void handleUpdatePlayerProfile(PacketUpdatePlayerProfile profilePacket)
     {
         PlayerProfile playerProfile = new PlayerProfile(profilePacket.username, profilePacket.nickname, profilePacket.uuid, profilePacket.score, profilePacket.chatColor, profilePacket.isOperator);
         if (playerProfile.uuid.equals(mc.thePlayer.uuid))
@@ -810,7 +810,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleRespawn(RespawnPacket respawnPacket)
+    public void handleRespawn(PacketRespawn respawnPacket)
     {
         if (respawnPacket.respawnDimensionId != mc.thePlayer.dimension)
         {
@@ -825,7 +825,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleExplosion(ExplosionPacket explosionPacket)
+    public void handleExplosion(PacketExplosion explosionPacket)
     {
         Explosion explosion;
         if (explosionPacket.isCannonball)
@@ -842,50 +842,50 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleOpenWindow(ContainerOpenPacket containerOpenPacket)
+    public void handleOpenWindow(PacketContainerOpen containerOpenPacket)
     {
         switch (containerOpenPacket.inventoryType) {
-            case ContainerOpenPacket.TYPE_GENERIC_CONTAINER: {
+            case PacketContainerOpen.TYPE_GENERIC_CONTAINER: {
                 ContainerSimple simpleContainer = new ContainerSimple(containerOpenPacket.windowTitle, containerOpenPacket.slotsCount);
                 mc.thePlayer.displayContainerScreen(simpleContainer);
                 mc.thePlayer.craftingInventory.containerId = containerOpenPacket.windowId;
                 break;
             }
-            case ContainerOpenPacket.TYPE_FURNACE: {
+            case PacketContainerOpen.TYPE_FURNACE: {
                 TileEntityFurnace tileEntityFurnace = new TileEntityFurnace();
                 mc.thePlayer.displayFurnaceScreen(tileEntityFurnace);
                 mc.thePlayer.craftingInventory.containerId = containerOpenPacket.windowId;
                 break;
             }
-            case ContainerOpenPacket.TYPE_DISPENSER: {
+            case PacketContainerOpen.TYPE_DISPENSER: {
                 TileEntityDispenser tileEntityDispenser = new TileEntityDispenser();
                 mc.thePlayer.displayDispenserScreen(tileEntityDispenser);
                 mc.thePlayer.craftingInventory.containerId = containerOpenPacket.windowId;
                 break;
             }
-            case ContainerOpenPacket.TYPE_ACTIVATOR: {
+            case PacketContainerOpen.TYPE_ACTIVATOR: {
                 TileEntityActivator tileEntityActivator = new TileEntityActivator();
                 mc.thePlayer.displayActivatorScreen(tileEntityActivator);
                 mc.thePlayer.craftingInventory.containerId = containerOpenPacket.windowId;
                 break;
             }
-            case ContainerOpenPacket.TYPE_BLAST_FURNACE: {
+            case PacketContainerOpen.TYPE_BLAST_FURNACE: {
                 TileEntityFurnaceBlastFurnace tileEntityFurnaceBlast = new TileEntityFurnaceBlastFurnace();
                 mc.thePlayer.displayFurnaceScreen(tileEntityFurnaceBlast);
                 mc.thePlayer.craftingInventory.containerId = containerOpenPacket.windowId;
                 break;
             }
-            case ContainerOpenPacket.TYPE_TROMMEL: {
+            case PacketContainerOpen.TYPE_TROMMEL: {
                 TileEntityTrommel tileEntityTrommel = new TileEntityTrommel();
                 mc.thePlayer.displayTrommelScreen(tileEntityTrommel);
                 mc.thePlayer.craftingInventory.containerId = containerOpenPacket.windowId;
                 break;
             }
-            case ContainerOpenPacket.TYPE_PAINTING: {
+            case PacketContainerOpen.TYPE_PAINTING: {
                 mc.thePlayer.displayPaintingPickerScreen();
                 break;
             }
-            case ContainerOpenPacket.TYPE_CRAFTING: {
+            case PacketContainerOpen.TYPE_CRAFTING: {
                 PlayerLocal playerLocal = mc.thePlayer;
                 mc.thePlayer.displayWorkbenchScreen(MathHelper.floor(playerLocal.x), MathHelper.floor(playerLocal.y), MathHelper.floor(playerLocal.z));
                 mc.thePlayer.craftingInventory.containerId = containerOpenPacket.windowId;
@@ -898,7 +898,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleOpenFlagWindow(FlagOpenPacket flagOpenPacket)
+    public void handleOpenFlagWindow(PacketFlagOpen flagOpenPacket)
     {
         TileEntity tileEntity = worldClientMP.getBlockEntity(flagOpenPacket.x, flagOpenPacket.y, flagOpenPacket.z);
         if (tileEntity instanceof TileEntityFlag)
@@ -910,13 +910,13 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handlePhotoMode(PhotoModePacket photoModePacket)
+    public void handlePhotoMode(PacketPhotoMode photoModePacket)
     {
         ScreenPause.photoModeDisabled = photoModePacket.disabled;
     }
 
     @Override
-    public void handleSetSlot(ContainerSetSlotPacket containerSetslotPacket)
+    public void handleSetSlot(PacketContainerSetSlot containerSetslotPacket)
     {
         if (containerSetslotPacket.windowId == -1)
         {
@@ -938,7 +938,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleTransaction(ContainerAckPacket containerAckPacket)
+    public void handleTransaction(PacketContainerAck containerAckPacket)
     {
         MenuAbstract container = null;
         if (containerAckPacket.windowId == 0)
@@ -958,13 +958,13 @@ public class PacketHandlerClient extends PacketHandler
             else
             {
                 container.rollbackToBackup(containerAckPacket.shortWindowId);
-                addToSendQueue(new ContainerAckPacket(containerAckPacket.windowId, containerAckPacket.shortWindowId, true));
+                addToSendQueue(new PacketContainerAck(containerAckPacket.windowId, containerAckPacket.shortWindowId, true));
             }
         }
     }
 
     @Override
-    public void handleWindowItems(ContainerSetContentPacket containerSetContentPacket)
+    public void handleWindowItems(PacketContainerSetContent containerSetContentPacket)
     {
         if (containerSetContentPacket.windowId == 0)
         {
@@ -977,7 +977,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleUpdateProgressbar(ContainerSetDataPacket containerSetDataPacket)
+    public void handleUpdateProgressbar(PacketContainerSetData containerSetDataPacket)
     {
         handleInvalidPacket(containerSetDataPacket);
         if (mc.thePlayer.craftingInventory != null && mc.thePlayer.craftingInventory.containerId == containerSetDataPacket.windowId)
@@ -987,7 +987,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handlePlayerInventory(SetEquippedItemPacket setEquippedItemPacket)
+    public void handlePlayerInventory(PacketSetEquippedItem setEquippedItemPacket)
     {
         Entity entity = getEntityByID(setEquippedItemPacket.entityID);
         if (entity != null)
@@ -997,7 +997,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handlePlayerHeldObject(SetHeldObjectPacket setHeldObjectPacket) {
+    public void handlePlayerHeldObject(PacketSetHeldObject setHeldObjectPacket) {
         Entity entity = getEntityByID(setHeldObjectPacket.entityID);
         if (entity != null) {
             entity.setHeldObject(setHeldObjectPacket.objectTag == null ? null : ICarriable.createAndLoadCarriable(entity, setHeldObjectPacket.objectTag));
@@ -1005,29 +1005,29 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleCloseWindow(ContainerClosePacket containerClosePacket)
+    public void handleCloseWindow(PacketContainerClose containerClosePacket)
     {
         mc.thePlayer.closeScreen();
     }
 
     @Override
-    public void handleBlockEvent(BlockEventPacket blockEventPacket)
+    public void handleBlockEvent(PacketBlockEvent blockEventPacket)
     {
         mc.currentWorld.triggerEvent(blockEventPacket.xLocation, blockEventPacket.yLocation, blockEventPacket.zLocation, blockEventPacket.index, blockEventPacket.data);
     }
 
     @Override
-    public void handleBed(BedMessagePacket bedMessagePacket)
+    public void handleBed(PacketBedMessage bedMessagePacket)
     {
         int state = bedMessagePacket.bedState;
-        if (state >= 0 && state < BedMessagePacket.BED_MESSAGE_KEYS.length && BedMessagePacket.BED_MESSAGE_KEYS[state] != null)
+        if (state >= 0 && state < PacketBedMessage.BED_MESSAGE_KEYS.length && PacketBedMessage.BED_MESSAGE_KEYS[state] != null)
         {
-            mc.thePlayer.sendTranslatedChatMessage(BedMessagePacket.BED_MESSAGE_KEYS[state]);
+            mc.thePlayer.sendTranslatedChatMessage(PacketBedMessage.BED_MESSAGE_KEYS[state]);
         }
     }
 
     @Override
-    public void handleMapData(MapDataPacket mapdataPacket)
+    public void handleMapData(PacketMapData mapdataPacket)
     {
         if (mapdataPacket.itemId == Items.MAP.id)
         {
@@ -1040,13 +1040,13 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handlePlaySoundEffect(PlaySoundEffectPacket playSoundEffectPacket)
+    public void handlePlaySoundEffect(PacketPlaySoundEffect playSoundEffectPacket)
     {
         mc.currentWorld.playBlockEvent(playSoundEffectPacket.soundID, playSoundEffectPacket.x, playSoundEffectPacket.y, playSoundEffectPacket.z, playSoundEffectPacket.data);
     }
 
 	@Override
-	public void handlePlaySoundDirectly(PlaySoundEffectDirectPacket packet) {
+	public void handlePlaySoundDirectly(PacketPlaySoundEffectDirect packet) {
 		String soundPath = SoundTypes.getSoundById(packet.soundId);
 		if(soundPath == null) {
 			return;
@@ -1055,7 +1055,7 @@ public class PacketHandlerClient extends PacketHandler
 	}
     
     @Override
-    public void handleSpawnParticle(AddParticlePacket addParticlePacket)
+    public void handleSpawnParticle(PacketAddParticle addParticlePacket)
     {
         if (addParticlePacket.isGroup){
             for (int i = 0; i < addParticlePacket.amount; i++) {
@@ -1084,13 +1084,13 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleStatistic(StatisticPacket statisticPacket)
+    public void handleStatistic(PacketStatistic statisticPacket)
     {
         mc.thePlayer.addStat(StatList.getStat(statisticPacket.statID), statisticPacket.valueChange);
     }
 
     @Override
-    public void handleEntityPlayerGamemode(PlayerGamemodePacket packet)
+    public void handleEntityPlayerGamemode(PacketPlayerGamemode packet)
     {
         Entity entity = getEntityByID(packet.entityId);
         if (entity instanceof Player){
@@ -1099,7 +1099,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleEntityNickname(EntityNicknamePacket entityNicknamePacket)
+    public void handleEntityNickname(PacketEntityNickname entityNicknamePacket)
     {
         Entity entity = getEntityByID(entityNicknamePacket.entityId);
 
@@ -1116,12 +1116,12 @@ public class PacketHandlerClient extends PacketHandler
     }
     
     @Override
-    public void handleBlockItemSwitch(SetCarriedItemPacket setCarriedItemPacket) {
+    public void handleBlockItemSwitch(PacketSetCarriedItem setCarriedItemPacket) {
         mc.thePlayer.inventory.setCurrentItemIndex(setCarriedItemPacket.id, true);
     }
 
     @Override
-    public void handleTileEntityData(BlockEntityDataPacket blockEntityDataPacket)
+    public void handleTileEntityData(PacketBlockEntityData blockEntityDataPacket)
     {
         Class<?> clazz = TileEntityDispatcher.getClassFromID(blockEntityDataPacket.tag.getString("id"));
         if (clazz == null) return;
@@ -1142,7 +1142,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleGameRule(GameRulePacket packet) {
+    public void handleGameRule(PacketGameRule packet) {
         LevelData levelData = mc.currentWorld.getLevelData();
         if (packet.getGameRules() != null) {
             levelData.getGameRules().setValues(packet.getGameRules());
@@ -1150,7 +1150,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleSyncedRecipe(RecipeSyncPacket recipeSyncPacket) {
+    public void handleSyncedRecipe(PacketRecipeSync recipeSyncPacket) {
         if(Registries.RECIPES.getAllSerializableRecipes().isEmpty()){
             LOGGER.info("Receiving {} recipes from server..", recipeSyncPacket.maxRecipes);
         }
@@ -1168,16 +1168,16 @@ public class PacketHandlerClient extends PacketHandler
     }
     
     @Override
-    public void handleIds(SyncIDsPacket syncIDsPacket) {
-        if (syncIDsPacket.destinationId == SyncIDsPacket.DESTINATION_SOUND_IDS) {
+    public void handleIds(PacketSyncIDs syncIDsPacket) {
+        if (syncIDsPacket.destinationId == PacketSyncIDs.DESTINATION_SOUND_IDS) {
             SoundTypes.setSoundIds(syncIDsPacket.mapping);
-        } else if (syncIDsPacket.destinationId == SyncIDsPacket.DESTINATION_ENTITY_IDS) {
+        } else if (syncIDsPacket.destinationId == PacketSyncIDs.DESTINATION_ENTITY_IDS) {
             EntityDispatcher.setNumericIds(syncIDsPacket.mapping);
         }
     }
     
     @Override
-    public void handleCustomPayload(CustomPayloadPacket customPayloadPacket) {
+    public void handleCustomPayload(PacketCustomPayload customPayloadPacket) {
         if("BTA|RainbowStart".equals(customPayloadPacket.channel)) {
 //            System.out.printf("b0:%s b1:%s b2:%s b3:%s\n", packet.data[0], packet.data[1], packet.data[2], packet.data[3]);
             int rainbowTicks = Byte.toUnsignedInt(customPayloadPacket.data[0]) << 24 | Byte.toUnsignedInt(customPayloadPacket.data[1]) << 16 | Byte.toUnsignedInt(customPayloadPacket.data[2]) << 8 | Byte.toUnsignedInt(customPayloadPacket.data[3]);
@@ -1187,7 +1187,7 @@ public class PacketHandlerClient extends PacketHandler
     }
 
     @Override
-    public void handleCommandManagerPacket(CommandManagerPacket commandManagerPacket) {
+    public void handleCommandManagerPacket(PacketCommandManager commandManagerPacket) {
         GuiElementChatSuggestions.serverSuggestions = commandManagerPacket.suggestions;
     }
 }
diff --git a/src/main/java/net/minecraft/client/net/handler/PingPacketHandler.java b/game/client/src/main/java/net/minecraft/client/net/handler/PingPacketHandler.java
similarity index 90%
rename from src/main/java/net/minecraft/client/net/handler/PingPacketHandler.java
rename to game/client/src/main/java/net/minecraft/client/net/handler/PingPacketHandler.java
index 203c3464d..03db008f3 100644
--- a/src/main/java/net/minecraft/client/net/handler/PingPacketHandler.java
+++ b/game/client/src/main/java/net/minecraft/client/net/handler/PingPacketHandler.java
@@ -5,9 +5,9 @@ import net.minecraft.core.net.NetworkManager;
 import net.minecraft.core.net.ServerAddress;
 import net.minecraft.core.net.ServerData;
 import net.minecraft.core.net.handler.PacketHandler;
-import net.minecraft.core.net.packet.DisconnectPacket;
+import net.minecraft.core.net.packet.PacketDisconnect;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.PingHandshakePacket;
+import net.minecraft.core.net.packet.PacketPingHandshake;
 
 import java.io.IOException;
 import java.net.InetAddress;
@@ -52,7 +52,7 @@ public class PingPacketHandler
     }
 
     @Override
-    public void handleKickDisconnect(DisconnectPacket packet) {
+    public void handleKickDisconnect(PacketDisconnect packet) {
         if (packet.reason.startsWith("§1"))
         {
             String[] serverInfo = packet.reason.split("\0");
@@ -62,7 +62,7 @@ public class PingPacketHandler
             server.motd = serverInfo[3];
             server.currentPlayers = parseIntWithDefault(serverInfo[4], -1);
             server.maxPlayers = parseIntWithDefault(serverInfo[5], -1);
-            server.latency = System.currentTimeMillis() - PingHandshakePacket.startTime;
+            server.latency = System.currentTimeMillis() - PacketPingHandshake.startTime;
 
             screen.handleIncomingServerInfo(server);
 
diff --git a/src/main/java/net/minecraft/client/net/thread/ThreadDownloadImage.java b/game/client/src/main/java/net/minecraft/client/net/thread/ThreadDownloadImage.java
similarity index 100%
rename from src/main/java/net/minecraft/client/net/thread/ThreadDownloadImage.java
rename to game/client/src/main/java/net/minecraft/client/net/thread/ThreadDownloadImage.java
diff --git a/src/main/java/net/minecraft/client/net/thread/ThreadDownloadResources.java b/game/client/src/main/java/net/minecraft/client/net/thread/ThreadDownloadResources.java
similarity index 100%
rename from src/main/java/net/minecraft/client/net/thread/ThreadDownloadResources.java
rename to game/client/src/main/java/net/minecraft/client/net/thread/ThreadDownloadResources.java
diff --git a/src/main/java/net/minecraft/client/net/thread/ThreadPingServer.java b/game/client/src/main/java/net/minecraft/client/net/thread/ThreadPingServer.java
similarity index 92%
rename from src/main/java/net/minecraft/client/net/thread/ThreadPingServer.java
rename to game/client/src/main/java/net/minecraft/client/net/thread/ThreadPingServer.java
index aa71ad74e..f914ade77 100644
--- a/src/main/java/net/minecraft/client/net/thread/ThreadPingServer.java
+++ b/game/client/src/main/java/net/minecraft/client/net/thread/ThreadPingServer.java
@@ -6,7 +6,7 @@ import net.minecraft.core.Global;
 import net.minecraft.core.net.ServerAddress;
 import net.minecraft.core.net.ServerData;
 import net.minecraft.core.net.handler.PacketHandler;
-import net.minecraft.core.net.packet.PingHandshakePacket;
+import net.minecraft.core.net.packet.PacketPingHandshake;
 
 public class ThreadPingServer
     extends Thread {
@@ -47,7 +47,7 @@ public class ThreadPingServer
 
         try {
             netHandler = new PingPacketHandler(screen, server);
-            netHandler.addToSendQueue(new PingHandshakePacket(0x01, 0xFA, "BTAPingHost", Global.MP_PROTOCOL_VERSION, hostName, port));
+            netHandler.addToSendQueue(new PacketPingHandshake(0x01, 0xFA, "BTAPingHost", Global.MP_PROTOCOL_VERSION, hostName, port));
         } catch (Exception ignored) {
         } finally {
             done = true;
diff --git a/src/main/java/net/minecraft/client/option/GameSettings.java b/game/client/src/main/java/net/minecraft/client/option/GameSettings.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/GameSettings.java
rename to game/client/src/main/java/net/minecraft/client/option/GameSettings.java
diff --git a/src/main/java/net/minecraft/client/option/KeyBinding.java b/game/client/src/main/java/net/minecraft/client/option/KeyBinding.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/KeyBinding.java
rename to game/client/src/main/java/net/minecraft/client/option/KeyBinding.java
diff --git a/src/main/java/net/minecraft/client/option/Option.java b/game/client/src/main/java/net/minecraft/client/option/Option.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/Option.java
rename to game/client/src/main/java/net/minecraft/client/option/Option.java
diff --git a/src/main/java/net/minecraft/client/option/OptionBoolean.java b/game/client/src/main/java/net/minecraft/client/option/OptionBoolean.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/OptionBoolean.java
rename to game/client/src/main/java/net/minecraft/client/option/OptionBoolean.java
diff --git a/src/main/java/net/minecraft/client/option/OptionColor.java b/game/client/src/main/java/net/minecraft/client/option/OptionColor.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/OptionColor.java
rename to game/client/src/main/java/net/minecraft/client/option/OptionColor.java
diff --git a/src/main/java/net/minecraft/client/option/OptionEnum.java b/game/client/src/main/java/net/minecraft/client/option/OptionEnum.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/OptionEnum.java
rename to game/client/src/main/java/net/minecraft/client/option/OptionEnum.java
diff --git a/src/main/java/net/minecraft/client/option/OptionFloat.java b/game/client/src/main/java/net/minecraft/client/option/OptionFloat.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/OptionFloat.java
rename to game/client/src/main/java/net/minecraft/client/option/OptionFloat.java
diff --git a/src/main/java/net/minecraft/client/option/OptionImmersiveMode.java b/game/client/src/main/java/net/minecraft/client/option/OptionImmersiveMode.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/OptionImmersiveMode.java
rename to game/client/src/main/java/net/minecraft/client/option/OptionImmersiveMode.java
diff --git a/src/main/java/net/minecraft/client/option/OptionInteger.java b/game/client/src/main/java/net/minecraft/client/option/OptionInteger.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/OptionInteger.java
rename to game/client/src/main/java/net/minecraft/client/option/OptionInteger.java
diff --git a/src/main/java/net/minecraft/client/option/OptionRange.java b/game/client/src/main/java/net/minecraft/client/option/OptionRange.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/OptionRange.java
rename to game/client/src/main/java/net/minecraft/client/option/OptionRange.java
diff --git a/src/main/java/net/minecraft/client/option/OptionString.java b/game/client/src/main/java/net/minecraft/client/option/OptionString.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/OptionString.java
rename to game/client/src/main/java/net/minecraft/client/option/OptionString.java
diff --git a/src/main/java/net/minecraft/client/option/OptionToggleable.java b/game/client/src/main/java/net/minecraft/client/option/OptionToggleable.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/OptionToggleable.java
rename to game/client/src/main/java/net/minecraft/client/option/OptionToggleable.java
diff --git a/src/main/java/net/minecraft/client/option/OptionVolume.java b/game/client/src/main/java/net/minecraft/client/option/OptionVolume.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/OptionVolume.java
rename to game/client/src/main/java/net/minecraft/client/option/OptionVolume.java
diff --git a/src/main/java/net/minecraft/client/option/enums/Colorblindness.java b/game/client/src/main/java/net/minecraft/client/option/enums/Colorblindness.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/enums/Colorblindness.java
rename to game/client/src/main/java/net/minecraft/client/option/enums/Colorblindness.java
diff --git a/src/main/java/net/minecraft/client/option/enums/LightmapStyle.java b/game/client/src/main/java/net/minecraft/client/option/enums/LightmapStyle.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/enums/LightmapStyle.java
rename to game/client/src/main/java/net/minecraft/client/option/enums/LightmapStyle.java
diff --git a/src/main/java/net/minecraft/client/option/enums/MipmapType.java b/game/client/src/main/java/net/minecraft/client/option/enums/MipmapType.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/enums/MipmapType.java
rename to game/client/src/main/java/net/minecraft/client/option/enums/MipmapType.java
diff --git a/src/main/java/net/minecraft/client/option/enums/RenderDistance.java b/game/client/src/main/java/net/minecraft/client/option/enums/RenderDistance.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/enums/RenderDistance.java
rename to game/client/src/main/java/net/minecraft/client/option/enums/RenderDistance.java
diff --git a/src/main/java/net/minecraft/client/option/enums/RenderScale.java b/game/client/src/main/java/net/minecraft/client/option/enums/RenderScale.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/enums/RenderScale.java
rename to game/client/src/main/java/net/minecraft/client/option/enums/RenderScale.java
diff --git a/src/main/java/net/minecraft/client/option/enums/TooltipStyle.java b/game/client/src/main/java/net/minecraft/client/option/enums/TooltipStyle.java
similarity index 100%
rename from src/main/java/net/minecraft/client/option/enums/TooltipStyle.java
rename to game/client/src/main/java/net/minecraft/client/option/enums/TooltipStyle.java
diff --git a/src/main/java/net/minecraft/client/player/controller/PlayerController.java b/game/client/src/main/java/net/minecraft/client/player/controller/PlayerController.java
similarity index 94%
rename from src/main/java/net/minecraft/client/player/controller/PlayerController.java
rename to game/client/src/main/java/net/minecraft/client/player/controller/PlayerController.java
index 0f1591d45..52ea1add8 100644
--- a/src/main/java/net/minecraft/client/player/controller/PlayerController.java
+++ b/game/client/src/main/java/net/minecraft/client/player/controller/PlayerController.java
@@ -4,6 +4,7 @@ import net.minecraft.client.Minecraft;
 import net.minecraft.client.entity.player.PlayerLocal;
 import net.minecraft.core.InventoryAction;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.player.Player;
@@ -50,7 +51,7 @@ public abstract class PlayerController {
 			return;
 		}
 
-		Block mineBlock = Block.getBlock(mc.currentWorld.getBlockId(x, y, z));
+		Block mineBlock = Blocks.getBlock(mc.currentWorld.getBlockId(x, y, z));
 		if(mineBlock != null) {
 			float mineStrength = mineBlock.blockStrength(mc.currentWorld, x, y, z, side, mc.thePlayer);
 			
@@ -76,7 +77,7 @@ public abstract class PlayerController {
 			return;
 		}
 		
-		Block mineBlock = Block.getBlock(mc.currentWorld.getBlockId(x, y, z));
+		Block mineBlock = Blocks.getBlock(mc.currentWorld.getBlockId(x, y, z));
 		if(mineBlock != null) {	
 			syncCurrentPlayItem();
 			
@@ -149,7 +150,7 @@ public abstract class PlayerController {
 		if (!player.getGamemode().canInteract() || mc.thePlayer.getHeldObject() != null) return false;
 		setMineBlock(null, null, null);
 		World world = mc.currentWorld;
-		Block block = Block.getBlock(world.getBlockId(x, y, z));
+		Block block = Blocks.getBlock(world.getBlockId(x, y, z));
 		if(block == null) return false;
 		
 		Item heldItem = null;
@@ -184,7 +185,7 @@ public abstract class PlayerController {
 		if (!mc.thePlayer.getGamemode().canInteract() || mc.thePlayer.getHeldObject() != null) return;
 		mc.currentWorld.onBlockHit(mc.thePlayer, x, y, z, side);
 		
-		Block block = Block.getBlock(mc.currentWorld.getBlockId(x, y, z));
+		Block block = Blocks.getBlock(mc.currentWorld.getBlockId(x, y, z));
 		if(block != null) {
 			block.onBlockLeftClicked(mc.currentWorld, x, y, z, mc.thePlayer, side, xHit, yHit);
 		}
@@ -265,7 +266,7 @@ public abstract class PlayerController {
 				}
 			}
 			if (!player.isSneaking() || itemstack == null) {  // If standing or hand empty perform block right click method
-				if (blockId > 0 && Block.blocksList[blockId].onBlockRightClicked(world, blockX, blockY, blockZ, player, side, xPlaced, yPlaced)) {
+				if (blockId > 0 && Blocks.blocksList[blockId].onBlockRightClicked(world, blockX, blockY, blockZ, player, side, xPlaced, yPlaced)) {
 					return true;
 				}
 			}
@@ -276,7 +277,7 @@ public abstract class PlayerController {
 			}
 		} else {
 			if (!player.isSneaking()) {  // If standing or hand empty perform block right click method
-				if (blockId > 0 && Block.blocksList[blockId].onBlockRightClicked(world, blockX, blockY, blockZ, player, side, xPlaced, yPlaced)) {
+				if (blockId > 0 && Blocks.blocksList[blockId].onBlockRightClicked(world, blockX, blockY, blockZ, player, side, xPlaced, yPlaced)) {
 					return true;
 				}
 			}
diff --git a/src/main/java/net/minecraft/client/player/controller/PlayerControllerMP.java b/game/client/src/main/java/net/minecraft/client/player/controller/PlayerControllerMP.java
similarity index 79%
rename from src/main/java/net/minecraft/client/player/controller/PlayerControllerMP.java
rename to game/client/src/main/java/net/minecraft/client/player/controller/PlayerControllerMP.java
index 77314de29..21bb62d48 100644
--- a/src/main/java/net/minecraft/client/player/controller/PlayerControllerMP.java
+++ b/game/client/src/main/java/net/minecraft/client/player/controller/PlayerControllerMP.java
@@ -41,17 +41,17 @@ public class PlayerControllerMP extends PlayerController {
 	@Override
 	protected void hitBlock(int x, int y, int z, Side side, double xHit, double yHit) {
 		super.hitBlock(x, y, z, side, xHit, yHit);
-		netHandler.addToSendQueue(new PlayerActionPacket(PlayerActionPacket.ACTION_DIG_CONTINUED, x, y, z, side, xHit, yHit));
+		netHandler.addToSendQueue(new PacketPlayerAction(PacketPlayerAction.ACTION_DIG_CONTINUED, x, y, z, side, xHit, yHit));
 	}
 	
 	@Override
 	public void sendStartDigPacket(int x, int y, int z, Side side, double xHit, double yHit) {
-		netHandler.addToSendQueue(new PlayerActionPacket(PlayerActionPacket.ACTION_DIG_START, x, y, z, side, xHit, yHit));
+		netHandler.addToSendQueue(new PacketPlayerAction(PacketPlayerAction.ACTION_DIG_START, x, y, z, side, xHit, yHit));
 	}
 	
 	@Override
 	public void sendDestroyBlockPacket(int x, int y, int z, Side side, double xHit, double yHit) {
-		netHandler.addToSendQueue(new PlayerActionPacket(PlayerActionPacket.ACTION_DIG_COMPLETE, x, y, z, side, xHit, yHit));
+		netHandler.addToSendQueue(new PacketPlayerAction(PacketPlayerAction.ACTION_DIG_COMPLETE, x, y, z, side, xHit, yHit));
 	}
 	
 	@Override
@@ -59,14 +59,14 @@ public class PlayerControllerMP extends PlayerController {
 		int i = mc.thePlayer.inventory.getCurrentItemIndex();
 		if (i != currentItem) {
 			currentItem = i;
-			netHandler.addToSendQueue(new SetCarriedItemPacket(currentItem));
+			netHandler.addToSendQueue(new PacketSetCarriedItem(currentItem));
 		}
 	}
 
 	@Override
 	public boolean useItemOn(Player entityplayer, World world, ItemStack itemstack, int blockX, int blockY, int blockZ, Side side, double xPlaced, double yPlaced) {
 		syncCurrentPlayItem();
-		netHandler.addToSendQueue(new UseItemPacket(blockX, blockY, blockZ, side.getDirection(), entityplayer.inventory.getCurrentItem(), xPlaced, yPlaced));
+		netHandler.addToSendQueue(new PacketUseItem(blockX, blockY, blockZ, side.getDirection(), entityplayer.inventory.getCurrentItem(), xPlaced, yPlaced));
 		boolean flag = super.useItemOn(entityplayer, world, itemstack, blockX, blockY, blockZ, side, xPlaced, yPlaced);
 		return flag;
 	}
@@ -74,7 +74,7 @@ public class PlayerControllerMP extends PlayerController {
 	@Override
 	public boolean useItem(Player entityplayer, World world, ItemStack itemstack) {
 		syncCurrentPlayItem();
-		netHandler.addToSendQueue(new UseItemPacket(-1, -1, -1, Direction.NONE, entityplayer.inventory.getCurrentItem(), 0, 0));
+		netHandler.addToSendQueue(new PacketUseItem(-1, -1, -1, Direction.NONE, entityplayer.inventory.getCurrentItem(), 0, 0));
 		boolean flag = super.useItem(entityplayer, world, itemstack);
 		return flag;
 	}
@@ -87,14 +87,14 @@ public class PlayerControllerMP extends PlayerController {
 	@Override
 	public void attack(Player entityplayer, Entity entity) {
 		syncCurrentPlayItem();
-		netHandler.addToSendQueue(new InteractPacket(entityplayer.id, entity.id, InteractPacket.ACTION_ATTACK));
+		netHandler.addToSendQueue(new PacketInteract(entityplayer.id, entity.id, PacketInteract.ACTION_ATTACK));
 		entityplayer.attackTargetEntityWithCurrentItem(entity);
 	}
 
 	@Override
 	public boolean interact(Player entityplayer, Entity entity) {
 		syncCurrentPlayItem();
-		netHandler.addToSendQueue(new InteractPacket(entityplayer.id, entity.id, InteractPacket.ACTION_INTERACT));
+		netHandler.addToSendQueue(new PacketInteract(entityplayer.id, entity.id, PacketInteract.ACTION_INTERACT));
 		return entityplayer.useCurrentItemOnEntity(entity);
 	}
 
@@ -102,7 +102,7 @@ public class PlayerControllerMP extends PlayerController {
 	public ItemStack handleInventoryMouseClick(int windowId, InventoryAction action, int[] args, Player entityplayer) {
 		short actionId = entityplayer.craftingInventory.backup(entityplayer.inventory);
 		ItemStack itemstack = super.handleInventoryMouseClick(windowId, action, args, entityplayer);
-		netHandler.addToSendQueue(new ContainerClickPacket(windowId, action, args, itemstack, actionId));
+		netHandler.addToSendQueue(new PacketContainerClick(windowId, action, args, itemstack, actionId));
 		return itemstack;
 	}
 
@@ -116,6 +116,6 @@ public class PlayerControllerMP extends PlayerController {
 	@Override
 	public void setPaintingType(ArtType art)
 	{
-		netHandler.addToSendQueue(new SetPaintingArtPacket(art));
+		netHandler.addToSendQueue(new PacketSetPaintingArt(art));
 	}
 }
diff --git a/src/main/java/net/minecraft/client/player/controller/PlayerControllerSP.java b/game/client/src/main/java/net/minecraft/client/player/controller/PlayerControllerSP.java
similarity index 89%
rename from src/main/java/net/minecraft/client/player/controller/PlayerControllerSP.java
rename to game/client/src/main/java/net/minecraft/client/player/controller/PlayerControllerSP.java
index 8633176a8..7f2bab88e 100644
--- a/src/main/java/net/minecraft/client/player/controller/PlayerControllerSP.java
+++ b/game/client/src/main/java/net/minecraft/client/player/controller/PlayerControllerSP.java
@@ -2,6 +2,7 @@ package net.minecraft.client.player.controller;
 
 import net.minecraft.client.Minecraft;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.item.ItemStack;
@@ -26,7 +27,7 @@ public class PlayerControllerSP extends PlayerController {
 			item.onDestroyBlock(mc.currentWorld, id, x, y, z, side, mc.thePlayer);
 		}
 		if (removed && mc.thePlayer.getGamemode().dropBlockOnBreak()) {
-			Block.blocksList[id].harvestBlock(mc.currentWorld, mc.thePlayer, x, y, z, meta, tileEntity);
+			Blocks.blocksList[id].harvestBlock(mc.currentWorld, mc.thePlayer, x, y, z, meta, tileEntity);
 		}
 
 		if (item != null && item.stackSize <= 0)
diff --git a/src/main/java/net/minecraft/client/render/BlockEntityRenderDispatcher.java b/game/client/src/main/java/net/minecraft/client/render/BlockEntityRenderDispatcher.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/BlockEntityRenderDispatcher.java
rename to game/client/src/main/java/net/minecraft/client/render/BlockEntityRenderDispatcher.java
diff --git a/src/main/java/net/minecraft/client/render/CameraSorter.java b/game/client/src/main/java/net/minecraft/client/render/CameraSorter.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/CameraSorter.java
rename to game/client/src/main/java/net/minecraft/client/render/CameraSorter.java
diff --git a/src/main/java/net/minecraft/client/render/ChunkRendererComparator.java b/game/client/src/main/java/net/minecraft/client/render/ChunkRendererComparator.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/ChunkRendererComparator.java
rename to game/client/src/main/java/net/minecraft/client/render/ChunkRendererComparator.java
diff --git a/src/main/java/net/minecraft/client/render/DisplayList.java b/game/client/src/main/java/net/minecraft/client/render/DisplayList.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/DisplayList.java
rename to game/client/src/main/java/net/minecraft/client/render/DisplayList.java
diff --git a/src/main/java/net/minecraft/client/render/EntityRenderDispatcher.java b/game/client/src/main/java/net/minecraft/client/render/EntityRenderDispatcher.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/EntityRenderDispatcher.java
rename to game/client/src/main/java/net/minecraft/client/render/EntityRenderDispatcher.java
diff --git a/src/main/java/net/minecraft/client/render/FallbackRenderer.java b/game/client/src/main/java/net/minecraft/client/render/FallbackRenderer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/FallbackRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/FallbackRenderer.java
diff --git a/src/main/java/net/minecraft/client/render/FlagRenderer.java b/game/client/src/main/java/net/minecraft/client/render/FlagRenderer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/FlagRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/FlagRenderer.java
diff --git a/src/main/java/net/minecraft/client/render/FogManager.java b/game/client/src/main/java/net/minecraft/client/render/FogManager.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/FogManager.java
rename to game/client/src/main/java/net/minecraft/client/render/FogManager.java
diff --git a/src/main/java/net/minecraft/client/render/Font.java b/game/client/src/main/java/net/minecraft/client/render/Font.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/Font.java
rename to game/client/src/main/java/net/minecraft/client/render/Font.java
diff --git a/src/main/java/net/minecraft/client/render/Framebuffer.java b/game/client/src/main/java/net/minecraft/client/render/Framebuffer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/Framebuffer.java
rename to game/client/src/main/java/net/minecraft/client/render/Framebuffer.java
diff --git a/src/main/java/net/minecraft/client/render/ImageParser.java b/game/client/src/main/java/net/minecraft/client/render/ImageParser.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/ImageParser.java
rename to game/client/src/main/java/net/minecraft/client/render/ImageParser.java
diff --git a/src/main/java/net/minecraft/client/render/ItemRenderer.java b/game/client/src/main/java/net/minecraft/client/render/ItemRenderer.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/ItemRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/ItemRenderer.java
index 7d8f00b72..64af7299f 100644
--- a/src/main/java/net/minecraft/client/render/ItemRenderer.java
+++ b/game/client/src/main/java/net/minecraft/client/render/ItemRenderer.java
@@ -2,6 +2,7 @@ package net.minecraft.client.render;
 
 import net.minecraft.client.entity.player.PlayerLocal;
 import net.minecraft.client.render.block.color.BlockColorDispatcher;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.block.ItemBlock;
 import org.lwjgl.opengl.GL11;
@@ -138,7 +139,7 @@ public class ItemRenderer
 			
 			int id = mc.currentWorld.getBlockId(blockX, blockY, blockZ);
             int meta = mc.currentWorld.getBlockMetadata(blockX, blockY, blockZ);
-            Block block = Block.blocksList[id];
+            Block block = Blocks.blocksList[id];
             BlockModel<Block> model = BlockModelDispatcher.getInstance().getDispatch(block);
 			if(mc.currentWorld.isBlockNormalCube(blockX, blockY, blockZ)) {
 				renderInsideOfBlock(partialTicks, model.getBlockTextureFromSideAndMetadata(Side.NORTH, meta));
@@ -159,8 +160,8 @@ public class ItemRenderer
                         break;
 					}
 				}
-                if(Block.blocksList[id] != null) {
-                    model = BlockModelDispatcher.getInstance().getDispatch(Block.blocksList[id]);
+                if(Blocks.blocksList[id] != null) {
+                    model = BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[id]);
                     renderInsideOfBlock(partialTicks, model.getBlockTextureFromSideAndMetadata(Side.NORTH, meta));
                 }
 			}
diff --git a/src/main/java/net/minecraft/client/render/Lighting.java b/game/client/src/main/java/net/minecraft/client/render/Lighting.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/Lighting.java
rename to game/client/src/main/java/net/minecraft/client/render/Lighting.java
diff --git a/src/main/java/net/minecraft/client/render/LightmapHelper.java b/game/client/src/main/java/net/minecraft/client/render/LightmapHelper.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/LightmapHelper.java
rename to game/client/src/main/java/net/minecraft/client/render/LightmapHelper.java
diff --git a/src/main/java/net/minecraft/client/render/LoadingScreenRenderer.java b/game/client/src/main/java/net/minecraft/client/render/LoadingScreenRenderer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/LoadingScreenRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/LoadingScreenRenderer.java
diff --git a/src/main/java/net/minecraft/client/render/MapItemRenderer.java b/game/client/src/main/java/net/minecraft/client/render/MapItemRenderer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/MapItemRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/MapItemRenderer.java
diff --git a/src/main/java/net/minecraft/client/render/OpenGLHelper.java b/game/client/src/main/java/net/minecraft/client/render/OpenGLHelper.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/OpenGLHelper.java
rename to game/client/src/main/java/net/minecraft/client/render/OpenGLHelper.java
diff --git a/src/main/java/net/minecraft/client/render/PanelCrashReport.java b/game/client/src/main/java/net/minecraft/client/render/PanelCrashReport.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/PanelCrashReport.java
rename to game/client/src/main/java/net/minecraft/client/render/PanelCrashReport.java
diff --git a/src/main/java/net/minecraft/client/render/ParticleEngine.java b/game/client/src/main/java/net/minecraft/client/render/ParticleEngine.java
similarity index 91%
rename from src/main/java/net/minecraft/client/render/ParticleEngine.java
rename to game/client/src/main/java/net/minecraft/client/render/ParticleEngine.java
index 13e593105..8ebdb9258 100644
--- a/src/main/java/net/minecraft/client/render/ParticleEngine.java
+++ b/game/client/src/main/java/net/minecraft/client/render/ParticleEngine.java
@@ -9,6 +9,7 @@ import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.Blocks;
@@ -152,7 +153,7 @@ public final class ParticleEngine {
      * @param data The metadata value of the destroyed block.
      */
     public void destroy(int x, int y, int z, int id, int data) {
-        Block block = Block.blocksList[id];
+        Block block = Blocks.blocksList[id];
         if (block == null) return;
         int amount = 4;
         if (block == Blocks.FIRE) {
@@ -183,23 +184,24 @@ public final class ParticleEngine {
         if (id == 0) {
             return;
         }
-        Block block = Block.blocksList[id];
+        Block block = Blocks.blocksList[id];
+        AABB bounds = block.getBounds();
         float r = 0.1F;
-        double xp = x + rand.nextDouble() * (block.maxX - block.minX - (r * 2.0F)) + r + block.minX;
-        double yp = y + rand.nextDouble() * (block.maxY - block.minY - (r * 2.0F)) + r + block.minY;
-        double zp = z + rand.nextDouble() * (block.maxZ - block.minZ - (r * 2.0F)) + r + block.minZ;
+        double xp = x + rand.nextDouble() * (bounds.maxX - bounds.minX - (r * 2.0F)) + r + bounds.minX;
+        double yp = y + rand.nextDouble() * (bounds.maxY - bounds.minY - (r * 2.0F)) + r + bounds.minY;
+        double zp = z + rand.nextDouble() * (bounds.maxZ - bounds.minZ - (r * 2.0F)) + r + bounds.minZ;
         if (side == Side.BOTTOM) {
-            yp = (y + block.minY) - r;
+            yp = (y + bounds.minY) - r;
         } else if (side == Side.TOP) {
-            yp = (y + block.maxY) + r;
+            yp = (y + bounds.maxY) + r;
         } else if (side == Side.NORTH) {
-            zp = (z + block.minZ) - r;
+            zp = (z + bounds.minZ) - r;
         } else if (side == Side.SOUTH) {
-            zp = (z + block.maxZ) + r;
+            zp = (z + bounds.maxZ) + r;
         } else if (side == Side.WEST) {
-            xp = (x + block.minX) - r;
+            xp = (x + bounds.minX) - r;
         } else if (side == Side.EAST) {
-            xp = x + block.maxX + r;
+            xp = x + bounds.maxX + r;
         }
         add((new ParticleBlockBreaking(world, xp, yp, zp, 0.0D, 0.0D, 0.0D, block, side, world.getBlockMetadata(x, y, z))).init(x, y, z).setPower(0.2F).setScale(0.6F));
     }
diff --git a/src/main/java/net/minecraft/client/render/PlayerSkinParser.java b/game/client/src/main/java/net/minecraft/client/render/PlayerSkinParser.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/PlayerSkinParser.java
rename to game/client/src/main/java/net/minecraft/client/render/PlayerSkinParser.java
diff --git a/src/main/java/net/minecraft/client/render/Polygon.java b/game/client/src/main/java/net/minecraft/client/render/Polygon.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/Polygon.java
rename to game/client/src/main/java/net/minecraft/client/render/Polygon.java
diff --git a/src/main/java/net/minecraft/client/render/PostProcessingManager.java b/game/client/src/main/java/net/minecraft/client/render/PostProcessingManager.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/PostProcessingManager.java
rename to game/client/src/main/java/net/minecraft/client/render/PostProcessingManager.java
diff --git a/src/main/java/net/minecraft/client/render/RenderBlockCache.java b/game/client/src/main/java/net/minecraft/client/render/RenderBlockCache.java
similarity index 92%
rename from src/main/java/net/minecraft/client/render/RenderBlockCache.java
rename to game/client/src/main/java/net/minecraft/client/render/RenderBlockCache.java
index c6ced206d..b9e628d80 100644
--- a/src/main/java/net/minecraft/client/render/RenderBlockCache.java
+++ b/game/client/src/main/java/net/minecraft/client/render/RenderBlockCache.java
@@ -4,6 +4,7 @@ import java.util.Arrays;
 
 import net.minecraft.client.Minecraft;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.WorldSource;
 
 final public class RenderBlockCache {
@@ -45,7 +46,7 @@ final public class RenderBlockCache {
 		float brightness = block.getBlockBrightness(access, x, y, z);
 
 		if(LightmapHelper.isLightmapEnabled() || mc.fullbright) {
-			int lightEmission = Block.lightEmission[block.id];
+			int lightEmission = Blocks.lightEmission[block.id];
 			if(lightEmission >= 15) {
 				return 1.0f;
 			}
@@ -80,7 +81,7 @@ final public class RenderBlockCache {
     public boolean getOpacity(int relX, int relY, int relZ) {
         int index = (relX+CACHE_RANGE)*CACHE_SIZE*CACHE_SIZE+(relY+CACHE_RANGE)*CACHE_SIZE+(relZ+CACHE_RANGE);
         if(!opacityCached[index]){
-            opacityValue[index] = Block.solid[access.getBlockId(relX+ offsetX, relY+ offsetY, relZ+ offsetZ)];
+            opacityValue[index] = Blocks.solid[access.getBlockId(relX+ offsetX, relY+ offsetY, relZ+ offsetZ)];
             opacityCached[index] = true;
         }
         return opacityValue[index];
@@ -89,7 +90,7 @@ final public class RenderBlockCache {
     public int getLightmapCoord(int relX, int relY, int relZ) {
     	int index = (relX + CACHE_RANGE) * CACHE_SIZE * CACHE_SIZE + (relY + CACHE_RANGE) * CACHE_SIZE + (relZ + CACHE_RANGE);
     	if(!lightmapCoordCached[index]) {
-    		int lightEmission = Block.lightEmission[block.id];
+    		int lightEmission = Blocks.lightEmission[block.id];
     		lightmapCoordValue[index] = access.getLightmapCoord(relX + offsetX, relY + offsetY, relZ + offsetZ, lightEmission);
     		lightmapCoordCached[index] = true;
     	}
diff --git a/src/main/java/net/minecraft/client/render/RenderBlocks.java b/game/client/src/main/java/net/minecraft/client/render/RenderBlocks.java
similarity index 74%
rename from src/main/java/net/minecraft/client/render/RenderBlocks.java
rename to game/client/src/main/java/net/minecraft/client/render/RenderBlocks.java
index 2e169bec0..e3f4f1b23 100644
--- a/src/main/java/net/minecraft/client/render/RenderBlocks.java
+++ b/game/client/src/main/java/net/minecraft/client/render/RenderBlocks.java
@@ -1,5 +1,7 @@
 package net.minecraft.client.render;
 
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.util.phys.AABB;
 import org.lwjgl.opengl.GL11;
 
 import net.minecraft.client.Minecraft;
@@ -61,7 +63,7 @@ public class RenderBlocks
             return block.getBlockBrightness(blockAccess, x, y, z);
         }
 
-        return blockAccess.getBrightness(x, y, z, Block.lightEmission[id]);
+        return blockAccess.getBrightness(x, y, z, Blocks.lightEmission[id]);
     }
 
 	public void renderBlockFallingSand(Tessellator tessellator, BlockModel<Block> blockModel, Block block, WorldSource world, int x, int y, int z) {
@@ -86,7 +88,9 @@ public class RenderBlocks
 		float brightness = 1.0f;
 		
 		final int lmcInside = lightmap ? block.getLightmapCoord(world, x, y, z) : 0;
-		
+
+        final AABB bounds = block.getBounds();
+
 		// Bottom
 		if(lightmap) {
 			tessellator.setLightmapCoord(LightmapHelper.max(lmcInside, block.getLightmapCoord(world, x, y - 1, z)));
@@ -94,7 +98,7 @@ public class RenderBlocks
 			brightness = Math.max(getBlockBrightness(world, x, y - 1, z), brightnessInside);
 		}
 		tessellator.setColorOpaque_F(sideBottom * brightness, sideBottom * brightness, sideBottom * brightness);
-		renderBottomFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.BOTTOM, meta));
+		renderBottomFace(tessellator, bounds, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.BOTTOM, meta));
 		
 		// Top
 		if(lightmap) {
@@ -103,7 +107,7 @@ public class RenderBlocks
 			brightness = Math.max(getBlockBrightness(world, x, y + 1, z), brightnessInside);	
 		}
 		tessellator.setColorOpaque_F(sideTop * brightness, sideTop * brightness, sideTop * brightness);
-		renderTopFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.TOP, meta));
+		renderTopFace(tessellator, bounds, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.TOP, meta));
 		
 		// North
 		if(lightmap) {
@@ -112,7 +116,7 @@ public class RenderBlocks
 			brightness = Math.max(getBlockBrightness(world, x, y, z - 1), brightnessInside);
 		}
 		tessellator.setColorOpaque_F(sideNorthSouth * brightness, sideNorthSouth * brightness, sideNorthSouth * brightness);
-		renderNorthFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.NORTH, meta));
+		renderNorthFace(tessellator, bounds, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.NORTH, meta));
 		
 		// South
 		if(lightmap) {
@@ -121,7 +125,7 @@ public class RenderBlocks
 			brightness = Math.max(getBlockBrightness(world, x, y, z + 1), brightnessInside);
 		}
 		tessellator.setColorOpaque_F(sideNorthSouth * brightness, sideNorthSouth * brightness, sideNorthSouth * brightness);
-		renderSouthFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.SOUTH, meta));
+		renderSouthFace(tessellator, bounds, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.SOUTH, meta));
 		
 		// West
 		if(lightmap) {
@@ -130,7 +134,7 @@ public class RenderBlocks
 			brightness = Math.max(getBlockBrightness(world, x - 1, y, z), brightnessInside);
 		}
 		tessellator.setColorOpaque_F(sideEastWest * brightness, sideEastWest * brightness, sideEastWest * brightness);
-		renderWestFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.WEST, meta));
+		renderWestFace(tessellator, bounds, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.WEST, meta));
 		
 		// East
 		if(lightmap) {
@@ -139,80 +143,80 @@ public class RenderBlocks
 			brightness = Math.max(getBlockBrightness(world, x + 1, y, z), brightnessInside);
 		}
 		tessellator.setColorOpaque_F(sideEastWest * brightness, sideEastWest * brightness, sideEastWest * brightness);
-		renderEastFace(tessellator, block, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.EAST, meta));
+		renderEastFace(tessellator, bounds, -0.5, -0.5, -0.5, blockModel.getBlockTextureFromSideAndMetadata(Side.EAST, meta));
 		
 		tessellator.draw();
 	}
 
-    public boolean renderStandardBlock(Tessellator tessellator, BlockModel<Block> blockModel, Block block, int x, int y, int z)
+    public boolean renderStandardBlock(Tessellator tessellator, BlockModel<Block> blockModel, AABB bounds, int x, int y, int z)
     {
-        int color = BlockColorDispatcher.getInstance().getDispatch(block).getWorldColor(blockAccess, x, y, z);
+        int color = BlockColorDispatcher.getInstance().getDispatch(blockModel.block).getWorldColor(blockAccess, x, y, z);
         float r = (float)(color >> 16 & 0xff) / 255F;
         float g = (float)(color >> 8 & 0xff) / 255F;
         float b = (float)(color & 0xff) / 255F;
-        return renderStandardBlock(tessellator, blockModel, block, x, y, z, r, g, b);
+        return renderStandardBlock(tessellator, blockModel, bounds, x, y, z, r, g, b);
     }
 
     /**
      * @author CyborgCabbage
      * Thanks! :D
      */
-    public boolean renderStandardBlock(Tessellator tessellator, BlockModel<Block> blockModel, Block block, int x, int y, int z, float r, float g, float b) {
+    public boolean renderStandardBlock(Tessellator tessellator, BlockModel<Block> blockModel, AABB bounds, int x, int y, int z, float r, float g, float b) {
         this.enableAO = true;
         int meta = blockAccess.getBlockMetadata(x, y, z);
-        cache.setupCache(block, blockAccess, x, y, z);
+        cache.setupCache(blockModel.block, blockAccess, x, y, z);
         boolean somethingRendered = false;
         for (Side side : Side.sides){
-            somethingRendered |= renderSide(tessellator, blockModel, block, x, y, z, r, g, b, side, meta);
+            somethingRendered |= renderSide(tessellator, blockModel, bounds, x, y, z, r, g, b, side, meta);
         }
         this.enableAO = false;
         return somethingRendered;
     }
-    public final boolean renderSide(Tessellator tessellator, BlockModel<Block> blockModel, Block block, int x, int y, int z, float r, float g, float b, Side side, int meta){
+    public final boolean renderSide(Tessellator tessellator, BlockModel<Block> blockModel, AABB bounds, int x, int y, int z, float r, float g, float b, Side side, int meta){
         boolean useColor;
         switch (side){
             case BOTTOM:
                 useColor = blockModel.shouldSideBeColored(blockAccess, x, y, z, 0, meta);
-                return renderSide(tessellator, blockModel, block, x, y, z,
+                return renderSide(tessellator, blockModel, bounds, x, y, z,
                         useColor ? r : 1, useColor ? g : 1, useColor ? b : 1,0, meta,
-                        0, -1, 0, (float)block.minY,
-                        0, 0, 1, (float)block.maxZ, (float)block.minZ,
-                        -1, 0, 0, 1-(float)block.minX, 1-(float)block.maxX);
+                        0, -1, 0, (float)bounds.minY,
+                        0, 0, 1, (float)bounds.maxZ, (float)bounds.minZ,
+                        -1, 0, 0, 1-(float)bounds.minX, 1-(float)bounds.maxX);
             case TOP:
                 useColor = blockModel.shouldSideBeColored(blockAccess, x, y, z, 1, meta);
-                return renderSide(tessellator, blockModel, block, x, y, z,
+                return renderSide(tessellator, blockModel, bounds, x, y, z,
                         useColor ? r : 1, useColor ? g : 1, useColor ? b : 1,1, meta,
-                        0,1,0, 1-(float)block.maxY,
-                        0,0,1, (float)block.maxZ, (float)block.minZ,
-                        1,0,0, (float)block.maxX, (float)block.minX);
+                        0,1,0, 1-(float)bounds.maxY,
+                        0,0,1, (float)bounds.maxZ, (float)bounds.minZ,
+                        1,0,0, (float)bounds.maxX, (float)bounds.minX);
             case NORTH:
                 useColor = blockModel.shouldSideBeColored(blockAccess, x, y, z, 2, meta);
-                return renderSide(tessellator, blockModel, block, x, y, z,
+                return renderSide(tessellator, blockModel, bounds, x, y, z,
                         useColor ? r : 1, useColor ? g : 1, useColor ? b : 1,2, meta,
-                        0,0,-1, (float)block.minZ,
-                        -1,0,0, 1-(float)block.minX, 1-(float)block.maxX,
-                        0,1,0, (float)block.maxY, (float)block.minY);
+                        0,0,-1, (float)bounds.minZ,
+                        -1,0,0, 1-(float)bounds.minX, 1-(float)bounds.maxX,
+                        0,1,0, (float)bounds.maxY, (float)bounds.minY);
             case SOUTH:
                 useColor = blockModel.shouldSideBeColored(blockAccess, x, y, z, 3, meta);
-                return renderSide(tessellator, blockModel, block, x, y, z,
+                return renderSide(tessellator, blockModel, bounds, x, y, z,
                         useColor ? r : 1, useColor ? g : 1, useColor ? b : 1,3, meta,
-                        0,0,1, 1-(float)block.maxZ,
-                        0,1,0, (float)block.maxY, (float)block.minY,
-                        -1,0,0, 1-(float)block.minX, 1-(float)block.maxX);
+                        0,0,1, 1-(float)bounds.maxZ,
+                        0,1,0, (float)bounds.maxY, (float)bounds.minY,
+                        -1,0,0, 1-(float)bounds.minX, 1-(float)bounds.maxX);
             case WEST:
                 useColor = blockModel.shouldSideBeColored(blockAccess, x, y, z, 4, meta);
-                return renderSide(tessellator, blockModel, block, x, y, z,
+                return renderSide(tessellator, blockModel, bounds, x, y, z,
                         useColor ? r : 1, useColor ? g : 1, useColor ? b : 1,4, meta,
-                        -1,0,0, (float)block.minX,
-                        0,0,1, (float)block.maxZ, (float)block.minZ,
-                        0,1,0, (float)block.maxY, (float)block.minY);
+                        -1,0,0, (float)bounds.minX,
+                        0,0,1, (float)bounds.maxZ, (float)bounds.minZ,
+                        0,1,0, (float)bounds.maxY, (float)bounds.minY);
             case EAST:
                 useColor = blockModel.shouldSideBeColored(blockAccess, x, y, z, 5, meta);
-                return renderSide(tessellator, blockModel, block, x, y, z,
+                return renderSide(tessellator, blockModel, bounds, x, y, z,
                         useColor ? r : 1, useColor ? g : 1, useColor ? b : 1,5, meta,
-                        1,0,0, 1-(float)block.maxX,
-                        0,0,1, (float)block.maxZ, (float)block.minZ,
-                        0,-1,0, 1-(float)block.minY, 1-(float)block.maxY);
+                        1,0,0, 1-(float)bounds.maxX,
+                        0,0,1, (float)bounds.maxZ, (float)bounds.minZ,
+                        0,-1,0, 1-(float)bounds.minY, 1-(float)bounds.maxY);
             default:
                 throw new IllegalArgumentException("Side " + side + " not expected!");
         }
@@ -222,7 +226,7 @@ public class RenderBlocks
      * @author CyborgCabbage
      * Thanks! :D
      */
-    public final boolean renderSide(Tessellator tessellator, BlockModel<Block> blockModel, Block block, int x, int y, int z, float r, float g, float b, int side, int meta,
+    public final boolean renderSide(Tessellator tessellator, BlockModel<Block> blockModel, AABB bounds, int x, int y, int z, float r, float g, float b, int side, int meta,
                                     int dirX, int dirY, int dirZ, float depth,
                                     int topX, int topY, int topZ, float topP, float botP,
                                     int lefX, int lefY, int lefZ, float lefP, float rigP
@@ -236,26 +240,25 @@ public class RenderBlocks
         if (tex == null || ((renderBitMask >> side) & 1) != 0) return false;
 
         boolean rendered = false;
-        block.setBlockBoundsBasedOnSide(this.blockAccess, x, y, z, Side.getSideById(side));
-        if (this.renderAllFaces || blockModel.shouldSideBeRendered(this.blockAccess, x+dirX, y+dirY, z+dirZ, side, meta)) {
+        if (this.renderAllFaces || blockModel.shouldSideBeRendered(this.blockAccess, bounds, x+dirX, y+dirY, z+dirZ, side, meta)) {
         	
-            setupLighting(block, x, y, z, r, g, b, side, meta,
+            setupLighting(blockModel.block, x, y, z, r, g, b, side, meta,
                     dirX, dirY, dirZ, depth,
                     topX, topY, topZ, topP, botP,
                     lefX, lefY, lefZ, lefP, rigP);
 
             if (side == 0) {
-                this.renderBottomFace(tessellator, block, x, y, z, tex);
+                this.renderBottomFace(tessellator, bounds, x, y, z, tex);
             } else if (side == 1) {
-                this.renderTopFace(tessellator, block, x, y, z, tex);
+                this.renderTopFace(tessellator, bounds, x, y, z, tex);
             } else if (side == 2) {
-                this.renderNorthFace(tessellator, block, x, y, z, tex);
+                this.renderNorthFace(tessellator, bounds, x, y, z, tex);
             } else if (side == 3) {
-                this.renderSouthFace(tessellator, block, x, y, z, tex);
+                this.renderSouthFace(tessellator, bounds, x, y, z, tex);
             } else if (side == 4) {
-                this.renderWestFace(tessellator, block, x, y, z, tex);
+                this.renderWestFace(tessellator, bounds, x, y, z, tex);
             } else if (side == 5) {
-                this.renderEastFace(tessellator, block, x, y, z, tex);
+                this.renderEastFace(tessellator, bounds, x, y, z, tex);
             }
             rendered = true;
         }
@@ -265,7 +268,7 @@ public class RenderBlocks
                                     int dirX, int dirY, int dirZ, float depth,
                                     int topX, int topY, int topZ, float topP, float botP,
                                     int lefX, int lefY, int lefZ, float lefP, float rigP){
-    	boolean ao = mc.isAmbientOcclusionEnabled() && Block.lightEmission[block.id] == 0;
+    	boolean ao = mc.isAmbientOcclusionEnabled() && Blocks.lightEmission[block.id] == 0;
         boolean isFullCube = depth <= FULL_CUBE_THRESHOLD;
 
     	if(LightmapHelper.isLightmapEnabled()) {
@@ -438,20 +441,20 @@ public class RenderBlocks
         this.colorBlueTopRight *= ltr;
     }
 
-    public void renderBottomFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex)
+    public void renderBottomFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex)
     {
         if(overrideBlockTexture != null) tex = overrideBlockTexture;
         if (tex == null) return;
-        double d3 = tex.getSubIconU(block.minX);
-        double d4 = tex.getSubIconU(block.maxX);
-        double d5 = tex.getSubIconV(block.minZ);
-        double d6 = tex.getSubIconV(block.maxZ);
-        if(block.minX < 0.0D || block.maxX > 1.0D)
+        double d3 = tex.getSubIconU(bounds.minX);
+        double d4 = tex.getSubIconU(bounds.maxX);
+        double d5 = tex.getSubIconV(bounds.minZ);
+        double d6 = tex.getSubIconV(bounds.maxZ);
+        if(bounds.minX < 0.0D || bounds.maxX > 1.0D)
         {
             d3 = tex.getIconUMin();
             d4 = tex.getIconUMax();
         }
-        if(block.minZ < 0.0D || block.maxZ > 1.0D)
+        if(bounds.minZ < 0.0D || bounds.maxZ > 1.0D)
         {
             d5 = tex.getIconVMin();
             d6 = tex.getIconVMax();
@@ -462,10 +465,10 @@ public class RenderBlocks
         double d10 = d6;
         if(uvRotateBottom == 2)
         {
-            d3 = tex.getSubIconU(block.minX);
-            d5 = tex.getSubIconV(1 - block.maxX);
-            d4 = tex.getSubIconU(block.maxZ);
-            d6 = tex.getSubIconV(1 - block.minZ);
+            d3 = tex.getSubIconU(bounds.minX);
+            d5 = tex.getSubIconV(1 - bounds.maxX);
+            d4 = tex.getSubIconU(bounds.maxZ);
+            d6 = tex.getSubIconV(1 - bounds.minZ);
             d9 = d5;
             d10 = d6;
             d7 = d3;
@@ -475,10 +478,10 @@ public class RenderBlocks
         } else
         if(uvRotateBottom == 1)
         {
-            d3 = tex.getSubIconU(1 - block.maxZ);
-            d5 = tex.getSubIconV(block.minX);
-            d4 = tex.getSubIconU(1 - block.minZ);
-            d6 = tex.getSubIconV(block.maxX);
+            d3 = tex.getSubIconU(1 - bounds.maxZ);
+            d5 = tex.getSubIconV(bounds.minX);
+            d4 = tex.getSubIconU(1 - bounds.minZ);
+            d6 = tex.getSubIconV(bounds.maxX);
             d7 = d4;
             d8 = d3;
             d3 = d7;
@@ -488,20 +491,20 @@ public class RenderBlocks
         } else
         if(uvRotateBottom == 3)
         {
-            d3 = tex.getSubIconU(1 - block.maxX);
-            d4 = tex.getSubIconU(1 - block.minX);
-            d5 = tex.getSubIconV(1 - block.minZ);
-            d6 = tex.getSubIconV(1 - block.maxZ);
+            d3 = tex.getSubIconU(1 - bounds.maxX);
+            d4 = tex.getSubIconU(1 - bounds.minX);
+            d5 = tex.getSubIconV(1 - bounds.minZ);
+            d6 = tex.getSubIconV(1 - bounds.maxZ);
             d7 = d4;
             d8 = d3;
             d9 = d5;
             d10 = d6;
         }
-        double d11 = x + block.minX;
-        double d12 = x + block.maxX;
-        double d13 = y + block.minY;
-        double d14 = z + block.minZ;
-        double d15 = z + block.maxZ;
+        double d11 = x + bounds.minX;
+        double d12 = x + bounds.maxX;
+        double d13 = y + bounds.minY;
+        double d14 = z + bounds.minZ;
+        double d15 = z + bounds.maxZ;
         if(enableAO)
         {
         	if(LightmapHelper.isLightmapEnabled()) tessellator.setLightmapCoord(lightmapCoordTopLeft);
@@ -525,20 +528,20 @@ public class RenderBlocks
         }
     }
 
-    public void renderTopFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex)
+    public void renderTopFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex)
     {
         if(overrideBlockTexture != null) tex = overrideBlockTexture;
         if (tex == null) return;
-        double d3 = tex.getSubIconU(block.minX);
-        double d4 = tex.getSubIconU(block.maxX);
-        double d5 = tex.getSubIconV(block.minZ);
-        double d6 = tex.getSubIconV(block.maxZ);
-        if(block.minX < 0.0D || block.maxX > 1.0D)
+        double d3 = tex.getSubIconU(bounds.minX);
+        double d4 = tex.getSubIconU(bounds.maxX);
+        double d5 = tex.getSubIconV(bounds.minZ);
+        double d6 = tex.getSubIconV(bounds.maxZ);
+        if(bounds.minX < 0.0D || bounds.maxX > 1.0D)
         {
             d3 = tex.getIconUMin();
             d4 = tex.getIconUMax();
         }
-        if(block.minZ < 0.0D || block.maxZ > 1.0D)
+        if(bounds.minZ < 0.0D || bounds.maxZ > 1.0D)
         {
             d5 = tex.getIconVMin();
             d6 = tex.getIconVMax();
@@ -549,10 +552,10 @@ public class RenderBlocks
         double d10 = d6;
         if(uvRotateTop == 1)
         {
-            d3 = tex.getSubIconU(block.minZ);
-            d5 = tex.getSubIconV(1 - block.maxX);
-            d4 = tex.getSubIconU(block.maxZ);
-            d6 = tex.getSubIconV(1 - block.minX);
+            d3 = tex.getSubIconU(bounds.minZ);
+            d5 = tex.getSubIconV(1 - bounds.maxX);
+            d4 = tex.getSubIconU(bounds.maxZ);
+            d6 = tex.getSubIconV(1 - bounds.minX);
             d9 = d5;
             d10 = d6;
             d7 = d3;
@@ -562,10 +565,10 @@ public class RenderBlocks
         } else
         if(uvRotateTop == 2)
         {
-            d3 = tex.getSubIconU(1 - block.maxZ);
-            d5 = tex.getSubIconV(block.minX);
-            d4 = tex.getSubIconU(1 - block.minZ);
-            d6 = tex.getSubIconV(block.maxX);
+            d3 = tex.getSubIconU(1 - bounds.maxZ);
+            d5 = tex.getSubIconV(bounds.minX);
+            d4 = tex.getSubIconU(1 - bounds.minZ);
+            d6 = tex.getSubIconV(bounds.maxX);
             d7 = d4;
             d8 = d3;
             d3 = d7;
@@ -575,20 +578,20 @@ public class RenderBlocks
         } else
         if(uvRotateTop == 3)
         {
-            d3 = tex.getSubIconU(1 - block.minX);
-            d4 = tex.getSubIconU(1 - block.maxX);
-            d5 = tex.getSubIconV(1 - block.minZ);
-            d6 = tex.getSubIconV(1 - block.maxZ);
+            d3 = tex.getSubIconU(1 - bounds.minX);
+            d4 = tex.getSubIconU(1 - bounds.maxX);
+            d5 = tex.getSubIconV(1 - bounds.minZ);
+            d6 = tex.getSubIconV(1 - bounds.maxZ);
             d7 = d4;
             d8 = d3;
             d9 = d5;
             d10 = d6;
         }
-        double d11 = x + block.minX;
-        double d12 = x + block.maxX;
-        double d13 = y + block.maxY;
-        double d14 = z + block.minZ;
-        double d15 = z + block.maxZ;
+        double d11 = x + bounds.minX;
+        double d12 = x + bounds.maxX;
+        double d13 = y + bounds.maxY;
+        double d14 = z + bounds.minZ;
+        double d15 = z + bounds.maxZ;
         if(enableAO)
         {
         	if(LightmapHelper.isLightmapEnabled()) tessellator.setLightmapCoord(lightmapCoordTopLeft);
@@ -612,26 +615,26 @@ public class RenderBlocks
         }
     }
 
-    public void renderNorthFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex)
+    public void renderNorthFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex)
     {
         if(overrideBlockTexture != null) tex = overrideBlockTexture;
         if (tex == null) return;
-        double d3 = tex.getSubIconU(block.minX);
-        double d4 = tex.getSubIconU(block.maxX);
-        double d5 = tex.getSubIconV(1 - block.maxY);
-        double d6 = tex.getSubIconV(1 - block.minY);
+        double d3 = tex.getSubIconU(bounds.minX);
+        double d4 = tex.getSubIconU(bounds.maxX);
+        double d5 = tex.getSubIconV(1 - bounds.maxY);
+        double d6 = tex.getSubIconV(1 - bounds.minY);
         if(flipTexture)
         {
             double d7 = d3;
             d3 = d4;
             d4 = d7;
         }
-        if(block.minX < 0.0D || block.maxX > 1.0D)
+        if(bounds.minX < 0.0D || bounds.maxX > 1.0D)
         {
             d3 = tex.getIconUMin();
             d4 = tex.getIconUMax();
         }
-        if(block.minY < 0.0D || block.maxY > 1.0D)
+        if(bounds.minY < 0.0D || bounds.maxY > 1.0D)
         {
             d5 = tex.getIconVMin();
             d6 = tex.getIconVMax();
@@ -642,10 +645,10 @@ public class RenderBlocks
         double d11 = d6;
         if(uvRotateEast == 2)
         {
-            d3 = tex.getSubIconU(block.minY);
-            d5 = tex.getSubIconV(1 - block.minX);
-            d4 = tex.getSubIconU(block.maxY);
-            d6 = tex.getSubIconV(1 - block.maxX);
+            d3 = tex.getSubIconU(bounds.minY);
+            d5 = tex.getSubIconV(1 - bounds.minX);
+            d4 = tex.getSubIconU(bounds.maxY);
+            d6 = tex.getSubIconV(1 - bounds.maxX);
             d10 = d5;
             d11 = d6;
             d8 = d3;
@@ -655,10 +658,10 @@ public class RenderBlocks
         } else
         if(uvRotateEast == 1)
         {
-            d3 = tex.getSubIconU(1 - block.maxY);
-            d5 = tex.getSubIconV(block.maxX);
-            d4 = tex.getSubIconU(1 - block.minY);
-            d6 = tex.getSubIconV(block.minX);
+            d3 = tex.getSubIconU(1 - bounds.maxY);
+            d5 = tex.getSubIconV(bounds.maxX);
+            d4 = tex.getSubIconU(1 - bounds.minY);
+            d6 = tex.getSubIconV(bounds.minX);
             d8 = d4;
             d9 = d3;
             d3 = d8;
@@ -668,20 +671,20 @@ public class RenderBlocks
         } else
         if(uvRotateEast == 3)
         {
-            d3 = tex.getSubIconU(1 - block.minX);
-            d4 = tex.getSubIconU(1 - block.maxX);
-            d5 = tex.getSubIconV(block.maxY);
-            d6 = tex.getSubIconV(block.minY);
+            d3 = tex.getSubIconU(1 - bounds.minX);
+            d4 = tex.getSubIconU(1 - bounds.maxX);
+            d5 = tex.getSubIconV(bounds.maxY);
+            d6 = tex.getSubIconV(bounds.minY);
             d8 = d4;
             d9 = d3;
             d10 = d5;
             d11 = d6;
         }
-        double d12 = x + block.minX;
-        double d13 = x + block.maxX;
-        double d14 = y + block.minY;
-        double d15 = y + block.maxY;
-        double d16 = z + block.minZ;
+        double d12 = x + bounds.minX;
+        double d13 = x + bounds.maxX;
+        double d14 = y + bounds.minY;
+        double d15 = y + bounds.maxY;
+        double d16 = z + bounds.minZ;
         if(enableAO)
         {
         	if(LightmapHelper.isLightmapEnabled()) tessellator.setLightmapCoord(lightmapCoordTopLeft);
@@ -705,26 +708,26 @@ public class RenderBlocks
         }
     }
 
-    public void renderSouthFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex)
+    public void renderSouthFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex)
     {
         if(overrideBlockTexture != null) tex = overrideBlockTexture;
         if (tex == null) return;
-        double d3 = tex.getSubIconU(block.minX);
-        double d4 = tex.getSubIconU(block.maxX);
-        double d5 = tex.getSubIconV(1 - block.maxY);
-        double d6 = tex.getSubIconV(1 - block.minY);
+        double d3 = tex.getSubIconU(bounds.minX);
+        double d4 = tex.getSubIconU(bounds.maxX);
+        double d5 = tex.getSubIconV(1 - bounds.maxY);
+        double d6 = tex.getSubIconV(1 - bounds.minY);
         if(flipTexture)
         {
             double d7 = d3;
             d3 = d4;
             d4 = d7;
         }
-        if(block.minX < 0.0D || block.maxX > 1.0D)
+        if(bounds.minX < 0.0D || bounds.maxX > 1.0D)
         {
             d3 = tex.getIconUMin();
             d4 = tex.getIconUMax();
         }
-        if(block.minY < 0.0D || block.maxY > 1.0D)
+        if(bounds.minY < 0.0D || bounds.maxY > 1.0D)
         {
             d5 = tex.getIconVMin();
             d6 = tex.getIconVMax();
@@ -735,10 +738,10 @@ public class RenderBlocks
         double d11 = d6;
         if(uvRotateWest == 1)
         {
-            d3 = tex.getSubIconU(block.minY);
-            d6 = tex.getSubIconV(1 - block.minX);
-            d4 = tex.getSubIconU(block.maxY);
-            d5 = tex.getSubIconV(1 - block.maxX);
+            d3 = tex.getSubIconU(bounds.minY);
+            d6 = tex.getSubIconV(1 - bounds.minX);
+            d4 = tex.getSubIconU(bounds.maxY);
+            d5 = tex.getSubIconV(1 - bounds.maxX);
             d10 = d5;
             d11 = d6;
             d8 = d3;
@@ -748,10 +751,10 @@ public class RenderBlocks
         } else
         if(uvRotateWest == 2)
         {
-            d3 = tex.getSubIconU(1 - block.maxY);
-            d5 = tex.getSubIconV(block.minX);
-            d4 = tex.getSubIconU(1 - block.minY);
-            d6 = tex.getSubIconV(block.maxX);
+            d3 = tex.getSubIconU(1 - bounds.maxY);
+            d5 = tex.getSubIconV(bounds.minX);
+            d4 = tex.getSubIconU(1 - bounds.minY);
+            d6 = tex.getSubIconV(bounds.maxX);
             d8 = d4;
             d9 = d3;
             d3 = d8;
@@ -761,20 +764,20 @@ public class RenderBlocks
         } else
         if(uvRotateWest == 3)
         {
-            d3 = tex.getSubIconU(1 - block.minX);
-            d4 = tex.getSubIconU(1 - block.maxX);
-            d5 = tex.getSubIconV(block.maxY);
-            d6 = tex.getSubIconV(block.minY);
+            d3 = tex.getSubIconU(1 - bounds.minX);
+            d4 = tex.getSubIconU(1 - bounds.maxX);
+            d5 = tex.getSubIconV(bounds.maxY);
+            d6 = tex.getSubIconV(bounds.minY);
             d8 = d4;
             d9 = d3;
             d10 = d5;
             d11 = d6;
         }
-        double x0 = x + block.minX;
-        double x1 = x + block.maxX;
-        double y0 = y + block.minY;
-        double y1 = y + block.maxY;
-        double z0 = z + block.maxZ;
+        double x0 = x + bounds.minX;
+        double x1 = x + bounds.maxX;
+        double y0 = y + bounds.minY;
+        double y1 = y + bounds.maxY;
+        double z0 = z + bounds.maxZ;
         if(enableAO)
         {
         	if(LightmapHelper.isLightmapEnabled()) tessellator.setLightmapCoord(lightmapCoordTopLeft);
@@ -798,26 +801,26 @@ public class RenderBlocks
         }
     }
 
-    public void renderWestFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex)
+    public void renderWestFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex)
     {
         if(overrideBlockTexture != null) tex = overrideBlockTexture;
         if (tex == null) return;
-        double d3 = tex.getSubIconU(block.minZ);
-        double d4 = tex.getSubIconU(block.maxZ);
-        double d5 = tex.getSubIconV(1 - block.maxY);
-        double d6 = tex.getSubIconV(1 - block.minY);
+        double d3 = tex.getSubIconU(bounds.minZ);
+        double d4 = tex.getSubIconU(bounds.maxZ);
+        double d5 = tex.getSubIconV(1 - bounds.maxY);
+        double d6 = tex.getSubIconV(1 - bounds.minY);
         if(flipTexture)
         {
             double d7 = d3;
             d3 = d4;
             d4 = d7;
         }
-        if(block.minZ < 0.0D || block.maxZ > 1.0D)
+        if(bounds.minZ < 0.0D || bounds.maxZ > 1.0D)
         {
             d3 = tex.getIconUMin();
             d4 = tex.getIconUMax();
         }
-        if(block.minY < 0.0D || block.maxY > 1.0D)
+        if(bounds.minY < 0.0D || bounds.maxY > 1.0D)
         {
             d5 = tex.getIconVMin();
             d6 = tex.getIconVMax();
@@ -828,10 +831,10 @@ public class RenderBlocks
         double d11 = d6;
         if(uvRotateNorth == 1)
         {
-            d3 = tex.getSubIconU(block.minY);
-            d5 = tex.getSubIconV(1 - block.maxZ);
-            d4 = tex.getSubIconU(block.maxY);
-            d6 = tex.getSubIconV(1 - block.minZ);
+            d3 = tex.getSubIconU(bounds.minY);
+            d5 = tex.getSubIconV(1 - bounds.maxZ);
+            d4 = tex.getSubIconU(bounds.maxY);
+            d6 = tex.getSubIconV(1 - bounds.minZ);
             d10 = d5;
             d11 = d6;
             d8 = d3;
@@ -841,10 +844,10 @@ public class RenderBlocks
         } else
         if(uvRotateNorth == 2)
         {
-            d3 = tex.getSubIconU(1 - block.maxY);
-            d5 = tex.getSubIconV(block.minZ);
-            d4 = tex.getSubIconU(1 - block.minY);
-            d6 = tex.getSubIconV(block.maxZ);
+            d3 = tex.getSubIconU(1 - bounds.maxY);
+            d5 = tex.getSubIconV(bounds.minZ);
+            d4 = tex.getSubIconU(1 - bounds.minY);
+            d6 = tex.getSubIconV(bounds.maxZ);
             d8 = d4;
             d9 = d3;
             d3 = d8;
@@ -854,20 +857,20 @@ public class RenderBlocks
         } else
         if(uvRotateNorth == 3)
         {
-            d3 = tex.getSubIconU(1 - block.minZ);
-            d4 = tex.getSubIconU(1 - block.maxZ);
-            d5 = tex.getSubIconV(block.maxY);
-            d6 = tex.getSubIconV(block.minY);
+            d3 = tex.getSubIconU(1 - bounds.minZ);
+            d4 = tex.getSubIconU(1 - bounds.maxZ);
+            d5 = tex.getSubIconV(bounds.maxY);
+            d6 = tex.getSubIconV(bounds.minY);
             d8 = d4;
             d9 = d3;
             d10 = d5;
             d11 = d6;
         }
-        double d12 = x + block.minX;
-        double d13 = y + block.minY;
-        double d14 = y + block.maxY;
-        double d15 = z + block.minZ;
-        double d16 = z + block.maxZ;
+        double d12 = x + bounds.minX;
+        double d13 = y + bounds.minY;
+        double d14 = y + bounds.maxY;
+        double d15 = z + bounds.minZ;
+        double d16 = z + bounds.maxZ;
         if(enableAO)
         {
         	if(LightmapHelper.isLightmapEnabled()) tessellator.setLightmapCoord(lightmapCoordTopLeft);
@@ -891,26 +894,26 @@ public class RenderBlocks
         }
     }
 
-    public void renderEastFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex)
+    public void renderEastFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex)
     {
         if(overrideBlockTexture != null) tex = overrideBlockTexture;
         if (tex == null) return;
-        double uMin = tex.getSubIconU(block.minZ);
-        double uMax = tex.getSubIconU(block.maxZ);
-        double vMin = tex.getSubIconV(1 - block.maxY);
-        double vMax = tex.getSubIconV(1 - block.minY);
+        double uMin = tex.getSubIconU(bounds.minZ);
+        double uMax = tex.getSubIconU(bounds.maxZ);
+        double vMin = tex.getSubIconV(1 - bounds.maxY);
+        double vMax = tex.getSubIconV(1 - bounds.minY);
         if(flipTexture)
         {
             double _uMin = uMin;
             uMin = uMax;
             uMax = _uMin;
         }
-        if(block.minZ < 0.0D || block.maxZ > 1.0D)
+        if(bounds.minZ < 0.0D || bounds.maxZ > 1.0D)
         {
             uMin = tex.getIconUMin();
             uMax = tex.getIconUMax();
         }
-        if(block.minY < 0.0D || block.maxY > 1.0D)
+        if(bounds.minY < 0.0D || bounds.maxY > 1.0D)
         {
             vMin = tex.getIconVMin();
             vMax = tex.getIconVMax();
@@ -921,10 +924,10 @@ public class RenderBlocks
         double vMax2 = vMax;
         if(uvRotateSouth == 2)
         {
-            uMin = tex.getSubIconU(block.minY);
-            vMin = tex.getSubIconV(1 - block.minZ);
-            uMax = tex.getSubIconU(block.maxY);
-            vMax = tex.getSubIconV(1 - block.maxZ);
+            uMin = tex.getSubIconU(bounds.minY);
+            vMin = tex.getSubIconV(1 - bounds.minZ);
+            uMax = tex.getSubIconU(bounds.maxY);
+            vMax = tex.getSubIconV(1 - bounds.maxZ);
             vMin2 = vMin;
             vMax2 = vMax;
             uMax2 = uMin;
@@ -934,10 +937,10 @@ public class RenderBlocks
         } else
         if(uvRotateSouth == 1)
         {
-            uMin = tex.getSubIconU(1 - block.maxY);
-            vMin = tex.getSubIconV(block.maxZ);
-            uMax = tex.getSubIconU(1 - block.minY);
-            vMax = tex.getSubIconV(block.minZ);
+            uMin = tex.getSubIconU(1 - bounds.maxY);
+            vMin = tex.getSubIconV(bounds.maxZ);
+            uMax = tex.getSubIconU(1 - bounds.minY);
+            vMax = tex.getSubIconV(bounds.minZ);
             uMax2 = uMax;
             uMin2 = uMin;
             uMin = uMax2;
@@ -947,20 +950,20 @@ public class RenderBlocks
         } else
         if(uvRotateSouth == 3)
         {
-            uMin = tex.getSubIconU(1 - block.minZ);
-            uMax = tex.getSubIconU(1 - block.maxZ);
-            vMin = tex.getSubIconV(block.maxY);
-            vMax = tex.getSubIconV(block.minY);
+            uMin = tex.getSubIconU(1 - bounds.minZ);
+            uMax = tex.getSubIconU(1 - bounds.maxZ);
+            vMin = tex.getSubIconV(bounds.maxY);
+            vMax = tex.getSubIconV(bounds.minY);
             uMax2 = uMax;
             uMin2 = uMin;
             vMin2 = vMin;
             vMax2 = vMax;
         }
-        double xMax = x + block.maxX;
-        double yMin = y + block.minY;
-        double yMax = y + block.maxY;
-        double zMin = z + block.minZ;
-        double zMax = z + block.maxZ;
+        double xMax = x + bounds.maxX;
+        double yMin = y + bounds.minY;
+        double yMax = y + bounds.maxY;
+        double zMin = z + bounds.minZ;
+        double zMax = z + bounds.maxZ;
 
         if(enableAO)
         {
@@ -985,9 +988,9 @@ public class RenderBlocks
         }
     }
 
-    public void renderBlockAsItem(Tessellator tessellator, BlockModel<?> blockModel, Block block, float var2)
+    public void renderBlockAsItem(Tessellator tessellator, BlockModel<?> blockModel, float var2)
     {
-        blockModel.setBlockBoundsForItemRender();
+        AABB bounds = blockModel.getBlockBoundsForItemRender();
         GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
         float var5 = 0.5F;
         float var6 = 1.0F;
@@ -995,15 +998,15 @@ public class RenderBlocks
         float var8 = 0.6F;
         tessellator.startDrawingQuads();
         tessellator.setColorRGBA_F(var6, var6, var6, var2);
-        this.renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.BOTTOM, 0));
+        this.renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.BOTTOM, 0));
         tessellator.setColorRGBA_F(var5, var5, var5, var2);
-        this.renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.TOP, 0));
+        this.renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.TOP, 0));
         tessellator.setColorRGBA_F(var7, var7, var7, var2);
-        this.renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.NORTH, 0));
-        this.renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.SOUTH, 0));
+        this.renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.NORTH, 0));
+        this.renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.SOUTH, 0));
         tessellator.setColorRGBA_F(var8, var8, var8, var2);
-        this.renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.WEST, 0));
-        this.renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.EAST, 0));
+        this.renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.WEST, 0));
+        this.renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, blockModel.getBlockTextureFromSideAndMetadata(Side.EAST, 0));
         tessellator.draw();
         GL11.glTranslatef(0.5F, 0.5F, 0.5F);
     }
diff --git a/src/main/java/net/minecraft/client/render/RenderGlobal.java b/game/client/src/main/java/net/minecraft/client/render/RenderGlobal.java
similarity index 99%
rename from src/main/java/net/minecraft/client/render/RenderGlobal.java
rename to game/client/src/main/java/net/minecraft/client/render/RenderGlobal.java
index 650671495..b54465e5e 100644
--- a/src/main/java/net/minecraft/client/render/RenderGlobal.java
+++ b/game/client/src/main/java/net/minecraft/client/render/RenderGlobal.java
@@ -1300,7 +1300,7 @@ public class RenderGlobal
             GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F);
             GL11.glPushMatrix();
             int k = worldObj.getBlockId(hitResult.x, hitResult.y, hitResult.z);
-            Block block = k <= 0 ? null : Block.blocksList[k];
+            Block block = k <= 0 ? null : Blocks.blocksList[k];
             GL11.glDisable(GL11.GL_ALPHA_TEST);
             GL11.glPolygonOffset(-3F, -3F);
             GL11.glEnable(32823 /*GL_POLYGON_OFFSET_FILL*/);
@@ -1355,15 +1355,14 @@ public class RenderGlobal
                 int j = worldObj.getBlockId(hitResult.x, hitResult.y, hitResult.z);
                 if(j > 0)
                 {
-                    BoundingVolume volume = Block.blocksList[j].getBoundingVolume(worldObj, hitResult.x, hitResult.y, hitResult.z);
+                    BoundingVolume volume = Blocks.blocksList[j].getBoundingVolume(worldObj, hitResult.x, hitResult.y, hitResult.z);
                     if (volume != null)
                     {
                         drawOutlinedVolume(volume, hitResult.x - offsetX, hitResult.y - offsetY, hitResult.z - offsetZ, expand);
                     }
                     else
                     {
-                        Block.blocksList[j].setBlockBoundsBasedOnState(worldObj, hitResult.x, hitResult.y, hitResult.z);
-                        drawOutlinedBoundingBox(Block.blocksList[j].getSelectedBoundingBoxFromPool(worldObj, hitResult.x, hitResult.y, hitResult.z).grow(expand, expand, expand).cloneMove(-offsetX, -offsetY, -offsetZ));
+                        drawOutlinedBoundingBox(Blocks.blocksList[j].getSelectedBoundingBoxFromPool(worldObj, hitResult.x, hitResult.y, hitResult.z).grow(expand, expand, expand).cloneMove(-offsetX, -offsetY, -offsetZ));
                     }
                 }
             }
@@ -1735,7 +1734,7 @@ public class RenderGlobal
 
             case EVENT_BLOCK_BREAK: // Block break effect
                 if(data > 0) {
-                    Block block = Block.blocksList[data];
+                    Block block = Blocks.blocksList[data];
 
                     worldObj.playBlockSoundEffect(null, (float)x + 0.5F, (float)y + 0.5F, (float)z + 0.5F, block, EnumBlockSoundEffectType.MINE);
                 }
diff --git a/src/main/java/net/minecraft/client/render/Renderer.java b/game/client/src/main/java/net/minecraft/client/render/Renderer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/Renderer.java
rename to game/client/src/main/java/net/minecraft/client/render/Renderer.java
diff --git a/src/main/java/net/minecraft/client/render/Scissor.java b/game/client/src/main/java/net/minecraft/client/render/Scissor.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/Scissor.java
rename to game/client/src/main/java/net/minecraft/client/render/Scissor.java
diff --git a/src/main/java/net/minecraft/client/render/TextureManager.java b/game/client/src/main/java/net/minecraft/client/render/TextureManager.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/TextureManager.java
rename to game/client/src/main/java/net/minecraft/client/render/TextureManager.java
diff --git a/src/main/java/net/minecraft/client/render/Vertex.java b/game/client/src/main/java/net/minecraft/client/render/Vertex.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/Vertex.java
rename to game/client/src/main/java/net/minecraft/client/render/Vertex.java
diff --git a/src/main/java/net/minecraft/client/render/WorldRenderer.java b/game/client/src/main/java/net/minecraft/client/render/WorldRenderer.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/WorldRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/WorldRenderer.java
index 4e3219d1e..b69e8554a 100644
--- a/src/main/java/net/minecraft/client/render/WorldRenderer.java
+++ b/game/client/src/main/java/net/minecraft/client/render/WorldRenderer.java
@@ -7,6 +7,7 @@ import java.util.Random;
 
 import com.mojang.logging.LogUtils;
 import net.minecraft.client.render.worldtype.WorldTypeFXDispatcher;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.entity.Mob;
 import net.minecraft.core.util.phys.Vec3;
 import org.lwjgl.input.Mouse;
@@ -133,7 +134,7 @@ public class WorldRenderer
 		Vec3 pos2 = pos1.add(look.x * blockReach, look.y * blockReach, look.z * blockReach);
 		
 		// Raytrace blocks
-		mc.objectMouseOver = mc.currentWorld.checkBlockCollisionBetweenPoints(pos1, pos2);
+		mc.objectMouseOver = mc.currentWorld.checkBlockCollisionBetweenPoints(pos1, pos2, false, false, true);
 		
 		// Calculate again because block raytrace changes the values
 		pos1 = mc.thePlayer.getPosition(partialTicks, false);
@@ -806,18 +807,18 @@ public class WorldRenderer
             {
                 continue;
             }
-            if(Block.blocksList[i2].blockMaterial == Material.lava)
+            if(Blocks.blocksList[i2].blockMaterial == Material.lava)
             {
-                mc.particleEngine.add(new ParticleSmoke(world, (float)randX + f1, (double)((float)y + 0.1F) - Block.blocksList[i2].minY, (float)randZ + f2, 0.0D, 0.0D, 0.0D));
+                mc.particleEngine.add(new ParticleSmoke(world, (float)randX + f1, (double)((float)y + 0.1F) - Blocks.blocksList[i2].getBounds().minY, (float)randZ + f2, 0.0D, 0.0D, 0.0D));
                 continue;
             }
             if(random.nextInt(++l) == 0)
             {
                 d = (float)randX + f1;
-                d1 = (double)((float)y + 0.1F) - Block.blocksList[i2].minY;
+                d1 = (double)((float)y + 0.1F) - Blocks.blocksList[i2].getBounds().minY;
                 d2 = (float)randZ + f2;
             }
-            mc.particleEngine.add(new ParticleWaterDrop(world, (float)randX + f1, (double)((float)y + 0.1F) - Block.blocksList[i2].minY, (float)randZ + f2));
+            mc.particleEngine.add(new ParticleWaterDrop(world, (float)randX + f1, (double)((float)y + 0.1F) - Blocks.blocksList[i2].getBounds().minY, (float)randZ + f2));
         }
 
         if(l > 0 && random.nextInt(3) < rainSoundCounter++)
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColor.java b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColor.java
similarity index 96%
rename from src/main/java/net/minecraft/client/render/block/color/BlockColor.java
rename to game/client/src/main/java/net/minecraft/client/render/block/color/BlockColor.java
index b9036f77c..c25805577 100644
--- a/src/main/java/net/minecraft/client/render/block/color/BlockColor.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColor.java
@@ -1,10 +1,10 @@
-package net.minecraft.client.render.block.color;
-
-import net.minecraft.core.world.WorldSource;
-
-public abstract class BlockColor
-{
-    public abstract int getFallbackColor(int meta);
-
-    public abstract int getWorldColor(WorldSource world, int x, int y, int z);
-}
+package net.minecraft.client.render.block.color;
+
+import net.minecraft.core.world.WorldSource;
+
+public abstract class BlockColor
+{
+    public abstract int getFallbackColor(int meta);
+
+    public abstract int getWorldColor(WorldSource world, int x, int y, int z);
+}
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorCustom.java b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorCustom.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/color/BlockColorCustom.java
rename to game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorCustom.java
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorDefault.java b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorDefault.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/color/BlockColorDefault.java
rename to game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorDefault.java
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorDispatcher.java b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorDispatcher.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/block/color/BlockColorDispatcher.java
rename to game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorDispatcher.java
index 7fac7461f..5a9c764dc 100644
--- a/src/main/java/net/minecraft/client/render/block/color/BlockColorDispatcher.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorDispatcher.java
@@ -1,50 +1,50 @@
-package net.minecraft.client.render.block.color;
-
-import net.minecraft.client.render.colorizer.Colorizers;
-import net.minecraft.client.util.dispatch.Dispatcher;
-import net.minecraft.core.block.Block;
-import net.minecraft.core.block.Blocks;
-
-public final class BlockColorDispatcher
-    extends Dispatcher<Block, BlockColor>
-{
-    private static final BlockColorDispatcher instance = new BlockColorDispatcher();
-    private static final BlockColor defaultColor = new BlockColorDefault();
-
-    public static BlockColorDispatcher getInstance()
-    {
-        return instance;
-    }
-
-    private BlockColorDispatcher()
-    {
-        addDispatch(Blocks.ALGAE, new BlockColorCustom(Colorizers.grass));
-        addDispatch(Blocks.FLUID_WATER_STILL, new BlockColorWater(Colorizers.water));
-        addDispatch(Blocks.FLUID_WATER_FLOWING, new BlockColorWater(Colorizers.water));
-        addDispatch(Blocks.GRASS, new BlockColorCustom(Colorizers.grass));
-        addDispatch(Blocks.LAYER_LEAVES_OAK, new BlockColorCustom(Colorizers.oak));
-        addDispatch(Blocks.LEAVES_BIRCH, new BlockColorCustom(Colorizers.birch));
-        addDispatch(Blocks.LEAVES_CHERRY, new BlockColorCustom(Colorizers.cherry));
-        addDispatch(Blocks.LEAVES_CHERRY_FLOWERING, new BlockColorCustom(Colorizers.cherry));
-        addDispatch(Blocks.LEAVES_EUCALYPTUS, new BlockColorCustom(Colorizers.eucalyptus));
-        addDispatch(Blocks.LEAVES_CACAO, new BlockColorCustom(Colorizers.cacao));
-        addDispatch(Blocks.LEAVES_OAK, new BlockColorCustom(Colorizers.oak));
-        addDispatch(Blocks.LEAVES_PINE, new BlockColorCustom(Colorizers.pine));
-        addDispatch(Blocks.LEAVES_SHRUB, new BlockColorCustom(Colorizers.shrub));
-        addDispatch(Blocks.LEAVES_THORN, new BlockColorCustom(Colorizers.thorn));
-        addDispatch(Blocks.LEAVES_PALM, new BlockColorCustom(Colorizers.palm));
-        addDispatch(Blocks.MOSS_STONE, new BlockColorCustom(Colorizers.grass));
-        addDispatch(Blocks.MOSS_BASALT, new BlockColorCustom(Colorizers.grass));
-        addDispatch(Blocks.MOSS_LIMESTONE, new BlockColorCustom(Colorizers.grass));
-        addDispatch(Blocks.MOSS_GRANITE, new BlockColorCustom(Colorizers.grass));
-        addDispatch(Blocks.WIRE_REDSTONE, new BlockColorWireRedstone());
-        addDispatch(Blocks.TALLGRASS, new BlockColorCustom(Colorizers.grass));
-        addDispatch(Blocks.TALLGRASS_FERN, new BlockColorCustom(Colorizers.grass));
-    }
-
-    @Override
-    protected BlockColor getDefault()
-    {
-        return defaultColor;
-    }
-}
+package net.minecraft.client.render.block.color;
+
+import net.minecraft.client.render.colorizer.Colorizers;
+import net.minecraft.client.util.dispatch.Dispatcher;
+import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
+
+public final class BlockColorDispatcher
+    extends Dispatcher<Block, BlockColor>
+{
+    private static final BlockColorDispatcher instance = new BlockColorDispatcher();
+    private static final BlockColor defaultColor = new BlockColorDefault();
+
+    public static BlockColorDispatcher getInstance()
+    {
+        return instance;
+    }
+
+    private BlockColorDispatcher()
+    {
+        addDispatch(Blocks.ALGAE, new BlockColorCustom(Colorizers.grass));
+        addDispatch(Blocks.FLUID_WATER_STILL, new BlockColorWater(Colorizers.water));
+        addDispatch(Blocks.FLUID_WATER_FLOWING, new BlockColorWater(Colorizers.water));
+        addDispatch(Blocks.GRASS, new BlockColorCustom(Colorizers.grass));
+        addDispatch(Blocks.LAYER_LEAVES_OAK, new BlockColorCustom(Colorizers.oak));
+        addDispatch(Blocks.LEAVES_BIRCH, new BlockColorCustom(Colorizers.birch));
+        addDispatch(Blocks.LEAVES_CHERRY, new BlockColorCustom(Colorizers.cherry));
+        addDispatch(Blocks.LEAVES_CHERRY_FLOWERING, new BlockColorCustom(Colorizers.cherry));
+        addDispatch(Blocks.LEAVES_EUCALYPTUS, new BlockColorCustom(Colorizers.eucalyptus));
+        addDispatch(Blocks.LEAVES_CACAO, new BlockColorCustom(Colorizers.cacao));
+        addDispatch(Blocks.LEAVES_OAK, new BlockColorCustom(Colorizers.oak));
+        addDispatch(Blocks.LEAVES_PINE, new BlockColorCustom(Colorizers.pine));
+        addDispatch(Blocks.LEAVES_SHRUB, new BlockColorCustom(Colorizers.shrub));
+        addDispatch(Blocks.LEAVES_THORN, new BlockColorCustom(Colorizers.thorn));
+        addDispatch(Blocks.LEAVES_PALM, new BlockColorCustom(Colorizers.palm));
+        addDispatch(Blocks.MOSS_STONE, new BlockColorCustom(Colorizers.grass));
+        addDispatch(Blocks.MOSS_BASALT, new BlockColorCustom(Colorizers.grass));
+        addDispatch(Blocks.MOSS_LIMESTONE, new BlockColorCustom(Colorizers.grass));
+        addDispatch(Blocks.MOSS_GRANITE, new BlockColorCustom(Colorizers.grass));
+        addDispatch(Blocks.WIRE_REDSTONE, new BlockColorWireRedstone());
+        addDispatch(Blocks.TALLGRASS, new BlockColorCustom(Colorizers.grass));
+        addDispatch(Blocks.TALLGRASS_FERN, new BlockColorCustom(Colorizers.grass));
+    }
+
+    @Override
+    protected BlockColor getDefault()
+    {
+        return defaultColor;
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorLeavesOak.java b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorLeavesOak.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/color/BlockColorLeavesOak.java
rename to game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorLeavesOak.java
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorPortal.java b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorPortal.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/color/BlockColorPortal.java
rename to game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorPortal.java
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorTallGrass.java b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorTallGrass.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/color/BlockColorTallGrass.java
rename to game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorTallGrass.java
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java
rename to game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorWater.java
diff --git a/src/main/java/net/minecraft/client/render/block/color/BlockColorWireRedstone.java b/game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorWireRedstone.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/color/BlockColorWireRedstone.java
rename to game/client/src/main/java/net/minecraft/client/render/block/color/BlockColorWireRedstone.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModel.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModel.java
similarity index 68%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModel.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModel.java
index 02887fe03..8ba0c6fb7 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModel.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModel.java
@@ -1,129 +1,136 @@
-package net.minecraft.client.render.block.model;
-
-import net.minecraft.client.render.RenderBlocks;
-import net.minecraft.client.render.texture.stitcher.IconCoordinate;
-import net.minecraft.client.render.tessellator.Tessellator;
-import net.minecraft.core.block.Block;
-import net.minecraft.core.util.helper.Side;
-import net.minecraft.core.world.WorldSource;
-import org.jetbrains.annotations.Nullable;
-
-public abstract class BlockModel<T extends Block>
-{
-    public static RenderBlocks renderBlocks;
-    public final T block;
-    protected boolean hasOverbright = false;
-    public BlockModel(Block block){
-        this.block = (T) block;
-    }
-    public abstract boolean render(Tessellator tessellator, int x, int y, int z);
-    public boolean renderNoCulling(Tessellator tessellator, int x, int y, int z) {
-        renderBlocks.renderAllFaces = true;
-        boolean result = render(tessellator, x, y, z);
-        renderBlocks.renderAllFaces = false;
-        return result;
-    }
-    public boolean renderWithOverrideTexture(Tessellator tessellator, int x, int y, int z, IconCoordinate textureIndex) {
-        renderBlocks.overrideBlockTexture = textureIndex;
-        boolean result = render(tessellator, x, y, z);
-        renderBlocks.overrideBlockTexture = null;
-        return result;
-    }
-    public void renderBlockOnInventory(Tessellator tessellator, int metadata, float brightness, @Nullable Integer lightmapCoordinate){
-        renderBlockOnInventory(tessellator, metadata, brightness, 1f, lightmapCoordinate);
-    }
-    public abstract void renderBlockOnInventory(Tessellator tessellator, int metadata, float brightness, float alpha, @Nullable Integer lightmapCoordinate);
-    public abstract boolean shouldItemRender3d();
-    public abstract float getItemRenderScale();
-
-    public abstract IconCoordinate getBlockTexture(WorldSource blockAccess, int x, int y, int z, Side side);
-    public abstract IconCoordinate getBlockOverbrightTexture(WorldSource blockAccess, int x, int y, int z, int side);
-    public abstract IconCoordinate getBlockOverbrightTextureFromSideAndMeta(Side side, int data);
-    public abstract IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data);
-    public abstract IconCoordinate getParticleTexture(Side side, int meta);
-    public abstract boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side, int meta);
-    public abstract boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side);
-    public abstract boolean shouldSideBeColored(WorldSource blockAccess, int x, int y, int z, int side, int meta);
-    public void setBlockBoundsForItemRender(){}
-    public boolean hasOverbright(){
-        return hasOverbright;
-    }
-    // Everything below is utility
-    public static void setRenderBlocks(RenderBlocks rb)
-    {
-        renderBlocks = rb;
-    }
-    public void resetRenderBlocks(){
-        renderBlocks.renderAllFaces = false;
-        renderBlocks.enableAO = false;
-//        renderBlocks.overbright = false;
-        renderBlocks.useInventoryTint = true;
-        renderBlocks.flipTexture = false;
-        renderBlocks.overrideBlockTexture = null;
-        renderBlocks.uvRotateEast = 0;
-        renderBlocks.uvRotateWest = 0;
-        renderBlocks.uvRotateSouth = 0;
-        renderBlocks.uvRotateNorth = 0;
-        renderBlocks.uvRotateTop = 0;
-        renderBlocks.uvRotateBottom = 0;
-        renderBlocks.field_22352_G = 1;
-        renderBlocks.renderBitMask = 0;
-    }
-    public void setRenderSide(Side side, boolean shouldRender){
-        if (!shouldRender){
-            renderBlocks.renderBitMask |= (byte) (1 << side.getId());
-        } else {
-            renderBlocks.renderBitMask &= (byte) ~(1 << side.getId());
-        }
-    }
-    public float getBlockBrightness(WorldSource blockAccess, int x, int y, int z){
-        return renderBlocks.getBlockBrightness(blockAccess, x, y ,z);
-    }
-
-    public final boolean renderStandardBlock(Tessellator tessellator, Block block, int x, int y, int z){
-        return renderBlocks.renderStandardBlock(tessellator, (BlockModel<Block>) this, block, x, y, z);
-    }
-    public final boolean renderStandardBlock(Tessellator tessellator, Block block, int x, int y, int z, float r, float g, float b){
-        return renderBlocks.renderStandardBlock(tessellator, (BlockModel<Block>) this, block, x, y, z, r, g, b);
-    }
-    public final boolean renderSide(Tessellator tessellator, Block block, int x, int y, int z, Side side, int meta){
-        return renderBlocks.renderSide(tessellator, (BlockModel<Block>) this, block, x, y, z, 1, 1, 1, side, meta);
-    }
-    public final boolean renderSide(Tessellator tessellator, Block block, int x, int y, int z, float r, float g, float b, Side side, int meta){
-        return renderBlocks.renderSide(tessellator, (BlockModel<Block>) this, block, x, y, z, r, g, b, side, meta);
-    }
-    public final boolean renderSide(Tessellator tessellator, Block block, int x, int y, int z, float r, float g, float b, int side, int meta,
-                                    int dirX, int dirY, int dirZ, float depth,
-                                    int topX, int topY, int topZ, float topP, float botP,
-                                    int lefX, int lefY, int lefZ, float lefP, float rigP
-    ){
-        return renderBlocks.renderSide(tessellator, (BlockModel<Block>) this, block, x, y, z, r, g, b, side, meta,
-                dirX, dirY, dirZ, depth,
-                topX, topY, topZ, topP, botP,
-                lefX, lefY, lefZ, lefP, rigP);
-    }
-
-    public final void renderBottomFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex){
-        renderBlocks.renderBottomFace(tessellator, block, x, y, z, tex);
-    }
-
-    public final void renderTopFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex){
-        renderBlocks.renderTopFace(tessellator, block, x, y, z, tex);
-    }
-
-    public final void renderNorthFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex){
-        renderBlocks.renderNorthFace(tessellator, block, x, y, z, tex);
-    }
-
-    public final void renderSouthFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex){
-        renderBlocks.renderSouthFace(tessellator, block, x, y, z, tex);
-    }
-
-    public final void renderWestFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex){
-        renderBlocks.renderWestFace(tessellator, block, x, y, z, tex);
-    }
-
-    public final void renderEastFace(Tessellator tessellator, Block block, double x, double y, double z, IconCoordinate tex){
-        renderBlocks.renderEastFace(tessellator, block, x, y, z, tex);
-    }
-}
+package net.minecraft.client.render.block.model;
+
+import net.minecraft.client.render.RenderBlocks;
+import net.minecraft.client.render.texture.stitcher.IconCoordinate;
+import net.minecraft.client.render.tessellator.Tessellator;
+import net.minecraft.core.block.Block;
+import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
+import net.minecraft.core.world.WorldSource;
+import org.jetbrains.annotations.Nullable;
+
+public abstract class BlockModel<T extends Block>
+{
+    public static RenderBlocks renderBlocks;
+    public final T block;
+    protected boolean hasOverbright = false;
+    public BlockModel(Block block){
+        this.block = (T) block;
+    }
+    public abstract boolean render(Tessellator tessellator, int x, int y, int z);
+    public boolean renderNoCulling(Tessellator tessellator, int x, int y, int z) {
+        renderBlocks.renderAllFaces = true;
+        boolean result = render(tessellator, x, y, z);
+        renderBlocks.renderAllFaces = false;
+        return result;
+    }
+    public boolean renderWithOverrideTexture(Tessellator tessellator, int x, int y, int z, IconCoordinate textureIndex) {
+        renderBlocks.overrideBlockTexture = textureIndex;
+        boolean result = render(tessellator, x, y, z);
+        renderBlocks.overrideBlockTexture = null;
+        return result;
+    }
+    public void renderBlockOnInventory(Tessellator tessellator, int metadata, float brightness, @Nullable Integer lightmapCoordinate){
+        renderBlockOnInventory(tessellator, metadata, brightness, 1f, lightmapCoordinate);
+    }
+    public abstract void renderBlockOnInventory(Tessellator tessellator, int metadata, float brightness, float alpha, @Nullable Integer lightmapCoordinate);
+    public abstract boolean shouldItemRender3d();
+    public abstract float getItemRenderScale();
+
+    public int renderLayer() {
+        return 0;
+    }
+
+    public abstract IconCoordinate getBlockTexture(WorldSource blockAccess, int x, int y, int z, Side side);
+    public abstract IconCoordinate getBlockOverbrightTexture(WorldSource blockAccess, int x, int y, int z, int side);
+    public abstract IconCoordinate getBlockOverbrightTextureFromSideAndMeta(Side side, int data);
+    public abstract IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data);
+    public abstract IconCoordinate getParticleTexture(Side side, int meta);
+    public abstract boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side, int meta);
+    public abstract boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side);
+    public abstract boolean shouldSideBeColored(WorldSource blockAccess, int x, int y, int z, int side, int meta);
+    public AABB getBlockBoundsForItemRender(){
+        return block.getBounds();
+    }
+    public boolean hasOverbright(){
+        return hasOverbright;
+    }
+    // Everything below is utility
+    public static void setRenderBlocks(RenderBlocks rb)
+    {
+        renderBlocks = rb;
+    }
+    public void resetRenderBlocks(){
+        renderBlocks.renderAllFaces = false;
+        renderBlocks.enableAO = false;
+//        renderBlocks.overbright = false;
+        renderBlocks.useInventoryTint = true;
+        renderBlocks.flipTexture = false;
+        renderBlocks.overrideBlockTexture = null;
+        renderBlocks.uvRotateEast = 0;
+        renderBlocks.uvRotateWest = 0;
+        renderBlocks.uvRotateSouth = 0;
+        renderBlocks.uvRotateNorth = 0;
+        renderBlocks.uvRotateTop = 0;
+        renderBlocks.uvRotateBottom = 0;
+        renderBlocks.field_22352_G = 1;
+        renderBlocks.renderBitMask = 0;
+    }
+    public void setRenderSide(Side side, boolean shouldRender){
+        if (!shouldRender){
+            renderBlocks.renderBitMask |= (byte) (1 << side.getId());
+        } else {
+            renderBlocks.renderBitMask &= (byte) ~(1 << side.getId());
+        }
+    }
+    public float getBlockBrightness(WorldSource blockAccess, int x, int y, int z){
+        return renderBlocks.getBlockBrightness(blockAccess, x, y ,z);
+    }
+
+    public final boolean renderStandardBlock(Tessellator tessellator, AABB bounds, int x, int y, int z){
+        return renderBlocks.renderStandardBlock(tessellator, (BlockModel<Block>) this, bounds, x, y, z);
+    }
+    public final boolean renderStandardBlock(Tessellator tessellator, AABB bounds, int x, int y, int z, float r, float g, float b){
+        return renderBlocks.renderStandardBlock(tessellator, (BlockModel<Block>) this, bounds, x, y, z, r, g, b);
+    }
+    public final boolean renderSide(Tessellator tessellator,  AABB bounds, int x, int y, int z, Side side, int meta){
+        return renderBlocks.renderSide(tessellator, (BlockModel<Block>) this, bounds, x, y, z, 1, 1, 1, side, meta);
+    }
+    public final boolean renderSide(Tessellator tessellator,  AABB bounds, int x, int y, int z, float r, float g, float b, Side side, int meta){
+        return renderBlocks.renderSide(tessellator, (BlockModel<Block>) this, bounds, x, y, z, r, g, b, side, meta);
+    }
+    public final boolean renderSide(Tessellator tessellator,  AABB bounds, int x, int y, int z, float r, float g, float b, int side, int meta,
+                                    int dirX, int dirY, int dirZ, float depth,
+                                    int topX, int topY, int topZ, float topP, float botP,
+                                    int lefX, int lefY, int lefZ, float lefP, float rigP
+    ){
+        return renderBlocks.renderSide(tessellator, (BlockModel<Block>) this, bounds, x, y, z, r, g, b, side, meta,
+                dirX, dirY, dirZ, depth,
+                topX, topY, topZ, topP, botP,
+                lefX, lefY, lefZ, lefP, rigP);
+    }
+
+    public final void renderBottomFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex){
+        renderBlocks.renderBottomFace(tessellator, bounds, x, y, z, tex);
+    }
+
+    public final void renderTopFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex){
+        renderBlocks.renderTopFace(tessellator, bounds, x, y, z, tex);
+    }
+
+    public final void renderNorthFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex){
+        renderBlocks.renderNorthFace(tessellator, bounds, x, y, z, tex);
+    }
+
+    public final void renderSouthFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex){
+        renderBlocks.renderSouthFace(tessellator, bounds, x, y, z, tex);
+    }
+
+    public final void renderWestFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex){
+        renderBlocks.renderWestFace(tessellator, bounds, x, y, z, tex);
+    }
+
+    public final void renderEastFace(Tessellator tessellator, AABB bounds, double x, double y, double z, IconCoordinate tex){
+        renderBlocks.renderEastFace(tessellator, bounds, x, y, z, tex);
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelActivator.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelActivator.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelActivator.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelActivator.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelAlgae.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelAlgae.java
similarity index 81%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelAlgae.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelAlgae.java
index 3e15072e2..96f9e0069 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelAlgae.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelAlgae.java
@@ -6,6 +6,7 @@ import net.minecraft.client.render.texture.stitcher.IconCoordinate;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 
 public class BlockModelAlgae<T extends Block> extends BlockModelStandard<T> {
@@ -15,7 +16,7 @@ public class BlockModelAlgae<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+        AABB bounds = block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z);
         float brightness = 1.0f;
         if(!LightmapHelper.isLightmapEnabled()) {
         	brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
@@ -30,8 +31,8 @@ public class BlockModelAlgae<T extends Block> extends BlockModelStandard<T> {
 
         tessellator.setColorOpaque_F(red * brightness, green * brightness, blue * brightness);
         IconCoordinate tex = getBlockTextureFromSideAndMetadata(Side.TOP, renderBlocks.blockAccess.getBlockMetadata(x, y, z));
-        renderTopFace(tessellator, block, x, y - 0.1125, z, tex);
-        renderBottomFace(tessellator, block, x, y + 0.0125, z, tex);
+        renderTopFace(tessellator, bounds, x, y - 0.1125, z, tex);
+        renderBottomFace(tessellator, bounds, x, y + 0.0125, z, tex);
 
         return true;
     }
@@ -40,14 +41,14 @@ public class BlockModelAlgae<T extends Block> extends BlockModelStandard<T> {
         return false;
     }
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side)
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side)
     {
         if(side == 1)
         {
             return true;
         } else
         {
-            return super.shouldSideBeRendered(blockAccess, x, y, z, side);
+            return super.shouldSideBeRendered(blockAccess, bounds, x, y, z, side);
         }
     }
 }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java
similarity index 89%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java
index 303c19775..e2d25efd2 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelAxisAligned.java
@@ -16,31 +16,30 @@ public class BlockModelAxisAligned<T extends Block> extends BlockModelStandard<T
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         Axis axis = BlockAxisAligned.metaToAxis(meta);
         switch(axis)
         {
-            case Y: // '\0'
+            case Y:
                 renderBlocks.uvRotateEast = 0;
                 renderBlocks.uvRotateWest = 0;
                 renderBlocks.uvRotateSouth = 0;
                 renderBlocks.uvRotateNorth = 0;
                 break;
 
-            case Z: // '\002'
+            case Z:
                 renderBlocks.uvRotateSouth = 1;
                 renderBlocks.uvRotateNorth = 1;
                 break;
 
-            case X: // '\002'
+            case X:
                 renderBlocks.uvRotateEast = 1;
                 renderBlocks.uvRotateWest = 1;
                 renderBlocks.uvRotateTop = 1;
                 renderBlocks.uvRotateBottom = 1;
                 break;
         }
-        renderStandardBlock(tessellator, block, x, y, z);
+        renderStandardBlock(tessellator, block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z), x, y, z);
         resetRenderBlocks();
 
         return true;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelBasket.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBasket.java
similarity index 60%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelBasket.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBasket.java
index a0efab567..59bf3ca95 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelBasket.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBasket.java
@@ -6,6 +6,7 @@ import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockBasket;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 
 public class BlockModelBasket<T extends BlockBasket> extends BlockModelStandard<T> {
     protected IconCoordinate fillTexture = TextureRegistry.getTexture("minecraft:block/basket/fill");
@@ -15,42 +16,42 @@ public class BlockModelBasket<T extends BlockBasket> extends BlockModelStandard<
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+        AABB bounds = block.getBounds();
         // Render basket
         final float onePix = 1.0f / 16;
         final float basketHeight = onePix * 16;
 
         // Basket walls
-        block.setBlockBounds(0, 0, 0, 1, onePix, 1);
-        renderStandardBlock(tessellator, block, x, y, z); // Bottom
+        bounds.set(0, 0, 0, 1, onePix, 1);
+        renderStandardBlock(tessellator, bounds, x, y, z); // Bottom
 
         setRenderSide(Side.EAST, false);
         setRenderSide(Side.WEST, false);
         setRenderSide(Side.BOTTOM, false);
-        block.setBlockBounds(0, 0, 0, 1, basketHeight, onePix);
-        renderStandardBlock(tessellator, block, x, y, z); // North
-        block.setBlockBounds(0, 0, 1 - onePix, 1, basketHeight, 1); // south
-        renderStandardBlock(tessellator, block, x, y, z); // South
+        bounds.set(0, 0, 0, 1, basketHeight, onePix);
+        renderStandardBlock(tessellator, bounds, x, y, z); // North
+        bounds.set(0, 0, 1 - onePix, 1, basketHeight, 1); // south
+        renderStandardBlock(tessellator, bounds, x, y, z); // South
         renderBlocks.renderBitMask = 0;
 
         setRenderSide(Side.NORTH, false);
         setRenderSide(Side.SOUTH, false);
         setRenderSide(Side.BOTTOM, false);
-        block.setBlockBounds(0, 0, 0, onePix, basketHeight, 1);
-        renderStandardBlock(tessellator, block, x, y, z); // West
-        block.setBlockBounds(1 - onePix, 0, 0, 1, basketHeight, 1);
-        renderStandardBlock(tessellator, block, x, y, z); // East
-        block.setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
+        bounds.set(0, 0, 0, onePix, basketHeight, 1);
+        renderStandardBlock(tessellator, bounds, x, y, z); // West
+        bounds.set(1 - onePix, 0, 0, 1, basketHeight, 1);
+        renderStandardBlock(tessellator, bounds, x, y, z); // East
+        bounds.set(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
         renderBlocks.renderBitMask = 0;
 
         final int height = block.getFillLevel(renderBlocks.blockAccess, x, y, z);
         // Interior
         if (height > 0)
         {
-            renderTopFace(tessellator, block, x, (y - 1) + onePix + onePix * height, z, fillTexture);
+            renderTopFace(tessellator, bounds, x, (y - 1) + onePix + onePix * height, z, fillTexture);
         }
 
-        block.setBlockBounds(0, 0, 0, 1, basketHeight, 1);
+        bounds.set(0, 0, 0, 1, basketHeight, 1);
 
         return true;
     }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java
similarity index 79%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java
index 518ce757f..dbf36818b 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBed.java
@@ -6,6 +6,7 @@ import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.BlockBed;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 
 public class BlockModelBed<T extends Block> extends BlockModelStandard<T> {
     protected IconCoordinate underTexture = TextureRegistry.getTexture("minecraft:block/bed/bottom");
@@ -21,7 +22,7 @@ public class BlockModelBed<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+        AABB bounds = block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z);
         renderBlocks.enableAO = true;
         renderBlocks.cache.setupCache(block, renderBlocks.blockAccess, x, y, z);
 
@@ -29,10 +30,10 @@ public class BlockModelBed<T extends Block> extends BlockModelStandard<T> {
         final int direction = BlockBed.getDirection(meta);
         final boolean isFootOfBed = BlockBed.isBlockFootOfBed(meta);
 
-        final double minY = block.minY;
-        block.minY += 0.1875D;
-        renderSide(tessellator, block, x, y, z, 1f, 1f, 1f, Side.BOTTOM, meta);
-        block.minY = minY;
+        final double minY = bounds.minY;
+        bounds.minY += 0.1875D;
+        renderSide(tessellator, bounds, x, y, z, 1f, 1f, 1f, Side.BOTTOM, meta);
+        bounds.minY = minY;
 
         if(direction == 0)
         {
@@ -46,33 +47,33 @@ public class BlockModelBed<T extends Block> extends BlockModelStandard<T> {
         {
             renderBlocks.uvRotateTop = 3;
         }
-        renderSide(tessellator, block, x, y, z, Side.TOP, meta);
+        renderSide(tessellator, bounds, x, y, z, Side.TOP, meta);
 
         renderBlocks.uvRotateTop = 0;
         final int f17 = isFootOfBed ? BlockBed.headOfBedMap[BlockBed.footToHeadMap[direction]] : BlockBed.headOfBedMap[direction];
 
-        if(f17 != 2 && (renderBlocks.renderAllFaces || shouldSideBeRendered(renderBlocks.blockAccess, x, y, z - 1, 2)))
+        if(f17 != 2 && (renderBlocks.renderAllFaces || shouldSideBeRendered(renderBlocks.blockAccess, bounds, x, y, z - 1, 2)))
         {
             renderBlocks.flipTexture = direction == 3;
-            renderSide(tessellator, block, x, y, z, Side.NORTH, meta);
+            renderSide(tessellator, bounds, x, y, z, Side.NORTH, meta);
         }
 
-        if(f17 != 3 && (renderBlocks.renderAllFaces || shouldSideBeRendered(renderBlocks.blockAccess, x, y, z + 1, 3)))
+        if(f17 != 3 && (renderBlocks.renderAllFaces || shouldSideBeRendered(renderBlocks.blockAccess, bounds, x, y, z + 1, 3)))
         {
             renderBlocks.flipTexture = direction == 1;
-            renderSide(tessellator, block, x, y, z, Side.SOUTH, meta);
+            renderSide(tessellator, bounds, x, y, z, Side.SOUTH, meta);
         }
 
-        if(f17 != 4 && (renderBlocks.renderAllFaces || shouldSideBeRendered(renderBlocks.blockAccess, x - 1, y, z, 4)))
+        if(f17 != 4 && (renderBlocks.renderAllFaces || shouldSideBeRendered(renderBlocks.blockAccess, bounds, x - 1, y, z, 4)))
         {
             renderBlocks.flipTexture = direction == 2;
-            renderSide(tessellator, block, x, y, z, Side.WEST, meta);
+            renderSide(tessellator, bounds, x, y, z, Side.WEST, meta);
         }
 
-        if(f17 != 5 && (renderBlocks.renderAllFaces || shouldSideBeRendered(renderBlocks.blockAccess, x + 1, y, z, 5)))
+        if(f17 != 5 && (renderBlocks.renderAllFaces || shouldSideBeRendered(renderBlocks.blockAccess, bounds, x + 1, y, z, 5)))
         {
             renderBlocks.flipTexture = direction == 0;
-            renderSide(tessellator, block, x, y, z, Side.EAST, meta);
+            renderSide(tessellator, bounds, x, y, z, Side.EAST, meta);
         }
         resetRenderBlocks();
         return true;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelBrazier.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBrazier.java
similarity index 65%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelBrazier.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBrazier.java
index d23e965f9..85baf689f 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelBrazier.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelBrazier.java
@@ -7,6 +7,7 @@ import net.minecraft.core.block.Block;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.BlockBrazier;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
@@ -27,20 +28,20 @@ public class BlockModelBrazier<T extends BlockBrazier>
 
         renderBlocks.enableAO = true;
         renderBlocks.cache.setupCache(block, renderBlocks.blockAccess, x, y, z);
-        renderSide(tessellator, block, x, y, z, Side.NORTH, 0);
-        renderSide(tessellator, block, x, y, z, Side.SOUTH, 0);
-        renderSide(tessellator, block, x, y, z, Side.EAST, 0);
-        renderSide(tessellator, block, x, y, z, Side.WEST, 0);
-        renderSide(tessellator, block, x, y, z, Side.BOTTOM, 0);
+        AABB bounds = block.getBounds();
+        renderSide(tessellator, bounds, x, y, z, Side.NORTH, 0);
+        renderSide(tessellator, bounds, x, y, z, Side.SOUTH, 0);
+        renderSide(tessellator, bounds, x, y, z, Side.EAST, 0);
+        renderSide(tessellator, bounds, x, y, z, Side.WEST, 0);
+        renderSide(tessellator, bounds, x, y, z, Side.BOTTOM, 0);
 
         final double zFightOffset = 0.005;
-        block.setBlockBounds(-zFightOffset, -zFightOffset, -zFightOffset, 1 + zFightOffset, 1 + zFightOffset, 1 + zFightOffset);
-        renderSide(tessellator, block, x, y, z + 1, Side.NORTH, 0);
-        renderSide(tessellator, block, x, y, z - 1, Side.SOUTH, 0);
-        renderSide(tessellator, block, x - 1, y, z, Side.EAST, 0);
-        renderSide(tessellator, block, x + 1, y, z, Side.WEST, 0);
-        renderSide(tessellator, block, x, y - 1, z, Side.TOP, 0);
-        block.setBlockBounds(0, 0, 0, 1, 1, 1);
+        bounds.set(-zFightOffset, -zFightOffset, -zFightOffset, 1 + zFightOffset, 1 + zFightOffset, 1 + zFightOffset);
+        renderSide(tessellator, bounds, x, y, z + 1, Side.NORTH, 0);
+        renderSide(tessellator, bounds, x, y, z - 1, Side.SOUTH, 0);
+        renderSide(tessellator, bounds, x - 1, y, z, Side.EAST, 0);
+        renderSide(tessellator, bounds, x + 1, y, z, Side.WEST, 0);
+        renderSide(tessellator, bounds, x, y - 1, z, Side.TOP, 0);
         renderBlocks.enableAO = false;
 
         if (block.isBurning()) {
@@ -52,65 +53,66 @@ public class BlockModelBrazier<T extends BlockBrazier>
 
     @Override
     public void renderBlockOnInventory(Tessellator tessellator, int metadata, float brightness, float alpha, @Nullable Integer lightmapCoordinate) {
+        AABB bounds = block.getBounds();
         GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
 
         GL11.glColor4f(brightness, brightness, brightness, alpha);
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, -1F, 0.0F);
-        renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, baseTexture);
+        renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, baseTexture);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 1.0F, 0.0F);
-        renderTopFace(tessellator, block, 0.0D, -1.0D, 0.0D, baseTexture);
+        renderTopFace(tessellator, bounds, 0.0D, -1.0D, 0.0D, baseTexture);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, -1F);
-        renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, sideTexture);
+        renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, sideTexture);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, -1F);
-        renderNorthFace(tessellator, block, 0.0D, 0.0D, 1.0D, sideTexture);
+        renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 1.0D, sideTexture);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, 1.0F);
-        renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, sideTexture);
+        renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, sideTexture);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, 1.0F);
-        renderSouthFace(tessellator, block, 0.0D, 0.0D, -1.0D, sideTexture);
+        renderSouthFace(tessellator, bounds, 0.0D, 0.0D, -1.0D, sideTexture);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(-1F, 0.0F, 0.0F);
-        renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, sideTexture);
+        renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, sideTexture);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(-1F, 0.0F, 0.0F);
-        renderWestFace(tessellator, block, 1.0D, 0.0D, 0.0D, sideTexture);
+        renderWestFace(tessellator, bounds, 1.0D, 0.0D, 0.0D, sideTexture);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(1.0F, 0.0F, 0.0F);
-        renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, sideTexture);
+        renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, sideTexture);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(1.0F, 0.0F, 0.0F);
-        renderEastFace(tessellator, block, -1.0D, 0.0D, 0.0D, sideTexture);
+        renderEastFace(tessellator, bounds, -1.0D, 0.0D, 0.0D, sideTexture);
         tessellator.draw();
 
         GL11.glTranslatef(0.5F, 0.5F, 0.5F);
     }
 
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side) {
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side) {
         return true;
     }
 }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCactus.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCactus.java
similarity index 71%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelCactus.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCactus.java
index 17b00a8bc..0cdb12c72 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelCactus.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCactus.java
@@ -4,6 +4,7 @@ import net.minecraft.client.render.block.color.BlockColorDispatcher;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
 
@@ -14,23 +15,21 @@ public class BlockModelCactus<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
-
         final float sidesOffset = 0.0625F;
 
-        block.setBlockBounds(sidesOffset, 0, 0, 1 - sidesOffset, 1, 1);
+        AABB bounds = block.getBounds();
+        bounds.set(sidesOffset, 0, 0, 1 - sidesOffset, 1, 1);
         setRenderSide(Side.SOUTH, false);
         setRenderSide(Side.NORTH, false);
-        renderStandardBlock(tessellator, block, x, y, z);
+        renderStandardBlock(tessellator, bounds, x, y, z);
         renderBlocks.renderBitMask = 0b111111;
 
-        block.setBlockBounds(0, 0, sidesOffset, 1, 1, 1 - sidesOffset);
+        bounds.set(0, 0, sidesOffset, 1, 1, 1 - sidesOffset);
         setRenderSide(Side.SOUTH, true);
         setRenderSide(Side.NORTH, true);
-        renderStandardBlock(tessellator, block, x, y, z);
+        renderStandardBlock(tessellator, bounds, x, y, z);
         renderBlocks.renderBitMask = 0;
 
-        block.setBlockBounds(0, 0, 0, 1, 1, 1);
         return true;
     }
     @Override
@@ -43,46 +42,47 @@ public class BlockModelCactus<T extends Block> extends BlockModelStandard<T> {
             float b = (float)(color & 0xff) / 255F;
             GL11.glColor4f(r * brightness, g * brightness, b * brightness, alpha);
         }
-        setBlockBoundsForItemRender();
+
+        AABB bounds = getBlockBoundsForItemRender();
         GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
 
         final float sidesOffset = 0.0625F;
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, -1F, 0.0F);
-        renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
+        renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 1.0F, 0.0F);
-        renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
+        renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, -1F);
         tessellator.offsetTranslation(0.0F, 0.0F, sidesOffset);
-        renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
+        renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
         tessellator.offsetTranslation(0.0F, 0.0F, -sidesOffset);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, 1.0F);
         tessellator.offsetTranslation(0.0F, 0.0F, -sidesOffset);
-        renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
+        renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
         tessellator.offsetTranslation(0.0F, 0.0F, sidesOffset);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(-1F, 0.0F, 0.0F);
         tessellator.offsetTranslation(sidesOffset, 0.0F, 0.0F);
-        renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
+        renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
         tessellator.offsetTranslation(-sidesOffset, 0.0F, 0.0F);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(1.0F, 0.0F, 0.0F);
         tessellator.offsetTranslation(-sidesOffset, 0.0F, 0.0F);
-        renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
+        renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
         tessellator.offsetTranslation(sidesOffset, 0.0F, 0.0F);
         tessellator.draw();
 
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCake.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCake.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelCake.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCake.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCandle.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCandle.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelCandle.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCandle.java
index 36486f348..1ee54fd96 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelCandle.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCandle.java
@@ -12,7 +12,6 @@ public class BlockModelCandle<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         boolean isLit = (renderBlocks.blockAccess.getBlockMetadata(x, y, z) & 0b00000001) == 0;
         float brightness = isLit ? 1.0f : getBlockBrightness(renderBlocks.blockAccess, x, y, z);
 
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelChest.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelChest.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelChest.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelChest.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelChestPainted.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelChestPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelChestPainted.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelChestPainted.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsPumpkin.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsPumpkin.java
similarity index 96%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelCropsPumpkin.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsPumpkin.java
index 4bf567ec0..9112fc166 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsPumpkin.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsPumpkin.java
@@ -29,8 +29,6 @@ public class BlockModelCropsPumpkin<T extends Block> extends BlockModelStandard<
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
-
         float brightness = 1.0f;
         if(LightmapHelper.isLightmapEnabled()) {
         	tessellator.setLightmapCoord(block.getLightmapCoord(renderBlocks.blockAccess, x, y, z));
@@ -76,7 +74,7 @@ public class BlockModelCropsPumpkin<T extends Block> extends BlockModelStandard<
         tessellator.addVertexWithUV(xMin, yMin, zMax, uMin, vMax);
         tessellator.addVertexWithUV(xMin, yMin, zMin, uMax, vMax);
         tessellator.addVertexWithUV(xMax + extra, yMax, zMin, uMax, vMin);
-        if (meta >= 1) renderStandardBlock(tessellator, block, x, y, z);
+        if (meta >= 1) renderStandardBlock(tessellator, block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z), x, y, z);
         return true;
     }
     @Override
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsWheat.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsWheat.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelCropsWheat.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsWheat.java
index 5df1d6da5..812b707f6 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsWheat.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCropsWheat.java
@@ -28,7 +28,6 @@ public class BlockModelCropsWheat<T extends Block> extends BlockModelStandard<T>
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         float brightness = 1.0f;
         if(LightmapHelper.isLightmapEnabled()) {
         	tessellator.setLightmapCoord(block.getLightmapCoord(renderBlocks.blockAccess, x, y, z));
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelCrossedSquares.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCrossedSquares.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelCrossedSquares.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCrossedSquares.java
index 59349f711..6a7e29510 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelCrossedSquares.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelCrossedSquares.java
@@ -33,7 +33,6 @@ public class BlockModelCrossedSquares<T extends Block> extends BlockModelStandar
         }
         final float yOffset = 0.0F;
 
-        setBlockBoundsForItemRender();
         GL11.glTranslatef(-0.5F, -0.5f, -0.5F);
 
         IconCoordinate texIndex = getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata);
@@ -88,8 +87,6 @@ public class BlockModelCrossedSquares<T extends Block> extends BlockModelStandar
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
-        
         float brightness = 1.0f;
         if(!LightmapHelper.isLightmapEnabled()) {
         	brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java
similarity index 97%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java
index c1627e09f..70d73ae05 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDispatcher.java
@@ -1,474 +1,474 @@
-package net.minecraft.client.render.block.model;
-
-import net.minecraft.client.render.texture.stitcher.TextureRegistry;
-import net.minecraft.client.util.dispatch.Dispatcher;
-import net.minecraft.core.block.Block;
-import net.minecraft.core.block.Blocks;
-
-public class BlockModelDispatcher
-    extends Dispatcher<Block, BlockModel>
-{
-    private static BlockModelDispatcher instance = new BlockModelDispatcher();
-    public static BlockModelDispatcher getInstance()
-    {
-        return instance;
-    }
-    public static BlockModelEmpty modelEmpty = new BlockModelEmpty(null);
-    public void addDispatch(BlockModel dispatchable)
-    {
-        addDispatch(dispatchable.block, dispatchable);
-    }
-    @Override
-    public void addDispatch(Block key, BlockModel value)
-    {
-        if (dispatches.containsValue(key)){
-            throw new IllegalArgumentException("Block '" + key.toString() + "' already assigned a model!");
-        }
-        dispatches.put(key, value);
-    }
-    @Override
-    protected BlockModel getDefault()
-    {
-        return modelEmpty;
-    }
-    private BlockModelDispatcher()
-    {
-        instance = this;
-        addDispatch(new BlockModelStandard<>(Blocks.STONE).withTextures("minecraft:block/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BASALT).withTextures("minecraft:block/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE).withTextures("minecraft:block/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRANITE).withTextures("minecraft:block/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.MARBLE).withTextures("minecraft:block/marble"));
-        addDispatch(new BlockModelStandard<>(Blocks.SLATE).withTextures("minecraft:block/slate_top", "minecraft:block/slate_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST).withTextures("minecraft:block/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_STONE).withTextures("minecraft:block/cobbled_stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_STONE_MOSSY).withTextures("minecraft:block/cobbled_stone_mossy"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_BASALT).withTextures("minecraft:block/cobbled_basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_LIMESTONE).withTextures("minecraft:block/cobbled_limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_GRANITE).withTextures("minecraft:block/cobbled_granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_PERMAFROST).withTextures("minecraft:block/cobbled_permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.STONE_POLISHED).withTextures("minecraft:block/polished_stone_top", "minecraft:block/polished_stone_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRANITE_POLISHED).withTextures("minecraft:block/polished_granite_top", "minecraft:block/polished_granite_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE_POLISHED).withTextures("minecraft:block/polished_limestone_top", "minecraft:block/polished_limestone_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.BASALT_POLISHED).withTextures("minecraft:block/polished_basalt_top", "minecraft:block/polished_basalt_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.SLATE_POLISHED).withTextures("minecraft:block/polished_slate_top", "minecraft:block/polished_slate_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST_POLISHED).withTextures("minecraft:block/polished_permafrost_top", "minecraft:block/polished_permafrost_side"));
-        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK_POLISHED).withTextures("minecraft:block/polished_netherrack_top", "minecraft:block/polished_netherrack_side"));
-
-        addDispatch(new BlockModelAxisAligned<>(Blocks.PILLAR_MARBLE).withTextures("minecraft:block/pillar_marble/top", "minecraft:block/pillar_marble/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.CAPSTONE_MARBLE).withTextures("minecraft:block/capstone_marble/top", "minecraft:block/capstone_marble/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.SANDSTONE).withTextures("minecraft:block/sandstone/top", "minecraft:block/sandstone/bottom", "minecraft:block/sandstone/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.STONE_CARVED).withTextures("minecraft:block/polished_stone_top", "minecraft:block/carved_stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRANITE_CARVED).withTextures("minecraft:block/polished_granite_top", "minecraft:block/carved_granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE_CARVED).withTextures("minecraft:block/polished_limestone_top", "minecraft:block/carved_limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BASALT_CARVED).withTextures("minecraft:block/polished_basalt_top", "minecraft:block/carved_basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST_CARVED).withTextures("minecraft:block/polished_permafrost_top", "minecraft:block/carved_permafrost"));
-        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK_CARVED).withTextures("minecraft:block/polished_netherrack_top", "minecraft:block/carved_netherrack"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
-        addDispatch(new BlockModelPlanksPainted<>(Blocks.PLANKS_OAK_PAINTED));
-
-        addDispatch(new BlockModelTorch<>(Blocks.TORCH_COAL).withTextures("minecraft:block/torch_coal"));
-
-        addDispatch(new BlockModelLadder<>(Blocks.LADDER_OAK).withTextures("minecraft:block/ladder"));
-
-        addDispatch(new BlockModelFence<>(Blocks.FENCE_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
-        addDispatch(new BlockModelFencePainted<>(Blocks.FENCE_PLANKS_OAK_PAINTED));
-
-        addDispatch(new BlockModelFenceGate<>(Blocks.FENCE_GATE_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
-        addDispatch(new BlockModelFenceGatePainted<>(Blocks.FENCE_GATE_PLANKS_OAK_PAINTED));
-
-        addDispatch(new BlockModelStandard<>(Blocks.BOOKSHELF_PLANKS_OAK).withTextures("minecraft:block/bookshelf/top", "minecraft:block/bookshelf/side"));
-
-        addDispatch(new BlockModelWool<>(Blocks.WOOL));
-        addDispatch(new BlockModelRope<>(Blocks.ROPE).withTextures("minecraft:block/rope"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_CLAY).withTextures("minecraft:block/brick_clay"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE_POLISHED).withTextures("minecraft:block/brick_polished_stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE_POLISHED_MOSSY).withTextures("minecraft:block/brick_polished_stone_mossy"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_SANDSTONE).withTextures("minecraft:block/brick_sandstone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_GOLD).withTextures("minecraft:block/brick_gold"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_LAPIS).withTextures("minecraft:block/brick_lapis"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_BASALT).withTextures("minecraft:block/brick_basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_LIMESTONE).withTextures("minecraft:block/brick_limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_GRANITE).withTextures("minecraft:block/brick_granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_MARBLE).withTextures("minecraft:block/brick_marble"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_SLATE).withTextures("minecraft:block/brick_slate"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE).withTextures("minecraft:block/brick_stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_PERMAFROST).withTextures("minecraft:block/brick_permafrost"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_IRON).withTextures("minecraft:block/brick_iron"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STEEL).withTextures("minecraft:block/brick_steel"));
-
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_PLANKS_OAK));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_STONE));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_SANDSTONE));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_STONE_POLISHED));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_STONE_POLISHED));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_MARBLE));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_CLAY));
-        addDispatch(new BlockModelSlabMarble<>(Blocks.SLAB_CAPSTONE_MARBLE));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_BASALT));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_LIMESTONE));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_GRANITE));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_BASALT));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_LIMESTONE));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_GRANITE));
-        addDispatch(new BlockModelSlabPainted<>(Blocks.SLAB_PLANKS_PAINTED));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_SLATE));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_STONE));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_GRANITE_POLISHED));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_LIMESTONE_POLISHED));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BASALT_POLISHED));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_PERMAFROST_POLISHED));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_PERMAFROST));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_SANDSTONE));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_PERMAFROST));
-
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_PLANKS_OAK));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_STONE));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_STONE_POLISHED));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_MARBLE));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_BASALT));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_LIMESTONE));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_GRANITE));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_BASALT));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_LIMESTONE));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_GRANITE));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_CLAY));
-        addDispatch(new BlockModelStairsPainted<>(Blocks.STAIRS_PLANKS_PAINTED));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_SLATE));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_STONE));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_SANDSTONE));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_PERMAFROST));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_SANDSTONE));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_PERMAFROST));
-
-        addDispatch(new BlockModelStandard<>(Blocks.OBSIDIAN).withTextures("minecraft:block/obsidian"));
-
-        addDispatch(new BlockModelTransparent<>(Blocks.GLASS, false).withTextures("minecraft:block/glass"));
-        addDispatch(new BlockModelTransparent<>(Blocks.GLASS_TINTED, false).withTextures("minecraft:block/glass_tinted"));
-        addDispatch(new BlockModelTransparent<>(Blocks.GLASS_STEEL, false).withTextures("minecraft:block/glass_steel"));
-
-        addDispatch(new BlockModelGrass<>(Blocks.GRASS).withTextures("minecraft:block/grass/top", "minecraft:block/grass/bottom", "minecraft:block/grass/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRASS_RETRO).withTextures("minecraft:block/grass_retro/top", "minecraft:block/grass_retro/bottom", "minecraft:block/grass_retro/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRASS_SCORCHED).withTextures("minecraft:block/grass_scorched/top", "minecraft:block/grass_scorched/bottom", "minecraft:block/grass_scorched/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.PATH_DIRT).withTextures("minecraft:block/grass_path/top", "minecraft:block/grass_path/bottom", "minecraft:block/grass_path/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.DIRT).withTextures("minecraft:block/dirt"));
-        addDispatch(new BlockModelStandard<>(Blocks.DIRT_SCORCHED).withTextures("minecraft:block/dirt_scorched"));
-        addDispatch(new BlockModelStandard<>(Blocks.DIRT_SCORCHED_RICH).withTextures("minecraft:block/dirt_scorched_rich"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.MUD).withTextures("minecraft:block/mud"));
-        addDispatch(new BlockModelStandard<>(Blocks.MUD_BAKED).withTextures("minecraft:block/mud_baked"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.SPONGE_DRY).withTextures("minecraft:block/sponge"));
-        addDispatch(new BlockModelStandard<>(Blocks.SPONGE_WET).withTextures("minecraft:block/sponge_wet"));
-        addDispatch(new BlockModelPumice<>(Blocks.PUMICE_DRY).withTextures("minecraft:block/pumice"));
-        addDispatch(new BlockModelPumice<>(Blocks.PUMICE_WET).withTextures("minecraft:block/pumice_overlay"));
-
-        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_STONE).withTextures("minecraft:block/stone"));
-        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_BASALT).withTextures("minecraft:block/basalt"));
-        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_LIMESTONE).withTextures("minecraft:block/limestone"));
-        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_GRANITE).withTextures("minecraft:block/granite"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.SAND).withTextures("minecraft:block/sand"));
-        addDispatch(new BlockModelStandard<>(Blocks.GRAVEL).withTextures("minecraft:block/gravel"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.BEDROCK).withTextures("minecraft:block/bedrock"));
-        addDispatch(new BlockModelFullyRotatable<>(Blocks.BONESHALE).withTextures("minecraft:block/bone_shale/top", "minecraft:block/bone_shale/bottom", "minecraft:block/bone_shale/side"));
-
-        addDispatch(new BlockModelFluid<>(Blocks.FLUID_WATER_FLOWING).withTextures("minecraft:block/water_still", "minecraft:block/water_flowing", "minecraft:block/water_flowing"));
-        addDispatch(new BlockModelFluid<>(Blocks.FLUID_WATER_STILL).withTextures("minecraft:block/water_still", "minecraft:block/water_flowing"));
-        addDispatch(new BlockModelFluid<>(Blocks.FLUID_LAVA_FLOWING).withTextures("minecraft:block/lava_still", "minecraft:block/lava_flowing", "minecraft:block/lava_flowing"));
-        addDispatch(new BlockModelFluid<>(Blocks.FLUID_LAVA_STILL).withTextures("minecraft:block/lava_still", "minecraft:block/lava_flowing"));
-
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_OAK).withTextures("minecraft:block/log/oak_top", "minecraft:block/log/oak_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_PINE).withTextures("minecraft:block/log/pine_top", "minecraft:block/log/pine_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_BIRCH).withTextures("minecraft:block/log/birch_top", "minecraft:block/log/birch_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_CHERRY).withTextures("minecraft:block/log/cherry_top", "minecraft:block/log/cherry_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_EUCALYPTUS).withTextures("minecraft:block/log/eucalyptus_top", "minecraft:block/log/eucalyptus_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_OAK_MOSSY).withTextures("minecraft:block/log/oak_mossy_top", "minecraft:block/log/oak_mossy_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_THORN).withTextures("minecraft:block/log/thorn_top", "minecraft:block/log/thorn_side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_PALM).withTextures("minecraft:block/log/palm_top", "minecraft:block/log/palm_side"));
-
-        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_OAK, "minecraft:block/leaves/oak"));
-        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_OAK_RETRO, "minecraft:block/leaves/oak_retro"));
-        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_PINE, "minecraft:block/leaves/pine"));
-        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_BIRCH, "minecraft:block/leaves/birch"));
-        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_CHERRY, "minecraft:block/leaves/cherry"));
-        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_EUCALYPTUS, "minecraft:block/leaves/eucalyptus"));
-        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_SHRUB, "minecraft:block/leaves/shrub"));
-        addDispatch(new BlockModelLeavesCherryFlowering<>(Blocks.LEAVES_CHERRY_FLOWERING));
-        addDispatch(new BlockModelLeavesCacao<>(Blocks.LEAVES_CACAO));
-        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_THORN, "minecraft:block/leaves/caatinga"));
-        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_PALM, "minecraft:block/leaves/palm"));
-
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_OAK).withTextures("minecraft:block/sapling/oak"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_OAK_RETRO).withTextures("minecraft:block/sapling/oak_retro"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_PINE).withTextures("minecraft:block/sapling/pine"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_BIRCH).withTextures("minecraft:block/sapling/birch"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_CHERRY).withTextures("minecraft:block/sapling/cherry"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_EUCALYPTUS).withTextures("minecraft:block/sapling/eucalyptus"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_SHRUB).withTextures("minecraft:block/sapling/shrub"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_CACAO).withTextures("minecraft:block/sapling/cacao"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_THORN).withTextures("minecraft:block/sapling/thorn"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_PALM).withTextures("minecraft:block/sapling/palm"));
-
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.TALLGRASS).withTextures("minecraft:block/tallgrass"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.TALLGRASS_FERN).withTextures("minecraft:block/fern"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.DEADBUSH).withTextures("minecraft:block/deadbush"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SPINIFEX).withTextures("minecraft:block/spinifex"));
-        addDispatch(new BlockModelAlgae<>(Blocks.ALGAE).withTextures("minecraft:block/algae").withCustomItemBounds(0.0f, 0.01f, 0.0f, 1.0f, 0.0125f, 1.0f));
-
-        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_YELLOW, "minecraft:block/flower_yellow/"));
-        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_RED, "minecraft:block/flower_red/"));
-        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_PINK, "minecraft:block/flower_pink/"));
-        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_PURPLE, "minecraft:block/flower_purple/"));
-        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_LIGHT_BLUE, "minecraft:block/flower_lightblue/"));
-        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_ORANGE, "minecraft:block/flower_orange/"));
-
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.MUSHROOM_BROWN).withTextures("minecraft:block/mushroom_brown"));
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.MUSHROOM_RED).withTextures("minecraft:block/mushroom_red"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_STONE).withTextures("minecraft:block/ore/coal/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_BASALT).withTextures("minecraft:block/ore/coal/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_LIMESTONE).withTextures("minecraft:block/ore/coal/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_GRANITE).withTextures("minecraft:block/ore/coal/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_PERMAFROST).withTextures("minecraft:block/ore/coal/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_STONE).withTextures("minecraft:block/ore/iron/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_BASALT).withTextures("minecraft:block/ore/iron/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_LIMESTONE).withTextures("minecraft:block/ore/iron/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_GRANITE).withTextures("minecraft:block/ore/iron/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_PERMAFROST).withTextures("minecraft:block/ore/iron/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_STONE).withTextures("minecraft:block/ore/gold/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_BASALT).withTextures("minecraft:block/ore/gold/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_LIMESTONE).withTextures("minecraft:block/ore/gold/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_GRANITE).withTextures("minecraft:block/ore/gold/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_PERMAFROST).withTextures("minecraft:block/ore/gold/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_STONE).withTextures("minecraft:block/ore/lapis/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_BASALT).withTextures("minecraft:block/ore/lapis/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_LIMESTONE).withTextures("minecraft:block/ore/lapis/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_GRANITE).withTextures("minecraft:block/ore/lapis/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_PERMAFROST).withTextures("minecraft:block/ore/lapis/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_STONE).withTextures("minecraft:block/ore/redstone/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_BASALT).withTextures("minecraft:block/ore/redstone/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_LIMESTONE).withTextures("minecraft:block/ore/redstone/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GRANITE).withTextures("minecraft:block/ore/redstone/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_PERMAFROST).withTextures("minecraft:block/ore/redstone/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_STONE).withTextures("minecraft:block/ore/redstone/stone").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_BASALT).withTextures("minecraft:block/ore/redstone/basalt").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_LIMESTONE).withTextures("minecraft:block/ore/redstone/limestone").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_GRANITE).withTextures("minecraft:block/ore/redstone/granite").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_PERMAFROST).withTextures("minecraft:block/ore/redstone/permafrost").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_STONE).withTextures("minecraft:block/ore/diamond/stone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_BASALT).withTextures("minecraft:block/ore/diamond/basalt"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_LIMESTONE).withTextures("minecraft:block/ore/diamond/limestone"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_GRANITE).withTextures("minecraft:block/ore/diamond/granite"));
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_PERMAFROST).withTextures("minecraft:block/ore/diamond/permafrost"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.ORE_NETHERCOAL_NETHERRACK).withTextures("minecraft:block/ore/nethercoal/netherrack").withOverbrightTexture("minecraft:block/ore/nethercoal/netherrack_overlay"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_COAL).withTextures("minecraft:block/block_coal"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_IRON).withTextures("minecraft:block/block_iron/top", "minecraft:block/block_iron/bottom", "minecraft:block/block_iron/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_GOLD).withTextures("minecraft:block/block_gold/top", "minecraft:block/block_gold/bottom", "minecraft:block/block_gold/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_LAPIS).withTextures("minecraft:block/block_lapis"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_REDSTONE).withTextures("minecraft:block/block_redstone"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_DIAMOND).withTextures("minecraft:block/block_diamond/top", "minecraft:block/block_diamond/bottom", "minecraft:block/block_diamond/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_NETHER_COAL).withTextures("minecraft:block/block_nethercoal").withOverbrightTexture("minecraft:block/block_nethercoal_overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_STEEL).withTextures("minecraft:block/block_steel/top", "minecraft:block/block_steel/bottom", "minecraft:block/block_steel/side"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_QUARTZ).withTextures("minecraft:block/block_quartz"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_OLIVINE).withTextures("minecraft:block/block_olivine"));
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_CHARCOAL).withTextures("minecraft:block/block_charcoal"));
-
-        addDispatch(new BlockModelWireRedstone<>(Blocks.WIRE_REDSTONE));
-
-        addDispatch(new BlockModelTorchRedstone(Blocks.TORCH_REDSTONE_IDLE).withTextures("minecraft:block/torch_redstone_idle"));
-        addDispatch(new BlockModelTorchRedstone(Blocks.TORCH_REDSTONE_ACTIVE).withTextures("minecraft:block/torch_redstone_active"));
-
-        final float width = 0.1875F;
-        final float height = 0.125F;
-        final float depth = 0.125F;
-        addDispatch(new BlockModelStandard<>(Blocks.BUTTON_STONE).withTextures("minecraft:block/stone").withCustomItemBounds(0.5F - width, 0.5F - height, 0.5F - depth, 0.5F + width, 0.5F + height, 0.5F + depth));
-
-        addDispatch(new BlockModelLever<>(Blocks.LEVER_COBBLE_STONE).withTextures("minecraft:block/lever_cobbled_stone"));
-
-        final float f = 0.5F;
-        final float f1 = 0.125F;
-        final float f2 = 0.5F;
-        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_STONE).withTextures("minecraft:block/stone").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
-        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_PLANKS_OAK).withTextures("minecraft:block/planks/oak").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
-        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_COBBLE_STONE).withTextures("minecraft:block/cobbled_stone").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
-
-        addDispatch(new BlockModelMotionSensor(Blocks.MOTION_SENSOR_IDLE).withTextures("minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/idle_front", "minecraft:block/motion_sensor/side"));
-        addDispatch(new BlockModelMotionSensor(Blocks.MOTION_SENSOR_ACTIVE).withTextures("minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/active_front", "minecraft:block/motion_sensor/side"));
-
-        addDispatch(new BlockModelRepeater(Blocks.REPEATER_IDLE).withTextures("minecraft:block/repeater/idle_top", "minecraft:block/polished_stone_top"));
-        addDispatch(new BlockModelRepeater(Blocks.REPEATER_ACTIVE).withTextures("minecraft:block/repeater/active_top", "minecraft:block/polished_stone_top").withOverbrightTexture("minecraft:block/repeater/active_overlay"));
-
-        addDispatch(new BlockModelPiston<>(Blocks.PISTON_BASE,
-            TextureRegistry.getTexture("minecraft:block/piston/face"))
-            .setPistonTextures("minecraft:block/piston/side", "minecraft:block/piston/top", "minecraft:block/piston/bottom")
-            .withTextures("minecraft:block/piston/face")
-            .withCustomItemBounds(0,0,0,1,1,1));
-        addDispatch(new BlockModelPiston<>(Blocks.PISTON_BASE_STICKY,
-            TextureRegistry.getTexture("minecraft:block/piston_sticky/face"))
-            .setPistonTextures("minecraft:block/piston_sticky/side", "minecraft:block/piston_sticky/top", "minecraft:block/piston_sticky/bottom")
-            .withTextures("minecraft:block/piston_sticky/face")
-            .withCustomItemBounds(0,0,0,1,1,1));
-        addDispatch(new BlockModelPiston<>(Blocks.PISTON_BASE_STEEL,
-            TextureRegistry.getTexture("minecraft:block/piston_steel/face"), 6/16d)
-            .setPistonTextures("minecraft:block/piston_steel/side", "minecraft:block/piston_steel/top", "minecraft:block/piston_steel/bottom")
-            .withTextures("minecraft:block/piston_steel/face")
-            .withCustomItemBounds(0,0,0,1,1,1));
-
-        addDispatch(new BlockModelPistonHead(Blocks.PISTON_HEAD, TextureRegistry.getTexture("minecraft:block/piston/side")).withTextures("minecraft:block/piston/face"));
-        addDispatch(new BlockModelEmpty(Blocks.PISTON_MOVING));
-        addDispatch(new BlockModelPistonHead(Blocks.PISTON_HEAD_STEEL, TextureRegistry.getTexture("minecraft:block/piston_steel/side"), 6/16d).withTextures("minecraft:block/piston_steel/face"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.NOTEBLOCK).withTextures("minecraft:block/noteblock"));
-
-        addDispatch(new BlockModelRail<>(Blocks.RAIL).withTextures("minecraft:block/rail/straight"));
-        addDispatch(new BlockModelRail<>(Blocks.RAIL_POWERED).withTextures("minecraft:block/rail_powered/idle"));
-        addDispatch(new BlockModelRail<>(Blocks.RAIL_DETECTOR).withTextures("minecraft:block/rail_detector/straight"));
-
-        addDispatch(new BlockModelSpikes<>(Blocks.SPIKES).withTextures("minecraft:block/spikes/top", "minecraft:block/spikes/bottom", "minecraft:block/spikes/side"));
-
-        addDispatch(new BlockModelVeryRotatable<>(Blocks.DISPENSER_COBBLE_STONE).withTextures("minecraft:block/dispenser/top", "minecraft:block/dispenser/bottom", "minecraft:block/dispenser/side", "minecraft:block/dispenser/side", "minecraft:block/dispenser/front", "minecraft:block/dispenser/side"));
-        addDispatch(new BlockModelActivator(Blocks.ACTIVATOR_COBBLE_NETHERRACK).withTextures("minecraft:block/activator/top", "minecraft:block/activator/bottom", "minecraft:block/activator/side", "minecraft:block/activator/side", "minecraft:block/activator/front", "minecraft:block/activator/side"));
-
-        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_PLANKS_OAK).withTextures("minecraft:block/trapdoor/planks/top", "minecraft:block/trapdoor/planks/side"));
-        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_IRON).withTextures("minecraft:block/trapdoor/iron/top", "minecraft:block/trapdoor/iron/side"));
-        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_GLASS).withTextures("minecraft:block/trapdoor/glass/top", "minecraft:block/trapdoor/glass/side"));
-        addDispatch(new BlockModelTrapDoorPainted<>(Blocks.TRAPDOOR_PLANKS_PAINTED));
-        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_STEEL).withTextures("minecraft:block/trapdoor/steel/top", "minecraft:block/trapdoor/steel/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.TNT).withTextures("minecraft:block/tnt/top", "minecraft:block/tnt/bottom", "minecraft:block/tnt/side"));
-
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_PLANKS_OAK_BOTTOM).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/bottom"));
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_PLANKS_OAK_TOP).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/top"));
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_IRON_BOTTOM).withTextures("minecraft:block/door/iron/frame_top", "minecraft:block/door/iron/bottom"));
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_IRON_TOP).withTextures("minecraft:block/door/iron/frame_top", "minecraft:block/door/iron/top"));
-        addDispatch(new BlockModelDoorPainted<>(Blocks.DOOR_PLANKS_PAINTED_BOTTOM, false).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/bottom"));
-        addDispatch(new BlockModelDoorPainted<>(Blocks.DOOR_PLANKS_PAINTED_TOP, true).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/top"));
-        addDispatch(new BlockModelDoorGlass<>(Blocks.DOOR_GLASS_BOTTOM).withTextures("minecraft:block/door/glass/frame_top", "minecraft:block/door/glass/bottom"));
-        addDispatch(new BlockModelDoorGlass<>(Blocks.DOOR_GLASS_TOP).withTextures("minecraft:block/door/glass/frame_top", "minecraft:block/door/glass/top"));
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_STEEL_BOTTOM).withTextures("minecraft:block/door/steel/frame_top", "minecraft:block/door/steel/bottom"));
-        addDispatch(new BlockModelDoor<>(Blocks.DOOR_STEEL_TOP).withTextures("minecraft:block/door/steel/frame_top", "minecraft:block/door/steel/top"));
-
-        addDispatch(new BlockModelTransparent<>(Blocks.MESH, true).withTextures("minecraft:block/mesh"));
-        addDispatch(new BlockModelTransparent<>(Blocks.MESH_GOLD, true).withTextures("minecraft:block/mesh_gold"));
-
-        addDispatch(new BlockModelBed<>(Blocks.BED));
-        addDispatch(new BlockModelSeat<>(Blocks.SEAT).withTextures("minecraft:block/seat/top", "minecraft:block/seat/bottom", "minecraft:block/seat/side"));
-
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.COBWEB).withTextures("minecraft:block/cobweb"));
-        addDispatch(new BlockModelFire<>(Blocks.FIRE).withTextures("minecraft:block/fire"));
-        addDispatch(new BlockModelBrazier<>(Blocks.BRAZIER_INACTIVE).withTextures("minecraft:block/brazier/base", "minecraft:block/brazier/side"));
-        addDispatch(new BlockModelBrazier<>(Blocks.BRAZIER_ACTIVE).withTextures("minecraft:block/brazier/base", "minecraft:block/brazier/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.MOBSPAWNER).withTextures("minecraft:block/mobspawner"));
-        addDispatch(new BlockModelTransparent<>(Blocks.MOBSPAWNER_DEACTIVATED, true).withTextures("minecraft:block/mobspawner"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.WORKBENCH).withTextures("minecraft:block/workbench/top", "minecraft:block/workbench/bottom", "minecraft:block/workbench/front", "minecraft:block/workbench/side", "minecraft:block/workbench/front", "minecraft:block/workbench/side"));
-
-        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_STONE_IDLE).withTextures("minecraft:block/furnace_stone/top", "minecraft:block/furnace_stone/bottom", "minecraft:block/furnace_stone/idle_front", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side"));
-        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_STONE_ACTIVE).withTextures("minecraft:block/furnace_stone/top", "minecraft:block/furnace_stone/bottom", "minecraft:block/furnace_stone/active_front", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side"));
-        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_BLAST_IDLE).withTextures("minecraft:block/furnace_blast/top", "minecraft:block/furnace_blast/bottom", "minecraft:block/furnace_blast/idle_front", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side"));
-        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_BLAST_ACTIVE).withTextures("minecraft:block/furnace_blast/top", "minecraft:block/furnace_blast/bottom", "minecraft:block/furnace_blast/active_front", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side"));
-
-        addDispatch(new BlockModelHorizontalRotation<>(Blocks.TROMMEL_IDLE).withTextures("minecraft:block/trommel/top", "minecraft:block/trommel/top", "minecraft:block/trommel/idle_front", "minecraft:block/trommel/side_slot", "minecraft:block/trommel/idle_front", "minecraft:block/trommel/side"));
-        addDispatch(new BlockModelHorizontalRotation<>(Blocks.TROMMEL_ACTIVE).withTextures("minecraft:block/trommel/top", "minecraft:block/trommel/top", "minecraft:block/trommel/active_front", "minecraft:block/trommel/side_slot", "minecraft:block/trommel/active_back", "minecraft:block/trommel/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.CHEST_LEGACY).withTextures("minecraft:block/chest/planks/top"));
-        addDispatch(new BlockModelStandard<>(Blocks.CHEST_LEGACY_PAINTED).withTextures("minecraft:block/chest/planks/top"));
-        addDispatch(new BlockModelChest<>(Blocks.CHEST_PLANKS_OAK, "minecraft:block/chest/planks/").withTextures("minecraft:block/chest/planks/top"));
-        addDispatch(new BlockModelChestPainted<>(Blocks.CHEST_PLANKS_OAK_PAINTED).withTextures("minecraft:block/chest/planks/top"));
-
-        addDispatch(new BlockModelCropsWheat<>(Blocks.CROPS_WHEAT));
-        addDispatch(new BlockModelCropsPumpkin<>(Blocks.CROPS_PUMPKIN));
-
-        addDispatch(new BlockModelFarmland<>(Blocks.FARMLAND_DIRT).withTextures("minecraft:block/farmland/dry"));
-
-        addDispatch(new BlockModelEmpty(Blocks.SIGN_POST_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
-        addDispatch(new BlockModelEmpty(Blocks.SIGN_WALL_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
-        addDispatch(new BlockModelEmpty(Blocks.FLAG).withTextures("minecraft:block/planks/oak"));
-
-        addDispatch(new BlockModelLayer<>(Blocks.LAYER_SNOW).withTextures("minecraft:block/block_snow"));
-        addDispatch(new BlockModelLayer<>(Blocks.LAYER_LEAVES_OAK).withTextures("minecraft:block/leaves/oak_fancy"));
-        addDispatch(new BlockModelLayer<>(Blocks.LAYER_SLATE).withTextures("minecraft:block/slate_top", "minecraft:block/slate_side"));
-
-        addDispatch(new BlockModelIce<>(Blocks.ICE).withTextures("minecraft:block/ice"));
-        addDispatch(new BlockModelStandard<>(Blocks.PERMAICE).withTextures("minecraft:block/permaice"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_SNOW).withTextures("minecraft:block/block_snow"));
-
-        addDispatch(new BlockModelCactus<>(Blocks.CACTUS).withTextures("minecraft:block/cactus/top", "minecraft:block/cactus/bottom", "minecraft:block/cactus/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_CLAY).withTextures("minecraft:block/block_clay"));
-
-        addDispatch(new BlockModelCrossedSquares<>(Blocks.SUGARCANE).withTextures("minecraft:block/sugarcane"));
-
-        addDispatch(new BlockModelAxisAligned<>(Blocks.BLOCK_SUGARCANE).withTextures("minecraft:block/block_sugarcane/top", "minecraft:block/block_sugarcane/side"));
-        addDispatch(new BlockModelAxisAligned<>(Blocks.BLOCK_SUGARCANE_BAKED).withTextures("minecraft:block/block_baked_sugarcane/top", "minecraft:block/block_baked_sugarcane/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.JUKEBOX).withTextures("minecraft:block/jukebox/top", "minecraft:block/jukebox/bottom", "minecraft:block/jukebox/side"));
-
-        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN).withTextures("minecraft:block/pumpkin/top", "minecraft:block/pumpkin/bottom", "minecraft:block/pumpkin/side"));
-        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN_CARVED_IDLE).withTextures("minecraft:block/pumpkin_carved/top", "minecraft:block/pumpkin_carved/bottom", "minecraft:block/pumpkin_carved/front", "minecraft:block/pumpkin_carved/side", "minecraft:block/pumpkin_carved/side", "minecraft:block/pumpkin_carved/side"));
-        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN_CARVED_ACTIVE).withTextures("minecraft:block/pumpkin_carved_lit/top", "minecraft:block/pumpkin_carved_lit/bottom", "minecraft:block/pumpkin_carved_lit/front", "minecraft:block/pumpkin_carved_lit/side", "minecraft:block/pumpkin_carved_lit/side", "minecraft:block/pumpkin_carved_lit/side"));
-        addDispatch(new BlockModelPumpkinRedstone(Blocks.PUMPKIN_REDSTONE).withTextures("minecraft:block/pumpkin_redstone/top", "minecraft:block/pumpkin_redstone/bottom", "minecraft:block/pumpkin_redstone/front", "minecraft:block/pumpkin_redstone/side", "minecraft:block/pumpkin_redstone/side", "minecraft:block/pumpkin_redstone/side"));
-
-
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK).withTextures("minecraft:block/cobbled_netherrack"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK_IGNEOUS).withTextures("minecraft:block/cobbled_netherrack_igneous").withOverbrightTexture("minecraft:block/cobbled_netherrack_igneous_overlay"));
-        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK_MOSSY).withTextures("minecraft:block/cobbled_netherrack_mossy"));
-        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK).withTextures("minecraft:block/netherrack"));
-        addDispatch(new BlockModelStandard<>(Blocks.BRICK_NETHERRACK).withTextures("minecraft:block/brick_netherrack"));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_NETHERRACK_POLISHED));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_NETHERRACK));
-        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_NETHERRACK));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_NETHERRACK));
-        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_NETHERRACK));
-
-        addDispatch(new BlockModelStandard<>(Blocks.SOULSAND).withTextures("minecraft:block/soulsand"));
-        addDispatch(new BlockModelStandard<>(Blocks.SOULSCHIST).withTextures("minecraft:block/soulschist"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.GLOWSTONE).withTextures("minecraft:block/glowstone"));
-
-        addDispatch(new BlockModelPortal<>(Blocks.PORTAL_NETHER, "minecraft:block/portal_nether/").withTextures("minecraft:block/portal_nether"));
-        addDispatch(new BlockModelPortal<>(Blocks.PORTAL_PARADISE, "minecraft:block/portal_paradise/").withTextures("minecraft:block/portal_nether"));
-
-        addDispatch(new BlockModelCake<>(Blocks.CAKE).withTextures("minecraft:block/cake/top", "minecraft:block/cake/bottom", "minecraft:block/cake/side"));
-        addDispatch(new BlockModelPiePumpkin<>(Blocks.PUMPKIN_PIE).withTextures("minecraft:block/pumpkin_pie/top", "minecraft:block/pumpkin_pie/bottom", "minecraft:block/pumpkin_pie/side"));
-
-        addDispatch(new BlockModelLamp<>(Blocks.LAMP_IDLE));
-        addDispatch(new BlockModelLamp<>(Blocks.LAMP_ACTIVE));
-
-        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_GREEN).withTextures("minecraft:block/lantern_firefly/green"));
-        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_BLUE).withTextures("minecraft:block/lantern_firefly/blue"));
-        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_ORANGE).withTextures("minecraft:block/lantern_firefly/orange"));
-        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_RED).withTextures("minecraft:block/lantern_firefly/red"));
-        addDispatch(new BlockModelJar<>(Blocks.JAR_GLASS));
-
-        addDispatch(new BlockModelPebbles<>(Blocks.OVERLAY_PEBBLES));
-
-        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_CHAINLINK,TextureRegistry.getTexture("minecraft:block/fence_chain/center"), null, TextureRegistry.getTexture("minecraft:block/fence_chain/top"), TextureRegistry.getTexture("minecraft:block/fence_chain/column")).withTextures("minecraft:block/fence_chain/center"));
-        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_PAPER_WALL,TextureRegistry.getTexture("minecraft:block/fence_paper/center"), null, null, TextureRegistry.getTexture("minecraft:block/fence_paper/column")).withTextures("minecraft:block/fence_paper/center"));
-        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_STEEL,TextureRegistry.getTexture("minecraft:block/fence_steel/center"), null, TextureRegistry.getTexture("minecraft:block/fence_steel/top"), TextureRegistry.getTexture("minecraft:block/fence_steel/column")).withTextures("minecraft:block/fence_steel/center"));
-
-        addDispatch(new BlockModelBasket<>(Blocks.BASKET).withTextures("minecraft:block/basket/bottom", "minecraft:block/basket/side"));
-
-        addDispatch(new BlockModelStandard<>(Blocks.PAPER_WALL).withTextures("minecraft:block/paperwall"));
-    }
-}
+package net.minecraft.client.render.block.model;
+
+import net.minecraft.client.render.texture.stitcher.TextureRegistry;
+import net.minecraft.client.util.dispatch.Dispatcher;
+import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
+
+public class BlockModelDispatcher
+    extends Dispatcher<Block, BlockModel>
+{
+    private static BlockModelDispatcher instance = new BlockModelDispatcher();
+    public static BlockModelDispatcher getInstance()
+    {
+        return instance;
+    }
+    public static BlockModelEmpty modelEmpty = new BlockModelEmpty(null);
+    public void addDispatch(BlockModel dispatchable)
+    {
+        addDispatch(dispatchable.block, dispatchable);
+    }
+    @Override
+    public void addDispatch(Block key, BlockModel value)
+    {
+        if (dispatches.containsValue(key)){
+            throw new IllegalArgumentException("Block '" + key.toString() + "' already assigned a model!");
+        }
+        dispatches.put(key, value);
+    }
+    @Override
+    protected BlockModel getDefault()
+    {
+        return modelEmpty;
+    }
+    private BlockModelDispatcher()
+    {
+        instance = this;
+        addDispatch(new BlockModelStandard<>(Blocks.STONE).withTextures("minecraft:block/stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BASALT).withTextures("minecraft:block/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE).withTextures("minecraft:block/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.GRANITE).withTextures("minecraft:block/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.MARBLE).withTextures("minecraft:block/marble"));
+        addDispatch(new BlockModelStandard<>(Blocks.SLATE).withTextures("minecraft:block/slate_top", "minecraft:block/slate_side"));
+        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST).withTextures("minecraft:block/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_STONE).withTextures("minecraft:block/cobbled_stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_STONE_MOSSY).withTextures("minecraft:block/cobbled_stone_mossy"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_BASALT).withTextures("minecraft:block/cobbled_basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_LIMESTONE).withTextures("minecraft:block/cobbled_limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_GRANITE).withTextures("minecraft:block/cobbled_granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_PERMAFROST).withTextures("minecraft:block/cobbled_permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.STONE_POLISHED).withTextures("minecraft:block/polished_stone_top", "minecraft:block/polished_stone_side"));
+        addDispatch(new BlockModelStandard<>(Blocks.GRANITE_POLISHED).withTextures("minecraft:block/polished_granite_top", "minecraft:block/polished_granite_side"));
+        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE_POLISHED).withTextures("minecraft:block/polished_limestone_top", "minecraft:block/polished_limestone_side"));
+        addDispatch(new BlockModelStandard<>(Blocks.BASALT_POLISHED).withTextures("minecraft:block/polished_basalt_top", "minecraft:block/polished_basalt_side"));
+        addDispatch(new BlockModelStandard<>(Blocks.SLATE_POLISHED).withTextures("minecraft:block/polished_slate_top", "minecraft:block/polished_slate_side"));
+        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST_POLISHED).withTextures("minecraft:block/polished_permafrost_top", "minecraft:block/polished_permafrost_side"));
+        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK_POLISHED).withTextures("minecraft:block/polished_netherrack_top", "minecraft:block/polished_netherrack_side"));
+
+        addDispatch(new BlockModelAxisAligned<>(Blocks.PILLAR_MARBLE).withTextures("minecraft:block/pillar_marble/top", "minecraft:block/pillar_marble/side"));
+        addDispatch(new BlockModelStandard<>(Blocks.CAPSTONE_MARBLE).withTextures("minecraft:block/capstone_marble/top", "minecraft:block/capstone_marble/side"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.SANDSTONE).withTextures("minecraft:block/sandstone/top", "minecraft:block/sandstone/bottom", "minecraft:block/sandstone/side"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.STONE_CARVED).withTextures("minecraft:block/polished_stone_top", "minecraft:block/carved_stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.GRANITE_CARVED).withTextures("minecraft:block/polished_granite_top", "minecraft:block/carved_granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.LIMESTONE_CARVED).withTextures("minecraft:block/polished_limestone_top", "minecraft:block/carved_limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BASALT_CARVED).withTextures("minecraft:block/polished_basalt_top", "minecraft:block/carved_basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.PERMAFROST_CARVED).withTextures("minecraft:block/polished_permafrost_top", "minecraft:block/carved_permafrost"));
+        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK_CARVED).withTextures("minecraft:block/polished_netherrack_top", "minecraft:block/carved_netherrack"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
+        addDispatch(new BlockModelPlanksPainted<>(Blocks.PLANKS_OAK_PAINTED));
+
+        addDispatch(new BlockModelTorch<>(Blocks.TORCH_COAL).withTextures("minecraft:block/torch_coal"));
+
+        addDispatch(new BlockModelLadder<>(Blocks.LADDER_OAK).withTextures("minecraft:block/ladder"));
+
+        addDispatch(new BlockModelFence<>(Blocks.FENCE_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
+        addDispatch(new BlockModelFencePainted<>(Blocks.FENCE_PLANKS_OAK_PAINTED));
+
+        addDispatch(new BlockModelFenceGate<>(Blocks.FENCE_GATE_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
+        addDispatch(new BlockModelFenceGatePainted<>(Blocks.FENCE_GATE_PLANKS_OAK_PAINTED));
+
+        addDispatch(new BlockModelStandard<>(Blocks.BOOKSHELF_PLANKS_OAK).withTextures("minecraft:block/bookshelf/top", "minecraft:block/bookshelf/side"));
+
+        addDispatch(new BlockModelWool<>(Blocks.WOOL));
+        addDispatch(new BlockModelRope<>(Blocks.ROPE).withTextures("minecraft:block/rope"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_CLAY).withTextures("minecraft:block/brick_clay"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE_POLISHED).withTextures("minecraft:block/brick_polished_stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE_POLISHED_MOSSY).withTextures("minecraft:block/brick_polished_stone_mossy"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_SANDSTONE).withTextures("minecraft:block/brick_sandstone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_GOLD).withTextures("minecraft:block/brick_gold"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_LAPIS).withTextures("minecraft:block/brick_lapis"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_BASALT).withTextures("minecraft:block/brick_basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_LIMESTONE).withTextures("minecraft:block/brick_limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_GRANITE).withTextures("minecraft:block/brick_granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_MARBLE).withTextures("minecraft:block/brick_marble"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_SLATE).withTextures("minecraft:block/brick_slate"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STONE).withTextures("minecraft:block/brick_stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_PERMAFROST).withTextures("minecraft:block/brick_permafrost"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_IRON).withTextures("minecraft:block/brick_iron"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_STEEL).withTextures("minecraft:block/brick_steel"));
+
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_PLANKS_OAK));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_STONE));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_SANDSTONE));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_STONE_POLISHED));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_STONE_POLISHED));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_MARBLE));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_CLAY));
+        addDispatch(new BlockModelSlabMarble<>(Blocks.SLAB_CAPSTONE_MARBLE));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_BASALT));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_LIMESTONE));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_GRANITE));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_BASALT));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_LIMESTONE));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_GRANITE));
+        addDispatch(new BlockModelSlabPainted<>(Blocks.SLAB_PLANKS_PAINTED));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_SLATE));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_STONE));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_GRANITE_POLISHED));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_LIMESTONE_POLISHED));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BASALT_POLISHED));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_PERMAFROST_POLISHED));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_PERMAFROST));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_SANDSTONE));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_PERMAFROST));
+
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_PLANKS_OAK));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_STONE));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_STONE_POLISHED));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_MARBLE));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_BASALT));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_LIMESTONE));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_GRANITE));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_BASALT));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_LIMESTONE));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_GRANITE));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_CLAY));
+        addDispatch(new BlockModelStairsPainted<>(Blocks.STAIRS_PLANKS_PAINTED));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_SLATE));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_STONE));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_SANDSTONE));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_PERMAFROST));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_SANDSTONE));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_PERMAFROST));
+
+        addDispatch(new BlockModelStandard<>(Blocks.OBSIDIAN).withTextures("minecraft:block/obsidian"));
+
+        addDispatch(new BlockModelTransparent<>(Blocks.GLASS, false).withTextures("minecraft:block/glass"));
+        addDispatch(new BlockModelTransparent<>(Blocks.GLASS_TINTED, false).onRenderLayer(1).withTextures("minecraft:block/glass_tinted"));
+        addDispatch(new BlockModelTransparent<>(Blocks.GLASS_STEEL, false).withTextures("minecraft:block/glass_steel"));
+
+        addDispatch(new BlockModelGrass<>(Blocks.GRASS).withTextures("minecraft:block/grass/top", "minecraft:block/grass/bottom", "minecraft:block/grass/side"));
+        addDispatch(new BlockModelStandard<>(Blocks.GRASS_RETRO).withTextures("minecraft:block/grass_retro/top", "minecraft:block/grass_retro/bottom", "minecraft:block/grass_retro/side"));
+        addDispatch(new BlockModelStandard<>(Blocks.GRASS_SCORCHED).withTextures("minecraft:block/grass_scorched/top", "minecraft:block/grass_scorched/bottom", "minecraft:block/grass_scorched/side"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.PATH_DIRT).withTextures("minecraft:block/grass_path/top", "minecraft:block/grass_path/bottom", "minecraft:block/grass_path/side"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.DIRT).withTextures("minecraft:block/dirt"));
+        addDispatch(new BlockModelStandard<>(Blocks.DIRT_SCORCHED).withTextures("minecraft:block/dirt_scorched"));
+        addDispatch(new BlockModelStandard<>(Blocks.DIRT_SCORCHED_RICH).withTextures("minecraft:block/dirt_scorched_rich"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.MUD).withTextures("minecraft:block/mud"));
+        addDispatch(new BlockModelStandard<>(Blocks.MUD_BAKED).withTextures("minecraft:block/mud_baked"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.SPONGE_DRY).withTextures("minecraft:block/sponge"));
+        addDispatch(new BlockModelStandard<>(Blocks.SPONGE_WET).withTextures("minecraft:block/sponge_wet"));
+        addDispatch(new BlockModelPumice<>(Blocks.PUMICE_DRY).withTextures("minecraft:block/pumice"));
+        addDispatch(new BlockModelPumice<>(Blocks.PUMICE_WET).withTextures("minecraft:block/pumice_overlay"));
+
+        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_STONE).withTextures("minecraft:block/stone"));
+        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_BASALT).withTextures("minecraft:block/basalt"));
+        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_LIMESTONE).withTextures("minecraft:block/limestone"));
+        addDispatch(new BlockModelStoneMossy<>(Blocks.MOSS_GRANITE).withTextures("minecraft:block/granite"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.SAND).withTextures("minecraft:block/sand"));
+        addDispatch(new BlockModelStandard<>(Blocks.GRAVEL).withTextures("minecraft:block/gravel"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.BEDROCK).withTextures("minecraft:block/bedrock"));
+        addDispatch(new BlockModelFullyRotatable<>(Blocks.BONESHALE).withTextures("minecraft:block/bone_shale/top", "minecraft:block/bone_shale/bottom", "minecraft:block/bone_shale/side"));
+
+        addDispatch(new BlockModelFluid<>(Blocks.FLUID_WATER_FLOWING).onRenderLayer(1).withTextures("minecraft:block/water_still", "minecraft:block/water_flowing", "minecraft:block/water_flowing"));
+        addDispatch(new BlockModelFluid<>(Blocks.FLUID_WATER_STILL).onRenderLayer(1).withTextures("minecraft:block/water_still", "minecraft:block/water_flowing"));
+        addDispatch(new BlockModelFluid<>(Blocks.FLUID_LAVA_FLOWING).withTextures("minecraft:block/lava_still", "minecraft:block/lava_flowing", "minecraft:block/lava_flowing"));
+        addDispatch(new BlockModelFluid<>(Blocks.FLUID_LAVA_STILL).withTextures("minecraft:block/lava_still", "minecraft:block/lava_flowing"));
+
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_OAK).withTextures("minecraft:block/log/oak_top", "minecraft:block/log/oak_side"));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_PINE).withTextures("minecraft:block/log/pine_top", "minecraft:block/log/pine_side"));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_BIRCH).withTextures("minecraft:block/log/birch_top", "minecraft:block/log/birch_side"));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_CHERRY).withTextures("minecraft:block/log/cherry_top", "minecraft:block/log/cherry_side"));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_EUCALYPTUS).withTextures("minecraft:block/log/eucalyptus_top", "minecraft:block/log/eucalyptus_side"));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_OAK_MOSSY).withTextures("minecraft:block/log/oak_mossy_top", "minecraft:block/log/oak_mossy_side"));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_THORN).withTextures("minecraft:block/log/thorn_top", "minecraft:block/log/thorn_side"));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.LOG_PALM).withTextures("minecraft:block/log/palm_top", "minecraft:block/log/palm_side"));
+
+        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_OAK, "minecraft:block/leaves/oak"));
+        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_OAK_RETRO, "minecraft:block/leaves/oak_retro"));
+        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_PINE, "minecraft:block/leaves/pine"));
+        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_BIRCH, "minecraft:block/leaves/birch"));
+        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_CHERRY, "minecraft:block/leaves/cherry"));
+        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_EUCALYPTUS, "minecraft:block/leaves/eucalyptus"));
+        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_SHRUB, "minecraft:block/leaves/shrub"));
+        addDispatch(new BlockModelLeavesCherryFlowering<>(Blocks.LEAVES_CHERRY_FLOWERING));
+        addDispatch(new BlockModelLeavesCacao<>(Blocks.LEAVES_CACAO));
+        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_THORN, "minecraft:block/leaves/caatinga"));
+        addDispatch(new BlockModelLeaves<>(Blocks.LEAVES_PALM, "minecraft:block/leaves/palm"));
+
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_OAK).withTextures("minecraft:block/sapling/oak"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_OAK_RETRO).withTextures("minecraft:block/sapling/oak_retro"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_PINE).withTextures("minecraft:block/sapling/pine"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_BIRCH).withTextures("minecraft:block/sapling/birch"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_CHERRY).withTextures("minecraft:block/sapling/cherry"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_EUCALYPTUS).withTextures("minecraft:block/sapling/eucalyptus"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_SHRUB).withTextures("minecraft:block/sapling/shrub"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_CACAO).withTextures("minecraft:block/sapling/cacao"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_THORN).withTextures("minecraft:block/sapling/thorn"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SAPLING_PALM).withTextures("minecraft:block/sapling/palm"));
+
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.TALLGRASS).withTextures("minecraft:block/tallgrass"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.TALLGRASS_FERN).withTextures("minecraft:block/fern"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.DEADBUSH).withTextures("minecraft:block/deadbush"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SPINIFEX).withTextures("minecraft:block/spinifex"));
+        addDispatch(new BlockModelAlgae<>(Blocks.ALGAE).withTextures("minecraft:block/algae").withCustomItemBounds(0.0f, 0.01f, 0.0f, 1.0f, 0.0125f, 1.0f));
+
+        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_YELLOW, "minecraft:block/flower_yellow/"));
+        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_RED, "minecraft:block/flower_red/"));
+        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_PINK, "minecraft:block/flower_pink/"));
+        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_PURPLE, "minecraft:block/flower_purple/"));
+        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_LIGHT_BLUE, "minecraft:block/flower_lightblue/"));
+        addDispatch(new BlockModelFlowerStackable<>(Blocks.FLOWER_ORANGE, "minecraft:block/flower_orange/"));
+
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.MUSHROOM_BROWN).withTextures("minecraft:block/mushroom_brown"));
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.MUSHROOM_RED).withTextures("minecraft:block/mushroom_red"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_STONE).withTextures("minecraft:block/ore/coal/stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_BASALT).withTextures("minecraft:block/ore/coal/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_LIMESTONE).withTextures("minecraft:block/ore/coal/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_GRANITE).withTextures("minecraft:block/ore/coal/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_COAL_PERMAFROST).withTextures("minecraft:block/ore/coal/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_STONE).withTextures("minecraft:block/ore/iron/stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_BASALT).withTextures("minecraft:block/ore/iron/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_LIMESTONE).withTextures("minecraft:block/ore/iron/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_GRANITE).withTextures("minecraft:block/ore/iron/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_IRON_PERMAFROST).withTextures("minecraft:block/ore/iron/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_STONE).withTextures("minecraft:block/ore/gold/stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_BASALT).withTextures("minecraft:block/ore/gold/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_LIMESTONE).withTextures("minecraft:block/ore/gold/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_GRANITE).withTextures("minecraft:block/ore/gold/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_GOLD_PERMAFROST).withTextures("minecraft:block/ore/gold/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_STONE).withTextures("minecraft:block/ore/lapis/stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_BASALT).withTextures("minecraft:block/ore/lapis/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_LIMESTONE).withTextures("minecraft:block/ore/lapis/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_GRANITE).withTextures("minecraft:block/ore/lapis/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_LAPIS_PERMAFROST).withTextures("minecraft:block/ore/lapis/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_STONE).withTextures("minecraft:block/ore/redstone/stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_BASALT).withTextures("minecraft:block/ore/redstone/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_LIMESTONE).withTextures("minecraft:block/ore/redstone/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GRANITE).withTextures("minecraft:block/ore/redstone/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_PERMAFROST).withTextures("minecraft:block/ore/redstone/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_STONE).withTextures("minecraft:block/ore/redstone/stone").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_BASALT).withTextures("minecraft:block/ore/redstone/basalt").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_LIMESTONE).withTextures("minecraft:block/ore/redstone/limestone").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_GRANITE).withTextures("minecraft:block/ore/redstone/granite").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_REDSTONE_GLOWING_PERMAFROST).withTextures("minecraft:block/ore/redstone/permafrost").withOverbrightTexture("minecraft:block/ore/redstone/overlay"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_STONE).withTextures("minecraft:block/ore/diamond/stone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_BASALT).withTextures("minecraft:block/ore/diamond/basalt"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_LIMESTONE).withTextures("minecraft:block/ore/diamond/limestone"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_GRANITE).withTextures("minecraft:block/ore/diamond/granite"));
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_DIAMOND_PERMAFROST).withTextures("minecraft:block/ore/diamond/permafrost"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.ORE_NETHERCOAL_NETHERRACK).withTextures("minecraft:block/ore/nethercoal/netherrack").withOverbrightTexture("minecraft:block/ore/nethercoal/netherrack_overlay"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_COAL).withTextures("minecraft:block/block_coal"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_IRON).withTextures("minecraft:block/block_iron/top", "minecraft:block/block_iron/bottom", "minecraft:block/block_iron/side"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_GOLD).withTextures("minecraft:block/block_gold/top", "minecraft:block/block_gold/bottom", "minecraft:block/block_gold/side"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_LAPIS).withTextures("minecraft:block/block_lapis"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_REDSTONE).withTextures("minecraft:block/block_redstone"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_DIAMOND).withTextures("minecraft:block/block_diamond/top", "minecraft:block/block_diamond/bottom", "minecraft:block/block_diamond/side"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_NETHER_COAL).withTextures("minecraft:block/block_nethercoal").withOverbrightTexture("minecraft:block/block_nethercoal_overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_STEEL).withTextures("minecraft:block/block_steel/top", "minecraft:block/block_steel/bottom", "minecraft:block/block_steel/side"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_QUARTZ).withTextures("minecraft:block/block_quartz"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_OLIVINE).withTextures("minecraft:block/block_olivine"));
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_CHARCOAL).withTextures("minecraft:block/block_charcoal"));
+
+        addDispatch(new BlockModelWireRedstone<>(Blocks.WIRE_REDSTONE));
+
+        addDispatch(new BlockModelTorchRedstone(Blocks.TORCH_REDSTONE_IDLE).withTextures("minecraft:block/torch_redstone_idle"));
+        addDispatch(new BlockModelTorchRedstone(Blocks.TORCH_REDSTONE_ACTIVE).withTextures("minecraft:block/torch_redstone_active"));
+
+        final float width = 0.1875F;
+        final float height = 0.125F;
+        final float depth = 0.125F;
+        addDispatch(new BlockModelStandard<>(Blocks.BUTTON_STONE).withTextures("minecraft:block/stone").withCustomItemBounds(0.5F - width, 0.5F - height, 0.5F - depth, 0.5F + width, 0.5F + height, 0.5F + depth));
+
+        addDispatch(new BlockModelLever<>(Blocks.LEVER_COBBLE_STONE).withTextures("minecraft:block/lever_cobbled_stone"));
+
+        final float f = 0.5F;
+        final float f1 = 0.125F;
+        final float f2 = 0.5F;
+        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_STONE).withTextures("minecraft:block/stone").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
+        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_PLANKS_OAK).withTextures("minecraft:block/planks/oak").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
+        addDispatch(new BlockModelStandard<>(Blocks.PRESSURE_PLATE_COBBLE_STONE).withTextures("minecraft:block/cobbled_stone").withCustomItemBounds(0.5F - f, 0.5F - f1, 0.5F - f2, 0.5F + f, 0.5F + f1, 0.5F + f2));
+
+        addDispatch(new BlockModelMotionSensor(Blocks.MOTION_SENSOR_IDLE).withTextures("minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/idle_front", "minecraft:block/motion_sensor/side"));
+        addDispatch(new BlockModelMotionSensor(Blocks.MOTION_SENSOR_ACTIVE).withTextures("minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/side", "minecraft:block/motion_sensor/active_front", "minecraft:block/motion_sensor/side"));
+
+        addDispatch(new BlockModelRepeater(Blocks.REPEATER_IDLE).withTextures("minecraft:block/repeater/idle_top", "minecraft:block/polished_stone_top"));
+        addDispatch(new BlockModelRepeater(Blocks.REPEATER_ACTIVE).withTextures("minecraft:block/repeater/active_top", "minecraft:block/polished_stone_top").withOverbrightTexture("minecraft:block/repeater/active_overlay"));
+
+        addDispatch(new BlockModelPiston<>(Blocks.PISTON_BASE,
+            TextureRegistry.getTexture("minecraft:block/piston/face"))
+            .setPistonTextures("minecraft:block/piston/side", "minecraft:block/piston/top", "minecraft:block/piston/bottom")
+            .withTextures("minecraft:block/piston/face")
+            .withCustomItemBounds(0,0,0,1,1,1));
+        addDispatch(new BlockModelPiston<>(Blocks.PISTON_BASE_STICKY,
+            TextureRegistry.getTexture("minecraft:block/piston_sticky/face"))
+            .setPistonTextures("minecraft:block/piston_sticky/side", "minecraft:block/piston_sticky/top", "minecraft:block/piston_sticky/bottom")
+            .withTextures("minecraft:block/piston_sticky/face")
+            .withCustomItemBounds(0,0,0,1,1,1));
+        addDispatch(new BlockModelPiston<>(Blocks.PISTON_BASE_STEEL,
+            TextureRegistry.getTexture("minecraft:block/piston_steel/face"), 6/16d)
+            .setPistonTextures("minecraft:block/piston_steel/side", "minecraft:block/piston_steel/top", "minecraft:block/piston_steel/bottom")
+            .withTextures("minecraft:block/piston_steel/face")
+            .withCustomItemBounds(0,0,0,1,1,1));
+
+        addDispatch(new BlockModelPistonHead(Blocks.PISTON_HEAD, TextureRegistry.getTexture("minecraft:block/piston/side")).withTextures("minecraft:block/piston/face"));
+        addDispatch(new BlockModelEmpty(Blocks.PISTON_MOVING));
+        addDispatch(new BlockModelPistonHead(Blocks.PISTON_HEAD_STEEL, TextureRegistry.getTexture("minecraft:block/piston_steel/side"), 6/16d).withTextures("minecraft:block/piston_steel/face"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.NOTEBLOCK).withTextures("minecraft:block/noteblock"));
+
+        addDispatch(new BlockModelRail<>(Blocks.RAIL).withTextures("minecraft:block/rail/straight"));
+        addDispatch(new BlockModelRail<>(Blocks.RAIL_POWERED).withTextures("minecraft:block/rail_powered/idle"));
+        addDispatch(new BlockModelRail<>(Blocks.RAIL_DETECTOR).withTextures("minecraft:block/rail_detector/straight"));
+
+        addDispatch(new BlockModelSpikes<>(Blocks.SPIKES).withTextures("minecraft:block/spikes/top", "minecraft:block/spikes/bottom", "minecraft:block/spikes/side"));
+
+        addDispatch(new BlockModelVeryRotatable<>(Blocks.DISPENSER_COBBLE_STONE).withTextures("minecraft:block/dispenser/top", "minecraft:block/dispenser/bottom", "minecraft:block/dispenser/side", "minecraft:block/dispenser/side", "minecraft:block/dispenser/front", "minecraft:block/dispenser/side"));
+        addDispatch(new BlockModelActivator(Blocks.ACTIVATOR_COBBLE_NETHERRACK).withTextures("minecraft:block/activator/top", "minecraft:block/activator/bottom", "minecraft:block/activator/side", "minecraft:block/activator/side", "minecraft:block/activator/front", "minecraft:block/activator/side"));
+
+        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_PLANKS_OAK).withTextures("minecraft:block/trapdoor/planks/top", "minecraft:block/trapdoor/planks/side"));
+        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_IRON).withTextures("minecraft:block/trapdoor/iron/top", "minecraft:block/trapdoor/iron/side"));
+        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_GLASS).withTextures("minecraft:block/trapdoor/glass/top", "minecraft:block/trapdoor/glass/side"));
+        addDispatch(new BlockModelTrapDoorPainted<>(Blocks.TRAPDOOR_PLANKS_PAINTED));
+        addDispatch(new BlockModelTrapDoor<>(Blocks.TRAPDOOR_STEEL).withTextures("minecraft:block/trapdoor/steel/top", "minecraft:block/trapdoor/steel/side"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.TNT).withTextures("minecraft:block/tnt/top", "minecraft:block/tnt/bottom", "minecraft:block/tnt/side"));
+
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_PLANKS_OAK_BOTTOM).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/bottom"));
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_PLANKS_OAK_TOP).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/top"));
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_IRON_BOTTOM).withTextures("minecraft:block/door/iron/frame_top", "minecraft:block/door/iron/bottom"));
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_IRON_TOP).withTextures("minecraft:block/door/iron/frame_top", "minecraft:block/door/iron/top"));
+        addDispatch(new BlockModelDoorPainted<>(Blocks.DOOR_PLANKS_PAINTED_BOTTOM, false).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/bottom"));
+        addDispatch(new BlockModelDoorPainted<>(Blocks.DOOR_PLANKS_PAINTED_TOP, true).withTextures("minecraft:block/door/planks/frame_top", "minecraft:block/door/planks/top"));
+        addDispatch(new BlockModelDoorGlass<>(Blocks.DOOR_GLASS_BOTTOM).withTextures("minecraft:block/door/glass/frame_top", "minecraft:block/door/glass/bottom"));
+        addDispatch(new BlockModelDoorGlass<>(Blocks.DOOR_GLASS_TOP).withTextures("minecraft:block/door/glass/frame_top", "minecraft:block/door/glass/top"));
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_STEEL_BOTTOM).withTextures("minecraft:block/door/steel/frame_top", "minecraft:block/door/steel/bottom"));
+        addDispatch(new BlockModelDoor<>(Blocks.DOOR_STEEL_TOP).withTextures("minecraft:block/door/steel/frame_top", "minecraft:block/door/steel/top"));
+
+        addDispatch(new BlockModelTransparent<>(Blocks.MESH, true).withTextures("minecraft:block/mesh"));
+        addDispatch(new BlockModelTransparent<>(Blocks.MESH_GOLD, true).withTextures("minecraft:block/mesh_gold"));
+
+        addDispatch(new BlockModelBed<>(Blocks.BED));
+        addDispatch(new BlockModelSeat<>(Blocks.SEAT).withTextures("minecraft:block/seat/top", "minecraft:block/seat/bottom", "minecraft:block/seat/side"));
+
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.COBWEB).withTextures("minecraft:block/cobweb"));
+        addDispatch(new BlockModelFire<>(Blocks.FIRE).withTextures("minecraft:block/fire"));
+        addDispatch(new BlockModelBrazier<>(Blocks.BRAZIER_INACTIVE).withTextures("minecraft:block/brazier/base", "minecraft:block/brazier/side"));
+        addDispatch(new BlockModelBrazier<>(Blocks.BRAZIER_ACTIVE).withTextures("minecraft:block/brazier/base", "minecraft:block/brazier/side"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.MOBSPAWNER).withTextures("minecraft:block/mobspawner"));
+        addDispatch(new BlockModelTransparent<>(Blocks.MOBSPAWNER_DEACTIVATED, true).withTextures("minecraft:block/mobspawner"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.WORKBENCH).withTextures("minecraft:block/workbench/top", "minecraft:block/workbench/bottom", "minecraft:block/workbench/front", "minecraft:block/workbench/side", "minecraft:block/workbench/front", "minecraft:block/workbench/side"));
+
+        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_STONE_IDLE).withTextures("minecraft:block/furnace_stone/top", "minecraft:block/furnace_stone/bottom", "minecraft:block/furnace_stone/idle_front", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side"));
+        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_STONE_ACTIVE).withTextures("minecraft:block/furnace_stone/top", "minecraft:block/furnace_stone/bottom", "minecraft:block/furnace_stone/active_front", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side", "minecraft:block/furnace_stone/side"));
+        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_BLAST_IDLE).withTextures("minecraft:block/furnace_blast/top", "minecraft:block/furnace_blast/bottom", "minecraft:block/furnace_blast/idle_front", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side"));
+        addDispatch(new BlockModelFurnace<>(Blocks.FURNACE_BLAST_ACTIVE).withTextures("minecraft:block/furnace_blast/top", "minecraft:block/furnace_blast/bottom", "minecraft:block/furnace_blast/active_front", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side", "minecraft:block/furnace_blast/side"));
+
+        addDispatch(new BlockModelHorizontalRotation<>(Blocks.TROMMEL_IDLE).withTextures("minecraft:block/trommel/top", "minecraft:block/trommel/top", "minecraft:block/trommel/idle_front", "minecraft:block/trommel/side_slot", "minecraft:block/trommel/idle_front", "minecraft:block/trommel/side"));
+        addDispatch(new BlockModelHorizontalRotation<>(Blocks.TROMMEL_ACTIVE).withTextures("minecraft:block/trommel/top", "minecraft:block/trommel/top", "minecraft:block/trommel/active_front", "minecraft:block/trommel/side_slot", "minecraft:block/trommel/active_back", "minecraft:block/trommel/side"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.CHEST_LEGACY).withTextures("minecraft:block/chest/planks/top"));
+        addDispatch(new BlockModelStandard<>(Blocks.CHEST_LEGACY_PAINTED).withTextures("minecraft:block/chest/planks/top"));
+        addDispatch(new BlockModelChest<>(Blocks.CHEST_PLANKS_OAK, "minecraft:block/chest/planks/").withTextures("minecraft:block/chest/planks/top"));
+        addDispatch(new BlockModelChestPainted<>(Blocks.CHEST_PLANKS_OAK_PAINTED).withTextures("minecraft:block/chest/planks/top"));
+
+        addDispatch(new BlockModelCropsWheat<>(Blocks.CROPS_WHEAT));
+        addDispatch(new BlockModelCropsPumpkin<>(Blocks.CROPS_PUMPKIN));
+
+        addDispatch(new BlockModelFarmland<>(Blocks.FARMLAND_DIRT).withTextures("minecraft:block/farmland/dry"));
+
+        addDispatch(new BlockModelEmpty(Blocks.SIGN_POST_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
+        addDispatch(new BlockModelEmpty(Blocks.SIGN_WALL_PLANKS_OAK).withTextures("minecraft:block/planks/oak"));
+        addDispatch(new BlockModelEmpty(Blocks.FLAG).withTextures("minecraft:block/planks/oak"));
+
+        addDispatch(new BlockModelLayer<>(Blocks.LAYER_SNOW).withTextures("minecraft:block/block_snow"));
+        addDispatch(new BlockModelLayer<>(Blocks.LAYER_LEAVES_OAK).withTextures("minecraft:block/leaves/oak_fancy"));
+        addDispatch(new BlockModelLayer<>(Blocks.LAYER_SLATE).withTextures("minecraft:block/slate_top", "minecraft:block/slate_side"));
+
+        addDispatch(new BlockModelIce<>(Blocks.ICE).onRenderLayer(1).withTextures("minecraft:block/ice"));
+        addDispatch(new BlockModelStandard<>(Blocks.PERMAICE).withTextures("minecraft:block/permaice"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_SNOW).withTextures("minecraft:block/block_snow"));
+
+        addDispatch(new BlockModelCactus<>(Blocks.CACTUS).withCustomItemBounds(0, 0, 0, 1, 1, 1).withTextures("minecraft:block/cactus/top", "minecraft:block/cactus/bottom", "minecraft:block/cactus/side"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.BLOCK_CLAY).withTextures("minecraft:block/block_clay"));
+
+        addDispatch(new BlockModelCrossedSquares<>(Blocks.SUGARCANE).withTextures("minecraft:block/sugarcane"));
+
+        addDispatch(new BlockModelAxisAligned<>(Blocks.BLOCK_SUGARCANE).withTextures("minecraft:block/block_sugarcane/top", "minecraft:block/block_sugarcane/side"));
+        addDispatch(new BlockModelAxisAligned<>(Blocks.BLOCK_SUGARCANE_BAKED).withTextures("minecraft:block/block_baked_sugarcane/top", "minecraft:block/block_baked_sugarcane/side"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.JUKEBOX).withTextures("minecraft:block/jukebox/top", "minecraft:block/jukebox/bottom", "minecraft:block/jukebox/side"));
+
+        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN).withTextures("minecraft:block/pumpkin/top", "minecraft:block/pumpkin/bottom", "minecraft:block/pumpkin/side"));
+        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN_CARVED_IDLE).withTextures("minecraft:block/pumpkin_carved/top", "minecraft:block/pumpkin_carved/bottom", "minecraft:block/pumpkin_carved/front", "minecraft:block/pumpkin_carved/side", "minecraft:block/pumpkin_carved/side", "minecraft:block/pumpkin_carved/side"));
+        addDispatch(new BlockModelHorizontalRotation<>(Blocks.PUMPKIN_CARVED_ACTIVE).withTextures("minecraft:block/pumpkin_carved_lit/top", "minecraft:block/pumpkin_carved_lit/bottom", "minecraft:block/pumpkin_carved_lit/front", "minecraft:block/pumpkin_carved_lit/side", "minecraft:block/pumpkin_carved_lit/side", "minecraft:block/pumpkin_carved_lit/side"));
+        addDispatch(new BlockModelPumpkinRedstone(Blocks.PUMPKIN_REDSTONE).withTextures("minecraft:block/pumpkin_redstone/top", "minecraft:block/pumpkin_redstone/bottom", "minecraft:block/pumpkin_redstone/front", "minecraft:block/pumpkin_redstone/side", "minecraft:block/pumpkin_redstone/side", "minecraft:block/pumpkin_redstone/side"));
+
+
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK).withTextures("minecraft:block/cobbled_netherrack"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK_IGNEOUS).withTextures("minecraft:block/cobbled_netherrack_igneous").withOverbrightTexture("minecraft:block/cobbled_netherrack_igneous_overlay"));
+        addDispatch(new BlockModelStandard<>(Blocks.COBBLE_NETHERRACK_MOSSY).withTextures("minecraft:block/cobbled_netherrack_mossy"));
+        addDispatch(new BlockModelStandard<>(Blocks.NETHERRACK).withTextures("minecraft:block/netherrack"));
+        addDispatch(new BlockModelStandard<>(Blocks.BRICK_NETHERRACK).withTextures("minecraft:block/brick_netherrack"));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_NETHERRACK_POLISHED));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_COBBLE_NETHERRACK));
+        addDispatch(new BlockModelSlab<>(Blocks.SLAB_BRICK_NETHERRACK));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_COBBLE_NETHERRACK));
+        addDispatch(new BlockModelStairs<>(Blocks.STAIRS_BRICK_NETHERRACK));
+
+        addDispatch(new BlockModelStandard<>(Blocks.SOULSAND).withTextures("minecraft:block/soulsand"));
+        addDispatch(new BlockModelStandard<>(Blocks.SOULSCHIST).withTextures("minecraft:block/soulschist"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.GLOWSTONE).withTextures("minecraft:block/glowstone"));
+
+        addDispatch(new BlockModelPortal<>(Blocks.PORTAL_NETHER, "minecraft:block/portal_nether/").withTextures("minecraft:block/portal_nether"));
+        addDispatch(new BlockModelPortal<>(Blocks.PORTAL_PARADISE, "minecraft:block/portal_paradise/").withTextures("minecraft:block/portal_nether"));
+
+        addDispatch(new BlockModelCake<>(Blocks.CAKE).withTextures("minecraft:block/cake/top", "minecraft:block/cake/bottom", "minecraft:block/cake/side"));
+        addDispatch(new BlockModelPiePumpkin<>(Blocks.PUMPKIN_PIE).withTextures("minecraft:block/pumpkin_pie/top", "minecraft:block/pumpkin_pie/bottom", "minecraft:block/pumpkin_pie/side"));
+
+        addDispatch(new BlockModelLamp<>(Blocks.LAMP_IDLE));
+        addDispatch(new BlockModelLamp<>(Blocks.LAMP_ACTIVE));
+
+        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_GREEN).withTextures("minecraft:block/lantern_firefly/green"));
+        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_BLUE).withTextures("minecraft:block/lantern_firefly/blue"));
+        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_ORANGE).withTextures("minecraft:block/lantern_firefly/orange"));
+        addDispatch(new BlockModelLantern<>(Blocks.LANTERN_FIREFLY_RED).withTextures("minecraft:block/lantern_firefly/red"));
+        addDispatch(new BlockModelJar<>(Blocks.JAR_GLASS));
+
+        addDispatch(new BlockModelPebbles<>(Blocks.OVERLAY_PEBBLES));
+
+        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_CHAINLINK,TextureRegistry.getTexture("minecraft:block/fence_chain/center"), null, TextureRegistry.getTexture("minecraft:block/fence_chain/top"), TextureRegistry.getTexture("minecraft:block/fence_chain/column")).withTextures("minecraft:block/fence_chain/center"));
+        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_PAPER_WALL,TextureRegistry.getTexture("minecraft:block/fence_paper/center"), null, null, TextureRegistry.getTexture("minecraft:block/fence_paper/column")).withTextures("minecraft:block/fence_paper/center"));
+        addDispatch(new BlockModelFenceThin<>(Blocks.FENCE_STEEL,TextureRegistry.getTexture("minecraft:block/fence_steel/center"), null, TextureRegistry.getTexture("minecraft:block/fence_steel/top"), TextureRegistry.getTexture("minecraft:block/fence_steel/column")).withTextures("minecraft:block/fence_steel/center"));
+
+        addDispatch(new BlockModelBasket<>(Blocks.BASKET).withTextures("minecraft:block/basket/bottom", "minecraft:block/basket/side"));
+
+        addDispatch(new BlockModelStandard<>(Blocks.PAPER_WALL).withTextures("minecraft:block/paperwall"));
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java
similarity index 82%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java
index a3ca032ef..714072c78 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDoor.java
@@ -7,6 +7,7 @@ import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockDoor;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 
 public class BlockModelDoor<T extends BlockDoor> extends BlockModelStandard<T> {
     public BlockModelDoor(Block block) {
@@ -29,8 +30,8 @@ public class BlockModelDoor<T extends BlockDoor> extends BlockModelStandard<T> {
     		tessellator.setLightmapCoord(LightmapHelper.getLightmapCoord(15, 15));
     	}
     	tessellator.setColorOpaque_F(1.0f, 1.0f, 1.0f);
-    	
-		block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+
+		AABB bounds = block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z);
 
 		float sideBottom = 1.0f;
 		float sideTop = 1.0f;
@@ -51,57 +52,57 @@ public class BlockModelDoor<T extends BlockDoor> extends BlockModelStandard<T> {
 		// Bottom
 		if(!belowIsDoor) {
 			setBrightness(tessellator, x, y - 1, z, sideBottom);
-			renderBottomFace(tessellator, block, x, y, z, getBlockTexture(renderBlocks.blockAccess, x, y, z, Side.BOTTOM));
+			renderBottomFace(tessellator, bounds, x, y, z, getBlockTexture(renderBlocks.blockAccess, x, y, z, Side.BOTTOM));
 		}
 		
 		// Top
 		if(!aboveIsDoor) {
 			setBrightness(tessellator, x, y + 1, z, sideTop);
-			renderTopFace(tessellator, block, x, y, z, getBlockTexture(renderBlocks.blockAccess, x, y, z, Side.TOP));
+			renderTopFace(tessellator, bounds, x, y, z, getBlockTexture(renderBlocks.blockAccess, x, y, z, Side.TOP));
 		}
 		
 		// North
-		if(block.minZ > RenderBlocks.FULL_CUBE_THRESHOLD) {
+		if(bounds.minZ > RenderBlocks.FULL_CUBE_THRESHOLD) {
 			setBrightness(tessellator, x, y, z, sideNorthSouth);
 		}else {
 			setBrightness(tessellator, x, y, z - 1, sideNorthSouth);
 		}
 		renderBlocks.flipTexture = shouldFlipTexture(Side.NORTH, meta);
 		IconCoordinate texture = getBlockTexture(renderBlocks.blockAccess, x, y, z, Side.NORTH);
-		renderNorthFace(tessellator, block, x, y, z, texture);
+		renderNorthFace(tessellator, bounds, x, y, z, texture);
 		renderBlocks.flipTexture = false;
 		
 		// South
-		if(block.maxZ < 1.0f - RenderBlocks.FULL_CUBE_THRESHOLD) {
+		if(bounds.maxZ < 1.0f - RenderBlocks.FULL_CUBE_THRESHOLD) {
 			setBrightness(tessellator, x, y, z, sideNorthSouth);
 		}else {
 			setBrightness(tessellator, x, y, z + 1, sideNorthSouth);
 		}
 		renderBlocks.flipTexture = shouldFlipTexture(Side.SOUTH, meta);
 		texture = getBlockTexture(renderBlocks.blockAccess, x, y, z, Side.SOUTH);
-		renderSouthFace(tessellator, block, x, y, z, texture);
+		renderSouthFace(tessellator, bounds, x, y, z, texture);
 		renderBlocks.flipTexture = false;
 		
 		// West
-		if(block.minX > RenderBlocks.FULL_CUBE_THRESHOLD) {
+		if(bounds.minX > RenderBlocks.FULL_CUBE_THRESHOLD) {
 			setBrightness(tessellator, x, y, z, sideEastWest);
 		}else {
 			setBrightness(tessellator, x - 1, y, z, sideEastWest);
 		}
 		renderBlocks.flipTexture = shouldFlipTexture(Side.WEST, meta);
 		texture = getBlockTexture(renderBlocks.blockAccess, x, y, z, Side.WEST);
-		renderWestFace(tessellator, block, x, y, z, texture);
+		renderWestFace(tessellator, bounds, x, y, z, texture);
 		renderBlocks.flipTexture = false;
 		
 		// East
-		if(block.maxX < 1.0f - RenderBlocks.FULL_CUBE_THRESHOLD) {
+		if(bounds.maxX < 1.0f - RenderBlocks.FULL_CUBE_THRESHOLD) {
 			setBrightness(tessellator, x, y, z, sideEastWest);
 		}else {
 			setBrightness(tessellator, x + 1, y, z, sideEastWest);
 		}
 		renderBlocks.flipTexture = shouldFlipTexture(Side.EAST, meta);
 		texture = getBlockTexture(renderBlocks.blockAccess, x, y, z, Side.EAST);
-		renderEastFace(tessellator, block, x, y, z, texture);
+		renderEastFace(tessellator, bounds, x, y, z, texture);
 		renderBlocks.flipTexture = false;
 		return true;
 	}
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelDoorGlass.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDoorGlass.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelDoorGlass.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDoorGlass.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelDoorPainted.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDoorPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelDoorPainted.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelDoorPainted.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelEmpty.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelEmpty.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelEmpty.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelEmpty.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFarmland.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFarmland.java
similarity index 92%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelFarmland.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFarmland.java
index 3d01103ac..d5455d4dd 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFarmland.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFarmland.java
@@ -6,6 +6,7 @@ import net.minecraft.core.block.Block;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.BlockFarmland;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 
 public class BlockModelFarmland<T extends Block> extends BlockModelStandard<T> {
@@ -44,8 +45,8 @@ public class BlockModelFarmland<T extends Block> extends BlockModelStandard<T> {
     }
 
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side) {
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side) {
         if (side >= 2 && blockAccess.getBlockId(x, y, z) == Blocks.FARMLAND_DIRT.id) return false;
-        return super.shouldSideBeRendered(blockAccess, x, y, z, side);
+        return super.shouldSideBeRendered(blockAccess, bounds, x, y, z, side);
     }
 }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFence.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFence.java
similarity index 61%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelFence.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFence.java
index 4829a7b28..3b21d2d7c 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFence.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFence.java
@@ -5,6 +5,7 @@ import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockFence;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
 
@@ -15,12 +16,10 @@ public class BlockModelFence<T  extends BlockFence> extends BlockModelStandard<T
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         final float f = 0.375F;
         final float f1 = 0.625F;
-        block.setBlockBounds(f, 0.0F, f, f1, 1.0F, f1);
-        block.setBlockBounds(f, 0.0F, f, f1, 1.0F, f1);
-        renderStandardBlock(tessellator, block, x, y, z);
+        AABB bounds = AABB.getTemporaryBB(f, 0.0F, f, f1, 1.0F, f1);
+        renderStandardBlock(tessellator, bounds, x, y, z);
         boolean flag1 = false;
         boolean flag2 = false;
         if(block.canConnectTo(renderBlocks.blockAccess, x - 1, y, z) || block.canConnectTo(renderBlocks.blockAccess, x + 1, y, z))
@@ -49,27 +48,26 @@ public class BlockModelFence<T  extends BlockFence> extends BlockModelStandard<T
         final float f7 = flag6 ? 1.0F : f9;
         if(flag1)
         {
-            block.setBlockBounds(f4, f2, f8, f5, f3, f9);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(f4, f2, f8, f5, f3, f9);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
         if(flag2)
         {
-            block.setBlockBounds(f8, f2, f6, f9, f3, f7);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(f8, f2, f6, f9, f3, f7);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
         final float f10 = 0.375F;
         final float f11 = 0.5625F;
         if(flag1)
         {
-            block.setBlockBounds(f4, f10, f8, f5, f11, f9);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(f4, f10, f8, f5, f11, f9);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
         if(flag2)
         {
-            block.setBlockBounds(f8, f10, f6, f9, f11, f7);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(f8, f10, f6, f9, f11, f7);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
-        block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
         return true;
     }
 
@@ -86,58 +84,58 @@ public class BlockModelFence<T  extends BlockFence> extends BlockModelStandard<T
         GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
         for(int cube = 0; cube < 4; cube++)
         {
-            // Vertical Beams
+
+            AABB bounds;
             final float radius = 0.125F;
-            if(cube == 0)
-            {
-                block.setBlockBounds(0.5F - radius, 0.0F, 0.0F, 0.5F + radius, 1.0F, radius * 2.0F);
-            }
-            if(cube == 1)
-            {
-                block.setBlockBounds(0.5F - radius, 0.0F, 1.0F - radius * 2.0F, 0.5F + radius, 1.0F, 1.0F);
-            }
-            // Horizontal Beams
             final float f5 = 0.0625F;
-            if(cube == 2)
-            {
-                block.setBlockBounds(0.5F - f5, 1.0F - f5 * 3F, -f5 * 2.0F, 0.5F + f5, 1.0F - f5, 1.0F + f5 * 2.0F);
-            }
-            if(cube == 3)
-            {
-                block.setBlockBounds(0.5F - f5, 0.5F - f5 * 3F, -f5 * 2.0F, 0.5F + f5, 0.5F - f5, 1.0F + f5 * 2.0F);
+            switch (cube) {
+                // Vertical Beams
+                case 0:
+                    bounds = AABB.getTemporaryBB(0.5F - radius, 0.0F, 0.0F, 0.5F + radius, 1.0F, radius * 2.0F);
+                    break;
+                case 1:
+                    bounds = AABB.getTemporaryBB(0.5F - radius, 0.0F, 1.0F - radius * 2.0F, 0.5F + radius, 1.0F, 1.0F);
+                    break;
+                // Horizontal Beams
+                case 2:
+                    bounds = AABB.getTemporaryBB(0.5F - f5, 1.0F - f5 * 3F, -f5 * 2.0F, 0.5F + f5, 1.0F - f5, 1.0F + f5 * 2.0F);
+                    break;
+                case 3:
+                default:
+                    bounds = AABB.getTemporaryBB(0.5F - f5, 0.5F - f5 * 3F, -f5 * 2.0F, 0.5F + f5, 0.5F - f5, 1.0F + f5 * 2.0F);
+                    break;
             }
 
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, -1F, 0.0F);
-            renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
+            renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
             tessellator.draw();
 
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 1.0F, 0.0F);
-            renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
+            renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
             tessellator.draw();
 
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 0.0F, -1F);
-            renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
+            renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
             tessellator.draw();
 
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 0.0F, 1.0F);
-            renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
+            renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
             tessellator.draw();
 
             tessellator.startDrawingQuads();
             tessellator.setNormal(-1F, 0.0F, 0.0F);
-            renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
+            renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
             tessellator.draw();
 
             tessellator.startDrawingQuads();
             tessellator.setNormal(1.0F, 0.0F, 0.0F);
-            renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
+            renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
             tessellator.draw();
         }
         GL11.glTranslatef(0.5F, 0.5F, 0.5F);
-        block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
     }
 }
diff --git a/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGate.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGate.java
new file mode 100644
index 000000000..617c77436
--- /dev/null
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGate.java
@@ -0,0 +1,224 @@
+package net.minecraft.client.render.block.model;
+
+import net.minecraft.client.render.block.color.BlockColorDispatcher;
+import net.minecraft.client.render.tessellator.Tessellator;
+import net.minecraft.core.block.Block;
+import net.minecraft.core.block.BlockFenceGate;
+import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
+import org.jetbrains.annotations.Nullable;
+import org.lwjgl.opengl.GL11;
+
+public class BlockModelFenceGate<T extends BlockFenceGate> extends BlockModelStandard<T> {
+    public BlockModelFenceGate(Block block) {
+        super(block);
+    }
+
+    @Override
+    public boolean render(Tessellator tessellator, int x, int y, int z) {
+        AABB bounds = block.getBounds();
+        boolean flag = true;
+        int l = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
+        boolean flag1 = BlockFenceGate.isOpen(l);
+        int i1 = BlockFenceGate.getDirection(l);
+        if(i1 == 3 || i1 == 1)
+        {
+            float f = 0.4375F;
+            float f4 = 0.5625F;
+            float f8 = 0.0F;
+            float f12 = 0.125F;
+            bounds.set(f, 0.3125F, f8, f4, 1.0F, f12);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            f8 = 0.875F;
+            f12 = 1.0F;
+            bounds.set(f, 0.3125F, f8, f4, 1.0F, f12);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+        } else
+        {
+            float f1 = 0.0F;
+            float f5 = 0.125F;
+            float f9 = 0.4375F;
+            float f13 = 0.5625F;
+            bounds.set(f1, 0.3125F, f9, f5, 1.0F, f13);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            f1 = 0.875F;
+            f5 = 1.0F;
+            bounds.set(f1, 0.3125F, f9, f5, 1.0F, f13);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+        }
+        if(!flag1)
+        {
+            if(i1 == 3 || i1 == 1)
+            {
+                float f2 = 0.4375F;
+                float f6 = 0.5625F;
+                float f10 = 0.375F;
+                float f14 = 0.5F;
+                bounds.set(f2, 0.375F, f10, f6, 0.9375F, f14);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+                f10 = 0.5F;
+                f14 = 0.625F;
+                bounds.set(f2, 0.375F, f10, f6, 0.9375F, f14);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+                f10 = 0.625F;
+                f14 = 0.875F;
+                bounds.set(f2, 0.375F, f10, f6, 0.5625F, f14);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+                bounds.set(f2, 0.75F, f10, f6, 0.9375F, f14);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+                f10 = 0.125F;
+                f14 = 0.375F;
+                bounds.set(f2, 0.375F, f10, f6, 0.5625F, f14);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+                bounds.set(f2, 0.75F, f10, f6, 0.9375F, f14);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+            } else
+            {
+                float f3 = 0.375F;
+                float f7 = 0.5F;
+                float f11 = 0.4375F;
+                float f15 = 0.5625F;
+                bounds.set(f3, 0.375F, f11, f7, 0.9375F, f15);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+                f3 = 0.5F;
+                f7 = 0.625F;
+                bounds.set(f3, 0.375F, f11, f7, 0.9375F, f15);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+                f3 = 0.625F;
+                f7 = 0.875F;
+                bounds.set(f3, 0.375F, f11, f7, 0.5625F, f15);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+                bounds.set(f3, 0.75F, f11, f7, 0.9375F, f15);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+                f3 = 0.125F;
+                f7 = 0.375F;
+                bounds.set(f3, 0.375F, f11, f7, 0.5625F, f15);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+                bounds.set(f3, 0.75F, f11, f7, 0.9375F, f15);
+                renderStandardBlock(tessellator, bounds, x, y, z);
+            }
+        } else
+        if(i1 == 3)
+        {
+            bounds.set(0.8125F, 0.375F, 0.0F, 0.9375F, 0.9375F, 0.125F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.8125F, 0.375F, 0.875F, 0.9375F, 0.9375F, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.5625F, 0.375F, 0.0F, 0.8125F, 0.5625F, 0.125F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.5625F, 0.375F, 0.875F, 0.8125F, 0.5625F, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.5625F, 0.75F, 0.0F, 0.8125F, 0.9375F, 0.125F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.5625F, 0.75F, 0.875F, 0.8125F, 0.9375F, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+        } else
+        if(i1 == 1)
+        {
+            bounds.set(0.0625F, 0.375F, 0.0F, 0.1875F, 0.9375F, 0.125F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.0625F, 0.375F, 0.875F, 0.1875F, 0.9375F, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.1875F, 0.375F, 0.0F, 0.4375F, 0.5625F, 0.125F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.1875F, 0.375F, 0.875F, 0.4375F, 0.5625F, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.1875F, 0.75F, 0.0F, 0.4375F, 0.9375F, 0.125F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.1875F, 0.75F, 0.875F, 0.4375F, 0.9375F, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+        } else
+        if(i1 == 0)
+        {
+            bounds.set(0.0F, 0.375F, 0.8125F, 0.125F, 0.9375F, 0.9375F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.875F, 0.375F, 0.8125F, 1.0F, 0.9375F, 0.9375F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.0F, 0.375F, 0.5625F, 0.125F, 0.5625F, 0.8125F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.875F, 0.375F, 0.5625F, 1.0F, 0.5625F, 0.8125F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.0F, 0.75F, 0.5625F, 0.125F, 0.9375F, 0.8125F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.875F, 0.75F, 0.5625F, 1.0F, 0.9375F, 0.8125F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+        } else
+        if(i1 == 2)
+        {
+            bounds.set(0.0F, 0.375F, 0.0625F, 0.125F, 0.9375F, 0.1875F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.875F, 0.375F, 0.0625F, 1.0F, 0.9375F, 0.1875F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.0F, 0.375F, 0.1875F, 0.125F, 0.5625F, 0.4375F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.875F, 0.375F, 0.1875F, 1.0F, 0.5625F, 0.4375F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.0F, 0.75F, 0.1875F, 0.125F, 0.9375F, 0.4375F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.875F, 0.75F, 0.1875F, 1.0F, 0.9375F, 0.4375F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+        }
+        return flag;
+    }
+
+    @Override
+    public void renderBlockOnInventory(Tessellator tessellator, int metadata, float brightness, float alpha, @Nullable Integer lightmapCoordinate) {
+        if(renderBlocks.useInventoryTint)
+        {
+            int j = BlockColorDispatcher.getInstance().getDispatch(block).getFallbackColor(metadata);
+            float f1 = (float)(j >> 16 & 0xff) / 255F;
+            float f3 = (float)(j >> 8 & 0xff) / 255F;
+            float f5 = (float)(j & 0xff) / 255F;
+            GL11.glColor4f(f1 * brightness, f3 * brightness, f5 * brightness, alpha);
+        }
+        for(int k1 = 0; k1 < 3; k1++)
+        {
+            float f6 = 0.0625F;
+            AABB bounds = block.getBounds();
+            if(k1 == 0)
+            {
+                bounds.set(0.5F - f6, 0.3F, 0.0F, 0.5F + f6, 1.0F, f6 * 2.0F);
+            }
+            if(k1 == 1)
+            {
+                bounds.set(0.5F - f6, 0.3F, 1.0F - f6 * 2.0F, 0.5F + f6, 1.0F, 1.0F);
+            }
+            if(k1 == 2)
+            {
+                bounds.set(0.5F - f6, 0.5F, 0.0F, 0.5F + f6, 1.0F - f6, 1.0F);
+            }
+            GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
+            tessellator.startDrawingQuads();
+            tessellator.setNormal(0.0F, -1F, 0.0F);
+            renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
+            tessellator.draw();
+
+            tessellator.startDrawingQuads();
+            tessellator.setNormal(0.0F, 1.0F, 0.0F);
+            renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
+            tessellator.draw();
+
+            tessellator.startDrawingQuads();
+            tessellator.setNormal(0.0F, 0.0F, -1F);
+            renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
+            tessellator.draw();
+
+            tessellator.startDrawingQuads();
+            tessellator.setNormal(0.0F, 0.0F, 1.0F);
+            renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
+            tessellator.draw();
+
+            tessellator.startDrawingQuads();
+            tessellator.setNormal(-1F, 0.0F, 0.0F);
+            renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
+            tessellator.draw();
+
+            tessellator.startDrawingQuads();
+            tessellator.setNormal(1.0F, 0.0F, 0.0F);
+            renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
+            tessellator.draw();
+            GL11.glTranslatef(0.5F, 0.5F, 0.5F);
+        }
+    }
+
+}
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGatePainted.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGatePainted.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGatePainted.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGatePainted.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFencePainted.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFencePainted.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelFencePainted.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFencePainted.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceThin.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceThin.java
similarity index 96%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelFenceThin.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceThin.java
index 6127db045..b3111e2ed 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceThin.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceThin.java
@@ -8,6 +8,7 @@ import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockFenceThin;
 import net.minecraft.core.util.helper.Direction;
+import net.minecraft.core.util.phys.AABB;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
 
@@ -26,7 +27,6 @@ public class BlockModelFenceThin<T extends BlockFenceThin> extends BlockModelSta
     }
     @Override
     public boolean render(Tessellator t, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         float brightness = 1.0f;
         if(LightmapHelper.isLightmapEnabled()) {
         	t.setLightmapCoord(block.getLightmapCoord(renderBlocks.blockAccess, x, y, z));
@@ -360,11 +360,12 @@ public class BlockModelFenceThin<T extends BlockFenceThin> extends BlockModelSta
             GL11.glColor4f(f1 * brightness, f3 * brightness, f5 * brightness, alpha);
         }
         GL11.glRotatef(90, 0, 1, 0);
+        AABB bounds = AABB.getTemporaryBB(0, 0, 0, 1, 1, 1);
         for(int i1 = 0; i1 < 2; i1++)
         {
             GL11.glPushMatrix();
             float f4 = 0.125F / 2;
-            block.setBlockBounds(0, 0.0F, 0.0F, 2 * f4, 1.0F, f4 * 2.0F);
+            bounds.set(0, 0.0F, 0.0F, 2 * f4, 1.0F, f4 * 2.0F);
             GL11.glTranslatef(0.5f - f4, 0, 0);
             if(i1 == 1)
             {
@@ -373,40 +374,43 @@ public class BlockModelFenceThin<T extends BlockFenceThin> extends BlockModelSta
             GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, -1F, 0.0F);
-            renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, columnTexIndex);
+            renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, columnTexIndex);
             tessellator.draw();
+
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 1.0F, 0.0F);
-            renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, columnTexIndex);
+            renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, columnTexIndex);
             tessellator.draw();
+
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 0.0F, -1F);
-            renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, columnTexIndex);
+            renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, columnTexIndex);
             tessellator.draw();
+
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 0.0F, 1.0F);
-            renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, columnTexIndex);
+            renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, columnTexIndex);
             tessellator.draw();
+
             tessellator.startDrawingQuads();
             tessellator.setNormal(-1F, 0.0F, 0.0F);
-            renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, columnTexIndex);
+            renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, columnTexIndex);
             tessellator.draw();
+
             tessellator.startDrawingQuads();
             tessellator.setNormal(1.0F, 0.0F, 0.0F);
-            renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, columnTexIndex);
+            renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, columnTexIndex);
             tessellator.draw();
             GL11.glPopMatrix();
         }
 
         GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
         GL11.glDisable(GL11.GL_CULL_FACE);
-        block.setBlockBounds(0, 0, 0, 0.5f, 1, 1);
+        bounds.set(0, 0, 0, 0.5f, 1, 1);
         tessellator.startDrawingQuads();
         tessellator.setNormal(1.0F, 0.0F, 0.0F);
-        renderEastFace(tessellator, block, 0, 0, 0, texIndex);
+        renderEastFace(tessellator, bounds, 0, 0, 0, texIndex);
         tessellator.draw();
         GL11.glTranslatef(0.5F, 0.5F, 0.5F);
-
-        block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
     }
 }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFire.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFire.java
similarity index 99%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelFire.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFire.java
index 0bbe850cb..5ada4a739 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFire.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFire.java
@@ -22,7 +22,6 @@ public class BlockModelFire<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         IconCoordinate tex = getBlockTextureFromSideAndMetadata(Side.BOTTOM, renderBlocks.blockAccess.getBlockMetadata(x, y, z));
         if(renderBlocks.overrideBlockTexture != null)
         {
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFlowerStackable.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFlowerStackable.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelFlowerStackable.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFlowerStackable.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFluid.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFluid.java
similarity index 94%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelFluid.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFluid.java
index 2f31f7fa6..74be6157c 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFluid.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFluid.java
@@ -9,6 +9,7 @@ import net.minecraft.core.block.BlockFluid;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 
 public class BlockModelFluid<T extends Block> extends BlockModelStandard<T> {
@@ -18,18 +19,20 @@ public class BlockModelFluid<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int color = BlockColorDispatcher.getInstance().getDispatch(block).getWorldColor(renderBlocks.blockAccess, x, y, z);
         float r = (float)(color >> 16 & 0xff) / 255F;
         float g = (float)(color >> 8 & 0xff) / 255F;
         float b = (float)(color & 0xff) / 255F;
-        boolean renderTop = shouldSideBeRendered(renderBlocks.blockAccess, x, y + 1, z, 1);
-        boolean flag1 = shouldSideBeRendered(renderBlocks.blockAccess, x, y - 1, z, 0);
+
+        AABB bounds = block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z);
+
+        boolean renderTop = shouldSideBeRendered(renderBlocks.blockAccess, bounds, x, y + 1, z, 1);
+        boolean flag1 = shouldSideBeRendered(renderBlocks.blockAccess, bounds, x, y - 1, z, 0);
         boolean[] aflag = new boolean[4];
-        aflag[0] = shouldSideBeRendered(renderBlocks.blockAccess, x, y, z - 1, 2);
-        aflag[1] = shouldSideBeRendered(renderBlocks.blockAccess, x, y, z + 1, 3);
-        aflag[2] = shouldSideBeRendered(renderBlocks.blockAccess, x - 1, y, z, 4);
-        aflag[3] = shouldSideBeRendered(renderBlocks.blockAccess, x + 1, y, z, 5);
+        aflag[0] = shouldSideBeRendered(renderBlocks.blockAccess, bounds, x, y, z - 1, 2);
+        aflag[1] = shouldSideBeRendered(renderBlocks.blockAccess, bounds, x, y, z + 1, 3);
+        aflag[2] = shouldSideBeRendered(renderBlocks.blockAccess, bounds, x - 1, y, z, 4);
+        aflag[3] = shouldSideBeRendered(renderBlocks.blockAccess, bounds, x + 1, y, z, 5);
         if(!renderTop && !flag1 && !aflag[0] && !aflag[1] && !aflag[2] && !aflag[3])
         {
             return false;
@@ -40,9 +43,7 @@ public class BlockModelFluid<T extends Block> extends BlockModelStandard<T> {
         final float sideTop = 1.0f;
         final float sideNorthSouth = 0.8f;
         final float sideEastWest = 0.6f;
-        
-        double d = 0.0D;
-        double d1 = 1.0D;
+
         final float yOff = 0.001f;
         Material material = block.blockMaterial;
         int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
@@ -105,7 +106,7 @@ public class BlockModelFluid<T extends Block> extends BlockModelStandard<T> {
             }
             tessellator.setColorOpaque_F(sideBottom * brightness * r, sideBottom * brightness * g, sideBottom * brightness * b);
 
-            renderBlocks.renderBottomFace(tessellator, block,x, y + yOff, z, getBlockTextureFromSideAndMetadata(Side.TOP, 0));
+            renderBlocks.renderBottomFace(tessellator, bounds,x, y + yOff, z, getBlockTextureFromSideAndMetadata(Side.TOP, 0));
             didRender = true;
         }
         for(int side = 0; side < 4; side++)
@@ -205,9 +206,6 @@ public class BlockModelFluid<T extends Block> extends BlockModelStandard<T> {
             tessellator.addVertexWithUV(f20, y, f21, d5, d8);
             tessellator.addVertexWithUV(f17, y, f19, d4, d8);
         }
-
-        block.minY = d;
-        block.maxY = d1;
         return didRender;
     }
 
@@ -217,7 +215,7 @@ public class BlockModelFluid<T extends Block> extends BlockModelStandard<T> {
     }
 
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side)
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side)
     {
         Material material = blockAccess.getBlockMaterial(x, y, z);
         if(material == block.blockMaterial)
@@ -234,7 +232,7 @@ public class BlockModelFluid<T extends Block> extends BlockModelStandard<T> {
         }
         else
         {
-            return super.shouldSideBeRendered(blockAccess, x, y, z, side);
+            return super.shouldSideBeRendered(blockAccess, bounds, x, y, z, side);
         }
     }
 }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFullyRotatable.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFullyRotatable.java
similarity index 96%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelFullyRotatable.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFullyRotatable.java
index a1190075e..50be90892 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFullyRotatable.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFullyRotatable.java
@@ -15,7 +15,6 @@ public class BlockModelFullyRotatable<T extends BlockFullyRotatable> extends Blo
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         final int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         final Direction dir = BlockFullyRotatable.metaToDirection(meta);
 
@@ -53,7 +52,7 @@ public class BlockModelFullyRotatable<T extends BlockFullyRotatable> extends Blo
                 renderBlocks.uvRotateBottom = 2;
                 break;
         }
-        final boolean result = renderStandardBlock(tessellator, block, x, y, z);
+        final boolean result = renderStandardBlock(tessellator, block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z), x, y, z);
         resetRenderBlocks();
 
         return result;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFurnace.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFurnace.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelFurnace.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelFurnace.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelGrass.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelGrass.java
similarity index 75%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelGrass.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelGrass.java
index 05fac8f56..efb4fe85d 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelGrass.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelGrass.java
@@ -9,6 +9,7 @@ import net.minecraft.core.block.Block;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.util.helper.Axis;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
@@ -29,10 +30,11 @@ public class BlockModelGrass<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        boolean didRender = renderStandardBlock(tessellator, block, x, y, z);
+        AABB bounds = block.getBounds();
+        boolean didRender = renderStandardBlock(tessellator, bounds, x, y, z);
         if (RenderBlocks.fancyGrass){
             useOverlay = true;
-            didRender |= renderStandardBlock(tessellator, block, x, y, z);
+            didRender |= renderStandardBlock(tessellator, bounds, x, y, z);
             useOverlay = false;
         }
         return didRender;
@@ -41,27 +43,32 @@ public class BlockModelGrass<T extends Block> extends BlockModelStandard<T> {
     public void renderBlockOnInventory(Tessellator tessellator, int metadata, float brightness, float alpha, @Nullable Integer lightmapCoordinate) {
         GL11.glColor4f(brightness, brightness, brightness, alpha);
         float yOffset = 0.5F;
-        setBlockBoundsForItemRender();
+
+        AABB bounds = getBlockBoundsForItemRender();
         GL11.glTranslatef(-0.5F, 0.0F - yOffset, -0.5F);
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, -1F, 0.0F);
-        renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
+        renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
         tessellator.draw();
+
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, -1F);
-        renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
+        renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
         tessellator.draw();
+
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, 1.0F);
-        renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
+        renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
         tessellator.draw();
+
         tessellator.startDrawingQuads();
         tessellator.setNormal(-1F, 0.0F, 0.0F);
-        renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
+        renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
         tessellator.draw();
+
         tessellator.startDrawingQuads();
         tessellator.setNormal(1.0F, 0.0F, 0.0F);
-        renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
+        renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
         tessellator.draw();
         if(renderBlocks.useInventoryTint)
         {
@@ -73,25 +80,25 @@ public class BlockModelGrass<T extends Block> extends BlockModelStandard<T> {
         }
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 1.0F, 0.0F);
-        renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
+        renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
         tessellator.draw();
         if (RenderBlocks.fancyGrass){
             useOverlay = true;
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 0.0F, -1F);
-            renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
+            renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
             tessellator.draw();
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 0.0F, 1.0F);
-            renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
+            renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
             tessellator.draw();
             tessellator.startDrawingQuads();
             tessellator.setNormal(-1F, 0.0F, 0.0F);
-            renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
+            renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
             tessellator.draw();
             tessellator.startDrawingQuads();
             tessellator.setNormal(1.0F, 0.0F, 0.0F);
-            renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
+            renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
             tessellator.draw();
             useOverlay = false;
         }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelHorizontalRotation.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelHorizontalRotation.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelHorizontalRotation.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelHorizontalRotation.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelIce.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelIce.java
similarity index 69%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelIce.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelIce.java
index 1dd6af6ef..4f39d4fc9 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelIce.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelIce.java
@@ -1,6 +1,7 @@
 package net.minecraft.client.render.block.model;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 
 public class BlockModelIce<T extends Block> extends BlockModelTransparent<T> {
@@ -9,8 +10,8 @@ public class BlockModelIce<T extends Block> extends BlockModelTransparent<T> {
     }
 
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side)
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side)
     {
-        return super.shouldSideBeRendered(blockAccess, x, y, z, 1 - side);
+        return super.shouldSideBeRendered(blockAccess, bounds, x, y, z, 1 - side);
     }
 }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelJar.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelJar.java
similarity index 99%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelJar.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelJar.java
index 405e68ed7..ad05a9539 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelJar.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelJar.java
@@ -16,7 +16,6 @@ public class BlockModelJar<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         // todo: yes, i know this is horrible.
         float brightness = 1.0f;
         if(LightmapHelper.isLightmapEnabled()) {
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLadder.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLadder.java
similarity index 97%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelLadder.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLadder.java
index 34cdf4f63..677785f41 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLadder.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLadder.java
@@ -13,7 +13,6 @@ public class BlockModelLadder<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int k1 = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         IconCoordinate l = getBlockTextureFromSideAndMetadata(Side.BOTTOM, k1);
         if(renderBlocks.overrideBlockTexture != null)
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLamp.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLamp.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelLamp.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLamp.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLantern.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLantern.java
similarity index 99%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelLantern.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLantern.java
index 96e85f80b..f3cc255b0 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLantern.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLantern.java
@@ -14,7 +14,6 @@ public class BlockModelLantern<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         boolean isHanging = (meta & BlockLanternFirefly.MASK_HANGING) == 0;
         boolean isAngled = (meta & BlockLanternFirefly.MASK_ANGLED) != 0;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLayer.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLayer.java
similarity index 85%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelLayer.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLayer.java
index f6719d342..c19c8b090 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLayer.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLayer.java
@@ -2,6 +2,7 @@ package net.minecraft.client.render.block.model;
 
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
@@ -18,11 +19,11 @@ public class BlockModelLayer<T extends Block> extends BlockModelStandard<T> {
     }
 
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side, int meta)
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side, int meta)
     {
         if(side > 1 && blockAccess.getBlockId(x, y, z) == block.id && blockAccess.getBlockMetadata(x, y, z) == meta){
             return false;
         }
-        return super.shouldSideBeRendered(blockAccess, x, y, z, side);
+        return super.shouldSideBeRendered(blockAccess, bounds, x, y, z, side);
     }
 }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java
similarity index 88%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java
index f6b4fbbc3..cdbedc79d 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeaves.java
@@ -4,6 +4,7 @@ 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.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 
 public class BlockModelLeaves<T extends Block> extends BlockModelStandard<T> {
@@ -26,7 +27,7 @@ public class BlockModelLeaves<T extends Block> extends BlockModelStandard<T> {
         return fancyGraphics ? fancyLeavesTexture : atlasIndices[side.getId()];
     }
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side)
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side)
     {
         int i1 = blockAccess.getBlockId(x, y, z);
         if(!fancyGraphics && i1 == block.id)
@@ -34,7 +35,7 @@ public class BlockModelLeaves<T extends Block> extends BlockModelStandard<T> {
             return false;
         } else
         {
-            return super.shouldSideBeRendered(blockAccess, x, y, z, side);
+            return super.shouldSideBeRendered(blockAccess, bounds, x, y, z, side);
         }
     }
 }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCacao.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCacao.java
similarity index 79%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCacao.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCacao.java
index b247f54cd..632036c09 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCacao.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCacao.java
@@ -6,6 +6,8 @@ import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockLeavesCacao;
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.util.phys.AABB;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
 
@@ -24,17 +26,19 @@ public class BlockModelLeavesCacao<T extends Block> extends BlockModelLeaves<T>
     public boolean render(Tessellator tessellator, int x, int y, int z) {
         super.render(tessellator, x, y, z);
 
+        AABB bounds = block.getBounds();
+
         final int growthRate = BlockLeavesCacao.getGrowthRate(renderBlocks.blockAccess.getBlockMetadata(x, y, z));
         float brightness = 1.0f;
         if(LightmapHelper.isLightmapEnabled()) {
             int lmc = block.getLightmapCoord(renderBlocks.blockAccess, x, y, z);
-            if(Block.lightEmission[block.id] > 0) {
+            if(Blocks.lightEmission[block.id] > 0) {
                 lmc = LightmapHelper.setBlocklightValue(lmc, 15);
             }
             tessellator.setLightmapCoord(lmc);
         }else {
             brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
-            if(Block.lightEmission[block.id] > 0) {
+            if(Blocks.lightEmission[block.id] > 0) {
                 brightness = 1.0f;
             }
         }
@@ -44,11 +48,11 @@ public class BlockModelLeavesCacao<T extends Block> extends BlockModelLeaves<T>
         if (growthRate > 0) {
             renderBlocks.overrideBlockTexture = growthStages[Math.min(growthRate - 1, BlockLeavesCacao.MAX_GROWTH_STATE - 1)];
             tessellator.setColorOpaque_F(cNorthSouth * brightness, cNorthSouth * brightness, cNorthSouth * brightness);
-            renderNorthFace(tessellator, block, x, y, z, renderBlocks.overrideBlockTexture);
-            renderSouthFace(tessellator, block, x, y, z, renderBlocks.overrideBlockTexture);
+            renderNorthFace(tessellator, bounds, x, y, z, renderBlocks.overrideBlockTexture);
+            renderSouthFace(tessellator, bounds, x, y, z, renderBlocks.overrideBlockTexture);
             tessellator.setColorOpaque_F(cEastWest * brightness, cEastWest * brightness, cEastWest * brightness);
-            renderEastFace(tessellator, block, x, y, z, renderBlocks.overrideBlockTexture);
-            renderWestFace(tessellator, block, x, y, z, renderBlocks.overrideBlockTexture);
+            renderEastFace(tessellator, bounds, x, y, z, renderBlocks.overrideBlockTexture);
+            renderWestFace(tessellator, bounds, x, y, z, renderBlocks.overrideBlockTexture);
             renderBlocks.overrideBlockTexture = null;
         }
 
@@ -59,37 +63,39 @@ public class BlockModelLeavesCacao<T extends Block> extends BlockModelLeaves<T>
         super.renderBlockOnInventory(tessellator, metadata, brightness, alpha, lightmapCoordinate);
         GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
 
+        AABB bounds = block.getBounds();
+
         final IconCoordinate cacaoCoord = growthStages[BlockLeavesCacao.MAX_GROWTH_STATE - 1];
         GL11.glColor4f(brightness, brightness, brightness, alpha);
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, -1F, 0.0F);
-        renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, cacaoCoord);
+        renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cacaoCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 1.0F, 0.0F);
-        renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, cacaoCoord);
+        renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cacaoCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, -1F);
-        renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, cacaoCoord);
+        renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cacaoCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, 1.0F);
-        renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, cacaoCoord);
+        renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cacaoCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(-1F, 0.0F, 0.0F);
-        renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, cacaoCoord);
+        renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cacaoCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(1.0F, 0.0F, 0.0F);
-        renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, cacaoCoord);
+        renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cacaoCoord);
         tessellator.draw();
 
         GL11.glTranslatef(0.5F, 0.5F, 0.5F);
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCherryFlowering.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCherryFlowering.java
similarity index 81%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCherryFlowering.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCherryFlowering.java
index cc66d166e..ecfd2f639 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCherryFlowering.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLeavesCherryFlowering.java
@@ -5,6 +5,7 @@ import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockLeavesCherryFlowering;
+import net.minecraft.core.util.phys.AABB;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
 
@@ -26,7 +27,7 @@ public class BlockModelLeavesCherryFlowering<T extends Block> extends BlockModel
             renderBlocks.overrideBlockTexture = floweringCherryOverlay;
         }
 
-        renderStandardBlock(tessellator, block, x, y, z, 1.0f, 1.0f, 1.0f);
+        renderStandardBlock(tessellator, block.getBoundsRaw(), x, y, z, 1.0f, 1.0f, 1.0f);
         renderBlocks.overrideBlockTexture = null;
 
         return true;
@@ -36,37 +37,39 @@ public class BlockModelLeavesCherryFlowering<T extends Block> extends BlockModel
         super.renderBlockOnInventory(tessellator, metadata, brightness, alpha, lightmapCoordinate);
         GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
 
+        AABB bounds = block.getBoundsRaw();
+
         IconCoordinate cherryCoord = grownCherryOverlay;
         GL11.glColor4f(brightness, brightness, brightness, alpha);
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, -1F, 0.0F);
-        renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, cherryCoord);
+        renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cherryCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 1.0F, 0.0F);
-        renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, cherryCoord);
+        renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cherryCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, -1F);
-        renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, cherryCoord);
+        renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cherryCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, 1.0F);
-        renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, cherryCoord);
+        renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cherryCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(-1F, 0.0F, 0.0F);
-        renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, cherryCoord);
+        renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cherryCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(1.0F, 0.0F, 0.0F);
-        renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, cherryCoord);
+        renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, cherryCoord);
         tessellator.draw();
 
         GL11.glTranslatef(0.5F, 0.5F, 0.5F);
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java
similarity index 81%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java
index e183d743d..9c6035792 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelLever.java
@@ -4,9 +4,11 @@ import net.minecraft.client.render.LightmapHelper;
 import net.minecraft.client.render.texture.stitcher.IconCoordinate;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.BlockLever;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.util.phys.Vec3;
 
 public class BlockModelLever<T extends Block> extends BlockModelStandard<T> {
@@ -16,7 +18,6 @@ public class BlockModelLever<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int l = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         int i1 = l & 15;
         boolean flag = (l & 16) > 0;
@@ -28,32 +29,34 @@ public class BlockModelLever<T extends Block> extends BlockModelStandard<T> {
         float f = 0.25F;
         float f1 = 0.1875F;
         float f2 = 0.1875F;
-        if(i1 == 7)
-        {
-            block.setBlockBounds(0.5F - f1, 1f - f2, 0.5F - f, 0.5F + f1, 1f, 0.5F + f);
-        } else if(i1 == 8)
-        {
-            block.setBlockBounds(0.5F - f, 1f - f2, 0.5F - f1, 0.5F + f, 1f, 0.5F + f1);
-        } else if(i1 == 5)
-        {
-            block.setBlockBounds(0.5F - f1, 0.0F, 0.5F - f, 0.5F + f1, f2, 0.5F + f);
-        } else if(i1 == 6)
-        {
-            block.setBlockBounds(0.5F - f, 0.0F, 0.5F - f1, 0.5F + f, f2, 0.5F + f1);
-        } else if(i1 == 4)
-        {
-            block.setBlockBounds(0.5F - f1, 0.5F - f, 1.0F - f2, 0.5F + f1, 0.5F + f, 1.0F);
-        } else if(i1 == 3)
-        {
-            block.setBlockBounds(0.5F - f1, 0.5F - f, 0.0F, 0.5F + f1, 0.5F + f, f2);
-        } else if(i1 == 2)
-        {
-            block.setBlockBounds(1.0F - f2, 0.5F - f, 0.5F - f1, 1.0F, 0.5F + f, 0.5F + f1);
-        } else if(i1 == 1)
-        {
-            block.setBlockBounds(0.0F, 0.5F - f, 0.5F - f1, f2, 0.5F + f, 0.5F + f1);
+        AABB bounds = block.getBounds();
+        switch (i1) {
+            case BlockLever.ROTATION_BOTTOM_NS:
+                bounds.set(0.5F - f1, 1f - f2, 0.5F - f, 0.5F + f1, 1f, 0.5F + f);
+                break;
+            case BlockLever.ROTATION_BOTTOM_WE:
+                bounds.set(0.5F - f, 1f - f2, 0.5F - f1, 0.5F + f, 1f, 0.5F + f1);
+                break;
+            case BlockLever.ROTATION_TOP_NS:
+                bounds.set(0.5F - f1, 0.0F, 0.5F - f, 0.5F + f1, f2, 0.5F + f);
+                break;
+            case BlockLever.ROTATION_TOP_WE:
+                bounds.set(0.5F - f, 0.0F, 0.5F - f1, 0.5F + f, f2, 0.5F + f1);
+                break;
+            case BlockLever.ROTATION_NORTH:
+                bounds.set(0.5F - f1, 0.5F - f, 1.0F - f2, 0.5F + f1, 0.5F + f, 1.0F);
+                break;
+            case BlockLever.ROTATION_SOUTH:
+                bounds.set(0.5F - f1, 0.5F - f, 0.0F, 0.5F + f1, 0.5F + f, f2);
+                break;
+            case BlockLever.ROTATION_WEST:
+                bounds.set(1.0F - f2, 0.5F - f, 0.5F - f1, 1.0F, 0.5F + f, 0.5F + f1);
+                break;
+            case BlockLever.ROTATION_EAST:
+                bounds.set(0.0F, 0.5F - f, 0.5F - f1, f2, 0.5F + f, 0.5F + f1);
+                break;
         }
-        renderStandardBlock(tessellator, block, x, y, z);
+        renderStandardBlock(tessellator, bounds, x, y, z);
         if(!flag1)
         {
             renderBlocks.overrideBlockTexture = null;
@@ -62,7 +65,7 @@ public class BlockModelLever<T extends Block> extends BlockModelStandard<T> {
         if(LightmapHelper.isLightmapEnabled()) {
         	tessellator.setLightmapCoord(block.getLightmapCoord(renderBlocks.blockAccess, x, y, z));
         }else {
-			if(Block.lightEmission[block.id] > 0) {
+			if(Blocks.lightEmission[block.id] > 0) {
 				brightness = 1.0f;
 			}else {
 				brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelMotionSensor.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelMotionSensor.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelMotionSensor.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelMotionSensor.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelOverlayLeaves.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelOverlayLeaves.java
similarity index 78%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelOverlayLeaves.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelOverlayLeaves.java
index df4e575cf..fffb510a0 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelOverlayLeaves.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelOverlayLeaves.java
@@ -4,6 +4,7 @@ import net.minecraft.client.render.texture.stitcher.IconCoordinate;
 import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.util.phys.AABB;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
 
@@ -19,7 +20,7 @@ public class BlockModelOverlayLeaves<T extends Block> extends BlockModelLeaves<T
         super.render(tessellator, x, y, z);
 
         renderBlocks.overrideBlockTexture = overlayTexture;
-        renderStandardBlock(tessellator, block, x, y, z, 1.0f, 1.0f, 1.0f);
+        renderStandardBlock(tessellator, block.getBoundsRaw(), x, y, z, 1.0f, 1.0f, 1.0f);
         renderBlocks.overrideBlockTexture = null;
 
         return true;
@@ -29,37 +30,39 @@ public class BlockModelOverlayLeaves<T extends Block> extends BlockModelLeaves<T
         super.renderBlockOnInventory(tessellator, metadata, brightness, alpha, lightmapCoordinate);
         GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
 
+        AABB bounds = block.getBounds();
+
         IconCoordinate overlayCoord = overlayTexture;
         GL11.glColor4f(brightness, brightness, brightness, alpha);
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, -1F, 0.0F);
-        renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, overlayCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 1.0F, 0.0F);
-        renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, overlayCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, -1F);
-        renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, overlayCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, 1.0F);
-        renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, overlayCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(-1F, 0.0F, 0.0F);
-        renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, overlayCoord);
         tessellator.draw();
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(1.0F, 0.0F, 0.0F);
-        renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, overlayCoord);
+        renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, overlayCoord);
         tessellator.draw();
 
         GL11.glTranslatef(0.5F, 0.5F, 0.5F);
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelPebbles.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPebbles.java
similarity index 81%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelPebbles.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPebbles.java
index 173e003cd..a8468b87d 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelPebbles.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPebbles.java
@@ -20,17 +20,17 @@ public class BlockModelPebbles<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
-        float f1 = 1.0F;
         float brightness = 1.0f;
         if(LightmapHelper.isLightmapEnabled()) {
         	tessellator.setLightmapCoord(LightmapHelper.max(block.getLightmapCoord(renderBlocks.blockAccess, x, y, z), block.getLightmapCoord(renderBlocks.blockAccess, x, y - 1, z)));
         }else {
         	brightness = Math.max(getBlockBrightness(renderBlocks.blockAccess, x, y, z), getBlockBrightness(renderBlocks.blockAccess, x, y - 1, z));
         }
-        tessellator.setColorOpaque_F(f1 * brightness, f1 * brightness, f1 * brightness);
-        IconCoordinate j = getBlockTextureFromSideAndMetadata(Side.TOP, renderBlocks.blockAccess.getBlockMetadata(x, y, z));
-        renderTopFace(tessellator, block, x, y, z, j);
+        tessellator.setColorOpaque_F(brightness, brightness, brightness);
+        renderTopFace(tessellator,
+            block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z),
+            x, y, z,
+            getBlockTextureFromSideAndMetadata(Side.TOP, renderBlocks.blockAccess.getBlockMetadata(x, y, z)));
 
         return true;
     }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelPiePumpkin.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPiePumpkin.java
similarity index 67%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelPiePumpkin.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPiePumpkin.java
index 842c812d8..ec7abc70d 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelPiePumpkin.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPiePumpkin.java
@@ -6,8 +6,9 @@ import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockEdible;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 
-public class BlockModelPiePumpkin<T extends Block> extends BlockModelStandard<T> {
+public class BlockModelPiePumpkin<T extends BlockEdible> extends BlockModelStandard<T> {
     protected IconCoordinate sideTexture = TextureRegistry.getTexture("minecraft:block/pumpkin_pie/side");
     protected IconCoordinate insideTexture = TextureRegistry.getTexture("minecraft:block/pumpkin_pie/inner");
     protected IconCoordinate topTexture = TextureRegistry.getTexture("minecraft:block/pumpkin_pie/top");
@@ -19,15 +20,15 @@ public class BlockModelPiePumpkin<T extends Block> extends BlockModelStandard<T>
         withCustomItemBounds(f, 0.0F, f, 1.0F - f, f1, 1.0F - f);
     }
 
-    public void renderSliceSide(Tessellator tessellator, Block block, int x, int y, int z, Side side, boolean overrideTex) {
+    public void renderSliceSide(Tessellator tessellator, AABB bounds, int x, int y, int z, Side side, boolean overrideTex) {
         if(overrideTex)
             renderBlocks.overrideBlockTexture = insideTexture;
-        renderSide(tessellator, block, x, y, z, side, 0);
+        renderSide(tessellator, bounds, x, y, z, side, 0);
         if(overrideTex)
             renderBlocks.overrideBlockTexture = null;
     }
 
-    private void renderSlice(Tessellator tessellator, Block block, int x, int y, int z, int sliceX, int sliceZ) {
+    private void renderSlice(Tessellator tessellator, AABB bounds, int x, int y, int z, int sliceX, int sliceZ) {
 
         double onePix = 0.0625;
         double sliceWidth = onePix * 8;
@@ -47,21 +48,21 @@ public class BlockModelPiePumpkin<T extends Block> extends BlockModelStandard<T>
         boolean insideEast = sliceX == 0 ;
         boolean insideWest = sliceX == 1;
 
-        maxSlices = ((BlockEdible) block).maxBites;
-        block.setBlockBounds(xMin + offsetXMin, 0.0F, zMin + offsetZMin, xMax - offsetXMax, 0.375F, zMax - offsetZMax);
-        renderSide(tessellator, block, x, y, z, Side.TOP, 0);
-        renderSide(tessellator, block, x, y, z, Side.BOTTOM, 0);
-        renderSliceSide(tessellator, block, x, y, z, Side.SOUTH, insideSouth);
-        renderSliceSide(tessellator, block, x, y, z, Side.WEST, insideWest);
+        maxSlices = block.maxBites;
+        bounds.set(xMin + offsetXMin, 0.0F, zMin + offsetZMin, xMax - offsetXMax, 0.375F, zMax - offsetZMax);
+        renderSide(tessellator, bounds, x, y, z, Side.TOP, 0);
+        renderSide(tessellator, bounds, x, y, z, Side.BOTTOM, 0);
+        renderSliceSide(tessellator, bounds, x, y, z, Side.SOUTH, insideSouth);
+        renderSliceSide(tessellator, bounds, x, y, z, Side.WEST, insideWest);
         renderBlocks.flipTexture = true;
-        renderSliceSide(tessellator, block, x, y, z, Side.NORTH, insideNorth);
-        renderSliceSide(tessellator, block, x, y, z, Side.EAST, insideEast);
+        renderSliceSide(tessellator, bounds, x, y, z, Side.NORTH, insideNorth);
+        renderSliceSide(tessellator, bounds, x, y, z, Side.EAST, insideEast);
         renderBlocks.flipTexture = false;
     }
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+        AABB bounds = block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z);
 
         final int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         renderBlocks.enableAO = true;
@@ -72,7 +73,7 @@ public class BlockModelPiePumpkin<T extends Block> extends BlockModelStandard<T>
                 slices++;
                 if(meta >= slices)
                     continue;
-                renderSlice(tessellator, block, x, y, z, xSlice, zSlice);
+                renderSlice(tessellator, bounds, x, y, z, xSlice, zSlice);
             }
         }
 
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java
similarity index 85%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java
index 8f3a9caa7..ceb16c3ee 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPiston.java
@@ -7,6 +7,7 @@ import net.minecraft.core.block.Block;
 import net.minecraft.core.block.piston.BlockPistonBase;
 import net.minecraft.core.util.helper.Direction;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import org.jetbrains.annotations.Nullable;
 
 public class BlockModelPiston<T extends BlockPistonBase> extends BlockModelStandard<T> {
@@ -39,7 +40,6 @@ public class BlockModelPiston<T extends BlockPistonBase> extends BlockModelStand
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z){
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         return renderPistonBase(tessellator, x, y, z, false);
     }
 
@@ -53,6 +53,7 @@ public class BlockModelPiston<T extends BlockPistonBase> extends BlockModelStand
         int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         boolean extended = noCulling || (meta & 8) != 0;
         Direction direction = BlockPistonBase.getDirection(meta);
+        AABB bounds;
         if(extended)
         {
             switch(direction)
@@ -62,17 +63,17 @@ public class BlockModelPiston<T extends BlockPistonBase> extends BlockModelStand
                     renderBlocks.uvRotateWest = 3;
                     renderBlocks.uvRotateSouth = 3;
                     renderBlocks.uvRotateNorth = 3;
-                    block.setBlockBounds(0.0F, headThickness, 0.0F, 1.0F, 1.0F, 1.0F);
+                    bounds = AABB.getTemporaryBB(0.0F, headThickness, 0.0F, 1.0F, 1.0F, 1.0F);
                     break;
 
                 case UP: // '\001'
-                    block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1 - headThickness, 1.0F);
+                    bounds = AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1 - headThickness, 1.0F);
                     break;
 
                 case NORTH: // '\002'
                     renderBlocks.uvRotateSouth = 1;
                     renderBlocks.uvRotateNorth = 2;
-                    block.setBlockBounds(0.0F, 0.0F, headThickness, 1.0F, 1.0F, 1.0F);
+                    bounds = AABB.getTemporaryBB(0.0F, 0.0F, headThickness, 1.0F, 1.0F, 1.0F);
                     break;
 
                 case SOUTH: // '\003'
@@ -80,7 +81,7 @@ public class BlockModelPiston<T extends BlockPistonBase> extends BlockModelStand
                     renderBlocks.uvRotateNorth = 1;
                     renderBlocks.uvRotateTop = 3;
                     renderBlocks.uvRotateBottom = 3;
-                    block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1 - headThickness);
+                    bounds = AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1 - headThickness);
                     break;
 
                 case WEST: // '\004'
@@ -88,7 +89,7 @@ public class BlockModelPiston<T extends BlockPistonBase> extends BlockModelStand
                     renderBlocks.uvRotateWest = 2;
                     renderBlocks.uvRotateTop = 2;
                     renderBlocks.uvRotateBottom = 1;
-                    block.setBlockBounds(headThickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+                    bounds = AABB.getTemporaryBB(headThickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
                     break;
 
                 case EAST: // '\005'
@@ -96,12 +97,14 @@ public class BlockModelPiston<T extends BlockPistonBase> extends BlockModelStand
                     renderBlocks.uvRotateWest = 1;
                     renderBlocks.uvRotateTop = 1;
                     renderBlocks.uvRotateBottom = 2;
-                    block.setBlockBounds(0.0F, 0.0F, 0.0F, 1 - headThickness, 1.0F, 1.0F);
+                    bounds = AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1 - headThickness, 1.0F, 1.0F);
                     break;
+
+                default:
+                    bounds = AABB.getTemporaryBB(0, 0, 0, 1, 1, 1);
             }
-            renderStandardBlock(tessellator, block, x, y, z);
+            renderStandardBlock(tessellator, bounds, x, y, z);
             resetRenderBlocks();
-            block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
         } else
         {
             switch(direction)
@@ -139,7 +142,7 @@ public class BlockModelPiston<T extends BlockPistonBase> extends BlockModelStand
                     renderBlocks.uvRotateBottom = 2;
                     break;
             }
-            renderStandardBlock(tessellator, block, x, y, z);
+            renderStandardBlock(tessellator, block.getBounds(), x, y, z);
             resetRenderBlocks();
         }
         return true;
@@ -156,6 +159,7 @@ public class BlockModelPiston<T extends BlockPistonBase> extends BlockModelStand
     @Override
     public IconCoordinate getBlockTextureFromSideAndMetadata(Side side, int data)
     {
+        AABB bounds = block.getBounds();
         Direction direction = BlockPistonBase.getDirection(data);
         if (direction == Direction.NONE)
         {
@@ -163,7 +167,7 @@ public class BlockModelPiston<T extends BlockPistonBase> extends BlockModelStand
         }
         if (side.getDirection() == direction)
         {
-            if (BlockPistonBase.isPowered(data) || block.minX > 0.0D || block.minY > 0.0D || block.minZ > 0.0D || block.maxX < 1.0D || block.maxY < 1.0D || block.maxZ < 1.0D)
+            if (BlockPistonBase.isPowered(data) || bounds.minX > 0.0D || bounds.minY > 0.0D || bounds.minZ > 0.0D || bounds.maxX < 1.0D || bounds.maxY < 1.0D || bounds.maxZ < 1.0D)
             {
                 return topTexture;
             }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelPistonHead.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPistonHead.java
similarity index 54%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelPistonHead.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPistonHead.java
index 023d23d46..8544629b5 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelPistonHead.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPistonHead.java
@@ -9,6 +9,7 @@ import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.piston.BlockPistonHead;
 import net.minecraft.core.util.helper.Direction;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import org.jetbrains.annotations.Nullable;
 
 public class BlockModelPistonHead extends BlockModelStandard<BlockPistonHead> {
@@ -32,7 +33,6 @@ public class BlockModelPistonHead extends BlockModelStandard<BlockPistonHead> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         return renderPistonHead(tessellator, block, x, y, z, true);
     }
     public void renderPistonHeadNoCulling(Tessellator tessellator, BlockPistonHead block, int x, int y, int z, boolean flag) {
@@ -61,32 +61,29 @@ public class BlockModelPistonHead extends BlockModelStandard<BlockPistonHead> {
                 renderBlocks.uvRotateWest = 3;
                 renderBlocks.uvRotateSouth = 3;
                 renderBlocks.uvRotateNorth = 3;
-                block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, headThickness, 1.0F);
-                renderStandardBlock(tessellator, block, x, y, z);
-                renderHeadTopBottom(tessellator, (float)x + 0.375F, (float)x + 0.625F, (float)y + headThickness, (float)y + headThickness + f1, (float)z + 0.625F, (float)z + 0.625F, brightness * 0.8F, width);
-                renderHeadTopBottom(tessellator, (float)x + 0.625F, (float)x + 0.375F, (float)y + headThickness, (float)y + headThickness + f1, (float)z + 0.375F, (float)z + 0.375F, brightness * 0.8F, width);
-                renderHeadTopBottom(tessellator, (float)x + 0.375F, (float)x + 0.375F, (float)y + headThickness, (float)y + headThickness + f1, (float)z + 0.375F, (float)z + 0.625F, brightness * 0.6F, width);
-                renderHeadTopBottom(tessellator, (float)x + 0.625F, (float)x + 0.625F, (float)y + headThickness, (float)y + headThickness + f1, (float)z + 0.625F, (float)z + 0.375F, brightness * 0.6F, width);
+                renderStandardBlock(tessellator, AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, headThickness, 1.0F), x, y, z);
+                renderHeadTopBottom(tessellator, x + 0.375F, x + 0.625F, y + headThickness, y + headThickness + f1, z + 0.625F, z + 0.625F, brightness * 0.8F, width);
+                renderHeadTopBottom(tessellator, x + 0.625F, x + 0.375F, y + headThickness, y + headThickness + f1, z + 0.375F, z + 0.375F, brightness * 0.8F, width);
+                renderHeadTopBottom(tessellator, x + 0.375F, x + 0.375F, y + headThickness, y + headThickness + f1, z + 0.375F, z + 0.625F, brightness * 0.6F, width);
+                renderHeadTopBottom(tessellator, x + 0.625F, x + 0.625F, y + headThickness, y + headThickness + f1, z + 0.625F, z + 0.375F, brightness * 0.6F, width);
                 break;
 
             case UP: // TOP
-                block.setBlockBounds(0.0F, 1 - headThickness, 0.0F, 1.0F, 1.0F, 1.0F);
-                renderStandardBlock(tessellator, block, x, y, z);
-                renderHeadTopBottom(tessellator, (float)x + 0.375F, (float)x + 0.625F, (((float)y - headThickness) + 1.0F) - f1, ((float)y - headThickness) + 1.0F, (float)z + 0.625F, (float)z + 0.625F, brightness * 0.8F, width);
-                renderHeadTopBottom(tessellator, (float)x + 0.625F, (float)x + 0.375F, (((float)y - headThickness) + 1.0F) - f1, ((float)y - headThickness) + 1.0F, (float)z + 0.375F, (float)z + 0.375F, brightness * 0.8F, width);
-                renderHeadTopBottom(tessellator, (float)x + 0.375F, (float)x + 0.375F, (((float)y - headThickness) + 1.0F) - f1, ((float)y - headThickness) + 1.0F, (float)z + 0.375F, (float)z + 0.625F, brightness * 0.6F, width);
-                renderHeadTopBottom(tessellator, (float)x + 0.625F, (float)x + 0.625F, (((float)y - headThickness) + 1.0F) - f1, ((float)y - headThickness) + 1.0F, (float)z + 0.625F, (float)z + 0.375F, brightness * 0.6F, width);
+                renderStandardBlock(tessellator, AABB.getTemporaryBB(0.0F, 1 - headThickness, 0.0F, 1.0F, 1.0F, 1.0F), x, y, z);
+                renderHeadTopBottom(tessellator, x + 0.375F, x + 0.625F, ((y - headThickness) + 1.0F) - f1, (y - headThickness) + 1.0F, z + 0.625F, z + 0.625F, brightness * 0.8F, width);
+                renderHeadTopBottom(tessellator, x + 0.625F, x + 0.375F, ((y - headThickness) + 1.0F) - f1, (y - headThickness) + 1.0F, z + 0.375F, z + 0.375F, brightness * 0.8F, width);
+                renderHeadTopBottom(tessellator, x + 0.375F, x + 0.375F, ((y - headThickness) + 1.0F) - f1, (y - headThickness) + 1.0F, z + 0.375F, z + 0.625F, brightness * 0.6F, width);
+                renderHeadTopBottom(tessellator, x + 0.625F, x + 0.625F, ((y - headThickness) + 1.0F) - f1, (y - headThickness) + 1.0F, z + 0.625F, z + 0.375F, brightness * 0.6F, width);
                 break;
 
             case NORTH: // NORTH
                 renderBlocks.uvRotateSouth = 1;
                 renderBlocks.uvRotateNorth = 2;
-                block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, headThickness);
-                renderStandardBlock(tessellator, block, x, y, z);
-                renderHeadNorthSouth(tessellator, (float)x + 0.375F, (float)x + 0.375F, (float)y + 0.625F, (float)y + 0.375F, (float)z + headThickness, (float)z + headThickness + f1, brightness * 0.6F, width);
-                renderHeadNorthSouth(tessellator, (float)x + 0.625F, (float)x + 0.625F, (float)y + 0.375F, (float)y + 0.625F, (float)z + headThickness, (float)z + headThickness + f1, brightness * 0.6F, width);
-                renderHeadNorthSouth(tessellator, (float)x + 0.375F, (float)x + 0.625F, (float)y + 0.375F, (float)y + 0.375F, (float)z + headThickness, (float)z + headThickness + f1, brightness * 0.5F, width);
-                renderHeadNorthSouth(tessellator, (float)x + 0.625F, (float)x + 0.375F, (float)y + 0.625F, (float)y + 0.625F, (float)z + headThickness, (float)z + headThickness + f1, brightness, width);
+                renderStandardBlock(tessellator, AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, headThickness), x, y, z);
+                renderHeadNorthSouth(tessellator, x + 0.375F, x + 0.375F, y + 0.625F, y + 0.375F, z + headThickness, z + headThickness + f1, brightness * 0.6F, width);
+                renderHeadNorthSouth(tessellator, x + 0.625F, x + 0.625F, y + 0.375F, y + 0.625F, z + headThickness, z + headThickness + f1, brightness * 0.6F, width);
+                renderHeadNorthSouth(tessellator, x + 0.375F, x + 0.625F, y + 0.375F, y + 0.375F, z + headThickness, z + headThickness + f1, brightness * 0.5F, width);
+                renderHeadNorthSouth(tessellator, x + 0.625F, x + 0.375F, y + 0.625F, y + 0.625F, z + headThickness, z + headThickness + f1, brightness, width);
                 break;
 
             case SOUTH: // SOUTH
@@ -94,12 +91,11 @@ public class BlockModelPistonHead extends BlockModelStandard<BlockPistonHead> {
                 renderBlocks.uvRotateNorth = 1;
                 renderBlocks.uvRotateTop = 3;
                 renderBlocks.uvRotateBottom = 3;
-                block.setBlockBounds(0.0F, 0.0F, 1 - headThickness, 1.0F, 1.0F, 1.0F);
-                renderStandardBlock(tessellator, block, x, y, z);
-                renderHeadNorthSouth(tessellator, (float)x + 0.375F, (float)x + 0.375F, (float)y + 0.625F, (float)y + 0.375F, (((float)z - headThickness) + 1.0F) - f1, ((float)z - headThickness) + 1.0F, brightness * 0.6F, width);
-                renderHeadNorthSouth(tessellator, (float)x + 0.625F, (float)x + 0.625F, (float)y + 0.375F, (float)y + 0.625F, (((float)z - headThickness) + 1.0F) - f1, ((float)z - headThickness) + 1.0F, brightness * 0.6F, width);
-                renderHeadNorthSouth(tessellator, (float)x + 0.375F, (float)x + 0.625F, (float)y + 0.375F, (float)y + 0.375F, (((float)z - headThickness) + 1.0F) - f1, ((float)z - headThickness) + 1.0F, brightness * 0.5F, width);
-                renderHeadNorthSouth(tessellator, (float)x + 0.625F, (float)x + 0.375F, (float)y + 0.625F, (float)y + 0.625F, (((float)z - headThickness) + 1.0F) - f1, ((float)z - headThickness) + 1.0F, brightness, width);
+                renderStandardBlock(tessellator, AABB.getTemporaryBB(0.0F, 0.0F, 1 - headThickness, 1.0F, 1.0F, 1.0F), x, y, z);
+                renderHeadNorthSouth(tessellator, x + 0.375F, x + 0.375F, y + 0.625F, y + 0.375F, ((z - headThickness) + 1.0F) - f1, (z - headThickness) + 1.0F, brightness * 0.6F, width);
+                renderHeadNorthSouth(tessellator, x + 0.625F, x + 0.625F, y + 0.375F, y + 0.625F, ((z - headThickness) + 1.0F) - f1, (z - headThickness) + 1.0F, brightness * 0.6F, width);
+                renderHeadNorthSouth(tessellator, x + 0.375F, x + 0.625F, y + 0.375F, y + 0.375F, ((z - headThickness) + 1.0F) - f1, (z - headThickness) + 1.0F, brightness * 0.5F, width);
+                renderHeadNorthSouth(tessellator, x + 0.625F, x + 0.375F, y + 0.625F, y + 0.625F, ((z - headThickness) + 1.0F) - f1, (z - headThickness) + 1.0F, brightness, width);
                 break;
 
             case WEST: // WEST
@@ -107,12 +103,11 @@ public class BlockModelPistonHead extends BlockModelStandard<BlockPistonHead> {
                 renderBlocks.uvRotateWest = 2;
                 renderBlocks.uvRotateTop = 2;
                 renderBlocks.uvRotateBottom = 1;
-                block.setBlockBounds(0.0F, 0.0F, 0.0F, headThickness, 1.0F, 1.0F);
-                renderStandardBlock(tessellator, block, x, y, z);
-                renderHeadEastWest(tessellator, (float)x + headThickness, (float)x + headThickness + f1, (float)y + 0.375F, (float)y + 0.375F, (float)z + 0.625F, (float)z + 0.375F, brightness * 0.5F, width);
-                renderHeadEastWest(tessellator, (float)x + headThickness, (float)x + headThickness + f1, (float)y + 0.625F, (float)y + 0.625F, (float)z + 0.375F, (float)z + 0.625F, brightness, width);
-                renderHeadEastWest(tessellator, (float)x + headThickness, (float)x + headThickness + f1, (float)y + 0.375F, (float)y + 0.625F, (float)z + 0.375F, (float)z + 0.375F, brightness * 0.6F, width);
-                renderHeadEastWest(tessellator, (float)x + headThickness, (float)x + headThickness + f1, (float)y + 0.625F, (float)y + 0.375F, (float)z + 0.625F, (float)z + 0.625F, brightness * 0.6F, width);
+                renderStandardBlock(tessellator, AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, headThickness, 1.0F, 1.0F), x, y, z);
+                renderHeadEastWest(tessellator, x + headThickness, x + headThickness + f1, y + 0.375F, y + 0.375F, z + 0.625F, z + 0.375F, brightness * 0.5F, width);
+                renderHeadEastWest(tessellator, x + headThickness, x + headThickness + f1, y + 0.625F, y + 0.625F, z + 0.375F, z + 0.625F, brightness, width);
+                renderHeadEastWest(tessellator, x + headThickness, x + headThickness + f1, y + 0.375F, y + 0.625F, z + 0.375F, z + 0.375F, brightness * 0.6F, width);
+                renderHeadEastWest(tessellator, x + headThickness, x + headThickness + f1, y + 0.625F, y + 0.375F, z + 0.625F, z + 0.625F, brightness * 0.6F, width);
                 break;
 
             case EAST: // EAST
@@ -120,16 +115,14 @@ public class BlockModelPistonHead extends BlockModelStandard<BlockPistonHead> {
                 renderBlocks.uvRotateWest = 1;
                 renderBlocks.uvRotateTop = 1;
                 renderBlocks.uvRotateBottom = 2;
-                block.setBlockBounds(1 - headThickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-                renderStandardBlock(tessellator, block, x, y, z);
-                renderHeadEastWest(tessellator, (((float)x - headThickness) + 1.0F) - f1, ((float)x - headThickness) + 1.0F, (float)y + 0.375F, (float)y + 0.375F, (float)z + 0.625F, (float)z + 0.375F, brightness * 0.5F, width);
-                renderHeadEastWest(tessellator, (((float)x - headThickness) + 1.0F) - f1, ((float)x - headThickness) + 1.0F, (float)y + 0.625F, (float)y + 0.625F, (float)z + 0.375F, (float)z + 0.625F, brightness, width);
-                renderHeadEastWest(tessellator, (((float)x - headThickness) + 1.0F) - f1, ((float)x - headThickness) + 1.0F, (float)y + 0.375F, (float)y + 0.625F, (float)z + 0.375F, (float)z + 0.375F, brightness * 0.6F, width);
-                renderHeadEastWest(tessellator, (((float)x - headThickness) + 1.0F) - f1, ((float)x - headThickness) + 1.0F, (float)y + 0.625F, (float)y + 0.375F, (float)z + 0.625F, (float)z + 0.625F, brightness * 0.6F, width);
+                renderStandardBlock(tessellator, AABB.getTemporaryBB(1 - headThickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F), x, y, z);
+                renderHeadEastWest(tessellator, ((x - headThickness) + 1.0F) - f1, (x - headThickness) + 1.0F, y + 0.375F, y + 0.375F, z + 0.625F, z + 0.375F, brightness * 0.5F, width);
+                renderHeadEastWest(tessellator, ((x - headThickness) + 1.0F) - f1, (x - headThickness) + 1.0F, y + 0.625F, y + 0.625F, z + 0.375F, z + 0.625F, brightness, width);
+                renderHeadEastWest(tessellator, ((x - headThickness) + 1.0F) - f1, (x - headThickness) + 1.0F, y + 0.375F, y + 0.625F, z + 0.375F, z + 0.375F, brightness * 0.6F, width);
+                renderHeadEastWest(tessellator, ((x - headThickness) + 1.0F) - f1, (x - headThickness) + 1.0F, y + 0.625F, y + 0.375F, z + 0.625F, z + 0.625F, brightness * 0.6F, width);
                 break;
         }
         resetRenderBlocks();
-        block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
         return true;
     }
     private void renderHeadTopBottom(Tessellator tessellator, double xMin, double xMax, double yMin, double yMax, double zMin, double zMax, float brightness, double width)
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelPlanksPainted.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPlanksPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelPlanksPainted.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPlanksPainted.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelPortal.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPortal.java
similarity index 85%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelPortal.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPortal.java
index 958aefa4a..867522d09 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelPortal.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPortal.java
@@ -6,6 +6,7 @@ import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockPortal;
 import net.minecraft.core.util.helper.DyeColor;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 
 public class BlockModelPortal<T extends BlockPortal> extends BlockModelTransparent<T> {
@@ -15,19 +16,21 @@ public class BlockModelPortal<T extends BlockPortal> extends BlockModelTranspare
         for (DyeColor color : DyeColor.values()) {
             colors[color.blockMeta] = TextureRegistry.getTexture(rootTexKey + color.colorID);
         }
+        onRenderLayer(1);
     }
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side)
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side)
     {
         if(blockAccess.getBlockId(x, y, z) == block.id)
         {
             return false;
         }
-        return super.shouldSideBeRendered(blockAccess, x, y, z, side);
+        return super.shouldSideBeRendered(blockAccess, bounds, 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/block/model/BlockModelPumice.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPumice.java
similarity index 85%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelPumice.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPumice.java
index e81fabc1e..ed3679f9e 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelPumice.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPumice.java
@@ -7,6 +7,7 @@ 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.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import org.jetbrains.annotations.Nullable;
 
 public class BlockModelPumice<T extends Block> extends BlockModelStandard<T> {
@@ -35,16 +36,16 @@ public class BlockModelPumice<T extends Block> extends BlockModelStandard<T> {
         lavaFlag = true;
         boolean ob = renderBlocks.overbright;
         renderBlocks.overbright = true;
-        block.setBlockBounds(0.005, 0.005, 0.005, 0.995, 0.995, 0.995);
-        super.renderBlockOnInventory(tessellator, metadata, brightness, alpha, LightmapHelper.getLightmapCoord(15, 15));
+        AABB bounds = AABB.getTemporaryBB(0.005, 0.005, 0.005, 0.995, 0.995, 0.995);
+        renderBlockWithBounds(tessellator, bounds, metadata, brightness, alpha, LightmapHelper.getLightmapCoord(15, 15));
 
         renderBlocks.overbright = ob;
         lavaFlag = false;
         if (LightmapHelper.isLightmapEnabled()) {
             lightmapCoordinate = Minecraft.getMinecraft(this).thePlayer.getLightmapCoord(1f);
         }
-        block.setBlockBounds(0, 0, 0, 1, 1, 1);
-        super.renderBlockOnInventory(tessellator, metadata, brightness, alpha, lightmapCoordinate);
+        bounds.set(0, 0, 0, 1, 1, 1);
+        renderBlockWithBounds(tessellator, bounds, metadata, brightness, alpha, lightmapCoordinate);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelPumpkinRedstone.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPumpkinRedstone.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelPumpkinRedstone.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelPumpkinRedstone.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java
index 58563d3e0..a04df889e 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRail.java
@@ -24,7 +24,6 @@ public class BlockModelRail<T extends BlockRail> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int l = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         IconCoordinate i1 = getBlockTextureFromSideAndMetadata(Side.BOTTOM, l);
         if(renderBlocks.overrideBlockTexture != null)
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelRepeater.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRepeater.java
similarity index 91%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelRepeater.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRepeater.java
index 0e0edf690..68e9b1fc2 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelRepeater.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRepeater.java
@@ -6,6 +6,7 @@ import net.minecraft.core.Global;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockRepeater;
 import net.minecraft.core.block.Blocks;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 
 @SuppressWarnings("unchecked")
@@ -18,7 +19,6 @@ public class BlockModelRepeater extends BlockModelStandard<BlockRepeater> {
     }
 
     public boolean render(Tessellator tessellator, int x, int y, int z){
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         int i1 = meta & 3;
 
@@ -42,18 +42,18 @@ public class BlockModelRepeater extends BlockModelStandard<BlockRepeater> {
         }
 
         int j1 = (meta & 0xc) >> 2;
-        renderStandardBlock(tessellator, block, x, y, z);
+        renderStandardBlock(tessellator, block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z), x, y, z);
         resetRenderBlocks();
         float brightness = 1.0f;
         if(LightmapHelper.isLightmapEnabled()) {
         	int lmc = block.getLightmapCoord(renderBlocks.blockAccess, x, y, z);
-        	if(Block.lightEmission[block.id] > 0) {
+        	if(Blocks.lightEmission[block.id] > 0) {
         		lmc = LightmapHelper.setBlocklightValue(lmc, 15);
         	}
         	tessellator.setLightmapCoord(lmc);
         }else {
     		brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
-    		if(Block.lightEmission[block.id] > 0 || Global.accessor.isFullbrightEnabled()) {
+    		if(Blocks.lightEmission[block.id] > 0 || Global.accessor.isFullbrightEnabled()) {
     			brightness = 1.0f;
     		}
         }
@@ -101,7 +101,7 @@ public class BlockModelRepeater extends BlockModelStandard<BlockRepeater> {
     }
 
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side)
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side)
     {
         return true;
     }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelRope.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRope.java
similarity index 61%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelRope.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRope.java
index cd322e604..b25050257 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelRope.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRope.java
@@ -6,6 +6,7 @@ import net.minecraft.core.block.BlockLanternFirefly;
 import net.minecraft.core.block.BlockRope;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 
 public class BlockModelRope<T extends BlockRope>
@@ -30,7 +31,7 @@ extends BlockModelStandard<T> {
             !(!hasBlockNegX && !hasBlockPosX && hasBlockNegY && hasBlockPosY && !hasBlockNegZ && !hasBlockPosZ) &&
             !(!hasBlockNegX && !hasBlockPosX && !hasBlockNegY && !hasBlockPosY && hasBlockNegZ && hasBlockPosZ);
 
-        block.setBlockBounds(0, 0, 0, 1, 1, 1);
+        AABB bounds = AABB.getTemporaryBB(0, 0, 0, 1, 1, 1);
 
         final float ropeThickness = (1 / 16f);
         final float knotThickness = (2 / 16f);
@@ -38,50 +39,47 @@ extends BlockModelStandard<T> {
 
         if (drawKnot)
         {
-            block.setBlockBounds(0.5f - knotThickness, 0.5f - knotThickness, 0.5f - knotThickness, 0.5f + knotThickness, 0.5f + knotThickness, 0.5f + knotThickness);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0.5f - knotThickness, 0.5f - knotThickness, 0.5f - knotThickness, 0.5f + knotThickness, 0.5f + knotThickness, 0.5f + knotThickness);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
 
         if (hasBlockPosY)
         {
-            block.setBlockBounds(0.5f - ropeThickness, 0.5f, 0.5f - ropeThickness, 0.5f + ropeThickness, 1, 0.5f + ropeThickness);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0.5f - ropeThickness, 0.5f, 0.5f - ropeThickness, 0.5f + ropeThickness, 1, 0.5f + ropeThickness);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
         if (hasBlockNegY)
         {
-            block.setBlockBounds(0.5f - ropeThickness, 0, 0.5f - ropeThickness, 0.5f + ropeThickness, 0.5f, 0.5f + ropeThickness);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0.5f - ropeThickness, 0, 0.5f - ropeThickness, 0.5f + ropeThickness, 0.5f, 0.5f + ropeThickness);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
         if (hasBlockPosX)
         {
-            block.setBlockBounds(0.5f, 0.5f - ropeThickness, 0.5f - ropeThickness, 1, 0.5f + ropeThickness, 0.5f + ropeThickness);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0.5f, 0.5f - ropeThickness, 0.5f - ropeThickness, 1, 0.5f + ropeThickness, 0.5f + ropeThickness);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
         if (hasBlockNegX)
         {
-            block.setBlockBounds(0, 0.5f - ropeThickness, 0.5f - ropeThickness, 0.5f, 0.5f + ropeThickness, 0.5f + ropeThickness);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0, 0.5f - ropeThickness, 0.5f - ropeThickness, 0.5f, 0.5f + ropeThickness, 0.5f + ropeThickness);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
         if (hasBlockPosZ)
         {
-            block.setBlockBounds(0.5f - ropeThickness, 0.5f - ropeThickness, 0.5f, 0.5f + ropeThickness, 0.5f + ropeThickness, 1);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0.5f - ropeThickness, 0.5f - ropeThickness, 0.5f, 0.5f + ropeThickness, 0.5f + ropeThickness, 1);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
         if (hasBlockNegZ)
         {
-            block.setBlockBounds(0.5f - ropeThickness, 0.5f - ropeThickness, 0f, 0.5f + ropeThickness, 0.5f + ropeThickness, 0.5f);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0.5f - ropeThickness, 0.5f - ropeThickness, 0f, 0.5f + ropeThickness, 0.5f + ropeThickness, 0.5f);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
         if (hasFloor){
-            block.setBlockBounds(0.5f - pileWidth, 0,0.5f - pileWidth, 0.5f + pileWidth, knotThickness, 0.5f + pileWidth);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.5f - knotThickness, 0,0.5f - knotThickness, 0.5f + knotThickness, ropeThickness * 3, 0.5f + knotThickness);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0.5f - pileWidth, 0,0.5f - pileWidth, 0.5f + pileWidth, knotThickness, 0.5f + pileWidth);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.5f - knotThickness, 0,0.5f - knotThickness, 0.5f + knotThickness, ropeThickness * 3, 0.5f + knotThickness);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
 
-        block.setBlockBounds(0, 0, 0, 1, 1, 1);
-
-
         return true;
     }
     private boolean canConnect(WorldSource worldSource, int x, int y, int z, Side side){
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelRotatable.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRotatable.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelRotatable.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelRotatable.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelSeat.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSeat.java
similarity index 68%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelSeat.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSeat.java
index cee6a8afd..90b615dcb 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelSeat.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSeat.java
@@ -3,6 +3,7 @@ package net.minecraft.client.render.block.model;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 
 public class BlockModelSeat<T extends Block> extends BlockModelStandard<T> {
     public BlockModelSeat(Block block) {
@@ -11,20 +12,18 @@ public class BlockModelSeat<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
+        AABB bounds = block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z);
 
         setRenderSide(Side.BOTTOM, false); // Set bottom face to not render
-        renderStandardBlock(tessellator, block, x, y, z); // Render seat
+        renderStandardBlock(tessellator, bounds, x, y, z); // Render seat
 
         // Set only the bottom face to render
         renderBlocks.renderBitMask = 0b111111;
         setRenderSide(Side.BOTTOM, true);
-        double minY = block.minY; // Save the minimum bound of the seat
-        block.minY += 0.1875D; // Shift the bottom face up
-        renderStandardBlock(tessellator, block, x, y, z); // Render Seat
+        bounds.minY += 0.1875D; // Shift the bottom face up
+        renderStandardBlock(tessellator, bounds, x, y, z); // Render Seat
 
         // Reset block values
-        block.minY = minY;
         renderBlocks.renderBitMask = 0;
         return true;
     }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelSlab.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlab.java
similarity index 88%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelSlab.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlab.java
index dafbaa4ca..f46d77c54 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelSlab.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlab.java
@@ -23,4 +23,9 @@ public class BlockModelSlab<T extends BlockSlab> extends BlockModelStandard<T> {
     {
         return BlockModelDispatcher.getInstance().getDispatch(block.modelBlock).getBlockTextureFromSideAndMetadata(side, block.modelBlockMetadata);
     }
+
+    @Override
+    public int renderLayer() {
+        return BlockModelDispatcher.getInstance().getDispatch(block.modelBlock).renderLayer();
+    }
 }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelSlabMarble.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlabMarble.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelSlabMarble.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlabMarble.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelSlabPainted.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlabPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelSlabPainted.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSlabPainted.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelSpikes.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSpikes.java
similarity index 96%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelSpikes.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSpikes.java
index 2b1da4313..4306355f8 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelSpikes.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelSpikes.java
@@ -6,6 +6,7 @@ import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockSpikes;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 
 public class BlockModelSpikes<T extends Block> extends BlockModelStandard<T> {
     public BlockModelSpikes(Block block) {
@@ -14,7 +15,6 @@ public class BlockModelSpikes<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int metaData = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         IconCoordinate texture = getBlockTextureFromSideAndMetadata(Side.EAST, metaData);
         if(renderBlocks.overrideBlockTexture != null)
@@ -22,8 +22,7 @@ public class BlockModelSpikes<T extends Block> extends BlockModelStandard<T> {
             texture = renderBlocks.overrideBlockTexture;
         }
 
-        block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.1875F, 1.0F);
-        renderStandardBlock(tessellator, block, x, y, z);
+        renderStandardBlock(tessellator, AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 0.1875F, 1.0F), x, y, z);
 
         if(BlockSpikes.isSpikesUp(metaData)) {
             float brightness = 1.0f;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java
similarity index 59%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java
index cce007e2a..568febe01 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStairs.java
@@ -6,6 +6,7 @@ import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockStairs;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
@@ -18,40 +19,40 @@ public class BlockModelStairs<T extends BlockStairs> extends BlockModelStandard<
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         int hRotation = meta & 0b0011;
         int vRotation = meta & 0b1000;
 
         float stepYOffset = vRotation > 0 ? 0.5f : 0.0f;
 
+        AABB bounds = AABB.getTemporaryBB(0, 0, 0, 1, 1, 1);
+
         if(hRotation == 0)
         {
-            block.setBlockBounds(0.0F, 0.0F + stepYOffset, 0.0F, 0.5F, 0.5F + stepYOffset, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0.0F, 0.0F + stepYOffset, 0.0F, 0.5F, 0.5F + stepYOffset, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.5F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         } else
         if(hRotation == 1)
         {
-            block.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.5F, 0.0F + stepYOffset, 0.0F, 1.0F, 0.5F + stepYOffset, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.5F, 0.0F + stepYOffset, 0.0F, 1.0F, 0.5F + stepYOffset, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         } else
         if(hRotation == 2)
         {
-            block.setBlockBounds(0.0F, 0.0F + stepYOffset, 0.0F, 1.0F, 0.5F + stepYOffset, 0.5F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 1.0F, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0.0F, 0.0F + stepYOffset, 0.0F, 1.0F, 0.5F + stepYOffset, 0.5F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.0F, 0.0F, 0.5F, 1.0F, 1.0F, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         } else {
-            block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.0F, 0.0F + stepYOffset, 0.5F, 1.0F, 0.5F + stepYOffset, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
+            bounds.set(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
+            bounds.set(0.0F, 0.0F + stepYOffset, 0.5F, 1.0F, 0.5F + stepYOffset, 1.0F);
+            renderStandardBlock(tessellator, bounds, x, y, z);
         }
-        block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
         return true;
     }
 
@@ -67,39 +68,44 @@ public class BlockModelStairs<T extends BlockStairs> extends BlockModelStandard<
         }
         for(int l = 0; l < 2; l++)
         {
+            AABB bounds;
             if(l == 0)
             {
-                block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F);
-            }
-            if(l == 1)
-            {
-                block.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 0.5F, 1.0F);
+                bounds = AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F);
+            } else {
+                bounds = AABB.getTemporaryBB(0.0F, 0.0F, 0.5F, 1.0F, 0.5F, 1.0F);
             }
             GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, -1F, 0.0F);
-            renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
+            renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
             tessellator.draw();
+
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 1.0F, 0.0F);
-            renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
+            renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
             tessellator.draw();
+
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 0.0F, -1F);
-            renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
+            renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
             tessellator.draw();
+
             tessellator.startDrawingQuads();
             tessellator.setNormal(0.0F, 0.0F, 1.0F);
-            renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
+            renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
             tessellator.draw();
+
             tessellator.startDrawingQuads();
             tessellator.setNormal(-1F, 0.0F, 0.0F);
-            renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
+            renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
             tessellator.draw();
+
             tessellator.startDrawingQuads();
             tessellator.setNormal(1.0F, 0.0F, 0.0F);
-            renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
+            renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
             tessellator.draw();
+
             GL11.glTranslatef(0.5F, 0.5F, 0.5F);
         }
     }
@@ -114,4 +120,9 @@ public class BlockModelStairs<T extends BlockStairs> extends BlockModelStandard<
     {
         return BlockModelDispatcher.getInstance().getDispatch(block.modelBlock).getBlockTexture(blockAccess, x, y, z, side);
     }
+
+    @Override
+    public int renderLayer() {
+        return BlockModelDispatcher.getInstance().getDispatch(block.modelBlock).renderLayer();
+    }
 }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelStairsPainted.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStairsPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelStairsPainted.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStairsPainted.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java
similarity index 55%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java
index dd8670a08..8443494dd 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStandard.java
@@ -7,6 +7,7 @@ import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.client.render.block.color.BlockColorDispatcher;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
@@ -15,8 +16,9 @@ public class BlockModelStandard<T extends Block> extends BlockModel<T>{
     public static final IconCoordinate BLOCK_TEXTURE_MISSING = TextureRegistry.getTexture("minecraft:block/texture_missing");
     public static final IconCoordinate BLOCK_TEXTURE_UNASSIGNED = TextureRegistry.getTexture("minecraft:block/texture_unassigned");
     public IconCoordinate[] atlasIndices = new IconCoordinate[]{BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED, BLOCK_TEXTURE_UNASSIGNED};
-    public double[] itemRenderBounds = null;
+    public AABB itemRenderBounds = null;
     public IconCoordinate overbrightTexture = null;
+    public int renderlayer = 0;
 
     public BlockModelStandard(Block block) {
         super(block);
@@ -24,8 +26,7 @@ public class BlockModelStandard<T extends Block> extends BlockModel<T>{
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
-        return renderStandardBlock(tessellator, block, x, y, z );
+        return renderStandardBlock(tessellator, block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z), x, y, z);
     }
 
     @Override
@@ -41,80 +42,82 @@ public class BlockModelStandard<T extends Block> extends BlockModel<T>{
 		}
 		float yOffset = 0.5F;
 
-		setBlockBoundsForItemRender();
+        AABB bounds = getBlockBoundsForItemRender();
 		GL11.glTranslatef(-0.5F, 0.0F - yOffset, -0.5F);
+		renderBlockWithBounds(tessellator, bounds, metadata, brightness, alpha, lightmapCoordinate);
+		GL11.glTranslatef(0.5F, yOffset, 0.5F);
+	}
 
-		if(LightmapHelper.isLightmapEnabled() && lightmapCoordinate != null) {
-			LightmapHelper.setLightmapCoord(lightmapCoordinate);
-		}
+    public void renderBlockWithBounds(Tessellator tessellator, AABB bounds, int metadata, float brightness, float alpha, @Nullable Integer lightmapCoordinate) {
+        if(LightmapHelper.isLightmapEnabled() && lightmapCoordinate != null) {
+            LightmapHelper.setLightmapCoord(lightmapCoordinate);
+        }
 
-		tessellator.startDrawingQuads();
+        tessellator.startDrawingQuads();
 
-		tessellator.setNormal(0.0f, -1.0f, 0.0f);
-		renderBottomFace(tessellator, block, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
+        tessellator.setNormal(0.0f, -1.0f, 0.0f);
+        renderBottomFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
 
-		tessellator.setNormal(0.0f, 1.0f, 0.0f);
-		renderTopFace(tessellator, block, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
+        tessellator.setNormal(0.0f, 1.0f, 0.0f);
+        renderTopFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
 
-		tessellator.setNormal(0.0f, 0.0f, -1.0f);
-		renderNorthFace(tessellator, block, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
+        tessellator.setNormal(0.0f, 0.0f, -1.0f);
+        renderNorthFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
 
-		tessellator.setNormal(0.0f, 0.0f, 1.0f);
-		renderSouthFace(tessellator, block, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
+        tessellator.setNormal(0.0f, 0.0f, 1.0f);
+        renderSouthFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
 
-		tessellator.setNormal(-1.0f, 0.0f, 0.0f);
-		renderWestFace(tessellator, block, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
+        tessellator.setNormal(-1.0f, 0.0f, 0.0f);
+        renderWestFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
 
-		tessellator.setNormal(1.0f, 0.0f, 0.0f);
-		renderEastFace(tessellator, block, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
+        tessellator.setNormal(1.0f, 0.0f, 0.0f);
+        renderEastFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
 
-		tessellator.draw();
+        tessellator.draw();
 
-		if(hasOverbright()) {
+        if(hasOverbright()) {
 //			GL11.glDisable(GL11.GL_LIGHTING);
-			
-			brightness = 1.0f;
-			if(renderBlocks.useInventoryTint) {
-				int color = BlockColorDispatcher.getInstance().getDispatch(block).getFallbackColor(metadata);
-				float r = (float) (color >> 16 & 0xff) / 255F;
-				float g = (float) (color >> 8 & 0xff) / 255F;
-				float b = (float) (color & 0xff) / 255F;
-				GL11.glColor4f(r * brightness, g * brightness, b * brightness, alpha);
-			}else {
-				GL11.glColor4f(brightness, brightness, brightness, alpha);
-			}
 
-			if(LightmapHelper.isLightmapEnabled()) {
-				LightmapHelper.setLightmapCoord(15, 15);
-			}
+            brightness = 1.0f;
+            if(renderBlocks.useInventoryTint) {
+                int color = BlockColorDispatcher.getInstance().getDispatch(block).getFallbackColor(metadata);
+                float r = (float) (color >> 16 & 0xff) / 255F;
+                float g = (float) (color >> 8 & 0xff) / 255F;
+                float b = (float) (color & 0xff) / 255F;
+                GL11.glColor4f(r * brightness, g * brightness, b * brightness, alpha);
+            }else {
+                GL11.glColor4f(brightness, brightness, brightness, alpha);
+            }
 
-			tessellator.startDrawingQuads();
+            if(LightmapHelper.isLightmapEnabled()) {
+                LightmapHelper.setLightmapCoord(15, 15);
+            }
 
-			tessellator.setNormal(0.0f, -1.0f, 0.0f);
-			renderBottomFace(tessellator, block, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.BOTTOM, metadata));
+            tessellator.startDrawingQuads();
 
-			tessellator.setNormal(0.0f, 1.0f, 0.0f);
-			renderTopFace(tessellator, block, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.TOP, metadata));
+            tessellator.setNormal(0.0f, -1.0f, 0.0f);
+            renderBottomFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.BOTTOM, metadata));
 
-			tessellator.setNormal(0.0f, 0.0f, -1.0f);
-			renderNorthFace(tessellator, block, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.NORTH, metadata));
+            tessellator.setNormal(0.0f, 1.0f, 0.0f);
+            renderTopFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.TOP, metadata));
 
-			tessellator.setNormal(0.0f, 0.0f, 1.0f);
-			renderSouthFace(tessellator, block, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.SOUTH, metadata));
+            tessellator.setNormal(0.0f, 0.0f, -1.0f);
+            renderNorthFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.NORTH, metadata));
 
-			tessellator.setNormal(-1.0f, 0.0f, 0.0f);
-			renderWestFace(tessellator, block, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.WEST, metadata));
+            tessellator.setNormal(0.0f, 0.0f, 1.0f);
+            renderSouthFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.SOUTH, metadata));
 
-			tessellator.setNormal(1.0f, 0.0f, 0.0f);
-			renderEastFace(tessellator, block, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.EAST, metadata));
+            tessellator.setNormal(-1.0f, 0.0f, 0.0f);
+            renderWestFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.WEST, metadata));
 
-			tessellator.draw();
-			
-//			GL11.glEnable(GL11.GL_LIGHTING);
-		}
+            tessellator.setNormal(1.0f, 0.0f, 0.0f);
+            renderEastFace(tessellator, bounds, 0.0, 0.0, 0.0, getBlockOverbrightTextureFromSideAndMeta(Side.EAST, metadata));
 
-		GL11.glTranslatef(0.5F, yOffset, 0.5F);
-	}
+            tessellator.draw();
+
+//			GL11.glEnable(GL11.GL_LIGHTING);
+        }
+    }
 
     @Override
     public boolean shouldItemRender3d() {
@@ -150,35 +153,35 @@ public class BlockModelStandard<T extends Block> extends BlockModel<T>{
         return getBlockTextureFromSideAndMetadata(side, meta);
     }
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side, int meta)
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side, int meta)
     {
-        return shouldSideBeRendered(blockAccess, x, y, z, side);
+        return shouldSideBeRendered(blockAccess, bounds, x, y, z, side);
     }
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side)
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side)
     {
         Side side1 = Side.getSideById(side);
-        if(side1 == Side.BOTTOM && block.minY > 0.0D)
+        if(side1 == Side.BOTTOM && bounds.minY > 0.0D)
         {
             return true;
         }
-        else if(side1 == Side.TOP && block.maxY < 1.0D)
+        else if(side1 == Side.TOP && bounds.maxY < 1.0D)
         {
             return true;
         }
-        else if(side1 == Side.NORTH && block.minZ > 0.0D)
+        else if(side1 == Side.NORTH && bounds.minZ > 0.0D)
         {
             return true;
         }
-        else if(side1 == Side.SOUTH && block.maxZ < 1.0D)
+        else if(side1 == Side.SOUTH && bounds.maxZ < 1.0D)
         {
             return true;
         }
-        else if(side1 == Side.WEST && block.minX > 0.0D)
+        else if(side1 == Side.WEST && bounds.minX > 0.0D)
         {
             return true;
         }
-        else if(side1 == Side.EAST && block.maxX < 1.0D)
+        else if(side1 == Side.EAST && bounds.maxX < 1.0D)
         {
             return true;
         }
@@ -192,20 +195,26 @@ public class BlockModelStandard<T extends Block> extends BlockModel<T>{
         return true;
     }
     @Override
-    public void setBlockBoundsForItemRender()
+    public AABB getBlockBoundsForItemRender()
     {
         if (itemRenderBounds != null){
-            block.setBlockBounds(
-            itemRenderBounds[0],
-            itemRenderBounds[1],
-            itemRenderBounds[2],
-            itemRenderBounds[3],
-            itemRenderBounds[4],
-            itemRenderBounds[5]);
+            return itemRenderBounds;
         }
+        return super.getBlockBoundsForItemRender();
+    }
+
+    @Override
+    public int renderLayer() {
+        return renderlayer;
     }
+
+    public BlockModelStandard<T> onRenderLayer(int layer) {
+        this.renderlayer = layer;
+        return this;
+    }
+
     public BlockModelStandard<T> withCustomItemBounds(double minX, double minY, double minZ, double maxX, double maxY, double maxZ){
-        this.itemRenderBounds = new double[]{minX, minY, minZ, maxX, maxY, maxZ};
+        this.itemRenderBounds = AABB.getPermanentBB(minX, minY, minZ, maxX, maxY, maxZ);
         return this;
     }
     public BlockModelStandard<T> withOverbrightTexture(String texture)
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelStoneMossy.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStoneMossy.java
similarity index 77%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelStoneMossy.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStoneMossy.java
index c75156492..8da732220 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelStoneMossy.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelStoneMossy.java
@@ -5,6 +5,7 @@ import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.client.render.block.color.BlockColorDispatcher;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.util.phys.AABB;
 import org.jetbrains.annotations.Nullable;
 import org.lwjgl.opengl.GL11;
 
@@ -17,10 +18,10 @@ public class BlockModelStoneMossy<T extends Block> extends BlockModelStandard<T>
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
-        renderStandardBlock(tessellator, block, x, y, z, 1.0f, 1.0f, 1.0f);
+        AABB bounds = block.getBlockBoundsFromState(renderBlocks.blockAccess, x, y, z);
+        renderStandardBlock(tessellator, bounds, x, y, z, 1.0f, 1.0f, 1.0f);
         renderBlocks.overrideBlockTexture = mossOverlay;
-        renderStandardBlock(tessellator, block, x, y, z);
+        renderStandardBlock(tessellator, bounds, x, y, z);
         renderBlocks.overrideBlockTexture = null;
         return true;
     }
@@ -38,31 +39,32 @@ public class BlockModelStoneMossy<T extends Block> extends BlockModelStandard<T>
         float b = (float)(color & 0xff) / 255F;
         GL11.glColor4f(r * brightness, g * brightness, b * brightness, alpha);
 
+        AABB bounds = block.getBounds();
         IconCoordinate mossCoord = mossOverlay;
 
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, -1F, 0.0F);
-        renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, mossCoord);
+        renderBottomFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, mossCoord);
         tessellator.draw();
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 1.0F, 0.0F);
-        renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, mossCoord);
+        renderTopFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, mossCoord);
         tessellator.draw();
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, -1F);
-        renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, mossCoord);
+        renderNorthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, mossCoord);
         tessellator.draw();
         tessellator.startDrawingQuads();
         tessellator.setNormal(0.0F, 0.0F, 1.0F);
-        renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, mossCoord);
+        renderSouthFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, mossCoord);
         tessellator.draw();
         tessellator.startDrawingQuads();
         tessellator.setNormal(-1F, 0.0F, 0.0F);
-        renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, mossCoord);
+        renderWestFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, mossCoord);
         tessellator.draw();
         tessellator.startDrawingQuads();
         tessellator.setNormal(1.0F, 0.0F, 0.0F);
-        renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, mossCoord);
+        renderEastFace(tessellator, bounds, 0.0D, 0.0D, 0.0D, mossCoord);
         tessellator.draw();
         GL11.glTranslatef(0.5F, 0.5F, 0.5F);
     }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelTorch.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTorch.java
similarity index 97%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelTorch.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTorch.java
index c54de360f..94063164c 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelTorch.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTorch.java
@@ -5,6 +5,7 @@ import net.minecraft.client.render.texture.stitcher.IconCoordinate;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockTorch;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.util.helper.Side;
 
 public class BlockModelTorch<T extends Block> extends BlockModelStandard<T> {
@@ -14,13 +15,12 @@ public class BlockModelTorch<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         float brightness = 1.0f;
         if(LightmapHelper.isLightmapEnabled()) {
             tessellator.setLightmapCoord(block.getLightmapCoord(renderBlocks.blockAccess, x, y, z));
         }else {
             brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
-            if(Block.lightEmission[block.id] > 0) {
+            if(Blocks.lightEmission[block.id] > 0) {
                 brightness = 1.0F;
             }
         }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelTorchRedstone.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTorchRedstone.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelTorchRedstone.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTorchRedstone.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelTransparent.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTransparent.java
similarity index 78%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelTransparent.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTransparent.java
index b0a2d9837..d3bb1c846 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelTransparent.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTransparent.java
@@ -1,6 +1,7 @@
 package net.minecraft.client.render.block.model;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.WorldSource;
 
 public class BlockModelTransparent<T extends Block> extends BlockModelStandard<T> {
@@ -10,14 +11,14 @@ public class BlockModelTransparent<T extends Block> extends BlockModelStandard<T
         this.renderInside = renderInside;
     }
     @Override
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side)
+    public boolean shouldSideBeRendered(WorldSource blockAccess, AABB bounds, int x, int y, int z, int side)
     {
         if(!renderInside && blockAccess.getBlockId(x, y, z) == block.id)
         {
             return false;
         } else
         {
-            return super.shouldSideBeRendered(blockAccess, x, y, z, side);
+            return super.shouldSideBeRendered(blockAccess, bounds, x, y, z, side);
         }
     }
 }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java
similarity index 95%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java
index 0fccd7420..12db78c3e 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoor.java
@@ -19,7 +19,6 @@ public class BlockModelTrapDoor<T extends Block> extends BlockModelStandard<T> {
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int metadata = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         boolean isUp = BlockTrapDoor.isTrapdoorOpen(metadata);
 
@@ -62,7 +61,7 @@ public class BlockModelTrapDoor<T extends Block> extends BlockModelStandard<T> {
                 renderBlocks.uvRotateWest = 3;
             }
         }
-        renderStandardBlock(tessellator, block, x, y, z);
+        super.render(tessellator, x, y, z);
         resetRenderBlocks();
         return true;
     }
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoorPainted.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoorPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoorPainted.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelTrapDoorPainted.java
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelVeryRotatable.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelVeryRotatable.java
similarity index 94%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelVeryRotatable.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelVeryRotatable.java
index a7bcd01bf..58c696a32 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelVeryRotatable.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelVeryRotatable.java
@@ -15,7 +15,6 @@ public class BlockModelVeryRotatable<T extends Block> extends BlockModelStandard
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         final int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         final Direction dir = BlockTileEntityVeryRotatable.metaToDirection(meta);
 
@@ -23,7 +22,7 @@ public class BlockModelVeryRotatable<T extends Block> extends BlockModelStandard
             renderBlocks.uvRotateSouth = 1;
             renderBlocks.uvRotateNorth = 2;
         }
-        final boolean result = renderStandardBlock(tessellator, block, x, y, z);
+        final boolean result = super.render(tessellator, x, y, z);
         resetRenderBlocks();
 
         return result;
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelWireRedstone.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelWireRedstone.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelWireRedstone.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelWireRedstone.java
index 99fb52b9f..e00523025 100644
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelWireRedstone.java
+++ b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelWireRedstone.java
@@ -7,6 +7,7 @@ import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.client.util.helper.Colors;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockWireRedstone;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.enums.LightLayer;
 import net.minecraft.core.util.helper.Color;
 
@@ -20,7 +21,6 @@ public class BlockModelWireRedstone<T extends Block> extends BlockModelStandard<
 
     @Override
     public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
         int meta = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
         IconCoordinate straight = wireStraight;
         IconCoordinate cross = wireCross;
@@ -31,14 +31,14 @@ public class BlockModelWireRedstone<T extends Block> extends BlockModelStandard<
         float brightness = 1.0f;
         if(LightmapHelper.isLightmapEnabled()) {
 //            int lmc = block.getLightmapCoord(renderBlocks.blockAccess, x, y, z);
-//            if(Block.lightEmission[block.id] > 0) {
+//            if(Blocks.lightEmission[block.id] > 0) {
 //                lmc = LightmapHelper.setBlocklightValue(lmc, 15);
 //            }
             int lmc = LightmapHelper.getLightmapCoord(renderBlocks.blockAccess.getSavedLightValue(LightLayer.Sky, x, y, z), Math.max(renderBlocks.blockAccess.getSavedLightValue(LightLayer.Block, x, y, z), meta & 0xF));
             tessellator.setLightmapCoord(lmc);
         }else {
             brightness = getBlockBrightness(renderBlocks.blockAccess, x, y, z);
-            if(Block.lightEmission[block.id] > 0) {
+            if(Blocks.lightEmission[block.id] > 0) {
                 brightness = 1.0f;
             }
             brightness = Math.max(brightness, (meta & 0xF)/16f);
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelWool.java b/game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelWool.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/block/model/BlockModelWool.java
rename to game/client/src/main/java/net/minecraft/client/render/block/model/BlockModelWool.java
diff --git a/src/main/java/net/minecraft/client/render/blockentity/TileEntityRenderer.java b/game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRenderer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/blockentity/TileEntityRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRenderer.java
diff --git a/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererFlag.java b/game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererFlag.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererFlag.java
rename to game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererFlag.java
diff --git a/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererFlowerJar.java b/game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererFlowerJar.java
similarity index 96%
rename from src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererFlowerJar.java
rename to game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererFlowerJar.java
index b38cf42e6..08127f80e 100644
--- a/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererFlowerJar.java
+++ b/game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererFlowerJar.java
@@ -9,6 +9,7 @@ import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.Global;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntityFlowerJar;
 import net.minecraft.core.enums.LightLayer;
 import net.minecraft.core.world.World;
@@ -28,7 +29,7 @@ public class TileEntityRendererFlowerJar extends TileEntityRenderer<TileEntityFl
     @Override
     public void doRender(Tessellator tessellator, TileEntityFlowerJar tileEntity, double x, double y, double z, float renderPartialTicks) {
         GL11.glPushMatrix();
-        Block block = Block.getBlock(tileEntity.flowerInPot);
+        Block block = Blocks.getBlock(tileEntity.flowerInPot);
         if(block != null){
             GL11.glTranslatef((float)x, (float)y, (float)z);
             TextureRegistry.blockAtlas.bind();
diff --git a/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMeshGold.java b/game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMeshGold.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMeshGold.java
rename to game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMeshGold.java
diff --git a/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMobSpawner.java b/game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMobSpawner.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMobSpawner.java
rename to game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMobSpawner.java
diff --git a/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMovingPiston.java b/game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMovingPiston.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMovingPiston.java
rename to game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMovingPiston.java
index 95028fa1b..9a3d63afd 100644
--- a/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMovingPiston.java
+++ b/game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererMovingPiston.java
@@ -44,7 +44,7 @@ public class TileEntityRendererMovingPiston extends TileEntityRenderer<TileEntit
 	public void doRender(Tessellator tessellator, TileEntityMovingPistonBlock blockEntity, double x, double y, double z,
                          float partialTick)
     {
-        Block block = Block.blocksList[blockEntity.getMovedId()];
+        Block block = Blocks.blocksList[blockEntity.getMovedId()];
         if(block != null && blockEntity.getProgress(partialTick) < 1.0F)
         {
             if (container == null || container.world != blockEntity.worldObj) {
diff --git a/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererSign.java b/game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererSign.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererSign.java
rename to game/client/src/main/java/net/minecraft/client/render/blockentity/TileEntityRendererSign.java
diff --git a/src/main/java/net/minecraft/client/render/camera/CameraUtil.java b/game/client/src/main/java/net/minecraft/client/render/camera/CameraUtil.java
similarity index 92%
rename from src/main/java/net/minecraft/client/render/camera/CameraUtil.java
rename to game/client/src/main/java/net/minecraft/client/render/camera/CameraUtil.java
index 63f9ae7fc..276710b8c 100644
--- a/src/main/java/net/minecraft/client/render/camera/CameraUtil.java
+++ b/game/client/src/main/java/net/minecraft/client/render/camera/CameraUtil.java
@@ -1,40 +1,41 @@
-package net.minecraft.client.render.camera;
-
-import net.minecraft.core.block.BlockFluid;
-import net.minecraft.core.util.phys.HitResult;
-import net.minecraft.core.block.Block;
-import net.minecraft.core.block.material.Material;
-import net.minecraft.core.util.helper.MathHelper;
-import net.minecraft.core.util.phys.Vec3;
-import net.minecraft.core.world.World;
-
-public abstract class CameraUtil
-{
-    public static HitResult traceRay(ICamera camera, World world, double distance, float partialTick)
-    {
-        Vec3 pos = camera.getPosition(partialTick);
-        Vec3 rot = camera.getRotationVector(partialTick);
-        Vec3 endPos = pos.add(rot.x * distance, rot.y * distance, rot.z * distance);
-        return world.checkBlockCollisionBetweenPoints(pos, endPos);
-    }
-
-    public static boolean isUnderLiquid(ICamera camera, World world, Material material, float partialTick)
-    {
-        double cameraY = camera.getY(partialTick);
-        int x = MathHelper.floor(camera.getX(partialTick));
-        int y = MathHelper.floor_float(MathHelper.floor(cameraY));
-        int z = MathHelper.floor(camera.getZ(partialTick));
-        int id = world.getBlockId(x, y, z);
-        if(id != 0 && Block.blocksList[id].blockMaterial == material)
-        {
-            float f = BlockFluid.getWaterVolume(world.getBlockMetadata(x, y, z)) - 0.2F;
-            float f1 = (float)(y + 1) - f;
-            return cameraY < (double)f1;
-        }
-        else
-        {
-            return false;
-        }
-
-    }
-}
+package net.minecraft.client.render.camera;
+
+import net.minecraft.core.block.BlockFluid;
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.util.phys.HitResult;
+import net.minecraft.core.block.Block;
+import net.minecraft.core.block.material.Material;
+import net.minecraft.core.util.helper.MathHelper;
+import net.minecraft.core.util.phys.Vec3;
+import net.minecraft.core.world.World;
+
+public abstract class CameraUtil
+{
+    public static HitResult traceRay(ICamera camera, World world, double distance, float partialTick)
+    {
+        Vec3 pos = camera.getPosition(partialTick);
+        Vec3 rot = camera.getRotationVector(partialTick);
+        Vec3 endPos = pos.add(rot.x * distance, rot.y * distance, rot.z * distance);
+        return world.checkBlockCollisionBetweenPoints(pos, endPos);
+    }
+
+    public static boolean isUnderLiquid(ICamera camera, World world, Material material, float partialTick)
+    {
+        double cameraY = camera.getY(partialTick);
+        int x = MathHelper.floor(camera.getX(partialTick));
+        int y = MathHelper.floor_float(MathHelper.floor(cameraY));
+        int z = MathHelper.floor(camera.getZ(partialTick));
+        int id = world.getBlockId(x, y, z);
+        if(id != 0 && Blocks.blocksList[id].blockMaterial == material)
+        {
+            float f = BlockFluid.getWaterVolume(world.getBlockMetadata(x, y, z)) - 0.2F;
+            float f1 = (float)(y + 1) - f;
+            return cameraY < (double)f1;
+        }
+        else
+        {
+            return false;
+        }
+
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/camera/EntityCamera.java b/game/client/src/main/java/net/minecraft/client/render/camera/EntityCamera.java
similarity index 94%
rename from src/main/java/net/minecraft/client/render/camera/EntityCamera.java
rename to game/client/src/main/java/net/minecraft/client/render/camera/EntityCamera.java
index ca37c06a4..fea78b848 100644
--- a/src/main/java/net/minecraft/client/render/camera/EntityCamera.java
+++ b/game/client/src/main/java/net/minecraft/client/render/camera/EntityCamera.java
@@ -1,113 +1,113 @@
-package net.minecraft.client.render.camera;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.render.culling.CameraFrustum;
-import net.minecraft.core.entity.Mob;
-
-public abstract class EntityCamera
-    implements ICamera
-{
-    protected final Minecraft mc;
-
-    private final CameraFrustum frustum;
-
-    public final Mob mob;
-
-    public EntityCamera(Minecraft mc, Mob mob)
-    {
-        this.mc = mc;
-        this.mob = mob;
-        this.frustum = new CameraFrustum(this);
-    }
-
-    @Override
-    public boolean showPlayer()
-    {
-        return false;
-    }
-
-    @Override
-    public void tick() { }
-
-    @Override
-    public void applyGlTransformations() { }
-
-    @Override
-    public double getX(float partialTick)
-    {
-        if (partialTick == 1f)
-        {
-            return mob.x;
-        }
-        else
-        {
-            return mob.xo + (mob.x - mob.xo) * partialTick;
-        }
-    }
-
-    @Override
-    public double getY(float partialTick)
-    {
-        if (partialTick == 1f)
-        {
-            return mob.y;
-        }
-        else
-        {
-            return (mob.yo + (mob.y - mob.yo) * partialTick);
-        }
-    }
-
-    @Override
-    public double getZ(float partialTick)
-    {
-        if (partialTick == 1f)
-        {
-            return mob.z;
-        }
-        else
-        {
-            return mob.zo + (mob.z - mob.zo) * partialTick;
-        }
-
-    }
-
-    @Override
-    public double getXRot(float partialTick)
-    {
-        if (partialTick == 1f)
-        {
-            return mob.xRot;
-        }
-        else
-        {
-            return mob.xRotO + (mob.xRot - mob.xRotO) * partialTick;
-        }
-
-    }
-
-    @Override
-    public double getYRot(float partialTick)
-    {
-        if (partialTick == 1f)
-        {
-            return mob.yRot;
-        }
-        else
-        {
-            return mob.yRotO + (mob.yRot - mob.yRotO) * partialTick;
-        }
-    }
-
-    @Override
-    public double getFov()
-    {
-        return mc.gameSettings.FoV.value;
-    }
-
-    @Override
-    public CameraFrustum getFrustum()
-    {
-        return frustum;
-    }
-}
+package net.minecraft.client.render.camera;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.render.culling.CameraFrustum;
+import net.minecraft.core.entity.Mob;
+
+public abstract class EntityCamera
+    implements ICamera
+{
+    protected final Minecraft mc;
+
+    private final CameraFrustum frustum;
+
+    public final Mob mob;
+
+    public EntityCamera(Minecraft mc, Mob mob)
+    {
+        this.mc = mc;
+        this.mob = mob;
+        this.frustum = new CameraFrustum(this);
+    }
+
+    @Override
+    public boolean showPlayer()
+    {
+        return false;
+    }
+
+    @Override
+    public void tick() { }
+
+    @Override
+    public void applyGlTransformations() { }
+
+    @Override
+    public double getX(float partialTick)
+    {
+        if (partialTick == 1f)
+        {
+            return mob.x;
+        }
+        else
+        {
+            return mob.xo + (mob.x - mob.xo) * partialTick;
+        }
+    }
+
+    @Override
+    public double getY(float partialTick)
+    {
+        if (partialTick == 1f)
+        {
+            return mob.y;
+        }
+        else
+        {
+            return (mob.yo + (mob.y - mob.yo) * partialTick);
+        }
+    }
+
+    @Override
+    public double getZ(float partialTick)
+    {
+        if (partialTick == 1f)
+        {
+            return mob.z;
+        }
+        else
+        {
+            return mob.zo + (mob.z - mob.zo) * partialTick;
+        }
+
+    }
+
+    @Override
+    public double getXRot(float partialTick)
+    {
+        if (partialTick == 1f)
+        {
+            return mob.xRot;
+        }
+        else
+        {
+            return mob.xRotO + (mob.xRot - mob.xRotO) * partialTick;
+        }
+
+    }
+
+    @Override
+    public double getYRot(float partialTick)
+    {
+        if (partialTick == 1f)
+        {
+            return mob.yRot;
+        }
+        else
+        {
+            return mob.yRotO + (mob.yRot - mob.yRotO) * partialTick;
+        }
+    }
+
+    @Override
+    public double getFov()
+    {
+        return mc.gameSettings.FoV.value;
+    }
+
+    @Override
+    public CameraFrustum getFrustum()
+    {
+        return frustum;
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/camera/EntityCameraFirstPerson.java b/game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraFirstPerson.java
similarity index 95%
rename from src/main/java/net/minecraft/client/render/camera/EntityCameraFirstPerson.java
rename to game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraFirstPerson.java
index bdd478b5f..a782fd46e 100644
--- a/src/main/java/net/minecraft/client/render/camera/EntityCameraFirstPerson.java
+++ b/game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraFirstPerson.java
@@ -1,13 +1,13 @@
-package net.minecraft.client.render.camera;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.core.entity.Mob;
-
-public class EntityCameraFirstPerson
-    extends EntityCamera
-{
-    public EntityCameraFirstPerson(Minecraft mc, Mob entity)
-    {
-        super(mc, entity);
-    }
-}
+package net.minecraft.client.render.camera;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.core.entity.Mob;
+
+public class EntityCameraFirstPerson
+    extends EntityCamera
+{
+    public EntityCameraFirstPerson(Minecraft mc, Mob entity)
+    {
+        super(mc, entity);
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/camera/EntityCameraIsometric.java b/game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraIsometric.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/camera/EntityCameraIsometric.java
rename to game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraIsometric.java
diff --git a/src/main/java/net/minecraft/client/render/camera/EntityCameraSleeping.java b/game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraSleeping.java
similarity index 95%
rename from src/main/java/net/minecraft/client/render/camera/EntityCameraSleeping.java
rename to game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraSleeping.java
index 0fcada15e..a9524a5cb 100644
--- a/src/main/java/net/minecraft/client/render/camera/EntityCameraSleeping.java
+++ b/game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraSleeping.java
@@ -1,158 +1,158 @@
-package net.minecraft.client.render.camera;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.core.entity.Mob;
-
-public class EntityCameraSleeping
-    extends EntityCamera
-{
-    private static final int ANIM_TICKS = 5;
-    private int ticks = 0;
-
-    private double x;
-    private double xo;
-    private final double xs;
-    private final double xt;
-    private double y;
-    private double yo;
-    private final double ys;
-    private final double yt;
-    private double z;
-    private double zo;
-    private final double zs;
-    private final double zt;
-    private double yRot;
-    private double yRotO;
-    private final double yRotS;
-    private final double yRotT;
-    private double xRot;
-    private double xRotO;
-    private final double xRotS;
-    private final double xRotT;
-
-    public EntityCameraSleeping(Minecraft mc, Mob entity, int xb, int yb, int zb, double xs, double ys, double zs, double yRotS, double xRotS)
-    {
-        super(mc, entity);
-        int metadata = mc.currentWorld.getBlockMetadata(xb, yb, zb) & 3;
-
-        while (yRotS < 0)
-        {
-            yRotS += 360;
-        }
-        while (yRotS > 360)
-        {
-            yRotS -= 360;
-        }
-        while (xRotS < 0)
-        {
-            xRotS += 360;
-        }
-        while (xRotS > 360)
-        {
-            xRotS -= 360;
-        }
-
-        this.xs = this.xo = this.x = xs;
-        this.ys = this.yo = this.y = ys;
-        this.zs = this.zo = this.z = zs;
-        this.yRotS = this.yRotO = this.yRot = yRotS;
-        this.xRotS = this.xRotO = this.xRot = xRotS;
-        this.xt = xb + 0.5;
-        this.yt = yb + 0.8;
-        this.zt = zb + 0.5;
-        this.yRotT = metadata * 90 + 180;
-        this.xRotT = 0;
-    }
-
-    @Override
-    public void tick()
-    {
-        this.xo = this.x;
-        this.yo = this.y;
-        this.zo = this.z;
-        this.yRotO = this.yRot;
-        this.xRotO = this.xRot;
-        if (ticks < ANIM_TICKS)
-        {
-            ticks++;
-            double progress = (double)ticks / ANIM_TICKS;
-            double dx = this.xt - this.xs;
-            double dy = this.yt - this.ys;
-            double dz = this.zt - this.zs;
-            double dYRot = this.yRotT - this.yRotS;
-            double dXRot = this.xRotT - this.xRotS;
-            if (dYRot > 180) dYRot -= 360;
-            if (dXRot > 180) dXRot -= 360;
-            this.x = this.xs + (dx * progress);
-            this.y = this.ys + (dy * progress);
-            this.z = this.zs + (dz * progress);
-            this.yRot = this.yRotS + (dYRot * progress);
-            this.xRot = this.xRotS + (dXRot * progress);
-        }
-    }
-
-    @Override
-    public double getX(float partialTick)
-    {
-        if (partialTick == 1f)
-        {
-            return x;
-        }
-        else
-        {
-            return xo + (x - xo) * partialTick;
-        }
-    }
-
-    @Override
-    public double getY(float partialTick)
-    {
-        if (partialTick == 1f)
-        {
-            return y;
-        }
-        else
-        {
-            return yo + (y - yo) * partialTick;
-        }
-    }
-
-    @Override
-    public double getZ(float partialTick)
-    {
-        if (partialTick == 1f)
-        {
-            return z;
-        }
-        else
-        {
-            return zo + (z - zo) * partialTick;
-        }
-    }
-
-    @Override
-    public double getXRot(float partialTick)
-    {
-        if (partialTick == 1f)
-        {
-            return xRot;
-        }
-        else
-        {
-            return xRotO + (xRot - xRotO) * partialTick;
-        }
-    }
-
-    @Override
-    public double getYRot(float partialTick)
-    {
-        if (partialTick == 1f)
-        {
-            return yRot;
-        }
-        else
-        {
-            return yRotO + (yRot - yRotO) * partialTick;
-        }
-    }
-}
+package net.minecraft.client.render.camera;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.core.entity.Mob;
+
+public class EntityCameraSleeping
+    extends EntityCamera
+{
+    private static final int ANIM_TICKS = 5;
+    private int ticks = 0;
+
+    private double x;
+    private double xo;
+    private final double xs;
+    private final double xt;
+    private double y;
+    private double yo;
+    private final double ys;
+    private final double yt;
+    private double z;
+    private double zo;
+    private final double zs;
+    private final double zt;
+    private double yRot;
+    private double yRotO;
+    private final double yRotS;
+    private final double yRotT;
+    private double xRot;
+    private double xRotO;
+    private final double xRotS;
+    private final double xRotT;
+
+    public EntityCameraSleeping(Minecraft mc, Mob entity, int xb, int yb, int zb, double xs, double ys, double zs, double yRotS, double xRotS)
+    {
+        super(mc, entity);
+        int metadata = mc.currentWorld.getBlockMetadata(xb, yb, zb) & 3;
+
+        while (yRotS < 0)
+        {
+            yRotS += 360;
+        }
+        while (yRotS > 360)
+        {
+            yRotS -= 360;
+        }
+        while (xRotS < 0)
+        {
+            xRotS += 360;
+        }
+        while (xRotS > 360)
+        {
+            xRotS -= 360;
+        }
+
+        this.xs = this.xo = this.x = xs;
+        this.ys = this.yo = this.y = ys;
+        this.zs = this.zo = this.z = zs;
+        this.yRotS = this.yRotO = this.yRot = yRotS;
+        this.xRotS = this.xRotO = this.xRot = xRotS;
+        this.xt = xb + 0.5;
+        this.yt = yb + 0.8;
+        this.zt = zb + 0.5;
+        this.yRotT = metadata * 90 + 180;
+        this.xRotT = 0;
+    }
+
+    @Override
+    public void tick()
+    {
+        this.xo = this.x;
+        this.yo = this.y;
+        this.zo = this.z;
+        this.yRotO = this.yRot;
+        this.xRotO = this.xRot;
+        if (ticks < ANIM_TICKS)
+        {
+            ticks++;
+            double progress = (double)ticks / ANIM_TICKS;
+            double dx = this.xt - this.xs;
+            double dy = this.yt - this.ys;
+            double dz = this.zt - this.zs;
+            double dYRot = this.yRotT - this.yRotS;
+            double dXRot = this.xRotT - this.xRotS;
+            if (dYRot > 180) dYRot -= 360;
+            if (dXRot > 180) dXRot -= 360;
+            this.x = this.xs + (dx * progress);
+            this.y = this.ys + (dy * progress);
+            this.z = this.zs + (dz * progress);
+            this.yRot = this.yRotS + (dYRot * progress);
+            this.xRot = this.xRotS + (dXRot * progress);
+        }
+    }
+
+    @Override
+    public double getX(float partialTick)
+    {
+        if (partialTick == 1f)
+        {
+            return x;
+        }
+        else
+        {
+            return xo + (x - xo) * partialTick;
+        }
+    }
+
+    @Override
+    public double getY(float partialTick)
+    {
+        if (partialTick == 1f)
+        {
+            return y;
+        }
+        else
+        {
+            return yo + (y - yo) * partialTick;
+        }
+    }
+
+    @Override
+    public double getZ(float partialTick)
+    {
+        if (partialTick == 1f)
+        {
+            return z;
+        }
+        else
+        {
+            return zo + (z - zo) * partialTick;
+        }
+    }
+
+    @Override
+    public double getXRot(float partialTick)
+    {
+        if (partialTick == 1f)
+        {
+            return xRot;
+        }
+        else
+        {
+            return xRotO + (xRot - xRotO) * partialTick;
+        }
+    }
+
+    @Override
+    public double getYRot(float partialTick)
+    {
+        if (partialTick == 1f)
+        {
+            return yRot;
+        }
+        else
+        {
+            return yRotO + (yRot - yRotO) * partialTick;
+        }
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonFront.java b/game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonFront.java
similarity index 95%
rename from src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonFront.java
rename to game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonFront.java
index dd9a71cd2..7b239fa47 100644
--- a/src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonFront.java
+++ b/game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonFront.java
@@ -1,25 +1,25 @@
-package net.minecraft.client.render.camera;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.core.entity.Mob;
-
-public class EntityCameraThirdPersonFront
-        extends EntityCameraThirdPersonRear
-{
-    public EntityCameraThirdPersonFront(Minecraft mc, Mob entity)
-    {
-        super(mc, entity);
-    }
-
-    @Override
-    public double getYRot(float partialTick)
-    {
-        return super.getYRot(partialTick) + 180;
-    }
-
-    @Override
-    public double getXRot(float partialTick)
-    {
-        return -super.getXRot(partialTick);
-    }
-}
+package net.minecraft.client.render.camera;
+
+import net.minecraft.client.Minecraft;
+import net.minecraft.core.entity.Mob;
+
+public class EntityCameraThirdPersonFront
+        extends EntityCameraThirdPersonRear
+{
+    public EntityCameraThirdPersonFront(Minecraft mc, Mob entity)
+    {
+        super(mc, entity);
+    }
+
+    @Override
+    public double getYRot(float partialTick)
+    {
+        return super.getYRot(partialTick) + 180;
+    }
+
+    @Override
+    public double getXRot(float partialTick)
+    {
+        return -super.getXRot(partialTick);
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonRear.java b/game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonRear.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonRear.java
rename to game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonRear.java
index 43e2cbf51..09da687bc 100644
--- a/src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonRear.java
+++ b/game/client/src/main/java/net/minecraft/client/render/camera/EntityCameraThirdPersonRear.java
@@ -52,8 +52,8 @@ public class EntityCameraThirdPersonRear
                     Vec3.getTempVec3(x, y, z),
                     Vec3.getTempVec3(x - i * dx, y - i * dy, z - i * dz),
                     false,
-                    true
-            );
+                    true,
+                false);
             if(hitResult != null)
             {
                 double distance = hitResult.location.distanceTo(Vec3.getTempVec3(x, y, z)) - offset;
diff --git a/src/main/java/net/minecraft/client/render/camera/ICamera.java b/game/client/src/main/java/net/minecraft/client/render/camera/ICamera.java
similarity index 96%
rename from src/main/java/net/minecraft/client/render/camera/ICamera.java
rename to game/client/src/main/java/net/minecraft/client/render/camera/ICamera.java
index f401c44f1..42133bd5f 100644
--- a/src/main/java/net/minecraft/client/render/camera/ICamera.java
+++ b/game/client/src/main/java/net/minecraft/client/render/camera/ICamera.java
@@ -1,127 +1,127 @@
-package net.minecraft.client.render.camera;
-
-import net.minecraft.client.render.culling.CameraFrustum;
-import net.minecraft.core.entity.Entity;
-import net.minecraft.core.util.helper.MathHelper;
-import net.minecraft.core.util.phys.Vec3;
-
-public interface ICamera
-{
-    void tick();
-
-    void applyGlTransformations();
-
-    boolean showPlayer();
-
-    double getX(float partialTick);
-
-    default double getX()
-    {
-        return getX(1f);
-    }
-
-    double getY(float partialTick);
-
-    default double getY()
-    {
-        return getY(1f);
-    }
-
-    double getZ(float partialTick);
-
-    default double getZ()
-    {
-        return getZ(1f);
-    }
-
-    default Vec3 getPosition(float partialTick)
-    {
-        return Vec3.getTempVec3(getX(partialTick), getY(partialTick), getZ(partialTick));
-    }
-
-    default Vec3 getPosition()
-    {
-        return getPosition(1f);
-    }
-
-    double getXRot(float partialTick);
-
-    default double getXRot()
-    {
-        return getXRot(1f);
-    }
-
-    double getYRot(float partialTick);
-
-    default double getYRot()
-    {
-        return getYRot(1f);
-    }
-
-    default Vec3 getViewVector(float partialTick)
-    {
-        float xRot = (float) getXRot(partialTick);
-        float yRot = (float) getYRot(partialTick);
-        float xzLen = -MathHelper.cos(-xRot * (MathHelper.PI / 180f));
-        float x = MathHelper.sin(-yRot * (MathHelper.PI / 180f) - MathHelper.PI);
-        float y = MathHelper.sin(-xRot * (MathHelper.PI / 180f));
-        float z = MathHelper.cos(-yRot * (MathHelper.PI / 180f) - MathHelper.PI);
-        return Vec3.getTempVec3(x * xzLen, y, z * xzLen);
-    }
-
-    default Vec3 getRotationVector(float partialTick)
-    {
-        double pitch = getXRot(partialTick);
-        double yaw = getYRot(partialTick);
-
-        double toRads = Math.PI / 180.0;
-
-        float xzLen = -MathHelper.cos((float) (-pitch * toRads));
-        float x = MathHelper.sin((float) (-yaw * toRads - Math.PI));
-        float y = MathHelper.sin((float) (-pitch * toRads));
-        float z = MathHelper.cos((float) (-yaw * toRads - Math.PI));
-        return Vec3.getTempVec3(x * xzLen, y, z * xzLen);
-    }
-
-    default Vec3 getRotationVector()
-    {
-        return getRotationVector(1f);
-    }
-
-    double getFov();
-
-    CameraFrustum getFrustum();
-
-    default double distanceToSqr(double x, double y, double z, float partialTick)
-    {
-        float dx = (float)(getX(partialTick) - x);
-        float dy = (float)(getY(partialTick) - y);
-        float dz = (float)(getZ(partialTick) - z);
-        return dx * dx + dy * dy + dz * dz;
-    }
-
-    default double distanceToSqr(double x, double y, double z)
-    {
-        return distanceToSqr(x, y, z, 1f);
-    }
-
-    default double distanceTo(Entity entity, float partialTick)
-    {
-        return distanceTo(entity.x, entity.y, entity.z, partialTick);
-    }
-
-    default double distanceTo(Entity entity)
-    {
-        return distanceTo(entity, 1f);
-    }
-
-    default double distanceTo(double x, double y, double z, float partialTick)
-    {
-        return MathHelper.sqrt(distanceToSqr(x, y, z, partialTick));
-    }
-
-    default double distanceTo(double x, double y, double z)
-    {
-        return distanceTo(x, y, z, 1f);
-    }
-}
+package net.minecraft.client.render.camera;
+
+import net.minecraft.client.render.culling.CameraFrustum;
+import net.minecraft.core.entity.Entity;
+import net.minecraft.core.util.helper.MathHelper;
+import net.minecraft.core.util.phys.Vec3;
+
+public interface ICamera
+{
+    void tick();
+
+    void applyGlTransformations();
+
+    boolean showPlayer();
+
+    double getX(float partialTick);
+
+    default double getX()
+    {
+        return getX(1f);
+    }
+
+    double getY(float partialTick);
+
+    default double getY()
+    {
+        return getY(1f);
+    }
+
+    double getZ(float partialTick);
+
+    default double getZ()
+    {
+        return getZ(1f);
+    }
+
+    default Vec3 getPosition(float partialTick)
+    {
+        return Vec3.getTempVec3(getX(partialTick), getY(partialTick), getZ(partialTick));
+    }
+
+    default Vec3 getPosition()
+    {
+        return getPosition(1f);
+    }
+
+    double getXRot(float partialTick);
+
+    default double getXRot()
+    {
+        return getXRot(1f);
+    }
+
+    double getYRot(float partialTick);
+
+    default double getYRot()
+    {
+        return getYRot(1f);
+    }
+
+    default Vec3 getViewVector(float partialTick)
+    {
+        float xRot = (float) getXRot(partialTick);
+        float yRot = (float) getYRot(partialTick);
+        float xzLen = -MathHelper.cos(-xRot * (MathHelper.PI / 180f));
+        float x = MathHelper.sin(-yRot * (MathHelper.PI / 180f) - MathHelper.PI);
+        float y = MathHelper.sin(-xRot * (MathHelper.PI / 180f));
+        float z = MathHelper.cos(-yRot * (MathHelper.PI / 180f) - MathHelper.PI);
+        return Vec3.getTempVec3(x * xzLen, y, z * xzLen);
+    }
+
+    default Vec3 getRotationVector(float partialTick)
+    {
+        double pitch = getXRot(partialTick);
+        double yaw = getYRot(partialTick);
+
+        double toRads = Math.PI / 180.0;
+
+        float xzLen = -MathHelper.cos((float) (-pitch * toRads));
+        float x = MathHelper.sin((float) (-yaw * toRads - Math.PI));
+        float y = MathHelper.sin((float) (-pitch * toRads));
+        float z = MathHelper.cos((float) (-yaw * toRads - Math.PI));
+        return Vec3.getTempVec3(x * xzLen, y, z * xzLen);
+    }
+
+    default Vec3 getRotationVector()
+    {
+        return getRotationVector(1f);
+    }
+
+    double getFov();
+
+    CameraFrustum getFrustum();
+
+    default double distanceToSqr(double x, double y, double z, float partialTick)
+    {
+        float dx = (float)(getX(partialTick) - x);
+        float dy = (float)(getY(partialTick) - y);
+        float dz = (float)(getZ(partialTick) - z);
+        return dx * dx + dy * dy + dz * dz;
+    }
+
+    default double distanceToSqr(double x, double y, double z)
+    {
+        return distanceToSqr(x, y, z, 1f);
+    }
+
+    default double distanceTo(Entity entity, float partialTick)
+    {
+        return distanceTo(entity.x, entity.y, entity.z, partialTick);
+    }
+
+    default double distanceTo(Entity entity)
+    {
+        return distanceTo(entity, 1f);
+    }
+
+    default double distanceTo(double x, double y, double z, float partialTick)
+    {
+        return MathHelper.sqrt(distanceToSqr(x, y, z, partialTick));
+    }
+
+    default double distanceTo(double x, double y, double z)
+    {
+        return distanceTo(x, y, z, 1f);
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/camera/ICameraSettableFov.java b/game/client/src/main/java/net/minecraft/client/render/camera/ICameraSettableFov.java
similarity index 95%
rename from src/main/java/net/minecraft/client/render/camera/ICameraSettableFov.java
rename to game/client/src/main/java/net/minecraft/client/render/camera/ICameraSettableFov.java
index cfd33894a..91c751b56 100644
--- a/src/main/java/net/minecraft/client/render/camera/ICameraSettableFov.java
+++ b/game/client/src/main/java/net/minecraft/client/render/camera/ICameraSettableFov.java
@@ -1,6 +1,6 @@
-package net.minecraft.client.render.camera;
-
-public interface ICameraSettableFov
-{
-    void setFov(double fov);
-}
+package net.minecraft.client.render.camera;
+
+public interface ICameraSettableFov
+{
+    void setFov(double fov);
+}
diff --git a/src/main/java/net/minecraft/client/render/camera/ICameraSettablePosition.java b/game/client/src/main/java/net/minecraft/client/render/camera/ICameraSettablePosition.java
similarity index 94%
rename from src/main/java/net/minecraft/client/render/camera/ICameraSettablePosition.java
rename to game/client/src/main/java/net/minecraft/client/render/camera/ICameraSettablePosition.java
index 4adde9a5c..12f7a74d8 100644
--- a/src/main/java/net/minecraft/client/render/camera/ICameraSettablePosition.java
+++ b/game/client/src/main/java/net/minecraft/client/render/camera/ICameraSettablePosition.java
@@ -1,10 +1,10 @@
-package net.minecraft.client.render.camera;
-
-public interface ICameraSettablePosition
-{
-    void setX(double x);
-
-    void setY(double y);
-
-    void setZ(double z);
-}
+package net.minecraft.client.render.camera;
+
+public interface ICameraSettablePosition
+{
+    void setX(double x);
+
+    void setY(double y);
+
+    void setZ(double z);
+}
diff --git a/src/main/java/net/minecraft/client/render/camera/ICameraSettableRotation.java b/game/client/src/main/java/net/minecraft/client/render/camera/ICameraSettableRotation.java
similarity index 95%
rename from src/main/java/net/minecraft/client/render/camera/ICameraSettableRotation.java
rename to game/client/src/main/java/net/minecraft/client/render/camera/ICameraSettableRotation.java
index ae5fa3fe5..d760f57d6 100644
--- a/src/main/java/net/minecraft/client/render/camera/ICameraSettableRotation.java
+++ b/game/client/src/main/java/net/minecraft/client/render/camera/ICameraSettableRotation.java
@@ -1,8 +1,8 @@
-package net.minecraft.client.render.camera;
-
-public interface ICameraSettableRotation
-{
-    void setPitch(double pitch);
-
-    void setYaw(double yaw);
-}
+package net.minecraft.client.render.camera;
+
+public interface ICameraSettableRotation
+{
+    void setPitch(double pitch);
+
+    void setYaw(double yaw);
+}
diff --git a/src/main/java/net/minecraft/client/render/canvas/CanvasCrashReport.java b/game/client/src/main/java/net/minecraft/client/render/canvas/CanvasCrashReport.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/canvas/CanvasCrashReport.java
rename to game/client/src/main/java/net/minecraft/client/render/canvas/CanvasCrashReport.java
diff --git a/src/main/java/net/minecraft/client/render/canvas/CanvasMojangLogo.java b/game/client/src/main/java/net/minecraft/client/render/canvas/CanvasMojangLogo.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/canvas/CanvasMojangLogo.java
rename to game/client/src/main/java/net/minecraft/client/render/canvas/CanvasMojangLogo.java
diff --git a/src/main/java/net/minecraft/client/render/colorizer/ColorMap.java b/game/client/src/main/java/net/minecraft/client/render/colorizer/ColorMap.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/colorizer/ColorMap.java
rename to game/client/src/main/java/net/minecraft/client/render/colorizer/ColorMap.java
diff --git a/src/main/java/net/minecraft/client/render/colorizer/Colorizer.java b/game/client/src/main/java/net/minecraft/client/render/colorizer/Colorizer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/colorizer/Colorizer.java
rename to game/client/src/main/java/net/minecraft/client/render/colorizer/Colorizer.java
diff --git a/src/main/java/net/minecraft/client/render/colorizer/Colorizers.java b/game/client/src/main/java/net/minecraft/client/render/colorizer/Colorizers.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/colorizer/Colorizers.java
rename to game/client/src/main/java/net/minecraft/client/render/colorizer/Colorizers.java
diff --git a/src/main/java/net/minecraft/client/render/culling/CameraFrustum.java b/game/client/src/main/java/net/minecraft/client/render/culling/CameraFrustum.java
similarity index 97%
rename from src/main/java/net/minecraft/client/render/culling/CameraFrustum.java
rename to game/client/src/main/java/net/minecraft/client/render/culling/CameraFrustum.java
index 50555db36..d27fc773e 100644
--- a/src/main/java/net/minecraft/client/render/culling/CameraFrustum.java
+++ b/game/client/src/main/java/net/minecraft/client/render/culling/CameraFrustum.java
@@ -1,34 +1,34 @@
-package net.minecraft.client.render.culling;
-
-import net.minecraft.client.render.camera.ICamera;
-import net.minecraft.client.render.culling.FrustumData;
-import net.minecraft.client.render.culling.Frustum;
-import net.minecraft.core.util.phys.AABB;
-
-public class CameraFrustum
-{
-    private final ICamera camera;
-    private final FrustumData frustum;
-
-    public CameraFrustum(ICamera camera)
-    {
-        this.camera = camera;
-        this.frustum = Frustum.getFrustum();
-    }
-
-    public boolean cubeInFrustum(double x0, double y0, double z0, double x1, double y1, double z1, float partialTick)
-    {
-        return this.frustum.cubeInFrustum(x0 - camera.getX(partialTick),
-                                                  y0 - camera.getY(partialTick),
-                                                  z0 - camera.getZ(partialTick),
-                                                  x1 - camera.getX(partialTick),
-                                                  y1 - camera.getY(partialTick),
-                                                  z1 - camera.getZ(partialTick)
-        );
-    }
-
-    public boolean isVisible(AABB aabb, float partialTick)
-    {
-        return cubeInFrustum(aabb.minX, aabb.minY, aabb.minZ, aabb.maxX, aabb.maxY, aabb.maxZ, partialTick);
-    }
-}
+package net.minecraft.client.render.culling;
+
+import net.minecraft.client.render.camera.ICamera;
+import net.minecraft.client.render.culling.FrustumData;
+import net.minecraft.client.render.culling.Frustum;
+import net.minecraft.core.util.phys.AABB;
+
+public class CameraFrustum
+{
+    private final ICamera camera;
+    private final FrustumData frustum;
+
+    public CameraFrustum(ICamera camera)
+    {
+        this.camera = camera;
+        this.frustum = Frustum.getFrustum();
+    }
+
+    public boolean cubeInFrustum(double x0, double y0, double z0, double x1, double y1, double z1, float partialTick)
+    {
+        return this.frustum.cubeInFrustum(x0 - camera.getX(partialTick),
+                                                  y0 - camera.getY(partialTick),
+                                                  z0 - camera.getZ(partialTick),
+                                                  x1 - camera.getX(partialTick),
+                                                  y1 - camera.getY(partialTick),
+                                                  z1 - camera.getZ(partialTick)
+        );
+    }
+
+    public boolean isVisible(AABB aabb, float partialTick)
+    {
+        return cubeInFrustum(aabb.minX, aabb.minY, aabb.minZ, aabb.maxX, aabb.maxY, aabb.maxZ, partialTick);
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/culling/Frustum.java b/game/client/src/main/java/net/minecraft/client/render/culling/Frustum.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/culling/Frustum.java
rename to game/client/src/main/java/net/minecraft/client/render/culling/Frustum.java
diff --git a/src/main/java/net/minecraft/client/render/culling/FrustumCuller.java b/game/client/src/main/java/net/minecraft/client/render/culling/FrustumCuller.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/culling/FrustumCuller.java
rename to game/client/src/main/java/net/minecraft/client/render/culling/FrustumCuller.java
diff --git a/src/main/java/net/minecraft/client/render/culling/FrustumData.java b/game/client/src/main/java/net/minecraft/client/render/culling/FrustumData.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/culling/FrustumData.java
rename to game/client/src/main/java/net/minecraft/client/render/culling/FrustumData.java
diff --git a/src/main/java/net/minecraft/client/render/culling/IsometricCameraFrustum.java b/game/client/src/main/java/net/minecraft/client/render/culling/IsometricCameraFrustum.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/culling/IsometricCameraFrustum.java
rename to game/client/src/main/java/net/minecraft/client/render/culling/IsometricCameraFrustum.java
diff --git a/src/main/java/net/minecraft/client/render/customatlas/Atlas.java b/game/client/src/main/java/net/minecraft/client/render/customatlas/Atlas.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/customatlas/Atlas.java
rename to game/client/src/main/java/net/minecraft/client/render/customatlas/Atlas.java
diff --git a/src/main/java/net/minecraft/client/render/customatlas/AtlasTile.java b/game/client/src/main/java/net/minecraft/client/render/customatlas/AtlasTile.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/customatlas/AtlasTile.java
rename to game/client/src/main/java/net/minecraft/client/render/customatlas/AtlasTile.java
diff --git a/src/main/java/net/minecraft/client/render/customatlas/CustomAtlasHandler.java b/game/client/src/main/java/net/minecraft/client/render/customatlas/CustomAtlasHandler.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/customatlas/CustomAtlasHandler.java
rename to game/client/src/main/java/net/minecraft/client/render/customatlas/CustomAtlasHandler.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexture.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexture.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexture.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexture.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureAbstractClock.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureAbstractClock.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureAbstractClock.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureAbstractClock.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCalendar.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCalendar.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCalendar.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCalendar.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureClock.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureClock.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureClock.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureClock.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCompass.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCompass.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCompass.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCompass.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCustom.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCustom.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCustom.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureCustom.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureFire.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureFire.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureFire.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureFire.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureFireflyJar.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureFireflyJar.java
similarity index 97%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureFireflyJar.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureFireflyJar.java
index 6368a69bd..56d171632 100644
--- a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureFireflyJar.java
+++ b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureFireflyJar.java
@@ -1,101 +1,101 @@
-package net.minecraft.client.render.dynamictexture;
-
-import net.minecraft.client.render.texture.stitcher.IconCoordinate;
-import net.minecraft.client.render.texturepack.TexturePackException;
-import net.minecraft.core.util.helper.MathHelper;
-
-import java.awt.image.BufferedImage;
-
-public class DynamicTextureFireflyJar extends DynamicTexture {
-    private final byte[] originalData;
-    private long ticks = 0;
-
-	public DynamicTextureFireflyJar(IconCoordinate texture) {
-        super(texture);
-		BufferedImage image = texture.getImageStorage();
-		if(image == null) {
-			throw new TexturePackException("Could not load image!");
-		}
-        texture.setDimension(image.getWidth(), image.getHeight());
-        this.originalData = new byte[texture.getArea() * 4];
-
-		for(int x = 0; x < texture.width; x++) {
-			for(int y = 0; y < texture.height; y++) {
-				putPixel(originalData, y * texture.width + x, image.getRGB(x, y));
-			}
-		}
-	}
-
-	@Override
-	public void postInit() {
-        initTexture();
-	}
-
-    private float getInternalBrightness()
-    {
-        float b = ((float) Math.sin(ticks / 10f) + 1.0f) / 2f;
-        return MathHelper.clamp(b, 0f, 1f);
-    }
-
-    final float minR = 96 / 255f;
-    final float minG = 54 / 255f;
-    final float minB = 0 / 255f;
-
-    @Override
-    public void update()
-    {
-        ticks++;
-        float br = getInternalBrightness();
-
-        for (int x = 0; x < targetTexture.width; x++){
-            for (int y = 0; y < targetTexture.height; y++)
-            {
-                int i = y * targetTexture.width + x;
-                int a = this.originalData[i * 4 + 3] & 0xFF;
-                int r = this.originalData[i * 4 + 0] & 0xFF;
-                int g = this.originalData[i * 4 + 1] & 0xFF;
-                int b = this.originalData[i * 4 + 2] & 0xFF;
-
-                if (x >= targetTexture.width * (6 / 16f) && x < targetTexture.width * (10 / 16f) && y >= targetTexture.height * (6 / 16f) && y < targetTexture.height)
-                {
-
-                    float rf = r / 255f;
-                    float gf = g / 255f;
-                    float bf = b / 255f;
-
-                    float maxR = MathHelper.clamp(rf + 0.1f, 0.0f, 1.0f);
-                    float maxG = MathHelper.clamp(gf + 0.1f, 0.0f, 1.0f);
-                    float maxB = MathHelper.clamp(bf + 0.1f, 0.0f, 1.0f);
-
-                    float tMinR = MathHelper.lerp(minR, rf, 0.85f);
-                    float tMinG = MathHelper.lerp(minG, gf, 0.85f);
-                    float tMinB = MathHelper.lerp(minB, bf, 0.85f);
-
-                    if (br < 0.5f)
-                    {
-                        rf = MathHelper.lerp(tMinR, rf, br * 2);
-                        gf = MathHelper.lerp(tMinG, gf, br * 2);
-                        bf = MathHelper.lerp(tMinB, bf, br * 2);
-                    }
-                    else
-                    {
-                        rf = MathHelper.lerp(rf, maxR, (br - 0.5f) * 2);
-                        gf = MathHelper.lerp(gf, maxG, (br - 0.5f) * 2);
-                        bf = MathHelper.lerp(bf, maxB, (br - 0.5f) * 2);
-                    }
-
-                    r = (int)(rf * 255f);
-                    g = (int)(gf * 255f);
-                    b = (int)(bf * 255f);
-
-                }
-
-                this.imageData[i * 4 + 0] = (byte) r;
-                this.imageData[i * 4 + 1] = (byte) g;
-                this.imageData[i * 4 + 2] = (byte) b;
-                this.imageData[i * 4 + 3] = (byte) a;
-            }
-        }
-
-    }
-}
+package net.minecraft.client.render.dynamictexture;
+
+import net.minecraft.client.render.texture.stitcher.IconCoordinate;
+import net.minecraft.client.render.texturepack.TexturePackException;
+import net.minecraft.core.util.helper.MathHelper;
+
+import java.awt.image.BufferedImage;
+
+public class DynamicTextureFireflyJar extends DynamicTexture {
+    private final byte[] originalData;
+    private long ticks = 0;
+
+	public DynamicTextureFireflyJar(IconCoordinate texture) {
+        super(texture);
+		BufferedImage image = texture.getImageStorage();
+		if(image == null) {
+			throw new TexturePackException("Could not load image!");
+		}
+        texture.setDimension(image.getWidth(), image.getHeight());
+        this.originalData = new byte[texture.getArea() * 4];
+
+		for(int x = 0; x < texture.width; x++) {
+			for(int y = 0; y < texture.height; y++) {
+				putPixel(originalData, y * texture.width + x, image.getRGB(x, y));
+			}
+		}
+	}
+
+	@Override
+	public void postInit() {
+        initTexture();
+	}
+
+    private float getInternalBrightness()
+    {
+        float b = ((float) Math.sin(ticks / 10f) + 1.0f) / 2f;
+        return MathHelper.clamp(b, 0f, 1f);
+    }
+
+    final float minR = 96 / 255f;
+    final float minG = 54 / 255f;
+    final float minB = 0 / 255f;
+
+    @Override
+    public void update()
+    {
+        ticks++;
+        float br = getInternalBrightness();
+
+        for (int x = 0; x < targetTexture.width; x++){
+            for (int y = 0; y < targetTexture.height; y++)
+            {
+                int i = y * targetTexture.width + x;
+                int a = this.originalData[i * 4 + 3] & 0xFF;
+                int r = this.originalData[i * 4 + 0] & 0xFF;
+                int g = this.originalData[i * 4 + 1] & 0xFF;
+                int b = this.originalData[i * 4 + 2] & 0xFF;
+
+                if (x >= targetTexture.width * (6 / 16f) && x < targetTexture.width * (10 / 16f) && y >= targetTexture.height * (6 / 16f) && y < targetTexture.height)
+                {
+
+                    float rf = r / 255f;
+                    float gf = g / 255f;
+                    float bf = b / 255f;
+
+                    float maxR = MathHelper.clamp(rf + 0.1f, 0.0f, 1.0f);
+                    float maxG = MathHelper.clamp(gf + 0.1f, 0.0f, 1.0f);
+                    float maxB = MathHelper.clamp(bf + 0.1f, 0.0f, 1.0f);
+
+                    float tMinR = MathHelper.lerp(minR, rf, 0.85f);
+                    float tMinG = MathHelper.lerp(minG, gf, 0.85f);
+                    float tMinB = MathHelper.lerp(minB, bf, 0.85f);
+
+                    if (br < 0.5f)
+                    {
+                        rf = MathHelper.lerp(tMinR, rf, br * 2);
+                        gf = MathHelper.lerp(tMinG, gf, br * 2);
+                        bf = MathHelper.lerp(tMinB, bf, br * 2);
+                    }
+                    else
+                    {
+                        rf = MathHelper.lerp(rf, maxR, (br - 0.5f) * 2);
+                        gf = MathHelper.lerp(gf, maxG, (br - 0.5f) * 2);
+                        bf = MathHelper.lerp(bf, maxB, (br - 0.5f) * 2);
+                    }
+
+                    r = (int)(rf * 255f);
+                    g = (int)(gf * 255f);
+                    b = (int)(bf * 255f);
+
+                }
+
+                this.imageData[i * 4 + 0] = (byte) r;
+                this.imageData[i * 4 + 1] = (byte) g;
+                this.imageData[i * 4 + 2] = (byte) b;
+                this.imageData[i * 4 + 3] = (byte) a;
+            }
+        }
+
+    }
+}
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureLavaFlowing.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureLavaFlowing.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureLavaFlowing.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureLavaFlowing.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureLavaStill.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureLavaStill.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureLavaStill.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureLavaStill.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexturePortal.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexturePortal.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexturePortal.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTexturePortal.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureRotating.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureRotating.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureRotating.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureRotating.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureTrommel.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureTrommel.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureTrommel.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureTrommel.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterFlow.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterFlow.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterFlow.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterFlow.java
diff --git a/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterStill.java b/game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterStill.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterStill.java
rename to game/client/src/main/java/net/minecraft/client/render/dynamictexture/DynamicTextureWaterStill.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRenderer.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRenderer.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/entity/EntityRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRenderer.java
index fb7eccdde..64d21cf63 100644
--- a/src/main/java/net/minecraft/client/render/entity/EntityRenderer.java
+++ b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRenderer.java
@@ -1,5 +1,6 @@
 package net.minecraft.client.render.entity;
 
+import net.minecraft.core.block.Blocks;
 import org.lwjgl.opengl.GL11;
 
 import net.minecraft.client.render.EntityRenderDispatcher;
@@ -128,7 +129,7 @@ public abstract class EntityRenderer<T extends Entity>
                     int blockId = world.getBlockId(blockX, blockY - 1, blockZ);
                     if(blockId > 0 && world.getBlockLightValue(blockX, blockY, blockZ) > 3)
                     {
-                        renderShadowOnBlock(tessellator, entity, Block.blocksList[blockId], posX, posY + (double)entity.getShadowHeightOffs(), posZ, blockX, blockY, blockZ, opacity, shadowSize, dxLerp, dyLerp + (double)entity.getShadowHeightOffs(), dzLerp);
+                        renderShadowOnBlock(tessellator, entity, Blocks.blocksList[blockId], posX, posY + (double)entity.getShadowHeightOffs(), posZ, blockX, blockY, blockZ, opacity, shadowSize, dxLerp, dyLerp + (double)entity.getShadowHeightOffs(), dzLerp);
                     }
                 }
 
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererArrow.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererArrow.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererArrow.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererArrow.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererBoat.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererBoat.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererBoat.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererBoat.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererCannonball.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererCannonball.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererCannonball.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererCannonball.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererDefault.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererDefault.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererDefault.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererDefault.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererFallingBlock.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererFallingBlock.java
similarity index 93%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererFallingBlock.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererFallingBlock.java
index b798a9b5b..7722ad905 100644
--- a/src/main/java/net/minecraft/client/render/entity/EntityRendererFallingBlock.java
+++ b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererFallingBlock.java
@@ -9,6 +9,7 @@ import net.minecraft.client.render.block.model.BlockModelDispatcher;
 import net.minecraft.client.render.blockentity.TileEntityRenderer;
 import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessellator.Tessellator;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.entity.EntityFallingBlock;
 import net.minecraft.core.world.BlocksContainer;
@@ -60,7 +61,7 @@ public class EntityRendererFallingBlock extends EntityRenderer<EntityFallingBloc
 
         container.setLightReferenceEntity(fallingBlock);
         container.setBlock(blockX, blockY, blockZ, fallingBlock.carriedBlock.blockId, fallingBlock.carriedBlock.metadata, fallingBlock.carriedBlock.entity);
-        BlockModelDispatcher.getInstance().getDispatch(Block.getBlock(fallingBlock.carriedBlock.blockId)).renderNoCulling(Tessellator.instance, blockX, blockY, blockZ);
+        BlockModelDispatcher.getInstance().getDispatch(Blocks.getBlock(fallingBlock.carriedBlock.blockId)).renderNoCulling(Tessellator.instance, blockX, blockY, blockZ);
         container.setLightReferenceEntity(null);
         container.clear();
 
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererFireball.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererFireball.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererFireball.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererFireball.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererFishingBobber.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererFishingBobber.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererFishingBobber.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererFishingBobber.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererItem.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererItem.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererItem.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererItem.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererLightningBolt.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererLightningBolt.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererLightningBolt.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererLightningBolt.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererMinecart.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererMinecart.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererMinecart.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererMinecart.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererPainting.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererPainting.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererPainting.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererPainting.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererSprite.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererSprite.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererSprite.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererSprite.java
diff --git a/src/main/java/net/minecraft/client/render/entity/EntityRendererTNT.java b/game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererTNT.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/EntityRendererTNT.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/EntityRendererTNT.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRenderer.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRenderer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRenderer.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererBiped.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererBiped.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererBiped.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererBiped.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererChicken.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererChicken.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererChicken.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererChicken.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererCow.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererCow.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererCow.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererCow.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererCreeper.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererCreeper.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererCreeper.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererCreeper.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererFireflyCluster.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererFireflyCluster.java
similarity index 95%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererFireflyCluster.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererFireflyCluster.java
index 5b07ba9fd..c0b28b691 100644
--- a/src/main/java/net/minecraft/client/render/entity/MobRendererFireflyCluster.java
+++ b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererFireflyCluster.java
@@ -43,16 +43,15 @@ public class MobRendererFireflyCluster extends EntityRenderer<MobFireflyCluster>
 
 		GL11.glPushMatrix();
 		GL11.glTranslatef(0, 0.75f, 0);
-		GL11.glDisable(GL11.GL_CULL_FACE);
 		GL11.glEnable(GL11.GL_TEXTURE_2D);
+		GL11.glEnable(GL11.GL_BLEND);
 		Lighting.disable();
 		TextureRegistry.particleAtlas.bind();
+		Tessellator t = Tessellator.instance;
+		t.startDrawingQuads();
 		for (int i = 0; i < fireflies.size(); i++) {
 			ParticleFirefly firefly = fireflies.get(i);
-			Tessellator t = Tessellator.instance;
-			t.startDrawingQuads();
 			firefly.renderParticleInGui(t, partialTick);
-			t.draw();
 			for (int j = 0; j < storedTicks; j++) {
 				firefly.tickGui();
 				lastTick = currentTick;
@@ -62,6 +61,7 @@ public class MobRendererFireflyCluster extends EntityRenderer<MobFireflyCluster>
 				i--;
 			}
 		}
+		t.draw();
 		GL11.glEnable(GL11.GL_CULL_FACE);
 		GL11.glPopMatrix();
 
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererGhast.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererGhast.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererGhast.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererGhast.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererGiant.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererGiant.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererGiant.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererGiant.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererHuman.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererHuman.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererHuman.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererHuman.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererPig.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererPig.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererPig.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererPig.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererPlayer.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererPlayer.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererPlayer.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererPlayer.java
index 7ceb16e4e..19ec797d4 100644
--- a/src/main/java/net/minecraft/client/render/entity/MobRendererPlayer.java
+++ b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererPlayer.java
@@ -18,6 +18,7 @@ import net.minecraft.client.render.model.ModelPlayer;
 import net.minecraft.client.render.model.ModelPlayerSlim;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.client.render.texture.stitcher.TextureRegistry;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.block.motion.CarriedBlock;
 import net.minecraft.core.entity.player.Player;
@@ -60,7 +61,7 @@ public class MobRendererPlayer extends MobRenderer<Player>
         {
             GL11.glPushMatrix();
             modelBipedMain.head.translateTo(0.0625F);
-            if(itemstack.itemID < Block.blocksList.length && BlockModelDispatcher.getInstance().getDispatch(Block.getBlock(itemstack.itemID)).shouldItemRender3d())
+            if(itemstack.itemID < Blocks.blocksList.length && BlockModelDispatcher.getInstance().getDispatch(Blocks.getBlock(itemstack.itemID)).shouldItemRender3d())
             {
                 float scale = 0.625F;
                 GL11.glTranslatef(0.0F, -0.25F, 0.0F);
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererScorpion.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererScorpion.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererScorpion.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererScorpion.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererSheep.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSheep.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererSheep.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSheep.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererSlime.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSlime.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererSlime.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSlime.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererSpider.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSpider.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererSpider.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSpider.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererSquid.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSquid.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererSquid.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererSquid.java
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererWolf.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererWolf.java
similarity index 94%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererWolf.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererWolf.java
index 8f61b37e7..676d11172 100644
--- a/src/main/java/net/minecraft/client/render/entity/MobRendererWolf.java
+++ b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererWolf.java
@@ -5,6 +5,7 @@ import net.minecraft.client.render.item.model.ItemModelDispatcher;
 import net.minecraft.client.render.model.ModelWolf;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.entity.animal.MobWolf;
 
 import net.minecraft.core.item.ItemStack;
@@ -60,7 +61,7 @@ public class MobRendererWolf extends MobRenderer<MobWolf>
             modelWolfMain.wolfHeadMain.translateTo(0.0625F);
             GL11.glTranslatef(-0.0625F, 0.4375F, 0.0625F);
             float scale;
-            if (itemstack.itemID > 0 && itemstack.itemID < Block.blocksList.length && BlockModelDispatcher.getInstance().getDispatch(Block.blocksList[itemstack.itemID]).shouldItemRender3d()) {
+            if (itemstack.itemID > 0 && itemstack.itemID < Blocks.blocksList.length && BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[itemstack.itemID]).shouldItemRender3d()) {
                 scale = 0.35F;
                 GL11.glTranslatef(0.075F, -0.3F, -0.35F);
                 scale *= 0.75F;
diff --git a/src/main/java/net/minecraft/client/render/entity/MobRendererZombieArmored.java b/game/client/src/main/java/net/minecraft/client/render/entity/MobRendererZombieArmored.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/entity/MobRendererZombieArmored.java
rename to game/client/src/main/java/net/minecraft/client/render/entity/MobRendererZombieArmored.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModel.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModel.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModel.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModel.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelBlock.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelBlock.java
similarity index 91%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelBlock.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelBlock.java
index dec48e322..ce6ff451d 100644
--- a/src/main/java/net/minecraft/client/render/item/model/ItemModelBlock.java
+++ b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelBlock.java
@@ -13,6 +13,7 @@ import net.minecraft.client.render.texture.stitcher.TextureRegistry;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.core.Global;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.item.ItemStack;
@@ -85,12 +86,12 @@ public class ItemModelBlock extends ItemModelStandard {
     }
     @Override
     public void renderItem(Tessellator tessellator, ItemRenderer renderer, ItemStack itemstack, @Nullable Entity entity, float brightness, boolean handheldTransform) {
-        if(BlockModelDispatcher.getInstance().getDispatch(Block.blocksList[itemstack.itemID]).shouldItemRender3d())
+        if(BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[itemstack.itemID]).shouldItemRender3d())
         {
             GL11.glEnable(GL_BLEND);
             GL11.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
             TextureRegistry.blockAtlas.bind();
-            BlockModelDispatcher.getInstance().getDispatch(Block.blocksList[itemstack.itemID]).renderBlockOnInventory(tessellator, itemstack.getMetadata(), brightness, null);
+            BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[itemstack.itemID]).renderBlockOnInventory(tessellator, itemstack.getMetadata(), brightness, null);
             GL11.glDisable(GL_BLEND);
         } else {
             super.renderItem(tessellator, renderer, itemstack, entity, brightness, handheldTransform);
@@ -98,7 +99,7 @@ public class ItemModelBlock extends ItemModelStandard {
     }
     @Override
     public void heldTransformThirdPerson(ItemRenderer renderer, Entity entity, ItemStack itemStack) {
-        if(itemStack.itemID < Block.blocksList.length && BlockModelDispatcher.getInstance().getDispatch(Block.blocksList[itemStack.itemID]).shouldItemRender3d()) {
+        if(itemStack.itemID < Blocks.blocksList.length && BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[itemStack.itemID]).shouldItemRender3d()) {
             final float scale = 0.5F * 0.75F;
             GL11.glTranslatef(0.0F, 0.1875F, -0.3125F);
             GL11.glRotatef(20F, 1.0F, 0.0F, 0.0F);
@@ -114,7 +115,7 @@ public class ItemModelBlock extends ItemModelStandard {
         GL11.glEnable(GL_BLEND);
         GL11.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
         GL11.glEnable(GL_CULL_FACE);
-        if (BlockModelDispatcher.getInstance().getDispatch(Block.blocksList[itemStack.itemID]).shouldItemRender3d()) {
+        if (BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[itemStack.itemID]).shouldItemRender3d()) {
             GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
             TextureRegistry.blockAtlas.bind();
             GL11.glPushMatrix();
@@ -135,7 +136,7 @@ public class ItemModelBlock extends ItemModelStandard {
             }
             GL11.glRotatef(-90F, 0.0F, 1.0F, 0.0F);
             BlockModel.renderBlocks.useInventoryTint = useColor;
-            BlockModelDispatcher.getInstance().getDispatch(Block.blocksList[itemStack.itemID]).renderBlockOnInventory(tessellator, itemStack.getMetadata(), brightness, alpha, null);
+            BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[itemStack.itemID]).renderBlockOnInventory(tessellator, itemStack.getMetadata(), brightness, alpha, null);
             BlockModel.renderBlocks.useInventoryTint = true;
             GL11.glPopMatrix();
         } else {
@@ -147,7 +148,7 @@ public class ItemModelBlock extends ItemModelStandard {
     
     @Override
     public void renderAsItemEntity(Tessellator tessellator, Entity entity, Random random, ItemStack itemstack, int renderCount, float yaw, float brightness, float partialTick) {
-        if (Block.blocksList[itemstack.itemID] != null && BlockModelDispatcher.getInstance().getDispatch(Block.blocksList[itemstack.itemID]).shouldItemRender3d()) {
+        if (Blocks.blocksList[itemstack.itemID] != null && BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[itemstack.itemID]).shouldItemRender3d()) {
             GL11.glRotatef(yaw, 0.0F, 1.0F, 0.0F);
             TextureRegistry.blockAtlas.bind();
             final float itemSize = blockModel.getItemRenderScale();
@@ -178,10 +179,10 @@ public class ItemModelBlock extends ItemModelStandard {
     @Override
     public void renderItemInWorld(Tessellator tessellator, Entity entity, ItemStack itemStack, float brightness, float alpha, boolean worldTransform) {
         if (itemStack == null) return;
-        GL11.glEnable(GL_BLEND);
         GL11.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
         GL11.glEnable(GL_CULL_FACE);
-        if (BlockModelDispatcher.getInstance().getDispatch(Block.blocksList[itemStack.itemID]).shouldItemRender3d()) {
+        GL11.glEnable(GL_BLEND);
+        if (BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[itemStack.itemID]).shouldItemRender3d()) {
             GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
             TextureRegistry.blockAtlas.bind();
             if (useColor) {
@@ -195,12 +196,12 @@ public class ItemModelBlock extends ItemModelStandard {
             }
             GL11.glRotatef(90F, 0.0F, 1.0F, 0.0F);
             BlockModel.renderBlocks.useInventoryTint = useColor;
-            BlockModelDispatcher.getInstance().getDispatch(Block.blocksList[itemStack.itemID]).renderBlockOnInventory(tessellator, itemStack.getMetadata(), brightness, alpha, null);
+            BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[itemStack.itemID]).renderBlockOnInventory(tessellator, itemStack.getMetadata(), brightness, alpha, null);
             BlockModel.renderBlocks.useInventoryTint = true;
         } else {
             super.renderItemInWorld(tessellator, entity, itemStack, brightness, alpha, worldTransform);
         }
-        GL11.glEnable(GL_CULL_FACE);
+        GL11.glDisable(GL_CULL_FACE);
         GL11.glDisable(GL_BLEND);
     }
     @Override
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelBow.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelBow.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelBow.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelBow.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelCoal.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelCoal.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelCoal.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelCoal.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
index 854d40132..815954ff4 100644
--- a/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
+++ b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelDispatcher.java
@@ -230,9 +230,9 @@ public class ItemModelDispatcher extends Dispatcher<Item, ItemModel> {
         addDispatch(new ItemModelBlock((ItemBlock) Blocks.PORTAL_PARADISE.asItem()).setFullBright());
         addDispatch(new ItemModelBlock((ItemBlock) Blocks.PORTAL_NETHER.asItem()).setFullBright());
 
-        for (int i = 0; i < Block.blocksList.length; i++) {
-            if (Block.blocksList[i] == null) continue;
-            Item item = Block.blocksList[i].asItem();
+        for (int i = 0; i < Blocks.blocksList.length; i++) {
+            if (Blocks.blocksList[i] == null) continue;
+            Item item = Blocks.blocksList[i].asItem();
             if (dispatches.containsKey(item)) continue;
             if (!(item instanceof ItemBlock)) continue;
             addDispatch(new ItemModelBlock((ItemBlock) item));
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelDoorPainted.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelDoorPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelDoorPainted.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelDoorPainted.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelDye.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelDye.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelDye.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelDye.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelFishingRod.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelFishingRod.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelFishingRod.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelFishingRod.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelLabel.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelLabel.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelLabel.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelLabel.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelMap.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelNone.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelNone.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelNone.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelNone.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelPaintbrush.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelPaintbrush.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelPaintbrush.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelPaintbrush.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelQuiver.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelQuiver.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelQuiver.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelQuiver.java
diff --git a/src/main/java/net/minecraft/client/render/item/model/ItemModelStandard.java b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelStandard.java
similarity index 98%
rename from src/main/java/net/minecraft/client/render/item/model/ItemModelStandard.java
rename to game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelStandard.java
index 2493fe0d4..acda003b9 100644
--- a/src/main/java/net/minecraft/client/render/item/model/ItemModelStandard.java
+++ b/game/client/src/main/java/net/minecraft/client/render/item/model/ItemModelStandard.java
@@ -136,11 +136,11 @@ public class ItemModelStandard extends ItemModel{
     public void renderItemIntoGui(Tessellator tessellator, Font font, TextureManager textureManager, ItemStack itemStack, int x, int y, float brightness, float alpha) {
         if (itemStack == null) return;
         Minecraft mc = Minecraft.getMinecraft(this);
-        glEnable(GL_BLEND);
-        glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
-        glEnable(GL_CULL_FACE);
-        IconCoordinate textureIndex = getIcon(mc.thePlayer, itemStack);
+        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
         GL11.glDisable(GL_LIGHTING);
+        GL11.glEnable(GL_BLEND);
+        GL11.glEnable(GL_CULL_FACE);
+        IconCoordinate textureIndex = getIcon(mc.thePlayer, itemStack);
         textureIndex.parentAtlas.bind();
         if (useColor) {
             final int color = getColor(itemStack);
@@ -152,9 +152,9 @@ public class ItemModelStandard extends ItemModel{
             GL11.glColor4f(brightness, brightness, brightness, alpha);
         }
         renderTexturedQuad(tessellator, x, y, textureIndex);
-        glEnable(GL_LIGHTING);
-        glEnable(GL_CULL_FACE);
-        glDisable(GL11.GL_BLEND);
+        GL11.glEnable(GL_LIGHTING);
+        GL11.glDisable(GL_CULL_FACE);
+        GL11.glDisable(GL11.GL_BLEND);
     }
 
     @Override
@@ -179,7 +179,7 @@ public class ItemModelStandard extends ItemModel{
             GL11.glDisable(GL_LIGHTING);
             GL11.glDisable(GL_DEPTH_TEST);
             GL11.glDisable(GL_TEXTURE_2D);
-            final int colorFG = Color.HSBtoRGB(progress/255F/3F, 1f, 1f);
+            final int colorFG = Color.HSBtoRGB(progress / 255F / 3F, 1f, 1f);
             final int colorBG = (0xFF - progress) / 4 << 16 | 0x3f00;
             renderColoredQuad(tessellator, x + 2, y + 13, 13, 2, 0, a);
             renderColoredQuad(tessellator, x + 2, y + 13, 12, 1, colorBG, a);
diff --git a/src/main/java/net/minecraft/client/render/model/Cube.java b/game/client/src/main/java/net/minecraft/client/render/model/Cube.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/Cube.java
rename to game/client/src/main/java/net/minecraft/client/render/model/Cube.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelBase.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelBase.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelBase.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelBase.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelBiped.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelBiped.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelBiped.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelBiped.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelBoat.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelBoat.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelBoat.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelBoat.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelCannonball.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelCannonball.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelCannonball.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelCannonball.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelChicken.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelChicken.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelChicken.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelChicken.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelCow.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelCow.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelCow.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelCow.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelCreeper.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelCreeper.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelCreeper.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelCreeper.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelFlag.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelFlag.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelFlag.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelFlag.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelFlagBase.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelFlagBase.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelFlagBase.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelFlagBase.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelGhast.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelGhast.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelGhast.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelGhast.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelMinecart.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelMinecart.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelMinecart.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelMinecart.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelPig.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelPig.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelPig.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelPig.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelPlayer.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelPlayer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelPlayer.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelPlayer.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelPlayerSlim.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelPlayerSlim.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelPlayerSlim.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelPlayerSlim.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelQuadruped.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelQuadruped.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelQuadruped.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelQuadruped.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelScorpion.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelScorpion.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelScorpion.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelScorpion.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelSheep.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelSheep.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelSheep.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelSheep.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelSheepOverlay.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelSheepOverlay.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelSheepOverlay.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelSheepOverlay.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelSheepWool.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelSheepWool.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelSheepWool.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelSheepWool.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelSign.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelSign.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelSign.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelSign.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelSkeleton.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelSkeleton.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelSkeleton.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelSkeleton.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelSlime.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelSlime.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelSlime.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelSlime.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelSpider.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelSpider.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelSpider.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelSpider.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelSquid.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelSquid.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelSquid.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelSquid.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelWolf.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelWolf.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelWolf.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelWolf.java
diff --git a/src/main/java/net/minecraft/client/render/model/ModelZombie.java b/game/client/src/main/java/net/minecraft/client/render/model/ModelZombie.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/model/ModelZombie.java
rename to game/client/src/main/java/net/minecraft/client/render/model/ModelZombie.java
diff --git a/src/main/java/net/minecraft/client/render/shader/PhotoModeRenderer.java b/game/client/src/main/java/net/minecraft/client/render/shader/PhotoModeRenderer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/shader/PhotoModeRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/shader/PhotoModeRenderer.java
diff --git a/src/main/java/net/minecraft/client/render/shader/Shader.java b/game/client/src/main/java/net/minecraft/client/render/shader/Shader.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/shader/Shader.java
rename to game/client/src/main/java/net/minecraft/client/render/shader/Shader.java
diff --git a/src/main/java/net/minecraft/client/render/shader/ShaderProvider.java b/game/client/src/main/java/net/minecraft/client/render/shader/ShaderProvider.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/shader/ShaderProvider.java
rename to game/client/src/main/java/net/minecraft/client/render/shader/ShaderProvider.java
diff --git a/src/main/java/net/minecraft/client/render/shader/ShaderProviderExternal.java b/game/client/src/main/java/net/minecraft/client/render/shader/ShaderProviderExternal.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/shader/ShaderProviderExternal.java
rename to game/client/src/main/java/net/minecraft/client/render/shader/ShaderProviderExternal.java
diff --git a/src/main/java/net/minecraft/client/render/shader/ShaderProviderInternal.java b/game/client/src/main/java/net/minecraft/client/render/shader/ShaderProviderInternal.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/shader/ShaderProviderInternal.java
rename to game/client/src/main/java/net/minecraft/client/render/shader/ShaderProviderInternal.java
diff --git a/src/main/java/net/minecraft/client/render/shader/Shaders.java b/game/client/src/main/java/net/minecraft/client/render/shader/Shaders.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/shader/Shaders.java
rename to game/client/src/main/java/net/minecraft/client/render/shader/Shaders.java
diff --git a/src/main/java/net/minecraft/client/render/shader/ShadersRenderer.java b/game/client/src/main/java/net/minecraft/client/render/shader/ShadersRenderer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/shader/ShadersRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/shader/ShadersRenderer.java
diff --git a/src/main/java/net/minecraft/client/render/terrain/ChunkRenderer.java b/game/client/src/main/java/net/minecraft/client/render/terrain/ChunkRenderer.java
similarity index 97%
rename from src/main/java/net/minecraft/client/render/terrain/ChunkRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/ChunkRenderer.java
index a964f5ffb..ef4d0cb97 100644
--- a/src/main/java/net/minecraft/client/render/terrain/ChunkRenderer.java
+++ b/game/client/src/main/java/net/minecraft/client/render/terrain/ChunkRenderer.java
@@ -100,9 +100,8 @@ public abstract class ChunkRenderer
     
     public abstract void rebuild();
     
-    public boolean renderBlock(Tessellator tessellator, RenderBlocks renderBlocks, Block block, int x, int y, int z) {
+    public boolean renderBlock(Tessellator tessellator, RenderBlocks renderBlocks, BlockModel<?> model, int x, int y, int z) {
     	boolean rendered = false;
-		final BlockModel<?> model = BlockModelDispatcher.getInstance().getDispatch(block);
 		rendered |= model.render(tessellator, x, y, z);
 		if(model.hasOverbright()) {
 			renderBlocks.overbright = true;
diff --git a/src/main/java/net/minecraft/client/render/terrain/ChunkRendererLegacy.java b/game/client/src/main/java/net/minecraft/client/render/terrain/ChunkRendererLegacy.java
similarity index 93%
rename from src/main/java/net/minecraft/client/render/terrain/ChunkRendererLegacy.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/ChunkRendererLegacy.java
index 355de9d45..2bb384149 100644
--- a/src/main/java/net/minecraft/client/render/terrain/ChunkRendererLegacy.java
+++ b/game/client/src/main/java/net/minecraft/client/render/terrain/ChunkRendererLegacy.java
@@ -4,6 +4,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import net.minecraft.client.render.block.model.BlockModelDispatcher;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import org.lwjgl.opengl.GL11;
 
@@ -80,14 +82,14 @@ public class ChunkRendererLegacy extends ChunkRenderer {
                             	tessellator.setLightmapCoord(LightmapHelper.getLightmapCoord(15, 15));
                             }
                         }
-                        if(renderPass == 0 && Block.isEntityTile[blockId]) {
+                        if(renderPass == 0 && Blocks.isEntityTile[blockId]) {
                             final TileEntity tileentity = chunkcache.getBlockEntity(x, y, z);
                             if(BlockEntityRenderDispatcher.instance.hasRenderer(tileentity)) {
                                 renderableBlockEntities.add(tileentity);
                             }
                         }
-                        final Block block = Block.blocksList[blockId];
-                        final int blockRenderPass = block.getRenderLayer();
+                        final BlockModel<?> model = BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[blockId]);
+                        final int blockRenderPass = model.renderLayer();
                         if(blockRenderPass != renderPass) {
                             needsMoreRenderPasses = true;
                         }
@@ -97,7 +99,7 @@ public class ChunkRendererLegacy extends ChunkRenderer {
                         		tessellator.setLightmapCoord(LightmapHelper.getLightmapCoord(15, 0));
                         	}
 
-    						hasRenderedBlock |= renderBlock(tessellator, renderblocks, block, x, y, z);
+    						hasRenderedBlock |= renderBlock(tessellator, renderblocks, model, x, y, z);
                         }
                     }
                 }
diff --git a/src/main/java/net/minecraft/client/render/terrain/ChunkRendererMultiDraw.java b/game/client/src/main/java/net/minecraft/client/render/terrain/ChunkRendererMultiDraw.java
similarity index 93%
rename from src/main/java/net/minecraft/client/render/terrain/ChunkRendererMultiDraw.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/ChunkRendererMultiDraw.java
index a096785f2..50ed053cb 100644
--- a/src/main/java/net/minecraft/client/render/terrain/ChunkRendererMultiDraw.java
+++ b/game/client/src/main/java/net/minecraft/client/render/terrain/ChunkRendererMultiDraw.java
@@ -8,11 +8,12 @@ import net.minecraft.client.render.BlockEntityRenderDispatcher;
 import net.minecraft.client.render.LightmapHelper;
 import net.minecraft.client.render.RenderBlocks;
 import net.minecraft.client.render.block.model.BlockModel;
+import net.minecraft.client.render.block.model.BlockModelDispatcher;
 import net.minecraft.client.render.culling.CameraFrustum;
 import net.minecraft.client.render.terrain.VertexBuffer.Entry;
 import net.minecraft.client.render.tessellator.Tessellator;
 import net.minecraft.client.render.tessellator.TessellatorStandard;
-import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.chunk.Chunk;
@@ -91,21 +92,21 @@ public class ChunkRendererMultiDraw extends ChunkRenderer {
 							tessellator.setColorRGBA(255, 255, 255, 255);
 							tessellator.setTextureUV(0.0, 0.0);
 						}
-						if(renderPass == 0 && Block.isEntityTile[blockId]) {
+						if(renderPass == 0 && Blocks.isEntityTile[blockId]) {
 							final TileEntity tileentity = chunkCache.getBlockEntity(x, y, z);
 							if(BlockEntityRenderDispatcher.instance.hasRenderer(tileentity)) {
 								renderableBlockEntities.add(tileentity);
 							}
 						}
-						final Block block = Block.blocksList[blockId];
-						final int blockRenderPass = block.getRenderLayer();
+						final BlockModel<?> model = BlockModelDispatcher.getInstance().getDispatch(Blocks.blocksList[blockId]);
+						final int blockRenderPass = model.renderLayer();
 						
 						if(blockRenderPass != renderPass) {
 							needsMoreRenderPasses = true;
 							continue;
 						}
 						
-						hasRenderedBlock |= renderBlock(tessellator, renderBlocks, block, x, y, z);
+						hasRenderedBlock |= renderBlock(tessellator, renderBlocks, model, x, y, z);
 					}
 				}
 			}
diff --git a/src/main/java/net/minecraft/client/render/terrain/RegionBuffer.java b/game/client/src/main/java/net/minecraft/client/render/terrain/RegionBuffer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/terrain/RegionBuffer.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/RegionBuffer.java
diff --git a/src/main/java/net/minecraft/client/render/terrain/RenderList.java b/game/client/src/main/java/net/minecraft/client/render/terrain/RenderList.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/terrain/RenderList.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/RenderList.java
diff --git a/src/main/java/net/minecraft/client/render/terrain/RenderRegion.java b/game/client/src/main/java/net/minecraft/client/render/terrain/RenderRegion.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/terrain/RenderRegion.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/RenderRegion.java
diff --git a/src/main/java/net/minecraft/client/render/terrain/TerrainRenderPass.java b/game/client/src/main/java/net/minecraft/client/render/terrain/TerrainRenderPass.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/terrain/TerrainRenderPass.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/TerrainRenderPass.java
diff --git a/src/main/java/net/minecraft/client/render/terrain/TerrainRenderer.java b/game/client/src/main/java/net/minecraft/client/render/terrain/TerrainRenderer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/terrain/TerrainRenderer.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/TerrainRenderer.java
diff --git a/src/main/java/net/minecraft/client/render/terrain/TerrainRendererLegacy.java b/game/client/src/main/java/net/minecraft/client/render/terrain/TerrainRendererLegacy.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/terrain/TerrainRendererLegacy.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/TerrainRendererLegacy.java
diff --git a/src/main/java/net/minecraft/client/render/terrain/TerrainRendererMultiDraw.java b/game/client/src/main/java/net/minecraft/client/render/terrain/TerrainRendererMultiDraw.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/terrain/TerrainRendererMultiDraw.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/TerrainRendererMultiDraw.java
diff --git a/src/main/java/net/minecraft/client/render/terrain/VertexAttribute.java b/game/client/src/main/java/net/minecraft/client/render/terrain/VertexAttribute.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/terrain/VertexAttribute.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/VertexAttribute.java
diff --git a/src/main/java/net/minecraft/client/render/terrain/VertexBuffer.java b/game/client/src/main/java/net/minecraft/client/render/terrain/VertexBuffer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/terrain/VertexBuffer.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/VertexBuffer.java
diff --git a/src/main/java/net/minecraft/client/render/terrain/VertexConfig.java b/game/client/src/main/java/net/minecraft/client/render/terrain/VertexConfig.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/terrain/VertexConfig.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/VertexConfig.java
diff --git a/src/main/java/net/minecraft/client/render/terrain/VertexData.java b/game/client/src/main/java/net/minecraft/client/render/terrain/VertexData.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/terrain/VertexData.java
rename to game/client/src/main/java/net/minecraft/client/render/terrain/VertexData.java
diff --git a/src/main/java/net/minecraft/client/render/tessellator/Tessellator.java b/game/client/src/main/java/net/minecraft/client/render/tessellator/Tessellator.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/tessellator/Tessellator.java
rename to game/client/src/main/java/net/minecraft/client/render/tessellator/Tessellator.java
diff --git a/src/main/java/net/minecraft/client/render/tessellator/TessellatorBase.java b/game/client/src/main/java/net/minecraft/client/render/tessellator/TessellatorBase.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/tessellator/TessellatorBase.java
rename to game/client/src/main/java/net/minecraft/client/render/tessellator/TessellatorBase.java
diff --git a/src/main/java/net/minecraft/client/render/tessellator/TessellatorStandard.java b/game/client/src/main/java/net/minecraft/client/render/tessellator/TessellatorStandard.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/tessellator/TessellatorStandard.java
rename to game/client/src/main/java/net/minecraft/client/render/tessellator/TessellatorStandard.java
diff --git a/src/main/java/net/minecraft/client/render/texture/Texture.java b/game/client/src/main/java/net/minecraft/client/render/texture/Texture.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/Texture.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/Texture.java
diff --git a/src/main/java/net/minecraft/client/render/texture/TextureBuffered.java b/game/client/src/main/java/net/minecraft/client/render/texture/TextureBuffered.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/TextureBuffered.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/TextureBuffered.java
diff --git a/src/main/java/net/minecraft/client/render/texture/TextureDownloaded.java b/game/client/src/main/java/net/minecraft/client/render/texture/TextureDownloaded.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/TextureDownloaded.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/TextureDownloaded.java
diff --git a/src/main/java/net/minecraft/client/render/texture/TextureFile.java b/game/client/src/main/java/net/minecraft/client/render/texture/TextureFile.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/TextureFile.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/TextureFile.java
diff --git a/src/main/java/net/minecraft/client/render/texture/meta/AnimationProperties.java b/game/client/src/main/java/net/minecraft/client/render/texture/meta/AnimationProperties.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/meta/AnimationProperties.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/meta/AnimationProperties.java
diff --git a/src/main/java/net/minecraft/client/render/texture/meta/AnimationPropertiesAdapter.java b/game/client/src/main/java/net/minecraft/client/render/texture/meta/AnimationPropertiesAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/meta/AnimationPropertiesAdapter.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/meta/AnimationPropertiesAdapter.java
diff --git a/src/main/java/net/minecraft/client/render/texture/meta/TextureMetaHandler.java b/game/client/src/main/java/net/minecraft/client/render/texture/meta/TextureMetaHandler.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/meta/TextureMetaHandler.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/meta/TextureMetaHandler.java
diff --git a/src/main/java/net/minecraft/client/render/texture/meta/TextureProperties.java b/game/client/src/main/java/net/minecraft/client/render/texture/meta/TextureProperties.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/meta/TextureProperties.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/meta/TextureProperties.java
diff --git a/src/main/java/net/minecraft/client/render/texture/meta/TexturePropertiesAdapter.java b/game/client/src/main/java/net/minecraft/client/render/texture/meta/TexturePropertiesAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/meta/TexturePropertiesAdapter.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/meta/TexturePropertiesAdapter.java
diff --git a/src/main/java/net/minecraft/client/render/texture/meta/gui/GuiTextureProperties.java b/game/client/src/main/java/net/minecraft/client/render/texture/meta/gui/GuiTextureProperties.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/meta/gui/GuiTextureProperties.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/meta/gui/GuiTextureProperties.java
diff --git a/src/main/java/net/minecraft/client/render/texture/meta/gui/GuiTexturePropertiesAdapter.java b/game/client/src/main/java/net/minecraft/client/render/texture/meta/gui/GuiTexturePropertiesAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/meta/gui/GuiTexturePropertiesAdapter.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/meta/gui/GuiTexturePropertiesAdapter.java
diff --git a/src/main/java/net/minecraft/client/render/texture/stitcher/AtlasStitcher.java b/game/client/src/main/java/net/minecraft/client/render/texture/stitcher/AtlasStitcher.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/stitcher/AtlasStitcher.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/stitcher/AtlasStitcher.java
diff --git a/src/main/java/net/minecraft/client/render/texture/stitcher/IconCoordinate.java b/game/client/src/main/java/net/minecraft/client/render/texture/stitcher/IconCoordinate.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/stitcher/IconCoordinate.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/stitcher/IconCoordinate.java
diff --git a/src/main/java/net/minecraft/client/render/texture/stitcher/TextureRegistry.java b/game/client/src/main/java/net/minecraft/client/render/texture/stitcher/TextureRegistry.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texture/stitcher/TextureRegistry.java
rename to game/client/src/main/java/net/minecraft/client/render/texture/stitcher/TextureRegistry.java
diff --git a/src/main/java/net/minecraft/client/render/texturepack/Manifest.java b/game/client/src/main/java/net/minecraft/client/render/texturepack/Manifest.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texturepack/Manifest.java
rename to game/client/src/main/java/net/minecraft/client/render/texturepack/Manifest.java
diff --git a/src/main/java/net/minecraft/client/render/texturepack/ManifestBase.java b/game/client/src/main/java/net/minecraft/client/render/texturepack/ManifestBase.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texturepack/ManifestBase.java
rename to game/client/src/main/java/net/minecraft/client/render/texturepack/ManifestBase.java
diff --git a/src/main/java/net/minecraft/client/render/texturepack/ManifestFallback.java b/game/client/src/main/java/net/minecraft/client/render/texturepack/ManifestFallback.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texturepack/ManifestFallback.java
rename to game/client/src/main/java/net/minecraft/client/render/texturepack/ManifestFallback.java
diff --git a/src/main/java/net/minecraft/client/render/texturepack/TexturePack.java b/game/client/src/main/java/net/minecraft/client/render/texturepack/TexturePack.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texturepack/TexturePack.java
rename to game/client/src/main/java/net/minecraft/client/render/texturepack/TexturePack.java
diff --git a/src/main/java/net/minecraft/client/render/texturepack/TexturePackCustom.java b/game/client/src/main/java/net/minecraft/client/render/texturepack/TexturePackCustom.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texturepack/TexturePackCustom.java
rename to game/client/src/main/java/net/minecraft/client/render/texturepack/TexturePackCustom.java
diff --git a/src/main/java/net/minecraft/client/render/texturepack/TexturePackDefault.java b/game/client/src/main/java/net/minecraft/client/render/texturepack/TexturePackDefault.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texturepack/TexturePackDefault.java
rename to game/client/src/main/java/net/minecraft/client/render/texturepack/TexturePackDefault.java
diff --git a/src/main/java/net/minecraft/client/render/texturepack/TexturePackException.java b/game/client/src/main/java/net/minecraft/client/render/texturepack/TexturePackException.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texturepack/TexturePackException.java
rename to game/client/src/main/java/net/minecraft/client/render/texturepack/TexturePackException.java
diff --git a/src/main/java/net/minecraft/client/render/texturepack/TexturePackList.java b/game/client/src/main/java/net/minecraft/client/render/texturepack/TexturePackList.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/texturepack/TexturePackList.java
rename to game/client/src/main/java/net/minecraft/client/render/texturepack/TexturePackList.java
diff --git a/src/main/java/net/minecraft/client/render/window/GameWindow.java b/game/client/src/main/java/net/minecraft/client/render/window/GameWindow.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/window/GameWindow.java
rename to game/client/src/main/java/net/minecraft/client/render/window/GameWindow.java
diff --git a/src/main/java/net/minecraft/client/render/window/GameWindowGLFW.java b/game/client/src/main/java/net/minecraft/client/render/window/GameWindowGLFW.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/window/GameWindowGLFW.java
rename to game/client/src/main/java/net/minecraft/client/render/window/GameWindowGLFW.java
diff --git a/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFX.java b/game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFX.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/worldtype/WorldTypeFX.java
rename to game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFX.java
diff --git a/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXDispatcher.java b/game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXDispatcher.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXDispatcher.java
rename to game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXDispatcher.java
diff --git a/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXEmpty.java b/game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXEmpty.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXEmpty.java
rename to game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXEmpty.java
diff --git a/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXNether.java b/game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXNether.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXNether.java
rename to game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXNether.java
diff --git a/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXOverworld.java b/game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXOverworld.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXOverworld.java
rename to game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXOverworld.java
diff --git a/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXParadise.java b/game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXParadise.java
similarity index 100%
rename from src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXParadise.java
rename to game/client/src/main/java/net/minecraft/client/render/worldtype/WorldTypeFXParadise.java
diff --git a/src/main/java/net/minecraft/client/sound/CodecMus.java b/game/client/src/main/java/net/minecraft/client/sound/CodecMus.java
similarity index 100%
rename from src/main/java/net/minecraft/client/sound/CodecMus.java
rename to game/client/src/main/java/net/minecraft/client/sound/CodecMus.java
diff --git a/src/main/java/net/minecraft/client/sound/NamedSoundRepository.java b/game/client/src/main/java/net/minecraft/client/sound/NamedSoundRepository.java
similarity index 100%
rename from src/main/java/net/minecraft/client/sound/NamedSoundRepository.java
rename to game/client/src/main/java/net/minecraft/client/sound/NamedSoundRepository.java
diff --git a/src/main/java/net/minecraft/client/sound/SoundCategoryHelper.java b/game/client/src/main/java/net/minecraft/client/sound/SoundCategoryHelper.java
similarity index 100%
rename from src/main/java/net/minecraft/client/sound/SoundCategoryHelper.java
rename to game/client/src/main/java/net/minecraft/client/sound/SoundCategoryHelper.java
diff --git a/src/main/java/net/minecraft/client/sound/SoundEngine.java b/game/client/src/main/java/net/minecraft/client/sound/SoundEngine.java
similarity index 100%
rename from src/main/java/net/minecraft/client/sound/SoundEngine.java
rename to game/client/src/main/java/net/minecraft/client/sound/SoundEngine.java
diff --git a/src/main/java/net/minecraft/client/sound/SoundEntry.java b/game/client/src/main/java/net/minecraft/client/sound/SoundEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/client/sound/SoundEntry.java
rename to game/client/src/main/java/net/minecraft/client/sound/SoundEntry.java
diff --git a/src/main/java/net/minecraft/client/sound/SoundEvent.java b/game/client/src/main/java/net/minecraft/client/sound/SoundEvent.java
similarity index 100%
rename from src/main/java/net/minecraft/client/sound/SoundEvent.java
rename to game/client/src/main/java/net/minecraft/client/sound/SoundEvent.java
diff --git a/src/main/java/net/minecraft/client/sound/SoundRepository.java b/game/client/src/main/java/net/minecraft/client/sound/SoundRepository.java
similarity index 100%
rename from src/main/java/net/minecraft/client/sound/SoundRepository.java
rename to game/client/src/main/java/net/minecraft/client/sound/SoundRepository.java
diff --git a/src/main/java/net/minecraft/client/util/debug/DebugRender.java b/game/client/src/main/java/net/minecraft/client/util/debug/DebugRender.java
similarity index 100%
rename from src/main/java/net/minecraft/client/util/debug/DebugRender.java
rename to game/client/src/main/java/net/minecraft/client/util/debug/DebugRender.java
diff --git a/src/main/java/net/minecraft/client/util/dispatch/Dispatcher.java b/game/client/src/main/java/net/minecraft/client/util/dispatch/Dispatcher.java
similarity index 96%
rename from src/main/java/net/minecraft/client/util/dispatch/Dispatcher.java
rename to game/client/src/main/java/net/minecraft/client/util/dispatch/Dispatcher.java
index 6ab13035e..a0e3003ba 100644
--- a/src/main/java/net/minecraft/client/util/dispatch/Dispatcher.java
+++ b/game/client/src/main/java/net/minecraft/client/util/dispatch/Dispatcher.java
@@ -1,37 +1,37 @@
-package net.minecraft.client.util.dispatch;
-
-import java.util.HashMap;
-import java.util.Map;
-
-// T = source class
-// U = dispatched class
-public abstract class Dispatcher<T, U> {
-    protected final Map<T, U> dispatches;
-
-    public Dispatcher() {
-        dispatches = new HashMap<>();
-    }
-
-    /**
-     * Adds a new entry to the dispatcher.
-     * @param key The item to use as a key.
-     * @param value The item that looking up the key will produce.
-     */
-    public void addDispatch(T key, U value) {
-        dispatches.put(key, value);
-    }
-
-    /**
-     * Fetches an entry from the dispatcher.
-     * @param key The key to look up.
-     * @return The value from the dispatcher, or a default value generated by getDefault().
-     */
-    public U getDispatch(T key) {
-        return dispatches.getOrDefault(key, getDefault());
-    }
-
-    /**
-     * Returns the default value for the dispatcher.
-     */
-    protected abstract U getDefault();
-}
+package net.minecraft.client.util.dispatch;
+
+import java.util.HashMap;
+import java.util.Map;
+
+// T = source class
+// U = dispatched class
+public abstract class Dispatcher<T, U> {
+    protected final Map<T, U> dispatches;
+
+    public Dispatcher() {
+        dispatches = new HashMap<>();
+    }
+
+    /**
+     * Adds a new entry to the dispatcher.
+     * @param key The item to use as a key.
+     * @param value The item that looking up the key will produce.
+     */
+    public void addDispatch(T key, U value) {
+        dispatches.put(key, value);
+    }
+
+    /**
+     * Fetches an entry from the dispatcher.
+     * @param key The key to look up.
+     * @return The value from the dispatcher, or a default value generated by getDefault().
+     */
+    public U getDispatch(T key) {
+        return dispatches.getOrDefault(key, getDefault());
+    }
+
+    /**
+     * Returns the default value for the dispatcher.
+     */
+    protected abstract U getDefault();
+}
diff --git a/src/main/java/net/minecraft/client/util/helper/Colors.java b/game/client/src/main/java/net/minecraft/client/util/helper/Colors.java
similarity index 100%
rename from src/main/java/net/minecraft/client/util/helper/Colors.java
rename to game/client/src/main/java/net/minecraft/client/util/helper/Colors.java
diff --git a/src/main/java/net/minecraft/client/util/helper/ItemDragHandler.java b/game/client/src/main/java/net/minecraft/client/util/helper/ItemDragHandler.java
similarity index 100%
rename from src/main/java/net/minecraft/client/util/helper/ItemDragHandler.java
rename to game/client/src/main/java/net/minecraft/client/util/helper/ItemDragHandler.java
diff --git a/src/main/java/net/minecraft/core/util/helper/ScreenShot.java b/game/client/src/main/java/net/minecraft/client/util/helper/ScreenShot.java
similarity index 98%
rename from src/main/java/net/minecraft/core/util/helper/ScreenShot.java
rename to game/client/src/main/java/net/minecraft/client/util/helper/ScreenShot.java
index 0227155db..6dbaa8add 100644
--- a/src/main/java/net/minecraft/core/util/helper/ScreenShot.java
+++ b/game/client/src/main/java/net/minecraft/client/util/helper/ScreenShot.java
@@ -1,4 +1,4 @@
-package net.minecraft.core.util.helper;
+package net.minecraft.client.util.helper;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
diff --git a/src/main/java/net/minecraft/client/util/helper/ScreenshotHelper.java b/game/client/src/main/java/net/minecraft/client/util/helper/ScreenshotHelper.java
similarity index 100%
rename from src/main/java/net/minecraft/client/util/helper/ScreenshotHelper.java
rename to game/client/src/main/java/net/minecraft/client/util/helper/ScreenshotHelper.java
diff --git a/src/main/java/net/minecraft/client/util/helper/TexturePackJsonHelper.java b/game/client/src/main/java/net/minecraft/client/util/helper/TexturePackJsonHelper.java
similarity index 100%
rename from src/main/java/net/minecraft/client/util/helper/TexturePackJsonHelper.java
rename to game/client/src/main/java/net/minecraft/client/util/helper/TexturePackJsonHelper.java
diff --git a/src/main/java/net/minecraft/client/util/helper/Textures.java b/game/client/src/main/java/net/minecraft/client/util/helper/Textures.java
similarity index 100%
rename from src/main/java/net/minecraft/client/util/helper/Textures.java
rename to game/client/src/main/java/net/minecraft/client/util/helper/Textures.java
diff --git a/src/main/java/net/minecraft/client/world/WorldClient.java b/game/client/src/main/java/net/minecraft/client/world/WorldClient.java
similarity index 100%
rename from src/main/java/net/minecraft/client/world/WorldClient.java
rename to game/client/src/main/java/net/minecraft/client/world/WorldClient.java
diff --git a/src/main/java/net/minecraft/client/world/WorldClientMP.java b/game/client/src/main/java/net/minecraft/client/world/WorldClientMP.java
similarity index 98%
rename from src/main/java/net/minecraft/client/world/WorldClientMP.java
rename to game/client/src/main/java/net/minecraft/client/world/WorldClientMP.java
index 98c03d6e3..74353919e 100644
--- a/src/main/java/net/minecraft/client/world/WorldClientMP.java
+++ b/game/client/src/main/java/net/minecraft/client/world/WorldClientMP.java
@@ -5,7 +5,7 @@ import net.minecraft.client.world.chunk.provider.ChunkProviderClient;
 import net.minecraft.core.data.gamerule.GameRules;
 import net.minecraft.core.data.registry.Registries;
 import net.minecraft.core.entity.Entity;
-import net.minecraft.core.net.packet.DisconnectPacket;
+import net.minecraft.core.net.packet.PacketDisconnect;
 import net.minecraft.core.util.collection.IntHashMap;
 import net.minecraft.core.world.Dimension;
 import net.minecraft.core.world.chunk.ChunkCoordinates;
@@ -260,7 +260,7 @@ public class WorldClientMP extends WorldClient {
     @Override
 	public void sendQuittingDisconnectingPacket()
     {
-        sendQueue.sendFinalPacket(new DisconnectPacket("Quitting"));
+        sendQueue.sendFinalPacket(new PacketDisconnect("Quitting"));
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderClient.java b/game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderClient.java
similarity index 100%
rename from src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderClient.java
rename to game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderClient.java
diff --git a/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderDynamic.java b/game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderDynamic.java
similarity index 100%
rename from src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderDynamic.java
rename to game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderDynamic.java
diff --git a/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderStatic.java b/game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderStatic.java
similarity index 100%
rename from src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderStatic.java
rename to game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderStatic.java
diff --git a/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderViewer.java b/game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderViewer.java
similarity index 100%
rename from src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderViewer.java
rename to game/client/src/main/java/net/minecraft/client/world/chunk/provider/ChunkProviderViewer.java
diff --git a/src/main/java/net/minecraft/client/world/save/SaveHandlerClientMP.java b/game/client/src/main/java/net/minecraft/client/world/save/SaveHandlerClientMP.java
similarity index 100%
rename from src/main/java/net/minecraft/client/world/save/SaveHandlerClientMP.java
rename to game/client/src/main/java/net/minecraft/client/world/save/SaveHandlerClientMP.java
diff --git a/src/main/java/net/minecraft/client/world/save/SaveHandlerClientSP.java b/game/client/src/main/java/net/minecraft/client/world/save/SaveHandlerClientSP.java
similarity index 100%
rename from src/main/java/net/minecraft/client/world/save/SaveHandlerClientSP.java
rename to game/client/src/main/java/net/minecraft/client/world/save/SaveHandlerClientSP.java
diff --git a/src/main/java/org/useless/seedviewer/SeedViewerMain.java b/game/client/src/main/java/org/useless/seedviewer/SeedViewerMain.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/SeedViewerMain.java
rename to game/client/src/main/java/org/useless/seedviewer/SeedViewerMain.java
diff --git a/src/main/java/org/useless/seedviewer/TestChunkProvider.java b/game/client/src/main/java/org/useless/seedviewer/TestChunkProvider.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/TestChunkProvider.java
rename to game/client/src/main/java/org/useless/seedviewer/TestChunkProvider.java
diff --git a/src/main/java/org/useless/seedviewer/bta/BTABiome.java b/game/client/src/main/java/org/useless/seedviewer/bta/BTABiome.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/bta/BTABiome.java
rename to game/client/src/main/java/org/useless/seedviewer/bta/BTABiome.java
diff --git a/src/main/java/org/useless/seedviewer/bta/BTAChunkProvider.java b/game/client/src/main/java/org/useless/seedviewer/bta/BTAChunkProvider.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/bta/BTAChunkProvider.java
rename to game/client/src/main/java/org/useless/seedviewer/bta/BTAChunkProvider.java
diff --git a/src/main/java/org/useless/seedviewer/bta/BTAComplexChunk.java b/game/client/src/main/java/org/useless/seedviewer/bta/BTAComplexChunk.java
similarity index 89%
rename from src/main/java/org/useless/seedviewer/bta/BTAComplexChunk.java
rename to game/client/src/main/java/org/useless/seedviewer/bta/BTAComplexChunk.java
index 3eaf71ea3..2793bc73a 100644
--- a/src/main/java/org/useless/seedviewer/bta/BTAComplexChunk.java
+++ b/game/client/src/main/java/org/useless/seedviewer/bta/BTAComplexChunk.java
@@ -1,6 +1,7 @@
 package org.useless.seedviewer.bta;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.block.material.MaterialColor;
 import org.jetbrains.annotations.NotNull;
@@ -21,7 +22,7 @@ public class BTAComplexChunk implements Chunk {
 
     @Override
     public int getBlockColor(ChunkPos3D pos) {
-        Block b = Block.getBlock(chunk.getBlockID(pos.x, pos.y, pos.z));
+        Block b = Blocks.getBlock(chunk.getBlockID(pos.x, pos.y, pos.z));
         if (b == null) return 0;
         int meta = chunk.getBlockMetadata(pos.x, pos.y, pos.z);
         return MaterialColor.getColorFromIndex(MaterialColor.getColorIndexFromBlock(b, meta)) | 0xFF_00_00_00;
@@ -39,7 +40,7 @@ public class BTAComplexChunk implements Chunk {
         while (true) {
             int y = start - depth;
             if (y < 0) break;
-            Block b = Block.getBlock(chunk.getBlockID(pos.x, y, pos.z));
+            Block b = Blocks.getBlock(chunk.getBlockID(pos.x, y, pos.z));
             if (b == null) break;
             if (b.blockMaterial != Material.water) break;
             depth++;
diff --git a/src/main/java/org/useless/seedviewer/bta/BTASimpleChunk.java b/game/client/src/main/java/org/useless/seedviewer/bta/BTASimpleChunk.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/bta/BTASimpleChunk.java
rename to game/client/src/main/java/org/useless/seedviewer/bta/BTASimpleChunk.java
diff --git a/src/main/java/org/useless/seedviewer/bta/BTAWorld.java b/game/client/src/main/java/org/useless/seedviewer/bta/BTAWorld.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/bta/BTAWorld.java
rename to game/client/src/main/java/org/useless/seedviewer/bta/BTAWorld.java
diff --git a/src/main/java/org/useless/seedviewer/bta/DummyMinecraft.java b/game/client/src/main/java/org/useless/seedviewer/bta/DummyMinecraft.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/bta/DummyMinecraft.java
rename to game/client/src/main/java/org/useless/seedviewer/bta/DummyMinecraft.java
diff --git a/src/main/java/org/useless/seedviewer/bta/worldloader/ChunkLoader.java b/game/client/src/main/java/org/useless/seedviewer/bta/worldloader/ChunkLoader.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/bta/worldloader/ChunkLoader.java
rename to game/client/src/main/java/org/useless/seedviewer/bta/worldloader/ChunkLoader.java
diff --git a/src/main/java/org/useless/seedviewer/bta/worldloader/DimensionDataLoader.java b/game/client/src/main/java/org/useless/seedviewer/bta/worldloader/DimensionDataLoader.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/bta/worldloader/DimensionDataLoader.java
rename to game/client/src/main/java/org/useless/seedviewer/bta/worldloader/DimensionDataLoader.java
diff --git a/src/main/java/org/useless/seedviewer/bta/worldloader/LevelDataLoader.java b/game/client/src/main/java/org/useless/seedviewer/bta/worldloader/LevelDataLoader.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/bta/worldloader/LevelDataLoader.java
rename to game/client/src/main/java/org/useless/seedviewer/bta/worldloader/LevelDataLoader.java
diff --git a/src/main/java/org/useless/seedviewer/collections/BlockPos2D.java b/game/client/src/main/java/org/useless/seedviewer/collections/BlockPos2D.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/collections/BlockPos2D.java
rename to game/client/src/main/java/org/useless/seedviewer/collections/BlockPos2D.java
diff --git a/src/main/java/org/useless/seedviewer/collections/BlockPos3D.java b/game/client/src/main/java/org/useless/seedviewer/collections/BlockPos3D.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/collections/BlockPos3D.java
rename to game/client/src/main/java/org/useless/seedviewer/collections/BlockPos3D.java
diff --git a/src/main/java/org/useless/seedviewer/collections/ChunkLocation.java b/game/client/src/main/java/org/useless/seedviewer/collections/ChunkLocation.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/collections/ChunkLocation.java
rename to game/client/src/main/java/org/useless/seedviewer/collections/ChunkLocation.java
diff --git a/src/main/java/org/useless/seedviewer/collections/ChunkPos2D.java b/game/client/src/main/java/org/useless/seedviewer/collections/ChunkPos2D.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/collections/ChunkPos2D.java
rename to game/client/src/main/java/org/useless/seedviewer/collections/ChunkPos2D.java
diff --git a/src/main/java/org/useless/seedviewer/collections/ChunkPos3D.java b/game/client/src/main/java/org/useless/seedviewer/collections/ChunkPos3D.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/collections/ChunkPos3D.java
rename to game/client/src/main/java/org/useless/seedviewer/collections/ChunkPos3D.java
diff --git a/src/main/java/org/useless/seedviewer/collections/NamespaceID.java b/game/client/src/main/java/org/useless/seedviewer/collections/NamespaceID.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/collections/NamespaceID.java
rename to game/client/src/main/java/org/useless/seedviewer/collections/NamespaceID.java
diff --git a/src/main/java/org/useless/seedviewer/collections/ObjectWrapper.java b/game/client/src/main/java/org/useless/seedviewer/collections/ObjectWrapper.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/collections/ObjectWrapper.java
rename to game/client/src/main/java/org/useless/seedviewer/collections/ObjectWrapper.java
diff --git a/src/main/java/org/useless/seedviewer/data/Biome.java b/game/client/src/main/java/org/useless/seedviewer/data/Biome.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/data/Biome.java
rename to game/client/src/main/java/org/useless/seedviewer/data/Biome.java
diff --git a/src/main/java/org/useless/seedviewer/data/Chunk.java b/game/client/src/main/java/org/useless/seedviewer/data/Chunk.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/data/Chunk.java
rename to game/client/src/main/java/org/useless/seedviewer/data/Chunk.java
diff --git a/src/main/java/org/useless/seedviewer/data/World.java b/game/client/src/main/java/org/useless/seedviewer/data/World.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/data/World.java
rename to game/client/src/main/java/org/useless/seedviewer/data/World.java
diff --git a/src/main/java/org/useless/seedviewer/gui/ChunkProvider.java b/game/client/src/main/java/org/useless/seedviewer/gui/ChunkProvider.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/gui/ChunkProvider.java
rename to game/client/src/main/java/org/useless/seedviewer/gui/ChunkProvider.java
diff --git a/src/main/java/org/useless/seedviewer/gui/ChunkView.java b/game/client/src/main/java/org/useless/seedviewer/gui/ChunkView.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/gui/ChunkView.java
rename to game/client/src/main/java/org/useless/seedviewer/gui/ChunkView.java
diff --git a/src/main/java/org/useless/seedviewer/gui/SeedViewer.java b/game/client/src/main/java/org/useless/seedviewer/gui/SeedViewer.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/gui/SeedViewer.java
rename to game/client/src/main/java/org/useless/seedviewer/gui/SeedViewer.java
diff --git a/src/main/java/org/useless/seedviewer/gui/components/InfoPanel.java b/game/client/src/main/java/org/useless/seedviewer/gui/components/InfoPanel.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/gui/components/InfoPanel.java
rename to game/client/src/main/java/org/useless/seedviewer/gui/components/InfoPanel.java
diff --git a/src/main/java/org/useless/seedviewer/gui/components/InputPanel.java b/game/client/src/main/java/org/useless/seedviewer/gui/components/InputPanel.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/gui/components/InputPanel.java
rename to game/client/src/main/java/org/useless/seedviewer/gui/components/InputPanel.java
diff --git a/src/main/java/org/useless/seedviewer/gui/components/Viewport.java b/game/client/src/main/java/org/useless/seedviewer/gui/components/Viewport.java
similarity index 100%
rename from src/main/java/org/useless/seedviewer/gui/components/Viewport.java
rename to game/client/src/main/java/org/useless/seedviewer/gui/components/Viewport.java
diff --git a/src/main/resources/assets/minecraft/sounds/mojangSounds.json b/game/client/src/main/resources/assets/minecraft/sounds/mojangSounds.json
similarity index 100%
rename from src/main/resources/assets/minecraft/sounds/mojangSounds.json
rename to game/client/src/main/resources/assets/minecraft/sounds/mojangSounds.json
diff --git a/src/main/resources/assets/minecraft/sounds/ui/crafting_fail.ogg b/game/client/src/main/resources/assets/minecraft/sounds/ui/crafting_fail.ogg
similarity index 100%
rename from src/main/resources/assets/minecraft/sounds/ui/crafting_fail.ogg
rename to game/client/src/main/resources/assets/minecraft/sounds/ui/crafting_fail.ogg
diff --git a/src/main/resources/assets/minecraft/sounds/ui/crafting_made.ogg b/game/client/src/main/resources/assets/minecraft/sounds/ui/crafting_made.ogg
similarity index 100%
rename from src/main/resources/assets/minecraft/sounds/ui/crafting_made.ogg
rename to game/client/src/main/resources/assets/minecraft/sounds/ui/crafting_made.ogg
diff --git a/src/main/resources/assets/minecraft/sounds/ui/ui_back.ogg b/game/client/src/main/resources/assets/minecraft/sounds/ui/ui_back.ogg
similarity index 100%
rename from src/main/resources/assets/minecraft/sounds/ui/ui_back.ogg
rename to game/client/src/main/resources/assets/minecraft/sounds/ui/ui_back.ogg
diff --git a/src/main/resources/assets/minecraft/sounds/ui/ui_click.ogg b/game/client/src/main/resources/assets/minecraft/sounds/ui/ui_click.ogg
similarity index 100%
rename from src/main/resources/assets/minecraft/sounds/ui/ui_click.ogg
rename to game/client/src/main/resources/assets/minecraft/sounds/ui/ui_click.ogg
diff --git a/src/main/resources/assets/minecraft/sounds/ui/ui_focus.ogg b/game/client/src/main/resources/assets/minecraft/sounds/ui/ui_focus.ogg
similarity index 100%
rename from src/main/resources/assets/minecraft/sounds/ui/ui_focus.ogg
rename to game/client/src/main/resources/assets/minecraft/sounds/ui/ui_focus.ogg
diff --git a/src/main/resources/assets/minecraft/sounds/ui/ui_scroll.ogg b/game/client/src/main/resources/assets/minecraft/sounds/ui/ui_scroll.ogg
similarity index 100%
rename from src/main/resources/assets/minecraft/sounds/ui/ui_scroll.ogg
rename to game/client/src/main/resources/assets/minecraft/sounds/ui/ui_scroll.ogg
diff --git a/src/main/resources/assets/minecraft/textures/armor/chain_1.png b/game/client/src/main/resources/assets/minecraft/textures/armor/chain_1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/chain_1.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/chain_1.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/chain_2.png b/game/client/src/main/resources/assets/minecraft/textures/armor/chain_2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/chain_2.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/chain_2.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/cloth_1.png b/game/client/src/main/resources/assets/minecraft/textures/armor/cloth_1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/cloth_1.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/cloth_1.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/cloth_2.png b/game/client/src/main/resources/assets/minecraft/textures/armor/cloth_2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/cloth_2.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/cloth_2.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/diamond_1.png b/game/client/src/main/resources/assets/minecraft/textures/armor/diamond_1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/diamond_1.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/diamond_1.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/diamond_2.png b/game/client/src/main/resources/assets/minecraft/textures/armor/diamond_2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/diamond_2.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/diamond_2.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/gold_1.png b/game/client/src/main/resources/assets/minecraft/textures/armor/gold_1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/gold_1.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/gold_1.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/gold_2.png b/game/client/src/main/resources/assets/minecraft/textures/armor/gold_2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/gold_2.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/gold_2.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/iron_1.png b/game/client/src/main/resources/assets/minecraft/textures/armor/iron_1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/iron_1.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/iron_1.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/iron_2.png b/game/client/src/main/resources/assets/minecraft/textures/armor/iron_2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/iron_2.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/iron_2.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/power.png b/game/client/src/main/resources/assets/minecraft/textures/armor/power.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/power.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/power.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/quiver.png b/game/client/src/main/resources/assets/minecraft/textures/armor/quiver.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/quiver.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/quiver.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/quiver_golden.png b/game/client/src/main/resources/assets/minecraft/textures/armor/quiver_golden.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/quiver_golden.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/quiver_golden.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/skates.png b/game/client/src/main/resources/assets/minecraft/textures/armor/skates.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/skates.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/skates.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/steel_1.png b/game/client/src/main/resources/assets/minecraft/textures/armor/steel_1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/steel_1.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/steel_1.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/steel_2.png b/game/client/src/main/resources/assets/minecraft/textures/armor/steel_2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/steel_2.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/steel_2.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/wolf/chain.png b/game/client/src/main/resources/assets/minecraft/textures/armor/wolf/chain.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/wolf/chain.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/wolf/chain.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/wolf/cloth.png b/game/client/src/main/resources/assets/minecraft/textures/armor/wolf/cloth.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/wolf/cloth.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/wolf/cloth.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/wolf/diamond.png b/game/client/src/main/resources/assets/minecraft/textures/armor/wolf/diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/wolf/diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/wolf/diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/wolf/gold.png b/game/client/src/main/resources/assets/minecraft/textures/armor/wolf/gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/wolf/gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/wolf/gold.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/wolf/iron.png b/game/client/src/main/resources/assets/minecraft/textures/armor/wolf/iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/wolf/iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/wolf/iron.png
diff --git a/src/main/resources/assets/minecraft/textures/armor/wolf/steel.png b/game/client/src/main/resources/assets/minecraft/textures/armor/wolf/steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/armor/wolf/steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/armor/wolf/steel.png
diff --git a/src/main/resources/assets/minecraft/textures/art/alban.png b/game/client/src/main/resources/assets/minecraft/textures/art/alban.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/alban.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/alban.png
diff --git a/src/main/resources/assets/minecraft/textures/art/allegory.png b/game/client/src/main/resources/assets/minecraft/textures/art/allegory.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/allegory.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/allegory.png
diff --git a/src/main/resources/assets/minecraft/textures/art/aztec.png b/game/client/src/main/resources/assets/minecraft/textures/art/aztec.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/aztec.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/aztec.png
diff --git a/src/main/resources/assets/minecraft/textures/art/aztec2.png b/game/client/src/main/resources/assets/minecraft/textures/art/aztec2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/aztec2.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/aztec2.png
diff --git a/src/main/resources/assets/minecraft/textures/art/backing.png b/game/client/src/main/resources/assets/minecraft/textures/art/backing.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/backing.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/backing.png
diff --git a/src/main/resources/assets/minecraft/textures/art/bomb.png b/game/client/src/main/resources/assets/minecraft/textures/art/bomb.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/bomb.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/bomb.png
diff --git a/src/main/resources/assets/minecraft/textures/art/borders/border_diamond.png b/game/client/src/main/resources/assets/minecraft/textures/art/borders/border_diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/borders/border_diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/borders/border_diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/art/borders/border_gold.png b/game/client/src/main/resources/assets/minecraft/textures/art/borders/border_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/borders/border_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/borders/border_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/art/borders/border_iron.png b/game/client/src/main/resources/assets/minecraft/textures/art/borders/border_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/borders/border_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/borders/border_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/art/borders/border_lapis.png b/game/client/src/main/resources/assets/minecraft/textures/art/borders/border_lapis.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/borders/border_lapis.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/borders/border_lapis.png
diff --git a/src/main/resources/assets/minecraft/textures/art/borders/border_olivine.png b/game/client/src/main/resources/assets/minecraft/textures/art/borders/border_olivine.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/borders/border_olivine.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/borders/border_olivine.png
diff --git a/src/main/resources/assets/minecraft/textures/art/borders/border_quartz.png b/game/client/src/main/resources/assets/minecraft/textures/art/borders/border_quartz.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/borders/border_quartz.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/borders/border_quartz.png
diff --git a/src/main/resources/assets/minecraft/textures/art/borders/border_redstone.png b/game/client/src/main/resources/assets/minecraft/textures/art/borders/border_redstone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/borders/border_redstone.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/borders/border_redstone.png
diff --git a/src/main/resources/assets/minecraft/textures/art/borders/border_steel.png b/game/client/src/main/resources/assets/minecraft/textures/art/borders/border_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/borders/border_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/borders/border_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/art/burning_skull.png b/game/client/src/main/resources/assets/minecraft/textures/art/burning_skull.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/burning_skull.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/burning_skull.png
diff --git a/src/main/resources/assets/minecraft/textures/art/bust.png b/game/client/src/main/resources/assets/minecraft/textures/art/bust.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/bust.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/bust.png
diff --git a/src/main/resources/assets/minecraft/textures/art/cactus_bird.png b/game/client/src/main/resources/assets/minecraft/textures/art/cactus_bird.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/cactus_bird.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/cactus_bird.png
diff --git a/src/main/resources/assets/minecraft/textures/art/courbet.png b/game/client/src/main/resources/assets/minecraft/textures/art/courbet.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/courbet.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/courbet.png
diff --git a/src/main/resources/assets/minecraft/textures/art/creebet.png b/game/client/src/main/resources/assets/minecraft/textures/art/creebet.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/creebet.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/creebet.png
diff --git a/src/main/resources/assets/minecraft/textures/art/death_and_the_maiden.png b/game/client/src/main/resources/assets/minecraft/textures/art/death_and_the_maiden.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/death_and_the_maiden.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/death_and_the_maiden.png
diff --git a/src/main/resources/assets/minecraft/textures/art/dod_fagel.png b/game/client/src/main/resources/assets/minecraft/textures/art/dod_fagel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/dod_fagel.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/dod_fagel.png
diff --git a/src/main/resources/assets/minecraft/textures/art/donkey_kong.png b/game/client/src/main/resources/assets/minecraft/textures/art/donkey_kong.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/donkey_kong.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/donkey_kong.png
diff --git a/src/main/resources/assets/minecraft/textures/art/dresses.png b/game/client/src/main/resources/assets/minecraft/textures/art/dresses.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/dresses.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/dresses.png
diff --git a/src/main/resources/assets/minecraft/textures/art/fighters.png b/game/client/src/main/resources/assets/minecraft/textures/art/fighters.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/fighters.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/fighters.png
diff --git a/src/main/resources/assets/minecraft/textures/art/geology.png b/game/client/src/main/resources/assets/minecraft/textures/art/geology.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/geology.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/geology.png
diff --git a/src/main/resources/assets/minecraft/textures/art/graham.png b/game/client/src/main/resources/assets/minecraft/textures/art/graham.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/graham.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/graham.png
diff --git a/src/main/resources/assets/minecraft/textures/art/kebab.png b/game/client/src/main/resources/assets/minecraft/textures/art/kebab.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/kebab.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/kebab.png
diff --git a/src/main/resources/assets/minecraft/textures/art/match.png b/game/client/src/main/resources/assets/minecraft/textures/art/match.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/match.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/match.png
diff --git a/src/main/resources/assets/minecraft/textures/art/monologue.png b/game/client/src/main/resources/assets/minecraft/textures/art/monologue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/monologue.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/monologue.png
diff --git a/src/main/resources/assets/minecraft/textures/art/pigscene.png b/game/client/src/main/resources/assets/minecraft/textures/art/pigscene.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/pigscene.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/pigscene.png
diff --git a/src/main/resources/assets/minecraft/textures/art/plant.png b/game/client/src/main/resources/assets/minecraft/textures/art/plant.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/plant.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/plant.png
diff --git a/src/main/resources/assets/minecraft/textures/art/pointer.png b/game/client/src/main/resources/assets/minecraft/textures/art/pointer.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/pointer.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/pointer.png
diff --git a/src/main/resources/assets/minecraft/textures/art/pool.png b/game/client/src/main/resources/assets/minecraft/textures/art/pool.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/pool.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/pool.png
diff --git a/src/main/resources/assets/minecraft/textures/art/sea.png b/game/client/src/main/resources/assets/minecraft/textures/art/sea.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/sea.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/sea.png
diff --git a/src/main/resources/assets/minecraft/textures/art/skeleton.png b/game/client/src/main/resources/assets/minecraft/textures/art/skeleton.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/skeleton.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/skeleton.png
diff --git a/src/main/resources/assets/minecraft/textures/art/skull_and_roses.png b/game/client/src/main/resources/assets/minecraft/textures/art/skull_and_roses.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/skull_and_roses.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/skull_and_roses.png
diff --git a/src/main/resources/assets/minecraft/textures/art/stage.png b/game/client/src/main/resources/assets/minecraft/textures/art/stage.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/stage.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/stage.png
diff --git a/src/main/resources/assets/minecraft/textures/art/sunset.png b/game/client/src/main/resources/assets/minecraft/textures/art/sunset.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/sunset.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/sunset.png
diff --git a/src/main/resources/assets/minecraft/textures/art/the_blanket.png b/game/client/src/main/resources/assets/minecraft/textures/art/the_blanket.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/the_blanket.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/the_blanket.png
diff --git a/src/main/resources/assets/minecraft/textures/art/the_box.png b/game/client/src/main/resources/assets/minecraft/textures/art/the_box.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/the_box.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/the_box.png
diff --git a/src/main/resources/assets/minecraft/textures/art/the_bull.png b/game/client/src/main/resources/assets/minecraft/textures/art/the_bull.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/the_bull.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/the_bull.png
diff --git a/src/main/resources/assets/minecraft/textures/art/the_golden_apple.png b/game/client/src/main/resources/assets/minecraft/textures/art/the_golden_apple.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/the_golden_apple.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/the_golden_apple.png
diff --git a/src/main/resources/assets/minecraft/textures/art/void.png b/game/client/src/main/resources/assets/minecraft/textures/art/void.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/void.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/void.png
diff --git a/src/main/resources/assets/minecraft/textures/art/wanderer.png b/game/client/src/main/resources/assets/minecraft/textures/art/wanderer.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/wanderer.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/wanderer.png
diff --git a/src/main/resources/assets/minecraft/textures/art/wasteland.png b/game/client/src/main/resources/assets/minecraft/textures/art/wasteland.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/art/wasteland.png
rename to game/client/src/main/resources/assets/minecraft/textures/art/wasteland.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/bottom_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/bottom_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/bottom_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/bottom_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/bottom_active_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/bottom_active_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/bottom_active_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/bottom_active_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/front_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/front_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/front_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/front_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/front_active_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/front_active_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/front_active_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/front_active_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/side_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/side_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/side_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/side_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/side_active_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/side_active_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/side_active_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/side_active_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/top_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/top_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/top_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/top_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/activator/top_active_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/activator/top_active_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/activator/top_active_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/activator/top_active_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/algae.png b/game/client/src/main/resources/assets/minecraft/textures/block/algae.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/algae.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/algae.png
diff --git a/src/main/resources/assets/minecraft/textures/block/basalt.png b/game/client/src/main/resources/assets/minecraft/textures/block/basalt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/basalt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/basalt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/basket/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/basket/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/basket/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/basket/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/basket/fill.png b/game/client/src/main/resources/assets/minecraft/textures/block/basket/fill.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/basket/fill.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/basket/fill.png
diff --git a/src/main/resources/assets/minecraft/textures/block/basket/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/basket/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/basket/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/basket/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bed/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/bed/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bed/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bed/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bed/foot_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/bed/foot_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bed/foot_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bed/foot_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bed/foot_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/bed/foot_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bed/foot_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bed/foot_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bed/foot_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/bed/foot_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bed/foot_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bed/foot_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bed/head_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/bed/head_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bed/head_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bed/head_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bed/head_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/bed/head_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bed/head_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bed/head_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bed/head_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/bed/head_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bed/head_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bed/head_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bedrock.png b/game/client/src/main/resources/assets/minecraft/textures/block/bedrock.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bedrock.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bedrock.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_baked_sugarcane/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_baked_sugarcane/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_baked_sugarcane/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_baked_sugarcane/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_baked_sugarcane/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_baked_sugarcane/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_baked_sugarcane/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_baked_sugarcane/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_charcoal.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_charcoal.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_charcoal.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_charcoal.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_clay.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_clay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_clay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_clay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_coal.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_coal.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_coal.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_coal.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_diamond/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_diamond/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_diamond/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_diamond/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_diamond/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_diamond/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_diamond/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_gold/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_gold/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_gold/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_gold/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_gold/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_gold/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_gold/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_gold/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_gold/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_gold/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_iron/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_iron/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_iron/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_iron/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_iron/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_iron/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_iron/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_iron/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_iron/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_iron/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_lapis.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_lapis.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_lapis.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_lapis.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_nethercoal.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_nethercoal.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_nethercoal.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_nethercoal.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_nethercoal_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_nethercoal_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_nethercoal_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_nethercoal_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_olivine.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_olivine.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_olivine.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_olivine.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_quartz.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_quartz.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_quartz.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_quartz.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_redstone.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_redstone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_redstone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_redstone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_snow.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_snow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_snow.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_snow.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_steel/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_steel/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_steel/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_steel/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_steel/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_steel/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_steel/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_steel/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_steel/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_steel/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_steel/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_steel/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_sugarcane/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_sugarcane/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_sugarcane/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_sugarcane/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/block_sugarcane/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/block_sugarcane/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/block_sugarcane/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/block_sugarcane/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bone_shale/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/bone_shale/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bone_shale/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bone_shale/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bone_shale/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/bone_shale/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bone_shale/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bone_shale/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bone_shale/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/bone_shale/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bone_shale/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bone_shale/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bookshelf/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/bookshelf/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bookshelf/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bookshelf/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/bookshelf/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/bookshelf/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/bookshelf/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/bookshelf/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brazier/base.png b/game/client/src/main/resources/assets/minecraft/textures/block/brazier/base.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brazier/base.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brazier/base.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brazier/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/brazier/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brazier/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brazier/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/breaking/0.png b/game/client/src/main/resources/assets/minecraft/textures/block/breaking/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/breaking/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/breaking/0.png
diff --git a/src/main/resources/assets/minecraft/textures/block/breaking/1.png b/game/client/src/main/resources/assets/minecraft/textures/block/breaking/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/breaking/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/breaking/1.png
diff --git a/src/main/resources/assets/minecraft/textures/block/breaking/2.png b/game/client/src/main/resources/assets/minecraft/textures/block/breaking/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/breaking/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/breaking/2.png
diff --git a/src/main/resources/assets/minecraft/textures/block/breaking/3.png b/game/client/src/main/resources/assets/minecraft/textures/block/breaking/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/breaking/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/breaking/3.png
diff --git a/src/main/resources/assets/minecraft/textures/block/breaking/4.png b/game/client/src/main/resources/assets/minecraft/textures/block/breaking/4.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/breaking/4.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/breaking/4.png
diff --git a/src/main/resources/assets/minecraft/textures/block/breaking/5.png b/game/client/src/main/resources/assets/minecraft/textures/block/breaking/5.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/breaking/5.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/breaking/5.png
diff --git a/src/main/resources/assets/minecraft/textures/block/breaking/6.png b/game/client/src/main/resources/assets/minecraft/textures/block/breaking/6.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/breaking/6.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/breaking/6.png
diff --git a/src/main/resources/assets/minecraft/textures/block/breaking/7.png b/game/client/src/main/resources/assets/minecraft/textures/block/breaking/7.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/breaking/7.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/breaking/7.png
diff --git a/src/main/resources/assets/minecraft/textures/block/breaking/8.png b/game/client/src/main/resources/assets/minecraft/textures/block/breaking/8.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/breaking/8.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/breaking/8.png
diff --git a/src/main/resources/assets/minecraft/textures/block/breaking/9.png b/game/client/src/main/resources/assets/minecraft/textures/block/breaking/9.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/breaking/9.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/breaking/9.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_basalt.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_basalt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_basalt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_basalt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_clay.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_clay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_clay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_clay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_gold.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_granite.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_granite.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_granite.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_granite.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_iron.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_lapis.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_lapis.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_lapis.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_lapis.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_limestone.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_limestone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_limestone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_limestone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_marble.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_marble.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_marble.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_marble.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_netherrack.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_netherrack.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_netherrack.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_netherrack.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_permafrost.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_permafrost.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_permafrost.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_permafrost.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_polished_stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_polished_stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_polished_stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_polished_stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_polished_stone_mossy.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_polished_stone_mossy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_polished_stone_mossy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_polished_stone_mossy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_sandstone.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_sandstone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_sandstone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_sandstone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_slate.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_slate.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_slate.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_slate.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_steel.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/block/brick_stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/brick_stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/brick_stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/brick_stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cactus/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/cactus/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cactus/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cactus/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cactus/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/cactus/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cactus/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cactus/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cactus/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/cactus/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cactus/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cactus/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cake/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/cake/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cake/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cake/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cake/inner.png b/game/client/src/main/resources/assets/minecraft/textures/block/cake/inner.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cake/inner.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cake/inner.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cake/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/cake/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cake/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cake/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cake/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/cake/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cake/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cake/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/candle_soulwax.png b/game/client/src/main/resources/assets/minecraft/textures/block/candle_soulwax.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/candle_soulwax.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/candle_soulwax.png
diff --git a/src/main/resources/assets/minecraft/textures/block/capstone_marble/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/capstone_marble/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/capstone_marble/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/capstone_marble/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/capstone_marble/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/capstone_marble/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/capstone_marble/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/capstone_marble/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/carved_basalt.png b/game/client/src/main/resources/assets/minecraft/textures/block/carved_basalt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/carved_basalt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/carved_basalt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/carved_granite.png b/game/client/src/main/resources/assets/minecraft/textures/block/carved_granite.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/carved_granite.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/carved_granite.png
diff --git a/src/main/resources/assets/minecraft/textures/block/carved_limestone.png b/game/client/src/main/resources/assets/minecraft/textures/block/carved_limestone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/carved_limestone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/carved_limestone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/carved_marble.png b/game/client/src/main/resources/assets/minecraft/textures/block/carved_marble.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/carved_marble.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/carved_marble.png
diff --git a/src/main/resources/assets/minecraft/textures/block/carved_netherrack.png b/game/client/src/main/resources/assets/minecraft/textures/block/carved_netherrack.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/carved_netherrack.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/carved_netherrack.png
diff --git a/src/main/resources/assets/minecraft/textures/block/carved_permafrost.png b/game/client/src/main/resources/assets/minecraft/textures/block/carved_permafrost.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/carved_permafrost.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/carved_permafrost.png
diff --git a/src/main/resources/assets/minecraft/textures/block/carved_slate.png b/game/client/src/main/resources/assets/minecraft/textures/block/carved_slate.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/carved_slate.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/carved_slate.png
diff --git a/src/main/resources/assets/minecraft/textures/block/carved_stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/carved_stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/carved_stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/carved_stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_black/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_black/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_black/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_black/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_black/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_black/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_black/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_black/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_black/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_black/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_black/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_black/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_black/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_black/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_black/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_blue/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_blue/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_blue/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_blue/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_blue/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_blue/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_blue/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_blue/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_brown/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_brown/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_brown/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_brown/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_brown/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_brown/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_brown/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_brown/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_cyan/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_gray/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_gray/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_gray/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_gray/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_gray/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_gray/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_gray/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_gray/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_green/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_green/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_green/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_green/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_green/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_green/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_green/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_green/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_green/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_green/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_green/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_green/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_green/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_green/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_green/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lightblue/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lime/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lime/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lime/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lime/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lime/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lime/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_lime/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_lime/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_magenta/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_orange/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_orange/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_orange/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_orange/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_orange/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_orange/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_orange/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_orange/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_pink/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_pink/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_pink/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_pink/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_pink/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_pink/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_pink/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_pink/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_purple/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_purple/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_purple/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_purple/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_purple/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_purple/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_purple/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_purple/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_red/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_red/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_red/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_red/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_red/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_red/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_red/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_red/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_red/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_red/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_red/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_red/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_red/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_red/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_red/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_silver/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_silver/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_silver/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_silver/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_silver/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_silver/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_silver/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_silver/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_white/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_white/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_white/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_white/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_white/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_white/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_white/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_white/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_white/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_white/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_white/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_white/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_white/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_white/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_white/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/left_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/left_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/left_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/left_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/left_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/left_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/left_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/left_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/right_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/right_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/right_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/right_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/right_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/right_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/right_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/right_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/chest/planks_yellow/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobbled_basalt.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_basalt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobbled_basalt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobbled_basalt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobbled_granite.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_granite.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobbled_granite.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobbled_granite.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobbled_limestone.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_limestone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobbled_limestone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobbled_limestone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobbled_netherrack.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_igneous.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_igneous.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_igneous.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_igneous.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_igneous_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_igneous_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_igneous_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_igneous_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_mossy.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_mossy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_mossy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobbled_netherrack_mossy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobbled_permafrost.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_permafrost.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobbled_permafrost.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobbled_permafrost.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobbled_stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobbled_stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobbled_stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobbled_stone_mossy.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_stone_mossy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobbled_stone_mossy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobbled_stone_mossy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobbled_stone_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobbled_stone_retro.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobbled_stone_retro.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobbled_stone_retro.png
diff --git a/src/main/resources/assets/minecraft/textures/block/cobweb.png b/game/client/src/main/resources/assets/minecraft/textures/block/cobweb.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/cobweb.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/cobweb.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage0.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage0.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage0.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage1_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage1_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage1_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage1_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage1_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage1_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage1_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage1_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage2_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage2_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage2_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage2_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage2_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage2_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage2_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage2_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage3_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage3_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage3_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage3_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage3_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage3_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage3_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage3_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage4_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage4_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage4_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage4_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage4_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage4_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage4_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_pumpkin/stage4_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage0.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_wheat/stage0.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage0.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage1.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_wheat/stage1.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage1.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage2.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_wheat/stage2.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage2.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage3.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_wheat/stage3.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage3.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage4.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage4.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_wheat/stage4.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage4.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage5.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage5.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_wheat/stage5.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage5.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage6.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage6.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_wheat/stage6.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage6.png
diff --git a/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage7.png b/game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage7.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/crops_wheat/stage7.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/crops_wheat/stage7.png
diff --git a/src/main/resources/assets/minecraft/textures/block/deadbush.png b/game/client/src/main/resources/assets/minecraft/textures/block/deadbush.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/deadbush.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/deadbush.png
diff --git a/src/main/resources/assets/minecraft/textures/block/dirt.png b/game/client/src/main/resources/assets/minecraft/textures/block/dirt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/dirt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/dirt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/dirt_scorched.png b/game/client/src/main/resources/assets/minecraft/textures/block/dirt_scorched.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/dirt_scorched.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/dirt_scorched.png
diff --git a/src/main/resources/assets/minecraft/textures/block/dirt_scorched_rich.png b/game/client/src/main/resources/assets/minecraft/textures/block/dirt_scorched_rich.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/dirt_scorched_rich.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/dirt_scorched_rich.png
diff --git a/src/main/resources/assets/minecraft/textures/block/dispenser/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/dispenser/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/dispenser/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/dispenser/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/dispenser/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/dispenser/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/dispenser/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/dispenser/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/dispenser/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/dispenser/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/dispenser/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/dispenser/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/dispenser/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/dispenser/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/dispenser/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/dispenser/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/glass/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/glass/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/glass/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/glass/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/glass/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/glass/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/glass/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/glass/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/glass/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/glass/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/glass/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/glass/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/iron/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/iron/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/iron/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/iron/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/iron/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/iron/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/iron/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/iron/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/iron/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/iron/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/iron/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/iron/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_black/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_black/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_black/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_black/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_black/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_black/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_black/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_black/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_black/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_black/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_black/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_black/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_blue/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_blue/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_blue/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_blue/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_blue/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_blue/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_blue/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_blue/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_blue/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_blue/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_blue/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_blue/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_brown/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_brown/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_brown/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_brown/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_brown/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_brown/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_brown/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_brown/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_brown/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_brown/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_brown/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_brown/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_cyan/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_cyan/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_cyan/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_cyan/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_cyan/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_cyan/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_cyan/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_cyan/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_cyan/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_cyan/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_cyan/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_cyan/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_gray/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_gray/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_gray/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_gray/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_gray/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_gray/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_gray/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_gray/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_gray/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_gray/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_gray/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_gray/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_green/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_green/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_green/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_green/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_green/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_green/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_green/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_green/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_green/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_green/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_green/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_green/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lightblue/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_lime/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lime/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_lime/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lime/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_lime/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lime/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_lime/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lime/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_lime/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lime/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_lime/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_lime/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_magenta/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_magenta/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_magenta/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_magenta/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_magenta/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_magenta/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_magenta/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_magenta/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_magenta/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_magenta/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_magenta/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_magenta/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_orange/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_orange/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_orange/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_orange/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_orange/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_orange/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_orange/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_orange/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_orange/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_orange/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_orange/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_orange/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_pink/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_pink/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_pink/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_pink/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_pink/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_pink/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_pink/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_pink/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_pink/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_pink/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_pink/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_pink/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_purple/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_purple/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_purple/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_purple/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_purple/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_purple/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_purple/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_purple/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_purple/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_purple/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_purple/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_purple/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_red/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_red/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_red/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_red/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_red/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_red/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_red/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_red/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_red/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_red/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_red/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_red/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_silver/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_silver/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_silver/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_silver/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_silver/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_silver/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_silver/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_silver/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_silver/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_silver/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_silver/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_silver/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_white/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_white/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_white/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_white/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_white/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_white/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_white/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_white/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_white/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_white/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_white/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_white/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_yellow/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_yellow/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_yellow/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_yellow/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_yellow/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_yellow/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_yellow/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_yellow/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/planks_yellow/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/planks_yellow/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/planks_yellow/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/planks_yellow/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/steel/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/steel/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/steel/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/steel/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/steel/frame_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/steel/frame_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/steel/frame_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/steel/frame_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/door/steel/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/door/steel/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/door/steel/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/door/steel/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/farmland/dry.png b/game/client/src/main/resources/assets/minecraft/textures/block/farmland/dry.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/farmland/dry.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/farmland/dry.png
diff --git a/src/main/resources/assets/minecraft/textures/block/farmland/dry_fertilized_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/farmland/dry_fertilized_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/farmland/dry_fertilized_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/farmland/dry_fertilized_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/farmland/dry_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/farmland/dry_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/farmland/dry_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/farmland/dry_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/farmland/wet.png b/game/client/src/main/resources/assets/minecraft/textures/block/farmland/wet.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/farmland/wet.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/farmland/wet.png
diff --git a/src/main/resources/assets/minecraft/textures/block/farmland/wet_fertilized_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/farmland/wet_fertilized_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/farmland/wet_fertilized_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/farmland/wet_fertilized_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/farmland/wet_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/farmland/wet_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/farmland/wet_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/farmland/wet_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/fence_chain/center.png b/game/client/src/main/resources/assets/minecraft/textures/block/fence_chain/center.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/fence_chain/center.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/fence_chain/center.png
diff --git a/src/main/resources/assets/minecraft/textures/block/fence_chain/column.png b/game/client/src/main/resources/assets/minecraft/textures/block/fence_chain/column.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/fence_chain/column.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/fence_chain/column.png
diff --git a/src/main/resources/assets/minecraft/textures/block/fence_chain/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/fence_chain/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/fence_chain/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/fence_chain/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/fence_paper/center.png b/game/client/src/main/resources/assets/minecraft/textures/block/fence_paper/center.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/fence_paper/center.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/fence_paper/center.png
diff --git a/src/main/resources/assets/minecraft/textures/block/fence_paper/column.png b/game/client/src/main/resources/assets/minecraft/textures/block/fence_paper/column.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/fence_paper/column.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/fence_paper/column.png
diff --git a/src/main/resources/assets/minecraft/textures/block/fence_steel/center.png b/game/client/src/main/resources/assets/minecraft/textures/block/fence_steel/center.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/fence_steel/center.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/fence_steel/center.png
diff --git a/src/main/resources/assets/minecraft/textures/block/fence_steel/column.png b/game/client/src/main/resources/assets/minecraft/textures/block/fence_steel/column.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/fence_steel/column.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/fence_steel/column.png
diff --git a/src/main/resources/assets/minecraft/textures/block/fence_steel/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/fence_steel/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/fence_steel/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/fence_steel/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/fern.png b/game/client/src/main/resources/assets/minecraft/textures/block/fern.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/fern.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/fern.png
diff --git a/src/main/resources/assets/minecraft/textures/block/fire.png b/game/client/src/main/resources/assets/minecraft/textures/block/fire.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/fire.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/fire.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_lightblue/0.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_lightblue/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_lightblue/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_lightblue/0.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_lightblue/1.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_lightblue/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_lightblue/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_lightblue/1.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_lightblue/2.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_lightblue/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_lightblue/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_lightblue/2.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_lightblue/3.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_lightblue/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_lightblue/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_lightblue/3.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_orange/0.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_orange/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_orange/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_orange/0.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_orange/1.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_orange/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_orange/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_orange/1.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_orange/2.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_orange/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_orange/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_orange/2.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_orange/3.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_orange/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_orange/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_orange/3.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_pink/0.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_pink/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_pink/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_pink/0.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_pink/1.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_pink/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_pink/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_pink/1.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_pink/2.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_pink/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_pink/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_pink/2.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_pink/3.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_pink/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_pink/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_pink/3.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_purple/0.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_purple/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_purple/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_purple/0.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_purple/1.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_purple/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_purple/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_purple/1.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_purple/2.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_purple/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_purple/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_purple/2.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_purple/3.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_purple/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_purple/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_purple/3.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_red/0.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_red/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_red/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_red/0.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_red/1.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_red/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_red/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_red/1.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_red/2.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_red/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_red/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_red/2.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_red/3.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_red/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_red/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_red/3.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_yellow/0.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_yellow/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_yellow/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_yellow/0.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_yellow/1.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_yellow/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_yellow/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_yellow/1.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_yellow/2.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_yellow/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_yellow/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_yellow/2.png
diff --git a/src/main/resources/assets/minecraft/textures/block/flower_yellow/3.png b/game/client/src/main/resources/assets/minecraft/textures/block/flower_yellow/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/flower_yellow/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/flower_yellow/3.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_blast/active_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/active_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_blast/active_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/active_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_blast/active_front_filled.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/active_front_filled.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_blast/active_front_filled.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/active_front_filled.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_blast/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_blast/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_blast/idle_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/idle_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_blast/idle_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/idle_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_blast/idle_front_filled.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/idle_front_filled.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_blast/idle_front_filled.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/idle_front_filled.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_blast/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_blast/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_blast/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_blast/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_blast/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_stone/active_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/active_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_stone/active_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/active_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_stone/active_front_filled.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/active_front_filled.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_stone/active_front_filled.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/active_front_filled.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_stone/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_stone/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_stone/idle_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/idle_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_stone/idle_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/idle_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_stone/idle_front_filled.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/idle_front_filled.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_stone/idle_front_filled.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/idle_front_filled.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_stone/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_stone/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/furnace_stone/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/furnace_stone/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/furnace_stone/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/glass.png b/game/client/src/main/resources/assets/minecraft/textures/block/glass.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/glass.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/glass.png
diff --git a/src/main/resources/assets/minecraft/textures/block/glass_steel.png b/game/client/src/main/resources/assets/minecraft/textures/block/glass_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/glass_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/glass_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/block/glass_tinted.png b/game/client/src/main/resources/assets/minecraft/textures/block/glass_tinted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/glass_tinted.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/glass_tinted.png
diff --git a/src/main/resources/assets/minecraft/textures/block/glowstone.png b/game/client/src/main/resources/assets/minecraft/textures/block/glowstone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/glowstone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/glowstone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/granite.png b/game/client/src/main/resources/assets/minecraft/textures/block/granite.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/granite.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/granite.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass/side_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass/side_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass/side_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass/side_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass/snowy_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass/snowy_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass/snowy_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass/snowy_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass_path/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass_path/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass_path/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass_path/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass_path/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass_path/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass_path/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass_path/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass_path/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass_path/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass_path/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass_path/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass_retro/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass_retro/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass_retro/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass_retro/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass_retro/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass_retro/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass_retro/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass_retro/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass_retro/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass_retro/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass_retro/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass_retro/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass_scorched/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass_scorched/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass_scorched/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass_scorched/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass_scorched/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass_scorched/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass_scorched/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass_scorched/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/grass_scorched/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/grass_scorched/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/grass_scorched/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/grass_scorched/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/gravel.png b/game/client/src/main/resources/assets/minecraft/textures/block/gravel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/gravel.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/gravel.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ice.png b/game/client/src/main/resources/assets/minecraft/textures/block/ice.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ice.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ice.png
diff --git a/src/main/resources/assets/minecraft/textures/block/jar.png b/game/client/src/main/resources/assets/minecraft/textures/block/jar.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/jar.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/jar.png
diff --git a/src/main/resources/assets/minecraft/textures/block/jar_dirt.png b/game/client/src/main/resources/assets/minecraft/textures/block/jar_dirt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/jar_dirt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/jar_dirt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/jukebox/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/jukebox/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/jukebox/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/jukebox/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/jukebox/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/jukebox/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/jukebox/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/jukebox/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/jukebox/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/jukebox/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/jukebox/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/jukebox/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ladder.png b/game/client/src/main/resources/assets/minecraft/textures/block/ladder.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ladder.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ladder.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/black_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/black_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/black_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/black_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/black_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/black_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/black_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/black_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/blue_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/blue_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/blue_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/blue_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/blue_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/blue_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/blue_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/blue_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/brown_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/brown_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/brown_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/brown_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/brown_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/brown_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/brown_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/brown_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/cyan_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/cyan_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/cyan_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/cyan_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/cyan_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/cyan_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/cyan_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/cyan_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/gray_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/gray_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/gray_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/gray_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/gray_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/gray_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/gray_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/gray_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/green_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/green_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/green_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/green_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/green_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/green_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/green_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/green_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/lightblue_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/lightblue_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/lightblue_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/lightblue_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/lightblue_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/lightblue_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/lightblue_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/lightblue_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/lime_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/lime_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/lime_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/lime_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/lime_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/lime_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/lime_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/lime_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/magenta_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/magenta_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/magenta_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/magenta_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/magenta_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/magenta_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/magenta_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/magenta_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/orange_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/orange_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/orange_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/orange_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/orange_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/orange_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/orange_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/orange_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/pink_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/pink_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/pink_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/pink_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/pink_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/pink_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/pink_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/pink_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/purple_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/purple_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/purple_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/purple_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/purple_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/purple_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/purple_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/purple_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/red_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/red_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/red_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/red_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/red_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/red_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/red_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/red_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/silver_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/silver_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/silver_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/silver_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/silver_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/silver_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/silver_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/silver_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/white_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/white_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/white_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/white_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/white_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/white_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/white_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/white_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/yellow_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/yellow_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/yellow_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/yellow_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lamp/yellow_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/lamp/yellow_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lamp/yellow_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lamp/yellow_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lantern_firefly/blue.png b/game/client/src/main/resources/assets/minecraft/textures/block/lantern_firefly/blue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lantern_firefly/blue.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lantern_firefly/blue.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lantern_firefly/green.png b/game/client/src/main/resources/assets/minecraft/textures/block/lantern_firefly/green.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lantern_firefly/green.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lantern_firefly/green.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lantern_firefly/orange.png b/game/client/src/main/resources/assets/minecraft/textures/block/lantern_firefly/orange.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lantern_firefly/orange.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lantern_firefly/orange.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lantern_firefly/red.png b/game/client/src/main/resources/assets/minecraft/textures/block/lantern_firefly/red.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lantern_firefly/red.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lantern_firefly/red.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lava_flowing.png b/game/client/src/main/resources/assets/minecraft/textures/block/lava_flowing.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lava_flowing.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lava_flowing.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lava_still.png b/game/client/src/main/resources/assets/minecraft/textures/block/lava_still.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lava_still.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lava_still.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/birch.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/birch.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/birch.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/birch.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/birch_fancy.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/birch_fancy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/birch_fancy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/birch_fancy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/caatinga.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/caatinga.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/caatinga.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/caatinga.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/caatinga_fancy.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/caatinga_fancy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/caatinga_fancy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/caatinga_fancy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/cacao.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/cacao.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage0.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage0.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage0.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage1.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage1.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage1.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage2.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage2.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage2.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage3.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage3.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao_bean_stage3.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/cacao_fancy.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao_fancy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/cacao_fancy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/cacao_fancy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/cherry.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/cherry.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/cherry.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/cherry.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/cherry_fancy.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/cherry_fancy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/cherry_fancy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/cherry_fancy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/cherry_flowering_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/cherry_flowering_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/cherry_flowering_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/cherry_flowering_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/cherry_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/cherry_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/cherry_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/cherry_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/eucalyptus.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/eucalyptus.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/eucalyptus.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/eucalyptus.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/eucalyptus_fancy.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/eucalyptus_fancy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/eucalyptus_fancy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/eucalyptus_fancy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/oak.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/oak.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/oak.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/oak.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/oak_fancy.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/oak_fancy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/oak_fancy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/oak_fancy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/oak_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/oak_retro.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/oak_retro.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/oak_retro.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/oak_retro_fancy.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/oak_retro_fancy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/oak_retro_fancy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/oak_retro_fancy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/palm.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/palm.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/palm.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/palm.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/palm_fancy.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/palm_fancy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/palm_fancy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/palm_fancy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/pine.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/pine.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/pine.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/pine.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/pine_fancy.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/pine_fancy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/pine_fancy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/pine_fancy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/shrub.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/shrub.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/shrub.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/shrub.png
diff --git a/src/main/resources/assets/minecraft/textures/block/leaves/shrub_fancy.png b/game/client/src/main/resources/assets/minecraft/textures/block/leaves/shrub_fancy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/leaves/shrub_fancy.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/leaves/shrub_fancy.png
diff --git a/src/main/resources/assets/minecraft/textures/block/lever_cobbled_stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/lever_cobbled_stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/lever_cobbled_stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/lever_cobbled_stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/limestone.png b/game/client/src/main/resources/assets/minecraft/textures/block/limestone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/limestone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/limestone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/birch_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/birch_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/birch_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/birch_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/birch_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/birch_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/birch_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/birch_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/cherry_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/cherry_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/cherry_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/cherry_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/cherry_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/cherry_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/cherry_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/cherry_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/eucalyptus_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/eucalyptus_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/eucalyptus_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/eucalyptus_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/eucalyptus_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/eucalyptus_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/eucalyptus_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/eucalyptus_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/oak_mossy_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/oak_mossy_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/oak_mossy_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/oak_mossy_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/oak_mossy_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/oak_mossy_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/oak_mossy_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/oak_mossy_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/oak_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/oak_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/oak_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/oak_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/oak_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/oak_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/oak_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/oak_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/palm_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/palm_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/palm_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/palm_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/palm_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/palm_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/palm_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/palm_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/pine_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/pine_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/pine_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/pine_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/pine_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/pine_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/pine_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/pine_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/thorn_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/thorn_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/thorn_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/thorn_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/log/thorn_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/log/thorn_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/log/thorn_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/log/thorn_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/marble.png b/game/client/src/main/resources/assets/minecraft/textures/block/marble.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/marble.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/marble.png
diff --git a/src/main/resources/assets/minecraft/textures/block/mesh.png b/game/client/src/main/resources/assets/minecraft/textures/block/mesh.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/mesh.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/mesh.png
diff --git a/src/main/resources/assets/minecraft/textures/block/mesh_gold.png b/game/client/src/main/resources/assets/minecraft/textures/block/mesh_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/mesh_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/mesh_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/block/mobspawner.png b/game/client/src/main/resources/assets/minecraft/textures/block/mobspawner.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/mobspawner.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/mobspawner.png
diff --git a/src/main/resources/assets/minecraft/textures/block/moss_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/moss_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/moss_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/moss_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/motion_sensor/active_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/motion_sensor/active_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/motion_sensor/active_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/motion_sensor/active_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/motion_sensor/active_front_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/motion_sensor/active_front_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/motion_sensor/active_front_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/motion_sensor/active_front_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/motion_sensor/idle_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/motion_sensor/idle_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/motion_sensor/idle_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/motion_sensor/idle_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/motion_sensor/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/motion_sensor/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/motion_sensor/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/motion_sensor/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/mud.png b/game/client/src/main/resources/assets/minecraft/textures/block/mud.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/mud.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/mud.png
diff --git a/src/main/resources/assets/minecraft/textures/block/mud_baked.png b/game/client/src/main/resources/assets/minecraft/textures/block/mud_baked.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/mud_baked.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/mud_baked.png
diff --git a/src/main/resources/assets/minecraft/textures/block/mushroom_brown.png b/game/client/src/main/resources/assets/minecraft/textures/block/mushroom_brown.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/mushroom_brown.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/mushroom_brown.png
diff --git a/src/main/resources/assets/minecraft/textures/block/mushroom_red.png b/game/client/src/main/resources/assets/minecraft/textures/block/mushroom_red.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/mushroom_red.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/mushroom_red.png
diff --git a/src/main/resources/assets/minecraft/textures/block/netherrack.png b/game/client/src/main/resources/assets/minecraft/textures/block/netherrack.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/netherrack.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/netherrack.png
diff --git a/src/main/resources/assets/minecraft/textures/block/noteblock.png b/game/client/src/main/resources/assets/minecraft/textures/block/noteblock.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/noteblock.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/noteblock.png
diff --git a/src/main/resources/assets/minecraft/textures/block/obsidian.png b/game/client/src/main/resources/assets/minecraft/textures/block/obsidian.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/obsidian.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/obsidian.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/coal/basalt.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/basalt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/coal/basalt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/basalt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/coal/granite.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/granite.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/coal/granite.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/granite.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/coal/limestone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/limestone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/coal/limestone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/limestone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/coal/permafrost.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/permafrost.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/coal/permafrost.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/permafrost.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/coal/stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/coal/stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/coal/stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/diamond/basalt.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/basalt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/diamond/basalt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/basalt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/diamond/granite.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/granite.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/diamond/granite.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/granite.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/diamond/limestone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/limestone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/diamond/limestone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/limestone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/diamond/permafrost.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/permafrost.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/diamond/permafrost.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/permafrost.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/diamond/stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/diamond/stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/diamond/stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/gold/basalt.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/basalt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/gold/basalt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/basalt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/gold/granite.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/granite.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/gold/granite.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/granite.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/gold/limestone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/limestone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/gold/limestone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/limestone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/gold/permafrost.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/permafrost.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/gold/permafrost.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/permafrost.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/gold/stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/gold/stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/gold/stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/iron/basalt.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/basalt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/iron/basalt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/basalt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/iron/granite.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/granite.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/iron/granite.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/granite.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/iron/limestone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/limestone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/iron/limestone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/limestone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/iron/permafrost.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/permafrost.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/iron/permafrost.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/permafrost.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/iron/stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/iron/stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/iron/stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/lapis/basalt.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/lapis/basalt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/lapis/basalt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/lapis/basalt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/lapis/granite.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/lapis/granite.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/lapis/granite.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/lapis/granite.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/lapis/limestone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/lapis/limestone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/lapis/limestone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/lapis/limestone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/lapis/permafrost.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/lapis/permafrost.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/lapis/permafrost.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/lapis/permafrost.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/lapis/stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/lapis/stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/lapis/stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/lapis/stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/nethercoal/netherrack.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/nethercoal/netherrack.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/nethercoal/netherrack.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/nethercoal/netherrack.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/nethercoal/netherrack_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/nethercoal/netherrack_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/nethercoal/netherrack_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/nethercoal/netherrack_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/redstone/basalt.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/basalt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/redstone/basalt.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/basalt.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/redstone/granite.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/granite.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/redstone/granite.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/granite.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/redstone/limestone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/limestone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/redstone/limestone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/limestone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/redstone/overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/redstone/overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/redstone/permafrost.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/permafrost.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/redstone/permafrost.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/permafrost.png
diff --git a/src/main/resources/assets/minecraft/textures/block/ore/redstone/stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/ore/redstone/stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/ore/redstone/stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/paperwall.png b/game/client/src/main/resources/assets/minecraft/textures/block/paperwall.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/paperwall.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/paperwall.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pebbles/0.png b/game/client/src/main/resources/assets/minecraft/textures/block/pebbles/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pebbles/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pebbles/0.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pebbles/1.png b/game/client/src/main/resources/assets/minecraft/textures/block/pebbles/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pebbles/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pebbles/1.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pebbles/2.png b/game/client/src/main/resources/assets/minecraft/textures/block/pebbles/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pebbles/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pebbles/2.png
diff --git a/src/main/resources/assets/minecraft/textures/block/permafrost.png b/game/client/src/main/resources/assets/minecraft/textures/block/permafrost.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/permafrost.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/permafrost.png
diff --git a/src/main/resources/assets/minecraft/textures/block/permaice.png b/game/client/src/main/resources/assets/minecraft/textures/block/permaice.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/permaice.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/permaice.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pillar_marble/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/pillar_marble/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pillar_marble/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pillar_marble/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pillar_marble/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/pillar_marble/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pillar_marble/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pillar_marble/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston/face.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston/face.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston/face.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston/face.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston_steel/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston_steel/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston_steel/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston_steel/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston_steel/face.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston_steel/face.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston_steel/face.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston_steel/face.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston_steel/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston_steel/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston_steel/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston_steel/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston_steel/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston_steel/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston_steel/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston_steel/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston_sticky/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston_sticky/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston_sticky/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston_sticky/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston_sticky/face.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston_sticky/face.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston_sticky/face.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston_sticky/face.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston_sticky/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston_sticky/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston_sticky/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston_sticky/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/piston_sticky/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/piston_sticky/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/piston_sticky/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/piston_sticky/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/black.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/black.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/black.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/black.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/blue.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/blue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/blue.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/blue.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/brown.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/brown.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/brown.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/brown.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/cyan.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/cyan.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/cyan.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/cyan.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/gray.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/gray.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/gray.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/gray.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/green.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/green.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/green.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/green.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/lightblue.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/lightblue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/lightblue.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/lightblue.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/lime.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/lime.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/lime.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/lime.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/magenta.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/magenta.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/magenta.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/magenta.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/oak.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/oak.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/oak.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/oak.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/orange.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/orange.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/orange.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/orange.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/pink.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/pink.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/pink.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/pink.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/purple.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/purple.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/purple.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/purple.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/red.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/red.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/red.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/red.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/silver.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/silver.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/silver.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/silver.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/white.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/white.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/white.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/white.png
diff --git a/src/main/resources/assets/minecraft/textures/block/planks/yellow.png b/game/client/src/main/resources/assets/minecraft/textures/block/planks/yellow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/planks/yellow.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/planks/yellow.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_basalt_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_basalt_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_basalt_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_basalt_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_basalt_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_basalt_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_basalt_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_basalt_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_granite_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_granite_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_granite_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_granite_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_granite_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_granite_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_granite_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_granite_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_limestone_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_limestone_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_limestone_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_limestone_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_limestone_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_limestone_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_limestone_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_limestone_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_netherrack_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_netherrack_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_netherrack_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_netherrack_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_netherrack_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_netherrack_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_netherrack_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_netherrack_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_permafrost_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_permafrost_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_permafrost_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_permafrost_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_permafrost_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_permafrost_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_permafrost_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_permafrost_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_slate_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_slate_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_slate_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_slate_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_slate_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_slate_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_slate_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_slate_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_stone_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_stone_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_stone_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_stone_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/polished_stone_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/polished_stone_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/polished_stone_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/polished_stone_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/PortalColors.xcf b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/PortalColors.xcf
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/PortalColors.xcf
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/PortalColors.xcf
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/black.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/black.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/black.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/blue.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/brown.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/cyan.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/gray.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/green.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/green.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/green.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/lightblue.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/lime.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/magenta.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/orange.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/pink.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/purple.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/red.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/red.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/red.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/silver.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/white.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/white.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/white.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_nether/yellow.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/PortalColors.xcf b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/PortalColors.xcf
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/PortalColors.xcf
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/PortalColors.xcf
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/black.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/blue.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/brown.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/cyan.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/gray.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/green.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/lightblue.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/lime.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/magenta.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/orange.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/pink.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/purple.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/red.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/silver.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/white.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png
diff --git a/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/block/portal_paradise/yellow.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/block/pumice.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumice.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumice.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumice.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumice_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumice_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumice_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumice_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_carved/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_carved/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_carved/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_carved/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_carved_lit/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_pie/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/inner.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/inner.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_pie/inner.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/inner.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_pie/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_pie/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_pie/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/front_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/front_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/front_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/front_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/pumpkin_redstone/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/rail/straight.png b/game/client/src/main/resources/assets/minecraft/textures/block/rail/straight.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/rail/straight.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rail/straight.png
diff --git a/src/main/resources/assets/minecraft/textures/block/rail/turn.png b/game/client/src/main/resources/assets/minecraft/textures/block/rail/turn.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/rail/turn.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rail/turn.png
diff --git a/src/main/resources/assets/minecraft/textures/block/rail_detector/active_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/rail_detector/active_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/rail_detector/active_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rail_detector/active_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/rail_detector/straight.png b/game/client/src/main/resources/assets/minecraft/textures/block/rail_detector/straight.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/rail_detector/straight.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rail_detector/straight.png
diff --git a/src/main/resources/assets/minecraft/textures/block/rail_powered/active.png b/game/client/src/main/resources/assets/minecraft/textures/block/rail_powered/active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/rail_powered/active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rail_powered/active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/rail_powered/active_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/rail_powered/active_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/rail_powered/active_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rail_powered/active_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/rail_powered/idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/rail_powered/idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/rail_powered/idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rail_powered/idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/repeater/active_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/block/repeater/active_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/repeater/active_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/repeater/active_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/block/repeater/active_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/repeater/active_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/repeater/active_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/repeater/active_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/repeater/idle_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/repeater/idle_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/repeater/idle_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/repeater/idle_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/rope.png b/game/client/src/main/resources/assets/minecraft/textures/block/rope.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/rope.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/rope.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sand.png b/game/client/src/main/resources/assets/minecraft/textures/block/sand.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sand.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sand.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sandstone/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/sandstone/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sandstone/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sandstone/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sandstone/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/sandstone/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sandstone/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sandstone/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sandstone/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/sandstone/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sandstone/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sandstone/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sapling/birch.png b/game/client/src/main/resources/assets/minecraft/textures/block/sapling/birch.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sapling/birch.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sapling/birch.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sapling/cacao.png b/game/client/src/main/resources/assets/minecraft/textures/block/sapling/cacao.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sapling/cacao.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sapling/cacao.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sapling/cherry.png b/game/client/src/main/resources/assets/minecraft/textures/block/sapling/cherry.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sapling/cherry.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sapling/cherry.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sapling/eucalyptus.png b/game/client/src/main/resources/assets/minecraft/textures/block/sapling/eucalyptus.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sapling/eucalyptus.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sapling/eucalyptus.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sapling/oak.png b/game/client/src/main/resources/assets/minecraft/textures/block/sapling/oak.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sapling/oak.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sapling/oak.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sapling/oak_retro.png b/game/client/src/main/resources/assets/minecraft/textures/block/sapling/oak_retro.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sapling/oak_retro.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sapling/oak_retro.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sapling/palm.png b/game/client/src/main/resources/assets/minecraft/textures/block/sapling/palm.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sapling/palm.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sapling/palm.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sapling/pine.png b/game/client/src/main/resources/assets/minecraft/textures/block/sapling/pine.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sapling/pine.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sapling/pine.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sapling/shrub.png b/game/client/src/main/resources/assets/minecraft/textures/block/sapling/shrub.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sapling/shrub.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sapling/shrub.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sapling/thorn.png b/game/client/src/main/resources/assets/minecraft/textures/block/sapling/thorn.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sapling/thorn.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sapling/thorn.png
diff --git a/src/main/resources/assets/minecraft/textures/block/seat/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/seat/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/seat/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/seat/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/seat/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/seat/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/seat/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/seat/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/seat/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/seat/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/seat/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/seat/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/slate_side.png b/game/client/src/main/resources/assets/minecraft/textures/block/slate_side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/slate_side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/slate_side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/slate_top.png b/game/client/src/main/resources/assets/minecraft/textures/block/slate_top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/slate_top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/slate_top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/soulsand.png b/game/client/src/main/resources/assets/minecraft/textures/block/soulsand.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/soulsand.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/soulsand.png
diff --git a/src/main/resources/assets/minecraft/textures/block/soulschist.png b/game/client/src/main/resources/assets/minecraft/textures/block/soulschist.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/soulschist.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/soulschist.png
diff --git a/src/main/resources/assets/minecraft/textures/block/spikes/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/spikes/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/spikes/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/spikes/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/spikes/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/spikes/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/spikes/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/spikes/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/spikes/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/spikes/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/spikes/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/spikes/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/spinifex.png b/game/client/src/main/resources/assets/minecraft/textures/block/spinifex.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/spinifex.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/spinifex.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sponge.png b/game/client/src/main/resources/assets/minecraft/textures/block/sponge.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sponge.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sponge.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sponge_wet.png b/game/client/src/main/resources/assets/minecraft/textures/block/sponge_wet.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sponge_wet.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sponge_wet.png
diff --git a/src/main/resources/assets/minecraft/textures/block/stone.png b/game/client/src/main/resources/assets/minecraft/textures/block/stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/stone.png
diff --git a/src/main/resources/assets/minecraft/textures/block/sugarcane.png b/game/client/src/main/resources/assets/minecraft/textures/block/sugarcane.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/sugarcane.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/sugarcane.png
diff --git a/src/main/resources/assets/minecraft/textures/block/tallgrass.png b/game/client/src/main/resources/assets/minecraft/textures/block/tallgrass.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/tallgrass.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/tallgrass.png
diff --git a/src/main/resources/assets/minecraft/textures/block/texture_missing.png b/game/client/src/main/resources/assets/minecraft/textures/block/texture_missing.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/texture_missing.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/texture_missing.png
diff --git a/src/main/resources/assets/minecraft/textures/block/texture_unassigned.png b/game/client/src/main/resources/assets/minecraft/textures/block/texture_unassigned.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/texture_unassigned.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/texture_unassigned.png
diff --git a/src/main/resources/assets/minecraft/textures/block/tnt/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/tnt/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/tnt/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/tnt/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/tnt/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/tnt/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/tnt/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/tnt/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/tnt/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/tnt/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/tnt/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/tnt/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/torch_coal.png b/game/client/src/main/resources/assets/minecraft/textures/block/torch_coal.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/torch_coal.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/torch_coal.png
diff --git a/src/main/resources/assets/minecraft/textures/block/torch_redstone_active.png b/game/client/src/main/resources/assets/minecraft/textures/block/torch_redstone_active.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/torch_redstone_active.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/torch_redstone_active.png
diff --git a/src/main/resources/assets/minecraft/textures/block/torch_redstone_idle.png b/game/client/src/main/resources/assets/minecraft/textures/block/torch_redstone_idle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/torch_redstone_idle.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/torch_redstone_idle.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/glass/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/glass/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/glass/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/glass/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/glass/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/glass/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/glass/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/glass/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/iron/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/iron/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/iron/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/iron/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/iron/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/iron/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/iron/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/iron/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_black/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_black/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_black/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_black/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_black/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_black/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_black/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_black/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_blue/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_blue/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_blue/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_blue/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_blue/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_blue/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_blue/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_blue/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_brown/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_brown/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_brown/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_brown/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_brown/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_brown/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_brown/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_brown/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_cyan/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_cyan/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_cyan/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_cyan/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_cyan/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_cyan/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_cyan/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_cyan/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_gray/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_gray/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_gray/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_gray/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_gray/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_gray/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_gray/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_gray/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_green/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_green/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_green/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_green/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_green/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_green/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_green/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_green/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lightblue/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lightblue/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lightblue/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lightblue/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lightblue/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lightblue/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lightblue/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lightblue/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lime/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lime/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lime/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lime/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lime/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lime/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lime/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_lime/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_magenta/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_magenta/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_magenta/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_magenta/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_magenta/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_magenta/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_magenta/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_magenta/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_orange/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_orange/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_orange/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_orange/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_orange/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_orange/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_orange/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_orange/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_pink/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_pink/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_pink/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_pink/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_pink/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_pink/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_pink/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_pink/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_purple/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_purple/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_purple/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_purple/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_purple/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_purple/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_purple/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_purple/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_red/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_red/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_red/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_red/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_red/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_red/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_red/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_red/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_silver/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_silver/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_silver/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_silver/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_silver/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_silver/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_silver/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_silver/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_white/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_white/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_white/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_white/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_white/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_white/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_white/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_white/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_yellow/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_yellow/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_yellow/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_yellow/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_yellow/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_yellow/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/planks_yellow/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/planks_yellow/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/steel/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/steel/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/steel/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/steel/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trapdoor/steel/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/steel/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trapdoor/steel/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trapdoor/steel/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trommel/active_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/trommel/active_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trommel/active_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trommel/active_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trommel/active_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/trommel/active_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trommel/active_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trommel/active_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trommel/active_front_background.png b/game/client/src/main/resources/assets/minecraft/textures/block/trommel/active_front_background.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trommel/active_front_background.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trommel/active_front_background.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trommel/active_front_foreground.png b/game/client/src/main/resources/assets/minecraft/textures/block/trommel/active_front_foreground.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trommel/active_front_foreground.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trommel/active_front_foreground.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trommel/idle_back.png b/game/client/src/main/resources/assets/minecraft/textures/block/trommel/idle_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trommel/idle_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trommel/idle_back.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trommel/idle_front.png b/game/client/src/main/resources/assets/minecraft/textures/block/trommel/idle_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trommel/idle_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trommel/idle_front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trommel/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/trommel/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trommel/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trommel/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trommel/side_slot.png b/game/client/src/main/resources/assets/minecraft/textures/block/trommel/side_slot.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trommel/side_slot.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trommel/side_slot.png
diff --git a/src/main/resources/assets/minecraft/textures/block/trommel/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/trommel/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/trommel/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/trommel/top.png
diff --git a/src/main/resources/assets/minecraft/textures/block/water_flowing.png b/game/client/src/main/resources/assets/minecraft/textures/block/water_flowing.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/water_flowing.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/water_flowing.png
diff --git a/src/main/resources/assets/minecraft/textures/block/water_still.png b/game/client/src/main/resources/assets/minecraft/textures/block/water_still.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/water_still.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/water_still.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wire_redstone_cross.png b/game/client/src/main/resources/assets/minecraft/textures/block/wire_redstone_cross.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wire_redstone_cross.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wire_redstone_cross.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wire_redstone_straight.png b/game/client/src/main/resources/assets/minecraft/textures/block/wire_redstone_straight.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wire_redstone_straight.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wire_redstone_straight.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/black.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/black.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/black.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/black.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/blue.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/blue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/blue.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/blue.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/brown.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/brown.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/brown.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/brown.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/cyan.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/cyan.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/cyan.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/cyan.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/gray.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/gray.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/gray.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/gray.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/green.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/green.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/green.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/green.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/lightblue.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/lightblue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/lightblue.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/lightblue.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/lime.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/lime.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/lime.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/lime.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/magenta.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/magenta.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/magenta.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/magenta.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/orange.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/orange.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/orange.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/orange.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/pink.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/pink.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/pink.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/pink.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/purple.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/purple.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/purple.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/purple.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/red.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/red.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/red.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/red.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/silver.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/silver.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/silver.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/silver.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/white.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/white.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/white.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/white.png
diff --git a/src/main/resources/assets/minecraft/textures/block/wool/yellow.png b/game/client/src/main/resources/assets/minecraft/textures/block/wool/yellow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/wool/yellow.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/wool/yellow.png
diff --git a/src/main/resources/assets/minecraft/textures/block/workbench/bottom.png b/game/client/src/main/resources/assets/minecraft/textures/block/workbench/bottom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/workbench/bottom.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/workbench/bottom.png
diff --git a/src/main/resources/assets/minecraft/textures/block/workbench/front.png b/game/client/src/main/resources/assets/minecraft/textures/block/workbench/front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/workbench/front.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/workbench/front.png
diff --git a/src/main/resources/assets/minecraft/textures/block/workbench/side.png b/game/client/src/main/resources/assets/minecraft/textures/block/workbench/side.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/workbench/side.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/workbench/side.png
diff --git a/src/main/resources/assets/minecraft/textures/block/workbench/top.png b/game/client/src/main/resources/assets/minecraft/textures/block/workbench/top.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/block/workbench/top.png
rename to game/client/src/main/resources/assets/minecraft/textures/block/workbench/top.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/birch/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/birch/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/birch/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/birch/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/birch/overworld_fall.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/birch/overworld_fall.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/birch/overworld_fall.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/birch/overworld_fall.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/birch/overworld_winter.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/birch/overworld_winter.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/birch/overworld_winter.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/birch/overworld_winter.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/cacao/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/cacao/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/cacao/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/cacao/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/cherry/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/cherry/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/cherry/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/cherry/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_fall.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_fall.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_fall.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_fall.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_summer.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_summer.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_summer.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_summer.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_winter.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_winter.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_winter.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/cherry/overworld_winter.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/eucalyptus/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/eucalyptus/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/eucalyptus/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/eucalyptus/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/grass/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/grass/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/grass/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/grass/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/grass/hell.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/grass/hell.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/grass/hell.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/grass/hell.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/grass/overworld_fall.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/grass/overworld_fall.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/grass/overworld_fall.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/grass/overworld_fall.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/grass/overworld_spring.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/grass/overworld_spring.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/grass/overworld_spring.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/grass/overworld_spring.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/grass/overworld_winter.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/grass/overworld_winter.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/grass/overworld_winter.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/grass/overworld_winter.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/grass/paradise_gold.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/grass/paradise_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/grass/paradise_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/grass/paradise_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/grass/paradise_silver.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/grass/paradise_silver.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/grass/paradise_silver.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/grass/paradise_silver.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/oak/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/oak/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/oak/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/oak/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/oak/overworld_fall.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/oak/overworld_fall.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/oak/overworld_fall.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/oak/overworld_fall.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/oak/overworld_winter.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/oak/overworld_winter.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/oak/overworld_winter.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/oak/overworld_winter.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/oak/paradise_gold.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/oak/paradise_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/oak/paradise_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/oak/paradise_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/oak/paradise_silver.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/oak/paradise_silver.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/oak/paradise_silver.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/oak/paradise_silver.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/palm/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/palm/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/palm/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/palm/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/pine/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/pine/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/pine/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/pine/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/shrub/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/shrub/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/shrub/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/shrub/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/shrub/overworld_fall.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/shrub/overworld_fall.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/shrub/overworld_fall.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/shrub/overworld_fall.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/shrub/overworld_winter.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/shrub/overworld_winter.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/shrub/overworld_winter.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/shrub/overworld_winter.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/stars/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/stars/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/stars/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/stars/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/thorn/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/thorn/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/thorn/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/thorn/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/thorn/overworld_spring.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/thorn/overworld_spring.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/thorn/overworld_spring.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/thorn/overworld_spring.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/thorn/overworld_winter.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/thorn/overworld_winter.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/thorn/overworld_winter.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/thorn/overworld_winter.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/water/default.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/water/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/water/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/water/default.png
diff --git a/src/main/resources/assets/minecraft/textures/colormap/water/nether.png b/game/client/src/main/resources/assets/minecraft/textures/colormap/water/nether.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/colormap/water/nether.png
rename to game/client/src/main/resources/assets/minecraft/textures/colormap/water/nether.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/anactualsign.png b/game/client/src/main/resources/assets/minecraft/textures/entity/anactualsign.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/anactualsign.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/anactualsign.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/arrows.png b/game/client/src/main/resources/assets/minecraft/textures/entity/arrows.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/arrows.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/arrows.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/boat.png b/game/client/src/main/resources/assets/minecraft/textures/entity/boat.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/boat.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/boat.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/cannonball.png b/game/client/src/main/resources/assets/minecraft/textures/entity/cannonball.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/cannonball.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/cannonball.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/cart.png b/game/client/src/main/resources/assets/minecraft/textures/entity/cart.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/cart.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/cart.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/char/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/char/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/char/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/char/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/chicken/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/chicken/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/chicken/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/chicken/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/chicken/1.png b/game/client/src/main/resources/assets/minecraft/textures/entity/chicken/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/chicken/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/chicken/1.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/chicken/2.png b/game/client/src/main/resources/assets/minecraft/textures/entity/chicken/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/chicken/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/chicken/2.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/chicken/3.png b/game/client/src/main/resources/assets/minecraft/textures/entity/chicken/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/chicken/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/chicken/3.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/chicken/variants.json b/game/client/src/main/resources/assets/minecraft/textures/entity/chicken/variants.json
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/chicken/variants.json
rename to game/client/src/main/resources/assets/minecraft/textures/entity/chicken/variants.json
diff --git a/src/main/resources/assets/minecraft/textures/entity/cow/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/cow/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/cow/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/cow/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/cow/1.png b/game/client/src/main/resources/assets/minecraft/textures/entity/cow/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/cow/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/cow/1.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/cow/2.png b/game/client/src/main/resources/assets/minecraft/textures/entity/cow/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/cow/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/cow/2.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/cow/3.png b/game/client/src/main/resources/assets/minecraft/textures/entity/cow/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/cow/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/cow/3.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/cow/variants.json b/game/client/src/main/resources/assets/minecraft/textures/entity/cow/variants.json
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/cow/variants.json
rename to game/client/src/main/resources/assets/minecraft/textures/entity/cow/variants.json
diff --git a/src/main/resources/assets/minecraft/textures/entity/creeper/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/creeper/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/creeper/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/creeper/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/door.png b/game/client/src/main/resources/assets/minecraft/textures/entity/door.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/door.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/door.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/flag.png b/game/client/src/main/resources/assets/minecraft/textures/entity/flag.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/flag.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/flag.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/flag_ui.png b/game/client/src/main/resources/assets/minecraft/textures/entity/flag_ui.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/flag_ui.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/flag_ui.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/ghast/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/ghast/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/ghast/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/ghast/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/ghast_fire/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/ghast_fire/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/ghast_fire/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/ghast_fire/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/pig/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/pig/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/pig/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/pig/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/pig/1.png b/game/client/src/main/resources/assets/minecraft/textures/entity/pig/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/pig/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/pig/1.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/pig/2.png b/game/client/src/main/resources/assets/minecraft/textures/entity/pig/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/pig/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/pig/2.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/pig/3.png b/game/client/src/main/resources/assets/minecraft/textures/entity/pig/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/pig/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/pig/3.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/pig/4.png b/game/client/src/main/resources/assets/minecraft/textures/entity/pig/4.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/pig/4.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/pig/4.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/pig/variants.json b/game/client/src/main/resources/assets/minecraft/textures/entity/pig/variants.json
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/pig/variants.json
rename to game/client/src/main/resources/assets/minecraft/textures/entity/pig/variants.json
diff --git a/src/main/resources/assets/minecraft/textures/entity/pigman/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/pigman/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/pigman/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/pigman/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/pigzombie/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/pigzombie/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/pigzombie/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/pigzombie/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/saddle.png b/game/client/src/main/resources/assets/minecraft/textures/entity/saddle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/saddle.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/saddle.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/scorpion/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/scorpion/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/scorpion/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/scorpion/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/sheep/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/sheep/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/sheep/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/sheep/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/sheep_fur.png b/game/client/src/main/resources/assets/minecraft/textures/entity/sheep_fur.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/sheep_fur.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/sheep_fur.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/sheep_overlay.png b/game/client/src/main/resources/assets/minecraft/textures/entity/sheep_overlay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/sheep_overlay.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/sheep_overlay.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/sign.png b/game/client/src/main/resources/assets/minecraft/textures/entity/sign.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/sign.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/sign.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/skeleton/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/skeleton/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/skeleton/1.png b/game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/skeleton/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/1.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/skeleton/2.png b/game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/skeleton/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/2.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/skeleton/3.png b/game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/skeleton/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/3.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/skeleton/4.png b/game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/4.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/skeleton/4.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/4.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/skeleton/variants.json b/game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/variants.json
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/skeleton/variants.json
rename to game/client/src/main/resources/assets/minecraft/textures/entity/skeleton/variants.json
diff --git a/src/main/resources/assets/minecraft/textures/entity/slime/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/slime/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/slime/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/slime/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/snowman/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/snowman/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/snowman/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/snowman/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/snowman/1.png b/game/client/src/main/resources/assets/minecraft/textures/entity/snowman/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/snowman/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/snowman/1.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/snowman/2.png b/game/client/src/main/resources/assets/minecraft/textures/entity/snowman/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/snowman/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/snowman/2.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/snowman/3.png b/game/client/src/main/resources/assets/minecraft/textures/entity/snowman/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/snowman/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/snowman/3.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/snowman/4.png b/game/client/src/main/resources/assets/minecraft/textures/entity/snowman/4.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/snowman/4.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/snowman/4.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/snowman/variants.json b/game/client/src/main/resources/assets/minecraft/textures/entity/snowman/variants.json
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/snowman/variants.json
rename to game/client/src/main/resources/assets/minecraft/textures/entity/snowman/variants.json
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/spider/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/spider/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/spider/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/1.png b/game/client/src/main/resources/assets/minecraft/textures/entity/spider/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/spider/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/spider/1.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/2.png b/game/client/src/main/resources/assets/minecraft/textures/entity/spider/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/spider/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/spider/2.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/3.png b/game/client/src/main/resources/assets/minecraft/textures/entity/spider/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/spider/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/spider/3.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/eyes/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/spider/eyes/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/spider/eyes/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/spider/eyes/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/eyes/1.png b/game/client/src/main/resources/assets/minecraft/textures/entity/spider/eyes/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/spider/eyes/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/spider/eyes/1.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/eyes/2.png b/game/client/src/main/resources/assets/minecraft/textures/entity/spider/eyes/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/spider/eyes/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/spider/eyes/2.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/eyes/3.png b/game/client/src/main/resources/assets/minecraft/textures/entity/spider/eyes/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/spider/eyes/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/spider/eyes/3.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/spider/variants.json b/game/client/src/main/resources/assets/minecraft/textures/entity/spider/variants.json
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/spider/variants.json
rename to game/client/src/main/resources/assets/minecraft/textures/entity/spider/variants.json
diff --git a/src/main/resources/assets/minecraft/textures/entity/squid/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/squid/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/squid/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/squid/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/squid/1.png b/game/client/src/main/resources/assets/minecraft/textures/entity/squid/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/squid/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/squid/1.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/squid/2.png b/game/client/src/main/resources/assets/minecraft/textures/entity/squid/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/squid/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/squid/2.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/squid/3.png b/game/client/src/main/resources/assets/minecraft/textures/entity/squid/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/squid/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/squid/3.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/squid/variants.json b/game/client/src/main/resources/assets/minecraft/textures/entity/squid/variants.json
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/squid/variants.json
rename to game/client/src/main/resources/assets/minecraft/textures/entity/squid/variants.json
diff --git a/src/main/resources/assets/minecraft/textures/entity/wolf/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/wolf/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/wolf/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/wolf/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/wolf_angry/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/wolf_angry/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/wolf_angry/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/wolf_angry/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/wolf_tame/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/wolf_tame/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/wolf_tame/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/wolf_tame/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/0.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/1.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/1.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/1.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/10.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/10.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/10.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/10.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/11.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/11.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/11.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/11.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/12.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/12.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/12.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/12.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/13.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/13.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/13.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/13.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/14.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/14.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/14.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/14.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/15.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/15.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/15.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/15.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/2.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/2.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/2.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/3.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/3.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/3.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/4.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/4.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/4.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/4.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/5.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/5.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/5.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/5.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/6.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/6.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/6.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/6.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/7.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/7.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/7.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/7.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/8.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/8.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/8.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/8.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/9.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/9.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/9.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/9.png
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie/variants.json b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie/variants.json
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie/variants.json
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie/variants.json
diff --git a/src/main/resources/assets/minecraft/textures/entity/zombie_armored/0.png b/game/client/src/main/resources/assets/minecraft/textures/entity/zombie_armored/0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/entity/zombie_armored/0.png
rename to game/client/src/main/resources/assets/minecraft/textures/entity/zombie_armored/0.png
diff --git a/src/main/resources/assets/minecraft/textures/environment/aurora.png b/game/client/src/main/resources/assets/minecraft/textures/environment/aurora.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/environment/aurora.png
rename to game/client/src/main/resources/assets/minecraft/textures/environment/aurora.png
diff --git a/src/main/resources/assets/minecraft/textures/environment/aurora.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/environment/aurora.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/environment/aurora.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/environment/aurora.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/environment/clouds.png b/game/client/src/main/resources/assets/minecraft/textures/environment/clouds.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/environment/clouds.png
rename to game/client/src/main/resources/assets/minecraft/textures/environment/clouds.png
diff --git a/src/main/resources/assets/minecraft/textures/environment/rain.png b/game/client/src/main/resources/assets/minecraft/textures/environment/rain.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/environment/rain.png
rename to game/client/src/main/resources/assets/minecraft/textures/environment/rain.png
diff --git a/src/main/resources/assets/minecraft/textures/environment/rain_blood.png b/game/client/src/main/resources/assets/minecraft/textures/environment/rain_blood.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/environment/rain_blood.png
rename to game/client/src/main/resources/assets/minecraft/textures/environment/rain_blood.png
diff --git a/src/main/resources/assets/minecraft/textures/environment/snow.png b/game/client/src/main/resources/assets/minecraft/textures/environment/snow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/environment/snow.png
rename to game/client/src/main/resources/assets/minecraft/textures/environment/snow.png
diff --git a/src/main/resources/assets/minecraft/textures/environment/snow_light.png b/game/client/src/main/resources/assets/minecraft/textures/environment/snow_light.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/environment/snow_light.png
rename to game/client/src/main/resources/assets/minecraft/textures/environment/snow_light.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/background-loading-nether.png b/game/client/src/main/resources/assets/minecraft/textures/gui/background-loading-nether.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/background-loading-nether.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/background-loading-nether.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/background-loading-paradise.png b/game/client/src/main/resources/assets/minecraft/textures/gui/background-loading-paradise.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/background-loading-paradise.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/background-loading-paradise.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/background.png b/game/client/src/main/resources/assets/minecraft/textures/gui/background.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/background.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/background.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/activator.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/activator.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/activator.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/activator.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/blastfurnace.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/blastfurnace.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/blastfurnace.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/blastfurnace.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/container.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/container.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/container.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/container.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/crafting.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/crafting.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/crafting.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/crafting.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/creative.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/creative.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/creative.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/creative.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/dispenser.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/dispenser.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/dispenser.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/dispenser.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/flag_editor.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/flag_editor.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/flag_editor.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/flag_editor.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/furnace.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/furnace.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/furnace.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/furnace.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/guidebook/cover.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/guidebook/cover.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/guidebook/cover.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/guidebook/cover.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/guidebook/guidebook.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/guidebook/guidebook.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/guidebook/guidebook.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/guidebook/guidebook.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/guidebook/mob.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/guidebook/mob.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/guidebook/mob.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/guidebook/mob.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/inventory.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/inventory.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/inventory.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/inventory.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/container/trommel.png b/game/client/src/main/resources/assets/minecraft/textures/gui/container/trommel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/container/trommel.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/container/trommel.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/controller/cursor.png b/game/client/src/main/resources/assets/minecraft/textures/gui/controller/cursor.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/controller/cursor.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/controller/cursor.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/controller/ps3.png b/game/client/src/main/resources/assets/minecraft/textures/gui/controller/ps3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/controller/ps3.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/controller/ps3.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/controller/ps4.png b/game/client/src/main/resources/assets/minecraft/textures/gui/controller/ps4.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/controller/ps4.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/controller/ps4.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/controller/ps5.png b/game/client/src/main/resources/assets/minecraft/textures/gui/controller/ps5.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/controller/ps5.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/controller/ps5.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/controller/steam.png b/game/client/src/main/resources/assets/minecraft/textures/gui/controller/steam.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/controller/steam.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/controller/steam.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/controller/steam_deck.png b/game/client/src/main/resources/assets/minecraft/textures/gui/controller/steam_deck.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/controller/steam_deck.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/controller/steam_deck.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/controller/switch.png b/game/client/src/main/resources/assets/minecraft/textures/gui/controller/switch.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/controller/switch.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/controller/switch.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/controller/template.png b/game/client/src/main/resources/assets/minecraft/textures/gui/controller/template.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/controller/template.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/controller/template.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/controller/xbox_360.png b/game/client/src/main/resources/assets/minecraft/textures/gui/controller/xbox_360.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/controller/xbox_360.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/controller/xbox_360.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/controller/xbox_one.png b/game/client/src/main/resources/assets/minecraft/textures/gui/controller/xbox_one.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/controller/xbox_one.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/controller/xbox_one.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/designer_bg.png b/game/client/src/main/resources/assets/minecraft/textures/gui/designer_bg.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/designer_bg.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/designer_bg.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/hud/doom.png b/game/client/src/main/resources/assets/minecraft/textures/gui/hud/doom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/hud/doom.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/hud/doom.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/scroll.png b/game/client/src/main/resources/assets/minecraft/textures/gui/scroll.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/scroll.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/scroll.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/afk.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/afk.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/afk.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/afk.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/arrow_down.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/arrow_down.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/arrow_down.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/arrow_down.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/arrow_left.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/arrow_left.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/arrow_left.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/arrow_left.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/arrow_right.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/arrow_right.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/arrow_right.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/arrow_right.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/arrow_up.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/arrow_up.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/arrow_up.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/arrow_up.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/axe.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/axe.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/axe.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/axe.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/barricade.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/barricade.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/barricade.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/barricade.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/big_sign.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/big_sign.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/big_sign.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/big_sign.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/bowl.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/bowl.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/bowl.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/bowl.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/brb.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/brb.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/brb.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/brb.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/caution.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/caution.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/caution.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/caution.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/chest.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/chest.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/chest.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/chest.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/craft.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/craft.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/craft.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/craft.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/cross.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/cross.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/cross.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/cross.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/face_confused.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_confused.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/face_confused.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_confused.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/face_crying.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_crying.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/face_crying.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_crying.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/face_gasp.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_gasp.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/face_gasp.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_gasp.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/face_sad.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_sad.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/face_sad.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_sad.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/face_smile.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_smile.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/face_smile.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_smile.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/face_thinking.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_thinking.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/face_thinking.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/face_thinking.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/farm.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/farm.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/farm.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/farm.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/heart.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/heart.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/heart.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/heart.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/hoe.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/hoe.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/hoe.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/hoe.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/mine.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/mine.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/mine.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/mine.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/mob_creeper.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/mob_creeper.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/mob_creeper.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/mob_creeper.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/mob_farm.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/mob_farm.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/mob_farm.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/mob_farm.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/mob_skeleton.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/mob_skeleton.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/mob_skeleton.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/mob_skeleton.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/mob_zombie.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/mob_zombie.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/mob_zombie.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/mob_zombie.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/mobs.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/mobs.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/mobs.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/mobs.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/none.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/none.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/none.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/none.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/one_player.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/one_player.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/one_player.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/one_player.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/pickaxe.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/pickaxe.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/pickaxe.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/pickaxe.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/question_mark.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/question_mark.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/question_mark.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/question_mark.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/redstone.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/redstone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/redstone.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/redstone.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/shovel.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/shovel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/shovel.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/shovel.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/sign_images.pdn b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/sign_images.pdn
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/sign_images.pdn
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/sign_images.pdn
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/sword.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/sword.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/sword.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/sword.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/three_players.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/three_players.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/three_players.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/three_players.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/tnt.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/tnt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/tnt.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/tnt.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/trees.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/trees.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/trees.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/trees.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/two_players.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/two_players.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/two_players.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/two_players.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sign/wolf.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sign/wolf.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sign/wolf.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sign/wolf.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/air.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/air.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/air.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/air.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/air_pop.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/air_pop.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/air_pop.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/air_pop.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_empty.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_empty.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_empty.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_empty.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_full.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_full.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_full.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_full.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_half.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_half.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_half.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/armor_half.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/crosshair.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/crosshair.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/crosshair.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/crosshair.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/fire.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/fire.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/fire.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/fire.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/container.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/container.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/container.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/container.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/container_blinking.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/container_blinking.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/container_blinking.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/container_blinking.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/full.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/full.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/full.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/full.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/full_blinking.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/full_blinking.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/full_blinking.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/full_blinking.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/half.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/half.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/half.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/half.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/half_blinking.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/half_blinking.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/half_blinking.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/half_blinking.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_full.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_full.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_full.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_full.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_full_blinking.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_full_blinking.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_full_blinking.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_full_blinking.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_half.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_half.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_half.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_half.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_half_blinking.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_half_blinking.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_half_blinking.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_half_blinking.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_full.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_full.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_full.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_full.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_half.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_half.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_half.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_half.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_half_right.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_half_right.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_half_right.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/hardcore_preview_half_right.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_full.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_full.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_full.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_full.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_full_blinking.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_full_blinking.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_full_blinking.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_full_blinking.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_half.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_half.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_half.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_half.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_half_blinking.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_half_blinking.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_half_blinking.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/overheal_half_blinking.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_full.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_full.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_full.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_full.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_half.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_half.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_half.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_half.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_half_right.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_half_right.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_half_right.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/heart/preview_half_right.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selection.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selection.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selection.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selection.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selection_locked.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selection_locked.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selection_locked.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selection_locked.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector0.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector0.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector0.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector1.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector1.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector1.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector2.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector2.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector2.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector3.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector3.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/hotbar_selector3.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_blast.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_blast.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_blast.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_blast.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_combat.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_combat.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_combat.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_combat.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_fall.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_fall.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_fall.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_fall.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_fire.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_fire.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_fire.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_fire.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_projectile.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_projectile.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_projectile.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/protection_projectile.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_back.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_back.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_down.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_down.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_down.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_down.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_downer.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_downer.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_downer.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_downer.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_front.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_front.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_left.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_left.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_left.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_left.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_right.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_right.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_right.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_right.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_up.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_up.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_up.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_up.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_upper.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_upper.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_upper.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/arrow_upper.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_back.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_back.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_back.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_back.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_down.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_down.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_down.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_down.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_downer.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_downer.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_downer.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_downer.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_front.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_front.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_front.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_front.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_left.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_left.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_left.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_left.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_right.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_right.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_right.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_right.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_up.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_up.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_up.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_up.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_upper.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_upper.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_upper.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/hud/rotation/cube_upper.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip_disabled.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip_disabled.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip_disabled.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip_disabled.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_flag_flip_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_folder.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_folder.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_folder.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_folder.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_folder_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_folder_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_folder_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_folder_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_language.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_language.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_language.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_language.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_language_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_language_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_language_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_language_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_random.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_random.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_random.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_random.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_random_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_random_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_random_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_random_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_reset.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_reset.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_reset.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_reset.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_reset_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_reset_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_reset_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_reset_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_search.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_search.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_search.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_search.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_search_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_search_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_search_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/button_search_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/icon_reset.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/icon_reset.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/icon_reset.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/icon_reset.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/misc/icon_reset_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/icon_reset_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/misc/icon_reset_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/misc/icon_reset_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement_secret.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement_secret.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement_secret.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement_secret.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement_special.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement_special.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement_special.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/achievement_special.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/star.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/star.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/star.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/achievement/star.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/creative/clear.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/creative/clear.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/creative/clear.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/creative/clear.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/creative/clear_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/creative/clear_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/creative/clear_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/creative/clear_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/guidebook/slot.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/guidebook/slot.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/guidebook/slot.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/guidebook/slot.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/options/clear.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/options/clear.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/options/clear.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/options/clear.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/options/clear_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/options/clear_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/options/clear_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/options/clear_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/arrow_down.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/arrow_down.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/arrow_down.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/arrow_down.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/arrow_up.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/arrow_up.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/arrow_up.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/arrow_up.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/crafted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/crafted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/crafted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/crafted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/depleted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/depleted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/depleted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/depleted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/mined.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/mined.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/mined.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/mined.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/slot.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/slot.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/slot.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/slot.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/slot_raised.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/slot_raised.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/slot_raised.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/slot_raised.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/used.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/used.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/used.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/screen/stats/used.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/slot_locked.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/slot_locked.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/slot_locked.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/slot_locked.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/toast.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/toast.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/toast.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/toast.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_disabled.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_disabled.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_disabled.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_disabled.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_disabled.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_disabled.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_disabled.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_disabled.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_highlighted.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_highlighted.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_highlighted.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/button/button_highlighted.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_background.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_background.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_background.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_background.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_background.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_background.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_background.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_background.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_disabled.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_disabled.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_disabled.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_disabled.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_disabled.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_disabled.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_disabled.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_disabled.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_highlighted.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_highlighted.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_highlighted.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/slider/slider_highlighted.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_background.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_background.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_background.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_background.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_background.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_background.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_background.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_background.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_disabled.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_disabled.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_disabled.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_disabled.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_disabled.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_disabled.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_disabled.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_disabled.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_highlighted.png b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_highlighted.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_highlighted.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_highlighted.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_highlighted.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_highlighted.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_highlighted.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/gui/sprites/widgets/switch/switch_highlighted.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/gui/title/majonk.png b/game/client/src/main/resources/assets/minecraft/textures/gui/title/majonk.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/title/majonk.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/title/majonk.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/title/mclogo.png b/game/client/src/main/resources/assets/minecraft/textures/gui/title/mclogo.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/title/mclogo.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/title/mclogo.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/title/mojang.png b/game/client/src/main/resources/assets/minecraft/textures/gui/title/mojang.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/title/mojang.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/title/mojang.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/title/retrologo.png b/game/client/src/main/resources/assets/minecraft/textures/gui/title/retrologo.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/title/retrologo.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/title/retrologo.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/title/splashes.txt b/game/client/src/main/resources/assets/minecraft/textures/gui/title/splashes.txt
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/title/splashes.txt
rename to game/client/src/main/resources/assets/minecraft/textures/gui/title/splashes.txt
diff --git a/src/main/resources/assets/minecraft/textures/gui/titlebackground.png b/game/client/src/main/resources/assets/minecraft/textures/gui/titlebackground.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/titlebackground.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/titlebackground.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/battle_ui.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/battle_ui.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/battle_ui.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/battle_ui.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/comfy.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/comfy.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/comfy.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/comfy.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/creep-o-vision.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/creep-o-vision.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/creep-o-vision.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/creep-o-vision.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/crt.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/crt.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/crt.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/crt.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/default.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/default.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/default.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/default.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/detailed.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/detailed.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/detailed.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/detailed.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/interdimensional.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/interdimensional.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/interdimensional.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/interdimensional.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/noteblock.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/noteblock.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/noteblock.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/noteblock.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/picnic.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/picnic.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/picnic.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/picnic.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/planks.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/planks.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/planks.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/planks.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/redstone_goggles.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/redstone_goggles.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/redstone_goggles.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/redstone_goggles.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/retro.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/retro.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/retro.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/retro.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/rpg.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/rpg.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/rpg.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/rpg.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/steve.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/steve.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/steve.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/steve.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/stone.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/stone.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/tooltip/template.png b/game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/template.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/tooltip/template.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/tooltip/template.png
diff --git a/src/main/resources/assets/minecraft/textures/gui/unknown_pack.png b/game/client/src/main/resources/assets/minecraft/textures/gui/unknown_pack.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/gui/unknown_pack.png
rename to game/client/src/main/resources/assets/minecraft/textures/gui/unknown_pack.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ammo_arrow.png b/game/client/src/main/resources/assets/minecraft/textures/item/ammo_arrow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ammo_arrow.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ammo_arrow.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ammo_arrow_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/ammo_arrow_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ammo_arrow_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ammo_arrow_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ammo_arrow_purple.png b/game/client/src/main/resources/assets/minecraft/textures/item/ammo_arrow_purple.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ammo_arrow_purple.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ammo_arrow_purple.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ammo_charge_explosive.png b/game/client/src/main/resources/assets/minecraft/textures/item/ammo_charge_explosive.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ammo_charge_explosive.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ammo_charge_explosive.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ammo_fireball.png b/game/client/src/main/resources/assets/minecraft/textures/item/ammo_fireball.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ammo_fireball.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ammo_fireball.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ammo_pebble.png b/game/client/src/main/resources/assets/minecraft/textures/item/ammo_pebble.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ammo_pebble.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ammo_pebble.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ammo_snowball.png b/game/client/src/main/resources/assets/minecraft/textures/item/ammo_snowball.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ammo_snowball.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ammo_snowball.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_boots_chainmail.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_chainmail.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_boots_chainmail.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_chainmail.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_boots_diamond.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_boots_diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_boots_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_boots_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_boots_iceskates.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_iceskates.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_boots_iceskates.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_iceskates.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_boots_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_boots_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_boots_leather.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_leather.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_boots_leather.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_leather.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_boots_outline.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_outline.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_boots_outline.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_outline.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_boots_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_boots_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_boots_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_chestplate_chainmail.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_chainmail.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_chestplate_chainmail.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_chainmail.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_chestplate_diamond.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_chestplate_diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_chestplate_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_chestplate_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_chestplate_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_chestplate_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_chestplate_leather.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_leather.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_chestplate_leather.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_leather.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_chestplate_outline.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_outline.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_chestplate_outline.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_outline.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_chestplate_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_chestplate_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_chestplate_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_helmet_chainmail.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_chainmail.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_helmet_chainmail.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_chainmail.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_helmet_diamond.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_helmet_diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_helmet_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_helmet_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_helmet_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_helmet_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_helmet_leather.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_leather.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_helmet_leather.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_leather.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_helmet_outline.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_outline.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_helmet_outline.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_outline.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_helmet_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_helmet_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_helmet_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_leggings_chainmail.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_chainmail.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_leggings_chainmail.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_chainmail.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_leggings_diamond.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_leggings_diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_leggings_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_leggings_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_leggings_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_leggings_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_leggings_leather.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_leather.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_leggings_leather.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_leather.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_leggings_outline.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_outline.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_leggings_outline.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_outline.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_leggings_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_leggings_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_leggings_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_quiver.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_quiver.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_quiver.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_quiver.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_quiver_empty.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_quiver_empty.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_quiver_empty.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_quiver_empty.png
diff --git a/src/main/resources/assets/minecraft/textures/item/armor_quiver_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/armor_quiver_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/armor_quiver_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/armor_quiver_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/basket.png b/game/client/src/main/resources/assets/minecraft/textures/item/basket.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/basket.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/basket.png
diff --git a/src/main/resources/assets/minecraft/textures/item/bed.png b/game/client/src/main/resources/assets/minecraft/textures/item/bed.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/bed.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/bed.png
diff --git a/src/main/resources/assets/minecraft/textures/item/boat.png b/game/client/src/main/resources/assets/minecraft/textures/item/boat.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/boat.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/boat.png
diff --git a/src/main/resources/assets/minecraft/textures/item/bone.png b/game/client/src/main/resources/assets/minecraft/textures/item/bone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/bone.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/bone.png
diff --git a/src/main/resources/assets/minecraft/textures/item/book.png b/game/client/src/main/resources/assets/minecraft/textures/item/book.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/book.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/book.png
diff --git a/src/main/resources/assets/minecraft/textures/item/bowl.png b/game/client/src/main/resources/assets/minecraft/textures/item/bowl.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/bowl.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/bowl.png
diff --git a/src/main/resources/assets/minecraft/textures/item/brick_clay.png b/game/client/src/main/resources/assets/minecraft/textures/item/brick_clay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/brick_clay.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/brick_clay.png
diff --git a/src/main/resources/assets/minecraft/textures/item/bucket.png b/game/client/src/main/resources/assets/minecraft/textures/item/bucket.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/bucket.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/bucket.png
diff --git a/src/main/resources/assets/minecraft/textures/item/bucket_icecream.png b/game/client/src/main/resources/assets/minecraft/textures/item/bucket_icecream.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/bucket_icecream.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/bucket_icecream.png
diff --git a/src/main/resources/assets/minecraft/textures/item/bucket_lava.png b/game/client/src/main/resources/assets/minecraft/textures/item/bucket_lava.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/bucket_lava.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/bucket_lava.png
diff --git a/src/main/resources/assets/minecraft/textures/item/bucket_milk.png b/game/client/src/main/resources/assets/minecraft/textures/item/bucket_milk.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/bucket_milk.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/bucket_milk.png
diff --git a/src/main/resources/assets/minecraft/textures/item/bucket_water.png b/game/client/src/main/resources/assets/minecraft/textures/item/bucket_water.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/bucket_water.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/bucket_water.png
diff --git a/src/main/resources/assets/minecraft/textures/item/chainlink.png b/game/client/src/main/resources/assets/minecraft/textures/item/chainlink.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/chainlink.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/chainlink.png
diff --git a/src/main/resources/assets/minecraft/textures/item/charcoal.png b/game/client/src/main/resources/assets/minecraft/textures/item/charcoal.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/charcoal.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/charcoal.png
diff --git a/src/main/resources/assets/minecraft/textures/item/clay.png b/game/client/src/main/resources/assets/minecraft/textures/item/clay.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/clay.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/clay.png
diff --git a/src/main/resources/assets/minecraft/textures/item/cloth.png b/game/client/src/main/resources/assets/minecraft/textures/item/cloth.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/cloth.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/cloth.png
diff --git a/src/main/resources/assets/minecraft/textures/item/coal.png b/game/client/src/main/resources/assets/minecraft/textures/item/coal.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/coal.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/coal.png
diff --git a/src/main/resources/assets/minecraft/textures/item/diamond.png b/game/client/src/main/resources/assets/minecraft/textures/item/diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_black.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_black.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_black.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_black.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_blue.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_blue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_blue.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_blue.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_brown.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_brown.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_brown.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_brown.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_cyan.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_cyan.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_cyan.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_cyan.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_glass.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_glass.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_glass.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_glass.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_gray.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_gray.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_gray.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_gray.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_green.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_green.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_green.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_green.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_lightblue.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_lightblue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_lightblue.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_lightblue.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_lime.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_lime.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_lime.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_lime.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_magenta.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_magenta.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_magenta.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_magenta.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_oak.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_oak.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_oak.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_oak.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_orange.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_orange.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_orange.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_orange.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_pink.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_pink.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_pink.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_pink.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_purple.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_purple.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_purple.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_purple.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_red.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_red.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_red.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_red.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_silver.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_silver.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_silver.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_silver.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_white.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_white.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_white.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_white.png
diff --git a/src/main/resources/assets/minecraft/textures/item/door_yellow.png b/game/client/src/main/resources/assets/minecraft/textures/item/door_yellow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/door_yellow.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/door_yellow.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dust_glowstone.png b/game/client/src/main/resources/assets/minecraft/textures/item/dust_glowstone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dust_glowstone.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dust_glowstone.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dust_redstone.png b/game/client/src/main/resources/assets/minecraft/textures/item/dust_redstone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dust_redstone.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dust_redstone.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dust_sugar.png b/game/client/src/main/resources/assets/minecraft/textures/item/dust_sugar.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dust_sugar.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dust_sugar.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_black.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_black.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_black.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_black.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_blue.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_blue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_blue.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_blue.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_brown.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_brown.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_brown.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_brown.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_cyan.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_cyan.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_cyan.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_cyan.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_gray.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_gray.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_gray.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_gray.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_green.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_green.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_green.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_green.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_lightblue.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_lightblue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_lightblue.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_lightblue.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_lime.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_lime.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_lime.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_lime.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_magenta.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_magenta.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_magenta.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_magenta.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_orange.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_orange.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_orange.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_orange.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_pink.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_pink.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_pink.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_pink.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_purple.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_purple.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_purple.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_purple.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_red.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_red.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_red.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_red.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_silver.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_silver.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_silver.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_silver.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_white.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_white.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_white.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_white.png
diff --git a/src/main/resources/assets/minecraft/textures/item/dye_yellow.png b/game/client/src/main/resources/assets/minecraft/textures/item/dye_yellow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/dye_yellow.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/dye_yellow.png
diff --git a/src/main/resources/assets/minecraft/textures/item/egg_chicken.png b/game/client/src/main/resources/assets/minecraft/textures/item/egg_chicken.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/egg_chicken.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/egg_chicken.png
diff --git a/src/main/resources/assets/minecraft/textures/item/feather_chicken.png b/game/client/src/main/resources/assets/minecraft/textures/item/feather_chicken.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/feather_chicken.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/feather_chicken.png
diff --git a/src/main/resources/assets/minecraft/textures/item/flag.png b/game/client/src/main/resources/assets/minecraft/textures/item/flag.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/flag.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/flag.png
diff --git a/src/main/resources/assets/minecraft/textures/item/flint.png b/game/client/src/main/resources/assets/minecraft/textures/item/flint.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/flint.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/flint.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_apple.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_apple.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_apple.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_apple.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_apple_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_apple_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_apple_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_apple_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_bread.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_bread.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_bread.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_bread.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_cake.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_cake.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_cake.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_cake.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_cherry.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_cherry.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_cherry.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_cherry.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_cookie.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_cookie.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_cookie.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_cookie.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_fish_cooked.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_fish_cooked.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_fish_cooked.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_fish_cooked.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_fish_raw.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_fish_raw.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_fish_raw.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_fish_raw.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_porkchop_cooked.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_porkchop_cooked.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_porkchop_cooked.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_porkchop_cooked.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_porkchop_raw.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_porkchop_raw.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_porkchop_raw.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_porkchop_raw.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_pumpkin_pie.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_pumpkin_pie.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_pumpkin_pie.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_pumpkin_pie.png
diff --git a/src/main/resources/assets/minecraft/textures/item/food_stew_mushroom.png b/game/client/src/main/resources/assets/minecraft/textures/item/food_stew_mushroom.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/food_stew_mushroom.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/food_stew_mushroom.png
diff --git a/src/main/resources/assets/minecraft/textures/item/handcannon_loaded.png b/game/client/src/main/resources/assets/minecraft/textures/item/handcannon_loaded.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/handcannon_loaded.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/handcannon_loaded.png
diff --git a/src/main/resources/assets/minecraft/textures/item/handcannon_unloaded.png b/game/client/src/main/resources/assets/minecraft/textures/item/handcannon_unloaded.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/handcannon_unloaded.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/handcannon_unloaded.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ingot_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/ingot_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ingot_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ingot_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ingot_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/ingot_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ingot_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ingot_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ingot_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/ingot_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ingot_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ingot_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ingot_steel_crude.png b/game/client/src/main/resources/assets/minecraft/textures/item/ingot_steel_crude.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ingot_steel_crude.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ingot_steel_crude.png
diff --git a/src/main/resources/assets/minecraft/textures/item/jar.png b/game/client/src/main/resources/assets/minecraft/textures/item/jar.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/jar.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/jar.png
diff --git a/src/main/resources/assets/minecraft/textures/item/label.png b/game/client/src/main/resources/assets/minecraft/textures/item/label.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/label.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/label.png
diff --git a/src/main/resources/assets/minecraft/textures/item/label_written.png b/game/client/src/main/resources/assets/minecraft/textures/item/label_written.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/label_written.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/label_written.png
diff --git a/src/main/resources/assets/minecraft/textures/item/lantern_firefly_blue.png b/game/client/src/main/resources/assets/minecraft/textures/item/lantern_firefly_blue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/lantern_firefly_blue.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/lantern_firefly_blue.png
diff --git a/src/main/resources/assets/minecraft/textures/item/lantern_firefly_green.png b/game/client/src/main/resources/assets/minecraft/textures/item/lantern_firefly_green.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/lantern_firefly_green.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/lantern_firefly_green.png
diff --git a/src/main/resources/assets/minecraft/textures/item/lantern_firefly_orange.png b/game/client/src/main/resources/assets/minecraft/textures/item/lantern_firefly_orange.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/lantern_firefly_orange.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/lantern_firefly_orange.png
diff --git a/src/main/resources/assets/minecraft/textures/item/lantern_firefly_red.png b/game/client/src/main/resources/assets/minecraft/textures/item/lantern_firefly_red.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/lantern_firefly_red.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/lantern_firefly_red.png
diff --git a/src/main/resources/assets/minecraft/textures/item/leather.png b/game/client/src/main/resources/assets/minecraft/textures/item/leather.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/leather.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/leather.png
diff --git a/src/main/resources/assets/minecraft/textures/item/map.png b/game/client/src/main/resources/assets/minecraft/textures/item/map.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/map.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/map.png
diff --git a/src/main/resources/assets/minecraft/textures/item/map_blank.png b/game/client/src/main/resources/assets/minecraft/textures/item/map_blank.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/map_blank.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/map_blank.png
diff --git a/src/main/resources/assets/minecraft/textures/item/minecart.png b/game/client/src/main/resources/assets/minecraft/textures/item/minecart.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/minecart.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/minecart.png
diff --git a/src/main/resources/assets/minecraft/textures/item/minecart_chest.png b/game/client/src/main/resources/assets/minecraft/textures/item/minecart_chest.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/minecart_chest.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/minecart_chest.png
diff --git a/src/main/resources/assets/minecraft/textures/item/minecart_furnace.png b/game/client/src/main/resources/assets/minecraft/textures/item/minecart_furnace.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/minecart_furnace.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/minecart_furnace.png
diff --git a/src/main/resources/assets/minecraft/textures/item/nethercoal.png b/game/client/src/main/resources/assets/minecraft/textures/item/nethercoal.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/nethercoal.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/nethercoal.png
diff --git a/src/main/resources/assets/minecraft/textures/item/olivine.png b/game/client/src/main/resources/assets/minecraft/textures/item/olivine.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/olivine.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/olivine.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ore_raw_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/ore_raw_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ore_raw_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ore_raw_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/ore_raw_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/ore_raw_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/ore_raw_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/ore_raw_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_black.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_black.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_black.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_black.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_blue.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_blue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_blue.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_blue.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_brown.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_brown.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_brown.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_brown.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_cyan.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_cyan.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_cyan.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_cyan.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_gray.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_gray.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_gray.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_gray.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_green.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_green.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_green.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_green.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_lightblue.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_lightblue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_lightblue.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_lightblue.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_lime.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_lime.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_lime.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_lime.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_magenta.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_magenta.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_magenta.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_magenta.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_orange.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_orange.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_orange.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_orange.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_pink.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_pink.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_pink.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_pink.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_purple.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_purple.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_purple.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_purple.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_red.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_red.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_red.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_red.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_silver.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_silver.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_silver.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_silver.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_white.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_white.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_white.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_white.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paintbrush_yellow.png b/game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_yellow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paintbrush_yellow.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paintbrush_yellow.png
diff --git a/src/main/resources/assets/minecraft/textures/item/painting.png b/game/client/src/main/resources/assets/minecraft/textures/item/painting.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/painting.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/painting.png
diff --git a/src/main/resources/assets/minecraft/textures/item/paper.png b/game/client/src/main/resources/assets/minecraft/textures/item/paper.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/paper.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/paper.png
diff --git a/src/main/resources/assets/minecraft/textures/item/quartz.png b/game/client/src/main/resources/assets/minecraft/textures/item/quartz.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/quartz.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/quartz.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_13.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_13.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_13.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_13.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_blocks.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_blocks.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_blocks.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_blocks.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_cat.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_cat.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_cat.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_cat.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_chirp.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_chirp.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_chirp.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_chirp.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_dog.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_dog.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_dog.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_dog.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_far.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_far.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_far.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_far.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_mall.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_mall.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_mall.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_mall.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_mellohi.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_mellohi.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_mellohi.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_mellohi.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_stal.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_stal.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_stal.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_stal.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_strad.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_strad.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_strad.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_strad.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_wait.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_wait.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_wait.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_wait.png
diff --git a/src/main/resources/assets/minecraft/textures/item/record_ward.png b/game/client/src/main/resources/assets/minecraft/textures/item/record_ward.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/record_ward.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/record_ward.png
diff --git a/src/main/resources/assets/minecraft/textures/item/repeater.png b/game/client/src/main/resources/assets/minecraft/textures/item/repeater.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/repeater.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/repeater.png
diff --git a/src/main/resources/assets/minecraft/textures/item/rope.png b/game/client/src/main/resources/assets/minecraft/textures/item/rope.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/rope.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/rope.png
diff --git a/src/main/resources/assets/minecraft/textures/item/saddle.png b/game/client/src/main/resources/assets/minecraft/textures/item/saddle.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/saddle.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/saddle.png
diff --git a/src/main/resources/assets/minecraft/textures/item/seat.png b/game/client/src/main/resources/assets/minecraft/textures/item/seat.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/seat.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/seat.png
diff --git a/src/main/resources/assets/minecraft/textures/item/seeds_pumpkin.png b/game/client/src/main/resources/assets/minecraft/textures/item/seeds_pumpkin.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/seeds_pumpkin.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/seeds_pumpkin.png
diff --git a/src/main/resources/assets/minecraft/textures/item/seeds_wheat.png b/game/client/src/main/resources/assets/minecraft/textures/item/seeds_wheat.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/seeds_wheat.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/seeds_wheat.png
diff --git a/src/main/resources/assets/minecraft/textures/item/sign.png b/game/client/src/main/resources/assets/minecraft/textures/item/sign.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/sign.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/sign.png
diff --git a/src/main/resources/assets/minecraft/textures/item/slimeball.png b/game/client/src/main/resources/assets/minecraft/textures/item/slimeball.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/slimeball.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/slimeball.png
diff --git a/src/main/resources/assets/minecraft/textures/item/stick.png b/game/client/src/main/resources/assets/minecraft/textures/item/stick.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/stick.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/stick.png
diff --git a/src/main/resources/assets/minecraft/textures/item/string.png b/game/client/src/main/resources/assets/minecraft/textures/item/string.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/string.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/string.png
diff --git a/src/main/resources/assets/minecraft/textures/item/sugarcane.png b/game/client/src/main/resources/assets/minecraft/textures/item/sugarcane.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/sugarcane.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/sugarcane.png
diff --git a/src/main/resources/assets/minecraft/textures/item/sulphur.png b/game/client/src/main/resources/assets/minecraft/textures/item/sulphur.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/sulphur.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/sulphur.png
diff --git a/src/main/resources/assets/minecraft/textures/item/texture_missing.png b/game/client/src/main/resources/assets/minecraft/textures/item/texture_missing.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/texture_missing.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/texture_missing.png
diff --git a/src/main/resources/assets/minecraft/textures/item/texture_unassigned.png b/game/client/src/main/resources/assets/minecraft/textures/item/texture_unassigned.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/texture_unassigned.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/texture_unassigned.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_axe_diamond.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_axe_diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_axe_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_axe_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_axe_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_axe_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_axe_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_axe_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_axe_stone.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_axe_stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_stone.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_axe_wood.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_wood.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_axe_wood.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_axe_wood.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_bow.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_bow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_bow.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_bow.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_calendar.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_calendar.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_calendar.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_calendar.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_clock.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_clock.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_clock.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_clock.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_compass.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_compass.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_compass.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_compass.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_firestriker.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_firestriker.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_firestriker.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_firestriker.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_firestriker_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_firestriker_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_firestriker_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_firestriker_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_fishingrod.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_fishingrod.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_fishingrod.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_fishingrod.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_fishingrod_cast.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_fishingrod_cast.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_fishingrod_cast.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_fishingrod_cast.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_hoe_diamond.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_hoe_diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_hoe_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_hoe_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_hoe_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_hoe_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_hoe_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_hoe_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_hoe_stone.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_hoe_stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_stone.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_hoe_wood.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_wood.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_hoe_wood.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_hoe_wood.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_diamond.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_pickaxe_diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_pickaxe_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_pickaxe_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_pickaxe_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_stone.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_pickaxe_stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_stone.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_wood.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_wood.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_pickaxe_wood.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_pickaxe_wood.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_shears.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_shears.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_shears.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_shears.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_shears_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_shears_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_shears_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_shears_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_shovel_diamond.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_shovel_diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_shovel_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_shovel_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_shovel_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_shovel_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_shovel_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_shovel_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_shovel_stone.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_shovel_stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_stone.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_shovel_wood.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_wood.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_shovel_wood.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_shovel_wood.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_sword_diamond.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_diamond.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_sword_diamond.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_diamond.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_sword_gold.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_gold.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_sword_gold.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_gold.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_sword_iron.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_iron.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_sword_iron.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_iron.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_sword_steel.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_steel.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_sword_steel.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_steel.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_sword_stone.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_stone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_sword_stone.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_stone.png
diff --git a/src/main/resources/assets/minecraft/textures/item/tool_sword_wood.png b/game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_wood.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/tool_sword_wood.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/tool_sword_wood.png
diff --git a/src/main/resources/assets/minecraft/textures/item/wand_monster.png b/game/client/src/main/resources/assets/minecraft/textures/item/wand_monster.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/wand_monster.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/wand_monster.png
diff --git a/src/main/resources/assets/minecraft/textures/item/wheat.png b/game/client/src/main/resources/assets/minecraft/textures/item/wheat.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/item/wheat.png
rename to game/client/src/main/resources/assets/minecraft/textures/item/wheat.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/colors_chat.png b/game/client/src/main/resources/assets/minecraft/textures/misc/colors_chat.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/colors_chat.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/colors_chat.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/colors_flag.png b/game/client/src/main/resources/assets/minecraft/textures/misc/colors_flag.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/colors_flag.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/colors_flag.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/colors_lamps.png b/game/client/src/main/resources/assets/minecraft/textures/misc/colors_lamps.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/colors_lamps.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/colors_lamps.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/colors_planks.png b/game/client/src/main/resources/assets/minecraft/textures/misc/colors_planks.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/colors_planks.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/colors_planks.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/colors_portal.png b/game/client/src/main/resources/assets/minecraft/textures/misc/colors_portal.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/colors_portal.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/colors_portal.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/colors_redstone.png b/game/client/src/main/resources/assets/minecraft/textures/misc/colors_redstone.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/colors_redstone.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/colors_redstone.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/colors_signs.png b/game/client/src/main/resources/assets/minecraft/textures/misc/colors_signs.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/colors_signs.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/colors_signs.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/dial.png b/game/client/src/main/resources/assets/minecraft/textures/misc/dial.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/dial.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/dial.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/dialseason.png b/game/client/src/main/resources/assets/minecraft/textures/misc/dialseason.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/dialseason.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/dialseason.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/flagicon.png b/game/client/src/main/resources/assets/minecraft/textures/misc/flagicon.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/flagicon.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/flagicon.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/footprint.png b/game/client/src/main/resources/assets/minecraft/textures/misc/footprint.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/footprint.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/footprint.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/mapbg.png b/game/client/src/main/resources/assets/minecraft/textures/misc/mapbg.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/mapbg.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/mapbg.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/mapicons.png b/game/client/src/main/resources/assets/minecraft/textures/misc/mapicons.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/mapicons.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/mapicons.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/pumpkinblur.png b/game/client/src/main/resources/assets/minecraft/textures/misc/pumpkinblur.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/pumpkinblur.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/pumpkinblur.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/pumpkinblur.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/misc/pumpkinblur.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/pumpkinblur.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/misc/pumpkinblur.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/misc/shadow.png b/game/client/src/main/resources/assets/minecraft/textures/misc/shadow.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/shadow.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/shadow.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/shadow.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/misc/shadow.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/shadow.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/misc/shadow.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/misc/vignette.png b/game/client/src/main/resources/assets/minecraft/textures/misc/vignette.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/vignette.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/vignette.png
diff --git a/src/main/resources/assets/minecraft/textures/misc/vignette.png.mcmeta b/game/client/src/main/resources/assets/minecraft/textures/misc/vignette.png.mcmeta
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/vignette.png.mcmeta
rename to game/client/src/main/resources/assets/minecraft/textures/misc/vignette.png.mcmeta
diff --git a/src/main/resources/assets/minecraft/textures/misc/water.png b/game/client/src/main/resources/assets/minecraft/textures/misc/water.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/misc/water.png
rename to game/client/src/main/resources/assets/minecraft/textures/misc/water.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/bobber.png b/game/client/src/main/resources/assets/minecraft/textures/particle/bobber.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/bobber.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/bobber.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/bubble.png b/game/client/src/main/resources/assets/minecraft/textures/particle/bubble.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/bubble.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/bubble.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/bubble_lava.png b/game/client/src/main/resources/assets/minecraft/textures/particle/bubble_lava.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/bubble_lava.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/bubble_lava.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/fire.png b/game/client/src/main/resources/assets/minecraft/textures/particle/fire.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/fire.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/fire.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/fire_blue.png b/game/client/src/main/resources/assets/minecraft/textures/particle/fire_blue.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/fire_blue.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/fire_blue.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/fire_soul.png b/game/client/src/main/resources/assets/minecraft/textures/particle/fire_soul.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/fire_soul.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/fire_soul.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/firefly.png b/game/client/src/main/resources/assets/minecraft/textures/particle/firefly.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/firefly.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/firefly.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/heart.png b/game/client/src/main/resources/assets/minecraft/textures/particle/heart.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/heart.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/heart.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/note.png b/game/client/src/main/resources/assets/minecraft/textures/particle/note.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/note.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/note.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/puff_0.png b/game/client/src/main/resources/assets/minecraft/textures/particle/puff_0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/puff_0.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/puff_0.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/puff_1.png b/game/client/src/main/resources/assets/minecraft/textures/particle/puff_1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/puff_1.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/puff_1.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/puff_2.png b/game/client/src/main/resources/assets/minecraft/textures/particle/puff_2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/puff_2.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/puff_2.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/puff_3.png b/game/client/src/main/resources/assets/minecraft/textures/particle/puff_3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/puff_3.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/puff_3.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/puff_4.png b/game/client/src/main/resources/assets/minecraft/textures/particle/puff_4.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/puff_4.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/puff_4.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/puff_5.png b/game/client/src/main/resources/assets/minecraft/textures/particle/puff_5.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/puff_5.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/puff_5.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/puff_6.png b/game/client/src/main/resources/assets/minecraft/textures/particle/puff_6.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/puff_6.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/puff_6.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/puff_7.png b/game/client/src/main/resources/assets/minecraft/textures/particle/puff_7.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/puff_7.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/puff_7.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/splash_rain_0.png b/game/client/src/main/resources/assets/minecraft/textures/particle/splash_rain_0.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/splash_rain_0.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/splash_rain_0.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/splash_rain_1.png b/game/client/src/main/resources/assets/minecraft/textures/particle/splash_rain_1.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/splash_rain_1.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/splash_rain_1.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/splash_rain_2.png b/game/client/src/main/resources/assets/minecraft/textures/particle/splash_rain_2.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/splash_rain_2.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/splash_rain_2.png
diff --git a/src/main/resources/assets/minecraft/textures/particle/splash_rain_3.png b/game/client/src/main/resources/assets/minecraft/textures/particle/splash_rain_3.png
similarity index 100%
rename from src/main/resources/assets/minecraft/textures/particle/splash_rain_3.png
rename to game/client/src/main/resources/assets/minecraft/textures/particle/splash_rain_3.png
diff --git a/src/main/resources/assets/seedviewer/textures/icons/1024.png b/game/client/src/main/resources/assets/seedviewer/textures/icons/1024.png
similarity index 100%
rename from src/main/resources/assets/seedviewer/textures/icons/1024.png
rename to game/client/src/main/resources/assets/seedviewer/textures/icons/1024.png
diff --git a/src/main/resources/assets/seedviewer/textures/icons/128.png b/game/client/src/main/resources/assets/seedviewer/textures/icons/128.png
similarity index 100%
rename from src/main/resources/assets/seedviewer/textures/icons/128.png
rename to game/client/src/main/resources/assets/seedviewer/textures/icons/128.png
diff --git a/src/main/resources/assets/seedviewer/textures/icons/16.png b/game/client/src/main/resources/assets/seedviewer/textures/icons/16.png
similarity index 100%
rename from src/main/resources/assets/seedviewer/textures/icons/16.png
rename to game/client/src/main/resources/assets/seedviewer/textures/icons/16.png
diff --git a/src/main/resources/assets/seedviewer/textures/icons/256.png b/game/client/src/main/resources/assets/seedviewer/textures/icons/256.png
similarity index 100%
rename from src/main/resources/assets/seedviewer/textures/icons/256.png
rename to game/client/src/main/resources/assets/seedviewer/textures/icons/256.png
diff --git a/src/main/resources/assets/seedviewer/textures/icons/32.png b/game/client/src/main/resources/assets/seedviewer/textures/icons/32.png
similarity index 100%
rename from src/main/resources/assets/seedviewer/textures/icons/32.png
rename to game/client/src/main/resources/assets/seedviewer/textures/icons/32.png
diff --git a/src/main/resources/assets/seedviewer/textures/icons/512.png b/game/client/src/main/resources/assets/seedviewer/textures/icons/512.png
similarity index 100%
rename from src/main/resources/assets/seedviewer/textures/icons/512.png
rename to game/client/src/main/resources/assets/seedviewer/textures/icons/512.png
diff --git a/src/main/resources/assets/seedviewer/textures/icons/64.png b/game/client/src/main/resources/assets/seedviewer/textures/icons/64.png
similarity index 100%
rename from src/main/resources/assets/seedviewer/textures/icons/64.png
rename to game/client/src/main/resources/assets/seedviewer/textures/icons/64.png
diff --git a/src/main/resources/assets/seedviewer/textures/slime_vignette.png b/game/client/src/main/resources/assets/seedviewer/textures/slime_vignette.png
similarity index 100%
rename from src/main/resources/assets/seedviewer/textures/slime_vignette.png
rename to game/client/src/main/resources/assets/seedviewer/textures/slime_vignette.png
diff --git a/src/main/resources/bg/8210.png_0.png b/game/client/src/main/resources/bg/8210.png_0.png
similarity index 100%
rename from src/main/resources/bg/8210.png_0.png
rename to game/client/src/main/resources/bg/8210.png_0.png
diff --git a/src/main/resources/bg/adamng_0.png b/game/client/src/main/resources/bg/adamng_0.png
similarity index 100%
rename from src/main/resources/bg/adamng_0.png
rename to game/client/src/main/resources/bg/adamng_0.png
diff --git a/src/main/resources/bg/afelends_0.png b/game/client/src/main/resources/bg/afelends_0.png
similarity index 100%
rename from src/main/resources/bg/afelends_0.png
rename to game/client/src/main/resources/bg/afelends_0.png
diff --git a/src/main/resources/bg/backgrounds.json b/game/client/src/main/resources/bg/backgrounds.json
similarity index 100%
rename from src/main/resources/bg/backgrounds.json
rename to game/client/src/main/resources/bg/backgrounds.json
diff --git a/src/main/resources/bg/brokendoop_0.png b/game/client/src/main/resources/bg/brokendoop_0.png
similarity index 100%
rename from src/main/resources/bg/brokendoop_0.png
rename to game/client/src/main/resources/bg/brokendoop_0.png
diff --git a/src/main/resources/bg/brokendoop_1.png b/game/client/src/main/resources/bg/brokendoop_1.png
similarity index 100%
rename from src/main/resources/bg/brokendoop_1.png
rename to game/client/src/main/resources/bg/brokendoop_1.png
diff --git a/src/main/resources/bg/brotado_0.png b/game/client/src/main/resources/bg/brotado_0.png
similarity index 100%
rename from src/main/resources/bg/brotado_0.png
rename to game/client/src/main/resources/bg/brotado_0.png
diff --git a/src/main/resources/bg/cloud54_0.png b/game/client/src/main/resources/bg/cloud54_0.png
similarity index 100%
rename from src/main/resources/bg/cloud54_0.png
rename to game/client/src/main/resources/bg/cloud54_0.png
diff --git a/src/main/resources/bg/clyran_0.png b/game/client/src/main/resources/bg/clyran_0.png
similarity index 100%
rename from src/main/resources/bg/clyran_0.png
rename to game/client/src/main/resources/bg/clyran_0.png
diff --git a/src/main/resources/bg/clyran_1.png b/game/client/src/main/resources/bg/clyran_1.png
similarity index 100%
rename from src/main/resources/bg/clyran_1.png
rename to game/client/src/main/resources/bg/clyran_1.png
diff --git a/src/main/resources/bg/damian_0.png b/game/client/src/main/resources/bg/damian_0.png
similarity index 100%
rename from src/main/resources/bg/damian_0.png
rename to game/client/src/main/resources/bg/damian_0.png
diff --git a/src/main/resources/bg/funnelton_0.png b/game/client/src/main/resources/bg/funnelton_0.png
similarity index 100%
rename from src/main/resources/bg/funnelton_0.png
rename to game/client/src/main/resources/bg/funnelton_0.png
diff --git a/src/main/resources/bg/gravelcap_0.png b/game/client/src/main/resources/bg/gravelcap_0.png
similarity index 100%
rename from src/main/resources/bg/gravelcap_0.png
rename to game/client/src/main/resources/bg/gravelcap_0.png
diff --git a/src/main/resources/bg/itsifox_0.png b/game/client/src/main/resources/bg/itsifox_0.png
similarity index 100%
rename from src/main/resources/bg/itsifox_0.png
rename to game/client/src/main/resources/bg/itsifox_0.png
diff --git a/src/main/resources/bg/kiwind_0.png b/game/client/src/main/resources/bg/kiwind_0.png
similarity index 100%
rename from src/main/resources/bg/kiwind_0.png
rename to game/client/src/main/resources/bg/kiwind_0.png
diff --git a/src/main/resources/bg/koomah_0.png b/game/client/src/main/resources/bg/koomah_0.png
similarity index 100%
rename from src/main/resources/bg/koomah_0.png
rename to game/client/src/main/resources/bg/koomah_0.png
diff --git a/src/main/resources/bg/mzov_0.png b/game/client/src/main/resources/bg/mzov_0.png
similarity index 100%
rename from src/main/resources/bg/mzov_0.png
rename to game/client/src/main/resources/bg/mzov_0.png
diff --git a/src/main/resources/bg/p0k_3_0.png b/game/client/src/main/resources/bg/p0k_3_0.png
similarity index 100%
rename from src/main/resources/bg/p0k_3_0.png
rename to game/client/src/main/resources/bg/p0k_3_0.png
diff --git a/src/main/resources/bg/prismary_0.png b/game/client/src/main/resources/bg/prismary_0.png
similarity index 100%
rename from src/main/resources/bg/prismary_0.png
rename to game/client/src/main/resources/bg/prismary_0.png
diff --git a/src/main/resources/bg/seapickle_0.png b/game/client/src/main/resources/bg/seapickle_0.png
similarity index 100%
rename from src/main/resources/bg/seapickle_0.png
rename to game/client/src/main/resources/bg/seapickle_0.png
diff --git a/src/main/resources/bg/sr.kitty_0.png b/game/client/src/main/resources/bg/sr.kitty_0.png
similarity index 100%
rename from src/main/resources/bg/sr.kitty_0.png
rename to game/client/src/main/resources/bg/sr.kitty_0.png
diff --git a/src/main/resources/bg/t3ssed_0.png b/game/client/src/main/resources/bg/t3ssed_0.png
similarity index 100%
rename from src/main/resources/bg/t3ssed_0.png
rename to game/client/src/main/resources/bg/t3ssed_0.png
diff --git a/src/main/resources/bg/tess_o_0.png b/game/client/src/main/resources/bg/tess_o_0.png
similarity index 100%
rename from src/main/resources/bg/tess_o_0.png
rename to game/client/src/main/resources/bg/tess_o_0.png
diff --git a/src/main/resources/bg/thaboar_0.png b/game/client/src/main/resources/bg/thaboar_0.png
similarity index 100%
rename from src/main/resources/bg/thaboar_0.png
rename to game/client/src/main/resources/bg/thaboar_0.png
diff --git a/src/main/resources/bg/thaboar_1.png b/game/client/src/main/resources/bg/thaboar_1.png
similarity index 100%
rename from src/main/resources/bg/thaboar_1.png
rename to game/client/src/main/resources/bg/thaboar_1.png
diff --git a/src/main/resources/bg/thaboar_2.png b/game/client/src/main/resources/bg/thaboar_2.png
similarity index 100%
rename from src/main/resources/bg/thaboar_2.png
rename to game/client/src/main/resources/bg/thaboar_2.png
diff --git a/src/main/resources/bg/thekingofnachos_tm_0.png b/game/client/src/main/resources/bg/thekingofnachos_tm_0.png
similarity index 100%
rename from src/main/resources/bg/thekingofnachos_tm_0.png
rename to game/client/src/main/resources/bg/thekingofnachos_tm_0.png
diff --git a/src/main/resources/bg/thekingofnachos_tm_1.png b/game/client/src/main/resources/bg/thekingofnachos_tm_1.png
similarity index 100%
rename from src/main/resources/bg/thekingofnachos_tm_1.png
rename to game/client/src/main/resources/bg/thekingofnachos_tm_1.png
diff --git a/src/main/resources/bg/umbrellamanray_0.png b/game/client/src/main/resources/bg/umbrellamanray_0.png
similarity index 100%
rename from src/main/resources/bg/umbrellamanray_0.png
rename to game/client/src/main/resources/bg/umbrellamanray_0.png
diff --git a/src/main/resources/bg/watermelonmojito_0.png b/game/client/src/main/resources/bg/watermelonmojito_0.png
similarity index 100%
rename from src/main/resources/bg/watermelonmojito_0.png
rename to game/client/src/main/resources/bg/watermelonmojito_0.png
diff --git a/src/main/resources/controllers.csv b/game/client/src/main/resources/controllers.csv
similarity index 100%
rename from src/main/resources/controllers.csv
rename to game/client/src/main/resources/controllers.csv
diff --git a/src/main/resources/credits.txt b/game/client/src/main/resources/credits.txt
similarity index 100%
rename from src/main/resources/credits.txt
rename to game/client/src/main/resources/credits.txt
diff --git a/src/main/resources/font/font_00.png b/game/client/src/main/resources/font/font_00.png
similarity index 100%
rename from src/main/resources/font/font_00.png
rename to game/client/src/main/resources/font/font_00.png
diff --git a/src/main/resources/font/font_01.png b/game/client/src/main/resources/font/font_01.png
similarity index 100%
rename from src/main/resources/font/font_01.png
rename to game/client/src/main/resources/font/font_01.png
diff --git a/src/main/resources/font/font_02.png b/game/client/src/main/resources/font/font_02.png
similarity index 100%
rename from src/main/resources/font/font_02.png
rename to game/client/src/main/resources/font/font_02.png
diff --git a/src/main/resources/font/font_03.png b/game/client/src/main/resources/font/font_03.png
similarity index 100%
rename from src/main/resources/font/font_03.png
rename to game/client/src/main/resources/font/font_03.png
diff --git a/src/main/resources/font/font_04.png b/game/client/src/main/resources/font/font_04.png
similarity index 100%
rename from src/main/resources/font/font_04.png
rename to game/client/src/main/resources/font/font_04.png
diff --git a/src/main/resources/font/font_05.png b/game/client/src/main/resources/font/font_05.png
similarity index 100%
rename from src/main/resources/font/font_05.png
rename to game/client/src/main/resources/font/font_05.png
diff --git a/src/main/resources/font/font_06.png b/game/client/src/main/resources/font/font_06.png
similarity index 100%
rename from src/main/resources/font/font_06.png
rename to game/client/src/main/resources/font/font_06.png
diff --git a/src/main/resources/font/font_07.png b/game/client/src/main/resources/font/font_07.png
similarity index 100%
rename from src/main/resources/font/font_07.png
rename to game/client/src/main/resources/font/font_07.png
diff --git a/src/main/resources/font/font_08.png b/game/client/src/main/resources/font/font_08.png
similarity index 100%
rename from src/main/resources/font/font_08.png
rename to game/client/src/main/resources/font/font_08.png
diff --git a/src/main/resources/font/font_09.png b/game/client/src/main/resources/font/font_09.png
similarity index 100%
rename from src/main/resources/font/font_09.png
rename to game/client/src/main/resources/font/font_09.png
diff --git a/src/main/resources/font/font_0A.png b/game/client/src/main/resources/font/font_0A.png
similarity index 100%
rename from src/main/resources/font/font_0A.png
rename to game/client/src/main/resources/font/font_0A.png
diff --git a/src/main/resources/font/font_0B.png b/game/client/src/main/resources/font/font_0B.png
similarity index 100%
rename from src/main/resources/font/font_0B.png
rename to game/client/src/main/resources/font/font_0B.png
diff --git a/src/main/resources/font/glyph_00.png b/game/client/src/main/resources/font/glyph_00.png
similarity index 100%
rename from src/main/resources/font/glyph_00.png
rename to game/client/src/main/resources/font/glyph_00.png
diff --git a/src/main/resources/font/glyph_01.png b/game/client/src/main/resources/font/glyph_01.png
similarity index 100%
rename from src/main/resources/font/glyph_01.png
rename to game/client/src/main/resources/font/glyph_01.png
diff --git a/src/main/resources/font/glyph_02.png b/game/client/src/main/resources/font/glyph_02.png
similarity index 100%
rename from src/main/resources/font/glyph_02.png
rename to game/client/src/main/resources/font/glyph_02.png
diff --git a/src/main/resources/font/glyph_03.png b/game/client/src/main/resources/font/glyph_03.png
similarity index 100%
rename from src/main/resources/font/glyph_03.png
rename to game/client/src/main/resources/font/glyph_03.png
diff --git a/src/main/resources/font/glyph_04.png b/game/client/src/main/resources/font/glyph_04.png
similarity index 100%
rename from src/main/resources/font/glyph_04.png
rename to game/client/src/main/resources/font/glyph_04.png
diff --git a/src/main/resources/font/glyph_05.png b/game/client/src/main/resources/font/glyph_05.png
similarity index 100%
rename from src/main/resources/font/glyph_05.png
rename to game/client/src/main/resources/font/glyph_05.png
diff --git a/src/main/resources/font/glyph_06.png b/game/client/src/main/resources/font/glyph_06.png
similarity index 100%
rename from src/main/resources/font/glyph_06.png
rename to game/client/src/main/resources/font/glyph_06.png
diff --git a/src/main/resources/font/glyph_07.png b/game/client/src/main/resources/font/glyph_07.png
similarity index 100%
rename from src/main/resources/font/glyph_07.png
rename to game/client/src/main/resources/font/glyph_07.png
diff --git a/src/main/resources/font/glyph_09.png b/game/client/src/main/resources/font/glyph_09.png
similarity index 100%
rename from src/main/resources/font/glyph_09.png
rename to game/client/src/main/resources/font/glyph_09.png
diff --git a/src/main/resources/font/glyph_0A.png b/game/client/src/main/resources/font/glyph_0A.png
similarity index 100%
rename from src/main/resources/font/glyph_0A.png
rename to game/client/src/main/resources/font/glyph_0A.png
diff --git a/src/main/resources/font/glyph_0B.png b/game/client/src/main/resources/font/glyph_0B.png
similarity index 100%
rename from src/main/resources/font/glyph_0B.png
rename to game/client/src/main/resources/font/glyph_0B.png
diff --git a/src/main/resources/font/glyph_0C.png b/game/client/src/main/resources/font/glyph_0C.png
similarity index 100%
rename from src/main/resources/font/glyph_0C.png
rename to game/client/src/main/resources/font/glyph_0C.png
diff --git a/src/main/resources/font/glyph_0D.png b/game/client/src/main/resources/font/glyph_0D.png
similarity index 100%
rename from src/main/resources/font/glyph_0D.png
rename to game/client/src/main/resources/font/glyph_0D.png
diff --git a/src/main/resources/font/glyph_0E.png b/game/client/src/main/resources/font/glyph_0E.png
similarity index 100%
rename from src/main/resources/font/glyph_0E.png
rename to game/client/src/main/resources/font/glyph_0E.png
diff --git a/src/main/resources/font/glyph_0F.png b/game/client/src/main/resources/font/glyph_0F.png
similarity index 100%
rename from src/main/resources/font/glyph_0F.png
rename to game/client/src/main/resources/font/glyph_0F.png
diff --git a/src/main/resources/font/glyph_10.png b/game/client/src/main/resources/font/glyph_10.png
similarity index 100%
rename from src/main/resources/font/glyph_10.png
rename to game/client/src/main/resources/font/glyph_10.png
diff --git a/src/main/resources/font/glyph_11.png b/game/client/src/main/resources/font/glyph_11.png
similarity index 100%
rename from src/main/resources/font/glyph_11.png
rename to game/client/src/main/resources/font/glyph_11.png
diff --git a/src/main/resources/font/glyph_12.png b/game/client/src/main/resources/font/glyph_12.png
similarity index 100%
rename from src/main/resources/font/glyph_12.png
rename to game/client/src/main/resources/font/glyph_12.png
diff --git a/src/main/resources/font/glyph_13.png b/game/client/src/main/resources/font/glyph_13.png
similarity index 100%
rename from src/main/resources/font/glyph_13.png
rename to game/client/src/main/resources/font/glyph_13.png
diff --git a/src/main/resources/font/glyph_14.png b/game/client/src/main/resources/font/glyph_14.png
similarity index 100%
rename from src/main/resources/font/glyph_14.png
rename to game/client/src/main/resources/font/glyph_14.png
diff --git a/src/main/resources/font/glyph_15.png b/game/client/src/main/resources/font/glyph_15.png
similarity index 100%
rename from src/main/resources/font/glyph_15.png
rename to game/client/src/main/resources/font/glyph_15.png
diff --git a/src/main/resources/font/glyph_16.png b/game/client/src/main/resources/font/glyph_16.png
similarity index 100%
rename from src/main/resources/font/glyph_16.png
rename to game/client/src/main/resources/font/glyph_16.png
diff --git a/src/main/resources/font/glyph_17.png b/game/client/src/main/resources/font/glyph_17.png
similarity index 100%
rename from src/main/resources/font/glyph_17.png
rename to game/client/src/main/resources/font/glyph_17.png
diff --git a/src/main/resources/font/glyph_18.png b/game/client/src/main/resources/font/glyph_18.png
similarity index 100%
rename from src/main/resources/font/glyph_18.png
rename to game/client/src/main/resources/font/glyph_18.png
diff --git a/src/main/resources/font/glyph_19.png b/game/client/src/main/resources/font/glyph_19.png
similarity index 100%
rename from src/main/resources/font/glyph_19.png
rename to game/client/src/main/resources/font/glyph_19.png
diff --git a/src/main/resources/font/glyph_1A.png b/game/client/src/main/resources/font/glyph_1A.png
similarity index 100%
rename from src/main/resources/font/glyph_1A.png
rename to game/client/src/main/resources/font/glyph_1A.png
diff --git a/src/main/resources/font/glyph_1B.png b/game/client/src/main/resources/font/glyph_1B.png
similarity index 100%
rename from src/main/resources/font/glyph_1B.png
rename to game/client/src/main/resources/font/glyph_1B.png
diff --git a/src/main/resources/font/glyph_1C.png b/game/client/src/main/resources/font/glyph_1C.png
similarity index 100%
rename from src/main/resources/font/glyph_1C.png
rename to game/client/src/main/resources/font/glyph_1C.png
diff --git a/src/main/resources/font/glyph_1D.png b/game/client/src/main/resources/font/glyph_1D.png
similarity index 100%
rename from src/main/resources/font/glyph_1D.png
rename to game/client/src/main/resources/font/glyph_1D.png
diff --git a/src/main/resources/font/glyph_1E.png b/game/client/src/main/resources/font/glyph_1E.png
similarity index 100%
rename from src/main/resources/font/glyph_1E.png
rename to game/client/src/main/resources/font/glyph_1E.png
diff --git a/src/main/resources/font/glyph_1F.png b/game/client/src/main/resources/font/glyph_1F.png
similarity index 100%
rename from src/main/resources/font/glyph_1F.png
rename to game/client/src/main/resources/font/glyph_1F.png
diff --git a/src/main/resources/font/glyph_20.png b/game/client/src/main/resources/font/glyph_20.png
similarity index 100%
rename from src/main/resources/font/glyph_20.png
rename to game/client/src/main/resources/font/glyph_20.png
diff --git a/src/main/resources/font/glyph_21.png b/game/client/src/main/resources/font/glyph_21.png
similarity index 100%
rename from src/main/resources/font/glyph_21.png
rename to game/client/src/main/resources/font/glyph_21.png
diff --git a/src/main/resources/font/glyph_22.png b/game/client/src/main/resources/font/glyph_22.png
similarity index 100%
rename from src/main/resources/font/glyph_22.png
rename to game/client/src/main/resources/font/glyph_22.png
diff --git a/src/main/resources/font/glyph_23.png b/game/client/src/main/resources/font/glyph_23.png
similarity index 100%
rename from src/main/resources/font/glyph_23.png
rename to game/client/src/main/resources/font/glyph_23.png
diff --git a/src/main/resources/font/glyph_24.png b/game/client/src/main/resources/font/glyph_24.png
similarity index 100%
rename from src/main/resources/font/glyph_24.png
rename to game/client/src/main/resources/font/glyph_24.png
diff --git a/src/main/resources/font/glyph_25.png b/game/client/src/main/resources/font/glyph_25.png
similarity index 100%
rename from src/main/resources/font/glyph_25.png
rename to game/client/src/main/resources/font/glyph_25.png
diff --git a/src/main/resources/font/glyph_26.png b/game/client/src/main/resources/font/glyph_26.png
similarity index 100%
rename from src/main/resources/font/glyph_26.png
rename to game/client/src/main/resources/font/glyph_26.png
diff --git a/src/main/resources/font/glyph_27.png b/game/client/src/main/resources/font/glyph_27.png
similarity index 100%
rename from src/main/resources/font/glyph_27.png
rename to game/client/src/main/resources/font/glyph_27.png
diff --git a/src/main/resources/font/glyph_28.png b/game/client/src/main/resources/font/glyph_28.png
similarity index 100%
rename from src/main/resources/font/glyph_28.png
rename to game/client/src/main/resources/font/glyph_28.png
diff --git a/src/main/resources/font/glyph_29.png b/game/client/src/main/resources/font/glyph_29.png
similarity index 100%
rename from src/main/resources/font/glyph_29.png
rename to game/client/src/main/resources/font/glyph_29.png
diff --git a/src/main/resources/font/glyph_2A.png b/game/client/src/main/resources/font/glyph_2A.png
similarity index 100%
rename from src/main/resources/font/glyph_2A.png
rename to game/client/src/main/resources/font/glyph_2A.png
diff --git a/src/main/resources/font/glyph_2B.png b/game/client/src/main/resources/font/glyph_2B.png
similarity index 100%
rename from src/main/resources/font/glyph_2B.png
rename to game/client/src/main/resources/font/glyph_2B.png
diff --git a/src/main/resources/font/glyph_2C.png b/game/client/src/main/resources/font/glyph_2C.png
similarity index 100%
rename from src/main/resources/font/glyph_2C.png
rename to game/client/src/main/resources/font/glyph_2C.png
diff --git a/src/main/resources/font/glyph_2D.png b/game/client/src/main/resources/font/glyph_2D.png
similarity index 100%
rename from src/main/resources/font/glyph_2D.png
rename to game/client/src/main/resources/font/glyph_2D.png
diff --git a/src/main/resources/font/glyph_2E.png b/game/client/src/main/resources/font/glyph_2E.png
similarity index 100%
rename from src/main/resources/font/glyph_2E.png
rename to game/client/src/main/resources/font/glyph_2E.png
diff --git a/src/main/resources/font/glyph_2F.png b/game/client/src/main/resources/font/glyph_2F.png
similarity index 100%
rename from src/main/resources/font/glyph_2F.png
rename to game/client/src/main/resources/font/glyph_2F.png
diff --git a/src/main/resources/font/glyph_30.png b/game/client/src/main/resources/font/glyph_30.png
similarity index 100%
rename from src/main/resources/font/glyph_30.png
rename to game/client/src/main/resources/font/glyph_30.png
diff --git a/src/main/resources/font/glyph_31.png b/game/client/src/main/resources/font/glyph_31.png
similarity index 100%
rename from src/main/resources/font/glyph_31.png
rename to game/client/src/main/resources/font/glyph_31.png
diff --git a/src/main/resources/font/glyph_32.png b/game/client/src/main/resources/font/glyph_32.png
similarity index 100%
rename from src/main/resources/font/glyph_32.png
rename to game/client/src/main/resources/font/glyph_32.png
diff --git a/src/main/resources/font/glyph_33.png b/game/client/src/main/resources/font/glyph_33.png
similarity index 100%
rename from src/main/resources/font/glyph_33.png
rename to game/client/src/main/resources/font/glyph_33.png
diff --git a/src/main/resources/font/glyph_34.png b/game/client/src/main/resources/font/glyph_34.png
similarity index 100%
rename from src/main/resources/font/glyph_34.png
rename to game/client/src/main/resources/font/glyph_34.png
diff --git a/src/main/resources/font/glyph_35.png b/game/client/src/main/resources/font/glyph_35.png
similarity index 100%
rename from src/main/resources/font/glyph_35.png
rename to game/client/src/main/resources/font/glyph_35.png
diff --git a/src/main/resources/font/glyph_36.png b/game/client/src/main/resources/font/glyph_36.png
similarity index 100%
rename from src/main/resources/font/glyph_36.png
rename to game/client/src/main/resources/font/glyph_36.png
diff --git a/src/main/resources/font/glyph_37.png b/game/client/src/main/resources/font/glyph_37.png
similarity index 100%
rename from src/main/resources/font/glyph_37.png
rename to game/client/src/main/resources/font/glyph_37.png
diff --git a/src/main/resources/font/glyph_38.png b/game/client/src/main/resources/font/glyph_38.png
similarity index 100%
rename from src/main/resources/font/glyph_38.png
rename to game/client/src/main/resources/font/glyph_38.png
diff --git a/src/main/resources/font/glyph_39.png b/game/client/src/main/resources/font/glyph_39.png
similarity index 100%
rename from src/main/resources/font/glyph_39.png
rename to game/client/src/main/resources/font/glyph_39.png
diff --git a/src/main/resources/font/glyph_3A.png b/game/client/src/main/resources/font/glyph_3A.png
similarity index 100%
rename from src/main/resources/font/glyph_3A.png
rename to game/client/src/main/resources/font/glyph_3A.png
diff --git a/src/main/resources/font/glyph_3B.png b/game/client/src/main/resources/font/glyph_3B.png
similarity index 100%
rename from src/main/resources/font/glyph_3B.png
rename to game/client/src/main/resources/font/glyph_3B.png
diff --git a/src/main/resources/font/glyph_3C.png b/game/client/src/main/resources/font/glyph_3C.png
similarity index 100%
rename from src/main/resources/font/glyph_3C.png
rename to game/client/src/main/resources/font/glyph_3C.png
diff --git a/src/main/resources/font/glyph_3D.png b/game/client/src/main/resources/font/glyph_3D.png
similarity index 100%
rename from src/main/resources/font/glyph_3D.png
rename to game/client/src/main/resources/font/glyph_3D.png
diff --git a/src/main/resources/font/glyph_3E.png b/game/client/src/main/resources/font/glyph_3E.png
similarity index 100%
rename from src/main/resources/font/glyph_3E.png
rename to game/client/src/main/resources/font/glyph_3E.png
diff --git a/src/main/resources/font/glyph_3F.png b/game/client/src/main/resources/font/glyph_3F.png
similarity index 100%
rename from src/main/resources/font/glyph_3F.png
rename to game/client/src/main/resources/font/glyph_3F.png
diff --git a/src/main/resources/font/glyph_40.png b/game/client/src/main/resources/font/glyph_40.png
similarity index 100%
rename from src/main/resources/font/glyph_40.png
rename to game/client/src/main/resources/font/glyph_40.png
diff --git a/src/main/resources/font/glyph_41.png b/game/client/src/main/resources/font/glyph_41.png
similarity index 100%
rename from src/main/resources/font/glyph_41.png
rename to game/client/src/main/resources/font/glyph_41.png
diff --git a/src/main/resources/font/glyph_42.png b/game/client/src/main/resources/font/glyph_42.png
similarity index 100%
rename from src/main/resources/font/glyph_42.png
rename to game/client/src/main/resources/font/glyph_42.png
diff --git a/src/main/resources/font/glyph_43.png b/game/client/src/main/resources/font/glyph_43.png
similarity index 100%
rename from src/main/resources/font/glyph_43.png
rename to game/client/src/main/resources/font/glyph_43.png
diff --git a/src/main/resources/font/glyph_44.png b/game/client/src/main/resources/font/glyph_44.png
similarity index 100%
rename from src/main/resources/font/glyph_44.png
rename to game/client/src/main/resources/font/glyph_44.png
diff --git a/src/main/resources/font/glyph_45.png b/game/client/src/main/resources/font/glyph_45.png
similarity index 100%
rename from src/main/resources/font/glyph_45.png
rename to game/client/src/main/resources/font/glyph_45.png
diff --git a/src/main/resources/font/glyph_46.png b/game/client/src/main/resources/font/glyph_46.png
similarity index 100%
rename from src/main/resources/font/glyph_46.png
rename to game/client/src/main/resources/font/glyph_46.png
diff --git a/src/main/resources/font/glyph_47.png b/game/client/src/main/resources/font/glyph_47.png
similarity index 100%
rename from src/main/resources/font/glyph_47.png
rename to game/client/src/main/resources/font/glyph_47.png
diff --git a/src/main/resources/font/glyph_48.png b/game/client/src/main/resources/font/glyph_48.png
similarity index 100%
rename from src/main/resources/font/glyph_48.png
rename to game/client/src/main/resources/font/glyph_48.png
diff --git a/src/main/resources/font/glyph_49.png b/game/client/src/main/resources/font/glyph_49.png
similarity index 100%
rename from src/main/resources/font/glyph_49.png
rename to game/client/src/main/resources/font/glyph_49.png
diff --git a/src/main/resources/font/glyph_4A.png b/game/client/src/main/resources/font/glyph_4A.png
similarity index 100%
rename from src/main/resources/font/glyph_4A.png
rename to game/client/src/main/resources/font/glyph_4A.png
diff --git a/src/main/resources/font/glyph_4B.png b/game/client/src/main/resources/font/glyph_4B.png
similarity index 100%
rename from src/main/resources/font/glyph_4B.png
rename to game/client/src/main/resources/font/glyph_4B.png
diff --git a/src/main/resources/font/glyph_4C.png b/game/client/src/main/resources/font/glyph_4C.png
similarity index 100%
rename from src/main/resources/font/glyph_4C.png
rename to game/client/src/main/resources/font/glyph_4C.png
diff --git a/src/main/resources/font/glyph_4D.png b/game/client/src/main/resources/font/glyph_4D.png
similarity index 100%
rename from src/main/resources/font/glyph_4D.png
rename to game/client/src/main/resources/font/glyph_4D.png
diff --git a/src/main/resources/font/glyph_4E.png b/game/client/src/main/resources/font/glyph_4E.png
similarity index 100%
rename from src/main/resources/font/glyph_4E.png
rename to game/client/src/main/resources/font/glyph_4E.png
diff --git a/src/main/resources/font/glyph_4F.png b/game/client/src/main/resources/font/glyph_4F.png
similarity index 100%
rename from src/main/resources/font/glyph_4F.png
rename to game/client/src/main/resources/font/glyph_4F.png
diff --git a/src/main/resources/font/glyph_50.png b/game/client/src/main/resources/font/glyph_50.png
similarity index 100%
rename from src/main/resources/font/glyph_50.png
rename to game/client/src/main/resources/font/glyph_50.png
diff --git a/src/main/resources/font/glyph_51.png b/game/client/src/main/resources/font/glyph_51.png
similarity index 100%
rename from src/main/resources/font/glyph_51.png
rename to game/client/src/main/resources/font/glyph_51.png
diff --git a/src/main/resources/font/glyph_52.png b/game/client/src/main/resources/font/glyph_52.png
similarity index 100%
rename from src/main/resources/font/glyph_52.png
rename to game/client/src/main/resources/font/glyph_52.png
diff --git a/src/main/resources/font/glyph_53.png b/game/client/src/main/resources/font/glyph_53.png
similarity index 100%
rename from src/main/resources/font/glyph_53.png
rename to game/client/src/main/resources/font/glyph_53.png
diff --git a/src/main/resources/font/glyph_54.png b/game/client/src/main/resources/font/glyph_54.png
similarity index 100%
rename from src/main/resources/font/glyph_54.png
rename to game/client/src/main/resources/font/glyph_54.png
diff --git a/src/main/resources/font/glyph_55.png b/game/client/src/main/resources/font/glyph_55.png
similarity index 100%
rename from src/main/resources/font/glyph_55.png
rename to game/client/src/main/resources/font/glyph_55.png
diff --git a/src/main/resources/font/glyph_56.png b/game/client/src/main/resources/font/glyph_56.png
similarity index 100%
rename from src/main/resources/font/glyph_56.png
rename to game/client/src/main/resources/font/glyph_56.png
diff --git a/src/main/resources/font/glyph_57.png b/game/client/src/main/resources/font/glyph_57.png
similarity index 100%
rename from src/main/resources/font/glyph_57.png
rename to game/client/src/main/resources/font/glyph_57.png
diff --git a/src/main/resources/font/glyph_58.png b/game/client/src/main/resources/font/glyph_58.png
similarity index 100%
rename from src/main/resources/font/glyph_58.png
rename to game/client/src/main/resources/font/glyph_58.png
diff --git a/src/main/resources/font/glyph_59.png b/game/client/src/main/resources/font/glyph_59.png
similarity index 100%
rename from src/main/resources/font/glyph_59.png
rename to game/client/src/main/resources/font/glyph_59.png
diff --git a/src/main/resources/font/glyph_5A.png b/game/client/src/main/resources/font/glyph_5A.png
similarity index 100%
rename from src/main/resources/font/glyph_5A.png
rename to game/client/src/main/resources/font/glyph_5A.png
diff --git a/src/main/resources/font/glyph_5B.png b/game/client/src/main/resources/font/glyph_5B.png
similarity index 100%
rename from src/main/resources/font/glyph_5B.png
rename to game/client/src/main/resources/font/glyph_5B.png
diff --git a/src/main/resources/font/glyph_5C.png b/game/client/src/main/resources/font/glyph_5C.png
similarity index 100%
rename from src/main/resources/font/glyph_5C.png
rename to game/client/src/main/resources/font/glyph_5C.png
diff --git a/src/main/resources/font/glyph_5D.png b/game/client/src/main/resources/font/glyph_5D.png
similarity index 100%
rename from src/main/resources/font/glyph_5D.png
rename to game/client/src/main/resources/font/glyph_5D.png
diff --git a/src/main/resources/font/glyph_5E.png b/game/client/src/main/resources/font/glyph_5E.png
similarity index 100%
rename from src/main/resources/font/glyph_5E.png
rename to game/client/src/main/resources/font/glyph_5E.png
diff --git a/src/main/resources/font/glyph_5F.png b/game/client/src/main/resources/font/glyph_5F.png
similarity index 100%
rename from src/main/resources/font/glyph_5F.png
rename to game/client/src/main/resources/font/glyph_5F.png
diff --git a/src/main/resources/font/glyph_60.png b/game/client/src/main/resources/font/glyph_60.png
similarity index 100%
rename from src/main/resources/font/glyph_60.png
rename to game/client/src/main/resources/font/glyph_60.png
diff --git a/src/main/resources/font/glyph_61.png b/game/client/src/main/resources/font/glyph_61.png
similarity index 100%
rename from src/main/resources/font/glyph_61.png
rename to game/client/src/main/resources/font/glyph_61.png
diff --git a/src/main/resources/font/glyph_62.png b/game/client/src/main/resources/font/glyph_62.png
similarity index 100%
rename from src/main/resources/font/glyph_62.png
rename to game/client/src/main/resources/font/glyph_62.png
diff --git a/src/main/resources/font/glyph_63.png b/game/client/src/main/resources/font/glyph_63.png
similarity index 100%
rename from src/main/resources/font/glyph_63.png
rename to game/client/src/main/resources/font/glyph_63.png
diff --git a/src/main/resources/font/glyph_64.png b/game/client/src/main/resources/font/glyph_64.png
similarity index 100%
rename from src/main/resources/font/glyph_64.png
rename to game/client/src/main/resources/font/glyph_64.png
diff --git a/src/main/resources/font/glyph_65.png b/game/client/src/main/resources/font/glyph_65.png
similarity index 100%
rename from src/main/resources/font/glyph_65.png
rename to game/client/src/main/resources/font/glyph_65.png
diff --git a/src/main/resources/font/glyph_66.png b/game/client/src/main/resources/font/glyph_66.png
similarity index 100%
rename from src/main/resources/font/glyph_66.png
rename to game/client/src/main/resources/font/glyph_66.png
diff --git a/src/main/resources/font/glyph_67.png b/game/client/src/main/resources/font/glyph_67.png
similarity index 100%
rename from src/main/resources/font/glyph_67.png
rename to game/client/src/main/resources/font/glyph_67.png
diff --git a/src/main/resources/font/glyph_68.png b/game/client/src/main/resources/font/glyph_68.png
similarity index 100%
rename from src/main/resources/font/glyph_68.png
rename to game/client/src/main/resources/font/glyph_68.png
diff --git a/src/main/resources/font/glyph_69.png b/game/client/src/main/resources/font/glyph_69.png
similarity index 100%
rename from src/main/resources/font/glyph_69.png
rename to game/client/src/main/resources/font/glyph_69.png
diff --git a/src/main/resources/font/glyph_6A.png b/game/client/src/main/resources/font/glyph_6A.png
similarity index 100%
rename from src/main/resources/font/glyph_6A.png
rename to game/client/src/main/resources/font/glyph_6A.png
diff --git a/src/main/resources/font/glyph_6B.png b/game/client/src/main/resources/font/glyph_6B.png
similarity index 100%
rename from src/main/resources/font/glyph_6B.png
rename to game/client/src/main/resources/font/glyph_6B.png
diff --git a/src/main/resources/font/glyph_6C.png b/game/client/src/main/resources/font/glyph_6C.png
similarity index 100%
rename from src/main/resources/font/glyph_6C.png
rename to game/client/src/main/resources/font/glyph_6C.png
diff --git a/src/main/resources/font/glyph_6D.png b/game/client/src/main/resources/font/glyph_6D.png
similarity index 100%
rename from src/main/resources/font/glyph_6D.png
rename to game/client/src/main/resources/font/glyph_6D.png
diff --git a/src/main/resources/font/glyph_6E.png b/game/client/src/main/resources/font/glyph_6E.png
similarity index 100%
rename from src/main/resources/font/glyph_6E.png
rename to game/client/src/main/resources/font/glyph_6E.png
diff --git a/src/main/resources/font/glyph_6F.png b/game/client/src/main/resources/font/glyph_6F.png
similarity index 100%
rename from src/main/resources/font/glyph_6F.png
rename to game/client/src/main/resources/font/glyph_6F.png
diff --git a/src/main/resources/font/glyph_70.png b/game/client/src/main/resources/font/glyph_70.png
similarity index 100%
rename from src/main/resources/font/glyph_70.png
rename to game/client/src/main/resources/font/glyph_70.png
diff --git a/src/main/resources/font/glyph_71.png b/game/client/src/main/resources/font/glyph_71.png
similarity index 100%
rename from src/main/resources/font/glyph_71.png
rename to game/client/src/main/resources/font/glyph_71.png
diff --git a/src/main/resources/font/glyph_72.png b/game/client/src/main/resources/font/glyph_72.png
similarity index 100%
rename from src/main/resources/font/glyph_72.png
rename to game/client/src/main/resources/font/glyph_72.png
diff --git a/src/main/resources/font/glyph_73.png b/game/client/src/main/resources/font/glyph_73.png
similarity index 100%
rename from src/main/resources/font/glyph_73.png
rename to game/client/src/main/resources/font/glyph_73.png
diff --git a/src/main/resources/font/glyph_74.png b/game/client/src/main/resources/font/glyph_74.png
similarity index 100%
rename from src/main/resources/font/glyph_74.png
rename to game/client/src/main/resources/font/glyph_74.png
diff --git a/src/main/resources/font/glyph_75.png b/game/client/src/main/resources/font/glyph_75.png
similarity index 100%
rename from src/main/resources/font/glyph_75.png
rename to game/client/src/main/resources/font/glyph_75.png
diff --git a/src/main/resources/font/glyph_76.png b/game/client/src/main/resources/font/glyph_76.png
similarity index 100%
rename from src/main/resources/font/glyph_76.png
rename to game/client/src/main/resources/font/glyph_76.png
diff --git a/src/main/resources/font/glyph_77.png b/game/client/src/main/resources/font/glyph_77.png
similarity index 100%
rename from src/main/resources/font/glyph_77.png
rename to game/client/src/main/resources/font/glyph_77.png
diff --git a/src/main/resources/font/glyph_78.png b/game/client/src/main/resources/font/glyph_78.png
similarity index 100%
rename from src/main/resources/font/glyph_78.png
rename to game/client/src/main/resources/font/glyph_78.png
diff --git a/src/main/resources/font/glyph_79.png b/game/client/src/main/resources/font/glyph_79.png
similarity index 100%
rename from src/main/resources/font/glyph_79.png
rename to game/client/src/main/resources/font/glyph_79.png
diff --git a/src/main/resources/font/glyph_7A.png b/game/client/src/main/resources/font/glyph_7A.png
similarity index 100%
rename from src/main/resources/font/glyph_7A.png
rename to game/client/src/main/resources/font/glyph_7A.png
diff --git a/src/main/resources/font/glyph_7B.png b/game/client/src/main/resources/font/glyph_7B.png
similarity index 100%
rename from src/main/resources/font/glyph_7B.png
rename to game/client/src/main/resources/font/glyph_7B.png
diff --git a/src/main/resources/font/glyph_7C.png b/game/client/src/main/resources/font/glyph_7C.png
similarity index 100%
rename from src/main/resources/font/glyph_7C.png
rename to game/client/src/main/resources/font/glyph_7C.png
diff --git a/src/main/resources/font/glyph_7D.png b/game/client/src/main/resources/font/glyph_7D.png
similarity index 100%
rename from src/main/resources/font/glyph_7D.png
rename to game/client/src/main/resources/font/glyph_7D.png
diff --git a/src/main/resources/font/glyph_7E.png b/game/client/src/main/resources/font/glyph_7E.png
similarity index 100%
rename from src/main/resources/font/glyph_7E.png
rename to game/client/src/main/resources/font/glyph_7E.png
diff --git a/src/main/resources/font/glyph_7F.png b/game/client/src/main/resources/font/glyph_7F.png
similarity index 100%
rename from src/main/resources/font/glyph_7F.png
rename to game/client/src/main/resources/font/glyph_7F.png
diff --git a/src/main/resources/font/glyph_80.png b/game/client/src/main/resources/font/glyph_80.png
similarity index 100%
rename from src/main/resources/font/glyph_80.png
rename to game/client/src/main/resources/font/glyph_80.png
diff --git a/src/main/resources/font/glyph_81.png b/game/client/src/main/resources/font/glyph_81.png
similarity index 100%
rename from src/main/resources/font/glyph_81.png
rename to game/client/src/main/resources/font/glyph_81.png
diff --git a/src/main/resources/font/glyph_82.png b/game/client/src/main/resources/font/glyph_82.png
similarity index 100%
rename from src/main/resources/font/glyph_82.png
rename to game/client/src/main/resources/font/glyph_82.png
diff --git a/src/main/resources/font/glyph_83.png b/game/client/src/main/resources/font/glyph_83.png
similarity index 100%
rename from src/main/resources/font/glyph_83.png
rename to game/client/src/main/resources/font/glyph_83.png
diff --git a/src/main/resources/font/glyph_84.png b/game/client/src/main/resources/font/glyph_84.png
similarity index 100%
rename from src/main/resources/font/glyph_84.png
rename to game/client/src/main/resources/font/glyph_84.png
diff --git a/src/main/resources/font/glyph_85.png b/game/client/src/main/resources/font/glyph_85.png
similarity index 100%
rename from src/main/resources/font/glyph_85.png
rename to game/client/src/main/resources/font/glyph_85.png
diff --git a/src/main/resources/font/glyph_86.png b/game/client/src/main/resources/font/glyph_86.png
similarity index 100%
rename from src/main/resources/font/glyph_86.png
rename to game/client/src/main/resources/font/glyph_86.png
diff --git a/src/main/resources/font/glyph_87.png b/game/client/src/main/resources/font/glyph_87.png
similarity index 100%
rename from src/main/resources/font/glyph_87.png
rename to game/client/src/main/resources/font/glyph_87.png
diff --git a/src/main/resources/font/glyph_88.png b/game/client/src/main/resources/font/glyph_88.png
similarity index 100%
rename from src/main/resources/font/glyph_88.png
rename to game/client/src/main/resources/font/glyph_88.png
diff --git a/src/main/resources/font/glyph_89.png b/game/client/src/main/resources/font/glyph_89.png
similarity index 100%
rename from src/main/resources/font/glyph_89.png
rename to game/client/src/main/resources/font/glyph_89.png
diff --git a/src/main/resources/font/glyph_8A.png b/game/client/src/main/resources/font/glyph_8A.png
similarity index 100%
rename from src/main/resources/font/glyph_8A.png
rename to game/client/src/main/resources/font/glyph_8A.png
diff --git a/src/main/resources/font/glyph_8B.png b/game/client/src/main/resources/font/glyph_8B.png
similarity index 100%
rename from src/main/resources/font/glyph_8B.png
rename to game/client/src/main/resources/font/glyph_8B.png
diff --git a/src/main/resources/font/glyph_8C.png b/game/client/src/main/resources/font/glyph_8C.png
similarity index 100%
rename from src/main/resources/font/glyph_8C.png
rename to game/client/src/main/resources/font/glyph_8C.png
diff --git a/src/main/resources/font/glyph_8D.png b/game/client/src/main/resources/font/glyph_8D.png
similarity index 100%
rename from src/main/resources/font/glyph_8D.png
rename to game/client/src/main/resources/font/glyph_8D.png
diff --git a/src/main/resources/font/glyph_8E.png b/game/client/src/main/resources/font/glyph_8E.png
similarity index 100%
rename from src/main/resources/font/glyph_8E.png
rename to game/client/src/main/resources/font/glyph_8E.png
diff --git a/src/main/resources/font/glyph_8F.png b/game/client/src/main/resources/font/glyph_8F.png
similarity index 100%
rename from src/main/resources/font/glyph_8F.png
rename to game/client/src/main/resources/font/glyph_8F.png
diff --git a/src/main/resources/font/glyph_90.png b/game/client/src/main/resources/font/glyph_90.png
similarity index 100%
rename from src/main/resources/font/glyph_90.png
rename to game/client/src/main/resources/font/glyph_90.png
diff --git a/src/main/resources/font/glyph_91.png b/game/client/src/main/resources/font/glyph_91.png
similarity index 100%
rename from src/main/resources/font/glyph_91.png
rename to game/client/src/main/resources/font/glyph_91.png
diff --git a/src/main/resources/font/glyph_92.png b/game/client/src/main/resources/font/glyph_92.png
similarity index 100%
rename from src/main/resources/font/glyph_92.png
rename to game/client/src/main/resources/font/glyph_92.png
diff --git a/src/main/resources/font/glyph_93.png b/game/client/src/main/resources/font/glyph_93.png
similarity index 100%
rename from src/main/resources/font/glyph_93.png
rename to game/client/src/main/resources/font/glyph_93.png
diff --git a/src/main/resources/font/glyph_94.png b/game/client/src/main/resources/font/glyph_94.png
similarity index 100%
rename from src/main/resources/font/glyph_94.png
rename to game/client/src/main/resources/font/glyph_94.png
diff --git a/src/main/resources/font/glyph_95.png b/game/client/src/main/resources/font/glyph_95.png
similarity index 100%
rename from src/main/resources/font/glyph_95.png
rename to game/client/src/main/resources/font/glyph_95.png
diff --git a/src/main/resources/font/glyph_96.png b/game/client/src/main/resources/font/glyph_96.png
similarity index 100%
rename from src/main/resources/font/glyph_96.png
rename to game/client/src/main/resources/font/glyph_96.png
diff --git a/src/main/resources/font/glyph_97.png b/game/client/src/main/resources/font/glyph_97.png
similarity index 100%
rename from src/main/resources/font/glyph_97.png
rename to game/client/src/main/resources/font/glyph_97.png
diff --git a/src/main/resources/font/glyph_98.png b/game/client/src/main/resources/font/glyph_98.png
similarity index 100%
rename from src/main/resources/font/glyph_98.png
rename to game/client/src/main/resources/font/glyph_98.png
diff --git a/src/main/resources/font/glyph_99.png b/game/client/src/main/resources/font/glyph_99.png
similarity index 100%
rename from src/main/resources/font/glyph_99.png
rename to game/client/src/main/resources/font/glyph_99.png
diff --git a/src/main/resources/font/glyph_9A.png b/game/client/src/main/resources/font/glyph_9A.png
similarity index 100%
rename from src/main/resources/font/glyph_9A.png
rename to game/client/src/main/resources/font/glyph_9A.png
diff --git a/src/main/resources/font/glyph_9B.png b/game/client/src/main/resources/font/glyph_9B.png
similarity index 100%
rename from src/main/resources/font/glyph_9B.png
rename to game/client/src/main/resources/font/glyph_9B.png
diff --git a/src/main/resources/font/glyph_9C.png b/game/client/src/main/resources/font/glyph_9C.png
similarity index 100%
rename from src/main/resources/font/glyph_9C.png
rename to game/client/src/main/resources/font/glyph_9C.png
diff --git a/src/main/resources/font/glyph_9D.png b/game/client/src/main/resources/font/glyph_9D.png
similarity index 100%
rename from src/main/resources/font/glyph_9D.png
rename to game/client/src/main/resources/font/glyph_9D.png
diff --git a/src/main/resources/font/glyph_9E.png b/game/client/src/main/resources/font/glyph_9E.png
similarity index 100%
rename from src/main/resources/font/glyph_9E.png
rename to game/client/src/main/resources/font/glyph_9E.png
diff --git a/src/main/resources/font/glyph_9F.png b/game/client/src/main/resources/font/glyph_9F.png
similarity index 100%
rename from src/main/resources/font/glyph_9F.png
rename to game/client/src/main/resources/font/glyph_9F.png
diff --git a/src/main/resources/font/glyph_A0.png b/game/client/src/main/resources/font/glyph_A0.png
similarity index 100%
rename from src/main/resources/font/glyph_A0.png
rename to game/client/src/main/resources/font/glyph_A0.png
diff --git a/src/main/resources/font/glyph_A1.png b/game/client/src/main/resources/font/glyph_A1.png
similarity index 100%
rename from src/main/resources/font/glyph_A1.png
rename to game/client/src/main/resources/font/glyph_A1.png
diff --git a/src/main/resources/font/glyph_A2.png b/game/client/src/main/resources/font/glyph_A2.png
similarity index 100%
rename from src/main/resources/font/glyph_A2.png
rename to game/client/src/main/resources/font/glyph_A2.png
diff --git a/src/main/resources/font/glyph_A3.png b/game/client/src/main/resources/font/glyph_A3.png
similarity index 100%
rename from src/main/resources/font/glyph_A3.png
rename to game/client/src/main/resources/font/glyph_A3.png
diff --git a/src/main/resources/font/glyph_A4.png b/game/client/src/main/resources/font/glyph_A4.png
similarity index 100%
rename from src/main/resources/font/glyph_A4.png
rename to game/client/src/main/resources/font/glyph_A4.png
diff --git a/src/main/resources/font/glyph_A5.png b/game/client/src/main/resources/font/glyph_A5.png
similarity index 100%
rename from src/main/resources/font/glyph_A5.png
rename to game/client/src/main/resources/font/glyph_A5.png
diff --git a/src/main/resources/font/glyph_A6.png b/game/client/src/main/resources/font/glyph_A6.png
similarity index 100%
rename from src/main/resources/font/glyph_A6.png
rename to game/client/src/main/resources/font/glyph_A6.png
diff --git a/src/main/resources/font/glyph_A7.png b/game/client/src/main/resources/font/glyph_A7.png
similarity index 100%
rename from src/main/resources/font/glyph_A7.png
rename to game/client/src/main/resources/font/glyph_A7.png
diff --git a/src/main/resources/font/glyph_A8.png b/game/client/src/main/resources/font/glyph_A8.png
similarity index 100%
rename from src/main/resources/font/glyph_A8.png
rename to game/client/src/main/resources/font/glyph_A8.png
diff --git a/src/main/resources/font/glyph_A9.png b/game/client/src/main/resources/font/glyph_A9.png
similarity index 100%
rename from src/main/resources/font/glyph_A9.png
rename to game/client/src/main/resources/font/glyph_A9.png
diff --git a/src/main/resources/font/glyph_AA.png b/game/client/src/main/resources/font/glyph_AA.png
similarity index 100%
rename from src/main/resources/font/glyph_AA.png
rename to game/client/src/main/resources/font/glyph_AA.png
diff --git a/src/main/resources/font/glyph_AB.png b/game/client/src/main/resources/font/glyph_AB.png
similarity index 100%
rename from src/main/resources/font/glyph_AB.png
rename to game/client/src/main/resources/font/glyph_AB.png
diff --git a/src/main/resources/font/glyph_AC.png b/game/client/src/main/resources/font/glyph_AC.png
similarity index 100%
rename from src/main/resources/font/glyph_AC.png
rename to game/client/src/main/resources/font/glyph_AC.png
diff --git a/src/main/resources/font/glyph_AD.png b/game/client/src/main/resources/font/glyph_AD.png
similarity index 100%
rename from src/main/resources/font/glyph_AD.png
rename to game/client/src/main/resources/font/glyph_AD.png
diff --git a/src/main/resources/font/glyph_AE.png b/game/client/src/main/resources/font/glyph_AE.png
similarity index 100%
rename from src/main/resources/font/glyph_AE.png
rename to game/client/src/main/resources/font/glyph_AE.png
diff --git a/src/main/resources/font/glyph_AF.png b/game/client/src/main/resources/font/glyph_AF.png
similarity index 100%
rename from src/main/resources/font/glyph_AF.png
rename to game/client/src/main/resources/font/glyph_AF.png
diff --git a/src/main/resources/font/glyph_B0.png b/game/client/src/main/resources/font/glyph_B0.png
similarity index 100%
rename from src/main/resources/font/glyph_B0.png
rename to game/client/src/main/resources/font/glyph_B0.png
diff --git a/src/main/resources/font/glyph_B1.png b/game/client/src/main/resources/font/glyph_B1.png
similarity index 100%
rename from src/main/resources/font/glyph_B1.png
rename to game/client/src/main/resources/font/glyph_B1.png
diff --git a/src/main/resources/font/glyph_B2.png b/game/client/src/main/resources/font/glyph_B2.png
similarity index 100%
rename from src/main/resources/font/glyph_B2.png
rename to game/client/src/main/resources/font/glyph_B2.png
diff --git a/src/main/resources/font/glyph_B3.png b/game/client/src/main/resources/font/glyph_B3.png
similarity index 100%
rename from src/main/resources/font/glyph_B3.png
rename to game/client/src/main/resources/font/glyph_B3.png
diff --git a/src/main/resources/font/glyph_B4.png b/game/client/src/main/resources/font/glyph_B4.png
similarity index 100%
rename from src/main/resources/font/glyph_B4.png
rename to game/client/src/main/resources/font/glyph_B4.png
diff --git a/src/main/resources/font/glyph_B5.png b/game/client/src/main/resources/font/glyph_B5.png
similarity index 100%
rename from src/main/resources/font/glyph_B5.png
rename to game/client/src/main/resources/font/glyph_B5.png
diff --git a/src/main/resources/font/glyph_B6.png b/game/client/src/main/resources/font/glyph_B6.png
similarity index 100%
rename from src/main/resources/font/glyph_B6.png
rename to game/client/src/main/resources/font/glyph_B6.png
diff --git a/src/main/resources/font/glyph_B7.png b/game/client/src/main/resources/font/glyph_B7.png
similarity index 100%
rename from src/main/resources/font/glyph_B7.png
rename to game/client/src/main/resources/font/glyph_B7.png
diff --git a/src/main/resources/font/glyph_B8.png b/game/client/src/main/resources/font/glyph_B8.png
similarity index 100%
rename from src/main/resources/font/glyph_B8.png
rename to game/client/src/main/resources/font/glyph_B8.png
diff --git a/src/main/resources/font/glyph_B9.png b/game/client/src/main/resources/font/glyph_B9.png
similarity index 100%
rename from src/main/resources/font/glyph_B9.png
rename to game/client/src/main/resources/font/glyph_B9.png
diff --git a/src/main/resources/font/glyph_BA.png b/game/client/src/main/resources/font/glyph_BA.png
similarity index 100%
rename from src/main/resources/font/glyph_BA.png
rename to game/client/src/main/resources/font/glyph_BA.png
diff --git a/src/main/resources/font/glyph_BB.png b/game/client/src/main/resources/font/glyph_BB.png
similarity index 100%
rename from src/main/resources/font/glyph_BB.png
rename to game/client/src/main/resources/font/glyph_BB.png
diff --git a/src/main/resources/font/glyph_BC.png b/game/client/src/main/resources/font/glyph_BC.png
similarity index 100%
rename from src/main/resources/font/glyph_BC.png
rename to game/client/src/main/resources/font/glyph_BC.png
diff --git a/src/main/resources/font/glyph_BD.png b/game/client/src/main/resources/font/glyph_BD.png
similarity index 100%
rename from src/main/resources/font/glyph_BD.png
rename to game/client/src/main/resources/font/glyph_BD.png
diff --git a/src/main/resources/font/glyph_BE.png b/game/client/src/main/resources/font/glyph_BE.png
similarity index 100%
rename from src/main/resources/font/glyph_BE.png
rename to game/client/src/main/resources/font/glyph_BE.png
diff --git a/src/main/resources/font/glyph_BF.png b/game/client/src/main/resources/font/glyph_BF.png
similarity index 100%
rename from src/main/resources/font/glyph_BF.png
rename to game/client/src/main/resources/font/glyph_BF.png
diff --git a/src/main/resources/font/glyph_C0.png b/game/client/src/main/resources/font/glyph_C0.png
similarity index 100%
rename from src/main/resources/font/glyph_C0.png
rename to game/client/src/main/resources/font/glyph_C0.png
diff --git a/src/main/resources/font/glyph_C1.png b/game/client/src/main/resources/font/glyph_C1.png
similarity index 100%
rename from src/main/resources/font/glyph_C1.png
rename to game/client/src/main/resources/font/glyph_C1.png
diff --git a/src/main/resources/font/glyph_C2.png b/game/client/src/main/resources/font/glyph_C2.png
similarity index 100%
rename from src/main/resources/font/glyph_C2.png
rename to game/client/src/main/resources/font/glyph_C2.png
diff --git a/src/main/resources/font/glyph_C3.png b/game/client/src/main/resources/font/glyph_C3.png
similarity index 100%
rename from src/main/resources/font/glyph_C3.png
rename to game/client/src/main/resources/font/glyph_C3.png
diff --git a/src/main/resources/font/glyph_C4.png b/game/client/src/main/resources/font/glyph_C4.png
similarity index 100%
rename from src/main/resources/font/glyph_C4.png
rename to game/client/src/main/resources/font/glyph_C4.png
diff --git a/src/main/resources/font/glyph_C5.png b/game/client/src/main/resources/font/glyph_C5.png
similarity index 100%
rename from src/main/resources/font/glyph_C5.png
rename to game/client/src/main/resources/font/glyph_C5.png
diff --git a/src/main/resources/font/glyph_C6.png b/game/client/src/main/resources/font/glyph_C6.png
similarity index 100%
rename from src/main/resources/font/glyph_C6.png
rename to game/client/src/main/resources/font/glyph_C6.png
diff --git a/src/main/resources/font/glyph_C7.png b/game/client/src/main/resources/font/glyph_C7.png
similarity index 100%
rename from src/main/resources/font/glyph_C7.png
rename to game/client/src/main/resources/font/glyph_C7.png
diff --git a/src/main/resources/font/glyph_C8.png b/game/client/src/main/resources/font/glyph_C8.png
similarity index 100%
rename from src/main/resources/font/glyph_C8.png
rename to game/client/src/main/resources/font/glyph_C8.png
diff --git a/src/main/resources/font/glyph_C9.png b/game/client/src/main/resources/font/glyph_C9.png
similarity index 100%
rename from src/main/resources/font/glyph_C9.png
rename to game/client/src/main/resources/font/glyph_C9.png
diff --git a/src/main/resources/font/glyph_CA.png b/game/client/src/main/resources/font/glyph_CA.png
similarity index 100%
rename from src/main/resources/font/glyph_CA.png
rename to game/client/src/main/resources/font/glyph_CA.png
diff --git a/src/main/resources/font/glyph_CB.png b/game/client/src/main/resources/font/glyph_CB.png
similarity index 100%
rename from src/main/resources/font/glyph_CB.png
rename to game/client/src/main/resources/font/glyph_CB.png
diff --git a/src/main/resources/font/glyph_CC.png b/game/client/src/main/resources/font/glyph_CC.png
similarity index 100%
rename from src/main/resources/font/glyph_CC.png
rename to game/client/src/main/resources/font/glyph_CC.png
diff --git a/src/main/resources/font/glyph_CD.png b/game/client/src/main/resources/font/glyph_CD.png
similarity index 100%
rename from src/main/resources/font/glyph_CD.png
rename to game/client/src/main/resources/font/glyph_CD.png
diff --git a/src/main/resources/font/glyph_CE.png b/game/client/src/main/resources/font/glyph_CE.png
similarity index 100%
rename from src/main/resources/font/glyph_CE.png
rename to game/client/src/main/resources/font/glyph_CE.png
diff --git a/src/main/resources/font/glyph_CF.png b/game/client/src/main/resources/font/glyph_CF.png
similarity index 100%
rename from src/main/resources/font/glyph_CF.png
rename to game/client/src/main/resources/font/glyph_CF.png
diff --git a/src/main/resources/font/glyph_D0.png b/game/client/src/main/resources/font/glyph_D0.png
similarity index 100%
rename from src/main/resources/font/glyph_D0.png
rename to game/client/src/main/resources/font/glyph_D0.png
diff --git a/src/main/resources/font/glyph_D1.png b/game/client/src/main/resources/font/glyph_D1.png
similarity index 100%
rename from src/main/resources/font/glyph_D1.png
rename to game/client/src/main/resources/font/glyph_D1.png
diff --git a/src/main/resources/font/glyph_D2.png b/game/client/src/main/resources/font/glyph_D2.png
similarity index 100%
rename from src/main/resources/font/glyph_D2.png
rename to game/client/src/main/resources/font/glyph_D2.png
diff --git a/src/main/resources/font/glyph_D3.png b/game/client/src/main/resources/font/glyph_D3.png
similarity index 100%
rename from src/main/resources/font/glyph_D3.png
rename to game/client/src/main/resources/font/glyph_D3.png
diff --git a/src/main/resources/font/glyph_D4.png b/game/client/src/main/resources/font/glyph_D4.png
similarity index 100%
rename from src/main/resources/font/glyph_D4.png
rename to game/client/src/main/resources/font/glyph_D4.png
diff --git a/src/main/resources/font/glyph_D5.png b/game/client/src/main/resources/font/glyph_D5.png
similarity index 100%
rename from src/main/resources/font/glyph_D5.png
rename to game/client/src/main/resources/font/glyph_D5.png
diff --git a/src/main/resources/font/glyph_D6.png b/game/client/src/main/resources/font/glyph_D6.png
similarity index 100%
rename from src/main/resources/font/glyph_D6.png
rename to game/client/src/main/resources/font/glyph_D6.png
diff --git a/src/main/resources/font/glyph_D7.png b/game/client/src/main/resources/font/glyph_D7.png
similarity index 100%
rename from src/main/resources/font/glyph_D7.png
rename to game/client/src/main/resources/font/glyph_D7.png
diff --git a/src/main/resources/font/glyph_F9.png b/game/client/src/main/resources/font/glyph_F9.png
similarity index 100%
rename from src/main/resources/font/glyph_F9.png
rename to game/client/src/main/resources/font/glyph_F9.png
diff --git a/src/main/resources/font/glyph_FA.png b/game/client/src/main/resources/font/glyph_FA.png
similarity index 100%
rename from src/main/resources/font/glyph_FA.png
rename to game/client/src/main/resources/font/glyph_FA.png
diff --git a/src/main/resources/font/glyph_FB.png b/game/client/src/main/resources/font/glyph_FB.png
similarity index 100%
rename from src/main/resources/font/glyph_FB.png
rename to game/client/src/main/resources/font/glyph_FB.png
diff --git a/src/main/resources/font/glyph_FC.png b/game/client/src/main/resources/font/glyph_FC.png
similarity index 100%
rename from src/main/resources/font/glyph_FC.png
rename to game/client/src/main/resources/font/glyph_FC.png
diff --git a/src/main/resources/font/glyph_FD.png b/game/client/src/main/resources/font/glyph_FD.png
similarity index 100%
rename from src/main/resources/font/glyph_FD.png
rename to game/client/src/main/resources/font/glyph_FD.png
diff --git a/src/main/resources/font/glyph_FE.png b/game/client/src/main/resources/font/glyph_FE.png
similarity index 100%
rename from src/main/resources/font/glyph_FE.png
rename to game/client/src/main/resources/font/glyph_FE.png
diff --git a/src/main/resources/font/glyph_FF.png b/game/client/src/main/resources/font/glyph_FF.png
similarity index 100%
rename from src/main/resources/font/glyph_FF.png
rename to game/client/src/main/resources/font/glyph_FF.png
diff --git a/src/main/resources/font/glyph_sizes.bin b/game/client/src/main/resources/font/glyph_sizes.bin
similarity index 100%
rename from src/main/resources/font/glyph_sizes.bin
rename to game/client/src/main/resources/font/glyph_sizes.bin
diff --git a/src/main/resources/font/glyph_sizes_default.bin b/game/client/src/main/resources/font/glyph_sizes_default.bin
similarity index 100%
rename from src/main/resources/font/glyph_sizes_default.bin
rename to game/client/src/main/resources/font/glyph_sizes_default.bin
diff --git a/src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/majonk.png b/game/client/src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/majonk.png
similarity index 100%
rename from src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/majonk.png
rename to game/client/src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/majonk.png
diff --git a/src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/mclogo.png b/game/client/src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/mclogo.png
similarity index 100%
rename from src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/mclogo.png
rename to game/client/src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/mclogo.png
diff --git a/src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/mojang.png b/game/client/src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/mojang.png
similarity index 100%
rename from src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/mojang.png
rename to game/client/src/main/resources/holidays/halloween/assets/minecraft/textures/gui/title/mojang.png
diff --git a/src/main/resources/icon/128.png b/game/client/src/main/resources/icon/128.png
similarity index 100%
rename from src/main/resources/icon/128.png
rename to game/client/src/main/resources/icon/128.png
diff --git a/src/main/resources/icon/16.png b/game/client/src/main/resources/icon/16.png
similarity index 100%
rename from src/main/resources/icon/16.png
rename to game/client/src/main/resources/icon/16.png
diff --git a/src/main/resources/icon/256.png b/game/client/src/main/resources/icon/256.png
similarity index 100%
rename from src/main/resources/icon/256.png
rename to game/client/src/main/resources/icon/256.png
diff --git a/src/main/resources/icon/32.png b/game/client/src/main/resources/icon/32.png
similarity index 100%
rename from src/main/resources/icon/32.png
rename to game/client/src/main/resources/icon/32.png
diff --git a/src/main/resources/icon/64.png b/game/client/src/main/resources/icon/64.png
similarity index 100%
rename from src/main/resources/icon/64.png
rename to game/client/src/main/resources/icon/64.png
diff --git a/src/main/resources/items.tiles b/game/client/src/main/resources/items.tiles
similarity index 100%
rename from src/main/resources/items.tiles
rename to game/client/src/main/resources/items.tiles
diff --git a/src/main/resources/manifest-schema.json b/game/client/src/main/resources/manifest-schema.json
similarity index 100%
rename from src/main/resources/manifest-schema.json
rename to game/client/src/main/resources/manifest-schema.json
diff --git a/src/main/resources/pack.png b/game/client/src/main/resources/pack.png
similarity index 100%
rename from src/main/resources/pack.png
rename to game/client/src/main/resources/pack.png
diff --git a/src/main/resources/pack.txt b/game/client/src/main/resources/pack.txt
similarity index 100%
rename from src/main/resources/pack.txt
rename to game/client/src/main/resources/pack.txt
diff --git a/src/main/resources/shaders/base.fsh b/game/client/src/main/resources/shaders/base.fsh
similarity index 100%
rename from src/main/resources/shaders/base.fsh
rename to game/client/src/main/resources/shaders/base.fsh
diff --git a/src/main/resources/shaders/base.vsh b/game/client/src/main/resources/shaders/base.vsh
similarity index 100%
rename from src/main/resources/shaders/base.vsh
rename to game/client/src/main/resources/shaders/base.vsh
diff --git a/src/main/resources/shaders/clouds.fsh b/game/client/src/main/resources/shaders/clouds.fsh
similarity index 100%
rename from src/main/resources/shaders/clouds.fsh
rename to game/client/src/main/resources/shaders/clouds.fsh
diff --git a/src/main/resources/shaders/clouds.vsh b/game/client/src/main/resources/shaders/clouds.vsh
similarity index 100%
rename from src/main/resources/shaders/clouds.vsh
rename to game/client/src/main/resources/shaders/clouds.vsh
diff --git a/src/main/resources/shaders/photo/blur/post.fsh b/game/client/src/main/resources/shaders/photo/blur/post.fsh
similarity index 100%
rename from src/main/resources/shaders/photo/blur/post.fsh
rename to game/client/src/main/resources/shaders/photo/blur/post.fsh
diff --git a/src/main/resources/shaders/photo/blur/post.vsh b/game/client/src/main/resources/shaders/photo/blur/post.vsh
similarity index 100%
rename from src/main/resources/shaders/photo/blur/post.vsh
rename to game/client/src/main/resources/shaders/photo/blur/post.vsh
diff --git a/src/main/resources/shaders/photo/distantblur/post.fsh b/game/client/src/main/resources/shaders/photo/distantblur/post.fsh
similarity index 100%
rename from src/main/resources/shaders/photo/distantblur/post.fsh
rename to game/client/src/main/resources/shaders/photo/distantblur/post.fsh
diff --git a/src/main/resources/shaders/photo/distantblur/post.vsh b/game/client/src/main/resources/shaders/photo/distantblur/post.vsh
similarity index 100%
rename from src/main/resources/shaders/photo/distantblur/post.vsh
rename to game/client/src/main/resources/shaders/photo/distantblur/post.vsh
diff --git a/src/main/resources/shaders/photo/eerie/post.fsh b/game/client/src/main/resources/shaders/photo/eerie/post.fsh
similarity index 100%
rename from src/main/resources/shaders/photo/eerie/post.fsh
rename to game/client/src/main/resources/shaders/photo/eerie/post.fsh
diff --git a/src/main/resources/shaders/photo/eerie/post.vsh b/game/client/src/main/resources/shaders/photo/eerie/post.vsh
similarity index 100%
rename from src/main/resources/shaders/photo/eerie/post.vsh
rename to game/client/src/main/resources/shaders/photo/eerie/post.vsh
diff --git a/src/main/resources/shaders/photo/inverted/post.fsh b/game/client/src/main/resources/shaders/photo/inverted/post.fsh
similarity index 100%
rename from src/main/resources/shaders/photo/inverted/post.fsh
rename to game/client/src/main/resources/shaders/photo/inverted/post.fsh
diff --git a/src/main/resources/shaders/photo/inverted/post.vsh b/game/client/src/main/resources/shaders/photo/inverted/post.vsh
similarity index 100%
rename from src/main/resources/shaders/photo/inverted/post.vsh
rename to game/client/src/main/resources/shaders/photo/inverted/post.vsh
diff --git a/src/main/resources/shaders/photo/outline/post.fsh b/game/client/src/main/resources/shaders/photo/outline/post.fsh
similarity index 100%
rename from src/main/resources/shaders/photo/outline/post.fsh
rename to game/client/src/main/resources/shaders/photo/outline/post.fsh
diff --git a/src/main/resources/shaders/photo/outline/post.vsh b/game/client/src/main/resources/shaders/photo/outline/post.vsh
similarity index 100%
rename from src/main/resources/shaders/photo/outline/post.vsh
rename to game/client/src/main/resources/shaders/photo/outline/post.vsh
diff --git a/src/main/resources/shaders/photo/outline2/post.fsh b/game/client/src/main/resources/shaders/photo/outline2/post.fsh
similarity index 100%
rename from src/main/resources/shaders/photo/outline2/post.fsh
rename to game/client/src/main/resources/shaders/photo/outline2/post.fsh
diff --git a/src/main/resources/shaders/photo/outline2/post.vsh b/game/client/src/main/resources/shaders/photo/outline2/post.vsh
similarity index 100%
rename from src/main/resources/shaders/photo/outline2/post.vsh
rename to game/client/src/main/resources/shaders/photo/outline2/post.vsh
diff --git a/src/main/resources/shaders/photo/sepia/post.fsh b/game/client/src/main/resources/shaders/photo/sepia/post.fsh
similarity index 100%
rename from src/main/resources/shaders/photo/sepia/post.fsh
rename to game/client/src/main/resources/shaders/photo/sepia/post.fsh
diff --git a/src/main/resources/shaders/photo/sepia/post.vsh b/game/client/src/main/resources/shaders/photo/sepia/post.vsh
similarity index 100%
rename from src/main/resources/shaders/photo/sepia/post.vsh
rename to game/client/src/main/resources/shaders/photo/sepia/post.vsh
diff --git a/src/main/resources/shaders/photo/silhouette/post.fsh b/game/client/src/main/resources/shaders/photo/silhouette/post.fsh
similarity index 100%
rename from src/main/resources/shaders/photo/silhouette/post.fsh
rename to game/client/src/main/resources/shaders/photo/silhouette/post.fsh
diff --git a/src/main/resources/shaders/photo/silhouette/post.vsh b/game/client/src/main/resources/shaders/photo/silhouette/post.vsh
similarity index 100%
rename from src/main/resources/shaders/photo/silhouette/post.vsh
rename to game/client/src/main/resources/shaders/photo/silhouette/post.vsh
diff --git a/src/main/resources/shaders/photo/tiltshift/post.fsh b/game/client/src/main/resources/shaders/photo/tiltshift/post.fsh
similarity index 100%
rename from src/main/resources/shaders/photo/tiltshift/post.fsh
rename to game/client/src/main/resources/shaders/photo/tiltshift/post.fsh
diff --git a/src/main/resources/shaders/photo/tiltshift/post.vsh b/game/client/src/main/resources/shaders/photo/tiltshift/post.vsh
similarity index 100%
rename from src/main/resources/shaders/photo/tiltshift/post.vsh
rename to game/client/src/main/resources/shaders/photo/tiltshift/post.vsh
diff --git a/src/main/resources/shaders/photo/vignette/post.fsh b/game/client/src/main/resources/shaders/photo/vignette/post.fsh
similarity index 100%
rename from src/main/resources/shaders/photo/vignette/post.fsh
rename to game/client/src/main/resources/shaders/photo/vignette/post.fsh
diff --git a/src/main/resources/shaders/photo/vignette/post.vsh b/game/client/src/main/resources/shaders/photo/vignette/post.vsh
similarity index 100%
rename from src/main/resources/shaders/photo/vignette/post.vsh
rename to game/client/src/main/resources/shaders/photo/vignette/post.vsh
diff --git a/src/main/resources/shaders/post.fsh b/game/client/src/main/resources/shaders/post.fsh
similarity index 96%
rename from src/main/resources/shaders/post.fsh
rename to game/client/src/main/resources/shaders/post.fsh
index 30de78080..6b9aa03e7 100644
--- a/src/main/resources/shaders/post.fsh
+++ b/game/client/src/main/resources/shaders/post.fsh
@@ -1,181 +1,181 @@
-#version 120
-
-uniform sampler2D colortex0;
-uniform sampler2D depthtex0;
-
-// Color correction params
-uniform float brightness;
-uniform float contrast;
-uniform float exposure;
-uniform float saturation;
-uniform float rMod;
-uniform float gMod;
-uniform float bMod;
-
-uniform float fxaa;
-uniform float heatHaze;
-uniform int bloom;
-
-uniform int dimension;
-uniform int shaderEffect;
-
-uniform float width;
-uniform float height;
-uniform float frameTimeCounter;
-
-varying vec2 texcoord;
-
-#define PI 3.14159
-
-// FXAA defines
-#define FXAA_REDUCE_MIN   (1.0/ 128.0)
-#define FXAA_REDUCE_MUL   (1.0 / 8.0)
-float FXAA_SPAN_MAX = 8.0f * fxaa;
-
-vec4 applyFXAA(vec2 fragCoord, sampler2D tex, vec2 uViewportSize) {
-    vec4 color;
-    vec2 inverseVP = vec2(1.0 / uViewportSize.x, 1.0 / uViewportSize.y);
-    vec3 rgbNW = texture2D(tex, (fragCoord + vec2(-1.0, -1.0)) * inverseVP).xyz;
-    vec3 rgbNE = texture2D(tex, (fragCoord + vec2(1.0, -1.0)) * inverseVP).xyz;
-    vec3 rgbSW = texture2D(tex, (fragCoord + vec2(-1.0, 1.0)) * inverseVP).xyz;
-    vec3 rgbSE = texture2D(tex, (fragCoord + vec2(1.0, 1.0)) * inverseVP).xyz;
-    vec3 rgbM  = texture2D(tex, fragCoord  * inverseVP).xyz;
-    vec3 luma = vec3(0.299, 0.587, 0.114);
-    float lumaNW = dot(rgbNW, luma);
-    float lumaNE = dot(rgbNE, luma);
-    float lumaSW = dot(rgbSW, luma);
-    float lumaSE = dot(rgbSE, luma);
-    float lumaM  = dot(rgbM,  luma);
-    float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
-    float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
-
-    vec2 dir;
-    dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
-    dir.y =  ((lumaNW + lumaSW) - (lumaNE + lumaSE));
-
-    float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *
-    (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);
-
-    float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);
-    dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
-    max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),
-    dir * rcpDirMin)) * inverseVP;
-
-    vec3 rgbA = 0.5 * (
-    texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +
-    texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);
-    vec3 rgbB = rgbA * 0.5 + 0.25 * (
-    texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +
-    texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);
-
-    float lumaB = dot(rgbB, luma);
-    if ((lumaB < lumaMin) || (lumaB > lumaMax))
-    color = vec4(rgbA, 1.0);
-    else
-    color = vec4(rgbB, 1.0);
-    return color;
-}
-
-vec3 adjustBrightness(vec3 color, float value) {
-    return color + value;
-}
-
-vec3 adjustContrast(vec3 color, float value) {
-    return 0.5 + (1.0 + value) * (color - 0.5);
-}
-
-vec3 adjustExposure(vec3 color, float value) {
-    return (1.0 + value) * color;
-}
-
-vec3 adjustSaturation(vec3 color, float value) {
-    const vec3 luminosityFactor = vec3(0.2126, 0.7152, 0.0722);
-    vec3 grayscale = vec3(dot(color, luminosityFactor));
-
-    return mix(grayscale, color, 1.0 + value);
-}
-
-vec3 adjustColor(vec3 color, float rValue, float gValue, float bValue) {
-    return vec3(color.r * rValue, color.g * gValue, color.b * bValue);
-}
-
-void Bloom(inout vec3 color) {
-	vec3 blur = vec3(0.0f);
-	
-	int quality = 7 * bloom;
-	float range = 10 * (3 - bloom);
-	
-	float qh = quality / 2.0f - 0.5f;
-	float allStrengths = 0.0f;
-	for(int i=0; i < quality; i++) {
-		for(int j=0; j < quality; j++) {
-			vec2 offset = vec2((i - qh) * range / width, (j - qh) * range / height);
-			
-			float dist = 1.33f - distance(vec2(qh), vec2(i, j)) / qh;
-			
-			float strength = dist;
-			
-			blur += pow(texture2D(colortex0, texcoord.xy + offset).rgb, vec3(2.2f)) * strength;
-			allStrengths += strength;
-		}
-	}
-	
-	blur /= allStrengths;
-	
-	color.rgb *= 1.0f - (bloom * 0.1f);
-	color.rgb += blur.rgb * 0.15f * bloom;
-}
-
-void HeatHaze(inout vec2 coord, float amount) {
-	float depth = texture2D(depthtex0, coord.xy).r;
-	float strength = pow(depth, 500);
-	strength = (strength - 0.16) * 2.0f;
-	strength = clamp(strength, 0.0f, 1.0f) * amount;
-	
-	vec2 wave = vec2(0.0f, 0.0f);
-	
-	float waveSize = 50;
-	wave.x += sin(coord.y * 1.3 * waveSize + frameTimeCounter * 10);
-	wave.x += sin(coord.y * 5.0 * waveSize + frameTimeCounter * 14);
-	wave.y += sin(coord.x * 1.0 * waveSize + frameTimeCounter * 5) * 2;
-	
-	coord += wave * strength * 0.0001f;
-}
-
-
-vec3 colorEffects(vec3 tex) {
-    if (shaderEffect == 1) {
-        return vec3(tex.r, 0, 0);
-    }
-    return tex;
-}
-
-
-void main() {
-    vec3 color = vec3(0.0);
-	vec2 coord = texcoord;
-	
-	if(heatHaze > 0) {
-		HeatHaze(coord, heatHaze);
-	}
-	
-    if (fxaa > 0.01) {
-        color = applyFXAA(vec2(coord.x * width, coord.y * height), colortex0, vec2(width, height)).rgb;
-    } else {
-        color = texture2D(colortex0, coord.xy).rgb;
-    }
-	
-	if(bloom > 0) {
-		Bloom(color);
-	}
-	
-    // Perform color correction
-    color = adjustBrightness(color, brightness);
-    color = adjustContrast(color, contrast);
-    color = adjustExposure(color, exposure);
-    color = adjustSaturation(color, saturation);
-    color = adjustColor(color, rMod, gMod, bMod);
-    color = colorEffects(color);
-	
-    gl_FragColor = vec4(color, 1.0);
+#version 120
+
+uniform sampler2D colortex0;
+uniform sampler2D depthtex0;
+
+// Color correction params
+uniform float brightness;
+uniform float contrast;
+uniform float exposure;
+uniform float saturation;
+uniform float rMod;
+uniform float gMod;
+uniform float bMod;
+
+uniform float fxaa;
+uniform float heatHaze;
+uniform int bloom;
+
+uniform int dimension;
+uniform int shaderEffect;
+
+uniform float width;
+uniform float height;
+uniform float frameTimeCounter;
+
+varying vec2 texcoord;
+
+#define PI 3.14159
+
+// FXAA defines
+#define FXAA_REDUCE_MIN   (1.0/ 128.0)
+#define FXAA_REDUCE_MUL   (1.0 / 8.0)
+float FXAA_SPAN_MAX = 8.0f * fxaa;
+
+vec4 applyFXAA(vec2 fragCoord, sampler2D tex, vec2 uViewportSize) {
+    vec4 color;
+    vec2 inverseVP = vec2(1.0 / uViewportSize.x, 1.0 / uViewportSize.y);
+    vec3 rgbNW = texture2D(tex, (fragCoord + vec2(-1.0, -1.0)) * inverseVP).xyz;
+    vec3 rgbNE = texture2D(tex, (fragCoord + vec2(1.0, -1.0)) * inverseVP).xyz;
+    vec3 rgbSW = texture2D(tex, (fragCoord + vec2(-1.0, 1.0)) * inverseVP).xyz;
+    vec3 rgbSE = texture2D(tex, (fragCoord + vec2(1.0, 1.0)) * inverseVP).xyz;
+    vec3 rgbM  = texture2D(tex, fragCoord  * inverseVP).xyz;
+    vec3 luma = vec3(0.299, 0.587, 0.114);
+    float lumaNW = dot(rgbNW, luma);
+    float lumaNE = dot(rgbNE, luma);
+    float lumaSW = dot(rgbSW, luma);
+    float lumaSE = dot(rgbSE, luma);
+    float lumaM  = dot(rgbM,  luma);
+    float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
+    float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
+
+    vec2 dir;
+    dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
+    dir.y =  ((lumaNW + lumaSW) - (lumaNE + lumaSE));
+
+    float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *
+    (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);
+
+    float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);
+    dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
+    max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX),
+    dir * rcpDirMin)) * inverseVP;
+
+    vec3 rgbA = 0.5 * (
+    texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +
+    texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);
+    vec3 rgbB = rgbA * 0.5 + 0.25 * (
+    texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +
+    texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);
+
+    float lumaB = dot(rgbB, luma);
+    if ((lumaB < lumaMin) || (lumaB > lumaMax))
+    color = vec4(rgbA, 1.0);
+    else
+    color = vec4(rgbB, 1.0);
+    return color;
+}
+
+vec3 adjustBrightness(vec3 color, float value) {
+    return color + value;
+}
+
+vec3 adjustContrast(vec3 color, float value) {
+    return 0.5 + (1.0 + value) * (color - 0.5);
+}
+
+vec3 adjustExposure(vec3 color, float value) {
+    return (1.0 + value) * color;
+}
+
+vec3 adjustSaturation(vec3 color, float value) {
+    const vec3 luminosityFactor = vec3(0.2126, 0.7152, 0.0722);
+    vec3 grayscale = vec3(dot(color, luminosityFactor));
+
+    return mix(grayscale, color, 1.0 + value);
+}
+
+vec3 adjustColor(vec3 color, float rValue, float gValue, float bValue) {
+    return vec3(color.r * rValue, color.g * gValue, color.b * bValue);
+}
+
+void Bloom(inout vec3 color) {
+	vec3 blur = vec3(0.0f);
+	
+	int quality = 7 * bloom;
+	float range = 10 * (3 - bloom);
+	
+	float qh = quality / 2.0f - 0.5f;
+	float allStrengths = 0.0f;
+	for(int i=0; i < quality; i++) {
+		for(int j=0; j < quality; j++) {
+			vec2 offset = vec2((i - qh) * range / width, (j - qh) * range / height);
+			
+			float dist = 1.33f - distance(vec2(qh), vec2(i, j)) / qh;
+			
+			float strength = dist;
+			
+			blur += pow(texture2D(colortex0, texcoord.xy + offset).rgb, vec3(2.2f)) * strength;
+			allStrengths += strength;
+		}
+	}
+	
+	blur /= allStrengths;
+	
+	color.rgb *= 1.0f - (bloom * 0.1f);
+	color.rgb += blur.rgb * 0.15f * bloom;
+}
+
+void HeatHaze(inout vec2 coord, float amount) {
+	float depth = texture2D(depthtex0, coord.xy).r;
+	float strength = pow(depth, 500);
+	strength = (strength - 0.16) * 2.0f;
+	strength = clamp(strength, 0.0f, 1.0f) * amount;
+	
+	vec2 wave = vec2(0.0f, 0.0f);
+	
+	float waveSize = 50;
+	wave.x += sin(coord.y * 1.3 * waveSize + frameTimeCounter * 10);
+	wave.x += sin(coord.y * 5.0 * waveSize + frameTimeCounter * 14);
+	wave.y += sin(coord.x * 1.0 * waveSize + frameTimeCounter * 5) * 2;
+	
+	coord += wave * strength * 0.0001f;
+}
+
+
+vec3 colorEffects(vec3 tex) {
+    if (shaderEffect == 1) {
+        return vec3(tex.r, 0, 0);
+    }
+    return tex;
+}
+
+
+void main() {
+    vec3 color = vec3(0.0);
+	vec2 coord = texcoord;
+	
+	if(heatHaze > 0) {
+		HeatHaze(coord, heatHaze);
+	}
+	
+    if (fxaa > 0.01) {
+        color = applyFXAA(vec2(coord.x * width, coord.y * height), colortex0, vec2(width, height)).rgb;
+    } else {
+        color = texture2D(colortex0, coord.xy).rgb;
+    }
+	
+	if(bloom > 0) {
+		Bloom(color);
+	}
+	
+    // Perform color correction
+    color = adjustBrightness(color, brightness);
+    color = adjustContrast(color, contrast);
+    color = adjustExposure(color, exposure);
+    color = adjustSaturation(color, saturation);
+    color = adjustColor(color, rMod, gMod, bMod);
+    color = colorEffects(color);
+	
+    gl_FragColor = vec4(color, 1.0);
 }
\ No newline at end of file
diff --git a/src/main/resources/shaders/post.vsh b/game/client/src/main/resources/shaders/post.vsh
similarity index 93%
rename from src/main/resources/shaders/post.vsh
rename to game/client/src/main/resources/shaders/post.vsh
index 65a3a9f49..5650d067e 100644
--- a/src/main/resources/shaders/post.vsh
+++ b/game/client/src/main/resources/shaders/post.vsh
@@ -1,9 +1,9 @@
-#version 120
-
-varying vec2 texcoord;
-
-void main(){
-    gl_Position = ftransform();
-
-    texcoord = gl_MultiTexCoord0.xy;
+#version 120
+
+varying vec2 texcoord;
+
+void main(){
+    gl_Position = ftransform();
+
+    texcoord = gl_MultiTexCoord0.xy;
 }
\ No newline at end of file
diff --git a/src/main/resources/shaders/showdepth.fsh b/game/client/src/main/resources/shaders/showdepth.fsh
similarity index 100%
rename from src/main/resources/shaders/showdepth.fsh
rename to game/client/src/main/resources/shaders/showdepth.fsh
diff --git a/src/main/resources/shaders/showdepth.vsh b/game/client/src/main/resources/shaders/showdepth.vsh
similarity index 100%
rename from src/main/resources/shaders/showdepth.vsh
rename to game/client/src/main/resources/shaders/showdepth.vsh
diff --git a/src/main/resources/terrain.tiles b/game/client/src/main/resources/terrain.tiles
similarity index 100%
rename from src/main/resources/terrain.tiles
rename to game/client/src/main/resources/terrain.tiles
diff --git a/src/main/resources/terrain/rainbow.png b/game/client/src/main/resources/terrain/rainbow.png
similarity index 100%
rename from src/main/resources/terrain/rainbow.png
rename to game/client/src/main/resources/terrain/rainbow.png
diff --git a/game/core/.gitignore b/game/core/.gitignore
new file mode 100644
index 000000000..378eac25d
--- /dev/null
+++ b/game/core/.gitignore
@@ -0,0 +1 @@
+build
diff --git a/game/core/build.gradle.kts b/game/core/build.gradle.kts
new file mode 100644
index 000000000..c07796b5a
--- /dev/null
+++ b/game/core/build.gradle.kts
@@ -0,0 +1,79 @@
+import java.util.*
+
+plugins {
+    id("java")
+}
+
+group = providers.gradleProperty("bta.group").get()
+version = providers.gradleProperty("bta.version").get()
+val texturePackFormat = providers.gradleProperty("bta.texturePackFormat").get()
+val buildChannel = providers.gradleProperty("bta.buildChannel").get()
+
+run {
+    val file = File("version.txt")
+    if (file.exists()) {
+        val ver = file.readText().trim()
+        version = ver
+    }
+}
+
+repositories {
+    mavenCentral()
+    maven("https://libraries.minecraft.net/")
+}
+
+dependencies {
+    // <core dependencies>
+    implementation(libs.jetbrains.annotations)
+    implementation(libs.gson)
+    implementation(libs.brigadier)
+    implementation(libs.bundles.log4j)
+    // </core dependencies>
+}
+
+java {
+    sourceCompatibility = JavaVersion.VERSION_1_8
+    targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+//region Tasks
+val versionGenerator by tasks.registering {
+    group = "bta.generator"
+    val versionDir = project.layout.buildDirectory.dir("generated/sources/version/java")
+    val outputFile = versionDir.get().file("net/minecraft/core/Version.java").asFile
+    outputs.dir(versionDir)
+
+    doLast {
+        outputFile.parentFile.mkdirs()
+        outputFile.writeText(
+                """
+                    package net.minecraft.core;
+                    
+                    public final class Version {
+                        public static final String VERSION = "$version";
+                        public static final long BUILD_TIME = ${Date().time}L;
+                        public static final int TEXTURE_PACK_FORMAT = $texturePackFormat;
+                        public static final BuildChannel BUILD_CHANNEL = $buildChannel;
+                    }
+                """.trimIndent()
+        )
+    }
+}
+
+tasks.withType(JavaCompile::class.java) {
+    options.isIncremental = false
+    options.encoding = "UTF-8"
+    if (JavaVersion.current() != JavaVersion.VERSION_1_8) {
+        options.compilerArgs.add("--release")
+        options.compilerArgs.add("8")
+    }
+}
+//endregion
+
+sourceSets {
+    main {
+        java {
+            srcDir(versionGenerator)
+        }
+    }
+}
diff --git a/src/main/java/com/b100/json/JsonFile.java b/game/core/src/main/java/com/b100/json/JsonFile.java
similarity index 100%
rename from src/main/java/com/b100/json/JsonFile.java
rename to game/core/src/main/java/com/b100/json/JsonFile.java
diff --git a/src/main/java/com/b100/json/JsonParser.java b/game/core/src/main/java/com/b100/json/JsonParser.java
similarity index 100%
rename from src/main/java/com/b100/json/JsonParser.java
rename to game/core/src/main/java/com/b100/json/JsonParser.java
diff --git a/src/main/java/com/b100/json/element/JsonArray.java b/game/core/src/main/java/com/b100/json/element/JsonArray.java
similarity index 100%
rename from src/main/java/com/b100/json/element/JsonArray.java
rename to game/core/src/main/java/com/b100/json/element/JsonArray.java
diff --git a/src/main/java/com/b100/json/element/JsonBoolean.java b/game/core/src/main/java/com/b100/json/element/JsonBoolean.java
similarity index 100%
rename from src/main/java/com/b100/json/element/JsonBoolean.java
rename to game/core/src/main/java/com/b100/json/element/JsonBoolean.java
diff --git a/src/main/java/com/b100/json/element/JsonElement.java b/game/core/src/main/java/com/b100/json/element/JsonElement.java
similarity index 100%
rename from src/main/java/com/b100/json/element/JsonElement.java
rename to game/core/src/main/java/com/b100/json/element/JsonElement.java
diff --git a/src/main/java/com/b100/json/element/JsonEntry.java b/game/core/src/main/java/com/b100/json/element/JsonEntry.java
similarity index 100%
rename from src/main/java/com/b100/json/element/JsonEntry.java
rename to game/core/src/main/java/com/b100/json/element/JsonEntry.java
diff --git a/src/main/java/com/b100/json/element/JsonNumber.java b/game/core/src/main/java/com/b100/json/element/JsonNumber.java
similarity index 100%
rename from src/main/java/com/b100/json/element/JsonNumber.java
rename to game/core/src/main/java/com/b100/json/element/JsonNumber.java
diff --git a/src/main/java/com/b100/json/element/JsonObject.java b/game/core/src/main/java/com/b100/json/element/JsonObject.java
similarity index 100%
rename from src/main/java/com/b100/json/element/JsonObject.java
rename to game/core/src/main/java/com/b100/json/element/JsonObject.java
diff --git a/src/main/java/com/b100/json/element/JsonString.java b/game/core/src/main/java/com/b100/json/element/JsonString.java
similarity index 100%
rename from src/main/java/com/b100/json/element/JsonString.java
rename to game/core/src/main/java/com/b100/json/element/JsonString.java
diff --git a/src/main/java/com/b100/utils/AbstractParser.java b/game/core/src/main/java/com/b100/utils/AbstractParser.java
similarity index 100%
rename from src/main/java/com/b100/utils/AbstractParser.java
rename to game/core/src/main/java/com/b100/utils/AbstractParser.java
diff --git a/src/main/java/com/b100/utils/ArrayIterator.java b/game/core/src/main/java/com/b100/utils/ArrayIterator.java
similarity index 100%
rename from src/main/java/com/b100/utils/ArrayIterator.java
rename to game/core/src/main/java/com/b100/utils/ArrayIterator.java
diff --git a/src/main/java/com/b100/utils/FileUtils.java b/game/core/src/main/java/com/b100/utils/FileUtils.java
similarity index 100%
rename from src/main/java/com/b100/utils/FileUtils.java
rename to game/core/src/main/java/com/b100/utils/FileUtils.java
diff --git a/src/main/java/com/b100/utils/ImageUtils.java b/game/core/src/main/java/com/b100/utils/ImageUtils.java
similarity index 100%
rename from src/main/java/com/b100/utils/ImageUtils.java
rename to game/core/src/main/java/com/b100/utils/ImageUtils.java
diff --git a/src/main/java/com/b100/utils/InvalidCharacterException.java b/game/core/src/main/java/com/b100/utils/InvalidCharacterException.java
similarity index 100%
rename from src/main/java/com/b100/utils/InvalidCharacterException.java
rename to game/core/src/main/java/com/b100/utils/InvalidCharacterException.java
diff --git a/src/main/java/com/b100/utils/ObjectParser.java b/game/core/src/main/java/com/b100/utils/ObjectParser.java
similarity index 100%
rename from src/main/java/com/b100/utils/ObjectParser.java
rename to game/core/src/main/java/com/b100/utils/ObjectParser.java
diff --git a/src/main/java/com/b100/utils/Parser.java b/game/core/src/main/java/com/b100/utils/Parser.java
similarity index 100%
rename from src/main/java/com/b100/utils/Parser.java
rename to game/core/src/main/java/com/b100/utils/Parser.java
diff --git a/src/main/java/com/b100/utils/ParserCollection.java b/game/core/src/main/java/com/b100/utils/ParserCollection.java
similarity index 100%
rename from src/main/java/com/b100/utils/ParserCollection.java
rename to game/core/src/main/java/com/b100/utils/ParserCollection.java
diff --git a/src/main/java/com/b100/utils/ReflectUtils.java b/game/core/src/main/java/com/b100/utils/ReflectUtils.java
similarity index 100%
rename from src/main/java/com/b100/utils/ReflectUtils.java
rename to game/core/src/main/java/com/b100/utils/ReflectUtils.java
diff --git a/src/main/java/com/b100/utils/StreamUtils.java b/game/core/src/main/java/com/b100/utils/StreamUtils.java
similarity index 100%
rename from src/main/java/com/b100/utils/StreamUtils.java
rename to game/core/src/main/java/com/b100/utils/StreamUtils.java
diff --git a/src/main/java/com/b100/utils/StringParser.java b/game/core/src/main/java/com/b100/utils/StringParser.java
similarity index 100%
rename from src/main/java/com/b100/utils/StringParser.java
rename to game/core/src/main/java/com/b100/utils/StringParser.java
diff --git a/src/main/java/com/b100/utils/StringReader.java b/game/core/src/main/java/com/b100/utils/StringReader.java
similarity index 100%
rename from src/main/java/com/b100/utils/StringReader.java
rename to game/core/src/main/java/com/b100/utils/StringReader.java
diff --git a/src/main/java/com/b100/utils/StringUtils.java b/game/core/src/main/java/com/b100/utils/StringUtils.java
similarity index 100%
rename from src/main/java/com/b100/utils/StringUtils.java
rename to game/core/src/main/java/com/b100/utils/StringUtils.java
diff --git a/src/main/java/com/b100/utils/StringWriter.java b/game/core/src/main/java/com/b100/utils/StringWriter.java
similarity index 100%
rename from src/main/java/com/b100/utils/StringWriter.java
rename to game/core/src/main/java/com/b100/utils/StringWriter.java
diff --git a/src/main/java/com/b100/utils/Utils.java b/game/core/src/main/java/com/b100/utils/Utils.java
similarity index 100%
rename from src/main/java/com/b100/utils/Utils.java
rename to game/core/src/main/java/com/b100/utils/Utils.java
diff --git a/src/main/java/com/b100/utils/Writable.java b/game/core/src/main/java/com/b100/utils/Writable.java
similarity index 100%
rename from src/main/java/com/b100/utils/Writable.java
rename to game/core/src/main/java/com/b100/utils/Writable.java
diff --git a/src/main/java/com/b100/utils/interfaces/Condition.java b/game/core/src/main/java/com/b100/utils/interfaces/Condition.java
similarity index 100%
rename from src/main/java/com/b100/utils/interfaces/Condition.java
rename to game/core/src/main/java/com/b100/utils/interfaces/Condition.java
diff --git a/src/main/java/com/b100/utils/interfaces/Listener.java b/game/core/src/main/java/com/b100/utils/interfaces/Listener.java
similarity index 100%
rename from src/main/java/com/b100/utils/interfaces/Listener.java
rename to game/core/src/main/java/com/b100/utils/interfaces/Listener.java
diff --git a/src/main/java/com/b100/xml/XmlFile.java b/game/core/src/main/java/com/b100/xml/XmlFile.java
similarity index 100%
rename from src/main/java/com/b100/xml/XmlFile.java
rename to game/core/src/main/java/com/b100/xml/XmlFile.java
diff --git a/src/main/java/com/b100/xml/XmlParser.java b/game/core/src/main/java/com/b100/xml/XmlParser.java
similarity index 100%
rename from src/main/java/com/b100/xml/XmlParser.java
rename to game/core/src/main/java/com/b100/xml/XmlParser.java
diff --git a/src/main/java/com/b100/xml/element/XmlAttribute.java b/game/core/src/main/java/com/b100/xml/element/XmlAttribute.java
similarity index 100%
rename from src/main/java/com/b100/xml/element/XmlAttribute.java
rename to game/core/src/main/java/com/b100/xml/element/XmlAttribute.java
diff --git a/src/main/java/com/b100/xml/element/XmlAttributeList.java b/game/core/src/main/java/com/b100/xml/element/XmlAttributeList.java
similarity index 100%
rename from src/main/java/com/b100/xml/element/XmlAttributeList.java
rename to game/core/src/main/java/com/b100/xml/element/XmlAttributeList.java
diff --git a/src/main/java/com/b100/xml/element/XmlContentTag.java b/game/core/src/main/java/com/b100/xml/element/XmlContentTag.java
similarity index 100%
rename from src/main/java/com/b100/xml/element/XmlContentTag.java
rename to game/core/src/main/java/com/b100/xml/element/XmlContentTag.java
diff --git a/src/main/java/com/b100/xml/element/XmlStringTag.java b/game/core/src/main/java/com/b100/xml/element/XmlStringTag.java
similarity index 100%
rename from src/main/java/com/b100/xml/element/XmlStringTag.java
rename to game/core/src/main/java/com/b100/xml/element/XmlStringTag.java
diff --git a/src/main/java/com/b100/xml/element/XmlTag.java b/game/core/src/main/java/com/b100/xml/element/XmlTag.java
similarity index 100%
rename from src/main/java/com/b100/xml/element/XmlTag.java
rename to game/core/src/main/java/com/b100/xml/element/XmlTag.java
diff --git a/src/main/java/com/mojang/logging/LogQueues.java b/game/core/src/main/java/com/mojang/logging/LogQueues.java
similarity index 100%
rename from src/main/java/com/mojang/logging/LogQueues.java
rename to game/core/src/main/java/com/mojang/logging/LogQueues.java
diff --git a/src/main/java/com/mojang/logging/LogUtils.java b/game/core/src/main/java/com/mojang/logging/LogUtils.java
similarity index 100%
rename from src/main/java/com/mojang/logging/LogUtils.java
rename to game/core/src/main/java/com/mojang/logging/LogUtils.java
diff --git a/src/main/java/com/mojang/logging/annotations/FieldsAreNonnullByDefault.java b/game/core/src/main/java/com/mojang/logging/annotations/FieldsAreNonnullByDefault.java
similarity index 100%
rename from src/main/java/com/mojang/logging/annotations/FieldsAreNonnullByDefault.java
rename to game/core/src/main/java/com/mojang/logging/annotations/FieldsAreNonnullByDefault.java
diff --git a/src/main/java/com/mojang/logging/annotations/MethodsReturnNonnullByDefault.java b/game/core/src/main/java/com/mojang/logging/annotations/MethodsReturnNonnullByDefault.java
similarity index 100%
rename from src/main/java/com/mojang/logging/annotations/MethodsReturnNonnullByDefault.java
rename to game/core/src/main/java/com/mojang/logging/annotations/MethodsReturnNonnullByDefault.java
diff --git a/src/main/java/com/mojang/logging/plugins/LegacyXMLLayout.java b/game/core/src/main/java/com/mojang/logging/plugins/LegacyXMLLayout.java
similarity index 100%
rename from src/main/java/com/mojang/logging/plugins/LegacyXMLLayout.java
rename to game/core/src/main/java/com/mojang/logging/plugins/LegacyXMLLayout.java
diff --git a/src/main/java/com/mojang/logging/plugins/QueueLogAppender.java b/game/core/src/main/java/com/mojang/logging/plugins/QueueLogAppender.java
similarity index 100%
rename from src/main/java/com/mojang/logging/plugins/QueueLogAppender.java
rename to game/core/src/main/java/com/mojang/logging/plugins/QueueLogAppender.java
diff --git a/src/main/java/com/mojang/nbt/ByteArrayTag.java b/game/core/src/main/java/com/mojang/nbt/ByteArrayTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/ByteArrayTag.java
rename to game/core/src/main/java/com/mojang/nbt/ByteArrayTag.java
diff --git a/src/main/java/com/mojang/nbt/ByteTag.java b/game/core/src/main/java/com/mojang/nbt/ByteTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/ByteTag.java
rename to game/core/src/main/java/com/mojang/nbt/ByteTag.java
diff --git a/src/main/java/com/mojang/nbt/CompoundTag.java b/game/core/src/main/java/com/mojang/nbt/CompoundTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/CompoundTag.java
rename to game/core/src/main/java/com/mojang/nbt/CompoundTag.java
diff --git a/src/main/java/com/mojang/nbt/CorruptedNBTException.java b/game/core/src/main/java/com/mojang/nbt/CorruptedNBTException.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/CorruptedNBTException.java
rename to game/core/src/main/java/com/mojang/nbt/CorruptedNBTException.java
diff --git a/src/main/java/com/mojang/nbt/DoubleArrayTag.java b/game/core/src/main/java/com/mojang/nbt/DoubleArrayTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/DoubleArrayTag.java
rename to game/core/src/main/java/com/mojang/nbt/DoubleArrayTag.java
diff --git a/src/main/java/com/mojang/nbt/DoubleTag.java b/game/core/src/main/java/com/mojang/nbt/DoubleTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/DoubleTag.java
rename to game/core/src/main/java/com/mojang/nbt/DoubleTag.java
diff --git a/src/main/java/com/mojang/nbt/EndTag.java b/game/core/src/main/java/com/mojang/nbt/EndTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/EndTag.java
rename to game/core/src/main/java/com/mojang/nbt/EndTag.java
diff --git a/src/main/java/com/mojang/nbt/FloatTag.java b/game/core/src/main/java/com/mojang/nbt/FloatTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/FloatTag.java
rename to game/core/src/main/java/com/mojang/nbt/FloatTag.java
diff --git a/src/main/java/com/mojang/nbt/IntTag.java b/game/core/src/main/java/com/mojang/nbt/IntTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/IntTag.java
rename to game/core/src/main/java/com/mojang/nbt/IntTag.java
diff --git a/src/main/java/com/mojang/nbt/ListTag.java b/game/core/src/main/java/com/mojang/nbt/ListTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/ListTag.java
rename to game/core/src/main/java/com/mojang/nbt/ListTag.java
diff --git a/src/main/java/com/mojang/nbt/LongArrayTag.java b/game/core/src/main/java/com/mojang/nbt/LongArrayTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/LongArrayTag.java
rename to game/core/src/main/java/com/mojang/nbt/LongArrayTag.java
diff --git a/src/main/java/com/mojang/nbt/LongTag.java b/game/core/src/main/java/com/mojang/nbt/LongTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/LongTag.java
rename to game/core/src/main/java/com/mojang/nbt/LongTag.java
diff --git a/src/main/java/com/mojang/nbt/NbtIo.java b/game/core/src/main/java/com/mojang/nbt/NbtIo.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/NbtIo.java
rename to game/core/src/main/java/com/mojang/nbt/NbtIo.java
diff --git a/src/main/java/com/mojang/nbt/ShortArrayTag.java b/game/core/src/main/java/com/mojang/nbt/ShortArrayTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/ShortArrayTag.java
rename to game/core/src/main/java/com/mojang/nbt/ShortArrayTag.java
diff --git a/src/main/java/com/mojang/nbt/ShortTag.java b/game/core/src/main/java/com/mojang/nbt/ShortTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/ShortTag.java
rename to game/core/src/main/java/com/mojang/nbt/ShortTag.java
diff --git a/src/main/java/com/mojang/nbt/StringTag.java b/game/core/src/main/java/com/mojang/nbt/StringTag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/StringTag.java
rename to game/core/src/main/java/com/mojang/nbt/StringTag.java
diff --git a/src/main/java/com/mojang/nbt/Tag.java b/game/core/src/main/java/com/mojang/nbt/Tag.java
similarity index 100%
rename from src/main/java/com/mojang/nbt/Tag.java
rename to game/core/src/main/java/com/mojang/nbt/Tag.java
diff --git a/src/main/java/net/minecraft/core/BuildChannel.java b/game/core/src/main/java/net/minecraft/core/BuildChannel.java
similarity index 100%
rename from src/main/java/net/minecraft/core/BuildChannel.java
rename to game/core/src/main/java/net/minecraft/core/BuildChannel.java
diff --git a/src/main/java/net/minecraft/core/Global.java b/game/core/src/main/java/net/minecraft/core/Global.java
similarity index 94%
rename from src/main/java/net/minecraft/core/Global.java
rename to game/core/src/main/java/net/minecraft/core/Global.java
index c229ed68f..b443ee094 100644
--- a/src/main/java/net/minecraft/core/Global.java
+++ b/game/core/src/main/java/net/minecraft/core/Global.java
@@ -5,13 +5,13 @@ public class Global
 	public static final int TICKS_PER_SECOND = 20;
 	public static final int DAY_LENGTH_TICKS = 24000;
 	public static final String VERSION = Version.BUILD_CHANNEL.modifyVersionString(Version.VERSION);
-	public static final String BUILD_TIME = Version.BUILD_TIME;
+	public static final long BUILD_TIME = Version.BUILD_TIME;
 	public static final BuildChannel BUILD_CHANNEL = Version.BUILD_CHANNEL;
 	public static final int CURRENT_SAVE_VERSION = 19134;
 	public static final int CURRENT_CHUNK_VERSION = 2;
 	public static boolean isServer = false;
 	public static final boolean DISABLE_OLD_WORLDS = false;
-	public static final int TEXTURE_PACK_FORMAT = Version.TEXTURE_PACK_VERSION;
+	public static final int TEXTURE_PACK_FORMAT = Version.TEXTURE_PACK_FORMAT;
 	public static final boolean NET_DEBUG = false;
 	public static final boolean ASSERTIONS_ENABLED;
 	static {
diff --git a/src/main/java/net/minecraft/core/InventoryAction.java b/game/core/src/main/java/net/minecraft/core/InventoryAction.java
similarity index 100%
rename from src/main/java/net/minecraft/core/InventoryAction.java
rename to game/core/src/main/java/net/minecraft/core/InventoryAction.java
diff --git a/src/main/java/net/minecraft/core/MD5String.java b/game/core/src/main/java/net/minecraft/core/MD5String.java
similarity index 100%
rename from src/main/java/net/minecraft/core/MD5String.java
rename to game/core/src/main/java/net/minecraft/core/MD5String.java
diff --git a/src/main/java/net/minecraft/core/MinecraftAccessor.java b/game/core/src/main/java/net/minecraft/core/MinecraftAccessor.java
similarity index 96%
rename from src/main/java/net/minecraft/core/MinecraftAccessor.java
rename to game/core/src/main/java/net/minecraft/core/MinecraftAccessor.java
index f4ba2a338..cf3160a9b 100644
--- a/src/main/java/net/minecraft/core/MinecraftAccessor.java
+++ b/game/core/src/main/java/net/minecraft/core/MinecraftAccessor.java
@@ -1,31 +1,31 @@
-package net.minecraft.core;
-
-import net.minecraft.core.entity.SkinVariantList;
-import net.minecraft.core.sound.SoundTypes;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.IChunkLoader;
-import net.minecraft.core.world.chunk.provider.IChunkProvider;
-
-import java.io.File;
-import java.util.Collection;
-
-public interface MinecraftAccessor
-{
-    File getMinecraftDir();
-
-    IChunkProvider createChunkProvider(World world, IChunkLoader chunkLoader);
-
-    int getAutosaveTimer();
-
-    SkinVariantList getSkinVariantList();
-
-    String getMinecraftVersion();
-    
-    default boolean isFullbrightEnabled() {
-    	return false;
-    }
-
-    default Collection<String> getAvailableSoundKeys() {
-        return SoundTypes.getSoundIds().values();
-    }
+package net.minecraft.core;
+
+import net.minecraft.core.entity.SkinVariantList;
+import net.minecraft.core.sound.SoundTypes;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.IChunkLoader;
+import net.minecraft.core.world.chunk.provider.IChunkProvider;
+
+import java.io.File;
+import java.util.Collection;
+
+public interface MinecraftAccessor
+{
+    File getMinecraftDir();
+
+    IChunkProvider createChunkProvider(World world, IChunkLoader chunkLoader);
+
+    int getAutosaveTimer();
+
+    SkinVariantList getSkinVariantList();
+
+    String getMinecraftVersion();
+    
+    default boolean isFullbrightEnabled() {
+    	return false;
+    }
+
+    default Collection<String> getAvailableSoundKeys() {
+        return SoundTypes.getSoundIds().values();
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/net/minecraft/core/MinecraftError.java b/game/core/src/main/java/net/minecraft/core/MinecraftError.java
similarity index 100%
rename from src/main/java/net/minecraft/core/MinecraftError.java
rename to game/core/src/main/java/net/minecraft/core/MinecraftError.java
diff --git a/src/main/java/net/minecraft/core/MinecraftException.java b/game/core/src/main/java/net/minecraft/core/MinecraftException.java
similarity index 100%
rename from src/main/java/net/minecraft/core/MinecraftException.java
rename to game/core/src/main/java/net/minecraft/core/MinecraftException.java
diff --git a/src/main/java/net/minecraft/core/NextTickListEntry.java b/game/core/src/main/java/net/minecraft/core/NextTickListEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/NextTickListEntry.java
rename to game/core/src/main/java/net/minecraft/core/NextTickListEntry.java
diff --git a/src/main/java/net/minecraft/core/Timer.java b/game/core/src/main/java/net/minecraft/core/Timer.java
similarity index 100%
rename from src/main/java/net/minecraft/core/Timer.java
rename to game/core/src/main/java/net/minecraft/core/Timer.java
diff --git a/src/main/java/net/minecraft/core/UnexpectedThrowable.java b/game/core/src/main/java/net/minecraft/core/UnexpectedThrowable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/UnexpectedThrowable.java
rename to game/core/src/main/java/net/minecraft/core/UnexpectedThrowable.java
diff --git a/src/main/java/net/minecraft/core/WeightedRandomBag.java b/game/core/src/main/java/net/minecraft/core/WeightedRandomBag.java
similarity index 100%
rename from src/main/java/net/minecraft/core/WeightedRandomBag.java
rename to game/core/src/main/java/net/minecraft/core/WeightedRandomBag.java
diff --git a/src/main/java/net/minecraft/core/WeightedRandomLootObject.java b/game/core/src/main/java/net/minecraft/core/WeightedRandomLootObject.java
similarity index 100%
rename from src/main/java/net/minecraft/core/WeightedRandomLootObject.java
rename to game/core/src/main/java/net/minecraft/core/WeightedRandomLootObject.java
diff --git a/src/main/java/net/minecraft/core/achievement/Achievement.java b/game/core/src/main/java/net/minecraft/core/achievement/Achievement.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/Achievement.java
rename to game/core/src/main/java/net/minecraft/core/achievement/Achievement.java
diff --git a/src/main/java/net/minecraft/core/achievement/Achievements.java b/game/core/src/main/java/net/minecraft/core/achievement/Achievements.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/Achievements.java
rename to game/core/src/main/java/net/minecraft/core/achievement/Achievements.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/DistanceValueFormatter.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/DistanceValueFormatter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/DistanceValueFormatter.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/DistanceValueFormatter.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/SimpleValueFormatter.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/SimpleValueFormatter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/SimpleValueFormatter.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/SimpleValueFormatter.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/Stat.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/Stat.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/Stat.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/Stat.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/StatBasic.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/StatBasic.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/StatBasic.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/StatBasic.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/StatDescFormatter.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/StatDescFormatter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/StatDescFormatter.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/StatDescFormatter.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/StatItem.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/StatItem.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/StatItem.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/StatItem.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/StatList.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/StatList.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/StatList.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/StatList.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/StatMob.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/StatMob.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/StatMob.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/StatMob.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/StatValueFormatter.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/StatValueFormatter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/StatValueFormatter.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/StatValueFormatter.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/StatsCounter.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/StatsCounter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/StatsCounter.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/StatsCounter.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/StatsSyncher.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/StatsSyncher.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/StatsSyncher.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/StatsSyncher.java
diff --git a/src/main/java/net/minecraft/core/achievement/stat/TimeValueFormatter.java b/game/core/src/main/java/net/minecraft/core/achievement/stat/TimeValueFormatter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/achievement/stat/TimeValueFormatter.java
rename to game/core/src/main/java/net/minecraft/core/achievement/stat/TimeValueFormatter.java
diff --git a/src/main/java/net/minecraft/core/block/Block.java b/game/core/src/main/java/net/minecraft/core/block/Block.java
similarity index 66%
rename from src/main/java/net/minecraft/core/block/Block.java
rename to game/core/src/main/java/net/minecraft/core/block/Block.java
index 3f0250c31..5976a3e3a 100644
--- a/src/main/java/net/minecraft/core/block/Block.java
+++ b/game/core/src/main/java/net/minecraft/core/block/Block.java
@@ -2,9 +2,6 @@ package net.minecraft.core.block;
 
 
 import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.Map;
 import java.util.Random;
 import java.util.function.Function;
 import java.util.function.Supplier;
@@ -18,8 +15,6 @@ import net.minecraft.core.util.helper.Direction;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-import com.b100.utils.Utils;
-
 import net.minecraft.core.achievement.stat.Stat;
 import net.minecraft.core.achievement.stat.StatList;
 import net.minecraft.core.block.material.Material;
@@ -52,18 +47,6 @@ import net.minecraft.core.world.WorldSource;
 public class Block
     implements ITaggable<Block>, IItemConvertible
 {
-    public static final @Nullable Block @NotNull [] blocksList = new Block[16384];
-    public static final Map<NamespaceID, Block> blockMap = new LinkedHashMap<>();
-    public static final boolean[] shouldTick = new boolean[blocksList.length];
-    public static final boolean[] solid = new boolean[blocksList.length];
-    public static final boolean[] isEntityTile = new boolean[blocksList.length];
-    public static final int[] lightBlock = new int[blocksList.length];
-    public static final boolean[] translucent = new boolean[blocksList.length];
-    public static final int[] lightEmission = new int[blocksList.length];
-    public static final boolean[] neighborNotifyOnMetadataChangeDisabled = new boolean[blocksList.length];
-    public static final Map<String, Integer> keyToIdMap = new HashMap<>();
-    public static int highestBlockId = 0;
-
     public final int id;
     public final NamespaceID namespaceID;
     protected float blockHardness;
@@ -71,17 +54,11 @@ public class Block
     protected boolean blockConstructorCalled;
     protected boolean enableStats;
     protected boolean isLitInteriorSurface;
-    public double minX;
-    public double minY;
-    public double minZ;
-    public double maxX;
-    public double maxY;
-    public double maxZ;
+    protected final AABB bounds = AABB.getPermanentBB(0, 0, 0, 1, 1, 1);
     public float blockParticleGravity;
     public final Material blockMaterial;
     public float friction;
     protected String key;
-    public int dropOverride = -1;
     public boolean immovable = false;
     public MaterialColor overrideColor;
     private BlockSound blockSound = BlockSounds.DEFAULT;
@@ -104,29 +81,30 @@ public class Block
             throw new IllegalArgumentException(e);
         }
 
-        if(blocksList[id] != null) {
-            throw new IllegalArgumentException("Block slot '" + id + "' is already occupied by '" + blocksList[id] + "' when adding " + this);
+        if(Blocks.blocksList[id] != null) {
+            throw new IllegalArgumentException("Block slot '" + id + "' is already occupied by '" + Blocks.blocksList[id] + "' when adding " + this);
         }
-        if (blockMap.containsKey(this.namespaceID)){
-            throw new IllegalArgumentException("Block id '" + namespaceID + "' is already used by '" + blockMap.get(this.namespaceID) + "' when adding " + this);
+        if (Blocks.blockMap.containsKey(this.namespaceID)){
+            throw new IllegalArgumentException("Block id '" + namespaceID + "' is already used by '" + Blocks.blockMap.get(this.namespaceID) + "' when adding " + this);
         }
 
         blockMaterial = material;
-        blocksList[id] = this;
-        blockMap.put(this.namespaceID, this);
+        Blocks.blocksList[id] = this;
+        Blocks.blockMap.put(this.namespaceID, this);
         setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-        solid[id] = isSolidRender();
-        lightBlock[id] = (isSolidRender() || blocksLight()) ? 255 : 0;
-        translucent[id] = !material.blocksLight();
-        isEntityTile[id] = false;
-        setKey(translationKey);
+        Blocks.solid[id] = isSolidRender();
+        Blocks.lightBlock[id] = (isSolidRender() || blocksLight()) ? 255 : 0;
+        Blocks.translucent[id] = !material.blocksLight();
+        Blocks.isEntityTile[id] = false;
+        this.key = "tile." + translationKey;
+        Blocks.keyToIdMap.put(this.key, this.id);
 
-        if (highestBlockId < id) highestBlockId = id;
+        if (Blocks.highestBlockId < id) Blocks.highestBlockId = id;
     }
 
 	public Block withDisabledNeighborNotifyOnMetadataChange()
     {
-        neighborNotifyOnMetadataChangeDisabled[id] = true;
+        Blocks.neighborNotifyOnMetadataChangeDisabled[id] = true;
         return this;
     }
 
@@ -136,18 +114,18 @@ public class Block
 
     public Block withLightBlock(int blockAmount)
     {
-        lightBlock[id] = blockAmount;
+        Blocks.lightBlock[id] = blockAmount;
         return this;
     }
     public Block withLightEmission(float lightEmission)
     {
-        Block.lightEmission[id] = (int)(15F * lightEmission);
+        Blocks.lightEmission[id] = (int)(15F * lightEmission);
         return this;
     }
 
     public Block withLightEmission(int lightEmission)
     {
-        Block.lightEmission[id] = lightEmission & 0x0F;
+        Blocks.lightEmission[id] = lightEmission & 0x0F;
         return this;
     }
 
@@ -209,12 +187,6 @@ public class Block
         return this;
     }
 
-    public Block setDropOverride(int dropId)
-    {
-    	dropOverride = dropId;
-    	return this;
-    }
-
     public Block withLitInteriorSurface(boolean isLit)
     {
         isLitInteriorSurface = isLit;
@@ -268,26 +240,29 @@ public class Block
 
     public Block setTicking(boolean tick)
     {
-        Block.shouldTick[id] = tick;
+        Blocks.shouldTick[id] = tick;
         return this;
     }
 
-    public void setBlockBounds(double minX, double minY, double minZ, double maxX, double maxY, double maxZ)
+    protected void setBlockBounds(double minX, double minY, double minZ, double maxX, double maxY, double maxZ)
     {
-        this.minX = minX;
-        this.minY = minY;
-        this.minZ = minZ;
-        this.maxX = maxX;
-        this.maxY = maxY;
-        this.maxZ = maxZ;
+        bounds.set(minX, minY, minZ, maxX, maxY, maxZ);
+    }
+
+    public AABB getBounds() {
+        return bounds.copy();
+    }
+
+    public AABB getBoundsRaw() {
+        return bounds;
     }
 
 	public float getBlockBrightness(WorldSource blockAccess, int x, int y, int z) {
-		return blockAccess.getBrightness(x, y, z, lightEmission[id]);
+		return blockAccess.getBrightness(x, y, z, Blocks.lightEmission[id]);
 	}
 
 	public int getLightmapCoord(WorldSource blockAccess, int x, int y, int z) {
-		return blockAccess.getLightmapCoord(x, y, z, lightEmission[id]);
+		return blockAccess.getLightmapCoord(x, y, z, Blocks.lightEmission[id]);
 	}
 
 	/**
@@ -297,44 +272,6 @@ public class Block
 		return isSolidRender() ? 1.0f : 0.0f;
 	}
 
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side)
-    {
-    	Side side1 = Side.getSideById(side);
-        if(side1 == Side.BOTTOM && minY > 0.0D)
-        {
-            return true;
-        }
-        else if(side1 == Side.TOP && maxY < 1.0D)
-        {
-            return true;
-        }
-        else if(side1 == Side.NORTH && minZ > 0.0D)
-        {
-            return true;
-        }
-        else if(side1 == Side.SOUTH && maxZ < 1.0D)
-        {
-            return true;
-        }
-        else if(side1 == Side.WEST && minX > 0.0D)
-        {
-            return true;
-        }
-        else if(side1 == Side.EAST && maxX < 1.0D)
-        {
-            return true;
-        }
-        else
-        {
-            return !blockAccess.isBlockOpaqueCube(x, y, z);
-        }
-    }
-
-    public boolean shouldSideBeRendered(WorldSource blockAccess, int x, int y, int z, int side, int meta)
-    {
-        return shouldSideBeRendered(blockAccess, x, y, z, side);
-    }
-
     public boolean getIsBlockSolid(WorldSource blockAccess, int x, int y, int z, Side side)
     {
         return blockAccess.getBlockMaterial(x, y, z).isSolid();
@@ -342,7 +279,7 @@ public class Block
 
     public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
-        return AABB.getTemporaryBB((double)x + minX, (double)y + minY, (double)z + minZ, (double)x + maxX, (double)y + maxY, (double)z + maxZ);
+        return getBlockBoundsFromState(world, x, y, z).move(x, y, z);
     }
 
     public BoundingVolume getBoundingVolume(World world, int x, int y, int z)
@@ -352,10 +289,13 @@ public class Block
 
     public void getCollidingBoundingBoxes(World world, int x, int y, int z, AABB aabb, ArrayList<AABB> aabbList)
     {
-        AABB aabbFromPool = getCollisionBoundingBoxFromPool(world, x, y, z);
-        if(aabbFromPool != null && aabb.intersects(aabbFromPool))
+        addIntersectingBoundingBox(aabb, getCollisionBoundingBoxFromPool(world, x, y, z), aabbList);
+    }
+
+    protected void addIntersectingBoundingBox(AABB sourceAABB, AABB aabbToAdd, ArrayList<AABB> aabbList) {
+        if(aabbToAdd != null && sourceAABB.intersects(aabbToAdd))
         {
-            aabbList.add(aabbFromPool);
+            aabbList.add(aabbToAdd);
         }
     }
 
@@ -366,7 +306,7 @@ public class Block
 
     public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
-        return AABB.getTemporaryBB((double)x + minX, (double)y + minY, (double)z + minZ, (double)x + maxX, (double)y + maxY, (double)z + maxZ);
+        return getBlockBoundsFromState(world, x, y, z).move(x, y, z);
     }
     public MaterialColor getMaterialColor(){
         if (overrideColor != null) return overrideColor;
@@ -456,90 +396,73 @@ public class Block
         return blastResistance / 5F;
     }
 
-    public HitResult collisionRayTrace(World world, int x, int y, int z, Vec3 start, Vec3 end)
+    public HitResult collisionRayTrace(World world, int x, int y, int z, Vec3 start, Vec3 end, boolean useSelectorBoxes)
     {
-        setBlockBoundsBasedOnState(world, x, y, z);
+        AABB bounds = useSelectorBoxes ? getSelectedBoundingBoxFromPool(world, x, y, z).move(-x, -y, -z) : getBlockBoundsFromState(world, x, y, z);
         start = start.add(-x, -y, -z);
         end = end.add(-x, -y, -z);
-		Vec3 vec32 = start.clipX(end, minX);
-		Vec3 vec3d3 = start.clipX(end, maxX);
-		Vec3 vec34 = start.clipY(end, minY);
-		Vec3 vec35 = start.clipY(end, maxY);
-		Vec3 vec36 = start.clipZ(end, minZ);
-		Vec3 vec37 = start.clipZ(end, maxZ);
-
-		if(!isVecInsideYZBounds(vec32)) vec32 = null;
-		if(!isVecInsideYZBounds(vec3d3)) vec3d3 = null;
-		if(!isVecInsideXZBounds(vec34)) vec34 = null;
-		if(!isVecInsideXZBounds(vec35)) vec35 = null;
-		if(!isVecInsideXYBounds(vec36)) vec36 = null;
-		if(!isVecInsideXYBounds(vec37)) vec37 = null;
+		Vec3 minVX = start.clipX(end, bounds.minX);
+		Vec3 maxVX = start.clipX(end, bounds.maxX);
+		Vec3 minVY = start.clipY(end, bounds.minY);
+		Vec3 maxVY = start.clipY(end, bounds.maxY);
+		Vec3 minVZ = start.clipZ(end, bounds.minZ);
+		Vec3 maxVZ = start.clipZ(end, bounds.maxZ);
+
+		if(!isVecInsideYZBounds(bounds,minVX)) minVX = null;
+		if(!isVecInsideYZBounds(bounds,maxVX)) maxVX = null;
+		if(!isVecInsideXZBounds(bounds,minVY)) minVY = null;
+		if(!isVecInsideXZBounds(bounds,maxVY)) maxVY = null;
+		if(!isVecInsideXYBounds(bounds,minVZ)) minVZ = null;
+		if(!isVecInsideXYBounds(bounds,maxVZ)) maxVZ = null;
 
 		Vec3 vec38 = null;
-		if(vec32 != null && (vec38 == null || start.distanceToSquared(vec32) < start.distanceToSquared(vec38))) vec38 = vec32;
-		if(vec3d3 != null && (vec38 == null || start.distanceToSquared(vec3d3) < start.distanceToSquared(vec38))) vec38 = vec3d3;
-		if(vec34 != null && (vec38 == null || start.distanceToSquared(vec34) < start.distanceToSquared(vec38))) vec38 = vec34;
-		if(vec35 != null && (vec38 == null || start.distanceToSquared(vec35) < start.distanceToSquared(vec38))) vec38 = vec35;
-		if(vec36 != null && (vec38 == null || start.distanceToSquared(vec36) < start.distanceToSquared(vec38))) vec38 = vec36;
-		if(vec37 != null && (vec38 == null || start.distanceToSquared(vec37) < start.distanceToSquared(vec38))) vec38 = vec37;
+		if(minVX != null && (vec38 == null || start.distanceToSquared(minVX) < start.distanceToSquared(vec38))) vec38 = minVX;
+		if(maxVX != null && (vec38 == null || start.distanceToSquared(maxVX) < start.distanceToSquared(vec38))) vec38 = maxVX;
+		if(minVY != null && (vec38 == null || start.distanceToSquared(minVY) < start.distanceToSquared(vec38))) vec38 = minVY;
+		if(maxVY != null && (vec38 == null || start.distanceToSquared(maxVY) < start.distanceToSquared(vec38))) vec38 = maxVY;
+		if(minVZ != null && (vec38 == null || start.distanceToSquared(minVZ) < start.distanceToSquared(vec38))) vec38 = minVZ;
+		if(maxVZ != null && (vec38 == null || start.distanceToSquared(maxVZ) < start.distanceToSquared(vec38))) vec38 = maxVZ;
 
 		if(vec38 == null) return null;
 		Side side = Side.NONE;
-		if(vec38 == vec32) side = Side.WEST;
-		if(vec38 == vec3d3) side = Side.EAST;
-		if(vec38 == vec34) side = Side.BOTTOM;
-		if(vec38 == vec35) side = Side.TOP;
-		if(vec38 == vec36) side = Side.NORTH;
-		if(vec38 == vec37) side = Side.SOUTH;
+		if(vec38 == minVX) side = Side.WEST;
+		if(vec38 == maxVX) side = Side.EAST;
+		if(vec38 == minVY) side = Side.BOTTOM;
+		if(vec38 == maxVY) side = Side.TOP;
+		if(vec38 == minVZ) side = Side.NORTH;
+		if(vec38 == maxVZ) side = Side.SOUTH;
 
         return new HitResult(x, y, z, side, vec38.add(x, y, z));
     }
 
-    private boolean isVecInsideYZBounds(Vec3 vec3)
+    private boolean isVecInsideYZBounds(AABB bounds, @Nullable Vec3 vec3)
     {
-        if(vec3 == null)
-        {
+        if(vec3 == null) {
             return false;
         }
-        else
-        {
-            return vec3.y >= minY && vec3.y <= maxY && vec3.z >= minZ && vec3.z <= maxZ;
-        }
+        return vec3.y >= bounds.minY && vec3.y <= bounds.maxY && vec3.z >= bounds.minZ && vec3.z <= bounds.maxZ;
     }
 
-    private boolean isVecInsideXZBounds(Vec3 vec3)
+    private boolean isVecInsideXZBounds(AABB bounds, @Nullable Vec3 vec3)
     {
-        if(vec3 == null)
-        {
+        if(vec3 == null) {
             return false;
         }
-        else
-        {
-            return vec3.x >= minX && vec3.x <= maxX && vec3.z >= minZ && vec3.z <= maxZ;
-        }
+        return vec3.x >= bounds.minX && vec3.x <= bounds.maxX && vec3.z >= bounds.minZ && vec3.z <= bounds.maxZ;
     }
 
-    private boolean isVecInsideXYBounds(Vec3 vec3)
+    private boolean isVecInsideXYBounds(AABB bounds, @Nullable Vec3 vec3)
     {
-        if(vec3 == null)
-        {
+        if(vec3 == null) {
             return false;
         }
-        else
-        {
-            return vec3.x >= minX && vec3.x <= maxX && vec3.y >= minY && vec3.y <= maxY;
-        }
+        return vec3.x >= bounds.minX && vec3.x <= bounds.maxX && vec3.y >= bounds.minY && vec3.y <= bounds.maxY;
     }
 
     public void onBlockDestroyedByExplosion(World world, int x, int y, int z)
     {
     }
 
-    public int getRenderLayer()
-    {
-        return 0;
-    }
-
     public boolean canPlaceBlockOnSide(World world, int x, int y, int z, Side side)
     {
         return canPlaceBlockAt(world, x, y, z);
@@ -569,12 +492,9 @@ public class Block
     public void handleEntityInside(World world, int x, int y, int z, Entity entity, Vec3 entityVelocity)
     {
     }
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
-    {
-    }
-
-    public void setBlockBoundsBasedOnSide(WorldSource world, int x, int y, int z, Side side)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
+        return getBounds();
     }
 
     /**
@@ -645,32 +565,31 @@ public class Block
 			return;
 
 		ItemStack[] drops = getBreakResult(world, cause, x, y, z, meta, tileEntity);
-		if(dropOverride > 0) {
-			drops = new ItemStack[] { Item.itemsList[dropOverride].getDefaultStack() };
-		}
-		if(drops != null && drops.length > 0) {
-			for(ItemStack drop : drops) {
-				if(drop == null) {
-					continue;
-				}
-				if(hasTag(BlockTags.INSTANT_PICKUP) && player != null) {
-					player.inventory.insertItem(drop, true);
-					if(drop.stackSize <= 0) {
-						continue;
-					}
-				}
-				if(EntityItem.enableItemClumping) {
-					world.dropItem(x, y, z, drop.copy());
-				}else {
-					for(int i = 0; i < drop.stackSize; i++) {
-						ItemStack drop1 = drop.copy();
-						drop1.stackSize = 1;
-						world.dropItem(x, y, z, drop1);
-					}
-				}
-			}
-		}
-	}
+        if (drops == null) {
+            return;
+        }
+        for (int j = 0, dropsLength = drops.length; j < dropsLength; j++) {
+            ItemStack drop = drops[j];
+            if (drop == null) {
+                continue;
+            }
+            if (hasTag(BlockTags.INSTANT_PICKUP) && player != null) {
+                player.inventory.insertItem(drop, true);
+                if (drop.stackSize <= 0) {
+                    continue;
+                }
+            }
+            if (EntityItem.enableItemClumping) {
+                world.dropItem(x, y, z, drop.copy());
+            } else {
+                for (int i = 0; i < drop.stackSize; i++) {
+                    ItemStack drop1 = drop.copy();
+                    drop1.stackSize = 1;
+                    world.dropItem(x, y, z, drop1);
+                }
+            }
+        }
+    }
 
     public ISupport getSupport(World world, int x, int y, int z, Side side) {
         return FullSupport.INSTANCE;
@@ -689,12 +608,6 @@ public class Block
 
     }
 
-    public void setKey(String key)
-    {
-        this.key = "tile." + key;
-        keyToIdMap.put(this.key, this.id);
-    }
-
     public String getKey()
     {
         return key;
@@ -734,17 +647,17 @@ public class Block
     public static boolean isBuried (World world, int x, int y, int z)
     {
         boolean buried = true;
-        if(Block.lightBlock[world.getBlockId(x + 1, y, z)] <= 2)
+        if(Blocks.lightBlock[world.getBlockId(x + 1, y, z)] <= 2)
             buried = false;
-        if(Block.lightBlock[world.getBlockId(x - 1, y, z)] <= 2)
+        if(Blocks.lightBlock[world.getBlockId(x - 1, y, z)] <= 2)
             buried = false;
-        if(Block.lightBlock[world.getBlockId(x, y, z + 1)] <= 2)
+        if(Blocks.lightBlock[world.getBlockId(x, y, z + 1)] <= 2)
             buried = false;
-        if(Block.lightBlock[world.getBlockId(x, y, z - 1)] <= 2)
+        if(Blocks.lightBlock[world.getBlockId(x, y, z - 1)] <= 2)
             buried = false;
-        if(Block.lightBlock[world.getBlockId(x, y + 1, z)] <= 2)
+        if(Blocks.lightBlock[world.getBlockId(x, y + 1, z)] <= 2)
             buried = false;
-        if(Block.lightBlock[world.getBlockId(x, y - 1, z)] <= 2)
+        if(Blocks.lightBlock[world.getBlockId(x, y - 1, z)] <= 2)
             buried = false;
         return buried;
     }
@@ -752,7 +665,7 @@ public class Block
     public static boolean getIsLitInteriorSurface (World world, int x, int y, int z)
     {
         int l = world.getBlockId(x, y, z);
-        return l != 0 && blocksList[l] != null && blocksList[l].isLitInteriorSurface;
+        return l != 0 && Blocks.blocksList[l] != null && Blocks.blocksList[l].isLitInteriorSurface;
     }
 
     @SafeVarargs
@@ -774,7 +687,7 @@ public class Block
     public static boolean hasTag(int id, Tag<Block> tag)
     {
         if (id < 0) return false;
-        Block block = blocksList[id];
+        Block block = Blocks.blocksList[id];
         if (block == null) return false;
         return block.hasTag(tag);
     }
@@ -783,31 +696,6 @@ public class Block
     	return false;
     }
 
-    @Nullable
-    public static Block getBlock(int id)
-    {
-    	return blocksList[Math.max(id, 0)];
-    }
-
-    public static Block getBlockByName(String name)
-    {
-    	Utils.requireNonNull(name);
-    	if(name.startsWith("tile.")) {
-    		name = name.substring(5);
-    	}
-        for (Block block : blocksList)
-        {
-            if (block != null)
-            {
-                String otherName = block.key.substring(5);
-                if (name.equalsIgnoreCase(otherName))
-                {
-                    return block;
-                }
-            }
-        }
-    	return null;
-    }
     @NotNull
     public Supplier<Item> blockItemSupplier = () -> new ItemBlock(this);
 
diff --git a/src/main/java/net/minecraft/core/block/BlockActivator.java b/game/core/src/main/java/net/minecraft/core/block/BlockActivator.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockActivator.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockActivator.java
diff --git a/src/main/java/net/minecraft/core/block/BlockAlgae.java b/game/core/src/main/java/net/minecraft/core/block/BlockAlgae.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockAlgae.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockAlgae.java
diff --git a/src/main/java/net/minecraft/core/block/BlockAxisAligned.java b/game/core/src/main/java/net/minecraft/core/block/BlockAxisAligned.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockAxisAligned.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockAxisAligned.java
diff --git a/src/main/java/net/minecraft/core/block/BlockBasket.java b/game/core/src/main/java/net/minecraft/core/block/BlockBasket.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockBasket.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockBasket.java
diff --git a/src/main/java/net/minecraft/core/block/BlockBed.java b/game/core/src/main/java/net/minecraft/core/block/BlockBed.java
similarity index 97%
rename from src/main/java/net/minecraft/core/block/BlockBed.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockBed.java
index a66ddef1d..7d3054006 100644
--- a/src/main/java/net/minecraft/core/block/BlockBed.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockBed.java
@@ -9,6 +9,7 @@ import net.minecraft.core.enums.EnumSleepStatus;
 import net.minecraft.core.item.Items;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.helper.Side;
+import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.WorldSource;
 import net.minecraft.core.world.chunk.ChunkCoordinates;
@@ -17,7 +18,7 @@ public class BlockBed extends Block {
 
 	public BlockBed(String key, String namespaceId, int id) {
 		super(key, namespaceId, id, Material.wood);
-		setBounds();
+		setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5625F, 1.0F);
 	}
 
 	@Override
@@ -90,11 +91,6 @@ public class BlockBed extends Block {
 		return false;
 	}
 
-	@Override
-	public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z) {
-		setBounds();
-	}
-
 	@Override
 	public void onNeighborBlockChange(World world, int x, int y, int z, int blockId) {
 		int metadata = world.getBlockMetadata(x, y, z);
@@ -108,10 +104,6 @@ public class BlockBed extends Block {
 		}
 	}
 
-	private void setBounds() {
-		setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5625F, 1.0F);
-	}
-
 	@Override
 	public ItemStack[] getBreakResult(World world, EnumDropCause dropCause, int meta, TileEntity tileEntity)
 	{
diff --git a/src/main/java/net/minecraft/core/block/BlockBedrock.java b/game/core/src/main/java/net/minecraft/core/block/BlockBedrock.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockBedrock.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockBedrock.java
diff --git a/src/main/java/net/minecraft/core/block/BlockBoneShale.java b/game/core/src/main/java/net/minecraft/core/block/BlockBoneShale.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockBoneShale.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockBoneShale.java
diff --git a/src/main/java/net/minecraft/core/block/BlockBrazier.java b/game/core/src/main/java/net/minecraft/core/block/BlockBrazier.java
similarity index 98%
rename from src/main/java/net/minecraft/core/block/BlockBrazier.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockBrazier.java
index b33eed6d2..24040cd72 100644
--- a/src/main/java/net/minecraft/core/block/BlockBrazier.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockBrazier.java
@@ -82,7 +82,7 @@ public class BlockBrazier
     @Override
     public void onNeighborBlockChange(World world, int x, int y, int z, int blockId) {
         if (!burning) return;
-        Block block = Block.blocksList[blockId];
+        Block block = Blocks.blocksList[blockId];
         if (block instanceof BlockFluid) {
             world.setBlockAndMetadataWithNotify(x, y, z, Blocks.BRAZIER_INACTIVE.id, 0);
         }
diff --git a/src/main/java/net/minecraft/core/block/BlockButton.java b/game/core/src/main/java/net/minecraft/core/block/BlockButton.java
similarity index 94%
rename from src/main/java/net/minecraft/core/block/BlockButton.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockButton.java
index c3edb56b6..5477ba41b 100644
--- a/src/main/java/net/minecraft/core/block/BlockButton.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockButton.java
@@ -206,7 +206,8 @@ public class BlockButton extends Block
 	public void onNeighborBlockChange(World world, int x, int y, int z, int blockId)
     {
         boolean invalid;
-        int side = world.getBlockMetadata(x, y, z) & MASK_DIRECTION;
+        int meta = world.getBlockMetadata(x, y, z);
+        int side = meta & MASK_DIRECTION;
         switch (side) {
             case SIDE_WEST:
                 invalid = !world.isBlockNormalCube(x - 1, y, z);
@@ -227,7 +228,7 @@ public class BlockButton extends Block
                 invalid = !world.isBlockNormalCube(x, y - 1, z);
                 break;
             default:
-                invalid = true;
+                invalid = false;
         }
         if(invalid)
         {
@@ -237,7 +238,7 @@ public class BlockButton extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         int meta = world.getBlockMetadata(x, y, z);
         int direction = meta & MASK_DIRECTION;
@@ -252,24 +253,19 @@ public class BlockButton extends Block
         }
         switch (direction) {
             case SIDE_WEST:
-                setBlockBounds(0.0F, f, 0.5F - f2, f3, f1, 0.5F + f2);
-                break;
+                return AABB.getTemporaryBB(0.0F, f, 0.5F - f2, f3, f1, 0.5F + f2);
             case SIDE_EAST:
-                setBlockBounds(1.0F - f3, f, 0.5F - f2, 1.0F, f1, 0.5F + f2);
-                break;
+                return AABB.getTemporaryBB(1.0F - f3, f, 0.5F - f2, 1.0F, f1, 0.5F + f2);
             case SIDE_NORTH:
-                setBlockBounds(0.5F - f2, f, 0.0F, 0.5F + f2, f1, f3);
-                break;
+                return AABB.getTemporaryBB(0.5F - f2, f, 0.0F, 0.5F + f2, f1, f3);
             case SIDE_SOUTH:
-                setBlockBounds(0.5F - f2, f, 1.0F - f3, 0.5F + f2, f1, 1.0F);
-                break;
+                return AABB.getTemporaryBB(0.5F - f2, f, 1.0F - f3, 0.5F + f2, f1, 1.0F);
             case SIDE_TOP:
-                setBlockBounds(0.5f - f2, 1 - f3, f, 0.5f + f2, 1.0, f1);
-                break;
+                return AABB.getTemporaryBB(0.5f - f2, 1 - f3, f, 0.5f + f2, 1.0, f1);
             case SIDE_BOTTOM:
-                setBlockBounds(0.5f - f2, 0, f, 0.5f + f2, f3, f1);
-                break;
+                return AABB.getTemporaryBB(0.5f - f2, 0, f, 0.5f + f2, f3, f1);
         }
+        return super.getBlockBoundsFromState(world, x, y, z);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/BlockCactus.java b/game/core/src/main/java/net/minecraft/core/block/BlockCactus.java
similarity index 87%
rename from src/main/java/net/minecraft/core/block/BlockCactus.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockCactus.java
index dc0904cf2..a37b22b81 100644
--- a/src/main/java/net/minecraft/core/block/BlockCactus.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockCactus.java
@@ -26,6 +26,8 @@ public class BlockCactus extends Block implements IBonemealable
     {
         super(key, namespaceId, id, Material.cactus);
         setTicking(true);
+        float f = 0.0625F;
+        setBlockBounds(f, 0, f, 1 - f, 1, 1 - f);
     }
     public void onBlockPlacedByWorld(World world, int x, int y, int z)
     {
@@ -65,21 +67,6 @@ public class BlockCactus extends Block implements IBonemealable
         }
     }
 
-
-    @Override
-	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        float f = 0.0625F;
-        return AABB.getTemporaryBB((float) x + f, y, (float) z + f, (float)(x + 1) - f, (float)(y + 1) - f, (float)(z + 1) - f);
-    }
-
-    @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        float f = 0.0625F;
-        return AABB.getTemporaryBB((float) x + f, y, (float) z + f, (float)(x + 1) - f, y + 1, (float)(z + 1) - f);
-    }
-
     @Override
 	public boolean isCubeShaped()
     {
@@ -150,7 +137,7 @@ public class BlockCactus extends Block implements IBonemealable
     public boolean onBonemealUsed(ItemStack itemstack, @Nullable Player player, World world, int blockX, int blockY, int blockZ, Side side, double xPlaced, double yPlaced) {
         if(!world.isClientSide)
         {
-            ((BlockCactus)Block.blocksList[id]).growCactusOnTop(world, blockX, blockY, blockZ);
+            ((BlockCactus)Blocks.blocksList[id]).growCactusOnTop(world, blockX, blockY, blockZ);
             if (player == null || player.getGamemode().consumeBlocks())
             {
                 itemstack.stackSize--;
diff --git a/game/core/src/main/java/net/minecraft/core/block/BlockCake.java b/game/core/src/main/java/net/minecraft/core/block/BlockCake.java
new file mode 100644
index 000000000..485f4dc00
--- /dev/null
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockCake.java
@@ -0,0 +1,24 @@
+package net.minecraft.core.block;
+
+import net.minecraft.core.item.Items;
+import net.minecraft.core.util.phys.AABB;
+import net.minecraft.core.world.WorldSource;
+
+public class BlockCake extends BlockEdible
+{
+
+	public BlockCake(String key, String namespaceId, int id)
+    {
+        super(key, namespaceId, id, 6, 3, () -> Items.FOOD_CAKE);
+    }
+
+    @Override
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
+    {
+        int l = world.getBlockMetadata(x, y, z);
+        float f = 0.0625F;
+        float f1 = (float)(1 + l * 2) / 16F;
+        float f2 = 0.5F;
+        return AABB.getTemporaryBB(f1, 0.0F, f, 1.0F - f, f2, 1.0F - f);
+    }
+}
diff --git a/src/main/java/net/minecraft/core/block/BlockCandle.java b/game/core/src/main/java/net/minecraft/core/block/BlockCandle.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockCandle.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockCandle.java
diff --git a/src/main/java/net/minecraft/core/block/BlockChest.java b/game/core/src/main/java/net/minecraft/core/block/BlockChest.java
similarity index 98%
rename from src/main/java/net/minecraft/core/block/BlockChest.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockChest.java
index 4dee34beb..4dc99174e 100644
--- a/src/main/java/net/minecraft/core/block/BlockChest.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockChest.java
@@ -243,19 +243,19 @@ public class BlockChest extends BlockTileEntity implements IPaintable {
 		int bW = world.getBlockId(x - 1, y, z);
 		int bE = world.getBlockId(x + 1, y, z);
 		Direction direction = Direction.NORTH;
-		if(Block.solid[bN] && !Block.solid[bS])
+		if(Blocks.solid[bN] && !Blocks.solid[bS])
 		{
 			direction = Direction.SOUTH;
 		}
-		if(Block.solid[bS] && !Block.solid[bN])
+		if(Blocks.solid[bS] && !Blocks.solid[bN])
 		{
 			direction = Direction.NORTH;
 		}
-		if(Block.solid[bW] && !Block.solid[bE])
+		if(Blocks.solid[bW] && !Blocks.solid[bE])
 		{
 			direction = Direction.EAST;
 		}
-		if(Block.solid[bE] && !Block.solid[bW])
+		if(Blocks.solid[bE] && !Blocks.solid[bW])
 		{
 			direction = Direction.WEST;
 		}
@@ -270,7 +270,7 @@ public class BlockChest extends BlockTileEntity implements IPaintable {
 	}
 
 	public static boolean isChest(World world, int x, int y, int z) {
-		return Block.blocksList[world.getBlockId(x, y, z)] instanceof BlockChest;
+		return Blocks.blocksList[world.getBlockId(x, y, z)] instanceof BlockChest;
 	}
 	
 	public static boolean isSingleChest(World world, int x, int y, int z) {
diff --git a/src/main/java/net/minecraft/core/block/BlockChestLegacy.java b/game/core/src/main/java/net/minecraft/core/block/BlockChestLegacy.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockChestLegacy.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockChestLegacy.java
diff --git a/src/main/java/net/minecraft/core/block/BlockChestPainted.java b/game/core/src/main/java/net/minecraft/core/block/BlockChestPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockChestPainted.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockChestPainted.java
diff --git a/src/main/java/net/minecraft/core/block/BlockClay.java b/game/core/src/main/java/net/minecraft/core/block/BlockClay.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockClay.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockClay.java
diff --git a/src/main/java/net/minecraft/core/block/BlockCobble.java b/game/core/src/main/java/net/minecraft/core/block/BlockCobble.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockCobble.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockCobble.java
diff --git a/src/main/java/net/minecraft/core/block/BlockCobweb.java b/game/core/src/main/java/net/minecraft/core/block/BlockCobweb.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockCobweb.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockCobweb.java
diff --git a/src/main/java/net/minecraft/core/block/BlockCropsPumpkin.java b/game/core/src/main/java/net/minecraft/core/block/BlockCropsPumpkin.java
similarity index 80%
rename from src/main/java/net/minecraft/core/block/BlockCropsPumpkin.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockCropsPumpkin.java
index 573f74fbe..ce9e4d09d 100644
--- a/src/main/java/net/minecraft/core/block/BlockCropsPumpkin.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockCropsPumpkin.java
@@ -21,7 +21,7 @@ public class BlockCropsPumpkin
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z) {
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z) {
         int meta = world.getBlockMetadata(x, y, z);
         float onePix = 1.0F / 16.0F;
         float size = 0.0f;
@@ -37,7 +37,7 @@ public class BlockCropsPumpkin
             size = 14 * onePix;
         }
 
-        setBlockBounds(0.5F - size / 2, 0, 0.5F - size / 2, 0.5F + size / 2, size, 0.5F + size / 2);
+        return AABB.getTemporaryBB(0.5F - size / 2, 0, 0.5F - size / 2, 0.5F + size / 2, size, 0.5F + size / 2);
     }
 
     @Override
@@ -70,17 +70,17 @@ public class BlockCropsPumpkin
 
     private float getGrowthRate(World world, int x, int y, int z) {
         float growthRate = 1.0F;
-        int idNegZ = world.getBlockId(x, y, z - 1);
-        int idPosZ = world.getBlockId(x, y, z + 1);
-        int idNegX = world.getBlockId(x - 1, y, z);
-        int idPosX = world.getBlockId(x + 1, y, z);
-        int idNegXNegZ = world.getBlockId(x - 1, y, z - 1);
-        int idPosXNegZ = world.getBlockId(x + 1, y, z - 1);
-        int idPosXPosZ = world.getBlockId(x + 1, y, z + 1);
-        int idNegXPosZ = world.getBlockId(x - 1, y, z + 1);
-        boolean xNeighbor = idNegX == id || idPosX == id;
-        boolean zNeighbor = idNegZ == id || idPosZ == id;
-        boolean diagNeighbor = idNegXNegZ == id || idPosXNegZ == id || idPosXPosZ == id || idNegXPosZ == id;
+//        int idNegZ = world.getBlockId(x, y, z - 1);
+//        int idPosZ = world.getBlockId(x, y, z + 1);
+//        int idNegX = world.getBlockId(x - 1, y, z);
+//        int idPosX = world.getBlockId(x + 1, y, z);
+//        int idNegXNegZ = world.getBlockId(x - 1, y, z - 1);
+//        int idPosXNegZ = world.getBlockId(x + 1, y, z - 1);
+//        int idPosXPosZ = world.getBlockId(x + 1, y, z + 1);
+//        int idNegXPosZ = world.getBlockId(x - 1, y, z + 1);
+//        boolean xNeighbor = idNegX == id || idPosX == id;
+//        boolean zNeighbor = idNegZ == id || idPosZ == id;
+//        boolean diagNeighbor = idNegXNegZ == id || idPosXNegZ == id || idPosXPosZ == id || idNegXPosZ == id;
         for(int dx = x - 1; dx <= x + 1; dx++) {
             for(int dz = z - 1; dz <= z + 1; dz++) {
                 int id = world.getBlockId(dx, y - 1, dz);
@@ -117,12 +117,11 @@ public class BlockCropsPumpkin
     }
 
     public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z) {
-        setBlockBoundsBasedOnState(world, x, y, z);
         int meta = world.getBlockMetadata(x, y, z);
         if (meta == 0) {
             return null;
         }
-        return AABB.getTemporaryBB((double)x + minX, (double)y + minY, (double)z + minZ, (double)x + maxX, (double)y + maxY, (double)z + maxZ);
+        return getBlockBoundsFromState(world, x, y, z).move(x, y, z);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/BlockCropsWheat.java b/game/core/src/main/java/net/minecraft/core/block/BlockCropsWheat.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockCropsWheat.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockCropsWheat.java
diff --git a/src/main/java/net/minecraft/core/block/BlockDeadBush.java b/game/core/src/main/java/net/minecraft/core/block/BlockDeadBush.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockDeadBush.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockDeadBush.java
diff --git a/src/main/java/net/minecraft/core/block/BlockDispenser.java b/game/core/src/main/java/net/minecraft/core/block/BlockDispenser.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockDispenser.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockDispenser.java
diff --git a/src/main/java/net/minecraft/core/block/BlockDoor.java b/game/core/src/main/java/net/minecraft/core/block/BlockDoor.java
similarity index 80%
rename from src/main/java/net/minecraft/core/block/BlockDoor.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockDoor.java
index df1efadc3..2721ec5a1 100644
--- a/src/main/java/net/minecraft/core/block/BlockDoor.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockDoor.java
@@ -79,26 +79,12 @@ public class BlockDoor extends Block implements IPaintable
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
-        setBoundsForRotation(getRotation(world.getBlockMetadata(x, y, z)), true);
-        return super.getSelectedBoundingBoxFromPool(world, x, y, z);
+        return getBoundsForRotation(getRotation(world.getBlockMetadata(x, y, z)), false);
     }
 
-    @Override
-	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        setBlockBoundsBasedOnState(world, x, y, z);
-        return super.getCollisionBoundingBoxFromPool(world, x, y, z);
-    }
-
-    @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
-    {
-        setBoundsForRotation(getRotation(world.getBlockMetadata(x, y, z)), false);
-    }
-
-    public void setBoundsForRotation(int rotation, boolean drawingSelection)
+    public AABB getBoundsForRotation(int rotation, boolean drawingSelection)
     {
         float top = 1.0f, bottom = 0.0f;
         if (isTop && drawingSelection)
@@ -112,22 +98,17 @@ public class BlockDoor extends Block implements IPaintable
             bottom = 0.0f;
         }
         float f = 0.1875F;
-        setBlockBounds(0.0F, bottom, 0.0F, 1.0F, top, 1.0F);
-        if(rotation == 0)
-        {
-            setBlockBounds(0.0F, bottom, 0.0F, 1.0F, top, f);
-        }
-        if(rotation == 1)
-        {
-            setBlockBounds(1.0F - f, bottom, 0.0F, 1.0F, top, 1.0F);
-        }
-        if(rotation == 2)
-        {
-            setBlockBounds(0.0F, bottom, 1.0F - f, 1.0F, top, 1.0F);
-        }
-        if(rotation == 3)
-        {
-            setBlockBounds(0.0F, bottom, 0.0F, f, top, 1.0F);
+        switch (rotation) {
+            case 0:
+                return AABB.getTemporaryBB(0.0F, bottom, 0.0F, 1.0F, top, f);
+            case 1:
+                return AABB.getTemporaryBB(1.0F - f, bottom, 0.0F, 1.0F, top, 1.0F);
+            case 2:
+                return AABB.getTemporaryBB(0.0F, bottom, 1.0F - f, 1.0F, top, 1.0F);
+            case 3:
+                return AABB.getTemporaryBB(0.0F, bottom, 0.0F, f, top, 1.0F);
+            default:
+                return AABB.getTemporaryBB(0.0F, bottom, 0.0F, 1.0F, top, 1.0F);
         }
     }
     
@@ -148,13 +129,13 @@ public class BlockDoor extends Block implements IPaintable
         int l = world.getBlockMetadata(x, y, z);
         if(isTop)
         {
-            if(Block.blocksList[world.getBlockId(x, y - 1, z)] instanceof BlockDoor)
+            if(Blocks.blocksList[world.getBlockId(x, y - 1, z)] instanceof BlockDoor)
             {
-            	Block.blocksList[world.getBlockId(x, y - 1, z)].onBlockRightClicked(world, x, y - 1, z, player, side, xPlaced, yPlaced);
+            	Blocks.blocksList[world.getBlockId(x, y - 1, z)].onBlockRightClicked(world, x, y - 1, z, player, side, xPlaced, yPlaced);
             }
             return true;
         }
-        if(Block.blocksList[world.getBlockId(x, y + 1, z)] instanceof BlockDoor)
+        if(Blocks.blocksList[world.getBlockId(x, y + 1, z)] instanceof BlockDoor)
         {
             world.setBlockMetadataWithNotify(x, y + 1, z, l ^ MASK_OPENED);
         }
@@ -177,9 +158,9 @@ public class BlockDoor extends Block implements IPaintable
         
         if(isTop)
         {
-            if(Block.blocksList[world.getBlockId(x, y - 1, z)] instanceof BlockDoor)
+            if(Blocks.blocksList[world.getBlockId(x, y - 1, z)] instanceof BlockDoor)
             {
-            	((BlockDoor)Block.blocksList[world.getBlockId(x, y - 1, z)]).onPoweredBlockChange(world, x, y - 1, z, isPowered);
+            	((BlockDoor)Blocks.blocksList[world.getBlockId(x, y - 1, z)]).onPoweredBlockChange(world, x, y - 1, z, isPowered);
             }
             return;
         }
@@ -188,7 +169,7 @@ public class BlockDoor extends Block implements IPaintable
         {
             return;
         }
-        if(Block.blocksList[world.getBlockId(x, y + 1, z)] instanceof BlockDoor)
+        if(Blocks.blocksList[world.getBlockId(x, y + 1, z)] instanceof BlockDoor)
         {
             world.setBlockMetadataWithNotify(x, y + 1, z, meta ^ MASK_OPENED);
         }
@@ -200,22 +181,22 @@ public class BlockDoor extends Block implements IPaintable
     @Override
 	public void onNeighborBlockChange(World world, int x, int y, int z, int blockId)
     {
-        int i1 = world.getBlockMetadata(x, y, z);
+//        int i1 = world.getBlockMetadata(x, y, z);
         if(isTop)
         {
-        	Block otherBlock = Block.blocksList[world.getBlockId(x, y - 1, z)];
+        	Block otherBlock = Blocks.blocksList[world.getBlockId(x, y - 1, z)];
             if(!(otherBlock instanceof BlockDoor))
             {
                 world.setBlockWithNotify(x, y, z, 0);
             }
-            if(blockId > 0 && Block.blocksList[blockId].isSignalSource())
+            if(blockId > 0 && Blocks.blocksList[blockId].isSignalSource())
             {
                 otherBlock.onNeighborBlockChange(world, x, y - 1, z, blockId);
             }
         } else
         {
             boolean flag = false;
-        	Block otherBlock = Block.blocksList[world.getBlockId(x, y + 1, z)];
+        	Block otherBlock = Blocks.blocksList[world.getBlockId(x, y + 1, z)];
             if(!(otherBlock instanceof BlockDoor))
             {
                 world.setBlockWithNotify(x, y, z, 0);
@@ -239,7 +220,7 @@ public class BlockDoor extends Block implements IPaintable
                     //dropBlockAsItem(world, i, j, k, i1);
                 }
             } else
-            if(blockId > 0 && Block.blocksList[blockId].isSignalSource())
+            if(blockId > 0 && Blocks.blocksList[blockId].isSignalSource())
             {
                 boolean flag1 = world.hasNeighborSignal(x, y, z) || world.hasNeighborSignal(x, y + 1, z);
                 onPoweredBlockChange(world, x, y, z, flag1);
@@ -280,13 +261,6 @@ public class BlockDoor extends Block implements IPaintable
         return null;
     }
 
-    @Override
-    public HitResult collisionRayTrace(World world, int x, int y, int z, Vec3 start, Vec3 end)
-    {
-        setBlockBoundsBasedOnState(world, x, y, z);
-        return super.collisionRayTrace(world, x, y, z, start, end);
-    }
-
     public int getRotation(int i)
     {
         if ((i & MASK_OPENED) != 0) {
diff --git a/src/main/java/net/minecraft/core/block/BlockDoorPainted.java b/game/core/src/main/java/net/minecraft/core/block/BlockDoorPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockDoorPainted.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockDoorPainted.java
diff --git a/src/main/java/net/minecraft/core/block/BlockEdible.java b/game/core/src/main/java/net/minecraft/core/block/BlockEdible.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockEdible.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockEdible.java
diff --git a/src/main/java/net/minecraft/core/block/BlockFarmland.java b/game/core/src/main/java/net/minecraft/core/block/BlockFarmland.java
similarity index 97%
rename from src/main/java/net/minecraft/core/block/BlockFarmland.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFarmland.java
index b076f8af6..baf6712e1 100644
--- a/src/main/java/net/minecraft/core/block/BlockFarmland.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockFarmland.java
@@ -67,13 +67,13 @@ public class BlockFarmland extends Block implements IBonemealable
 	}
 
 	@Override
-	public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z) {
+	public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z) {
 		final Material material = world.getBlockMaterial(x, y + 1, z);
 		if (material == Material.vegetable)
 		{
-			setBlockBounds(0, 0, 0, 1, 1, 1);
+			return AABB.getTemporaryBB(0, 0, 0, 1, 1, 1);
 		} else {
-			setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.9375F, 1.0F);
+			return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 0.9375F, 1.0F);
 		}
 	}
 
diff --git a/src/main/java/net/minecraft/core/block/BlockFence.java b/game/core/src/main/java/net/minecraft/core/block/BlockFence.java
similarity index 78%
rename from src/main/java/net/minecraft/core/block/BlockFence.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFence.java
index 81d63800a..a57893b55 100644
--- a/src/main/java/net/minecraft/core/block/BlockFence.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockFence.java
@@ -67,17 +67,7 @@ public class BlockFence extends Block implements IPaintable
     @Override
     public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
     {
-    	boolean connectXPos = canConnectTo(world, x + 1, y, z);
-    	boolean connectXNeg = canConnectTo(world, x - 1, y, z);
-    	boolean connectZPos = canConnectTo(world, x, y, z + 1);
-    	boolean connectZNeg = canConnectTo(world, x, y, z - 1);
-        return AABB.getTemporaryBB(x + (connectXNeg ? 0.0f : 0.375f), y, z + (connectZNeg ? 0.0f : 0.375f), x + 1 - (connectXPos ? 0.0f : 0.375f), (float) y + 1.5F, z + 1 - (connectZPos ? 0.0f : 0.375f));
-    }
-    
-    @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-    	return getCollisionBoundingBoxFromPool(world, x, y, z).grow(0, -0.25f, 0).move(0, -0.25f, 0);
+    	return super.getCollisionBoundingBoxFromPool(world, x, y, z).expand(0, 0.5, 0);
     }
 
 //    @Override
@@ -99,18 +89,15 @@ public class BlockFence extends Block implements IPaintable
 //    }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
-    	AABB aabb = getCollisionBoundingBoxFromPool(world, x, y, z);
-    	minX = aabb.minX - x;
-    	minY = aabb.minY - y;
-    	minZ = aabb.minZ - z;
-    	maxX = aabb.maxX - x;
-    	maxY = aabb.maxY - y - 0.5F;
-    	maxZ = aabb.maxZ - z;
+        boolean connectXPos = canConnectTo(world, x + 1, y, z);
+        boolean connectXNeg = canConnectTo(world, x - 1, y, z);
+        boolean connectZPos = canConnectTo(world, x, y, z + 1);
+        boolean connectZNeg = canConnectTo(world, x, y, z - 1);
+        return AABB.getTemporaryBB((connectXNeg ? 0.0f : 0.375f), 0, (connectZNeg ? 0.0f : 0.375f), 1 - (connectXPos ? 0.0f : 0.375f), 1, 1 - (connectZPos ? 0.0f : 0.375f));
     }
 
-
     @Override
     public boolean isSolidRender()
     {
diff --git a/src/main/java/net/minecraft/core/block/BlockFenceChainlink.java b/game/core/src/main/java/net/minecraft/core/block/BlockFenceChainlink.java
similarity index 84%
rename from src/main/java/net/minecraft/core/block/BlockFenceChainlink.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFenceChainlink.java
index a656ae989..82ccb045a 100644
--- a/src/main/java/net/minecraft/core/block/BlockFenceChainlink.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockFenceChainlink.java
@@ -16,7 +16,7 @@ public class BlockFenceChainlink extends BlockFenceThin
     public boolean canConnectTo(WorldSource world, int x, int y, int z)
     {
         int id = world.getBlockId(x, y, z);
-        return Block.hasTag(id, BlockTags.CHAINLINK_FENCES_CONNECT) || (Block.blocksList[id] != null && (Block.blocksList[id].blockMaterial.isStone() || Block.blocksList[id].blockMaterial.isMetal()));
+        return Block.hasTag(id, BlockTags.CHAINLINK_FENCES_CONNECT) || (Blocks.blocksList[id] != null && (Blocks.blocksList[id].blockMaterial.isStone() || Blocks.blocksList[id].blockMaterial.isMetal()));
     }
     
     @Override
diff --git a/src/main/java/net/minecraft/core/block/BlockFenceGate.java b/game/core/src/main/java/net/minecraft/core/block/BlockFenceGate.java
similarity index 90%
rename from src/main/java/net/minecraft/core/block/BlockFenceGate.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFenceGate.java
index 3b9ed0287..75b791a04 100644
--- a/src/main/java/net/minecraft/core/block/BlockFenceGate.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockFenceGate.java
@@ -52,23 +52,11 @@ public class BlockFenceGate extends Block implements IPaintable
     	}
 
     }
-    
-    @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-    	return getAABBFromMeta(world.getBlockMetadata(x, y, z)).move(x, y, z);
-    }
-    
+
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
-    	AABB aabb = getAABBFromMeta(world.getBlockMetadata(x, y, z));
-    	minX = aabb.minX;
-    	minY = aabb.minY;
-    	minZ = aabb.minZ;
-    	maxX = aabb.maxX;
-    	maxY = aabb.maxY;
-    	maxZ = aabb.maxZ;
+    	return getAABBFromMeta(world.getBlockMetadata(x, y, z));
     }
 
 
diff --git a/src/main/java/net/minecraft/core/block/BlockFenceGatePainted.java b/game/core/src/main/java/net/minecraft/core/block/BlockFenceGatePainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockFenceGatePainted.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFenceGatePainted.java
diff --git a/src/main/java/net/minecraft/core/block/BlockFencePainted.java b/game/core/src/main/java/net/minecraft/core/block/BlockFencePainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockFencePainted.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFencePainted.java
diff --git a/src/main/java/net/minecraft/core/block/BlockFenceSteel.java b/game/core/src/main/java/net/minecraft/core/block/BlockFenceSteel.java
similarity index 80%
rename from src/main/java/net/minecraft/core/block/BlockFenceSteel.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFenceSteel.java
index 54211a1ef..7bcb11097 100644
--- a/src/main/java/net/minecraft/core/block/BlockFenceSteel.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockFenceSteel.java
@@ -12,6 +12,6 @@ public class BlockFenceSteel extends BlockFenceThin {
     @Override
     public boolean canConnectTo(WorldSource world, int x, int y, int z) {
         int id = world.getBlockId(x, y, z);
-        return Block.hasTag(id, BlockTags.CHAINLINK_FENCES_CONNECT) || (Block.blocksList[id] != null && (Block.blocksList[id].blockMaterial.isStone() || Block.blocksList[id].blockMaterial.isMetal()));
+        return Block.hasTag(id, BlockTags.CHAINLINK_FENCES_CONNECT) || (Blocks.blocksList[id] != null && (Blocks.blocksList[id].blockMaterial.isStone() || Blocks.blocksList[id].blockMaterial.isMetal()));
     }
 }
diff --git a/src/main/java/net/minecraft/core/block/BlockFenceThin.java b/game/core/src/main/java/net/minecraft/core/block/BlockFenceThin.java
similarity index 76%
rename from src/main/java/net/minecraft/core/block/BlockFenceThin.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFenceThin.java
index ece295b00..3cb49d597 100644
--- a/src/main/java/net/minecraft/core/block/BlockFenceThin.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockFenceThin.java
@@ -19,31 +19,13 @@ public abstract class BlockFenceThin extends Block
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         boolean connectXPos = canConnectTo(world, x + 1, y, z);
         boolean connectXNeg = canConnectTo(world, x - 1, y, z);
         boolean connectZPos = canConnectTo(world, x, y, z + 1);
         boolean connectZNeg = canConnectTo(world, x, y, z - 1);
-        return AABB.getTemporaryBB(x + (connectXNeg ? 0.0f : 0.375f), y, z + (connectZNeg ? 0.0f : 0.375f), x + 1 - (connectXPos ? 0.0f : 0.375f), (float) y + 1, z + 1 - (connectZPos ? 0.0f : 0.375f));
-    }
-
-    @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        return getCollisionBoundingBoxFromPool(world, x, y, z);
-    }
-
-    @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
-    {
-        AABB aabb = getCollisionBoundingBoxFromPool(world, x, y, z);
-        minX = aabb.minX - x;
-        minY = aabb.minY - y;
-        minZ = aabb.minZ - z;
-        maxX = aabb.maxX - x;
-        maxY = aabb.maxY - y;
-        maxZ = aabb.maxZ - z;
+        return AABB.getTemporaryBB((connectXNeg ? 0.0f : 0.375f), 0, (connectZNeg ? 0.0f : 0.375f), 1 - (connectXPos ? 0.0f : 0.375f), 1, 1 - (connectZPos ? 0.0f : 0.375f));
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/BlockFenceWallPaper.java b/game/core/src/main/java/net/minecraft/core/block/BlockFenceWallPaper.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockFenceWallPaper.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFenceWallPaper.java
diff --git a/src/main/java/net/minecraft/core/block/BlockFire.java b/game/core/src/main/java/net/minecraft/core/block/BlockFire.java
similarity index 98%
rename from src/main/java/net/minecraft/core/block/BlockFire.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFire.java
index c9c2edc0d..9158324f7 100644
--- a/src/main/java/net/minecraft/core/block/BlockFire.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockFire.java
@@ -23,8 +23,8 @@ public class BlockFire extends Block {
 	public static final int BURN_MEDIUM = 20;
 	public static final int BURN_HARD = 5;
 	public static final int BURN_NEVER = 0;
-	private static final int[] flameChance = new int[Block.blocksList.length];
-	private static final int[] burnChance = new int[Block.blocksList.length];
+	private static final int[] flameChance = new int[Blocks.blocksList.length];
+	private static final int[] burnChance = new int[Blocks.blocksList.length];
 
 	public BlockFire(String key, String namespaceId, int id) {
 		super(key, namespaceId, id, Material.fire);
diff --git a/src/main/java/net/minecraft/core/block/BlockFlag.java b/game/core/src/main/java/net/minecraft/core/block/BlockFlag.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockFlag.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFlag.java
diff --git a/src/main/java/net/minecraft/core/block/BlockFlower.java b/game/core/src/main/java/net/minecraft/core/block/BlockFlower.java
similarity index 94%
rename from src/main/java/net/minecraft/core/block/BlockFlower.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFlower.java
index cf3a4f045..8aff9ab5d 100644
--- a/src/main/java/net/minecraft/core/block/BlockFlower.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockFlower.java
@@ -49,8 +49,8 @@ public class BlockFlower extends Block implements IBonemealable {
     }
 
     protected boolean mayPlaceOn(int blockId) {
-        if (Block.blocksList[blockId] == null) return false;
-        return Block.blocksList[blockId].hasTag(BlockTags.GROWS_FLOWERS);
+        if (Blocks.blocksList[blockId] == null) return false;
+        return Blocks.blocksList[blockId].hasTag(BlockTags.GROWS_FLOWERS);
     }
 
     @Override
@@ -120,7 +120,7 @@ public class BlockFlower extends Block implements IBonemealable {
                     l1 += ((rand.nextInt(3) - 1) * rand.nextInt(3)) / 2;
                     i2 += rand.nextInt(3) - 1;
                     int id1 = world.getBlockId(k1, l1 - 1, i2);
-                    if (Block.blocksList[id1] == null || !Block.blocksList[id1].hasTag(BlockTags.GROWS_FLOWERS)) {
+                    if (Blocks.blocksList[id1] == null || !Blocks.blocksList[id1].hasTag(BlockTags.GROWS_FLOWERS)) {
                         continue label0;
                     }
                 }
diff --git a/src/main/java/net/minecraft/core/block/BlockFlowerStackable.java b/game/core/src/main/java/net/minecraft/core/block/BlockFlowerStackable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockFlowerStackable.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFlowerStackable.java
diff --git a/src/main/java/net/minecraft/core/block/BlockFluid.java b/game/core/src/main/java/net/minecraft/core/block/BlockFluid.java
similarity index 97%
rename from src/main/java/net/minecraft/core/block/BlockFluid.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFluid.java
index 22be11beb..86a1cf1a6 100644
--- a/src/main/java/net/minecraft/core/block/BlockFluid.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockFluid.java
@@ -191,12 +191,6 @@ public abstract class BlockFluid extends Block
         super.updateTick(world, x, y, z, rand);
     }
 
-    @Override
-    public int getRenderLayer()
-    {
-        return blockMaterial != Material.water ? 0 : 1;
-    }
-
     @Override
     public void animationTick(World world, int x, int y, int z, Random rand)
     {
@@ -211,7 +205,7 @@ public abstract class BlockFluid extends Block
         if(blockMaterial == Material.lava && world.getBlockMaterial(x, y + 1, z) == Material.air && !world.isBlockOpaqueCube(x, y + 1, z) && rand.nextInt(100) == 0)
         {
             double xOff = (double) x + rand.nextFloat();
-            double yOff = (double) y + maxY;
+            double yOff = (double) y + getBounds().maxY;
             double zOff = (double) z + rand.nextFloat();
             world.spawnParticle("lava", xOff, yOff, zOff, 0.0D, 0.0D, 0.0D, 0);
         }
@@ -321,13 +315,13 @@ public abstract class BlockFluid extends Block
         }
     }
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         float f7 = BlockFluid.getFluidHeight(world, x, y, z, blockMaterial);
         float f8 = BlockFluid.getFluidHeight(world, x, y, z + 1, blockMaterial);
         float f9 = BlockFluid.getFluidHeight(world, x + 1, y, z + 1, blockMaterial);
         float f10 = BlockFluid.getFluidHeight(world, x + 1, y, z, blockMaterial);
-        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, Math.max((f7 + f8 + f9 + f10)/4f, 0.2), 1.0F);
+        return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, Math.max((f7 + f8 + f9 + f10)/4f, 0.2), 1.0F);
     }
 
     public static float getFluidHeight(WorldSource worldSource, int x, int y, int z, Material material)
diff --git a/src/main/java/net/minecraft/core/block/BlockFluidFlowing.java b/game/core/src/main/java/net/minecraft/core/block/BlockFluidFlowing.java
similarity index 95%
rename from src/main/java/net/minecraft/core/block/BlockFluidFlowing.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFluidFlowing.java
index e8463b54f..05ee752f9 100644
--- a/src/main/java/net/minecraft/core/block/BlockFluidFlowing.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockFluidFlowing.java
@@ -104,7 +104,7 @@ public class BlockFluidFlowing extends BlockFluid
         	int meta = world.getBlockMetadata(x, y - 1, z);
         	if(id > 0)
             {
-                Block.blocksList[id].dropBlockWithCause(world, EnumDropCause.WORLD, x, y - 1, z, meta, null, null);
+                Blocks.blocksList[id].dropBlockWithCause(world, EnumDropCause.WORLD, x, y - 1, z, meta, null, null);
         	}
             if(localFlowDecay >= 8) {
                 world.setBlockAndMetadataWithNotify(x, y - 1, z, this.id, localFlowDecay);
@@ -155,7 +155,7 @@ public class BlockFluidFlowing extends BlockFluid
                     fizz(world, x, y, z);
                 } else
                 {
-                    Block.blocksList[i1].dropBlockWithCause(world, EnumDropCause.WORLD, x, y, z, world.getBlockMetadata(x, y, z), null, null);
+                    Blocks.blocksList[i1].dropBlockWithCause(world, EnumDropCause.WORLD, x, y, z, world.getBlockMetadata(x, y, z), null, null);
                 }
             }
             world.setBlockAndMetadataWithNotify(x, y, z, id, meta);
@@ -269,7 +269,7 @@ public class BlockFluidFlowing extends BlockFluid
     private boolean isFluidBlocking(World world, int x, int y, int z)
     {
         int id = world.getBlockId(x, y, z);
-        if (Block.blocksList[id] == null || Block.blocksList[id] instanceof BlockFluid || Block.blocksList[id].hasTag(BlockTags.BROKEN_BY_FLUIDS)) return false;
+        if (Blocks.blocksList[id] == null || Blocks.blocksList[id] instanceof BlockFluid || Blocks.blocksList[id].hasTag(BlockTags.BROKEN_BY_FLUIDS)) return false;
         return true;
     }
 
diff --git a/src/main/java/net/minecraft/core/block/BlockFluidStill.java b/game/core/src/main/java/net/minecraft/core/block/BlockFluidStill.java
similarity index 96%
rename from src/main/java/net/minecraft/core/block/BlockFluidStill.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFluidStill.java
index 7a5f4bdd4..08d24723c 100644
--- a/src/main/java/net/minecraft/core/block/BlockFluidStill.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockFluidStill.java
@@ -60,7 +60,7 @@ public class BlockFluidStill extends BlockFluid
                     }
                     continue;
                 }
-                if(Block.blocksList[blockId].blockMaterial.blocksMotion())
+                if(Blocks.blocksList[blockId].blockMaterial.blocksMotion())
                 {
                     return;
                 }
diff --git a/src/main/java/net/minecraft/core/block/BlockFullyRotatable.java b/game/core/src/main/java/net/minecraft/core/block/BlockFullyRotatable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockFullyRotatable.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFullyRotatable.java
diff --git a/src/main/java/net/minecraft/core/block/BlockFurnace.java b/game/core/src/main/java/net/minecraft/core/block/BlockFurnace.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockFurnace.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFurnace.java
diff --git a/src/main/java/net/minecraft/core/block/BlockFurnaceBlast.java b/game/core/src/main/java/net/minecraft/core/block/BlockFurnaceBlast.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockFurnaceBlast.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockFurnaceBlast.java
diff --git a/src/main/java/net/minecraft/core/block/BlockGlass.java b/game/core/src/main/java/net/minecraft/core/block/BlockGlass.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockGlass.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockGlass.java
diff --git a/src/main/java/net/minecraft/core/block/BlockGlassTinted.java b/game/core/src/main/java/net/minecraft/core/block/BlockGlassTinted.java
similarity index 92%
rename from src/main/java/net/minecraft/core/block/BlockGlassTinted.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockGlassTinted.java
index 70a0b6acc..e9139b829 100644
--- a/src/main/java/net/minecraft/core/block/BlockGlassTinted.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockGlassTinted.java
@@ -21,12 +21,6 @@ public class BlockGlassTinted extends BlockGlass
         return true;
     }
 
-    @Override
-    public int getRenderLayer()
-    {
-        return 1;
-    }
-
     @Override
     public ItemStack[] getBreakResult(World world, EnumDropCause dropCause, int meta, TileEntity tileEntity)
     {
diff --git a/src/main/java/net/minecraft/core/block/BlockGlowStone.java b/game/core/src/main/java/net/minecraft/core/block/BlockGlowStone.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockGlowStone.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockGlowStone.java
diff --git a/src/main/java/net/minecraft/core/block/BlockGrass.java b/game/core/src/main/java/net/minecraft/core/block/BlockGrass.java
similarity index 94%
rename from src/main/java/net/minecraft/core/block/BlockGrass.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockGrass.java
index ff174acca..e8264b535 100644
--- a/src/main/java/net/minecraft/core/block/BlockGrass.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockGrass.java
@@ -25,7 +25,7 @@ public class BlockGrass extends Block
         {
             return;
         }
-        if(world.getBlockLightValue(x, y + 1, z) < 4 && Block.lightBlock[world.getBlockId(x, y + 1, z)] > 2)
+        if(world.getBlockLightValue(x, y + 1, z) < 4 && Blocks.lightBlock[world.getBlockId(x, y + 1, z)] > 2)
         {
             if(rand.nextInt(4) != 0)
             {
@@ -39,7 +39,7 @@ public class BlockGrass extends Block
             int i1 = (y + rand.nextInt(5)) - 3;
             int j1 = (z + rand.nextInt(3)) - 1;
             int k1 = world.getBlockId(l, i1 + 1, j1);
-            if(world.getBlockId(l, i1, j1) == Blocks.DIRT.id && world.getBlockLightValue(l, i1 + 1, j1) >= 4 && Block.lightBlock[k1] <= 2)
+            if(world.getBlockId(l, i1, j1) == Blocks.DIRT.id && world.getBlockLightValue(l, i1 + 1, j1) >= 4 && Blocks.lightBlock[k1] <= 2)
             {
                 world.setBlockWithNotify(l, i1, j1, this.id);
             }
diff --git a/src/main/java/net/minecraft/core/block/BlockGrassScorched.java b/game/core/src/main/java/net/minecraft/core/block/BlockGrassScorched.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockGrassScorched.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockGrassScorched.java
diff --git a/src/main/java/net/minecraft/core/block/BlockGravel.java b/game/core/src/main/java/net/minecraft/core/block/BlockGravel.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockGravel.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockGravel.java
diff --git a/src/main/java/net/minecraft/core/block/BlockIce.java b/game/core/src/main/java/net/minecraft/core/block/BlockIce.java
similarity index 94%
rename from src/main/java/net/minecraft/core/block/BlockIce.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockIce.java
index ce9e6d447..9844438a9 100644
--- a/src/main/java/net/minecraft/core/block/BlockIce.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockIce.java
@@ -20,12 +20,6 @@ public class BlockIce extends BlockTransparent
         setTicking(true);
     }
 
-    @Override
-    public int getRenderLayer()
-    {
-        return 1;
-    }
-
     @Override
     public ItemStack[] getBreakResult(World world, EnumDropCause dropCause, int meta, TileEntity tileEntity)
     {
@@ -53,7 +47,7 @@ public class BlockIce extends BlockTransparent
     @Override
 	public void updateTick(World world, int x, int y, int z, Random rand)
     {
-        if(world.getSavedLightValue(LightLayer.Block, x, y, z) > 11 - Block.lightBlock[id])
+        if(world.getSavedLightValue(LightLayer.Block, x, y, z) > 11 - Blocks.lightBlock[id])
         {
             world.setBlockWithNotify(x, y, z, Blocks.FLUID_WATER_STILL.id);
         }
diff --git a/src/main/java/net/minecraft/core/block/BlockJar.java b/game/core/src/main/java/net/minecraft/core/block/BlockJar.java
similarity index 83%
rename from src/main/java/net/minecraft/core/block/BlockJar.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockJar.java
index 0c33182d7..28d2458f9 100644
--- a/src/main/java/net/minecraft/core/block/BlockJar.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockJar.java
@@ -40,27 +40,11 @@ public class BlockJar extends BlockTileEntity {
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
-        float offset = 0.0F;
-        return AABB.getTemporaryBB(x + 0.3125f, y + offset, z + 0.3125f, x + 1 - 0.3125f, (float) y + 0.375f + offset, z + 1 - 0.3125f);
-    }
-    @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        return getCollisionBoundingBoxFromPool(world, x, y, z);
-    }
-    @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
-    {
-        AABB aabb = getCollisionBoundingBoxFromPool(world, x, y, z);
-        minX = aabb.minX - x;
-        minY = aabb.minY - y;
-        minZ = aabb.minZ - z;
-        maxX = aabb.maxX - x;
-        maxY = aabb.maxY - y;
-        maxZ = aabb.maxZ - z;
+        return AABB.getTemporaryBB(0.3125f, 0, 0.3125f, 1 - 0.3125f, 0.375f, 1 - 0.3125f);
     }
+
     @Override
     public boolean isCubeShaped()
     {
@@ -100,15 +84,14 @@ public class BlockJar extends BlockTileEntity {
                     tileEntity.flowerData = player.getHeldItem().getMetadata();
                     world.playBlockSoundEffect(player, x + 0.5f, y + 0.5f, z + 0.5f, this, EnumBlockSoundEffectType.PLACE);
                     return true;
-                } else if (blockInHand instanceof BlockFlowerStackable && blockInHand == Block.getBlock(tileEntity.flowerInPot)) {
+                } else if (blockInHand instanceof BlockFlowerStackable && blockInHand == Blocks.getBlock(tileEntity.flowerInPot)) {
                     final int metadata = tileEntity.flowerData;
                     final int currentStackCount = BlockFlowerStackable.getStackCount(metadata);
                     if (currentStackCount >= BlockFlowerStackable.MAX_STACK_COUNT) {
                         return false;
                     }
 
-                    final int newMetadata = BlockFlowerStackable.setPermanent(BlockFlowerStackable.setStackCount(metadata, currentStackCount + 1), true);
-                    tileEntity.flowerData = newMetadata;
+                    tileEntity.flowerData = BlockFlowerStackable.setPermanent(BlockFlowerStackable.setStackCount(metadata, currentStackCount + 1), true);
                     world.playBlockSoundEffect(player, x + 0.5f, y + 0.5f, z + 0.5f, this, EnumBlockSoundEffectType.PLACE);
                     player.getHeldItem().consumeItem(player);
                     return true;
diff --git a/src/main/java/net/minecraft/core/block/BlockJukebox.java b/game/core/src/main/java/net/minecraft/core/block/BlockJukebox.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockJukebox.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockJukebox.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLadder.java b/game/core/src/main/java/net/minecraft/core/block/BlockLadder.java
similarity index 75%
rename from src/main/java/net/minecraft/core/block/BlockLadder.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLadder.java
index e9da8c4f9..b477fd781 100644
--- a/src/main/java/net/minecraft/core/block/BlockLadder.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLadder.java
@@ -29,22 +29,22 @@ public class BlockLadder extends Block {
 	}
 	
 	@Override
-	public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z) {
-		setBlockBounds(world.getBlockMetadata(x, y, z));
-	}
-	
-	@Override
-	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z) {
-		setBlockBounds(world.getBlockMetadata(x, y, z));
-		return super.getCollisionBoundingBoxFromPool(world, x, y, z);
-	}
-	
-	@Override
-	public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z) {
-		setBlockBounds(world.getBlockMetadata(x, y, z));
-		return super.getSelectedBoundingBoxFromPool(world, x, y, z);
+	public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z) {
+		Side side = getSideFromMeta(world.getBlockMetadata(x, y, z));
+
+		float width = 3.0f / 16.0f;
+
+		if(side == Side.SOUTH) {
+			return AABB.getTemporaryBB(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, width);
+		}else if(side == Side.WEST) {
+			return AABB.getTemporaryBB(1.0f - width, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
+		}else if(side == Side.EAST) {
+			return AABB.getTemporaryBB(0.0f, 0.0f, 0.0f, width, 1.0f, 1.0f);
+		}else {
+			return AABB.getTemporaryBB(0.0f, 0.0f, 1.0f - width, 1.0f, 1.0f, 1.0f);
+		}
 	}
-	
+
 	@Override
 	public void onNeighborBlockChange(World world, int x, int y, int z, int blockId) {
 		if(!canExistAt(world, x, y, z, world.getBlockMetadata(x, y, z))) {
@@ -90,23 +90,7 @@ public class BlockLadder extends Block {
 		
 		return world.isBlockNormalCube(x, y, z);
 	}
-	
-	public void setBlockBounds(int meta) {
-		Side side = getSideFromMeta(meta);
-		
-		float width = 3.0f / 16.0f;
-		
-		if(side == Side.SOUTH) {
-			setBlockBounds(0.0f, 0.0f, 0.0f, 1.0f, 1.0f, width);
-		}else if(side == Side.WEST) {
-			setBlockBounds(1.0f - width, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f);
-		}else if(side == Side.EAST) {
-			setBlockBounds(0.0f, 0.0f, 0.0f, width, 1.0f, 1.0f);
-		}else {
-			setBlockBounds(0.0f, 0.0f, 1.0f - width, 1.0f, 1.0f, 1.0f);
-		}
-	}
-	
+
 	/**
 	 * Returns the side of the block the ladder is attached to
 	 */
diff --git a/src/main/java/net/minecraft/core/block/BlockLamp.java b/game/core/src/main/java/net/minecraft/core/block/BlockLamp.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLamp.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLamp.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java b/game/core/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java
similarity index 88%
rename from src/main/java/net/minecraft/core/block/BlockLanternFirefly.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java
index 553e2f079..a68da71e2 100644
--- a/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLanternFirefly.java
@@ -31,31 +31,13 @@ public class BlockLanternFirefly extends Block{
     }
 
     @Override
-    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         int metadata = world.getBlockMetadata(x, y, z);
         float offset = 0.0F;
         if ((metadata & MASK_HANGING) != 0)
             offset = 0.3875F;
-        return AABB.getTemporaryBB(x + 0.3125f, y + offset, z + 0.3125f, x + 1 - 0.3125f, (float) y + 0.5F + offset, z + 1 - 0.3125f);
-    }
-
-    @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        return getCollisionBoundingBoxFromPool(world, x, y, z);
-    }
-
-    @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
-    {
-        AABB aabb = getCollisionBoundingBoxFromPool(world, x, y, z);
-        minX = aabb.minX - x;
-        minY = aabb.minY - y;
-        minZ = aabb.minZ - z;
-        maxX = aabb.maxX - x;
-        maxY = aabb.maxY - y;
-        maxZ = aabb.maxZ - z;
+        return AABB.getTemporaryBB(0.3125f, offset,  0.3125f, 1 - 0.3125f, 0.5F + offset, 1 - 0.3125f);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/BlockLayerBase.java b/game/core/src/main/java/net/minecraft/core/block/BlockLayerBase.java
similarity index 69%
rename from src/main/java/net/minecraft/core/block/BlockLayerBase.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLayerBase.java
index 8c986ae15..f6125a815 100644
--- a/src/main/java/net/minecraft/core/block/BlockLayerBase.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLayerBase.java
@@ -22,13 +22,6 @@ public abstract class BlockLayerBase extends Block
     	this.idSupplier = idSupplier;
     	return this;
     }
-    @Override
-	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        int l = world.getBlockMetadata(x, y, z) & 7;
-        float f = (float)(2 * (1 + l)) / 16F;
-        return AABB.getTemporaryBB((double) x + minX, (double) y + minY, (double) z + minZ, (double) x + maxX, (float) y + f, (double) z + maxZ);
-    }
 
     @Override
 	public boolean isSolidRender()
@@ -43,11 +36,11 @@ public abstract class BlockLayerBase extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z) & 7;
         float f = (float)(2 * (1 + l)) / 16F;
-        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, f, 1.0F);
+        return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, f, 1.0F);
     }
     public int getFullBlockID() {
         return idSupplier.get();
diff --git a/src/main/java/net/minecraft/core/block/BlockLayerLeaves.java b/game/core/src/main/java/net/minecraft/core/block/BlockLayerLeaves.java
similarity index 97%
rename from src/main/java/net/minecraft/core/block/BlockLayerLeaves.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLayerLeaves.java
index 1dacf8349..d28f0f521 100644
--- a/src/main/java/net/minecraft/core/block/BlockLayerLeaves.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLayerLeaves.java
@@ -49,7 +49,7 @@ public class BlockLayerLeaves extends BlockLayerBase
 	public boolean canPlaceBlockAt(World world, int x, int y, int z)
     {
         int l = world.getBlockId(x, y - 1, z);
-        if(l == 0 || (!Block.blocksList[l].isSolidRender() && !(Block.blocksList[l] instanceof BlockLeavesBase)))
+        if(l == 0 || (!Blocks.blocksList[l].isSolidRender() && !(Blocks.blocksList[l] instanceof BlockLeavesBase)))
         {
         	return false;
         }
diff --git a/src/main/java/net/minecraft/core/block/BlockLayerSlate.java b/game/core/src/main/java/net/minecraft/core/block/BlockLayerSlate.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLayerSlate.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLayerSlate.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLayerSnow.java b/game/core/src/main/java/net/minecraft/core/block/BlockLayerSnow.java
similarity index 86%
rename from src/main/java/net/minecraft/core/block/BlockLayerSnow.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLayerSnow.java
index 585600eae..b96913312 100644
--- a/src/main/java/net/minecraft/core/block/BlockLayerSnow.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLayerSnow.java
@@ -7,8 +7,6 @@ import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.enums.LightLayer;
 import net.minecraft.core.world.World;
 import net.minecraft.core.block.material.Material;
-import net.minecraft.core.util.phys.AABB;
-import net.minecraft.core.world.WorldSource;
 
 import java.util.Random;
 
@@ -22,14 +20,6 @@ public class BlockLayerSnow extends BlockLayerBase
         setTicking(true);
     }
 
-    @Override
-    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        int l = world.getBlockMetadata(x, y, z) & 7;
-        float f = (float)(2 * (1 + l)) / 16F;
-        return AABB.getTemporaryBB((double) x + minX, (double) y + minY, (double) z + minZ, (double) x + maxX, (float) y + f - 0.125F, (double) z + maxZ);
-    }
-
     public void accumulate(World world, int x, int y, int z)
     {
     	int myMetadata = world.getBlockMetadata(x, y, z);
@@ -52,7 +42,7 @@ public class BlockLayerSnow extends BlockLayerBase
 	public boolean canPlaceBlockAt(World world, int x, int y, int z)
     {
         int l = world.getBlockId(x, y - 1, z);
-        if(l == 0 || (!Block.blocksList[l].isSolidRender() && !(Block.blocksList[l] instanceof BlockLeavesBase)))
+        if(l == 0 || (!Blocks.blocksList[l].isSolidRender() && !(Blocks.blocksList[l] instanceof BlockLeavesBase)))
         {
         	return false;
         }
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesBase.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesBase.java
similarity index 97%
rename from src/main/java/net/minecraft/core/block/BlockLeavesBase.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesBase.java
index a0a1277fe..6fc2ba75e 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesBase.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesBase.java
@@ -68,7 +68,7 @@ public abstract class BlockLeavesBase extends Block
                     for(int dz = -radius; dz <= radius; dz++)
                     {
                         int blockId = world.getBlockId(x + dx, y + dy, z + dz);
-                        if(Block.blocksList[blockId] instanceof BlockLeavesBase)
+                        if(Blocks.blocksList[blockId] instanceof BlockLeavesBase)
                         {
                             int meta = world.getBlockMetadata(x + dx, y + dy, z + dz);
                             if (!isPermanent(meta))
@@ -109,12 +109,12 @@ public abstract class BlockLeavesBase extends Block
                         for(int zOffset = -byte0; zOffset <= byte0; zOffset++)
                         {
                             int k3 = world.getBlockId(x + xOffset, y + yOffset, z + zOffset);
-                            if(Block.blocksList[k3] instanceof BlockLog)
+                            if(Blocks.blocksList[k3] instanceof BlockLog)
                             {
                                 adjacentTreeBlocks[(xOffset + halfLength) * xSpan + (yOffset + halfLength) * ySpan + (zOffset + halfLength)] = 0;
                                 continue;
                             }
-                            if(Block.blocksList[k3] instanceof BlockLeavesBase)
+                            if(Blocks.blocksList[k3] instanceof BlockLeavesBase)
                             {
                                 adjacentTreeBlocks[(xOffset + halfLength) * xSpan + (yOffset + halfLength) * ySpan + (zOffset + halfLength)] = -2;
                             } else
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesBirch.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesBirch.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLeavesBirch.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesBirch.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesCacao.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesCacao.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLeavesCacao.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesCacao.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesCherry.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesCherry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLeavesCherry.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesCherry.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesCherryFlowering.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesCherryFlowering.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLeavesCherryFlowering.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesCherryFlowering.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesEucalyptus.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesOak.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesOak.java
similarity index 95%
rename from src/main/java/net/minecraft/core/block/BlockLeavesOak.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesOak.java
index 5426f8027..e446d3bdd 100644
--- a/src/main/java/net/minecraft/core/block/BlockLeavesOak.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesOak.java
@@ -23,7 +23,7 @@ public class BlockLeavesOak extends BlockLeavesBase
             {
                 int id = world.getBlockId(x, y + q, z);
                 if (id != 0) break;
-                if (Blocks.LAYER_LEAVES_OAK.canPlaceBlockAt(world, x, y + q, z) && Block.blocksList[world.getBlockId(x, y + q - 1, z)].blockMaterial.blocksMotion())
+                if (Blocks.LAYER_LEAVES_OAK.canPlaceBlockAt(world, x, y + q, z) && Blocks.blocksList[world.getBlockId(x, y + q - 1, z)].blockMaterial.blocksMotion())
                 {
                     world.setBlockWithNotify(x, y + q, z, Blocks.LAYER_LEAVES_OAK.id);
                     break;
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesPalm.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesPalm.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLeavesPalm.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesPalm.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesPine.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesPine.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLeavesPine.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesPine.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesRetro.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesRetro.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLeavesRetro.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesRetro.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesShrub.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesShrub.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLeavesShrub.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesShrub.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLeavesThorn.java b/game/core/src/main/java/net/minecraft/core/block/BlockLeavesThorn.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockLeavesThorn.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLeavesThorn.java
diff --git a/src/main/java/net/minecraft/core/block/BlockLever.java b/game/core/src/main/java/net/minecraft/core/block/BlockLever.java
similarity index 94%
rename from src/main/java/net/minecraft/core/block/BlockLever.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLever.java
index 7023bdab9..dd455cbb6 100644
--- a/src/main/java/net/minecraft/core/block/BlockLever.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLever.java
@@ -194,7 +194,7 @@ public class BlockLever extends Block
                     shouldBreak = !world.canPlaceOnSurfaceOfBlock(x, y + 1, z);
                     break;
                 default:
-                    shouldBreak = true;
+                    shouldBreak = false;
             }
             if(shouldBreak)
             {
@@ -218,24 +218,24 @@ public class BlockLever extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         int rotation = getRotation(world.getBlockMetadata(x, y, z));
         float f = 0.1875F;
         if(rotation == ROTATION_EAST) {
-            setBlockBounds(0.0F, 0.2F, 0.5F - f, f * 2.0F, 0.8F, 0.5F + f);
+            return AABB.getTemporaryBB(0.0F, 0.2F, 0.5F - f, f * 2.0F, 0.8F, 0.5F + f);
         } else if(rotation == ROTATION_WEST) {
-            setBlockBounds(1.0F - f * 2.0F, 0.2F, 0.5F - f, 1.0F, 0.8F, 0.5F + f);
+            return AABB.getTemporaryBB(1.0F - f * 2.0F, 0.2F, 0.5F - f, 1.0F, 0.8F, 0.5F + f);
         } else if(rotation == ROTATION_SOUTH) {
-            setBlockBounds(0.5F - f, 0.2F, 0.0F, 0.5F + f, 0.8F, f * 2.0F);
+            return AABB.getTemporaryBB(0.5F - f, 0.2F, 0.0F, 0.5F + f, 0.8F, f * 2.0F);
         } else if(rotation == ROTATION_NORTH) {
-            setBlockBounds(0.5F - f, 0.2F, 1.0F - f * 2.0F, 0.5F + f, 0.8F, 1.0F);
+            return AABB.getTemporaryBB(0.5F - f, 0.2F, 1.0F - f * 2.0F, 0.5F + f, 0.8F, 1.0F);
         } else if (rotation == ROTATION_TOP_NS || rotation == ROTATION_TOP_WE) {
             float f1 = 0.25F;
-            setBlockBounds(0.5F - f1, 0.0F, 0.5F - f1, 0.5F + f1, 0.6F, 0.5F + f1);
+            return AABB.getTemporaryBB(0.5F - f1, 0.0F, 0.5F - f1, 0.5F + f1, 0.6F, 0.5F + f1);
         } else {
             float f1 = 0.25F;
-            setBlockBounds(0.5F - f1, 0.4, 0.5F - f1, 0.5F + f1, 1F, 0.5F + f1);
+            return AABB.getTemporaryBB(0.5F - f1, 0.4, 0.5F - f1, 0.5F + f1, 1F, 0.5F + f1);
         }
     }
 
diff --git a/src/main/java/net/minecraft/core/block/BlockLog.java b/game/core/src/main/java/net/minecraft/core/block/BlockLog.java
similarity index 94%
rename from src/main/java/net/minecraft/core/block/BlockLog.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockLog.java
index 9d81135a2..02df9bd44 100644
--- a/src/main/java/net/minecraft/core/block/BlockLog.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockLog.java
@@ -25,7 +25,7 @@ public class BlockLog extends BlockAxisAligned
                     for(int _z = -r; _z <= r; _z++)
                     {
                         int l1 = world.getBlockId(x + _x, y + _y, z + _z);
-                        if(!(Block.blocksList[l1] instanceof BlockLeavesBase))
+                        if(!(Blocks.blocksList[l1] instanceof BlockLeavesBase))
                         {
                             continue;
                         }
diff --git a/src/main/java/net/minecraft/core/block/BlockMesh.java b/game/core/src/main/java/net/minecraft/core/block/BlockMesh.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockMesh.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockMesh.java
diff --git a/src/main/java/net/minecraft/core/block/BlockMeshGold.java b/game/core/src/main/java/net/minecraft/core/block/BlockMeshGold.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockMeshGold.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockMeshGold.java
diff --git a/src/main/java/net/minecraft/core/block/BlockMobSpawner.java b/game/core/src/main/java/net/minecraft/core/block/BlockMobSpawner.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockMobSpawner.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockMobSpawner.java
diff --git a/src/main/java/net/minecraft/core/block/BlockMobSpawnerDeactivated.java b/game/core/src/main/java/net/minecraft/core/block/BlockMobSpawnerDeactivated.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockMobSpawnerDeactivated.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockMobSpawnerDeactivated.java
diff --git a/src/main/java/net/minecraft/core/block/BlockMoss.java b/game/core/src/main/java/net/minecraft/core/block/BlockMoss.java
similarity index 98%
rename from src/main/java/net/minecraft/core/block/BlockMoss.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockMoss.java
index 0026243d9..86fc4ab67 100644
--- a/src/main/java/net/minecraft/core/block/BlockMoss.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockMoss.java
@@ -76,7 +76,7 @@ public class BlockMoss extends Block implements IBonemealable {
 	public static Block getMossBlock(int blockId) {
 		if (blockId == 0)
 			return null;
-		return getMossBlock(Block.blocksList[blockId]);
+		return getMossBlock(Blocks.blocksList[blockId]);
 	}
 
 	public static Block getMossBlock(Block stoneBlock) {
@@ -86,7 +86,7 @@ public class BlockMoss extends Block implements IBonemealable {
 	public static Block getStoneBlock(int blockId) {
 		if (blockId == 0)
 			return null;
-		return getStoneBlock(Block.blocksList[blockId]);
+		return getStoneBlock(Blocks.blocksList[blockId]);
 	}
 	
 	public static Block getStoneBlock(Block mossBlock) {
diff --git a/src/main/java/net/minecraft/core/block/BlockMotionSensor.java b/game/core/src/main/java/net/minecraft/core/block/BlockMotionSensor.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockMotionSensor.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockMotionSensor.java
diff --git a/src/main/java/net/minecraft/core/block/BlockMud.java b/game/core/src/main/java/net/minecraft/core/block/BlockMud.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockMud.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockMud.java
diff --git a/src/main/java/net/minecraft/core/block/BlockMushroom.java b/game/core/src/main/java/net/minecraft/core/block/BlockMushroom.java
similarity index 97%
rename from src/main/java/net/minecraft/core/block/BlockMushroom.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockMushroom.java
index 9d7383156..4b2bb9d9d 100644
--- a/src/main/java/net/minecraft/core/block/BlockMushroom.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockMushroom.java
@@ -38,7 +38,7 @@ public class BlockMushroom extends BlockFlower
     @Override
 	protected boolean mayPlaceOn(int blockId)
     {
-        return Block.solid[blockId];
+        return Blocks.solid[blockId];
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/BlockNetherrackIgneous.java b/game/core/src/main/java/net/minecraft/core/block/BlockNetherrackIgneous.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockNetherrackIgneous.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockNetherrackIgneous.java
diff --git a/src/main/java/net/minecraft/core/block/BlockNote.java b/game/core/src/main/java/net/minecraft/core/block/BlockNote.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockNote.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockNote.java
diff --git a/src/main/java/net/minecraft/core/block/BlockOreCoal.java b/game/core/src/main/java/net/minecraft/core/block/BlockOreCoal.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockOreCoal.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockOreCoal.java
diff --git a/src/main/java/net/minecraft/core/block/BlockOreDiamond.java b/game/core/src/main/java/net/minecraft/core/block/BlockOreDiamond.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockOreDiamond.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockOreDiamond.java
diff --git a/src/main/java/net/minecraft/core/block/BlockOreGold.java b/game/core/src/main/java/net/minecraft/core/block/BlockOreGold.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockOreGold.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockOreGold.java
diff --git a/src/main/java/net/minecraft/core/block/BlockOreIron.java b/game/core/src/main/java/net/minecraft/core/block/BlockOreIron.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockOreIron.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockOreIron.java
diff --git a/src/main/java/net/minecraft/core/block/BlockOreLapis.java b/game/core/src/main/java/net/minecraft/core/block/BlockOreLapis.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockOreLapis.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockOreLapis.java
diff --git a/src/main/java/net/minecraft/core/block/BlockOreNetherCoal.java b/game/core/src/main/java/net/minecraft/core/block/BlockOreNetherCoal.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockOreNetherCoal.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockOreNetherCoal.java
diff --git a/src/main/java/net/minecraft/core/block/BlockOreRedstone.java b/game/core/src/main/java/net/minecraft/core/block/BlockOreRedstone.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockOreRedstone.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockOreRedstone.java
diff --git a/src/main/java/net/minecraft/core/block/BlockOverlayPebbles.java b/game/core/src/main/java/net/minecraft/core/block/BlockOverlayPebbles.java
similarity index 82%
rename from src/main/java/net/minecraft/core/block/BlockOverlayPebbles.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockOverlayPebbles.java
index 5082e303c..2442aa9e5 100644
--- a/src/main/java/net/minecraft/core/block/BlockOverlayPebbles.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockOverlayPebbles.java
@@ -14,6 +14,7 @@ public class BlockOverlayPebbles extends Block
     public BlockOverlayPebbles(String key, String namespaceId, int id, Material material)
     {
         super(key, namespaceId, id, material);
+        setBlockBounds(0, 0, 0, 1, 0.0625F, 1);
     }
 
     @Override
@@ -41,12 +42,6 @@ public class BlockOverlayPebbles extends Block
         return null;
     }
 
-    @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        return AABB.getTemporaryBB(x, y, z, x + 1, y + 0.0625f, z + 1);
-    }
-
     @Override
     public void onNeighborBlockChange(World world, int x, int y, int z, int blockId)
     {
@@ -57,17 +52,6 @@ public class BlockOverlayPebbles extends Block
         }
     }
 
-    @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
-    {
-        minX = 0;
-        minY = 0;
-        minZ = 0;
-        maxX = 1;
-        maxY = 0.0625f;
-        maxZ = 1;
-    }
-
     @Override
     public boolean isCubeShaped()
     {
diff --git a/src/main/java/net/minecraft/core/block/BlockPathDirt.java b/game/core/src/main/java/net/minecraft/core/block/BlockPathDirt.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockPathDirt.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockPathDirt.java
diff --git a/game/core/src/main/java/net/minecraft/core/block/BlockPiePumpkin.java b/game/core/src/main/java/net/minecraft/core/block/BlockPiePumpkin.java
new file mode 100644
index 000000000..4248f8671
--- /dev/null
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockPiePumpkin.java
@@ -0,0 +1,25 @@
+package net.minecraft.core.block;
+
+import net.minecraft.core.item.Items;
+import net.minecraft.core.util.phys.AABB;
+import net.minecraft.core.world.WorldSource;
+
+public class BlockPiePumpkin extends BlockEdible
+{
+
+    public BlockPiePumpkin(String key, String namespaceId, int id)
+    {
+        super(key, namespaceId, id, 4, 5, () -> Items.FOOD_PUMPKIN_PIE);
+    }
+
+    @Override
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
+    {
+        int l = world.getBlockMetadata(x, y, z);
+        float f = 0.0625F;
+        float xMin = l >= 2 ? 0.5f : f;
+        float zMin = l >= 3 ? 0.5f : f;
+        float f2 = 0.4375F;
+        return AABB.getTemporaryBB(xMin, 0.0F, zMin, 1.0F - f, f2, 1.0F - f);
+    }
+}
diff --git a/src/main/java/net/minecraft/core/block/BlockPlanks.java b/game/core/src/main/java/net/minecraft/core/block/BlockPlanks.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockPlanks.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockPlanks.java
diff --git a/src/main/java/net/minecraft/core/block/BlockPlanksPainted.java b/game/core/src/main/java/net/minecraft/core/block/BlockPlanksPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockPlanksPainted.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockPlanksPainted.java
diff --git a/src/main/java/net/minecraft/core/block/BlockPortal.java b/game/core/src/main/java/net/minecraft/core/block/BlockPortal.java
similarity index 97%
rename from src/main/java/net/minecraft/core/block/BlockPortal.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockPortal.java
index 5b38bb027..1ff1eacf2 100644
--- a/src/main/java/net/minecraft/core/block/BlockPortal.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockPortal.java
@@ -45,19 +45,19 @@ public class BlockPortal extends BlockTransparent implements IPainted
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         int meta = world.getBlockMetadata(x, y, z);
         if((meta & 0x1) > 0)
         {
             float f1 = 0.125F;
             float f3 = 0.5F;
-            setBlockBounds(0.5F - f1, 0.0F, 0.5F - f3, 0.5F + f1, 1.0F, 0.5F + f3);
+            return AABB.getTemporaryBB(0.5F - f1, 0.0F, 0.5F - f3, 0.5F + f1, 1.0F, 0.5F + f3);
         } else
         {
             float f = 0.5F;
             float f2 = 0.125F;
-            setBlockBounds(0.5F - f, 0.0F, 0.5F - f2, 0.5F + f, 1.0F, 0.5F + f2);
+            return AABB.getTemporaryBB(0.5F - f, 0.0F, 0.5F - f2, 0.5F + f, 1.0F, 0.5F + f2);
         }
     }
 
@@ -318,12 +318,6 @@ public class BlockPortal extends BlockTransparent implements IPainted
         return null;
     }
 
-    @Override
-    public int getRenderLayer()
-    {
-        return 1;
-    }
-
     @Override
     public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity)
     {
diff --git a/src/main/java/net/minecraft/core/block/BlockPressurePlate.java b/game/core/src/main/java/net/minecraft/core/block/BlockPressurePlate.java
similarity index 92%
rename from src/main/java/net/minecraft/core/block/BlockPressurePlate.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockPressurePlate.java
index 8f1653361..0ca4062b0 100644
--- a/src/main/java/net/minecraft/core/block/BlockPressurePlate.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockPressurePlate.java
@@ -140,7 +140,7 @@ public class BlockPressurePlate extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         int meta = world.getBlockMetadata(x, y, z);
         boolean isPressed = isPressed(meta);
@@ -149,16 +149,16 @@ public class BlockPressurePlate extends Block
         if(isPressed)
         {
             if (isCeiling){
-                setBlockBounds(pixel, 1f - 0.03125F, pixel, 1.0F - pixel, 1f, 1.0F - pixel);
+                return AABB.getTemporaryBB(pixel, 1f - 0.03125F, pixel, 1.0F - pixel, 1f, 1.0F - pixel);
             } else {
-                setBlockBounds(pixel, 0.0F, pixel, 1.0F - pixel, 0.03125F, 1.0F - pixel);
+                return AABB.getTemporaryBB(pixel, 0.0F, pixel, 1.0F - pixel, 0.03125F, 1.0F - pixel);
             }
         } else
         {
             if (isCeiling){
-                setBlockBounds(pixel, 1f - 0.0625F, pixel, 1.0F - pixel, 1f, 1.0F - pixel);
+                return AABB.getTemporaryBB(pixel, 1f - 0.0625F, pixel, 1.0F - pixel, 1f, 1.0F - pixel);
             } else {
-                setBlockBounds(pixel, 0.0F, pixel, 1.0F - pixel, 0.0625F, 1.0F - pixel);
+                return AABB.getTemporaryBB(pixel, 0.0F, pixel, 1.0F - pixel, 0.0625F, 1.0F - pixel);
             }
         }
     }
diff --git a/src/main/java/net/minecraft/core/block/BlockPumice.java b/game/core/src/main/java/net/minecraft/core/block/BlockPumice.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockPumice.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockPumice.java
diff --git a/src/main/java/net/minecraft/core/block/BlockPumpkin.java b/game/core/src/main/java/net/minecraft/core/block/BlockPumpkin.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockPumpkin.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockPumpkin.java
diff --git a/src/main/java/net/minecraft/core/block/BlockPumpkinRedstone.java b/game/core/src/main/java/net/minecraft/core/block/BlockPumpkinRedstone.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockPumpkinRedstone.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockPumpkinRedstone.java
diff --git a/src/main/java/net/minecraft/core/block/BlockRail.java b/game/core/src/main/java/net/minecraft/core/block/BlockRail.java
similarity index 97%
rename from src/main/java/net/minecraft/core/block/BlockRail.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockRail.java
index 7bf57d2ca..c6b17eb1b 100644
--- a/src/main/java/net/minecraft/core/block/BlockRail.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockRail.java
@@ -5,8 +5,6 @@ import net.minecraft.core.block.material.Material;
 import net.minecraft.core.enums.EnumDropCause;
 import net.minecraft.core.util.helper.Axis;
 import net.minecraft.core.util.phys.AABB;
-import net.minecraft.core.util.phys.HitResult;
-import net.minecraft.core.util.phys.Vec3;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.WorldSource;
 import net.minecraft.core.world.chunk.ChunkPosition;
@@ -53,18 +51,12 @@ public class BlockRail extends Block {
     }
 
     @Override
-    public HitResult collisionRayTrace(World world, int x, int y, int z, Vec3 start, Vec3 end) {
-        setBlockBoundsBasedOnState(world, x, y, z);
-        return super.collisionRayTrace(world, x, y, z, start, end);
-    }
-
-    @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z) {
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z) {
         RailDirection direction = getRailDirection(world, x, y, z);
         if(direction.isSloped()) {
-            setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.725F, 1.0F);
+            return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 0.725F, 1.0F);
         } else {
-            setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F);
+            return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F);
         }
     }
 
@@ -101,7 +93,7 @@ public class BlockRail extends Block {
             return;
         }
 
-        Block block = Block.getBlock(blockId);
+        Block block = Blocks.getBlock(blockId);
 
         if(this == Blocks.RAIL_POWERED) {
             boolean gettingPower =
diff --git a/src/main/java/net/minecraft/core/block/BlockRailDetector.java b/game/core/src/main/java/net/minecraft/core/block/BlockRailDetector.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockRailDetector.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockRailDetector.java
diff --git a/src/main/java/net/minecraft/core/block/BlockRedstone.java b/game/core/src/main/java/net/minecraft/core/block/BlockRedstone.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockRedstone.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockRedstone.java
diff --git a/src/main/java/net/minecraft/core/block/BlockRepeater.java b/game/core/src/main/java/net/minecraft/core/block/BlockRepeater.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockRepeater.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockRepeater.java
diff --git a/src/main/java/net/minecraft/core/block/BlockRope.java b/game/core/src/main/java/net/minecraft/core/block/BlockRope.java
similarity index 96%
rename from src/main/java/net/minecraft/core/block/BlockRope.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockRope.java
index 2eb026d0a..d81c2a43a 100644
--- a/src/main/java/net/minecraft/core/block/BlockRope.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockRope.java
@@ -41,7 +41,7 @@ public class BlockRope
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         boolean hasBlockNegX = world.getBlockId(x - 1, y, z) == this.id;
         boolean hasBlockPosX = world.getBlockId(x + 1, y, z) == this.id;
@@ -64,7 +64,7 @@ public class BlockRope
         if (hasBlockNegZ) minZ = 0;
         if (hasBlockPosZ) maxZ = 1;
 
-        setBlockBounds(minX, minY, minZ, maxX, maxY, maxZ);
+        return AABB.getTemporaryBB(minX, minY, minZ, maxX, maxY, maxZ);
     }
     
     @Override
diff --git a/src/main/java/net/minecraft/core/block/BlockRotatable.java b/game/core/src/main/java/net/minecraft/core/block/BlockRotatable.java
similarity index 91%
rename from src/main/java/net/minecraft/core/block/BlockRotatable.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockRotatable.java
index 1f5400741..b024201b6 100644
--- a/src/main/java/net/minecraft/core/block/BlockRotatable.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockRotatable.java
@@ -44,19 +44,19 @@ public abstract class BlockRotatable extends Block{
         int bW = world.getBlockId(x - 1, y, z);
         int bE = world.getBlockId(x + 1, y, z);
         Direction direction = Direction.NORTH;
-        if(Block.solid[bN] && !Block.solid[bS])
+        if(Blocks.solid[bN] && !Blocks.solid[bS])
         {
             direction = Direction.SOUTH;
         }
-        if(Block.solid[bS] && !Block.solid[bN])
+        if(Blocks.solid[bS] && !Blocks.solid[bN])
         {
             direction = Direction.NORTH;
         }
-        if(Block.solid[bW] && !Block.solid[bE])
+        if(Blocks.solid[bW] && !Blocks.solid[bE])
         {
             direction = Direction.EAST;
         }
-        if(Block.solid[bE] && !Block.solid[bW])
+        if(Blocks.solid[bE] && !Blocks.solid[bW])
         {
             direction = Direction.WEST;
         }
diff --git a/src/main/java/net/minecraft/core/block/BlockSand.java b/game/core/src/main/java/net/minecraft/core/block/BlockSand.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSand.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSand.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingBase.java b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingBase.java
similarity index 95%
rename from src/main/java/net/minecraft/core/block/BlockSaplingBase.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSaplingBase.java
index 37e9ef662..0b0652607 100644
--- a/src/main/java/net/minecraft/core/block/BlockSaplingBase.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingBase.java
@@ -63,7 +63,7 @@ public abstract class BlockSaplingBase extends BlockFlower implements IBonemeala
     public boolean onBonemealUsed(ItemStack itemstack, @Nullable Player player, World world, int blockX, int blockY, int blockZ, Side side, double xPlaced, double yPlaced){
         if(!world.isClientSide)
         {
-            ((BlockSaplingBase)Block.blocksList[id]).growTree(world, blockX, blockY, blockZ, world.rand);
+            ((BlockSaplingBase)Blocks.blocksList[id]).growTree(world, blockX, blockY, blockZ, world.rand);
             if (player == null || player.getGamemode().consumeBlocks())
             {
                 itemstack.stackSize--;
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingBirch.java b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingBirch.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSaplingBirch.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSaplingBirch.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingCacao.java b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingCacao.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSaplingCacao.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSaplingCacao.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingCherry.java b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingCherry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSaplingCherry.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSaplingCherry.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingEucalyptus.java b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingEucalyptus.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSaplingEucalyptus.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSaplingEucalyptus.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingOak.java b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingOak.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSaplingOak.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSaplingOak.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingPalm.java b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingPalm.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSaplingPalm.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSaplingPalm.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingPine.java b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingPine.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSaplingPine.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSaplingPine.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingRetro.java b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingRetro.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSaplingRetro.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSaplingRetro.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingShrub.java b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingShrub.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSaplingShrub.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSaplingShrub.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSaplingThorn.java b/game/core/src/main/java/net/minecraft/core/block/BlockSaplingThorn.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSaplingThorn.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSaplingThorn.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSeat.java b/game/core/src/main/java/net/minecraft/core/block/BlockSeat.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSeat.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSeat.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSign.java b/game/core/src/main/java/net/minecraft/core/block/BlockSign.java
similarity index 85%
rename from src/main/java/net/minecraft/core/block/BlockSign.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSign.java
index e703f2a4c..02db3af0a 100644
--- a/src/main/java/net/minecraft/core/block/BlockSign.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockSign.java
@@ -33,18 +33,11 @@ public class BlockSign extends BlockTileEntity
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        setBlockBoundsBasedOnState(world, x, y, z);
-        return super.getSelectedBoundingBoxFromPool(world, x, y, z);
-    }
-
-    @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         if(isFreeStanding)
         {
-            return;
+            return getBounds();
         }
         int l = world.getBlockMetadata(x, y, z);
         float f = 0.28125F;
@@ -75,22 +68,17 @@ public class BlockSign extends BlockTileEntity
         {
             setBlockBounds(-0.375F, f, f2, f4, f1, f3);
         }*/
-        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-        if(l == 2)
-        {
-            setBlockBounds(f2, f, 1.0F - f4, f3, f1, 1.0F);
-        }
-        if(l == 3)
-        {
-            setBlockBounds(f2, f, 0.0F, f3, f1, f4);
-        }
-        if(l == 4)
-        {
-            setBlockBounds(1.0F - f4, f, f2, 1.0F, f1, f3);
-        }
-        if(l == 5)
-        {
-            setBlockBounds(0.0F, f, f2, f4, f1, f3);
+        switch (l) {
+            case 2:
+                return AABB.getTemporaryBB(f2, f, 1.0F - f4, f3, f1, 1.0F);
+            case 3:
+                return AABB.getTemporaryBB(f2, f, 0.0F, f3, f1, f4);
+            case 4:
+                return AABB.getTemporaryBB(1.0F - f4, f, f2, 1.0F, f1, f3);
+            case 5:
+                return AABB.getTemporaryBB(0.0F, f, f2, f4, f1, f3);
+            default:
+                return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
         }
     }
 
diff --git a/src/main/java/net/minecraft/core/block/BlockSlab.java b/game/core/src/main/java/net/minecraft/core/block/BlockSlab.java
similarity index 86%
rename from src/main/java/net/minecraft/core/block/BlockSlab.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSlab.java
index 9bce7fba7..84bfed3e5 100644
--- a/src/main/java/net/minecraft/core/block/BlockSlab.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockSlab.java
@@ -34,32 +34,25 @@ public class BlockSlab extends Block
         this.modelBlockMetadata = modelBlockMetadata;
         withHardness(modelBlock.blockHardness);
         withBlastResistance(modelBlock.blastResistance / 3F);
-        withLightEmission(lightEmission[modelBlock.id]);
+        withLightEmission(Blocks.lightEmission[modelBlock.id]);
         withLightBlock(1);
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z) & 0x3;
-        if(l == 0)
-            setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
-        else if(l==1)
-            setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-        else if(l==2)
-            setBlockBounds(0.0F, 0.5F, 0.0F, 1.0F, 1.0F, 1.0F);
+        switch (l) {
+            case 0:
+                return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F);
+            case 1:
+                return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+            case 2:
+            default:
+                return AABB.getTemporaryBB(0.0F, 0.5F, 0.0F, 1.0F, 1.0F, 1.0F);
+        }
     }
 
-    @Override
-	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        int l = world.getBlockMetadata(x, y, z) & 0x3;
-        if(l == 0)
-            return AABB.getTemporaryBB(x, y, z, x +1f, y +0.5f, z +1f);
-        if(l == 1)
-            return AABB.getTemporaryBB(x, y, z, x +1, y +1f, z +1f);
-        return AABB.getTemporaryBB(x, y +0.5f, z, x +1f, y +1f, z +1f);
-    }
 
     @Override
 	public boolean isSolidRender()
@@ -131,13 +124,6 @@ public class BlockSlab extends Block
         return modelBlock.tickDelay();
     }
 
-    @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        return getCollisionBoundingBoxFromPool(world, x, y, z);
-    }
-
-
     @Override
     public void handleEntityInside(World world, int x, int y, int z, Entity entity, Vec3 entityVelocity)
     {
@@ -211,12 +197,6 @@ public class BlockSlab extends Block
         modelBlock.onBlockPlacedByWorld(world, x, y, z);
     }
 
-    @Override
-    public int getRenderLayer()
-    {
-        return modelBlock.getRenderLayer();
-    }
-
     @Override
     public float getBlastResistance(Entity entity)
     {
diff --git a/src/main/java/net/minecraft/core/block/BlockSlabPaintable.java b/game/core/src/main/java/net/minecraft/core/block/BlockSlabPaintable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSlabPaintable.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSlabPaintable.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSlabPainted.java b/game/core/src/main/java/net/minecraft/core/block/BlockSlabPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSlabPainted.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSlabPainted.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSlippery.java b/game/core/src/main/java/net/minecraft/core/block/BlockSlippery.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSlippery.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSlippery.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSnow.java b/game/core/src/main/java/net/minecraft/core/block/BlockSnow.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSnow.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSnow.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSoulSand.java b/game/core/src/main/java/net/minecraft/core/block/BlockSoulSand.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSoulSand.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSoulSand.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSpikes.java b/game/core/src/main/java/net/minecraft/core/block/BlockSpikes.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSpikes.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSpikes.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSpinifex.java b/game/core/src/main/java/net/minecraft/core/block/BlockSpinifex.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSpinifex.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSpinifex.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSponge.java b/game/core/src/main/java/net/minecraft/core/block/BlockSponge.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockSponge.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSponge.java
diff --git a/src/main/java/net/minecraft/core/block/BlockStairs.java b/game/core/src/main/java/net/minecraft/core/block/BlockStairs.java
similarity index 81%
rename from src/main/java/net/minecraft/core/block/BlockStairs.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockStairs.java
index f132a8296..d2c46316f 100644
--- a/src/main/java/net/minecraft/core/block/BlockStairs.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockStairs.java
@@ -90,18 +90,6 @@ public class BlockStairs extends Block
         withLightBlock(255);
     }
 
-    @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
-    {
-        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-    }
-
-    @Override
-	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        return super.getCollisionBoundingBoxFromPool(world, x, y, z);
-    }
-
     @Override
 	public boolean isSolidRender()
     {
@@ -120,7 +108,7 @@ public class BlockStairs extends Block
     }
 
     @Override
-    public void getCollidingBoundingBoxes(World world, int x, int y, int z, AABB aabb, ArrayList aabbList)
+    public void getCollidingBoundingBoxes(World world, int x, int y, int z, AABB aabb, ArrayList<AABB> aabbList)
     {
         int meta = world.getBlockMetadata(x, y, z);
         int hRotation = meta & 0b0011;
@@ -128,33 +116,24 @@ public class BlockStairs extends Block
 
         float stepYOffset = vRotation > 0 ? 0.5f : 0.0f;
 
-        if(hRotation == 0)
-        {
-            setBlockBounds(0.0F, 0.0F + stepYOffset, 0.0F, 0.5F, 0.5F + stepYOffset, 1.0F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-        } else
-        if(hRotation == 1)
-        {
-            setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 1.0F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            setBlockBounds(0.5F, 0.0F + stepYOffset, 0.0F, 1.0F, 0.5F + stepYOffset, 1.0F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-        } else
-        if(hRotation == 2)
-        {
-            setBlockBounds(0.0F, 0.0F + stepYOffset, 0.0F, 1.0F, 0.5F + stepYOffset, 0.5F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 1.0F, 1.0F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-        } else {
-            setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            setBlockBounds(0.0F, 0.0F + stepYOffset, 0.5F, 1.0F, 0.5F + stepYOffset, 1.0F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
+        switch (hRotation) {
+            case 0:
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.0F, 0.0F + stepYOffset, 0.0F, 0.5F, 0.5F + stepYOffset, 1.0F).move(x, y, z), aabbList);
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.5F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F).move(x, y, z), aabbList);
+                break;
+            case 1:
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 1.0F).move(x, y, z), aabbList);
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.5F, 0.0F + stepYOffset, 0.0F, 1.0F, 0.5F + stepYOffset, 1.0F).move(x, y, z), aabbList);
+                break;
+            case 2:
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.0F, 0.0F + stepYOffset, 0.0F, 1.0F, 0.5F + stepYOffset, 0.5F).move(x, y, z), aabbList);
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.0F, 0.0F, 0.5F, 1.0F, 1.0F, 1.0F).move(x, y, z), aabbList);
+                break;
+            default:
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F).move(x, y, z), aabbList);
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.0F, 0.0F + stepYOffset, 0.5F, 1.0F, 0.5F + stepYOffset, 1.0F).move(x, y, z), aabbList);
+                break;
         }
-        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
     }
 
     @Override
@@ -221,24 +200,12 @@ public class BlockStairs extends Block
         return modelBlock.getBlastResistance(entity);
     }
 
-    @Override
-    public int getRenderLayer()
-    {
-        return modelBlock.getRenderLayer();
-    }
-
     @Override
     public int tickDelay()
     {
         return modelBlock.tickDelay();
     }
 
-    @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        return modelBlock.getSelectedBoundingBoxFromPool(world, x, y, z);
-    }
-
 //    @Override
 //    public BoundingVolume getBoundingVolume(World world, int x, int y, int z)
 //    {
diff --git a/src/main/java/net/minecraft/core/block/BlockStairsPaintable.java b/game/core/src/main/java/net/minecraft/core/block/BlockStairsPaintable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockStairsPaintable.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockStairsPaintable.java
diff --git a/src/main/java/net/minecraft/core/block/BlockStairsPainted.java b/game/core/src/main/java/net/minecraft/core/block/BlockStairsPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockStairsPainted.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockStairsPainted.java
diff --git a/src/main/java/net/minecraft/core/block/BlockStone.java b/game/core/src/main/java/net/minecraft/core/block/BlockStone.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockStone.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockStone.java
diff --git a/src/main/java/net/minecraft/core/block/BlockSugarcane.java b/game/core/src/main/java/net/minecraft/core/block/BlockSugarcane.java
similarity index 95%
rename from src/main/java/net/minecraft/core/block/BlockSugarcane.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockSugarcane.java
index 29df647a7..55af54518 100644
--- a/src/main/java/net/minecraft/core/block/BlockSugarcane.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockSugarcane.java
@@ -65,11 +65,11 @@ public class BlockSugarcane extends Block implements IBonemealable
         {
             return true;
         }
-        if(Block.blocksList[l] == null)
+        if(Blocks.blocksList[l] == null)
         {
             return false;
         }
-        if (!Block.blocksList[l].hasTag(BlockTags.GROWS_SUGAR_CANE))
+        if (!Blocks.blocksList[l].hasTag(BlockTags.GROWS_SUGAR_CANE))
         {
             return false;
         }
@@ -137,7 +137,7 @@ public class BlockSugarcane extends Block implements IBonemealable
     public boolean onBonemealUsed(ItemStack itemstack, @Nullable Player player, World world, int blockX, int blockY, int blockZ, Side side, double xPlaced, double yPlaced) {
         if(!world.isClientSide)
         {
-            ((BlockSugarcane)Block.blocksList[id]).growReedOnTop(world, blockX, blockY, blockZ);
+            ((BlockSugarcane)Blocks.blocksList[id]).growReedOnTop(world, blockX, blockY, blockZ);
             if (player == null || player.getGamemode().consumeBlocks())
             {
                 itemstack.stackSize--;
diff --git a/src/main/java/net/minecraft/core/block/BlockTNT.java b/game/core/src/main/java/net/minecraft/core/block/BlockTNT.java
similarity index 96%
rename from src/main/java/net/minecraft/core/block/BlockTNT.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockTNT.java
index b06e9a886..9b5d0b718 100644
--- a/src/main/java/net/minecraft/core/block/BlockTNT.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockTNT.java
@@ -26,7 +26,7 @@ public class BlockTNT extends Block {
 
 	@Override
 	public void onNeighborBlockChange(World world, int x, int y, int z, int blockId) {
-		if (blockId > 0 && Block.blocksList[blockId].isSignalSource() && world.hasNeighborSignal(x, y, z)) {
+		if (blockId > 0 && Blocks.blocksList[blockId].isSignalSource() && world.hasNeighborSignal(x, y, z)) {
 			ignite(world, x, y, z, true);
 		}
 	}
diff --git a/src/main/java/net/minecraft/core/block/BlockTallGrass.java b/game/core/src/main/java/net/minecraft/core/block/BlockTallGrass.java
similarity index 96%
rename from src/main/java/net/minecraft/core/block/BlockTallGrass.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockTallGrass.java
index 8ea97d60a..4b74de667 100644
--- a/src/main/java/net/minecraft/core/block/BlockTallGrass.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockTallGrass.java
@@ -18,7 +18,7 @@ public class BlockTallGrass extends BlockFlower
 
     @Override
     protected boolean mayPlaceOn(int blockId) {
-    	Block block = Block.getBlock(blockId);
+    	Block block = Blocks.getBlock(blockId);
     	if(block instanceof BlockMoss) {
     		return true;
     	}
diff --git a/src/main/java/net/minecraft/core/block/BlockTileEntity.java b/game/core/src/main/java/net/minecraft/core/block/BlockTileEntity.java
similarity index 96%
rename from src/main/java/net/minecraft/core/block/BlockTileEntity.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockTileEntity.java
index 2ef0bc440..ac2396e27 100644
--- a/src/main/java/net/minecraft/core/block/BlockTileEntity.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockTileEntity.java
@@ -11,7 +11,7 @@ public abstract class BlockTileEntity extends Block
 	public BlockTileEntity(String key, String namespaceId, int id, Material material)
     {
         super(key, namespaceId, id, material);
-        isEntityTile[id] = true;
+        Blocks.isEntityTile[id] = true;
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/BlockTileEntityRotatable.java b/game/core/src/main/java/net/minecraft/core/block/BlockTileEntityRotatable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockTileEntityRotatable.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockTileEntityRotatable.java
diff --git a/src/main/java/net/minecraft/core/block/BlockTileEntityVeryRotatable.java b/game/core/src/main/java/net/minecraft/core/block/BlockTileEntityVeryRotatable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockTileEntityVeryRotatable.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockTileEntityVeryRotatable.java
diff --git a/src/main/java/net/minecraft/core/block/BlockTorch.java b/game/core/src/main/java/net/minecraft/core/block/BlockTorch.java
similarity index 93%
rename from src/main/java/net/minecraft/core/block/BlockTorch.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockTorch.java
index b099736fc..35f06cfcf 100644
--- a/src/main/java/net/minecraft/core/block/BlockTorch.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockTorch.java
@@ -36,6 +36,26 @@ public class BlockTorch extends Block
         return null;
     }
 
+    @Override
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z) {
+        float f = 0.15F;
+        int side = world.getBlockMetadata(x, y, z) & MASK_DIRECTION;
+        switch (side) {
+            case SIDE_WEST:
+                return AABB.getTemporaryBB(0.0F, 0.2F, 0.5F - f, f * 2.0F, 0.8F, 0.5F + f);
+            case SIDE_EAST:
+                return AABB.getTemporaryBB(1.0F - f * 2.0F, 0.2F, 0.5F - f, 1.0F, 0.8F, 0.5F + f);
+            case SIDE_NORTH:
+                return AABB.getTemporaryBB(0.5F - f, 0.2F, 0.0F, 0.5F + f, 0.8F, f * 2.0F);
+            case SIDE_SOUTH:
+                return AABB.getTemporaryBB(0.5F - f, 0.2F, 1.0F - f * 2.0F, 0.5F + f, 0.8F, 1.0F);
+            case SIDE_BOTTOM:
+            default:
+                final float f1 = 0.1F;
+                return AABB.getTemporaryBB(0.5F - f1, 0.0F, 0.5F - f1, 0.5F + f1, 0.6F, 0.5F + f1);
+        }
+    }
+
     @Override
 	public boolean isSolidRender()
     {
@@ -275,32 +295,6 @@ public class BlockTorch extends Block
         }
     }
 
-    @Override
-    public HitResult collisionRayTrace(World world, int x, int y, int z, Vec3 start, Vec3 end)
-    {
-        float f = 0.15F;
-        int side = world.getBlockMetadata(x, y, z) & MASK_DIRECTION;
-        switch (side) {
-            case SIDE_WEST:
-                setBlockBounds(0.0F, 0.2F, 0.5F - f, f * 2.0F, 0.8F, 0.5F + f);
-                break;
-            case SIDE_EAST:
-                setBlockBounds(1.0F - f * 2.0F, 0.2F, 0.5F - f, 1.0F, 0.8F, 0.5F + f);
-                break;
-            case SIDE_NORTH:
-                setBlockBounds(0.5F - f, 0.2F, 0.0F, 0.5F + f, 0.8F, f * 2.0F);
-                break;
-            case SIDE_SOUTH:
-                setBlockBounds(0.5F - f, 0.2F, 1.0F - f * 2.0F, 0.5F + f, 0.8F, 1.0F);
-                break;
-            case SIDE_BOTTOM:
-                final float f1 = 0.1F;
-                setBlockBounds(0.5F - f1, 0.0F, 0.5F - f1, 0.5F + f1, 0.6F, 0.5F + f1);
-                break;
-        }
-        return super.collisionRayTrace(world, x, y, z, start, end);
-    }
-
     @Override
 	public void animationTick(World world, int x, int y, int z, Random rand)
     {
@@ -336,6 +330,6 @@ public class BlockTorch extends Block
     
     @Override
     public int getLightmapCoord(WorldSource blockAccess, int x, int y, int z) {
-		return blockAccess.getLightmapCoord(x, y, z, lightEmission[id] > 0 ? 15 : 0);
+		return blockAccess.getLightmapCoord(x, y, z, Blocks.lightEmission[id] > 0 ? 15 : 0);
     }
 }
diff --git a/src/main/java/net/minecraft/core/block/BlockTorchRedstone.java b/game/core/src/main/java/net/minecraft/core/block/BlockTorchRedstone.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockTorchRedstone.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockTorchRedstone.java
diff --git a/src/main/java/net/minecraft/core/block/BlockTransparent.java b/game/core/src/main/java/net/minecraft/core/block/BlockTransparent.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockTransparent.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockTransparent.java
diff --git a/src/main/java/net/minecraft/core/block/BlockTrapDoor.java b/game/core/src/main/java/net/minecraft/core/block/BlockTrapDoor.java
similarity index 81%
rename from src/main/java/net/minecraft/core/block/BlockTrapDoor.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockTrapDoor.java
index 95fdf7cff..ad1a1e9f0 100644
--- a/src/main/java/net/minecraft/core/block/BlockTrapDoor.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockTrapDoor.java
@@ -58,40 +58,27 @@ public class BlockTrapDoor extends Block implements IPaintable {
     }
 
     @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z) {
-        setBlockBoundsBasedOnState(world, x, y, z);
-        return super.getSelectedBoundingBoxFromPool(world, x, y, z);
-    }
-
-    @Override
-    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z) {
-        setBlockBoundsBasedOnState(world, x, y, z);
-        return super.getCollisionBoundingBoxFromPool(world, x, y, z);
-    }
-
-    @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z) {
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z) {
         int meta = world.getBlockMetadata(x, y, z);
         float thickness = 3/16f;
 
         if (isTrapdoorOpen(meta)) {
-            if ((meta & MASK_DIRECTION) == DIRECTION_SOUTH) { // South
-                setBlockBounds(0.0F, 0.0F, 1.0F - thickness, 1.0F, 1.0F, 1.0F);
-            }
-            if ((meta & MASK_DIRECTION) == DIRECTION_NORTH) { // North
-                setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, thickness);
-            }
-            if ((meta & MASK_DIRECTION) == DIRECTION_EAST) { // East
-                setBlockBounds(1.0F - thickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-            }
-            if ((meta & MASK_DIRECTION) == DIRECTION_WEST) { // West
-                setBlockBounds(0.0F, 0.0F, 0.0F, thickness, 1.0F, 1.0F);
+            switch (meta & MASK_DIRECTION) {
+                case DIRECTION_SOUTH:  // South
+                    return AABB.getTemporaryBB(0.0F, 0.0F, 1.0F - thickness, 1.0F, 1.0F, 1.0F);
+                case DIRECTION_NORTH:  // North
+                    return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, thickness);
+                case DIRECTION_EAST:  // East
+                    return AABB.getTemporaryBB(1.0F - thickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+                case DIRECTION_WEST:  // West
+                default:
+                    return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, thickness, 1.0F, 1.0F);
             }
         } else {
             if (isUpperHalf(meta)) {
-                setBlockBounds(0.0F, 1.0f - thickness, 0.0F, 1.0F, 1.0f, 1.0F);
+                return AABB.getTemporaryBB(0.0F, 1.0f - thickness, 0.0F, 1.0F, 1.0f, 1.0F);
             } else {
-                setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, thickness, 1.0F);
+                return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, thickness, 1.0F);
             }
         }
     }
@@ -129,7 +116,7 @@ public class BlockTrapDoor extends Block implements IPaintable {
             return;
         }
 
-        Block block = Block.getBlock(blockId);
+        Block block = Blocks.getBlock(blockId);
         if (block == null || block.isSignalSource()) {
             int meta = world.getBlockMetadata(x, y, z);
             boolean isOpened = isTrapdoorOpen(meta);
@@ -142,12 +129,6 @@ public class BlockTrapDoor extends Block implements IPaintable {
         }
     }
 
-    @Override
-    public HitResult collisionRayTrace(World world, int x, int y, int z, Vec3 start, Vec3 end) {
-        setBlockBoundsBasedOnState(world, x, y, z);
-        return super.collisionRayTrace(world, x, y, z, start, end);
-    }
-
     @Override
     public int getPlacedBlockMetadata(@Nullable Player player, ItemStack stack, World world, int x, int y, int z, Side side, double xPlaced, double yPlaced) {
         int meta = getMetaForDirection(player == null ? side.getDirection().getOpposite() : player.getHorizontalPlacementDirection(side, PlacementMode.SIDE));
diff --git a/src/main/java/net/minecraft/core/block/BlockTrapDoorPainted.java b/game/core/src/main/java/net/minecraft/core/block/BlockTrapDoorPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockTrapDoorPainted.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockTrapDoorPainted.java
diff --git a/src/main/java/net/minecraft/core/block/BlockTrommel.java b/game/core/src/main/java/net/minecraft/core/block/BlockTrommel.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockTrommel.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockTrommel.java
diff --git a/src/main/java/net/minecraft/core/block/BlockWireRedstone.java b/game/core/src/main/java/net/minecraft/core/block/BlockWireRedstone.java
similarity index 99%
rename from src/main/java/net/minecraft/core/block/BlockWireRedstone.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockWireRedstone.java
index d67503682..f53ec0923 100644
--- a/src/main/java/net/minecraft/core/block/BlockWireRedstone.java
+++ b/game/core/src/main/java/net/minecraft/core/block/BlockWireRedstone.java
@@ -350,7 +350,7 @@ public class BlockWireRedstone extends Block {
         if (blockId <= 0) {
             return false;
         }
-        if (Block.blocksList[blockId].isSignalSource()) {
+        if (Blocks.blocksList[blockId].isSignalSource()) {
             return true;
         }
         if (blockId == Blocks.PUMPKIN_REDSTONE.id) {
diff --git a/src/main/java/net/minecraft/core/block/BlockWool.java b/game/core/src/main/java/net/minecraft/core/block/BlockWool.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockWool.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockWool.java
diff --git a/src/main/java/net/minecraft/core/block/BlockWorkbench.java b/game/core/src/main/java/net/minecraft/core/block/BlockWorkbench.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/BlockWorkbench.java
rename to game/core/src/main/java/net/minecraft/core/block/BlockWorkbench.java
diff --git a/src/main/java/net/minecraft/core/block/Blocks.java b/game/core/src/main/java/net/minecraft/core/block/Blocks.java
similarity index 98%
rename from src/main/java/net/minecraft/core/block/Blocks.java
rename to game/core/src/main/java/net/minecraft/core/block/Blocks.java
index bcefa2819..961b5ae59 100644
--- a/src/main/java/net/minecraft/core/block/Blocks.java
+++ b/game/core/src/main/java/net/minecraft/core/block/Blocks.java
@@ -22,8 +22,27 @@ import net.minecraft.core.item.block.ItemBlockStairsPainted;
 import net.minecraft.core.item.block.ItemBlockLamp;
 import net.minecraft.core.item.block.ItemBlockSlabPainted;
 import net.minecraft.core.sound.BlockSounds;
+import net.minecraft.core.util.collection.NamespaceID;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
 public final class Blocks {
+    public static final @Nullable Block @NotNull [] blocksList = new Block[16384];
+    public static final Map<NamespaceID, Block> blockMap = new LinkedHashMap<>();
+    @Deprecated public static final Map<String, Integer> keyToIdMap = new HashMap<>();
+    public static final boolean[] shouldTick = new boolean[blocksList.length];
+    public static final boolean[] solid = new boolean[blocksList.length];
+    public static final boolean[] isEntityTile = new boolean[blocksList.length];
+    public static final int[] lightBlock = new int[blocksList.length];
+    public static final boolean[] translucent = new boolean[blocksList.length];
+    public static final int[] lightEmission = new int[blocksList.length];
+    public static final boolean[] neighborNotifyOnMetadataChangeDisabled = new boolean[blocksList.length];
+    public static int highestBlockId = 0;
+
     public static Block STONE;
     public static Block BASALT;
     public static Block LIMESTONE;
@@ -449,11 +468,11 @@ public final class Blocks {
         setupBlocks();
         BlockMoss.initMossMap();
 
-        for(int i = 0; i < Block.blocksList.length; i++)
+        for(int i = 0; i < blocksList.length; i++)
         {
-            if(Block.blocksList[i] != null)
+            Block block;
+            if((block = blocksList[i]) != null)
             {
-                Block block = Block.blocksList[i];
                 if (Item.itemsList[i] == null){
                     Item item = block.blockItemSupplier.get();
                     if (block.statParent != null){
@@ -465,11 +484,17 @@ public final class Blocks {
             }
         }
 
-        Block.translucent[0] = true;
+        translucent[0] = true;
 
         MaterialColor.assignManualEntries();
     }
 
+    @Nullable
+    public static Block getBlock(int id)
+    {
+        return Blocks.blocksList[Math.max(id, 0)];
+    }
+
     public static void setupBlocks(){
         STONE = new BlockStone("stone", "minecraft:block/stone", 1, () -> Blocks.COBBLE_STONE, Material.stone).withSound(BlockSounds.STONE).withHardness(1.5F).withBlastResistance(10F)
             .withTags(BlockTags.CAVES_CUT_THROUGH, BlockTags.MINEABLE_BY_PICKAXE);
diff --git a/src/main/java/net/minecraft/core/block/IPaintable.java b/game/core/src/main/java/net/minecraft/core/block/IPaintable.java
similarity index 96%
rename from src/main/java/net/minecraft/core/block/IPaintable.java
rename to game/core/src/main/java/net/minecraft/core/block/IPaintable.java
index f1a4dba35..6bf6ee4b4 100644
--- a/src/main/java/net/minecraft/core/block/IPaintable.java
+++ b/game/core/src/main/java/net/minecraft/core/block/IPaintable.java
@@ -1,9 +1,9 @@
-package net.minecraft.core.block;
-
-import net.minecraft.core.util.helper.DyeColor;
-import net.minecraft.core.world.World;
-
-public interface IPaintable {
-    default boolean canBePainted() { return true; }
-    void setColor(World world, int x, int y, int z, DyeColor color);
-}
+package net.minecraft.core.block;
+
+import net.minecraft.core.util.helper.DyeColor;
+import net.minecraft.core.world.World;
+
+public interface IPaintable {
+    default boolean canBePainted() { return true; }
+    void setColor(World world, int x, int y, int z, DyeColor color);
+}
diff --git a/src/main/java/net/minecraft/core/block/IPainted.java b/game/core/src/main/java/net/minecraft/core/block/IPainted.java
similarity index 97%
rename from src/main/java/net/minecraft/core/block/IPainted.java
rename to game/core/src/main/java/net/minecraft/core/block/IPainted.java
index a8a022920..2b0909446 100644
--- a/src/main/java/net/minecraft/core/block/IPainted.java
+++ b/game/core/src/main/java/net/minecraft/core/block/IPainted.java
@@ -1,21 +1,21 @@
-package net.minecraft.core.block;
-
-import net.minecraft.core.util.helper.DyeColor;
-import net.minecraft.core.world.World;
-
-public interface IPainted extends IPaintable {
-    DyeColor fromMetadata(int meta);
-    int toMetadata(DyeColor color);
-    int stripColorFromMetadata(int meta);
-
-    void removeDye(World world, int x, int y, int z);
-
-    default DyeColor getColor(World world, int x, int y, int z) {
-        return fromMetadata(world.getBlockMetadata(x, y, z));
-    }
-
-    default void setColor(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));
-    }
-}
+package net.minecraft.core.block;
+
+import net.minecraft.core.util.helper.DyeColor;
+import net.minecraft.core.world.World;
+
+public interface IPainted extends IPaintable {
+    DyeColor fromMetadata(int meta);
+    int toMetadata(DyeColor color);
+    int stripColorFromMetadata(int meta);
+
+    void removeDye(World world, int x, int y, int z);
+
+    default DyeColor getColor(World world, int x, int y, int z) {
+        return fromMetadata(world.getBlockMetadata(x, y, z));
+    }
+
+    default void setColor(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));
+    }
+}
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntity.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntity.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/entity/TileEntity.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntity.java
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityActivator.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityActivator.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityActivator.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityActivator.java
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityBasket.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityBasket.java
similarity index 98%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityBasket.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityBasket.java
index 46d19805d..7c317a9d4 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntityBasket.java
+++ b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityBasket.java
@@ -11,7 +11,7 @@ import net.minecraft.core.item.ItemStack;
 import com.mojang.nbt.CompoundTag;
 import com.mojang.nbt.ListTag;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.BlockEntityDataPacket;
+import net.minecraft.core.net.packet.PacketBlockEntityData;
 import net.minecraft.core.util.phys.AABB;
 import net.minecraft.core.world.World;
 
@@ -204,7 +204,7 @@ public class TileEntityBasket extends TileEntity
 
     @Override
     public Packet getDescriptionPacket() {
-        return new BlockEntityDataPacket(this);
+        return new PacketBlockEntityData(this);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityChest.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityChest.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityChest.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityChest.java
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityDispatcher.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityDispatcher.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityDispatcher.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityDispatcher.java
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityDispenser.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityDispenser.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityDispenser.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityDispenser.java
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityFlag.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityFlag.java
similarity index 98%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityFlag.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityFlag.java
index c5171fa06..74407bb7f 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntityFlag.java
+++ b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityFlag.java
@@ -10,7 +10,7 @@ import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.item.Items;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.BlockEntityDataPacket;
+import net.minecraft.core.net.packet.PacketBlockEntityData;
 import net.minecraft.core.player.inventory.container.Container;
 import net.minecraft.core.util.helper.UUIDHelper;
 import org.jetbrains.annotations.Nullable;
@@ -237,7 +237,7 @@ public class TileEntityFlag extends TileEntity
 
     @Override
     public Packet getDescriptionPacket() {
-        return new BlockEntityDataPacket(this);
+        return new PacketBlockEntityData(this);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityFlowerJar.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityFlowerJar.java
similarity index 87%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityFlowerJar.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityFlowerJar.java
index d5064de3d..cfc9e0f57 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntityFlowerJar.java
+++ b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityFlowerJar.java
@@ -3,10 +3,11 @@ package net.minecraft.core.block.entity;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockFlowerStackable;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.BlockEntityDataPacket;
+import net.minecraft.core.net.packet.PacketBlockEntityData;
 import net.minecraft.core.world.World;
 
 public class TileEntityFlowerJar extends TileEntity {
@@ -35,7 +36,7 @@ public class TileEntityFlowerJar extends TileEntity {
         super.dropContents(world, x, y, z);
         if (flowerInPot > 0 && Block.hasTag(flowerInPot, BlockTags.PLANTABLE_IN_JAR)) {
             if (!world.isClientSide) {
-                if (Block.getBlock(flowerInPot) instanceof BlockFlowerStackable) {
+                if (Blocks.getBlock(flowerInPot) instanceof BlockFlowerStackable) {
                     world.dropItem(x, y, z, new ItemStack(flowerInPot, BlockFlowerStackable.getStackCount(flowerData) + 1, 0));
                 } else {
                     world.dropItem(x, y, z, new ItemStack(flowerInPot, 1, flowerData));
@@ -47,7 +48,7 @@ public class TileEntityFlowerJar extends TileEntity {
 
     @Override
     public Packet getDescriptionPacket() {
-        return new BlockEntityDataPacket(this);
+        return new PacketBlockEntityData(this);
     }
 
 }
\ No newline at end of file
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityFurnace.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityFurnace.java
similarity index 99%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityFurnace.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityFurnace.java
index f0bed94c0..fbb60f1e0 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntityFurnace.java
+++ b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityFurnace.java
@@ -14,7 +14,7 @@ import net.minecraft.core.entity.EntityItem;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.item.Items;
 import net.minecraft.core.item.ItemStack;
-import net.minecraft.core.net.packet.BlockEntityDataPacket;
+import net.minecraft.core.net.packet.PacketBlockEntityData;
 import net.minecraft.core.net.packet.Packet;
 import net.minecraft.core.player.inventory.container.Container;
 import net.minecraft.core.util.helper.Side;
@@ -371,7 +371,7 @@ public class TileEntityFurnace extends TileEntity
 
     @Override
     public Packet getDescriptionPacket() {
-        return new BlockEntityDataPacket(this);
+        return new PacketBlockEntityData(this);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityFurnaceBlastFurnace.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityFurnaceBlastFurnace.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityFurnaceBlastFurnace.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityFurnaceBlastFurnace.java
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityJukebox.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityJukebox.java
similarity index 93%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityJukebox.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityJukebox.java
index 2dac646f2..001f3f73c 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntityJukebox.java
+++ b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityJukebox.java
@@ -1,6 +1,6 @@
 package net.minecraft.core.block.entity;
 
-import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.entity.EntityItem;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.world.LevelListener;
@@ -19,9 +19,9 @@ public class TileEntityJukebox extends TileEntity {
         record = nbttagcompound.getInteger("Record");
         byte expanded = nbttagcompound.getByte("Expanded");
         if (expanded == 0 && record >= 256) {
-            record += (Block.blocksList.length - 256);
+            record += (Blocks.blocksList.length - 256);
         }
-        if (record < Block.blocksList.length) {
+        if (record < Blocks.blocksList.length) {
             short[] id = new short[]{(short) record};
             byte[] meta = new byte[]{(byte) 0};
             ChunkConverter.converters[0].convertBlocksAndMetadata(id, meta);
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityMeshGold.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityMeshGold.java
similarity index 95%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityMeshGold.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityMeshGold.java
index 4a072ba6d..59703abee 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntityMeshGold.java
+++ b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityMeshGold.java
@@ -5,7 +5,7 @@ import net.minecraft.core.entity.EntityItem;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.BlockEntityDataPacket;
+import net.minecraft.core.net.packet.PacketBlockEntityData;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.Nullable;
 
@@ -79,6 +79,6 @@ public class TileEntityMeshGold extends TileEntity {
 
     @Override
     public Packet getDescriptionPacket() {
-        return new BlockEntityDataPacket(this);
+        return new PacketBlockEntityData(this);
     }
 }
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityMobSpawner.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityMobSpawner.java
similarity index 95%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityMobSpawner.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityMobSpawner.java
index aeaebe6df..4f3e6649a 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntityMobSpawner.java
+++ b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityMobSpawner.java
@@ -3,17 +3,13 @@ package net.minecraft.core.block.entity;
 import com.mojang.logging.LogUtils;
 import net.minecraft.core.entity.EntityDispatcher;
 import net.minecraft.core.entity.Mob;
-import net.minecraft.core.enums.MobCategory;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.util.phys.AABB;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.SetMobSpawnerPacket;
-import net.minecraft.core.entity.SpawnListEntry;
+import net.minecraft.core.net.packet.PacketSetMobSpawner;
 import org.slf4j.Logger;
 
-import java.util.List;
-
 public class TileEntityMobSpawner extends TileEntity
 {
     private static final Logger LOGGER = LogUtils.getLogger();
@@ -142,7 +138,7 @@ public class TileEntityMobSpawner extends TileEntity
     @Override
 	public Packet getDescriptionPacket()
     {
-        return new SetMobSpawnerPacket(x, y, z, EntityDispatcher.classForId(mobId));
+        return new PacketSetMobSpawner(x, y, z, EntityDispatcher.classForId(mobId));
     }
     
     public int countNearbySpawners() {
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityNoteblock.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityNoteblock.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityNoteblock.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityNoteblock.java
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntitySeat.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntitySeat.java
similarity index 98%
rename from src/main/java/net/minecraft/core/block/entity/TileEntitySeat.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntitySeat.java
index 9152d4e2c..2485e6d0f 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntitySeat.java
+++ b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntitySeat.java
@@ -150,6 +150,6 @@ public class TileEntitySeat
     public void readFromNBT(CompoundTag compoundTag)
     {
         super.readFromNBT(compoundTag);
-        seat = Block.getBlock(compoundTag.getIntegerOrDefault("Block", Blocks.SEAT.id));
+        seat = Blocks.getBlock(compoundTag.getIntegerOrDefault("Block", Blocks.SEAT.id));
     }
 }
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntitySensor.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntitySensor.java
similarity index 98%
rename from src/main/java/net/minecraft/core/block/entity/TileEntitySensor.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntitySensor.java
index 88e5f0514..39a23e871 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntitySensor.java
+++ b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntitySensor.java
@@ -33,7 +33,7 @@ public class TileEntitySensor extends TileEntity {
 			int y1 = MathHelper.round(y + facing.getOffsetY() * i);
 			int z1 = MathHelper.round(z + facing.getOffsetZ() * i);
 			int id = world.getBlockId(x1, y1, z1);
-			if(Block.solid[id] && !Block.hasTag(id, BlockTags.EXTENDS_MOTION_SENSOR_RANGE)) {
+			if(Blocks.solid[id] && !Block.hasTag(id, BlockTags.EXTENDS_MOTION_SENSOR_RANGE)) {
 				return i - 1;
 			}
 		}
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntitySign.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntitySign.java
similarity index 96%
rename from src/main/java/net/minecraft/core/block/entity/TileEntitySign.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntitySign.java
index 033b6e71e..c73f70ef3 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntitySign.java
+++ b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntitySign.java
@@ -5,7 +5,7 @@ import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.enums.EnumSignPicture;
 import net.minecraft.core.net.command.TextFormatting;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.BlockEntityDataPacket;
+import net.minecraft.core.net.packet.PacketBlockEntityData;
 import net.minecraft.core.util.helper.UUIDHelper;
 import org.jetbrains.annotations.Nullable;
 
@@ -124,7 +124,7 @@ public class TileEntitySign extends TileEntity
     @Override
 	public Packet getDescriptionPacket()
     {
-        return new BlockEntityDataPacket(this);
+        return new PacketBlockEntityData(this);
     }
 
 }
diff --git a/src/main/java/net/minecraft/core/block/entity/TileEntityTrommel.java b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityTrommel.java
similarity index 99%
rename from src/main/java/net/minecraft/core/block/entity/TileEntityTrommel.java
rename to game/core/src/main/java/net/minecraft/core/block/entity/TileEntityTrommel.java
index fee933a60..aee215574 100644
--- a/src/main/java/net/minecraft/core/block/entity/TileEntityTrommel.java
+++ b/game/core/src/main/java/net/minecraft/core/block/entity/TileEntityTrommel.java
@@ -291,7 +291,7 @@ public class TileEntityTrommel extends TileEntity
         	int adjacentId = worldObj != null ? worldObj.getBlockId(x + xOffset, y, z + zOffset) : 0;
         	
         	Container chest = null;
-        	if (Block.blocksList[adjacentId] instanceof BlockChest) {
+        	if (Blocks.blocksList[adjacentId] instanceof BlockChest) {
                 assert worldObj != null;
                 chest = BlockChest.getInventory(worldObj, x + xOffset, y, z + zOffset);
         	}
diff --git a/src/main/java/net/minecraft/core/block/logic/RailDirection.java b/game/core/src/main/java/net/minecraft/core/block/logic/RailDirection.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/logic/RailDirection.java
rename to game/core/src/main/java/net/minecraft/core/block/logic/RailDirection.java
diff --git a/src/main/java/net/minecraft/core/block/material/Material.java b/game/core/src/main/java/net/minecraft/core/block/material/Material.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/material/Material.java
rename to game/core/src/main/java/net/minecraft/core/block/material/Material.java
diff --git a/src/main/java/net/minecraft/core/block/material/MaterialColor.java b/game/core/src/main/java/net/minecraft/core/block/material/MaterialColor.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/material/MaterialColor.java
rename to game/core/src/main/java/net/minecraft/core/block/material/MaterialColor.java
diff --git a/src/main/java/net/minecraft/core/block/material/MaterialDecoration.java b/game/core/src/main/java/net/minecraft/core/block/material/MaterialDecoration.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/material/MaterialDecoration.java
rename to game/core/src/main/java/net/minecraft/core/block/material/MaterialDecoration.java
diff --git a/src/main/java/net/minecraft/core/block/material/MaterialGas.java b/game/core/src/main/java/net/minecraft/core/block/material/MaterialGas.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/material/MaterialGas.java
rename to game/core/src/main/java/net/minecraft/core/block/material/MaterialGas.java
diff --git a/src/main/java/net/minecraft/core/block/material/MaterialLiquid.java b/game/core/src/main/java/net/minecraft/core/block/material/MaterialLiquid.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/material/MaterialLiquid.java
rename to game/core/src/main/java/net/minecraft/core/block/material/MaterialLiquid.java
diff --git a/src/main/java/net/minecraft/core/block/material/MaterialPortal.java b/game/core/src/main/java/net/minecraft/core/block/material/MaterialPortal.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/material/MaterialPortal.java
rename to game/core/src/main/java/net/minecraft/core/block/material/MaterialPortal.java
diff --git a/src/main/java/net/minecraft/core/block/motion/CarriedBlock.java b/game/core/src/main/java/net/minecraft/core/block/motion/CarriedBlock.java
similarity index 98%
rename from src/main/java/net/minecraft/core/block/motion/CarriedBlock.java
rename to game/core/src/main/java/net/minecraft/core/block/motion/CarriedBlock.java
index 9764603a4..05af9554c 100644
--- a/src/main/java/net/minecraft/core/block/motion/CarriedBlock.java
+++ b/game/core/src/main/java/net/minecraft/core/block/motion/CarriedBlock.java
@@ -2,6 +2,7 @@ package net.minecraft.core.block.motion;
 
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.block.entity.TileEntityDispatcher;
 import net.minecraft.core.block.tag.BlockTags;
@@ -42,7 +43,7 @@ public class CarriedBlock implements ICarriable {
     }
 
     public Block block() {
-        return Block.getBlock(blockId);
+        return Blocks.getBlock(blockId);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/piston/BlockPistonBase.java b/game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonBase.java
similarity index 90%
rename from src/main/java/net/minecraft/core/block/piston/BlockPistonBase.java
rename to game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonBase.java
index 9a5d59bb6..8bf4f9f0d 100644
--- a/src/main/java/net/minecraft/core/block/piston/BlockPistonBase.java
+++ b/game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonBase.java
@@ -182,7 +182,7 @@ public class BlockPistonBase extends Block
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         int data = world.getBlockMetadata(x, y, z);
         if(isPowered(data))
@@ -190,35 +190,24 @@ public class BlockPistonBase extends Block
             switch(getDirection(data))
             {
                 case DOWN:
-                setBlockBounds(0.0F, 0.25F, 0.0F, 1.0F, 1.0F, 1.0F);
-                break;
+                    return AABB.getTemporaryBB(0.0F, 0.25F, 0.0F, 1.0F, 1.0F, 1.0F);
                 case UP:
-                setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.75F, 1.0F);
-                break;
+                    return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 0.75F, 1.0F);
                 case NORTH:
-                setBlockBounds(0.0F, 0.0F, 0.25F, 1.0F, 1.0F, 1.0F);
-                break;
+                    return AABB.getTemporaryBB(0.0F, 0.0F, 0.25F, 1.0F, 1.0F, 1.0F);
                 case SOUTH:
-                setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.75F);
-                break;
+                    return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.75F);
                 case WEST:
-                setBlockBounds(0.25F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-                break;
+                    return AABB.getTemporaryBB(0.25F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
                 case EAST:
-                setBlockBounds(0.0F, 0.0F, 0.0F, 0.75F, 1.0F, 1.0F);
-                break;
+                default:
+                    return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 0.75F, 1.0F, 1.0F);
             }
         } else
         {
-            setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+            return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
         }
     }
-    @Override
-    public void getCollidingBoundingBoxes(World world, int x, int y, int z, AABB aabb, ArrayList<AABB> aabbs)
-    {
-        setBlockBoundsBasedOnState(world, x, y, z);
-        super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbs);
-    }
 
     @Override
 	public boolean isCubeShaped()
@@ -238,7 +227,7 @@ public class BlockPistonBase extends Block
     
     protected boolean isPushable(int id, World world, int x, int y, int z, boolean canDestroy)
     {
-        Block block = Block.getBlock(id);
+        Block block = Blocks.getBlock(id);
         if (block == null) return false;
         int pushReaction = block.getPistonPushReaction(world, x, y, z);
         if (block.hasTag(BlockTags.PISTON_CRUSHING) ||
@@ -277,12 +266,12 @@ public class BlockPistonBase extends Block
                 break;
             }
             if (!isPushable(id, world, xo, yo, zo, true)) {
-                if (blocks == 1 && BlockTags.PISTON_CRUSHING.appliesTo(Block.getBlock(id)) && tryCrush(world, x, y, z, direction)) {
+                if (blocks == 1 && BlockTags.PISTON_CRUSHING.appliesTo(Blocks.getBlock(id)) && tryCrush(world, x, y, z, direction)) {
                     break;
                 }
                 return false;
             }
-            if (Block.blocksList[id].getPistonPushReaction(world, xo, yo, zo) == Material.PISTON_DESTROY_ON_PUSH) {
+            if (Blocks.blocksList[id].getPistonPushReaction(world, xo, yo, zo) == Material.PISTON_DESTROY_ON_PUSH) {
                 break;
             }
             if (blocks == maxPushedBlocks) {
@@ -329,8 +318,8 @@ public class BlockPistonBase extends Block
             if (!isPushable(blockId, world, xo, yo, zo, true)) {
                 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), world.getBlockEntity(xo, yo, zo), null);
+            if (Blocks.blocksList[blockId].getPistonPushReaction(world, xo, yo, zo) == Material.PISTON_DESTROY_ON_PUSH) {
+                Blocks.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/block/piston/BlockPistonBaseSteel.java b/game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonBaseSteel.java
similarity index 85%
rename from src/main/java/net/minecraft/core/block/piston/BlockPistonBaseSteel.java
rename to game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonBaseSteel.java
index 5a7ac953a..b1db533be 100644
--- a/src/main/java/net/minecraft/core/block/piston/BlockPistonBaseSteel.java
+++ b/game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonBaseSteel.java
@@ -28,7 +28,7 @@ public class BlockPistonBaseSteel extends BlockPistonBase {
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         int data = world.getBlockMetadata(x, y, z);
         if(isPowered(data))
@@ -36,27 +36,22 @@ public class BlockPistonBaseSteel extends BlockPistonBase {
             switch(getDirection(data))
             {
                 case DOWN:
-                    setBlockBounds(0.0F, HEAD_THICKNESS_STEEL, 0.0F, 1.0F, 1.0F, 1.0F);
-                    break;
+                    return AABB.getTemporaryBB(0.0F, HEAD_THICKNESS_STEEL, 0.0F, 1.0F, 1.0F, 1.0F);
                 case UP:
-                    setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1 - HEAD_THICKNESS_STEEL, 1.0F);
-                    break;
+                    return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1 - HEAD_THICKNESS_STEEL, 1.0F);
                 case NORTH:
-                    setBlockBounds(0.0F, 0.0F, HEAD_THICKNESS_STEEL, 1.0F, 1.0F, 1.0F);
-                    break;
+                    return AABB.getTemporaryBB(0.0F, 0.0F, HEAD_THICKNESS_STEEL, 1.0F, 1.0F, 1.0F);
                 case SOUTH:
-                    setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1 - HEAD_THICKNESS_STEEL);
-                    break;
+                    return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1 - HEAD_THICKNESS_STEEL);
                 case WEST:
-                    setBlockBounds(HEAD_THICKNESS_STEEL, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-                    break;
+                    return AABB.getTemporaryBB(HEAD_THICKNESS_STEEL, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
                 case EAST:
-                    setBlockBounds(0.0F, 0.0F, 0.0F, 1 - HEAD_THICKNESS_STEEL, 1.0F, 1.0F);
-                    break;
+                default:
+                    return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1 - HEAD_THICKNESS_STEEL, 1.0F, 1.0F);
             }
         } else
         {
-            setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
+            return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
         }
     }
 
@@ -80,13 +75,13 @@ public class BlockPistonBaseSteel extends BlockPistonBase {
                 break;
             }
             if (!isPushable(id, world, xo, yo, zo, true)) {
-                if (blocks == 1 && BlockTags.PISTON_CRUSHING.appliesTo(Block.getBlock(id)) && tryCrush(world, x, y, z, direction)) {
+                if (blocks == 1 && BlockTags.PISTON_CRUSHING.appliesTo(Blocks.getBlock(id)) && tryCrush(world, x, y, z, direction)) {
                     didCrush = true;
                     break;
                 }
                 return false;
             }
-            if (Block.blocksList[id].getPistonPushReaction(world, xo, yo, zo) == Material.PISTON_DESTROY_ON_PUSH) {
+            if (Blocks.blocksList[id].getPistonPushReaction(world, xo, yo, zo) == Material.PISTON_DESTROY_ON_PUSH) {
                 break;
             }
             if (blocks == maxPushedBlocks) {
diff --git a/src/main/java/net/minecraft/core/block/piston/BlockPistonBaseSticky.java b/game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonBaseSticky.java
similarity index 96%
rename from src/main/java/net/minecraft/core/block/piston/BlockPistonBaseSticky.java
rename to game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonBaseSticky.java
index de5268130..caf6c3129 100644
--- a/src/main/java/net/minecraft/core/block/piston/BlockPistonBaseSticky.java
+++ b/game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonBaseSticky.java
@@ -52,7 +52,7 @@ public class BlockPistonBaseSticky extends BlockPistonBase {
         }
         if(!pulledMoving && retractId > 0 &&
             isPushable(retractId, world, x1, y1, z1, false) &&
-            (Block.blocksList[retractId].getPistonPushReaction(world, x1, y1, z1) == Material.PISTON_PUSHABLE || (Block.getBlock(retractId) instanceof BlockPistonBase)))
+            (Blocks.blocksList[retractId].getPistonPushReaction(world, x1, y1, z1) == Material.PISTON_PUSHABLE || (Blocks.getBlock(retractId) instanceof BlockPistonBase)))
         {
             if (!(retractEntity instanceof TileEntityMovingPistonBlock)) {
                 world.removeBlockTileEntity(x1, y1, z1);
diff --git a/src/main/java/net/minecraft/core/block/piston/BlockPistonHead.java b/game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonHead.java
similarity index 57%
rename from src/main/java/net/minecraft/core/block/piston/BlockPistonHead.java
rename to game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonHead.java
index 1abe9c8c7..6a6ca3fe7 100644
--- a/src/main/java/net/minecraft/core/block/piston/BlockPistonHead.java
+++ b/game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonHead.java
@@ -81,84 +81,55 @@ public class BlockPistonHead extends Block
     @Override
     public void getCollidingBoundingBoxes(World world, int x, int y, int z, AABB aabb, ArrayList<AABB> aabbList)
     {
-        int l = world.getBlockMetadata(x, y, z);
-        switch(getDirectionFromMeta(l))
+        switch(getDirectionFromMeta(world.getBlockMetadata(x, y, z)))
         {
-            case DOWN: // '\0'
-            setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, headThickness, 1.0F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            setBlockBounds(0.375F, headThickness, 0.375F, 0.625F, 1 + headThickness, 0.625F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            break;
-
-            case UP: // '\001'
-            setBlockBounds(0.0F, 1 - headThickness, 0.0F, 1.0F, 1.0F, 1.0F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            setBlockBounds(0.375F, -headThickness, 0.375F, 0.625F, 1 - headThickness, 0.625F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            break;
-
-            case NORTH: // '\002'
-            setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, headThickness);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            setBlockBounds(headThickness, 0.375F, headThickness, 1 - headThickness, 0.625F, 1 + headThickness);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            break;
-
-            case SOUTH: // '\003'
-            setBlockBounds(0.0F, 0.0F, 1 - headThickness, 1.0F, 1.0F, 1.0F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            setBlockBounds(headThickness, 0.375F, -headThickness, 1 - headThickness, 0.625F, 1 - headThickness);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            break;
-
-            case WEST: // '\004'
-            setBlockBounds(0.0F, 0.0F, 0.0F, headThickness, 1.0F, 1.0F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            setBlockBounds(headThickness, 0.375F, headThickness, 1 + headThickness, 0.625F, 1 - headThickness);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            break;
-
-            case EAST: // '\005'
-            setBlockBounds(1 - headThickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            setBlockBounds(-headThickness, 0.375F, headThickness, 1 - headThickness, 0.625F, 1 - headThickness);
-            super.getCollidingBoundingBoxes(world, x, y, z, aabb, aabbList);
-            break;
+            case DOWN:
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, headThickness, 1.0F).move(x, y, z), aabbList);
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.375F, headThickness, 0.375F, 0.625F, 1 + headThickness, 0.625F).move(x, y, z), aabbList);
+                break;
+            case UP:
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.0F, 1 - headThickness, 0.0F, 1.0F, 1.0F, 1.0F).move(x, y, z), aabbList);
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.375F, -headThickness, 0.375F, 0.625F, 1 - headThickness, 0.625F).move(x, y, z), aabbList);
+                break;
+            case NORTH:
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, headThickness).move(x, y, z), aabbList);
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(headThickness, 0.375F, headThickness, 1 - headThickness, 0.625F, 1 + headThickness).move(x, y, z), aabbList);
+                break;
+            case SOUTH:
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.0F, 0.0F, 1 - headThickness, 1.0F, 1.0F, 1.0F).move(x, y, z), aabbList);
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(headThickness, 0.375F, -headThickness, 1 - headThickness, 0.625F, 1 - headThickness).move(x, y, z), aabbList);
+                break;
+            case WEST:
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, headThickness, 1.0F, 1.0F).move(x, y, z), aabbList);
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(headThickness, 0.375F, headThickness, 1 + headThickness, 0.625F, 1 - headThickness).move(x, y, z), aabbList);
+                break;
+            case EAST:
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(1 - headThickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F).move(x, y, z), aabbList);
+                addIntersectingBoundingBox(aabb, AABB.getTemporaryBB(-headThickness, 0.375F, headThickness, 1 - headThickness, 0.625F, 1 - headThickness).move(x, y, z), aabbList);
+                break;
         }
-        setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         int l = world.getBlockMetadata(x, y, z);
         switch(getDirectionFromMeta(l))
         {
-            case DOWN: // '\0'
-            setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, headThickness, 1.0F);
-            break;
-
-            case UP: // '\001'
-            setBlockBounds(0.0F, 1 - headThickness, 0.0F, 1.0F, 1.0F, 1.0F);
-            break;
-
-            case NORTH: // '\002'
-            setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, headThickness);
-            break;
-
-            case SOUTH: // '\003'
-            setBlockBounds(0.0F, 0.0F, 1 - headThickness, 1.0F, 1.0F, 1.0F);
-            break;
-
-            case WEST: // '\004'
-            setBlockBounds(0.0F, 0.0F, 0.0F, headThickness, 1.0F, 1.0F);
-            break;
-
-            case EAST: // '\005'
-            setBlockBounds(1 - headThickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-            break;
+            case DOWN:
+                return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, headThickness, 1.0F);
+            case UP:
+                return AABB.getTemporaryBB(0.0F, 1 - headThickness, 0.0F, 1.0F, 1.0F, 1.0F);
+            case NORTH:
+                return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, headThickness);
+            case SOUTH:
+                return AABB.getTemporaryBB(0.0F, 0.0F, 1 - headThickness, 1.0F, 1.0F, 1.0F);
+            case WEST:
+                return AABB.getTemporaryBB(0.0F, 0.0F, 0.0F, headThickness, 1.0F, 1.0F);
+            case EAST:
+                return AABB.getTemporaryBB(1 - headThickness, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
         }
+        return super.getBlockBoundsFromState(world, x, y, z);
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/block/piston/BlockPistonMoving.java b/game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonMoving.java
similarity index 85%
rename from src/main/java/net/minecraft/core/block/piston/BlockPistonMoving.java
rename to game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonMoving.java
index 9cf193d4b..8f2887ba2 100644
--- a/src/main/java/net/minecraft/core/block/piston/BlockPistonMoving.java
+++ b/game/core/src/main/java/net/minecraft/core/block/piston/BlockPistonMoving.java
@@ -2,6 +2,7 @@ package net.minecraft.core.block.piston;
 
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockTileEntity;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.enums.EnumDropCause;
@@ -102,7 +103,7 @@ public class BlockPistonMoving extends BlockTileEntity
         TileEntityMovingPistonBlock piston = getBlockEntity(world, x, y, z);
         if(piston != null)
         {
-            Block.blocksList[piston.getMovedId()].dropBlockWithCause(world, EnumDropCause.WORLD, x, y, z, meta, null, null);
+            Blocks.blocksList[piston.getMovedId()].dropBlockWithCause(world, EnumDropCause.WORLD, x, y, z, meta, null, null);
         }
     }
 
@@ -138,30 +139,32 @@ public class BlockPistonMoving extends BlockTileEntity
     }
 
     @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
+    public AABB getBlockBoundsFromState(WorldSource world, int x, int y, int z)
     {
         TileEntityMovingPistonBlock pistonBlockEntity = getBlockEntity(world, x, y, z);
         if(pistonBlockEntity != null)
         {
-            Block block = Block.blocksList[pistonBlockEntity.getMovedId()];
+            Block block = Blocks.blocksList[pistonBlockEntity.getMovedId()];
             if(block == null || block == this)
             {
-                return;
+                return getBlockBoundsFromState(world, x, y, z);
             }
-            block.setBlockBoundsBasedOnState(world, x, y, z);
             float f = pistonBlockEntity.getProgress(0.0F);
             if(pistonBlockEntity.isExtending())
             {
                 f = 1.0F - f;
             }
             Direction direction = pistonBlockEntity.getDirection();
-            minX = block.minX - direction.getOffsetX() * f;
-            maxX = block.maxX - direction.getOffsetX() * f;
-            minY = block.minY - direction.getOffsetY() * f;
-            maxY = block.maxY - direction.getOffsetY() * f;
-            minZ = block.minZ - direction.getOffsetZ() * f;
-            maxZ = block.maxZ - direction.getOffsetZ() * f;
+            AABB otherBounds = block.getBlockBoundsFromState(world, x, y, z);
+            return AABB.getTemporaryBB(
+            otherBounds.minX - direction.getOffsetX() * f,
+            otherBounds.maxX - direction.getOffsetX() * f,
+            otherBounds.minY - direction.getOffsetY() * f,
+            otherBounds.maxY - direction.getOffsetY() * f,
+            otherBounds.minZ - direction.getOffsetZ() * f,
+            otherBounds.maxZ - direction.getOffsetZ() * f);
         }
+        return getBlockBoundsFromState(world, x, y, z);
     }
 
     public AABB getCollisionShapeFromTileEntity(WorldSource world, int x, int y, int z, int blockID, float directionStretch, Direction direction)
@@ -170,7 +173,7 @@ public class BlockPistonMoving extends BlockTileEntity
         {
             return null;
         }
-        AABB aabb = Block.blocksList[blockID].getCollisionBoundingBoxFromPool(world, x, y, z);
+        AABB aabb = Blocks.blocksList[blockID].getCollisionBoundingBoxFromPool(world, x, y, z);
         if(aabb == null)
         {
             return null;
diff --git a/src/main/java/net/minecraft/core/block/piston/TileEntityMovingPistonBlock.java b/game/core/src/main/java/net/minecraft/core/block/piston/TileEntityMovingPistonBlock.java
similarity index 98%
rename from src/main/java/net/minecraft/core/block/piston/TileEntityMovingPistonBlock.java
rename to game/core/src/main/java/net/minecraft/core/block/piston/TileEntityMovingPistonBlock.java
index eaac8dd84..d42b85a25 100644
--- a/src/main/java/net/minecraft/core/block/piston/TileEntityMovingPistonBlock.java
+++ b/game/core/src/main/java/net/minecraft/core/block/piston/TileEntityMovingPistonBlock.java
@@ -159,7 +159,7 @@ public class TileEntityMovingPistonBlock extends TileEntity
             }
             if (movedId != 0) {
                 BlockTileEntity.createNewEntityOnPlace = false;
-                Block.blocksList[movedId].onBlockPlacedByWorld(worldObj, x, y, z);
+                Blocks.blocksList[movedId].onBlockPlacedByWorld(worldObj, x, y, z);
                 BlockTileEntity.createNewEntityOnPlace = true;
             }
             assert movedEntity == null || worldObj.getBlockEntity(x, y, z) == movedEntity : "Piston failed to actually move entity!";
diff --git a/src/main/java/net/minecraft/core/block/support/FullSupport.java b/game/core/src/main/java/net/minecraft/core/block/support/FullSupport.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/support/FullSupport.java
rename to game/core/src/main/java/net/minecraft/core/block/support/FullSupport.java
diff --git a/src/main/java/net/minecraft/core/block/support/ISupport.java b/game/core/src/main/java/net/minecraft/core/block/support/ISupport.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/support/ISupport.java
rename to game/core/src/main/java/net/minecraft/core/block/support/ISupport.java
diff --git a/src/main/java/net/minecraft/core/block/support/ISupportable.java b/game/core/src/main/java/net/minecraft/core/block/support/ISupportable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/support/ISupportable.java
rename to game/core/src/main/java/net/minecraft/core/block/support/ISupportable.java
diff --git a/src/main/java/net/minecraft/core/block/support/PartialSupport.java b/game/core/src/main/java/net/minecraft/core/block/support/PartialSupport.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/support/PartialSupport.java
rename to game/core/src/main/java/net/minecraft/core/block/support/PartialSupport.java
diff --git a/src/main/java/net/minecraft/core/block/tag/BlockTags.java b/game/core/src/main/java/net/minecraft/core/block/tag/BlockTags.java
similarity index 100%
rename from src/main/java/net/minecraft/core/block/tag/BlockTags.java
rename to game/core/src/main/java/net/minecraft/core/block/tag/BlockTags.java
diff --git a/src/main/java/net/minecraft/core/crafting/ContainerListener.java b/game/core/src/main/java/net/minecraft/core/crafting/ContainerListener.java
similarity index 100%
rename from src/main/java/net/minecraft/core/crafting/ContainerListener.java
rename to game/core/src/main/java/net/minecraft/core/crafting/ContainerListener.java
diff --git a/src/main/java/net/minecraft/core/crafting/LookupFuelFurnace.java b/game/core/src/main/java/net/minecraft/core/crafting/LookupFuelFurnace.java
similarity index 100%
rename from src/main/java/net/minecraft/core/crafting/LookupFuelFurnace.java
rename to game/core/src/main/java/net/minecraft/core/crafting/LookupFuelFurnace.java
diff --git a/src/main/java/net/minecraft/core/crafting/LookupFuelFurnaceBlast.java b/game/core/src/main/java/net/minecraft/core/crafting/LookupFuelFurnaceBlast.java
similarity index 100%
rename from src/main/java/net/minecraft/core/crafting/LookupFuelFurnaceBlast.java
rename to game/core/src/main/java/net/minecraft/core/crafting/LookupFuelFurnaceBlast.java
diff --git a/src/main/java/net/minecraft/core/data/DataLoader.java b/game/core/src/main/java/net/minecraft/core/data/DataLoader.java
similarity index 99%
rename from src/main/java/net/minecraft/core/data/DataLoader.java
rename to game/core/src/main/java/net/minecraft/core/data/DataLoader.java
index a634f9547..342dd06a4 100644
--- a/src/main/java/net/minecraft/core/data/DataLoader.java
+++ b/game/core/src/main/java/net/minecraft/core/data/DataLoader.java
@@ -14,7 +14,7 @@ import net.minecraft.core.data.registry.recipe.RecipeEntryBase;
 import net.minecraft.core.data.registry.recipe.RecipeSymbol;
 import net.minecraft.core.data.registry.recipe.adapter.*;
 import net.minecraft.core.item.ItemStack;
-import net.minecraft.core.net.packet.RecipeSyncPacket;
+import net.minecraft.core.net.packet.PacketRecipeSync;
 import org.slf4j.Logger;
 
 import java.io.*;
@@ -204,7 +204,7 @@ public class DataLoader {
         LOGGER.info("Registered {} recipes",i);
     }
 
-    public static void loadRecipeFromServer(RecipeSyncPacket packet){
+    public static void loadRecipeFromServer(PacketRecipeSync packet){
         JsonArray jsonArray = JsonParser.parseString(packet.recipe).getAsJsonArray();
         GsonBuilder builder = new GsonBuilder();
         builder.setPrettyPrinting();
diff --git a/src/main/java/net/minecraft/core/data/Id.java b/game/core/src/main/java/net/minecraft/core/data/Id.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/Id.java
rename to game/core/src/main/java/net/minecraft/core/data/Id.java
diff --git a/src/main/java/net/minecraft/core/data/gamerule/GameRule.java b/game/core/src/main/java/net/minecraft/core/data/gamerule/GameRule.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/gamerule/GameRule.java
rename to game/core/src/main/java/net/minecraft/core/data/gamerule/GameRule.java
diff --git a/src/main/java/net/minecraft/core/data/gamerule/GameRuleBoolean.java b/game/core/src/main/java/net/minecraft/core/data/gamerule/GameRuleBoolean.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/gamerule/GameRuleBoolean.java
rename to game/core/src/main/java/net/minecraft/core/data/gamerule/GameRuleBoolean.java
diff --git a/src/main/java/net/minecraft/core/data/gamerule/GameRuleCollection.java b/game/core/src/main/java/net/minecraft/core/data/gamerule/GameRuleCollection.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/gamerule/GameRuleCollection.java
rename to game/core/src/main/java/net/minecraft/core/data/gamerule/GameRuleCollection.java
diff --git a/src/main/java/net/minecraft/core/data/gamerule/GameRules.java b/game/core/src/main/java/net/minecraft/core/data/gamerule/GameRules.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/gamerule/GameRules.java
rename to game/core/src/main/java/net/minecraft/core/data/gamerule/GameRules.java
diff --git a/src/main/java/net/minecraft/core/data/gamerule/TreecapitatorHelper.java b/game/core/src/main/java/net/minecraft/core/data/gamerule/TreecapitatorHelper.java
similarity index 99%
rename from src/main/java/net/minecraft/core/data/gamerule/TreecapitatorHelper.java
rename to game/core/src/main/java/net/minecraft/core/data/gamerule/TreecapitatorHelper.java
index e6be04422..e795341fe 100644
--- a/src/main/java/net/minecraft/core/data/gamerule/TreecapitatorHelper.java
+++ b/game/core/src/main/java/net/minecraft/core/data/gamerule/TreecapitatorHelper.java
@@ -8,6 +8,7 @@ import java.util.Set;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockLeavesBase;
 import net.minecraft.core.block.BlockLog;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.entity.EntityItem;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.enums.EnumDropCause;
@@ -37,7 +38,7 @@ public class TreecapitatorHelper {
 	
 	public boolean chopTree() {
 		int id = world.getBlockId(basePosition.x, basePosition.y, basePosition.z);
-		if(!isLog(Block.getBlock(id))) {
+		if(!isLog(Blocks.getBlock(id))) {
 			return false;
 		}
 		
diff --git a/src/main/java/net/minecraft/core/data/legacy/LegacyBiomes.java b/game/core/src/main/java/net/minecraft/core/data/legacy/LegacyBiomes.java
similarity index 97%
rename from src/main/java/net/minecraft/core/data/legacy/LegacyBiomes.java
rename to game/core/src/main/java/net/minecraft/core/data/legacy/LegacyBiomes.java
index 714932e60..37972feb7 100644
--- a/src/main/java/net/minecraft/core/data/legacy/LegacyBiomes.java
+++ b/game/core/src/main/java/net/minecraft/core/data/legacy/LegacyBiomes.java
@@ -1,54 +1,54 @@
-package net.minecraft.core.data.legacy;
-
-import net.minecraft.core.world.biome.Biome;
-import net.minecraft.core.world.biome.Biomes;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public abstract class LegacyBiomes
-{
-    private static final Map<Integer, Biome> idToBiomeMap = new HashMap<>();
-    private static final Map<Biome, Integer> biomeToIdMap = new HashMap<>();
-
-    private static void register(Biome biome, int id)
-    {
-        idToBiomeMap.put(id, biome);
-        biomeToIdMap.put(biome, id);
-    }
-
-    public static Biome getBiomeById(int id)
-    {
-        return idToBiomeMap.get(id);
-    }
-
-    public static int getBiomeId(Biome biome)
-    {
-        return biomeToIdMap.get(biome);
-    }
-
-    static
-    {
-        register(Biomes.OVERWORLD_RAINFOREST, 0);
-        register(Biomes.OVERWORLD_SWAMPLAND, 1);
-        register(Biomes.OVERWORLD_SEASONAL_FOREST, 2);
-        register(Biomes.OVERWORLD_FOREST, 3);
-        register(Biomes.OVERWORLD_GRASSLANDS, 4);
-        register(Biomes.OVERWORLD_OUTBACK, 5);
-        register(Biomes.OVERWORLD_SHRUBLAND, 6);
-        register(Biomes.OVERWORLD_TAIGA, 7);
-        register(Biomes.OVERWORLD_BOREAL_FOREST, 8);
-        register(Biomes.OVERWORLD_DESERT, 9);
-        register(Biomes.OVERWORLD_PLAINS, 10);
-        register(Biomes.OVERWORLD_GLACIER, 11);
-        register(Biomes.OVERWORLD_TUNDRA, 12);
-        register(Biomes.OVERWORLD_MEADOW, 13);
-        register(Biomes.NETHER_NETHER, 14);
-        register(Biomes.PARADISE_PARADISE, 15);
-        register(Biomes.OVERWORLD_BIRCH_FOREST, 16);
-        register(Biomes.OVERWORLD_RETRO, 17);
-        register(Biomes.OVERWORLD_HELL, 18);
-        register(Biomes.OVERWORLD_SWAMPLAND_MUDDY, 19);
-        register(Biomes.OVERWORLD_OUTBACK_GRASSY, 20);
-    }
-}
+package net.minecraft.core.data.legacy;
+
+import net.minecraft.core.world.biome.Biome;
+import net.minecraft.core.world.biome.Biomes;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public abstract class LegacyBiomes
+{
+    private static final Map<Integer, Biome> idToBiomeMap = new HashMap<>();
+    private static final Map<Biome, Integer> biomeToIdMap = new HashMap<>();
+
+    private static void register(Biome biome, int id)
+    {
+        idToBiomeMap.put(id, biome);
+        biomeToIdMap.put(biome, id);
+    }
+
+    public static Biome getBiomeById(int id)
+    {
+        return idToBiomeMap.get(id);
+    }
+
+    public static int getBiomeId(Biome biome)
+    {
+        return biomeToIdMap.get(biome);
+    }
+
+    static
+    {
+        register(Biomes.OVERWORLD_RAINFOREST, 0);
+        register(Biomes.OVERWORLD_SWAMPLAND, 1);
+        register(Biomes.OVERWORLD_SEASONAL_FOREST, 2);
+        register(Biomes.OVERWORLD_FOREST, 3);
+        register(Biomes.OVERWORLD_GRASSLANDS, 4);
+        register(Biomes.OVERWORLD_OUTBACK, 5);
+        register(Biomes.OVERWORLD_SHRUBLAND, 6);
+        register(Biomes.OVERWORLD_TAIGA, 7);
+        register(Biomes.OVERWORLD_BOREAL_FOREST, 8);
+        register(Biomes.OVERWORLD_DESERT, 9);
+        register(Biomes.OVERWORLD_PLAINS, 10);
+        register(Biomes.OVERWORLD_GLACIER, 11);
+        register(Biomes.OVERWORLD_TUNDRA, 12);
+        register(Biomes.OVERWORLD_MEADOW, 13);
+        register(Biomes.NETHER_NETHER, 14);
+        register(Biomes.PARADISE_PARADISE, 15);
+        register(Biomes.OVERWORLD_BIRCH_FOREST, 16);
+        register(Biomes.OVERWORLD_RETRO, 17);
+        register(Biomes.OVERWORLD_HELL, 18);
+        register(Biomes.OVERWORLD_SWAMPLAND_MUDDY, 19);
+        register(Biomes.OVERWORLD_OUTBACK_GRASSY, 20);
+    }
+}
diff --git a/src/main/java/net/minecraft/core/data/legacy/LegacyWorldTypes.java b/game/core/src/main/java/net/minecraft/core/data/legacy/LegacyWorldTypes.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/legacy/LegacyWorldTypes.java
rename to game/core/src/main/java/net/minecraft/core/data/legacy/LegacyWorldTypes.java
diff --git a/src/main/java/net/minecraft/core/data/registry/Registries.java b/game/core/src/main/java/net/minecraft/core/data/registry/Registries.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/Registries.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/Registries.java
diff --git a/src/main/java/net/minecraft/core/data/registry/Registry.java b/game/core/src/main/java/net/minecraft/core/data/registry/Registry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/Registry.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/Registry.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/HasJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/HasJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/HasJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/HasJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/RecipeBranch.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeBranch.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/RecipeBranch.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeBranch.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/RecipeEntryBase.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeEntryBase.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/RecipeEntryBase.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeEntryBase.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/RecipeGroup.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeGroup.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/RecipeGroup.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeGroup.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/RecipeNamespace.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeNamespace.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/RecipeNamespace.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeNamespace.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/RecipeRegistry.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeRegistry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/RecipeRegistry.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeRegistry.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/RecipeSymbol.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeSymbol.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/RecipeSymbol.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/RecipeSymbol.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/SearchQuery.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/SearchQuery.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/SearchQuery.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/SearchQuery.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/ItemStackJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/ItemStackJsonAdapter.java
similarity index 96%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/ItemStackJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/ItemStackJsonAdapter.java
index 9319c04ae..d30aad4c1 100644
--- a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/ItemStackJsonAdapter.java
+++ b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/ItemStackJsonAdapter.java
@@ -8,7 +8,7 @@ import com.google.gson.JsonParseException;
 import com.google.gson.JsonSerializationContext;
 import com.google.gson.JsonSerializer;
 import com.mojang.logging.LogUtils;
-import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.util.HardIllegalArgumentException;
@@ -29,13 +29,12 @@ public class ItemStackJsonAdapter implements JsonDeserializer<ItemStack>, JsonSe
     @Override
     public ItemStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
         JsonObject obj = json.getAsJsonObject();
-        ItemStack stack;
         Item item;
         if (obj.has("key")) {
             String key = obj.get("key").getAsString();
             try {
                 if (key.startsWith("tile.")){
-                    item = Item.itemsList[Block.keyToIdMap.get(key)];
+                    item = Item.itemsList[Blocks.keyToIdMap.get(key)];
                 } else if (key.startsWith("item.")){
                     item = Item.itemsList[Item.nameToIdMap.get(key)];
                 } else {
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeBlastFurnaceJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeBlastFurnaceJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeBlastFurnaceJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeBlastFurnaceJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeCraftingShapedJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeCraftingShapedJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeCraftingShapedJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeCraftingShapedJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeCraftingShapelessJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeCraftingShapelessJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeCraftingShapelessJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeCraftingShapelessJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryCraftingWithToolJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryCraftingWithToolJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryCraftingWithToolJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryCraftingWithToolJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryRepairableJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryRepairableJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryRepairableJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryRepairableJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryScrapJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryScrapJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryScrapJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryScrapJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryUndyeingJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryUndyeingJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryUndyeingJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeEntryUndyeingJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeFurnaceJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeFurnaceJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeFurnaceJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeFurnaceJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeSymbolJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeSymbolJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeSymbolJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeSymbolJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeTrommelJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeTrommelJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeTrommelJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/RecipeTrommelJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/WeightedRandomBagJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/WeightedRandomBagJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/WeightedRandomBagJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/WeightedRandomBagJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/adapter/WeightedRandomLootObjectJsonAdapter.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/WeightedRandomLootObjectJsonAdapter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/adapter/WeightedRandomLootObjectJsonAdapter.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/adapter/WeightedRandomLootObjectJsonAdapter.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryBlastFurnace.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryBlastFurnace.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryBlastFurnace.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryBlastFurnace.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCrafting.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCrafting.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCrafting.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCrafting.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingDynamic.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingDynamic.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingDynamic.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingDynamic.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingShaped.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingShaped.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingShaped.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingShaped.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingShapeless.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingShapeless.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingShapeless.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingShapeless.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingWithTool.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingWithTool.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingWithTool.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryCraftingWithTool.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryFurnace.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryFurnace.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryFurnace.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryFurnace.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryLabel.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryLabel.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryLabel.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryLabel.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryLabelDye.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryLabelDye.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryLabelDye.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryLabelDye.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryMapDuplication.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryMapDuplication.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryMapDuplication.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryMapDuplication.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryRepairable.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryRepairable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryRepairable.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryRepairable.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryRepairableStackable.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryRepairableStackable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryRepairableStackable.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryRepairableStackable.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryScrap.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryScrap.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryScrap.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryScrap.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryTrommel.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryTrommel.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryTrommel.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryTrommel.java
diff --git a/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryUndyeing.java b/game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryUndyeing.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryUndyeing.java
rename to game/core/src/main/java/net/minecraft/core/data/registry/recipe/entry/RecipeEntryUndyeing.java
diff --git a/src/main/java/net/minecraft/core/data/tag/ITaggable.java b/game/core/src/main/java/net/minecraft/core/data/tag/ITaggable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/tag/ITaggable.java
rename to game/core/src/main/java/net/minecraft/core/data/tag/ITaggable.java
diff --git a/src/main/java/net/minecraft/core/data/tag/Tag.java b/game/core/src/main/java/net/minecraft/core/data/tag/Tag.java
similarity index 100%
rename from src/main/java/net/minecraft/core/data/tag/Tag.java
rename to game/core/src/main/java/net/minecraft/core/data/tag/Tag.java
diff --git a/src/main/java/net/minecraft/core/entity/ConsumedFood.java b/game/core/src/main/java/net/minecraft/core/entity/ConsumedFood.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/ConsumedFood.java
rename to game/core/src/main/java/net/minecraft/core/entity/ConsumedFood.java
diff --git a/src/main/java/net/minecraft/core/entity/Entity.java b/game/core/src/main/java/net/minecraft/core/entity/Entity.java
similarity index 98%
rename from src/main/java/net/minecraft/core/entity/Entity.java
rename to game/core/src/main/java/net/minecraft/core/entity/Entity.java
index 2f436b111..8f5c71d20 100644
--- a/src/main/java/net/minecraft/core/entity/Entity.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/Entity.java
@@ -4,6 +4,7 @@ import java.util.List;
 import java.util.Random;
 
 import net.minecraft.core.block.BlockFluid;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.util.helper.DyeColor;
 import net.minecraft.core.world.ICarriable;
@@ -631,12 +632,14 @@ public abstract class Entity
             
             this.isWalking = walkDistO != walkDist;
             
-            int walkedSteps = (int) (walkDist - nextStep);
-            if(walkedSteps > 0 && blockWalkedOn != null) {
-            	nextStep += walkedSteps;
-                if (!muteStepSounds) {
-                	world.playBlockSoundEffect(this, this.x, this.bb.minY, this.z, blockWalkedOn, EnumBlockSoundEffectType.STEP);
-                	blockWalkedOn.onEntityWalking(world, blockX, blockY, blockZ, this);
+            if (canInteract()) {
+                int walkedSteps = (int) (walkDist - nextStep);
+                if(walkedSteps > 0 && blockWalkedOn != null) {
+                    nextStep += walkedSteps;
+                    if (!muteStepSounds) {
+                        world.playBlockSoundEffect(this, this.x, this.bb.minY, this.z, blockWalkedOn, EnumBlockSoundEffectType.STEP);
+                        blockWalkedOn.onEntityWalking(world, blockX, blockY, blockZ, this);
+                    }
                 }
             }
         }
@@ -657,7 +660,7 @@ public abstract class Entity
                         int blockId = world.getBlockId(_x, _y, _z);
                         if(blockId > 0)
                         {
-                            Block.blocksList[blockId].onEntityCollidedWithBlock(world, _x, _y, _z, this);
+                            Blocks.blocksList[blockId].onEntityCollidedWithBlock(world, _x, _y, _z, this);
                         }
                     }
 
@@ -703,6 +706,10 @@ public abstract class Entity
         }
     }
 
+    public boolean canInteract() {
+        return true;
+    }
+
     protected boolean makeStepSound()
     {
         return true;
@@ -773,7 +780,7 @@ public abstract class Entity
         int j = MathHelper.floor_float(MathHelper.floor(d));
         int k = MathHelper.floor(z);
         int l = world.getBlockId(i, j, k);
-        if(l != 0 && Block.blocksList[l].blockMaterial == material)
+        if(l != 0 && Blocks.blocksList[l].blockMaterial == material)
         {
             float f = BlockFluid.getWaterVolume(world.getBlockMetadata(i, j, k)) - 0.2F;
             float f1 = (float)(j + 1) - f;
diff --git a/src/main/java/net/minecraft/core/entity/EntityDispatcher.java b/game/core/src/main/java/net/minecraft/core/entity/EntityDispatcher.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/EntityDispatcher.java
rename to game/core/src/main/java/net/minecraft/core/entity/EntityDispatcher.java
diff --git a/src/main/java/net/minecraft/core/entity/EntityFallingBlock.java b/game/core/src/main/java/net/minecraft/core/entity/EntityFallingBlock.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/EntityFallingBlock.java
rename to game/core/src/main/java/net/minecraft/core/entity/EntityFallingBlock.java
diff --git a/src/main/java/net/minecraft/core/entity/EntityFishingBobber.java b/game/core/src/main/java/net/minecraft/core/entity/EntityFishingBobber.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/EntityFishingBobber.java
rename to game/core/src/main/java/net/minecraft/core/entity/EntityFishingBobber.java
diff --git a/src/main/java/net/minecraft/core/entity/EntityItem.java b/game/core/src/main/java/net/minecraft/core/entity/EntityItem.java
similarity index 98%
rename from src/main/java/net/minecraft/core/entity/EntityItem.java
rename to game/core/src/main/java/net/minecraft/core/entity/EntityItem.java
index a48f94408..218c8ead2 100644
--- a/src/main/java/net/minecraft/core/entity/EntityItem.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/EntityItem.java
@@ -119,7 +119,7 @@ public class EntityItem extends Entity
             int blockId = world.getBlockId(MathHelper.floor(x), MathHelper.floor(bb.minY) - 1, MathHelper.floor(z));
             if(blockId > 0)
             {
-                friction = Block.blocksList[blockId].friction * 0.98F;
+                friction = Blocks.blocksList[blockId].friction * 0.98F;
             }
         }
         xd *= friction;
@@ -201,7 +201,7 @@ public class EntityItem extends Entity
 
 			if(item.stackSize < previousStackSize) {
 				if(item.itemID < 16384) {
-					if(Block.blocksList[item.itemID] instanceof BlockLog) {
+					if(Blocks.blocksList[item.itemID] instanceof BlockLog) {
 						player.triggerAchievement(Achievements.MINE_WOOD);
 					}
 				}
diff --git a/src/main/java/net/minecraft/core/entity/EntityLightning.java b/game/core/src/main/java/net/minecraft/core/entity/EntityLightning.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/EntityLightning.java
rename to game/core/src/main/java/net/minecraft/core/entity/EntityLightning.java
diff --git a/src/main/java/net/minecraft/core/entity/EntityPainting.java b/game/core/src/main/java/net/minecraft/core/entity/EntityPainting.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/EntityPainting.java
rename to game/core/src/main/java/net/minecraft/core/entity/EntityPainting.java
diff --git a/src/main/java/net/minecraft/core/entity/EntityPrimedTNT.java b/game/core/src/main/java/net/minecraft/core/entity/EntityPrimedTNT.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/EntityPrimedTNT.java
rename to game/core/src/main/java/net/minecraft/core/entity/EntityPrimedTNT.java
diff --git a/src/main/java/net/minecraft/core/entity/Mob.java b/game/core/src/main/java/net/minecraft/core/entity/Mob.java
similarity index 97%
rename from src/main/java/net/minecraft/core/entity/Mob.java
rename to game/core/src/main/java/net/minecraft/core/entity/Mob.java
index eee37609e..b23d62aab 100644
--- a/src/main/java/net/minecraft/core/entity/Mob.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/Mob.java
@@ -170,6 +170,13 @@ public abstract class Mob extends Entity
         return variantList.getSkinReference(basePath + "variants.json", "0", getSkinVariant());
     }
 
+    public boolean cycleVariant() {
+        String basePath = String.format("/assets/%s/textures/entity/%s/", textureIdentifier.namespace, textureIdentifier.value);
+        int skinVar = getSkinVariant();
+        setSkinVariant(Global.accessor.getSkinVariantList().nextSkinVariant(basePath + "variants.json", skinVar));
+        return skinVar != getSkinVariant();
+    }
+
     public int getSkinVariant() {
         return Byte.toUnsignedInt(entityData.getByte(DATA_VARIANT));
     }
@@ -692,7 +699,7 @@ public abstract class Mob extends Entity
             int j = world.getBlockId(MathHelper.floor(x), MathHelper.floor(y - 0.2D - (double) heightOffset), MathHelper.floor(z));
             if(j > 0)
             {
-                world.playBlockSoundEffect(this, this.x, this.y - this.heightOffset, this.z, Block.blocksList[j], EnumBlockSoundEffectType.ENTITY_LAND);
+                world.playBlockSoundEffect(this, this.x, this.y - this.heightOffset, this.z, Blocks.blocksList[j], EnumBlockSoundEffectType.ENTITY_LAND);
             }
         }
     }
@@ -763,8 +770,7 @@ public abstract class Mob extends Entity
             Block b = world.getBlock(blockX, blockY, blockZ);
             float depth = 0.6f;
             if (b != null) {
-                b.setBlockBoundsBasedOnState(world, blockX, blockY, blockZ);
-                depth = 1 - (float) b.maxY;
+                depth = 1 - (float) b.getBlockBoundsFromState(world, blockX, blockY, blockZ).maxY;
             }
             if(horizontalCollision && isFree(xd, ((yd + depth + 0.2) - y) + d, zd))
             {
@@ -785,7 +791,7 @@ public abstract class Mob extends Entity
                 yd = 0.3D;
             }
         }
-        else if (canSkate() && Block.blocksList[floorBlockId] != null && Block.blocksList[floorBlockId].hasTag(BlockTags.SKATEABLE))
+        else if (canSkate() && Blocks.blocksList[floorBlockId] != null && Blocks.blocksList[floorBlockId].hasTag(BlockTags.SKATEABLE))
         {
             muteStepSounds = true;
             isSkating = true;
@@ -829,7 +835,7 @@ public abstract class Mob extends Entity
                 movementScale = 0.5460001F;
                 if(floorBlockId > 0)
                 {
-                    movementScale = Block.blocksList[floorBlockId].friction * 0.91F;
+                    movementScale = Blocks.blocksList[floorBlockId].friction * 0.91F;
                 }
             }
 
@@ -841,7 +847,7 @@ public abstract class Mob extends Entity
                 movementScale = 0.5460001F;
                 if(floorBlockId > 0)
                 {
-                    movementScale = Block.blocksList[floorBlockId].friction * 0.91F;
+                    movementScale = Blocks.blocksList[floorBlockId].friction * 0.91F;
                 }
 
             }
@@ -1248,7 +1254,7 @@ public abstract class Mob extends Entity
         Vec3 head = getPosition(partialTick, true);
         Vec3 viewDirection = getViewVector(partialTick);
         Vec3 furthestPoint = head.add(viewDirection.x * distance, viewDirection.y * distance, viewDirection.z * distance);
-        return world.checkBlockCollisionBetweenPoints(head, furthestPoint, collideWithFluids, ignoreNonColliderBlocks);
+        return world.checkBlockCollisionBetweenPoints(head, furthestPoint, collideWithFluids, ignoreNonColliderBlocks, false);
     }
 
     public int getMaxSpawnedInChunk()
diff --git a/src/main/java/net/minecraft/core/entity/MobFlying.java b/game/core/src/main/java/net/minecraft/core/entity/MobFlying.java
similarity index 92%
rename from src/main/java/net/minecraft/core/entity/MobFlying.java
rename to game/core/src/main/java/net/minecraft/core/entity/MobFlying.java
index c5bec5d4a..538b5a8bc 100644
--- a/src/main/java/net/minecraft/core/entity/MobFlying.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/MobFlying.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.entity;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.world.World;
 
@@ -44,7 +45,7 @@ public class MobFlying extends Mob
                 int i = world.getBlockId(MathHelper.floor(x), MathHelper.floor(bb.minY) - 1, MathHelper.floor(z));
                 if(i > 0)
                 {
-                    f2 = Block.blocksList[i].friction * 0.91F;
+                    f2 = Blocks.blocksList[i].friction * 0.91F;
                 }
             }
             float f3 = 0.1627714F / (f2 * f2 * f2);
@@ -56,7 +57,7 @@ public class MobFlying extends Mob
                 int j = world.getBlockId(MathHelper.floor(x), MathHelper.floor(bb.minY) - 1, MathHelper.floor(z));
                 if(j > 0)
                 {
-                    f2 = Block.blocksList[j].friction * 0.91F;
+                    f2 = Blocks.blocksList[j].friction * 0.91F;
                 }
             }
             move(xd, yd, zd);
diff --git a/src/main/java/net/minecraft/core/entity/MobPathfinder.java b/game/core/src/main/java/net/minecraft/core/entity/MobPathfinder.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/MobPathfinder.java
rename to game/core/src/main/java/net/minecraft/core/entity/MobPathfinder.java
diff --git a/src/main/java/net/minecraft/core/entity/SkinVariantList.java b/game/core/src/main/java/net/minecraft/core/entity/SkinVariantList.java
similarity index 76%
rename from src/main/java/net/minecraft/core/entity/SkinVariantList.java
rename to game/core/src/main/java/net/minecraft/core/entity/SkinVariantList.java
index 30549e9d5..e385f4ebf 100644
--- a/src/main/java/net/minecraft/core/entity/SkinVariantList.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/SkinVariantList.java
@@ -5,5 +5,5 @@ import org.jetbrains.annotations.Nullable;
 
 public abstract class SkinVariantList {
     public abstract @NotNull String getSkinReference(@Nullable String variantJsonPath, @NotNull String defaultKey, int skinIndex);
-
+    public abstract int nextSkinVariant(@Nullable String variantJsonPath, int skinIndex);
 }
diff --git a/src/main/java/net/minecraft/core/entity/SpawnListEntry.java b/game/core/src/main/java/net/minecraft/core/entity/SpawnListEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/SpawnListEntry.java
rename to game/core/src/main/java/net/minecraft/core/entity/SpawnListEntry.java
diff --git a/src/main/java/net/minecraft/core/entity/animal/Creature.java b/game/core/src/main/java/net/minecraft/core/entity/animal/Creature.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/animal/Creature.java
rename to game/core/src/main/java/net/minecraft/core/entity/animal/Creature.java
diff --git a/src/main/java/net/minecraft/core/entity/animal/MobAnimal.java b/game/core/src/main/java/net/minecraft/core/entity/animal/MobAnimal.java
similarity index 93%
rename from src/main/java/net/minecraft/core/entity/animal/MobAnimal.java
rename to game/core/src/main/java/net/minecraft/core/entity/animal/MobAnimal.java
index cf444dc60..28459fb84 100644
--- a/src/main/java/net/minecraft/core/entity/animal/MobAnimal.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/animal/MobAnimal.java
@@ -88,9 +88,9 @@ public abstract class MobAnimal extends MobPathfinder
         int y = MathHelper.floor(bb.minY);
         int z = MathHelper.floor(this.z);
         int id = world.getBlockId(x, y - 1, z);
-        if (Block.blocksList[id] != null)
+        if (Blocks.blocksList[id] != null)
         {
-            return Block.blocksList[id].hasTag(BlockTags.PASSIVE_MOBS_SPAWN) && world.getFullBlockLightValue(x, y, z) > 8 && super.canSpawnHere();
+            return Blocks.blocksList[id].hasTag(BlockTags.PASSIVE_MOBS_SPAWN) && world.getFullBlockLightValue(x, y, z) > 8 && super.canSpawnHere();
         }
         return false;
     }
diff --git a/src/main/java/net/minecraft/core/entity/animal/MobChicken.java b/game/core/src/main/java/net/minecraft/core/entity/animal/MobChicken.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/animal/MobChicken.java
rename to game/core/src/main/java/net/minecraft/core/entity/animal/MobChicken.java
diff --git a/src/main/java/net/minecraft/core/entity/animal/MobCow.java b/game/core/src/main/java/net/minecraft/core/entity/animal/MobCow.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/animal/MobCow.java
rename to game/core/src/main/java/net/minecraft/core/entity/animal/MobCow.java
diff --git a/src/main/java/net/minecraft/core/entity/animal/MobFireflyCluster.java b/game/core/src/main/java/net/minecraft/core/entity/animal/MobFireflyCluster.java
similarity index 96%
rename from src/main/java/net/minecraft/core/entity/animal/MobFireflyCluster.java
rename to game/core/src/main/java/net/minecraft/core/entity/animal/MobFireflyCluster.java
index a86d846ed..fa28fdcc4 100644
--- a/src/main/java/net/minecraft/core/entity/animal/MobFireflyCluster.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/animal/MobFireflyCluster.java
@@ -2,6 +2,7 @@ package net.minecraft.core.entity.animal;
 
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.MobFlying;
@@ -242,7 +243,7 @@ public class MobFireflyCluster extends MobFlying
         if(world.getCurrentWeather() != null && world.getCurrentWeather().doMobsSpawnInDaylight)
             blockLight = blockLight/2;
 
-        return  blockLight <= 4 && (Block.blocksList[id] != null && Block.blocksList[id].hasTag(BlockTags.FIREFLIES_CAN_SPAWN)) && world.checkIfAABBIsClear(bb.grow(-2f, 0f, -2f));
+        return  blockLight <= 4 && (Blocks.blocksList[id] != null && Blocks.blocksList[id].hasTag(BlockTags.FIREFLIES_CAN_SPAWN)) && world.checkIfAABBIsClear(bb.grow(-2f, 0f, -2f));
     }
 
     @Override
@@ -425,6 +426,14 @@ public class MobFireflyCluster extends MobFlying
     public boolean canRide() {
     	return false;
     }
+
+	@Override
+	public boolean cycleVariant() {
+		MobFireflyCluster.FireflyColor color = MobFireflyCluster.FireflyColor.fireFlyColors.get(getColor().getId() + 1 % MobFireflyCluster.FireflyColor.fireFlyColors.size());
+		setColor(color == null ? MobFireflyCluster.FireflyColor.GREEN : color);
+		return true;
+	}
+
 	public static class FireflyColor {
 		public static Map<Integer, FireflyColor> fireFlyColors = new HashMap<>();
 		public static FireflyColor GREEN = register(new FireflyColor(0, "fireflyGreen", new Biome[] {
diff --git a/src/main/java/net/minecraft/core/entity/animal/MobPig.java b/game/core/src/main/java/net/minecraft/core/entity/animal/MobPig.java
similarity index 94%
rename from src/main/java/net/minecraft/core/entity/animal/MobPig.java
rename to game/core/src/main/java/net/minecraft/core/entity/animal/MobPig.java
index 3f0124453..b1e97986e 100644
--- a/src/main/java/net/minecraft/core/entity/animal/MobPig.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/animal/MobPig.java
@@ -3,6 +3,7 @@ package net.minecraft.core.entity.animal;
 import net.minecraft.core.WeightedRandomLootObject;
 import net.minecraft.core.achievement.Achievements;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.entity.EntityLightning;
 import net.minecraft.core.entity.monster.MobZombiePig;
@@ -139,10 +140,10 @@ public class MobPig extends MobAnimal
     @Override
     public boolean isFavouriteItem(ItemStack itemStack)
     {
-        if(itemStack == null || itemStack.itemID >= Block.blocksList.length)
+        if(itemStack == null || itemStack.itemID >= Blocks.blocksList.length)
             return false;
 
-        return Block.blocksList[itemStack.itemID].hasTag(BlockTags.PIGS_FAVOURITE_BLOCK);
+        return Blocks.blocksList[itemStack.itemID].hasTag(BlockTags.PIGS_FAVOURITE_BLOCK);
     }
     public List<WeightedRandomLootObject> burningMobDrops = new ArrayList<>();
 }
diff --git a/src/main/java/net/minecraft/core/entity/animal/MobSheep.java b/game/core/src/main/java/net/minecraft/core/entity/animal/MobSheep.java
similarity index 98%
rename from src/main/java/net/minecraft/core/entity/animal/MobSheep.java
rename to game/core/src/main/java/net/minecraft/core/entity/animal/MobSheep.java
index 78ad081b8..110088d9f 100644
--- a/src/main/java/net/minecraft/core/entity/animal/MobSheep.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/animal/MobSheep.java
@@ -279,10 +279,10 @@ public class MobSheep extends MobAnimal
     @Override
     public boolean isFavouriteItem(ItemStack itemStack)
     {
-        if(itemStack == null || itemStack.itemID >= Block.blocksList.length)
+        if(itemStack == null || itemStack.itemID >= Blocks.blocksList.length)
             return false;
 
-        return Block.blocksList[itemStack.itemID].hasTag(BlockTags.SHEEPS_FAVOURITE_BLOCK);
+        return Blocks.blocksList[itemStack.itemID].hasTag(BlockTags.SHEEPS_FAVOURITE_BLOCK);
     }
 
     public void setGrowthTimer(int growthTimer){
diff --git a/src/main/java/net/minecraft/core/entity/animal/MobSquid.java b/game/core/src/main/java/net/minecraft/core/entity/animal/MobSquid.java
similarity index 98%
rename from src/main/java/net/minecraft/core/entity/animal/MobSquid.java
rename to game/core/src/main/java/net/minecraft/core/entity/animal/MobSquid.java
index d7375d80d..c586e6ab7 100644
--- a/src/main/java/net/minecraft/core/entity/animal/MobSquid.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/animal/MobSquid.java
@@ -2,6 +2,7 @@ package net.minecraft.core.entity.animal;
 
 import net.minecraft.core.WeightedRandomLootObject;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.item.Items;
@@ -206,7 +207,7 @@ public class MobSquid extends MobWaterAnimal
                     for(int _z = minZ; _z <= maxZ; _z++)
                     {
                         int blockId = world.getBlockId(_x, _y, _z);
-                        if(blockId != 0 && Block.blocksList[blockId].blockMaterial != Material.water)
+                        if(blockId != 0 && Blocks.blocksList[blockId].blockMaterial != Material.water)
                         {
                             return true;
                         }
diff --git a/src/main/java/net/minecraft/core/entity/animal/MobWaterAnimal.java b/game/core/src/main/java/net/minecraft/core/entity/animal/MobWaterAnimal.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/animal/MobWaterAnimal.java
rename to game/core/src/main/java/net/minecraft/core/entity/animal/MobWaterAnimal.java
diff --git a/src/main/java/net/minecraft/core/entity/animal/MobWolf.java b/game/core/src/main/java/net/minecraft/core/entity/animal/MobWolf.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/animal/MobWolf.java
rename to game/core/src/main/java/net/minecraft/core/entity/animal/MobWolf.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/Enemy.java b/game/core/src/main/java/net/minecraft/core/entity/monster/Enemy.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/Enemy.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/Enemy.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobCreeper.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobCreeper.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobCreeper.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobCreeper.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobGhast.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobGhast.java
similarity index 99%
rename from src/main/java/net/minecraft/core/entity/monster/MobGhast.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobGhast.java
index de9506e2d..bfaf359bf 100644
--- a/src/main/java/net/minecraft/core/entity/monster/MobGhast.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/monster/MobGhast.java
@@ -188,6 +188,8 @@ public class MobGhast extends MobFlying
             if(attackCharge > 0)
             {
                 attackCharge--;
+            } else {
+                targetedEntity = null;
             }
         } else
         {
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobGiant.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobGiant.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobGiant.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobGiant.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobHuman.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobHuman.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobHuman.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobHuman.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobMonster.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobMonster.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobMonster.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobMonster.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobScorpion.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobScorpion.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobScorpion.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobScorpion.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobSkeleton.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobSkeleton.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobSkeleton.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobSkeleton.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobSlime.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobSlime.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobSlime.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobSlime.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobSnowman.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobSnowman.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobSnowman.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobSnowman.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobSpider.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobSpider.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobSpider.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobSpider.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobZombie.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobZombie.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobZombie.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobZombie.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobZombieArmored.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobZombieArmored.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobZombieArmored.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobZombieArmored.java
diff --git a/src/main/java/net/minecraft/core/entity/monster/MobZombiePig.java b/game/core/src/main/java/net/minecraft/core/entity/monster/MobZombiePig.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/monster/MobZombiePig.java
rename to game/core/src/main/java/net/minecraft/core/entity/monster/MobZombiePig.java
diff --git a/src/main/java/net/minecraft/core/entity/player/Player.java b/game/core/src/main/java/net/minecraft/core/entity/player/Player.java
similarity index 99%
rename from src/main/java/net/minecraft/core/entity/player/Player.java
rename to game/core/src/main/java/net/minecraft/core/entity/player/Player.java
index d9638f7a9..0b8c2b39e 100644
--- a/src/main/java/net/minecraft/core/entity/player/Player.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/player/Player.java
@@ -272,6 +272,11 @@ public abstract class Player extends Mob
         craftingInventory = inventorySlots;
     }
 
+    @Override
+    public boolean canInteract() {
+        return getGamemode().canInteract() && isAlive();
+    }
+
     @Override
 	public void rideTick()
     {
diff --git a/src/main/java/net/minecraft/core/entity/projectile/Projectile.java b/game/core/src/main/java/net/minecraft/core/entity/projectile/Projectile.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/projectile/Projectile.java
rename to game/core/src/main/java/net/minecraft/core/entity/projectile/Projectile.java
diff --git a/src/main/java/net/minecraft/core/entity/projectile/ProjectileArrow.java b/game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileArrow.java
similarity index 96%
rename from src/main/java/net/minecraft/core/entity/projectile/ProjectileArrow.java
rename to game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileArrow.java
index ccd0b4b41..02853f6af 100644
--- a/src/main/java/net/minecraft/core/entity/projectile/ProjectileArrow.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileArrow.java
@@ -118,9 +118,8 @@ public class ProjectileArrow extends Projectile
         Block block = world.getBlock(xTile, yTile, zTile);
         if(block != null)
         {
-            block.setBlockBoundsBasedOnState(world, xTile, yTile, zTile);
-            AABB axisalignedbb = block.getCollisionBoundingBoxFromPool(world, xTile, yTile, zTile);
-            if(axisalignedbb != null && axisalignedbb.contains(Vec3.getTempVec3(x, y, z)))
+            AABB aabb = block.getCollisionBoundingBoxFromPool(world, xTile, yTile, zTile);
+            if(aabb != null && aabb.contains(Vec3.getTempVec3(x, y, z)))
             {
                 setGrounded(true);
             }
@@ -156,7 +155,7 @@ public class ProjectileArrow extends Projectile
     public HitResult getHitResult(){
         Vec3 oldPosition = Vec3.getTempVec3(x, y, z);
         Vec3 newPosition = Vec3.getTempVec3(x + xd, y + yd, z + zd);
-        return world.checkBlockCollisionBetweenPoints(oldPosition, newPosition, false, true);
+        return world.checkBlockCollisionBetweenPoints(oldPosition, newPosition, false, true, false);
     }
     public void onHit(HitResult hitResult){
         if(hitResult.entity != null)
diff --git a/src/main/java/net/minecraft/core/entity/projectile/ProjectileArrowGolden.java b/game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileArrowGolden.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/projectile/ProjectileArrowGolden.java
rename to game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileArrowGolden.java
diff --git a/src/main/java/net/minecraft/core/entity/projectile/ProjectileArrowPurple.java b/game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileArrowPurple.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/projectile/ProjectileArrowPurple.java
rename to game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileArrowPurple.java
diff --git a/src/main/java/net/minecraft/core/entity/projectile/ProjectileCannonball.java b/game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileCannonball.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/projectile/ProjectileCannonball.java
rename to game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileCannonball.java
diff --git a/src/main/java/net/minecraft/core/entity/projectile/ProjectileCannonballBouncy.java b/game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileCannonballBouncy.java
similarity index 99%
rename from src/main/java/net/minecraft/core/entity/projectile/ProjectileCannonballBouncy.java
rename to game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileCannonballBouncy.java
index f4b2abd9a..ffcd35bb6 100644
--- a/src/main/java/net/minecraft/core/entity/projectile/ProjectileCannonballBouncy.java
+++ b/game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileCannonballBouncy.java
@@ -47,7 +47,7 @@ public class ProjectileCannonballBouncy extends ProjectileCannonball
         // Check for block collision
         Vec3 currentPos = Vec3.getTempVec3(x, y, z);
         Vec3 nextPos = Vec3.getTempVec3(x + xd, y + yd - 0.25f, z + zd);
-        HitResult hit = world.checkBlockCollisionBetweenPoints(currentPos, nextPos, false, true);
+        HitResult hit = world.checkBlockCollisionBetweenPoints(currentPos, nextPos, false, true, false);
         if(hit != null)
         {
             if (hit.hitType == HitResult.HitType.TILE)
diff --git a/src/main/java/net/minecraft/core/entity/projectile/ProjectileEgg.java b/game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileEgg.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/projectile/ProjectileEgg.java
rename to game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileEgg.java
diff --git a/src/main/java/net/minecraft/core/entity/projectile/ProjectileFireball.java b/game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileFireball.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/projectile/ProjectileFireball.java
rename to game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileFireball.java
diff --git a/src/main/java/net/minecraft/core/entity/projectile/ProjectilePebble.java b/game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectilePebble.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/projectile/ProjectilePebble.java
rename to game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectilePebble.java
diff --git a/src/main/java/net/minecraft/core/entity/projectile/ProjectileSnowball.java b/game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileSnowball.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/projectile/ProjectileSnowball.java
rename to game/core/src/main/java/net/minecraft/core/entity/projectile/ProjectileSnowball.java
diff --git a/src/main/java/net/minecraft/core/entity/vehicle/EntityBoat.java b/game/core/src/main/java/net/minecraft/core/entity/vehicle/EntityBoat.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/vehicle/EntityBoat.java
rename to game/core/src/main/java/net/minecraft/core/entity/vehicle/EntityBoat.java
diff --git a/src/main/java/net/minecraft/core/entity/vehicle/MinecartEntity.java b/game/core/src/main/java/net/minecraft/core/entity/vehicle/MinecartEntity.java
similarity index 100%
rename from src/main/java/net/minecraft/core/entity/vehicle/MinecartEntity.java
rename to game/core/src/main/java/net/minecraft/core/entity/vehicle/MinecartEntity.java
diff --git a/src/main/java/net/minecraft/core/enums/ArtType.java b/game/core/src/main/java/net/minecraft/core/enums/ArtType.java
similarity index 100%
rename from src/main/java/net/minecraft/core/enums/ArtType.java
rename to game/core/src/main/java/net/minecraft/core/enums/ArtType.java
diff --git a/src/main/java/net/minecraft/core/enums/ChatVisibility.java b/game/core/src/main/java/net/minecraft/core/enums/ChatVisibility.java
similarity index 100%
rename from src/main/java/net/minecraft/core/enums/ChatVisibility.java
rename to game/core/src/main/java/net/minecraft/core/enums/ChatVisibility.java
diff --git a/src/main/java/net/minecraft/core/enums/Difficulty.java b/game/core/src/main/java/net/minecraft/core/enums/Difficulty.java
similarity index 100%
rename from src/main/java/net/minecraft/core/enums/Difficulty.java
rename to game/core/src/main/java/net/minecraft/core/enums/Difficulty.java
diff --git a/src/main/java/net/minecraft/core/enums/EnumBlockSoundEffectType.java b/game/core/src/main/java/net/minecraft/core/enums/EnumBlockSoundEffectType.java
similarity index 95%
rename from src/main/java/net/minecraft/core/enums/EnumBlockSoundEffectType.java
rename to game/core/src/main/java/net/minecraft/core/enums/EnumBlockSoundEffectType.java
index ee3b6950f..5eb3b78ce 100644
--- a/src/main/java/net/minecraft/core/enums/EnumBlockSoundEffectType.java
+++ b/game/core/src/main/java/net/minecraft/core/enums/EnumBlockSoundEffectType.java
@@ -1,74 +1,74 @@
-package net.minecraft.core.enums;
-
-public enum EnumBlockSoundEffectType
-{
-    STEP {
-        @Override
-        public float modifyVolume(float volume)
-        {
-            return volume * 0.15F;
-        }
-
-        @Override
-        public float modifyPitch(float pitch)
-        {
-            return pitch;
-        }
-    },
-    PLACE {
-        @Override
-        public float modifyVolume(float volume)
-        {
-            return (volume + 1.0F) / 2.0F;
-        }
-
-        @Override
-        public float modifyPitch(float pitch)
-        {
-            return pitch * 0.8F;
-        }
-    },
-    MINE {
-        @Override
-        public float modifyVolume(float volume)
-        {
-            return (volume + 1.0F) / 2.0F;
-        }
-
-        @Override
-        public float modifyPitch(float pitch)
-        {
-            return pitch * 0.8F;
-        }
-    },
-    DIG {
-        @Override
-        public float modifyVolume(float volume)
-        {
-            return (volume + 1.0f) / 8.0f;
-        }
-
-        @Override
-        public float modifyPitch(float pitch)
-        {
-            return pitch * 0.5f;
-        }
-    },
-    ENTITY_LAND {
-        @Override
-        public float modifyVolume(float volume)
-        {
-            return volume * 0.5f;
-        }
-
-        @Override
-        public float modifyPitch(float pitch)
-        {
-            return pitch * 0.75f;
-        }
-    };
-
-    public abstract float modifyVolume(float volume);
-
-    public abstract float modifyPitch(float pitch);
-}
+package net.minecraft.core.enums;
+
+public enum EnumBlockSoundEffectType
+{
+    STEP {
+        @Override
+        public float modifyVolume(float volume)
+        {
+            return volume * 0.15F;
+        }
+
+        @Override
+        public float modifyPitch(float pitch)
+        {
+            return pitch;
+        }
+    },
+    PLACE {
+        @Override
+        public float modifyVolume(float volume)
+        {
+            return (volume + 1.0F) / 2.0F;
+        }
+
+        @Override
+        public float modifyPitch(float pitch)
+        {
+            return pitch * 0.8F;
+        }
+    },
+    MINE {
+        @Override
+        public float modifyVolume(float volume)
+        {
+            return (volume + 1.0F) / 2.0F;
+        }
+
+        @Override
+        public float modifyPitch(float pitch)
+        {
+            return pitch * 0.8F;
+        }
+    },
+    DIG {
+        @Override
+        public float modifyVolume(float volume)
+        {
+            return (volume + 1.0f) / 8.0f;
+        }
+
+        @Override
+        public float modifyPitch(float pitch)
+        {
+            return pitch * 0.5f;
+        }
+    },
+    ENTITY_LAND {
+        @Override
+        public float modifyVolume(float volume)
+        {
+            return volume * 0.5f;
+        }
+
+        @Override
+        public float modifyPitch(float pitch)
+        {
+            return pitch * 0.75f;
+        }
+    };
+
+    public abstract float modifyVolume(float volume);
+
+    public abstract float modifyPitch(float pitch);
+}
diff --git a/src/main/java/net/minecraft/core/enums/EnumDropCause.java b/game/core/src/main/java/net/minecraft/core/enums/EnumDropCause.java
similarity index 100%
rename from src/main/java/net/minecraft/core/enums/EnumDropCause.java
rename to game/core/src/main/java/net/minecraft/core/enums/EnumDropCause.java
diff --git a/src/main/java/net/minecraft/core/enums/EnumOS.java b/game/core/src/main/java/net/minecraft/core/enums/EnumOS.java
similarity index 100%
rename from src/main/java/net/minecraft/core/enums/EnumOS.java
rename to game/core/src/main/java/net/minecraft/core/enums/EnumOS.java
diff --git a/src/main/java/net/minecraft/core/enums/EnumSignPicture.java b/game/core/src/main/java/net/minecraft/core/enums/EnumSignPicture.java
similarity index 100%
rename from src/main/java/net/minecraft/core/enums/EnumSignPicture.java
rename to game/core/src/main/java/net/minecraft/core/enums/EnumSignPicture.java
diff --git a/src/main/java/net/minecraft/core/enums/EnumSleepStatus.java b/game/core/src/main/java/net/minecraft/core/enums/EnumSleepStatus.java
similarity index 100%
rename from src/main/java/net/minecraft/core/enums/EnumSleepStatus.java
rename to game/core/src/main/java/net/minecraft/core/enums/EnumSleepStatus.java
diff --git a/src/main/java/net/minecraft/core/enums/LightLayer.java b/game/core/src/main/java/net/minecraft/core/enums/LightLayer.java
similarity index 100%
rename from src/main/java/net/minecraft/core/enums/LightLayer.java
rename to game/core/src/main/java/net/minecraft/core/enums/LightLayer.java
diff --git a/src/main/java/net/minecraft/core/enums/MobCategory.java b/game/core/src/main/java/net/minecraft/core/enums/MobCategory.java
similarity index 100%
rename from src/main/java/net/minecraft/core/enums/MobCategory.java
rename to game/core/src/main/java/net/minecraft/core/enums/MobCategory.java
diff --git a/src/main/java/net/minecraft/core/enums/PlacementMode.java b/game/core/src/main/java/net/minecraft/core/enums/PlacementMode.java
similarity index 100%
rename from src/main/java/net/minecraft/core/enums/PlacementMode.java
rename to game/core/src/main/java/net/minecraft/core/enums/PlacementMode.java
diff --git a/src/main/java/net/minecraft/core/item/IArmorItem.java b/game/core/src/main/java/net/minecraft/core/item/IArmorItem.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/IArmorItem.java
rename to game/core/src/main/java/net/minecraft/core/item/IArmorItem.java
diff --git a/src/main/java/net/minecraft/core/item/IBonemealable.java b/game/core/src/main/java/net/minecraft/core/item/IBonemealable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/IBonemealable.java
rename to game/core/src/main/java/net/minecraft/core/item/IBonemealable.java
diff --git a/src/main/java/net/minecraft/core/item/IComplexItem.java b/game/core/src/main/java/net/minecraft/core/item/IComplexItem.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/IComplexItem.java
rename to game/core/src/main/java/net/minecraft/core/item/IComplexItem.java
diff --git a/src/main/java/net/minecraft/core/item/IDispensable.java b/game/core/src/main/java/net/minecraft/core/item/IDispensable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/IDispensable.java
rename to game/core/src/main/java/net/minecraft/core/item/IDispensable.java
diff --git a/src/main/java/net/minecraft/core/item/IItemConvertible.java b/game/core/src/main/java/net/minecraft/core/item/IItemConvertible.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/IItemConvertible.java
rename to game/core/src/main/java/net/minecraft/core/item/IItemConvertible.java
diff --git a/src/main/java/net/minecraft/core/item/Item.java b/game/core/src/main/java/net/minecraft/core/item/Item.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/Item.java
rename to game/core/src/main/java/net/minecraft/core/item/Item.java
diff --git a/src/main/java/net/minecraft/core/item/ItemArmor.java b/game/core/src/main/java/net/minecraft/core/item/ItemArmor.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemArmor.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemArmor.java
diff --git a/src/main/java/net/minecraft/core/item/ItemBed.java b/game/core/src/main/java/net/minecraft/core/item/ItemBed.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemBed.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemBed.java
diff --git a/src/main/java/net/minecraft/core/item/ItemBoat.java b/game/core/src/main/java/net/minecraft/core/item/ItemBoat.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemBoat.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemBoat.java
diff --git a/src/main/java/net/minecraft/core/item/ItemBow.java b/game/core/src/main/java/net/minecraft/core/item/ItemBow.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemBow.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemBow.java
diff --git a/src/main/java/net/minecraft/core/item/ItemBucket.java b/game/core/src/main/java/net/minecraft/core/item/ItemBucket.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemBucket.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemBucket.java
diff --git a/src/main/java/net/minecraft/core/item/ItemBucketEmpty.java b/game/core/src/main/java/net/minecraft/core/item/ItemBucketEmpty.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemBucketEmpty.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemBucketEmpty.java
diff --git a/src/main/java/net/minecraft/core/item/ItemBucketIceCream.java b/game/core/src/main/java/net/minecraft/core/item/ItemBucketIceCream.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemBucketIceCream.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemBucketIceCream.java
diff --git a/src/main/java/net/minecraft/core/item/ItemCoal.java b/game/core/src/main/java/net/minecraft/core/item/ItemCoal.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemCoal.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemCoal.java
diff --git a/src/main/java/net/minecraft/core/item/ItemDiscMusic.java b/game/core/src/main/java/net/minecraft/core/item/ItemDiscMusic.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemDiscMusic.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemDiscMusic.java
diff --git a/src/main/java/net/minecraft/core/item/ItemDoor.java b/game/core/src/main/java/net/minecraft/core/item/ItemDoor.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemDoor.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemDoor.java
diff --git a/src/main/java/net/minecraft/core/item/ItemDoorPainted.java b/game/core/src/main/java/net/minecraft/core/item/ItemDoorPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemDoorPainted.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemDoorPainted.java
diff --git a/src/main/java/net/minecraft/core/item/ItemDye.java b/game/core/src/main/java/net/minecraft/core/item/ItemDye.java
similarity index 94%
rename from src/main/java/net/minecraft/core/item/ItemDye.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemDye.java
index e132b95b4..cb6c392bf 100644
--- a/src/main/java/net/minecraft/core/item/ItemDye.java
+++ b/game/core/src/main/java/net/minecraft/core/item/ItemDye.java
@@ -57,7 +57,7 @@ public class ItemDye extends Item
         if(itemstack.getMetadata() == DyeColor.WHITE.itemMeta)
         {
             int id = world.getBlockId(blockX, blockY, blockZ);
-            Block block = Block.blocksList[id];
+            Block block = Blocks.blocksList[id];
             if (block instanceof IBonemealable){
                if (((IBonemealable) block).onBonemealUsed(itemstack, player, world, blockX, blockY, blockZ, side, xPlaced, yPlaced)){
                    return true;
@@ -67,7 +67,7 @@ public class ItemDye extends Item
             {
                 if(!world.isClientSide)
                 {
-                    if(Block.lightBlock[world.getBlockId(blockX, blockY + 1, blockZ)] <= 2) {
+                    if(Blocks.lightBlock[world.getBlockId(blockX, blockY + 1, blockZ)] <= 2) {
                     	int grass = Blocks.GRASS.id;
                     	if(world.dimensionData.getWorldType() == WorldTypes.OVERWORLD_RETRO) {
                     		grass = Blocks.GRASS_RETRO.id;
@@ -85,7 +85,7 @@ public class ItemDye extends Item
             {
                 if (!world.isClientSide)
                 {
-                    if(Block.lightBlock[world.getBlockId(blockX, blockY + 1, blockZ)] <= 2) {
+                    if(Blocks.lightBlock[world.getBlockId(blockX, blockY + 1, blockZ)] <= 2) {
                         int grass = Blocks.GRASS_SCORCHED.id;
                         world.setBlockWithNotify(blockX, blockY, blockZ, grass);
                         if (player == null || player.getGamemode().consumeBlocks())
@@ -97,7 +97,7 @@ public class ItemDye extends Item
                 return true;
             }
 
-            if(Block.blocksList[id] != null && Block.blocksList[id].hasTag(BlockTags.GROWS_FLOWERS))
+            if(Blocks.blocksList[id] != null && Blocks.blocksList[id].hasTag(BlockTags.GROWS_FLOWERS))
             {
                 if(!world.isClientSide)
                 {
@@ -117,7 +117,7 @@ label0:
                             l1 += ((itemRand.nextInt(3) - 1) * itemRand.nextInt(3)) / 2;
                             i2 += itemRand.nextInt(3) - 1;
                             int id1 = world.getBlockId(k1, l1 - 1, i2);
-                            if(Block.blocksList[id1] == null || !Block.blocksList[id1].hasTag(BlockTags.GROWS_FLOWERS))
+                            if(Blocks.blocksList[id1] == null || !Blocks.blocksList[id1].hasTag(BlockTags.GROWS_FLOWERS))
                             {
                                 continue label0;
                             }
diff --git a/src/main/java/net/minecraft/core/item/ItemEgg.java b/game/core/src/main/java/net/minecraft/core/item/ItemEgg.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemEgg.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemEgg.java
diff --git a/src/main/java/net/minecraft/core/item/ItemFireStriker.java b/game/core/src/main/java/net/minecraft/core/item/ItemFireStriker.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemFireStriker.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemFireStriker.java
diff --git a/src/main/java/net/minecraft/core/item/ItemFishingRod.java b/game/core/src/main/java/net/minecraft/core/item/ItemFishingRod.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemFishingRod.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemFishingRod.java
diff --git a/src/main/java/net/minecraft/core/item/ItemFlag.java b/game/core/src/main/java/net/minecraft/core/item/ItemFlag.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemFlag.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemFlag.java
diff --git a/src/main/java/net/minecraft/core/item/ItemFood.java b/game/core/src/main/java/net/minecraft/core/item/ItemFood.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemFood.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemFood.java
diff --git a/src/main/java/net/minecraft/core/item/ItemHandCannonLoaded.java b/game/core/src/main/java/net/minecraft/core/item/ItemHandCannonLoaded.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemHandCannonLoaded.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemHandCannonLoaded.java
diff --git a/src/main/java/net/minecraft/core/item/ItemHandCannonUnloaded.java b/game/core/src/main/java/net/minecraft/core/item/ItemHandCannonUnloaded.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemHandCannonUnloaded.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemHandCannonUnloaded.java
diff --git a/src/main/java/net/minecraft/core/item/ItemIceSkates.java b/game/core/src/main/java/net/minecraft/core/item/ItemIceSkates.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemIceSkates.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemIceSkates.java
diff --git a/src/main/java/net/minecraft/core/item/ItemJar.java b/game/core/src/main/java/net/minecraft/core/item/ItemJar.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemJar.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemJar.java
diff --git a/src/main/java/net/minecraft/core/item/ItemLabel.java b/game/core/src/main/java/net/minecraft/core/item/ItemLabel.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemLabel.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemLabel.java
diff --git a/src/main/java/net/minecraft/core/item/ItemMap.java b/game/core/src/main/java/net/minecraft/core/item/ItemMap.java
similarity index 96%
rename from src/main/java/net/minecraft/core/item/ItemMap.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemMap.java
index eb0789e3b..044790b29 100644
--- a/src/main/java/net/minecraft/core/item/ItemMap.java
+++ b/game/core/src/main/java/net/minecraft/core/item/ItemMap.java
@@ -7,7 +7,7 @@ import net.minecraft.core.block.material.Material;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.lang.I18n;
-import net.minecraft.core.net.packet.MapDataPacket;
+import net.minecraft.core.net.packet.PacketMapData;
 import net.minecraft.core.net.packet.Packet;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.util.helper.Side;
@@ -218,16 +218,16 @@ public class ItemMap extends Item implements IComplexItem
 								do {
 									runLoop = false;
 									id = chunk.getBlockID(_x + blockInChunkX, height, _z + blockInChunkZ);
-									if(id <= 0 || (height > 0 && Block.blocksList[id].blockMaterial.color == MaterialColor.none)) {
+									if(id <= 0 || (height > 0 && Blocks.blocksList[id].blockMaterial.color == MaterialColor.none)) {
 										runLoop = true;
 										height--;
 									}
 								} while (runLoop);
-								if(Block.blocksList[id].blockMaterial == Material.water) {
+								if(Blocks.blocksList[id].blockMaterial == Material.water) {
 									int _y = height;
                                     int _blockID = chunk.getBlockID(_x + blockInChunkX, _y--, _z + blockInChunkZ);
                                     waterDepth++;
-                                    while (_y > 0 && _blockID > 0 && Block.blocksList[_blockID].blockMaterial == Material.water) {
+                                    while (_y > 0 && _blockID > 0 && Blocks.blocksList[_blockID].blockMaterial == Material.water) {
                                         _blockID = chunk.getBlockID(_x + blockInChunkX, _y--, _z + blockInChunkZ);
                                         waterDepth++;
                                     }
@@ -270,7 +270,7 @@ public class ItemMap extends Item implements IComplexItem
 				
 				int colorIndex = 0;
 				if(id > 0) {
-					MaterialColor mapcolor = Block.blocksList[id].blockMaterial.color;
+					MaterialColor mapcolor = Blocks.blocksList[id].blockMaterial.color;
 					if(mapcolor == MaterialColor.water) {
 						double d3 = (double) waterDepth * 0.1D + (double) (x + z & 1) * 0.2D;
 						brightness = 1;
@@ -281,7 +281,7 @@ public class ItemMap extends Item implements IComplexItem
 							brightness = 0;
 						}
 					}
-					colorIndex = MaterialColor.getColorIndexFromBlock(Block.blocksList[id], meta);
+					colorIndex = MaterialColor.getColorIndexFromBlock(Blocks.blocksList[id], meta);
 				}
 				previousPixelHeight = pixelHeight;
 				if(!previousChunkLoaded) {
@@ -367,7 +367,7 @@ public class ItemMap extends Item implements IComplexItem
 				return null;
 			} else
 			{
-				return new MapDataPacket((short)Items.MAP.id, (short)itemstack.getMetadata(), getScale(itemstack), mapDataBytes, itemMapSavedData.mapWaypoints);
+				return new PacketMapData((short)Items.MAP.id, (short)itemstack.getMetadata(), getScale(itemstack), mapDataBytes, itemMapSavedData.mapWaypoints);
 			}
 		}
 		return null;
diff --git a/src/main/java/net/minecraft/core/item/ItemMinecart.java b/game/core/src/main/java/net/minecraft/core/item/ItemMinecart.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemMinecart.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemMinecart.java
diff --git a/src/main/java/net/minecraft/core/item/ItemPaintBrush.java b/game/core/src/main/java/net/minecraft/core/item/ItemPaintBrush.java
similarity index 98%
rename from src/main/java/net/minecraft/core/item/ItemPaintBrush.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemPaintBrush.java
index 5a2468b75..79d9dac51 100644
--- a/src/main/java/net/minecraft/core/item/ItemPaintBrush.java
+++ b/game/core/src/main/java/net/minecraft/core/item/ItemPaintBrush.java
@@ -2,6 +2,7 @@ package net.minecraft.core.item;
 
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.IPaintable;
 import net.minecraft.core.block.IPainted;
 import net.minecraft.core.block.entity.TileEntityActivator;
@@ -31,7 +32,7 @@ public class ItemPaintBrush extends Item {
         }
 
         final int id = world.getBlockId(blockX, blockY, blockZ);
-        final Block block = Block.getBlock(id);
+        final Block block = Blocks.getBlock(id);
 
         if (block instanceof IPaintable) {
             final IPaintable paintable = (IPaintable) block;
diff --git a/src/main/java/net/minecraft/core/item/ItemPainting.java b/game/core/src/main/java/net/minecraft/core/item/ItemPainting.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemPainting.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemPainting.java
diff --git a/src/main/java/net/minecraft/core/item/ItemPebble.java b/game/core/src/main/java/net/minecraft/core/item/ItemPebble.java
similarity index 97%
rename from src/main/java/net/minecraft/core/item/ItemPebble.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemPebble.java
index 4fa0a2ffa..db97cf0ad 100644
--- a/src/main/java/net/minecraft/core/item/ItemPebble.java
+++ b/game/core/src/main/java/net/minecraft/core/item/ItemPebble.java
@@ -42,7 +42,7 @@ public class ItemPebble extends Item implements IDispensable
     {
         int id = world.getBlockId(blockX, blockY, blockZ);
         int meta = world.getBlockMetadata(blockX, blockY, blockZ);
-        if (id != Blocks.OVERLAY_PEBBLES.id && Block.blocksList[id] != null && Block.blocksList[id].hasTag(BlockTags.PLACE_OVERWRITES))
+        if (id != Blocks.OVERLAY_PEBBLES.id && Blocks.blocksList[id] != null && Blocks.blocksList[id].hasTag(BlockTags.PLACE_OVERWRITES))
         {
             id = 0;
             meta = 0;
diff --git a/src/main/java/net/minecraft/core/item/ItemPlaceable.java b/game/core/src/main/java/net/minecraft/core/item/ItemPlaceable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemPlaceable.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemPlaceable.java
diff --git a/src/main/java/net/minecraft/core/item/ItemQuiver.java b/game/core/src/main/java/net/minecraft/core/item/ItemQuiver.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemQuiver.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemQuiver.java
diff --git a/src/main/java/net/minecraft/core/item/ItemQuiverEndless.java b/game/core/src/main/java/net/minecraft/core/item/ItemQuiverEndless.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemQuiverEndless.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemQuiverEndless.java
diff --git a/src/main/java/net/minecraft/core/item/ItemRope.java b/game/core/src/main/java/net/minecraft/core/item/ItemRope.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemRope.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemRope.java
diff --git a/src/main/java/net/minecraft/core/item/ItemSaddle.java b/game/core/src/main/java/net/minecraft/core/item/ItemSaddle.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemSaddle.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemSaddle.java
diff --git a/src/main/java/net/minecraft/core/item/ItemSeeds.java b/game/core/src/main/java/net/minecraft/core/item/ItemSeeds.java
similarity index 95%
rename from src/main/java/net/minecraft/core/item/ItemSeeds.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemSeeds.java
index 981f2392a..b40949425 100644
--- a/src/main/java/net/minecraft/core/item/ItemSeeds.java
+++ b/game/core/src/main/java/net/minecraft/core/item/ItemSeeds.java
@@ -30,7 +30,7 @@ public class ItemSeeds extends Item {
 		}
 		if(world.getBlockId(blockX, blockY - 1, blockZ) == Blocks.FARMLAND_DIRT.id && world.canPlaceInsideBlock(blockX, blockY, blockZ)) {
 			if(world.setBlockWithNotify(blockX, blockY, blockZ, cropsId)) {
-				world.playBlockSoundEffect(entityplayer, blockX + 0.5F, blockY + 0.5F, blockZ + 0.5F, Block.blocksList[cropsId], EnumBlockSoundEffectType.PLACE);
+				world.playBlockSoundEffect(entityplayer, blockX + 0.5F, blockY + 0.5F, blockZ + 0.5F, Blocks.blocksList[cropsId], EnumBlockSoundEffectType.PLACE);
 				itemstack.consumeItem(entityplayer);
 				return true;
 			}
diff --git a/src/main/java/net/minecraft/core/item/ItemSign.java b/game/core/src/main/java/net/minecraft/core/item/ItemSign.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemSign.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemSign.java
diff --git a/src/main/java/net/minecraft/core/item/ItemSnowball.java b/game/core/src/main/java/net/minecraft/core/item/ItemSnowball.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemSnowball.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemSnowball.java
diff --git a/src/main/java/net/minecraft/core/item/ItemSoup.java b/game/core/src/main/java/net/minecraft/core/item/ItemSoup.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemSoup.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemSoup.java
diff --git a/src/main/java/net/minecraft/core/item/ItemStack.java b/game/core/src/main/java/net/minecraft/core/item/ItemStack.java
similarity index 99%
rename from src/main/java/net/minecraft/core/item/ItemStack.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemStack.java
index 8cd3acf39..f62dbcf25 100644
--- a/src/main/java/net/minecraft/core/item/ItemStack.java
+++ b/game/core/src/main/java/net/minecraft/core/item/ItemStack.java
@@ -161,10 +161,10 @@ public final class ItemStack {
 		int version = nbt.getInteger("Version");
 		
 		if(expanded == 0 && itemID >= 256) {
-			itemID += (Block.blocksList.length - 256);
+			itemID += (Blocks.blocksList.length - 256);
 		}
 		
-		if(version < 19133 && itemID < Block.blocksList.length) {
+		if(version < 19133 && itemID < Blocks.blocksList.length) {
 			short[] id = new short[] { (short) itemID };
 			byte[] meta = new byte[] { (byte) metadata };
 			ChunkConverter.converters[0].convertBlocksAndMetadata(id, meta);
diff --git a/src/main/java/net/minecraft/core/item/ItemWandSpawner.java b/game/core/src/main/java/net/minecraft/core/item/ItemWandSpawner.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/ItemWandSpawner.java
rename to game/core/src/main/java/net/minecraft/core/item/ItemWandSpawner.java
diff --git a/src/main/java/net/minecraft/core/item/Items.java b/game/core/src/main/java/net/minecraft/core/item/Items.java
similarity index 99%
rename from src/main/java/net/minecraft/core/item/Items.java
rename to game/core/src/main/java/net/minecraft/core/item/Items.java
index a2398ec2e..e4a528f69 100644
--- a/src/main/java/net/minecraft/core/item/Items.java
+++ b/game/core/src/main/java/net/minecraft/core/item/Items.java
@@ -201,13 +201,13 @@ public final class Items {
         for (int i = 0; i < Item.itemsList.length; i++) {
             Item item = Item.getItem(i);
             if (item == null) continue;
-            if (i < Block.blocksList.length && !Block.getBlock(i).getEnableStats()){
+            if (i < Blocks.blocksList.length && !Blocks.getBlock(i).getEnableStats()){
                 continue;
             }
 
             item.createStat(StatList.STAT_PICKED_UP, "");
             Stat used = item.createStat(StatList.STAT_USED, "stat.useItem");
-            if (i >= Block.blocksList.length){
+            if (i >= Blocks.blocksList.length){
                 StatList.usedItemStats.add(used);
             }
 
@@ -215,7 +215,7 @@ public final class Items {
                 item.createStat(StatList.STAT_DEPLETED, "stat.breakItem");
             }
 
-            if (i < Block.blocksList.length){
+            if (i < Blocks.blocksList.length){
                 item.createStat(StatList.STAT_MINED, "stat.mineBlock");
             }
         }
diff --git a/src/main/java/net/minecraft/core/item/block/ItemBlock.java b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlock.java
similarity index 88%
rename from src/main/java/net/minecraft/core/item/block/ItemBlock.java
rename to game/core/src/main/java/net/minecraft/core/item/block/ItemBlock.java
index d632fb62b..fec0178f8 100644
--- a/src/main/java/net/minecraft/core/item/block/ItemBlock.java
+++ b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlock.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.item.block;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntityActivator;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.entity.player.Player;
@@ -28,7 +29,7 @@ public class ItemBlock extends Item
 
     public Block getBlock()
     {
-        return Block.blocksList[blockID];
+        return Blocks.blocksList[blockID];
     }
 
     @Override
@@ -45,7 +46,7 @@ public class ItemBlock extends Item
 			return false;
 		}
 		if(world.canBlockBePlacedAt(blockID, x, y, z, false, side)) {
-			Block block = Block.blocksList[blockID];
+			Block block = Blocks.blocksList[blockID];
 			int meta = getPlacedBlockMetadata(player, stack, world, x, y, z, side, xPlaced, yPlaced);
 			if(world.setBlockAndMetadataWithNotify(x, y, z, blockID, meta)) {
 				stack.consumeItem(player);
@@ -74,18 +75,18 @@ public class ItemBlock extends Item
 
     public int getPlacedBlockMetadata(@Nullable Player player, ItemStack stack, World world, int x, int y, int z, Side side, double xPlaced, double yPlaced)
     {
-    	return Block.getBlock(blockID).getPlacedBlockMetadata(player, stack, world, x, y, z, side, xPlaced, yPlaced);
+    	return Blocks.getBlock(blockID).getPlacedBlockMetadata(player, stack, world, x, y, z, side, xPlaced, yPlaced);
     }
 
     @Override
     public String getLanguageKey(ItemStack itemstack)
     {
-        return Block.blocksList[blockID].getLanguageKey(itemstack.getMetadata());
+        return Blocks.blocksList[blockID].getLanguageKey(itemstack.getMetadata());
     }
 
     @Override
     public String getKey()
     {
-        return Block.blocksList[blockID].getKey();
+        return Blocks.blocksList[blockID].getKey();
     }
 }
diff --git a/src/main/java/net/minecraft/core/item/block/ItemBlockAlgae.java b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockAlgae.java
similarity index 95%
rename from src/main/java/net/minecraft/core/item/block/ItemBlockAlgae.java
rename to game/core/src/main/java/net/minecraft/core/item/block/ItemBlockAlgae.java
index da9cb36ee..cf75bd63c 100644
--- a/src/main/java/net/minecraft/core/item/block/ItemBlockAlgae.java
+++ b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockAlgae.java
@@ -73,10 +73,10 @@ public class ItemBlockAlgae extends ItemBlock
 
             if(world.getBlockId(blockX, blockY, blockZ) != 0)
                 return itemstack;
-            Block block = Block.blocksList[Blocks.ALGAE.id];
+            Block block = Blocks.blocksList[Blocks.ALGAE.id];
             if(itemstack.consumeItem(player) && world.setBlockAndMetadataWithNotify(blockX, blockY, blockZ, Blocks.ALGAE.id, 0))
             {
-                Block.blocksList[blockID].onBlockPlacedByMob(world, blockX, blockY, blockZ, Side.NONE, player, 0.5, 0.5);
+                Blocks.blocksList[blockID].onBlockPlacedByMob(world, blockX, blockY, blockZ, Side.NONE, player, 0.5, 0.5);
                 world.playBlockSoundEffect(player, blockX + 0.5F, blockY + 0.5F, blockZ + 0.5F, block, EnumBlockSoundEffectType.PLACE);
                 player.swingItem();
             }
diff --git a/src/main/java/net/minecraft/core/item/block/ItemBlockLadder.java b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockLadder.java
similarity index 94%
rename from src/main/java/net/minecraft/core/item/block/ItemBlockLadder.java
rename to game/core/src/main/java/net/minecraft/core/item/block/ItemBlockLadder.java
index 241346bb3..f9920881b 100644
--- a/src/main/java/net/minecraft/core/item/block/ItemBlockLadder.java
+++ b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockLadder.java
@@ -2,6 +2,7 @@ package net.minecraft.core.item.block;
 
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockLadder;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.enums.EnumBlockSoundEffectType;
 import net.minecraft.core.item.ItemStack;
@@ -56,7 +57,7 @@ public class ItemBlockLadder extends ItemBlock {
 	public boolean placeBlock(World world, int x, int y, int z, int meta, @Nullable Player player, ItemStack stack, Side side, double xPlaced, double yPlaced) {
 		if(world.canPlaceInsideBlock(x, y, z) && world.canBlockBePlacedAt(blockID, x, y, z, false, side) && stack.consumeItem(player)) {
 			if(world.setBlockAndMetadataWithNotify(x, y, z, blockID, meta)) {
-				Block.getBlock(blockID).onBlockPlacedByMob(world, x, y, z, side, player, xPlaced, yPlaced);
+				Blocks.getBlock(blockID).onBlockPlacedByMob(world, x, y, z, side, player, xPlaced, yPlaced);
 				world.playBlockSoundEffect(player, x + 0.5f, y + 0.5f, z + 0.5f, ladderBlock, EnumBlockSoundEffectType.PLACE);
 				return true;
 			}
diff --git a/src/main/java/net/minecraft/core/item/block/ItemBlockLamp.java b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockLamp.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/block/ItemBlockLamp.java
rename to game/core/src/main/java/net/minecraft/core/item/block/ItemBlockLamp.java
diff --git a/src/main/java/net/minecraft/core/item/block/ItemBlockLayer.java b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockLayer.java
similarity index 84%
rename from src/main/java/net/minecraft/core/item/block/ItemBlockLayer.java
rename to game/core/src/main/java/net/minecraft/core/item/block/ItemBlockLayer.java
index 1692cfbf4..38c9c089e 100644
--- a/src/main/java/net/minecraft/core/item/block/ItemBlockLayer.java
+++ b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockLayer.java
@@ -2,6 +2,7 @@ package net.minecraft.core.item.block;
 
 import net.minecraft.core.block.BlockLayerBase;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.enums.EnumBlockSoundEffectType;
@@ -24,7 +25,7 @@ public class ItemBlockLayer extends ItemBlock
 	{
 		int id = world.getBlockId(blockX, blockY, blockZ);
 		int meta = world.getBlockMetadata(blockX, blockY, blockZ);
-		if (id != blockID && Block.blocksList[id] != null && Block.blocksList[id].hasTag(BlockTags.PLACE_OVERWRITES))
+		if (id != blockID && Blocks.blocksList[id] != null && Blocks.blocksList[id].hasTag(BlockTags.PLACE_OVERWRITES))
 		{
 			id = 0;
 			meta = 0;
@@ -33,7 +34,7 @@ public class ItemBlockLayer extends ItemBlock
 		{
 			return false;
 		}
-		if (blockY == world.getHeightBlocks() - 1 && Block.blocksList[blockID].blockMaterial.isSolid())
+		if (blockY == world.getHeightBlocks() - 1 && Blocks.blocksList[blockID].blockMaterial.isSolid())
 		{
 			return false;
 		}
@@ -42,7 +43,7 @@ public class ItemBlockLayer extends ItemBlock
 		if (id == blockID && side == Side.TOP)
 		{
 
-			final BlockLayerBase blockLayer = (BlockLayerBase) Block.blocksList[blockID];
+			final BlockLayerBase blockLayer = (BlockLayerBase) Blocks.blocksList[blockID];
 
 			final int newMeta = meta + 1;
 
@@ -87,7 +88,7 @@ public class ItemBlockLayer extends ItemBlock
 		if (id == blockID)
 		{
 
-			final BlockLayerBase blockLayer = (BlockLayerBase) Block.blocksList[blockID];
+			final BlockLayerBase blockLayer = (BlockLayerBase) Blocks.blocksList[blockID];
 
 			final int newMeta = meta + 1;
 
@@ -120,14 +121,14 @@ public class ItemBlockLayer extends ItemBlock
 		// Regular placement, as all else fails
 		if (world.canBlockBePlacedAt(blockID, blockX, blockY, blockZ, false, side))
 		{
-			final Block block = Block.blocksList[blockID];
+			final Block block = Blocks.blocksList[blockID];
 			int placeMeta = getPlacedBlockMetadata(player, itemstack, world, blockX, blockY, blockZ, side, xPlaced, yPlaced);
 			if (world.setBlockAndMetadataWithNotify(blockX, blockY, blockZ, blockID, placeMeta))
 			{
 				if (player == null) {
-					Block.blocksList[blockID].onBlockPlacedOnSide(world, blockX, blockY, blockZ, side, xPlaced, yPlaced);
+					Blocks.blocksList[blockID].onBlockPlacedOnSide(world, blockX, blockY, blockZ, side, xPlaced, yPlaced);
 				} else {
-					Block.blocksList[blockID].onBlockPlacedByMob(world, blockX, blockY, blockZ, Side.NONE, player, xPlaced, yPlaced);
+					Blocks.blocksList[blockID].onBlockPlacedByMob(world, blockX, blockY, blockZ, Side.NONE, player, xPlaced, yPlaced);
 				}
 				world.playBlockSoundEffect(player, blockX + 0.5F, blockY + 0.5F, blockZ + 0.5F, block, EnumBlockSoundEffectType.PLACE);
 				itemstack.consumeItem(player);
diff --git a/src/main/java/net/minecraft/core/item/block/ItemBlockLayerLeaves.java b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockLayerLeaves.java
similarity index 85%
rename from src/main/java/net/minecraft/core/item/block/ItemBlockLayerLeaves.java
rename to game/core/src/main/java/net/minecraft/core/item/block/ItemBlockLayerLeaves.java
index 3a1342694..d189a96cc 100644
--- a/src/main/java/net/minecraft/core/item/block/ItemBlockLayerLeaves.java
+++ b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockLayerLeaves.java
@@ -4,6 +4,7 @@ import net.minecraft.core.block.BlockLayerBase;
 import net.minecraft.core.block.BlockLeavesBase;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockLayerLeaves;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.enums.EnumBlockSoundEffectType;
@@ -25,7 +26,7 @@ public class ItemBlockLayerLeaves extends ItemBlock
 	{
 		int id = world.getBlockId(blockX, blockY, blockZ);
 		int meta = world.getBlockMetadata(blockX, blockY, blockZ);
-		if (id != blockID && Block.blocksList[id] != null && Block.blocksList[id].hasTag(BlockTags.PLACE_OVERWRITES))
+		if (id != blockID && Blocks.blocksList[id] != null && Blocks.blocksList[id].hasTag(BlockTags.PLACE_OVERWRITES))
 		{
 			id = 0;
 			meta = 0;
@@ -34,7 +35,7 @@ public class ItemBlockLayerLeaves extends ItemBlock
 		{
 			return false;
 		}
-		if (blockY == world.getHeightBlocks() - 1 && Block.blocksList[blockID].blockMaterial.isSolid())
+		if (blockY == world.getHeightBlocks() - 1 && Blocks.blocksList[blockID].blockMaterial.isSolid())
 		{
 			return false;
 		}
@@ -43,7 +44,7 @@ public class ItemBlockLayerLeaves extends ItemBlock
 		if (id == blockID && side == Side.TOP)
 		{
 
-			final BlockLayerBase blockLayer = (BlockLayerBase) Block.blocksList[blockID];
+			final BlockLayerBase blockLayer = (BlockLayerBase) Blocks.blocksList[blockID];
 
 			final int newMeta = meta + 1;
 
@@ -88,7 +89,7 @@ public class ItemBlockLayerLeaves extends ItemBlock
 		if (id == blockID)
 		{
 
-			final BlockLayerBase blockLayer = (BlockLayerBase) Block.blocksList[blockID];
+			final BlockLayerBase blockLayer = (BlockLayerBase) Blocks.blocksList[blockID];
 
 			final int newMeta = meta + 1;
 
@@ -121,14 +122,14 @@ public class ItemBlockLayerLeaves extends ItemBlock
 		// Regular placement, as all else fails
 		if (world.canBlockBePlacedAt(blockID, blockX, blockY, blockZ, false, side))
 		{
-			final Block block = Block.blocksList[blockID];
+			final Block block = Blocks.blocksList[blockID];
 			int placeMeta = getPlacedBlockMetadata(player, itemstack, world, blockX, blockY, blockZ, side, xPlaced, yPlaced);
 			if (world.setBlockAndMetadataWithNotify(blockX, blockY, blockZ, blockID, placeMeta))
 			{
 				if (player == null) {
-					Block.blocksList[blockID].onBlockPlacedOnSide(world, blockX, blockY, blockZ, side, xPlaced, yPlaced);
+					Blocks.blocksList[blockID].onBlockPlacedOnSide(world, blockX, blockY, blockZ, side, xPlaced, yPlaced);
 				} else {
-					Block.blocksList[blockID].onBlockPlacedByMob(world, blockX, blockY, blockZ, side, player, xPlaced, yPlaced);
+					Blocks.blocksList[blockID].onBlockPlacedByMob(world, blockX, blockY, blockZ, side, player, xPlaced, yPlaced);
 				}
 				world.playBlockSoundEffect(player, blockX + 0.5F, blockY + 0.5F, blockZ + 0.5F, block, EnumBlockSoundEffectType.PLACE);
 				itemstack.consumeItem(player);
diff --git a/src/main/java/net/minecraft/core/item/block/ItemBlockPainted.java b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/block/ItemBlockPainted.java
rename to game/core/src/main/java/net/minecraft/core/item/block/ItemBlockPainted.java
diff --git a/src/main/java/net/minecraft/core/item/block/ItemBlockSlab.java b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockSlab.java
similarity index 83%
rename from src/main/java/net/minecraft/core/item/block/ItemBlockSlab.java
rename to game/core/src/main/java/net/minecraft/core/item/block/ItemBlockSlab.java
index f6cddd9a9..a18eeac44 100644
--- a/src/main/java/net/minecraft/core/item/block/ItemBlockSlab.java
+++ b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockSlab.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.item.block;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.enums.EnumBlockSoundEffectType;
@@ -24,7 +25,7 @@ public class ItemBlockSlab extends ItemBlock
     	int id = world.getBlockId(blockX, blockY, blockZ);
     	int meta = world.getBlockMetadata(blockX, blockY, blockZ) & 0x3;
     	int otherMeta = world.getBlockMetadata(blockX, blockY, blockZ) & ~0x3;
-    	if (Block.blocksList[world.getBlockId(blockX, blockY, blockZ)] != null && Block.blocksList[world.getBlockId(blockX, blockY, blockZ)].hasTag(BlockTags.PLACE_OVERWRITES))
+    	if (Blocks.blocksList[world.getBlockId(blockX, blockY, blockZ)] != null && Blocks.blocksList[world.getBlockId(blockX, blockY, blockZ)].hasTag(BlockTags.PLACE_OVERWRITES))
     	{
     		id = 0;
     		meta = 0;
@@ -33,7 +34,7 @@ public class ItemBlockSlab extends ItemBlock
         {
             return false;
         }
-        if(blockY == world.getHeightBlocks() - 1 && Block.blocksList[blockID].blockMaterial.isSolid())
+        if(blockY == world.getHeightBlocks() - 1 && Blocks.blocksList[blockID].blockMaterial.isSolid())
         {
             return false;
         }
@@ -47,7 +48,7 @@ public class ItemBlockSlab extends ItemBlock
                 if(!world.checkIfAABBIsClear(bbBox))
                     return false;
 
-        		Block blockSlab = Block.blocksList[blockID];
+        		Block blockSlab = Blocks.blocksList[blockID];
         		world.setBlockMetadataWithNotify(blockX, blockY, blockZ, 1 | itemstack.getMetadata());
                 world.playBlockSoundEffect(player, blockX + 0.5F, blockY + 0.5F, blockZ + 0.5F, blockSlab, EnumBlockSoundEffectType.PLACE);
             	itemstack.consumeItem(player);
@@ -75,7 +76,7 @@ public class ItemBlockSlab extends ItemBlock
                 if(!world.checkIfAABBIsClear(bbBox))
                     return false;
 
-        		Block blockSlab = Block.blocksList[blockID];
+        		Block blockSlab = Blocks.blocksList[blockID];
         		world.setBlockMetadataWithNotify(blockX, blockY, blockZ, 1 | itemstack.getMetadata());
                 world.playBlockSoundEffect(player, blockX + 0.5F, blockY + 0.5F, blockZ + 0.5F, blockSlab, EnumBlockSoundEffectType.PLACE);
                 itemstack.consumeItem(player);
@@ -86,14 +87,14 @@ public class ItemBlockSlab extends ItemBlock
         // Regular placement, as all else fails
         if(world.canBlockBePlacedAt(blockID, blockX, blockY, blockZ, false, side))
         {
-            Block block = Block.blocksList[blockID];
+            Block block = Blocks.blocksList[blockID];
             int placeMeta = getPlacedBlockMetadata(player, itemstack, world, blockX, blockY, blockZ, side, xPlaced, yPlaced);
             if(world.setBlockAndMetadataWithNotify(blockX, blockY, blockZ, blockID, placeMeta))
             {
                 if (player == null) {
-                    Block.blocksList[blockID].onBlockPlacedOnSide(world, blockX, blockY, blockZ, side, xPlaced, yPlaced);
+                    Blocks.blocksList[blockID].onBlockPlacedOnSide(world, blockX, blockY, blockZ, side, xPlaced, yPlaced);
                 } else {
-                    Block.blocksList[blockID].onBlockPlacedByMob(world, blockX, blockY, blockZ, side, player, xPlaced, yPlaced);
+                    Blocks.blocksList[blockID].onBlockPlacedByMob(world, blockX, blockY, blockZ, side, player, xPlaced, yPlaced);
                 }
                 world.playBlockSoundEffect(player, blockX + 0.5F, blockY + 0.5F, blockZ + 0.5F, block, EnumBlockSoundEffectType.PLACE);
                 itemstack.consumeItem(player);
diff --git a/src/main/java/net/minecraft/core/item/block/ItemBlockSlabPainted.java b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockSlabPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/block/ItemBlockSlabPainted.java
rename to game/core/src/main/java/net/minecraft/core/item/block/ItemBlockSlabPainted.java
diff --git a/src/main/java/net/minecraft/core/item/block/ItemBlockStairsPainted.java b/game/core/src/main/java/net/minecraft/core/item/block/ItemBlockStairsPainted.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/block/ItemBlockStairsPainted.java
rename to game/core/src/main/java/net/minecraft/core/item/block/ItemBlockStairsPainted.java
diff --git a/src/main/java/net/minecraft/core/item/material/ArmorMaterial.java b/game/core/src/main/java/net/minecraft/core/item/material/ArmorMaterial.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/material/ArmorMaterial.java
rename to game/core/src/main/java/net/minecraft/core/item/material/ArmorMaterial.java
diff --git a/src/main/java/net/minecraft/core/item/material/ToolMaterial.java b/game/core/src/main/java/net/minecraft/core/item/material/ToolMaterial.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/material/ToolMaterial.java
rename to game/core/src/main/java/net/minecraft/core/item/material/ToolMaterial.java
diff --git a/src/main/java/net/minecraft/core/item/tag/ItemTags.java b/game/core/src/main/java/net/minecraft/core/item/tag/ItemTags.java
similarity index 96%
rename from src/main/java/net/minecraft/core/item/tag/ItemTags.java
rename to game/core/src/main/java/net/minecraft/core/item/tag/ItemTags.java
index d97e3c029..bdbc8063a 100644
--- a/src/main/java/net/minecraft/core/item/tag/ItemTags.java
+++ b/game/core/src/main/java/net/minecraft/core/item/tag/ItemTags.java
@@ -1,61 +1,61 @@
-package net.minecraft.core.item.tag;
-
-import com.mojang.logging.LogUtils;
-import net.minecraft.core.data.tag.Tag;
-import net.minecraft.core.item.Item;
-import org.slf4j.Logger;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.List;
-
-public abstract class ItemTags
-{
-    private static final Logger LOGGER = LogUtils.getLogger();
-    /**
-     * Items with this tag will not destroy blocks in creative mode
-     */
-    public static Tag<Item> PREVENT_CREATIVE_MINING = Tag.of("prevent_creative_mining");
-    /**
-     * Items with this tag will break blocks with silk touch
-     */
-    public static Tag<Item> IS_SILK_TOUCH = Tag.of("is_silk_touch");
-    /**
-     * Items with this tag will not be shown in the creative inventory.
-     */
-    public static Tag<Item> NOT_IN_CREATIVE_MENU = Tag.of("not_in_creative_menu");
-    /**
-     * Blocks like doors and levers should not be interacted with when mining them with an item with this tag
-     */
-    public static Tag<Item> PREVENT_LEFT_CLICK_INTERACTIONS = Tag.of("prevent_left_click_interactions");
-    /**
-     * Chickens will follow the player if they are holding this item.
-     */
-    public static Tag<Item> CHICKENS_FAVOURITE_ITEM = Tag.of("chickens_favourite_item");
-    /**
-     * Cows will follow the player if they are holding this item.
-     */
-    public static Tag<Item> COWS_FAVOURITE_ITEM = Tag.of("cows_favourite_item");
-
-    public static List<Tag<Item>> TAG_LIST;
-
-    static
-    {
-        TAG_LIST = new ArrayList<>();
-
-        for (Field field : ItemTags.class.getDeclaredFields())
-        {
-            if (field.getType().equals(Tag.class))
-            {
-                try
-                {
-                    TAG_LIST.add((Tag<Item>)field.get(null));
-                }
-                catch (Exception e)
-                {
-                    LOGGER.error("Failed to add tag '{}'!", field.getName(), e);
-                }
-            }
-        }
-    }
-}
+package net.minecraft.core.item.tag;
+
+import com.mojang.logging.LogUtils;
+import net.minecraft.core.data.tag.Tag;
+import net.minecraft.core.item.Item;
+import org.slf4j.Logger;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class ItemTags
+{
+    private static final Logger LOGGER = LogUtils.getLogger();
+    /**
+     * Items with this tag will not destroy blocks in creative mode
+     */
+    public static Tag<Item> PREVENT_CREATIVE_MINING = Tag.of("prevent_creative_mining");
+    /**
+     * Items with this tag will break blocks with silk touch
+     */
+    public static Tag<Item> IS_SILK_TOUCH = Tag.of("is_silk_touch");
+    /**
+     * Items with this tag will not be shown in the creative inventory.
+     */
+    public static Tag<Item> NOT_IN_CREATIVE_MENU = Tag.of("not_in_creative_menu");
+    /**
+     * Blocks like doors and levers should not be interacted with when mining them with an item with this tag
+     */
+    public static Tag<Item> PREVENT_LEFT_CLICK_INTERACTIONS = Tag.of("prevent_left_click_interactions");
+    /**
+     * Chickens will follow the player if they are holding this item.
+     */
+    public static Tag<Item> CHICKENS_FAVOURITE_ITEM = Tag.of("chickens_favourite_item");
+    /**
+     * Cows will follow the player if they are holding this item.
+     */
+    public static Tag<Item> COWS_FAVOURITE_ITEM = Tag.of("cows_favourite_item");
+
+    public static List<Tag<Item>> TAG_LIST;
+
+    static
+    {
+        TAG_LIST = new ArrayList<>();
+
+        for (Field field : ItemTags.class.getDeclaredFields())
+        {
+            if (field.getType().equals(Tag.class))
+            {
+                try
+                {
+                    TAG_LIST.add((Tag<Item>)field.get(null));
+                }
+                catch (Exception e)
+                {
+                    LOGGER.error("Failed to add tag '{}'!", field.getName(), e);
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/java/net/minecraft/core/item/tool/ItemTool.java b/game/core/src/main/java/net/minecraft/core/item/tool/ItemTool.java
similarity index 96%
rename from src/main/java/net/minecraft/core/item/tool/ItemTool.java
rename to game/core/src/main/java/net/minecraft/core/item/tool/ItemTool.java
index ad9534899..84341cb2d 100644
--- a/src/main/java/net/minecraft/core/item/tool/ItemTool.java
+++ b/game/core/src/main/java/net/minecraft/core/item/tool/ItemTool.java
@@ -1,5 +1,6 @@
 package net.minecraft.core.item.tool;
 
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.data.tag.Tag;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.Mob;
@@ -46,7 +47,7 @@ public class ItemTool extends Item
 
 	@Override
 	public boolean onBlockDestroyed(World world, ItemStack itemstack, int i, int x, int y, int z, Side side, Mob mob) {
-		Block block = Block.blocksList[i];
+		Block block = Blocks.blocksList[i];
 		if(block != null) {
 			if(block.getHardness() > 0.0f || isSilkTouch()) {
 				itemstack.damageItem(1, mob);
diff --git a/src/main/java/net/minecraft/core/item/tool/ItemToolAxe.java b/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolAxe.java
similarity index 93%
rename from src/main/java/net/minecraft/core/item/tool/ItemToolAxe.java
rename to game/core/src/main/java/net/minecraft/core/item/tool/ItemToolAxe.java
index 2e57468d3..6a9750bcf 100644
--- a/src/main/java/net/minecraft/core/item/tool/ItemToolAxe.java
+++ b/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolAxe.java
@@ -2,6 +2,7 @@ package net.minecraft.core.item.tool;
 
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockLog;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.data.gamerule.GameRules;
 import net.minecraft.core.data.gamerule.TreecapitatorHelper;
@@ -31,7 +32,7 @@ public class ItemToolAxe extends ItemTool
     {
     	if(!world.isClientSide && world.getGameRuleValue(GameRules.TREECAPITATOR) && !player.isSneaking()) {
     		int id = world.getBlockId(x, y, z);
-    		if(Block.getBlock(id) instanceof BlockLog) {
+    		if(Blocks.getBlock(id) instanceof BlockLog) {
             	return !new TreecapitatorHelper(world, x, y, z, player).chopTree();
     		}
     	}
diff --git a/src/main/java/net/minecraft/core/item/tool/ItemToolHoe.java b/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolHoe.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/tool/ItemToolHoe.java
rename to game/core/src/main/java/net/minecraft/core/item/tool/ItemToolHoe.java
diff --git a/src/main/java/net/minecraft/core/item/tool/ItemToolPickaxe.java b/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolPickaxe.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/tool/ItemToolPickaxe.java
rename to game/core/src/main/java/net/minecraft/core/item/tool/ItemToolPickaxe.java
diff --git a/src/main/java/net/minecraft/core/item/tool/ItemToolShears.java b/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolShears.java
similarity index 100%
rename from src/main/java/net/minecraft/core/item/tool/ItemToolShears.java
rename to game/core/src/main/java/net/minecraft/core/item/tool/ItemToolShears.java
diff --git a/src/main/java/net/minecraft/core/item/tool/ItemToolShovel.java b/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolShovel.java
similarity index 96%
rename from src/main/java/net/minecraft/core/item/tool/ItemToolShovel.java
rename to game/core/src/main/java/net/minecraft/core/item/tool/ItemToolShovel.java
index 84e91426a..efbd496a2 100644
--- a/src/main/java/net/minecraft/core/item/tool/ItemToolShovel.java
+++ b/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolShovel.java
@@ -41,7 +41,7 @@ public class ItemToolShovel extends ItemTool
         if(side != Side.BOTTOM && blockAbove == 0 && (blockId == Blocks.GRASS.id || blockId == Blocks.DIRT.id || blockId == Blocks.GRASS_RETRO.id || blockId == Blocks.FARMLAND_DIRT.id))
         {
             Block block = Blocks.PATH_DIRT;
-            world.playBlockSoundEffect(entityplayer, blockX + 0.5F, blockY + 0.5F, blockZ + 0.5F, Block.blocksList[blockId], EnumBlockSoundEffectType.PLACE);
+            world.playBlockSoundEffect(entityplayer, blockX + 0.5F, blockY + 0.5F, blockZ + 0.5F, Blocks.blocksList[blockId], EnumBlockSoundEffectType.PLACE);
             if (!world.isClientSide) {
                 world.setBlockWithNotify(blockX, blockY, blockZ, block.id);
                 itemstack.damageItem(1, entityplayer);
diff --git a/src/main/java/net/minecraft/core/item/tool/ItemToolSword.java b/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolSword.java
similarity index 98%
rename from src/main/java/net/minecraft/core/item/tool/ItemToolSword.java
rename to game/core/src/main/java/net/minecraft/core/item/tool/ItemToolSword.java
index 1e820d7a4..7289f11c9 100644
--- a/src/main/java/net/minecraft/core/item/tool/ItemToolSword.java
+++ b/game/core/src/main/java/net/minecraft/core/item/tool/ItemToolSword.java
@@ -43,7 +43,7 @@ public class ItemToolSword extends Item
     @Override
     public boolean onBlockDestroyed(World world, ItemStack itemstack, int i, int x, int y, int z, Side side, Mob mob)
     {
-        Block block = Block.blocksList[i];
+        Block block = Blocks.blocksList[i];
         if(block != null) {
             if(block.getHardness() > 0.0f || isSilkTouch()) {
                 itemstack.damageItem(2, mob);
diff --git a/src/main/java/net/minecraft/core/lang/I18n.java b/game/core/src/main/java/net/minecraft/core/lang/I18n.java
similarity index 100%
rename from src/main/java/net/minecraft/core/lang/I18n.java
rename to game/core/src/main/java/net/minecraft/core/lang/I18n.java
diff --git a/src/main/java/net/minecraft/core/lang/Language.java b/game/core/src/main/java/net/minecraft/core/lang/Language.java
similarity index 100%
rename from src/main/java/net/minecraft/core/lang/Language.java
rename to game/core/src/main/java/net/minecraft/core/lang/Language.java
diff --git a/src/main/java/net/minecraft/core/lang/LanguageSeeker.java b/game/core/src/main/java/net/minecraft/core/lang/LanguageSeeker.java
similarity index 100%
rename from src/main/java/net/minecraft/core/lang/LanguageSeeker.java
rename to game/core/src/main/java/net/minecraft/core/lang/LanguageSeeker.java
diff --git a/src/main/java/net/minecraft/core/lang/WorldNameGenerator.java b/game/core/src/main/java/net/minecraft/core/lang/WorldNameGenerator.java
similarity index 100%
rename from src/main/java/net/minecraft/core/lang/WorldNameGenerator.java
rename to game/core/src/main/java/net/minecraft/core/lang/WorldNameGenerator.java
diff --git a/src/main/java/net/minecraft/core/lang/text/ChainText.java b/game/core/src/main/java/net/minecraft/core/lang/text/ChainText.java
similarity index 100%
rename from src/main/java/net/minecraft/core/lang/text/ChainText.java
rename to game/core/src/main/java/net/minecraft/core/lang/text/ChainText.java
diff --git a/src/main/java/net/minecraft/core/lang/text/FormattedText.java b/game/core/src/main/java/net/minecraft/core/lang/text/FormattedText.java
similarity index 100%
rename from src/main/java/net/minecraft/core/lang/text/FormattedText.java
rename to game/core/src/main/java/net/minecraft/core/lang/text/FormattedText.java
diff --git a/src/main/java/net/minecraft/core/lang/text/FunctionText.java b/game/core/src/main/java/net/minecraft/core/lang/text/FunctionText.java
similarity index 100%
rename from src/main/java/net/minecraft/core/lang/text/FunctionText.java
rename to game/core/src/main/java/net/minecraft/core/lang/text/FunctionText.java
diff --git a/src/main/java/net/minecraft/core/lang/text/LiteralText.java b/game/core/src/main/java/net/minecraft/core/lang/text/LiteralText.java
similarity index 100%
rename from src/main/java/net/minecraft/core/lang/text/LiteralText.java
rename to game/core/src/main/java/net/minecraft/core/lang/text/LiteralText.java
diff --git a/src/main/java/net/minecraft/core/lang/text/Text.java b/game/core/src/main/java/net/minecraft/core/lang/text/Text.java
similarity index 100%
rename from src/main/java/net/minecraft/core/lang/text/Text.java
rename to game/core/src/main/java/net/minecraft/core/lang/text/Text.java
diff --git a/src/main/java/net/minecraft/core/lang/text/TranslatableText.java b/game/core/src/main/java/net/minecraft/core/lang/text/TranslatableText.java
similarity index 100%
rename from src/main/java/net/minecraft/core/lang/text/TranslatableText.java
rename to game/core/src/main/java/net/minecraft/core/lang/text/TranslatableText.java
diff --git a/src/main/java/net/minecraft/core/net/ChatEmotes.java b/game/core/src/main/java/net/minecraft/core/net/ChatEmotes.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/ChatEmotes.java
rename to game/core/src/main/java/net/minecraft/core/net/ChatEmotes.java
diff --git a/src/main/java/net/minecraft/core/net/ChatLine.java b/game/core/src/main/java/net/minecraft/core/net/ChatLine.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/ChatLine.java
rename to game/core/src/main/java/net/minecraft/core/net/ChatLine.java
diff --git a/src/main/java/net/minecraft/core/net/ICommandListener.java b/game/core/src/main/java/net/minecraft/core/net/ICommandListener.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/ICommandListener.java
rename to game/core/src/main/java/net/minecraft/core/net/ICommandListener.java
diff --git a/src/main/java/net/minecraft/core/net/IUpdatePlayerListBox.java b/game/core/src/main/java/net/minecraft/core/net/IUpdatePlayerListBox.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/IUpdatePlayerListBox.java
rename to game/core/src/main/java/net/minecraft/core/net/IUpdatePlayerListBox.java
diff --git a/src/main/java/net/minecraft/core/net/NetworkManager.java b/game/core/src/main/java/net/minecraft/core/net/NetworkManager.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/NetworkManager.java
rename to game/core/src/main/java/net/minecraft/core/net/NetworkManager.java
diff --git a/src/main/java/net/minecraft/core/net/PlayerProfile.java b/game/core/src/main/java/net/minecraft/core/net/PlayerProfile.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/PlayerProfile.java
rename to game/core/src/main/java/net/minecraft/core/net/PlayerProfile.java
diff --git a/src/main/java/net/minecraft/core/net/PropertyManager.java b/game/core/src/main/java/net/minecraft/core/net/PropertyManager.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/PropertyManager.java
rename to game/core/src/main/java/net/minecraft/core/net/PropertyManager.java
diff --git a/src/main/java/net/minecraft/core/net/SavedServerList.java b/game/core/src/main/java/net/minecraft/core/net/SavedServerList.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/SavedServerList.java
rename to game/core/src/main/java/net/minecraft/core/net/SavedServerList.java
diff --git a/src/main/java/net/minecraft/core/net/ServerAddress.java b/game/core/src/main/java/net/minecraft/core/net/ServerAddress.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/ServerAddress.java
rename to game/core/src/main/java/net/minecraft/core/net/ServerAddress.java
diff --git a/src/main/java/net/minecraft/core/net/ServerCommandEntry.java b/game/core/src/main/java/net/minecraft/core/net/ServerCommandEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/ServerCommandEntry.java
rename to game/core/src/main/java/net/minecraft/core/net/ServerCommandEntry.java
diff --git a/src/main/java/net/minecraft/core/net/ServerData.java b/game/core/src/main/java/net/minecraft/core/net/ServerData.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/ServerData.java
rename to game/core/src/main/java/net/minecraft/core/net/ServerData.java
diff --git a/src/main/java/net/minecraft/core/net/command/CommandManager.java b/game/core/src/main/java/net/minecraft/core/net/command/CommandManager.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/CommandManager.java
rename to game/core/src/main/java/net/minecraft/core/net/command/CommandManager.java
diff --git a/src/main/java/net/minecraft/core/net/command/CommandManagerPacketKeys.java b/game/core/src/main/java/net/minecraft/core/net/command/CommandManagerPacketKeys.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/CommandManagerPacketKeys.java
rename to game/core/src/main/java/net/minecraft/core/net/command/CommandManagerPacketKeys.java
diff --git a/src/main/java/net/minecraft/core/net/command/CommandSource.java b/game/core/src/main/java/net/minecraft/core/net/command/CommandSource.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/CommandSource.java
rename to game/core/src/main/java/net/minecraft/core/net/command/CommandSource.java
diff --git a/src/main/java/net/minecraft/core/net/command/TextFormatting.java b/game/core/src/main/java/net/minecraft/core/net/command/TextFormatting.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/TextFormatting.java
rename to game/core/src/main/java/net/minecraft/core/net/command/TextFormatting.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeAchievement.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeAchievement.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeAchievement.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeAchievement.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeBiome.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeBiome.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeBiome.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeBiome.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeBlock.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeBlock.java
similarity index 96%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeBlock.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeBlock.java
index f6af6ba89..c1c7ec628 100644
--- a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeBlock.java
+++ b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeBlock.java
@@ -7,6 +7,7 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException;
 import com.mojang.brigadier.suggestion.Suggestions;
 import com.mojang.brigadier.suggestion.SuggestionsBuilder;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.net.command.helpers.BlockArgumentParser;
 import net.minecraft.core.net.command.helpers.BlockInput;
 import net.minecraft.core.net.command.util.CommandHelper;
@@ -40,7 +41,7 @@ public class ArgumentTypeBlock implements ArgumentType<BlockInput> {
         } catch (CommandSyntaxException ignored) {}
         return parser.fillSuggestions(builder, suggestionsBuilder -> {
             String remaining = suggestionsBuilder.getRemaining().toLowerCase(Locale.ROOT);
-            for (Block block : Block.blocksList) {
+            for (Block block : Blocks.blocksList) {
                 if (block == null) continue;
                 CommandHelper.getStringToSuggest(block.namespaceID.toString(), remaining).ifPresent(suggestionsBuilder::suggest);
             }
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeChunkCoordinates.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeChunkCoordinates.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeChunkCoordinates.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeChunkCoordinates.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeDamageType.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeDamageType.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeDamageType.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeDamageType.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeDimension.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeDimension.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeDimension.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeDimension.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeEntity.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeEntity.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeEntity.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeEntity.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeEntitySummon.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeEntitySummon.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeEntitySummon.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeEntitySummon.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeGameMode.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeGameMode.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeGameMode.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeGameMode.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeGameruleGeneric.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeGameruleGeneric.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeGameruleGeneric.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeGameruleGeneric.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeIntegerCoordinates.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeIntegerCoordinates.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeIntegerCoordinates.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeIntegerCoordinates.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeItemStack.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeItemStack.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeItemStack.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeItemStack.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeParticleId.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeParticleId.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeParticleId.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeParticleId.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSeason.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSeason.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSeason.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSeason.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSoundCategory.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSoundCategory.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSoundCategory.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSoundCategory.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSoundId.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSoundId.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSoundId.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeSoundId.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeTime.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeTime.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeTime.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeTime.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeVec3.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeVec3.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeVec3.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeVec3.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeWeather.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeWeather.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeWeather.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeWeather.java
diff --git a/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeWorldFeature.java b/game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeWorldFeature.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeWorldFeature.java
rename to game/core/src/main/java/net/minecraft/core/net/command/arguments/ArgumentTypeWorldFeature.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandAchievement.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandAchievement.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandAchievement.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandAchievement.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandBiome.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandBiome.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandBiome.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandBiome.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandChunk.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandChunk.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandChunk.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandChunk.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandClear.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandClear.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandClear.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandClear.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandClone.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandClone.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandClone.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandClone.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandDamage.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandDamage.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandDamage.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandDamage.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandFill.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandFill.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandFill.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandFill.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandGameMode.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandGameMode.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandGameMode.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandGameMode.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandGameRule.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandGameRule.java
similarity index 94%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandGameRule.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandGameRule.java
index 32a9f58f0..d5151e6db 100644
--- a/src/main/java/net/minecraft/core/net/command/commands/CommandGameRule.java
+++ b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandGameRule.java
@@ -12,7 +12,7 @@ import net.minecraft.core.data.registry.Registries;
 import net.minecraft.core.net.command.CommandManager;
 import net.minecraft.core.net.command.CommandSource;
 import net.minecraft.core.net.command.arguments.ArgumentTypeGameruleGeneric;
-import net.minecraft.core.net.packet.GameRulePacket;
+import net.minecraft.core.net.packet.PacketGameRule;
 
 public class CommandGameRule implements CommandManager.CommandRegistry {
     public void register(CommandDispatcher<CommandSource> dispatcher) {
@@ -23,7 +23,7 @@ public class CommandGameRule implements CommandManager.CommandRegistry {
                 gameRuleValueArgument = RequiredArgumentBuilder.<CommandSource, Boolean>argument("value", BoolArgumentType.bool())
                         .executes(c -> {
                             c.getSource().getWorld().getLevelData().getGameRules().setValue((GameRuleBoolean) gameRule, BoolArgumentType.getBool(c, "value"));
-                            c.getSource().sendPacketToAllPlayers(() -> new GameRulePacket(c.getSource().getWorld().getLevelData().getGameRules()));
+                            c.getSource().sendPacketToAllPlayers(() -> new PacketGameRule(c.getSource().getWorld().getLevelData().getGameRules()));
                             c.getSource().sendTranslatableMessage("command.commands.gamerule.set", gameRule.getKey(), BoolArgumentType.getBool(c, "value"));
                             return Command.SINGLE_SUCCESS;
                         });
@@ -32,7 +32,7 @@ public class CommandGameRule implements CommandManager.CommandRegistry {
                         .executes(c -> {
                             Object o = c.getArgument("value", Object.class);
                             c.getSource().getWorld().getLevelData().getGameRules().setValue((GameRule) gameRule, o);
-                            c.getSource().sendPacketToAllPlayers(() -> new GameRulePacket(c.getSource().getWorld().getLevelData().getGameRules()));
+                            c.getSource().sendPacketToAllPlayers(() -> new PacketGameRule(c.getSource().getWorld().getLevelData().getGameRules()));
                             c.getSource().sendTranslatableMessage("command.commands.gamerule.set", gameRule.getKey(), o);
                             return Command.SINGLE_SUCCESS;
                         });
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandGive.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandGive.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandGive.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandGive.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandHeal.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandHeal.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandHeal.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandHeal.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandHelp.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandHelp.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandHelp.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandHelp.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandKill.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandKill.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandKill.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandKill.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandMessage.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandMessage.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandMessage.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandMessage.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandMobSpawning.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandMobSpawning.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandMobSpawning.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandMobSpawning.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandPlace.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandPlace.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandPlace.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandPlace.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandPlaySound.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandPlaySound.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandPlaySound.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandPlaySound.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandSay.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSay.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandSay.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSay.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandSeed.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSeed.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandSeed.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSeed.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandSetBlock.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSetBlock.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandSetBlock.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSetBlock.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandSetSpawn.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSetSpawn.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandSetSpawn.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSetSpawn.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandSpawn.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSpawn.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandSpawn.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSpawn.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandSpawnParticle.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSpawnParticle.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandSpawnParticle.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSpawnParticle.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandSummon.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSummon.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandSummon.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandSummon.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandTeleport.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandTeleport.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandTeleport.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandTeleport.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandTellRaw.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandTellRaw.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandTellRaw.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandTellRaw.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandTestFor.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandTestFor.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandTestFor.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandTestFor.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandTime.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandTime.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandTime.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandTime.java
diff --git a/src/main/java/net/minecraft/core/net/command/commands/CommandWeather.java b/game/core/src/main/java/net/minecraft/core/net/command/commands/CommandWeather.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/commands/CommandWeather.java
rename to game/core/src/main/java/net/minecraft/core/net/command/commands/CommandWeather.java
diff --git a/src/main/java/net/minecraft/core/net/command/exceptions/CommandExceptions.java b/game/core/src/main/java/net/minecraft/core/net/command/exceptions/CommandExceptions.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/exceptions/CommandExceptions.java
rename to game/core/src/main/java/net/minecraft/core/net/command/exceptions/CommandExceptions.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/ArgumentParser.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/ArgumentParser.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/ArgumentParser.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/ArgumentParser.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/BlockArgumentParser.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/BlockArgumentParser.java
similarity index 97%
rename from src/main/java/net/minecraft/core/net/command/helpers/BlockArgumentParser.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/BlockArgumentParser.java
index 0109ada15..549ccb6f7 100644
--- a/src/main/java/net/minecraft/core/net/command/helpers/BlockArgumentParser.java
+++ b/game/core/src/main/java/net/minecraft/core/net/command/helpers/BlockArgumentParser.java
@@ -7,6 +7,7 @@ import com.mojang.brigadier.suggestion.Suggestions;
 import com.mojang.brigadier.suggestion.SuggestionsBuilder;
 import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.lang.I18n;
 import net.minecraft.core.net.command.util.CommandHelper;
 import net.minecraft.core.util.collection.NamespaceID;
@@ -66,7 +67,7 @@ public class BlockArgumentParser extends ArgumentParser {
             this.block = null;
             isAir = true;
         } else {
-            for (Block blockInList : Block.blocksList) {
+            for (Block blockInList : Blocks.blocksList) {
                 if (blockInList == null) continue;
                 if (CommandHelper.matchesNamespaceId(blockInList.namespaceID, string)) {
                     this.block = blockInList;
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/BlockInput.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/BlockInput.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/BlockInput.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/BlockInput.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/ClonedBlock.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/ClonedBlock.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/ClonedBlock.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/ClonedBlock.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/Coordinates2D.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/Coordinates2D.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/Coordinates2D.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/Coordinates2D.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/DoubleCoordinate.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/DoubleCoordinate.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/DoubleCoordinate.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/DoubleCoordinate.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/DoubleCoordinates.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/DoubleCoordinates.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/DoubleCoordinates.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/DoubleCoordinates.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/EntitySelector.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/EntitySelector.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/EntitySelector.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/EntitySelector.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/EntitySelectorOptions.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/EntitySelectorOptions.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/EntitySelectorOptions.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/EntitySelectorOptions.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/EntitySelectorParser.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/EntitySelectorParser.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/EntitySelectorParser.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/EntitySelectorParser.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/IntegerCoordinate.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/IntegerCoordinate.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/IntegerCoordinate.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/IntegerCoordinate.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/IntegerCoordinates.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/IntegerCoordinates.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/IntegerCoordinates.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/IntegerCoordinates.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/ItemStackArgumentParser.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/ItemStackArgumentParser.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/ItemStackArgumentParser.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/ItemStackArgumentParser.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/MinMaxBounds.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/MinMaxBounds.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/MinMaxBounds.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/MinMaxBounds.java
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/WorldFeatureParameterTypes.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/WorldFeatureParameterTypes.java
similarity index 95%
rename from src/main/java/net/minecraft/core/net/command/helpers/WorldFeatureParameterTypes.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/WorldFeatureParameterTypes.java
index e13c5cf3f..ea043a279 100644
--- a/src/main/java/net/minecraft/core/net/command/helpers/WorldFeatureParameterTypes.java
+++ b/game/core/src/main/java/net/minecraft/core/net/command/helpers/WorldFeatureParameterTypes.java
@@ -3,6 +3,7 @@ package net.minecraft.core.net.command.helpers;
 import com.mojang.brigadier.StringReader;
 import com.mojang.brigadier.exceptions.CommandSyntaxException;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.lang.I18n;
 import net.minecraft.core.net.command.util.CommandHelper;
 
@@ -37,7 +38,7 @@ public class WorldFeatureParameterTypes {
         int cursor = reader.getCursor();
         final String string = reader.readString();
 
-        for (Block blockInList : Block.blocksList) {
+        for (Block blockInList : Blocks.blocksList) {
             if (blockInList == null) continue;
             if (CommandHelper.matchesKeyString(blockInList.getKey(), string)) {
                 return blockInList;
diff --git a/src/main/java/net/minecraft/core/net/command/helpers/WorldFeatureParser.java b/game/core/src/main/java/net/minecraft/core/net/command/helpers/WorldFeatureParser.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/helpers/WorldFeatureParser.java
rename to game/core/src/main/java/net/minecraft/core/net/command/helpers/WorldFeatureParser.java
diff --git a/src/main/java/net/minecraft/core/net/command/util/BeautifulNbt.java b/game/core/src/main/java/net/minecraft/core/net/command/util/BeautifulNbt.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/util/BeautifulNbt.java
rename to game/core/src/main/java/net/minecraft/core/net/command/util/BeautifulNbt.java
diff --git a/src/main/java/net/minecraft/core/net/command/util/CommandHelper.java b/game/core/src/main/java/net/minecraft/core/net/command/util/CommandHelper.java
similarity index 98%
rename from src/main/java/net/minecraft/core/net/command/util/CommandHelper.java
rename to game/core/src/main/java/net/minecraft/core/net/command/util/CommandHelper.java
index d06f75197..20d263128 100644
--- a/src/main/java/net/minecraft/core/net/command/util/CommandHelper.java
+++ b/game/core/src/main/java/net/minecraft/core/net/command/util/CommandHelper.java
@@ -6,6 +6,7 @@ import com.mojang.brigadier.suggestion.SuggestionsBuilder;
 import com.mojang.nbt.CompoundTag;
 import com.mojang.nbt.Tag;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.net.command.CommandSource;
@@ -29,7 +30,7 @@ public class CommandHelper {
     public static final BiFunction<SuggestionsBuilder, Consumer<SuggestionsBuilder>, CompletableFuture<Suggestions>> NO_SUGGESTIONS = (builder, consumer) -> builder.buildFuture();
     public static final BiFunction<SuggestionsBuilder, Consumer<SuggestionsBuilder>, CompletableFuture<Suggestions>> SUGGEST_BLOCKS = (builder, consumer) -> {
         String remaining = builder.getRemaining().toLowerCase(Locale.ROOT);
-        for (Block block : Block.blocksList) {
+        for (Block block : Blocks.blocksList) {
             if (block == null) continue;
             CommandHelper.getStringToSuggest(block.getKey(), remaining).ifPresent(builder::suggest);
         }
diff --git a/src/main/java/net/minecraft/core/net/command/util/CommandReflectionHelper.java b/game/core/src/main/java/net/minecraft/core/net/command/util/CommandReflectionHelper.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/util/CommandReflectionHelper.java
rename to game/core/src/main/java/net/minecraft/core/net/command/util/CommandReflectionHelper.java
diff --git a/src/main/java/net/minecraft/core/net/command/util/ConcatIterable.java b/game/core/src/main/java/net/minecraft/core/net/command/util/ConcatIterable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/util/ConcatIterable.java
rename to game/core/src/main/java/net/minecraft/core/net/command/util/ConcatIterable.java
diff --git a/src/main/java/net/minecraft/core/net/command/util/Iterables.java b/game/core/src/main/java/net/minecraft/core/net/command/util/Iterables.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/util/Iterables.java
rename to game/core/src/main/java/net/minecraft/core/net/command/util/Iterables.java
diff --git a/src/main/java/net/minecraft/core/net/command/util/NbtHelper.java b/game/core/src/main/java/net/minecraft/core/net/command/util/NbtHelper.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/command/util/NbtHelper.java
rename to game/core/src/main/java/net/minecraft/core/net/command/util/NbtHelper.java
diff --git a/src/main/java/net/minecraft/core/net/entity/EntityTracker.java b/game/core/src/main/java/net/minecraft/core/net/entity/EntityTracker.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/entity/EntityTracker.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/EntityTracker.java
diff --git a/src/main/java/net/minecraft/core/net/entity/EntityTrackerEntry.java b/game/core/src/main/java/net/minecraft/core/net/entity/EntityTrackerEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/entity/EntityTrackerEntry.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/EntityTrackerEntry.java
diff --git a/src/main/java/net/minecraft/core/net/entity/INetworkEntry.java b/game/core/src/main/java/net/minecraft/core/net/entity/INetworkEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/entity/INetworkEntry.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/INetworkEntry.java
diff --git a/src/main/java/net/minecraft/core/net/entity/IPacketEntry.java b/game/core/src/main/java/net/minecraft/core/net/entity/IPacketEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/entity/IPacketEntry.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/IPacketEntry.java
diff --git a/src/main/java/net/minecraft/core/net/entity/ITrackedEntry.java b/game/core/src/main/java/net/minecraft/core/net/entity/ITrackedEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/entity/ITrackedEntry.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/ITrackedEntry.java
diff --git a/src/main/java/net/minecraft/core/net/entity/IVehicleEntry.java b/game/core/src/main/java/net/minecraft/core/net/entity/IVehicleEntry.java
similarity index 74%
rename from src/main/java/net/minecraft/core/net/entity/IVehicleEntry.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/IVehicleEntry.java
index cd2233e27..61a436ba7 100644
--- a/src/main/java/net/minecraft/core/net/entity/IVehicleEntry.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/IVehicleEntry.java
@@ -1,10 +1,10 @@
 package net.minecraft.core.net.entity;
 
 import net.minecraft.core.entity.Entity;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.world.World;
 
 public interface IVehicleEntry<T> extends IPacketEntry<T> {
     Entity getEntity(World world, double x, double y, double z, int metadata, boolean hasVelocity, double xd, double yd, double zd, Entity owner);
-    AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, T trackedObject);
+    PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, T trackedObject);
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/NetEntityHandler.java b/game/core/src/main/java/net/minecraft/core/net/entity/NetEntityHandler.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/entity/NetEntityHandler.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/NetEntityHandler.java
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryAnimal.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryAnimal.java
similarity index 91%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryAnimal.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryAnimal.java
index 1c064a456..45bc7d06b 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryAnimal.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryAnimal.java
@@ -7,7 +7,7 @@ import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.IPacketEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.AddMobPacket;
+import net.minecraft.core.net.packet.PacketAddMob;
 import org.jetbrains.annotations.NotNull;
 
 public class NetEntryAnimal<T extends Creature> implements IPacketEntry<T>, ITrackedEntry<T> {
@@ -38,6 +38,6 @@ public class NetEntryAnimal<T extends Creature> implements IPacketEntry<T>, ITra
 
     @Override
     public Packet getSpawnPacket(EntityTrackerEntry tracker, Creature trackedObject) {
-        return new AddMobPacket((Mob) trackedObject);
+        return new PacketAddMob((Mob) trackedObject);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryArrow.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryArrow.java
similarity index 92%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryArrow.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryArrow.java
index 0041b8f0a..ce5099a08 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryArrow.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryArrow.java
@@ -9,7 +9,7 @@ import net.minecraft.core.net.entity.EntityTracker;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.entity.IVehicleEntry;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.NotNull;
 
@@ -51,9 +51,9 @@ public class NetEntryArrow implements IVehicleEntry<ProjectileArrow>, ITrackedEn
     }
 
     @Override
-    public AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, ProjectileArrow trackedObject) {
+    public PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, ProjectileArrow trackedObject) {
         Mob entityliving = trackedObject.owner;
-        return new AddEntityPacket(trackedObject,
+        return new PacketAddEntity(trackedObject,
             trackedObject.getArrowType(), entityliving == null ? -1 : entityliving.id,
             trackedObject.xd, trackedObject.yd, trackedObject.zd);
     }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryBoat.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryBoat.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryBoat.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryBoat.java
index 3d0d78d16..e7177fae9 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryBoat.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryBoat.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.entity.EntityTracker;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.entity.IVehicleEntry;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.NotNull;
 
@@ -42,7 +42,7 @@ public class NetEntryBoat implements IVehicleEntry<EntityBoat>, ITrackedEntry<En
     }
 
     @Override
-    public AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, EntityBoat trackedObject) {
-        return new AddEntityPacket(trackedObject);
+    public PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, EntityBoat trackedObject) {
+        return new PacketAddEntity(trackedObject);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryBobber.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryBobber.java
similarity index 89%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryBobber.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryBobber.java
index 66e5cb57f..266e98d12 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryBobber.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryBobber.java
@@ -7,7 +7,7 @@ import net.minecraft.core.net.entity.EntityTracker;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.entity.IVehicleEntry;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.NotNull;
 
@@ -48,7 +48,7 @@ public class NetEntryBobber implements IVehicleEntry<EntityFishingBobber>, ITrac
     }
 
     @Override
-    public AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, EntityFishingBobber bobber) {
-        return new AddEntityPacket(bobber, 0, bobber.owner == null ? -1 : bobber.owner.id);
+    public PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, EntityFishingBobber bobber) {
+        return new PacketAddEntity(bobber, 0, bobber.owner == null ? -1 : bobber.owner.id);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryCannonball.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryCannonball.java
similarity index 90%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryCannonball.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryCannonball.java
index 7332554d1..1b8ad3ad9 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryCannonball.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryCannonball.java
@@ -7,7 +7,7 @@ import net.minecraft.core.net.entity.EntityTracker;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.entity.IVehicleEntry;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.NotNull;
 
@@ -43,9 +43,9 @@ public class NetEntryCannonball implements IVehicleEntry<ProjectileCannonball>,
     }
 
     @Override
-    public AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, ProjectileCannonball trackedObject) {
+    public PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, ProjectileCannonball trackedObject) {
         Mob entityliving = trackedObject.owner;
-        return new AddEntityPacket(trackedObject, -1,
+        return new PacketAddEntity(trackedObject, -1,
             entityliving == null ? -1 : entityliving.id,
             trackedObject.xd, trackedObject.yd, trackedObject.zd);
     }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryEgg.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryEgg.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryEgg.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryEgg.java
index 4ad2a3e4f..af9aef5cf 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryEgg.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryEgg.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.entity.EntityTracker;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.entity.IVehicleEntry;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.NotNull;
 
@@ -42,7 +42,7 @@ public class NetEntryEgg implements IVehicleEntry<ProjectileEgg>, ITrackedEntry<
     }
 
     @Override
-    public AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, ProjectileEgg trackedObject) {
-        return new AddEntityPacket(trackedObject);
+    public PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, ProjectileEgg trackedObject) {
+        return new PacketAddEntity(trackedObject);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFallingBlock.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFallingBlock.java
similarity index 84%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryFallingBlock.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFallingBlock.java
index eb23a029b..3d49e2850 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFallingBlock.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFallingBlock.java
@@ -1,13 +1,14 @@
 package net.minecraft.core.net.entity.entries;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityFallingBlock;
 import net.minecraft.core.net.entity.EntityTracker;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.entity.IVehicleEntry;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.NotNull;
@@ -40,11 +41,11 @@ public class NetEntryFallingBlock implements IVehicleEntry<EntityFallingBlock>,
 
     @Override
     public Entity getEntity(World world, double x, double y, double z, int metadata, boolean hasVelocity, double xd, double yd, double zd, Entity owner) {
-        return new EntityFallingBlock(world, x, y, z, MathHelper.clamp(metadata, 0, Block.blocksList.length), 0, null);
+        return new EntityFallingBlock(world, x, y, z, MathHelper.clamp(metadata, 0, Blocks.blocksList.length), 0, null);
     }
 
     @Override
-    public AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, EntityFallingBlock trackedObject) {
-        return new AddEntityPacket(trackedObject, trackedObject.carriedBlock.blockId);
+    public PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, EntityFallingBlock trackedObject) {
+        return new PacketAddEntity(trackedObject, trackedObject.carriedBlock.blockId);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFireball.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFireball.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryFireball.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFireball.java
index 6d241ab3e..acae630e1 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFireball.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFireball.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.entity.EntityTracker;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.entity.IVehicleEntry;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.NotNull;
 
@@ -42,7 +42,7 @@ public class NetEntryFireball implements IVehicleEntry<ProjectileFireball>, ITra
     }
 
     @Override
-    public AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, ProjectileFireball trackedObject) {
-        return new AddEntityPacket(trackedObject, -1, -1, trackedObject.xd, trackedObject.yd, trackedObject.zd);
+    public PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, ProjectileFireball trackedObject) {
+        return new PacketAddEntity(trackedObject, -1, -1, trackedObject.xd, trackedObject.yd, trackedObject.zd);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFirefly.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFirefly.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryFirefly.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryFirefly.java
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryItem.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryItem.java
similarity index 89%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryItem.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryItem.java
index 55ed09609..4b99dde35 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryItem.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryItem.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.IPacketEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.AddItemEntityPacket;
+import net.minecraft.core.net.packet.PacketAddItemEntity;
 import org.jetbrains.annotations.NotNull;
 
 public class NetEntryItem implements IPacketEntry<EntityItem>, ITrackedEntry<EntityItem> {
@@ -37,7 +37,7 @@ public class NetEntryItem implements IPacketEntry<EntityItem>, ITrackedEntry<Ent
 
     @Override
     public Packet getSpawnPacket(EntityTrackerEntry tracker, EntityItem trackedObject) {
-        AddItemEntityPacket addItemEntityPacket21Pickupspawn = new AddItemEntityPacket(trackedObject);
+        PacketAddItemEntity addItemEntityPacket21Pickupspawn = new PacketAddItemEntity(trackedObject);
         trackedObject.x = addItemEntityPacket21Pickupspawn.xPosition / 32D;
         trackedObject.y = addItemEntityPacket21Pickupspawn.yPosition / 32D;
         trackedObject.z = addItemEntityPacket21Pickupspawn.zPosition / 32D;
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryMinecart.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryMinecart.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryMinecart.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryMinecart.java
index a7bd12f50..792989d65 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryMinecart.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryMinecart.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.entity.EntityTracker;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.entity.IVehicleEntry;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.NotNull;
 
@@ -42,7 +42,7 @@ public class NetEntryMinecart implements IVehicleEntry<MinecartEntity>, ITracked
     }
 
     @Override
-    public AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, MinecartEntity trackedObject) {
-        return new AddEntityPacket(trackedObject, trackedObject.type);
+    public PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, MinecartEntity trackedObject) {
+        return new PacketAddEntity(trackedObject, trackedObject.type);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPainting.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPainting.java
similarity index 91%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryPainting.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPainting.java
index 6ff6b30c3..4c42ac530 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPainting.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPainting.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.IPacketEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.AddPaintingPacket;
+import net.minecraft.core.net.packet.PacketAddPainting;
 import org.jetbrains.annotations.NotNull;
 
 public class NetEntryPainting implements IPacketEntry<EntityPainting>, ITrackedEntry<EntityPainting> {
@@ -37,6 +37,6 @@ public class NetEntryPainting implements IPacketEntry<EntityPainting>, ITrackedE
 
     @Override
     public Packet getSpawnPacket(EntityTrackerEntry tracker, EntityPainting trackedObject) {
-        return new AddPaintingPacket(trackedObject);
+        return new PacketAddPainting(trackedObject);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPebble.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPebble.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryPebble.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPebble.java
index 902023ef9..b80ce2cd5 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPebble.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPebble.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.entity.EntityTracker;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.entity.IVehicleEntry;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.NotNull;
 
@@ -42,7 +42,7 @@ public class NetEntryPebble implements IVehicleEntry<ProjectilePebble>, ITracked
     }
 
     @Override
-    public AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, ProjectilePebble trackedObject) {
-        return new AddEntityPacket(trackedObject);
+    public PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, ProjectilePebble trackedObject) {
+        return new PacketAddEntity(trackedObject);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPlayerServer.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPlayerServer.java
similarity index 92%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryPlayerServer.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPlayerServer.java
index 694fd51da..25745f8fd 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPlayerServer.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPlayerServer.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.IPacketEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.AddPlayerPacket;
+import net.minecraft.core.net.packet.PacketAddPlayer;
 import org.jetbrains.annotations.NotNull;
 
 public class NetEntryPlayerServer implements IPacketEntry<Player>, ITrackedEntry<Player> {
@@ -41,6 +41,6 @@ public class NetEntryPlayerServer implements IPacketEntry<Player>, ITrackedEntry
 
     @Override
     public Packet getSpawnPacket(EntityTrackerEntry tracker, Player trackedObject) {
-        return new AddPlayerPacket(trackedObject);
+        return new PacketAddPlayer(trackedObject);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPrimedTNT.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPrimedTNT.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntryPrimedTNT.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPrimedTNT.java
index 3e28ff4b4..722cca273 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPrimedTNT.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntryPrimedTNT.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.entity.EntityTracker;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.entity.IVehicleEntry;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.NotNull;
 
@@ -42,7 +42,7 @@ public class NetEntryPrimedTNT implements IVehicleEntry<EntityPrimedTNT>, ITrack
     }
 
     @Override
-    public AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, EntityPrimedTNT trackedObject) {
-        return new AddEntityPacket(trackedObject);
+    public PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, EntityPrimedTNT trackedObject) {
+        return new PacketAddEntity(trackedObject);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntrySnowball.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntrySnowball.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntrySnowball.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntrySnowball.java
index 1d00cba52..414e3f1df 100644
--- a/src/main/java/net/minecraft/core/net/entity/entries/NetEntrySnowball.java
+++ b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntrySnowball.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.entity.EntityTracker;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.ITrackedEntry;
 import net.minecraft.core.net.entity.IVehicleEntry;
-import net.minecraft.core.net.packet.AddEntityPacket;
+import net.minecraft.core.net.packet.PacketAddEntity;
 import net.minecraft.core.world.World;
 import org.jetbrains.annotations.NotNull;
 
@@ -42,7 +42,7 @@ public class NetEntrySnowball implements IVehicleEntry<ProjectileSnowball>, ITra
     }
 
     @Override
-    public AddEntityPacket getSpawnPacket(EntityTrackerEntry tracker, ProjectileSnowball trackedObject) {
-        return new AddEntityPacket(trackedObject);
+    public PacketAddEntity getSpawnPacket(EntityTrackerEntry tracker, ProjectileSnowball trackedObject) {
+        return new PacketAddEntity(trackedObject);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/entity/entries/NetEntrySquid.java b/game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntrySquid.java
similarity index 100%
rename from src/main/java/net/minecraft/core/net/entity/entries/NetEntrySquid.java
rename to game/core/src/main/java/net/minecraft/core/net/entity/entries/NetEntrySquid.java
diff --git a/src/main/java/net/minecraft/core/net/handler/PacketHandler.java b/game/core/src/main/java/net/minecraft/core/net/handler/PacketHandler.java
similarity index 53%
rename from src/main/java/net/minecraft/core/net/handler/PacketHandler.java
rename to game/core/src/main/java/net/minecraft/core/net/handler/PacketHandler.java
index b7b47d0a1..8573791af 100644
--- a/src/main/java/net/minecraft/core/net/handler/PacketHandler.java
+++ b/game/core/src/main/java/net/minecraft/core/net/handler/PacketHandler.java
@@ -11,7 +11,7 @@ public abstract class PacketHandler
 
     public abstract boolean isServerHandler();
 
-    public void handleMapChunk(BlockRegionUpdatePacket blockRegionUpdatePacket)
+    public void handleMapChunk(PacketBlockRegionUpdate blockRegionUpdatePacket)
     {
     }
 
@@ -23,365 +23,365 @@ public abstract class PacketHandler
     {
     }
 
-    public void handleKickDisconnect(DisconnectPacket packet255KickdisconnectPacket)
+    public void handleKickDisconnect(PacketDisconnect packet255KickdisconnectPacket)
     {
         handleInvalidPacket(packet255KickdisconnectPacket);
     }
 
-    public void handleLogin(LoginPacket loginPacket)
+    public void handleLogin(PacketLogin loginPacket)
     {
         handleInvalidPacket(loginPacket);
     }
 
-    public void handleFlying(MovePlayerPacket movePlayerPacket)
+    public void handleFlying(PacketMovePlayer movePlayerPacket)
     {
         handleInvalidPacket(movePlayerPacket);
     }
 
-    public void handleMultiBlockChange(ChunkBlocksUpdatePacket chunkBlocksUpdatePacket)
+    public void handleMultiBlockChange(PacketChunkBlocksUpdate chunkBlocksUpdatePacket)
     {
         handleInvalidPacket(chunkBlocksUpdatePacket);
     }
 
-    public void handleBlockDig(PlayerActionPacket playerActionPacket)
+    public void handleBlockDig(PacketPlayerAction playerActionPacket)
     {
         handleInvalidPacket(playerActionPacket);
     }
 
-    public void handleBlockUpdate(BlockUpdatePacket blockUpdatePacket)
+    public void handleBlockUpdate(PacketBlockUpdate blockUpdatePacket)
     {
         handleInvalidPacket(blockUpdatePacket);
     }
 
-    public void handlePreChunk(ChunkVisibilityPacket chunkVisibilityPacket)
+    public void handlePreChunk(PacketChunkVisibility chunkVisibilityPacket)
     {
         handleInvalidPacket(chunkVisibilityPacket);
     }
 
-    public void handleNamedEntitySpawn(AddPlayerPacket addPlayerPacket)
+    public void handleNamedEntitySpawn(PacketAddPlayer addPlayerPacket)
     {
         handleInvalidPacket(addPlayerPacket);
     }
 
-    public void handleEntity(MoveEntityPacket moveEntityPacket)
+    public void handleEntity(PacketMoveEntity moveEntityPacket)
     {
         handleInvalidPacket(moveEntityPacket);
     }
 
-    public void handleEntityTeleport(TeleportEntityPacket teleportEntityPacket)
+    public void handleEntityTeleport(PacketTeleportEntity teleportEntityPacket)
     {
         handleInvalidPacket(teleportEntityPacket);
     }
 
-    public void handlePlace(UseItemPacket useItemPacket)
+    public void handlePlace(PacketUseItem useItemPacket)
     {
         handleInvalidPacket(useItemPacket);
     }
 
-    public void handleBlockItemSwitch(SetCarriedItemPacket setCarriedItemPacket)
+    public void handleBlockItemSwitch(PacketSetCarriedItem setCarriedItemPacket)
     {
         handleInvalidPacket(setCarriedItemPacket);
     }
 
-    public void handleDestroyEntity(RemoveEntityPacket removeEntityPacket)
+    public void handleDestroyEntity(PacketRemoveEntity removeEntityPacket)
     {
         handleInvalidPacket(removeEntityPacket);
     }
 
-    public void handleSetPaintingMotive(SetPaintingArtPacket setPaintingArtPacket)
+    public void handleSetPaintingMotive(PacketSetPaintingArt setPaintingArtPacket)
     {
         handleInvalidPacket(setPaintingArtPacket);
     }
 
-    public void handlePickupSpawn(AddItemEntityPacket addItemEntityPacket)
+    public void handlePickupSpawn(PacketAddItemEntity addItemEntityPacket)
     {
         handleInvalidPacket(addItemEntityPacket);
     }
 
-    public void handleCollect(TakeItemEntityPacket takeItemEntityPacket)
+    public void handleCollect(PacketTakeItemEntity takeItemEntityPacket)
     {
         handleInvalidPacket(takeItemEntityPacket);
     }
 
-    public void handleChat(ChatPacket chatPacket)
+    public void handleChat(PacketChat chatPacket)
     {
         handleInvalidPacket(chatPacket);
     }
 
-    public void handleVehicleSpawn(AddEntityPacket addEntityPacket)
+    public void handleVehicleSpawn(PacketAddEntity addEntityPacket)
     {
         handleInvalidPacket(addEntityPacket);
     }
 
-    public void handleAnimation(AnimatePacket animatePacket)
+    public void handleAnimation(PacketAnimate animatePacket)
     {
         handleInvalidPacket(animatePacket);
     }
 
-    public void handlePlayerState(UpdatePlayerStatePacket updatePlayerStatePacket)
+    public void handlePlayerState(PacketUpdatePlayerState updatePlayerStatePacket)
     {
         handleInvalidPacket(updatePlayerStatePacket);
     }
 
-    public void handleHandshake(PreLoginPacket preLoginPacket)
+    public void handleHandshake(PacketPreLogin preLoginPacket)
     {
         handleInvalidPacket(preLoginPacket);
     }
 
-    public void handleMobSpawn(AddMobPacket addMobPacket)
+    public void handleMobSpawn(PacketAddMob addMobPacket)
     {
         handleInvalidPacket(addMobPacket);
     }
 
-    public void handleUpdateTime(SetTimePacket setTimePacket)
+    public void handleUpdateTime(PacketSetTime setTimePacket)
     {
         handleInvalidPacket(setTimePacket);
     }
 
-    public void handleSpawnPosition(SetSpawnPositionPacket setSpawnPositionPacket)
+    public void handleSpawnPosition(PacketSetSpawnPosition setSpawnPositionPacket)
     {
         handleInvalidPacket(setSpawnPositionPacket);
     }
 
-    public void handleEntityVelocity(SetEntityMotionPacket setEntityMotionPacket)
+    public void handleEntityVelocity(PacketSetEntityMotion setEntityMotionPacket)
     {
         handleInvalidPacket(setEntityMotionPacket);
     }
 
-    public void handleEntityMetadata(SetEntityDataPacket setEntityDataPacket)
+    public void handleEntityMetadata(PacketSetEntityData setEntityDataPacket)
     {
         handleInvalidPacket(setEntityDataPacket);
     }
 
-    public void handleAttachEntity(SetRidingPacket setRidingPacket)
+    public void handleAttachEntity(PacketSetRiding setRidingPacket)
     {
         handleInvalidPacket(setRidingPacket);
     }
 
-    public void handleUseEntity(InteractPacket interactPacket)
+    public void handleUseEntity(PacketInteract interactPacket)
     {
         handleInvalidPacket(interactPacket);
     }
 
-    public void handleEntityStatus(EnitityEventPacket enitityEventPacket)
+    public void handleEntityStatus(PacketEntityEvent enitityEventPacket)
     {
         handleInvalidPacket(enitityEventPacket);
     }
 
-    public void handleEntityTagData(EntityTagDataPacket entityTagDataPacket)
+    public void handleEntityTagData(PacketEntityTagData entityTagDataPacket)
     {
         handleInvalidPacket(entityTagDataPacket);
     }
 
-    public void handleUpdateHealth(SetHealthPacket setHealthPacket)
+    public void handleUpdateHealth(PacketSetHealth setHealthPacket)
     {
         handleInvalidPacket(setHealthPacket);
     }
 
-    public void handleUpdatePlayerProfile(UpdatePlayerProfilePacket updatePlayerProfilePacket)
+    public void handleUpdatePlayerProfile(PacketUpdatePlayerProfile updatePlayerProfilePacket)
     {
         handleInvalidPacket(updatePlayerProfilePacket);
     }
 
-    public void handleRespawn(RespawnPacket respawnPacket)
+    public void handleRespawn(PacketRespawn respawnPacket)
     {
         handleInvalidPacket(respawnPacket);
     }
 
-    public void handleExplosion(ExplosionPacket explosionPacket)
+    public void handleExplosion(PacketExplosion explosionPacket)
     {
         handleInvalidPacket(explosionPacket);
     }
 
-    public void handleOpenWindow(ContainerOpenPacket containerOpenPacket)
+    public void handleOpenWindow(PacketContainerOpen containerOpenPacket)
     {
         handleInvalidPacket(containerOpenPacket);
     }
 
-    public void handleCloseWindow(ContainerClosePacket containerClosePacket)
+    public void handleCloseWindow(PacketContainerClose containerClosePacket)
     {
         handleInvalidPacket(containerClosePacket);
     }
 
-    public void handleWindowClick(ContainerClickPacket containerClickPacket)
+    public void handleWindowClick(PacketContainerClick containerClickPacket)
     {
         handleInvalidPacket(containerClickPacket);
     }
 
-    public void handleTileEntityData(BlockEntityDataPacket blockEntityDataPacket)
+    public void handleTileEntityData(PacketBlockEntityData blockEntityDataPacket)
     {
         handleInvalidPacket(blockEntityDataPacket);
     }
 
-    public void handleSetSlot(ContainerSetSlotPacket containerSetslotPacket)
+    public void handleSetSlot(PacketContainerSetSlot containerSetslotPacket)
     {
         handleInvalidPacket(containerSetslotPacket);
     }
 
-    public void handleWindowItems(ContainerSetContentPacket containerSetContentPacket)
+    public void handleWindowItems(PacketContainerSetContent containerSetContentPacket)
     {
         handleInvalidPacket(containerSetContentPacket);
     }
 
-    public void handleUpdateSign(SignUpdatePacket signUpdatePacket)
+    public void handleUpdateSign(PacketSignUpdate signUpdatePacket)
     {
         handleInvalidPacket(signUpdatePacket);
     }
 
-    public void handleSetMobSpawner(SetMobSpawnerPacket setMobSpawnerPacket)
+    public void handleSetMobSpawner(PacketSetMobSpawner setMobSpawnerPacket)
     {
         handleInvalidPacket(setMobSpawnerPacket);
     }
     
-    public void handleUpdateProgressbar(ContainerSetDataPacket containerSetDataPacket)
+    public void handleUpdateProgressbar(PacketContainerSetData containerSetDataPacket)
     {
         handleInvalidPacket(containerSetDataPacket);
     }
 
-    public void handlePlayerInventory(SetEquippedItemPacket setEquippedItemPacket)
+    public void handlePlayerInventory(PacketSetEquippedItem setEquippedItemPacket)
     {
         handleInvalidPacket(setEquippedItemPacket);
     }
 
-    public void handlePlayerHeldObject(SetHeldObjectPacket setHeldObjectPacket) {
+    public void handlePlayerHeldObject(PacketSetHeldObject setHeldObjectPacket) {
         handleInvalidPacket(setHeldObjectPacket);
     }
 
-    public void handleTransaction(ContainerAckPacket containerAckPacket)
+    public void handleTransaction(PacketContainerAck containerAckPacket)
     {
         handleInvalidPacket(containerAckPacket);
     }
 
-    public void handleEntityPainting(AddPaintingPacket addPaintingPacket)
+    public void handleEntityPainting(PacketAddPainting addPaintingPacket)
     {
         handleInvalidPacket(addPaintingPacket);
     }
-    public void handleBoatControl(BoatControlPacket boatControlPacket)
+    public void handleBoatControl(PacketBoatControl boatControlPacket)
     {
         handleInvalidPacket(boatControlPacket);
     }
 
-    public void handleBlockEvent(BlockEventPacket blockEventPacket)
+    public void handleBlockEvent(PacketBlockEvent blockEventPacket)
     {
         handleInvalidPacket(blockEventPacket);
     }
 
-    public void handleStatistic(StatisticPacket statisticPacket)
+    public void handleStatistic(PacketStatistic statisticPacket)
     {
         handleInvalidPacket(statisticPacket);
     }
 
-    public void handleSleep(SleepPacket sleepPacket)
+    public void handleSleep(PacketSleep sleepPacket)
     {
         handleInvalidPacket(sleepPacket);
     }
-    public void handleBed(BedMessagePacket bedMessagePacket)
+    public void handleBed(PacketBedMessage bedMessagePacket)
     {
         handleInvalidPacket(bedMessagePacket);
     }
 
-    public void handleWeather(WeatherEffectPacket weatherEffectPacket)
+    public void handleWeather(PacketWeatherEffect weatherEffectPacket)
     {
         handleInvalidPacket(weatherEffectPacket);
     }
 
-    public void handleMapData(MapDataPacket mapdataPacket)
+    public void handleMapData(PacketMapData mapdataPacket)
     {
         handleInvalidPacket(mapdataPacket);
     }
 
-    public void handlePlaySoundEffect(PlaySoundEffectPacket playSoundEffectPacket)
+    public void handlePlaySoundEffect(PacketPlaySoundEffect playSoundEffectPacket)
     {
         handleInvalidPacket(playSoundEffectPacket);
     }
-    public void handlePlaySoundDirectly(PlaySoundEffectDirectPacket playSoundEffectDirectPacket)
+    public void handlePlaySoundDirectly(PacketPlaySoundEffectDirect playSoundEffectDirectPacket)
     {
         handleInvalidPacket(playSoundEffectDirectPacket);
     }
-    public void handleSpawnParticle(AddParticlePacket addParticlePacket)
+    public void handleSpawnParticle(PacketAddParticle addParticlePacket)
     {
         handleInvalidPacket(addParticlePacket);
     }
 
-    public void handleEntityPlayerGamemode(PlayerGamemodePacket playerGamemodePacket)
+    public void handleEntityPlayerGamemode(PacketPlayerGamemode playerGamemodePacket)
     {
         handleInvalidPacket(playerGamemodePacket);
     }
 
-    public void handleUpdateCreativeInventory(UpdateCreativeInventoryPacket updateCreativeInventoryPacket)
+    public void handleUpdateCreativeInventory(PacketUpdateCreativeInventory updateCreativeInventoryPacket)
     {
         handleInvalidPacket(updateCreativeInventoryPacket);
     }
 
-    public void handleWeatherStatus(WeatherStatusPacket weatherStatusPacket)
+    public void handleWeatherStatus(PacketWeatherStatus weatherStatusPacket)
     {
         handleInvalidPacket(weatherStatusPacket);
     }
 
-    public void handleOpenGuidebook(GuidebookPacket guidebookPacket)
+    public void handleOpenGuidebook(PacketGuidebook guidebookPacket)
     {
         handleInvalidPacket(guidebookPacket);
     }
 
-    public void handleSetHotbarOffset(SetHotbarOffsetPacket setHotbarOffsetPacket)
+    public void handleSetHotbarOffset(PacketSetHotbarOffset setHotbarOffsetPacket)
     {
         handleInvalidPacket(setHotbarOffsetPacket);
     }
 
-    public void handleEntityNickname(EntityNicknamePacket entityNicknamePacket)
+    public void handleEntityNickname(PacketEntityNickname entityNicknamePacket)
     {
         handleInvalidPacket(entityNicknamePacket);
     }
 
-    public void handleSendKey(AESSendKeyPacket AESSendKeyPacket)
+    public void handleSendKey(PacketAESSendKey AESSendKeyPacket)
     {
         handleInvalidPacket(AESSendKeyPacket);
     }
 
-    public void handleItemName(SetItemNamePacket setItemNamePacket)
+    public void handleItemName(PacketSetItemName setItemNamePacket)
     {
         handleInvalidPacket(setItemNamePacket);
     }
-    public void handlePlayerList(PlayerListPacket playerListPacket)
+    public void handlePlayerList(PacketPlayerList playerListPacket)
     {
         handleInvalidPacket(playerListPacket);
     }
 
-    public void handleOpenFlagWindow(FlagOpenPacket flagOpenPacket)
+    public void handleOpenFlagWindow(PacketFlagOpen flagOpenPacket)
     {
         handleInvalidPacket(flagOpenPacket);
     }
 
-    public void handlePhotoMode(PhotoModePacket photoModePacket)
+    public void handlePhotoMode(PacketPhotoMode photoModePacket)
     {
         handleInvalidPacket(photoModePacket);
     }
 
-    public void handlePingHandshake(PingHandshakePacket pingHandshakePacket) {
+    public void handlePingHandshake(PacketPingHandshake pingHandshakePacket) {
         handleInvalidPacket(pingHandshakePacket);
     }
 
-    public void handleGameRule(GameRulePacket gameRulePacket) {
+    public void handleGameRule(PacketGameRule gameRulePacket) {
         handleInvalidPacket(gameRulePacket);
     }
 
-    public void handleSyncedRecipe(RecipeSyncPacket recipeSyncPacket) {
+    public void handleSyncedRecipe(PacketRecipeSync recipeSyncPacket) {
         handleInvalidPacket(recipeSyncPacket);
     }
     
-    public void handleIds(SyncIDsPacket syncIDsPacket) {
+    public void handleIds(PacketSyncIDs syncIDsPacket) {
     	handleInvalidPacket(syncIDsPacket);
     }
     
-    public void handleCustomPayload(CustomPayloadPacket customPayloadPacket) {
+    public void handleCustomPayload(PacketCustomPayload customPayloadPacket) {
     	handleInvalidPacket(customPayloadPacket);
     }
 
-    public void handleCommandManagerPacket(CommandManagerPacket commandManagerPacket) {
+    public void handleCommandManagerPacket(PacketCommandManager commandManagerPacket) {
         handleInvalidPacket(commandManagerPacket);
     }
 
-    public void handleRequestCommandManagerPacket(RequestCommandManagerPacket requestCommandManagerPacket) {
+    public void handleRequestCommandManagerPacket(PacketRequestCommandManager requestCommandManagerPacket) {
         handleInvalidPacket(requestCommandManagerPacket);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/packet/Packet.java b/game/core/src/main/java/net/minecraft/core/net/packet/Packet.java
similarity index 61%
rename from src/main/java/net/minecraft/core/net/packet/Packet.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/Packet.java
index 6938b9216..371cfb9f0 100644
--- a/src/main/java/net/minecraft/core/net/packet/Packet.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/Packet.java
@@ -252,88 +252,88 @@ public abstract class Packet
 
     static
     {
-        addMapping(0, true, true, KeepAlivePacket.class);
-        addMapping(1, true, true, LoginPacket.class);
-        addMapping(2, true, true, PreLoginPacket.class);
-        addMapping(3, true, true, ChatPacket.class);
-        addMapping(4, true, false, SetTimePacket.class);
-        addMapping(5, true, false, SetEquippedItemPacket.class);
-        addMapping(6, true, false, SetSpawnPositionPacket.class);
-        addMapping(7, false, true, InteractPacket.class);
-        addMapping(8, true, false, SetHealthPacket.class);
-        addMapping(9, true, true, RespawnPacket.class);
-        addMapping(10, true, true, MovePlayerPacket.class);
-        addMapping(11, true, true, MovePlayerPacket.Pos.class);
-        addMapping(12, true, true, MovePlayerPacket.Rot.class);
-        addMapping(13, true, true, MovePlayerPacket.PosRot.class);
-        addMapping(14, false, true, PlayerActionPacket.class);
-        addMapping(15, false, true, UseItemPacket.class);
-        addMapping(16, true, true, SetCarriedItemPacket.class);
-        addMapping(17, true, false, SleepPacket.class);
-        addMapping(18, true, true, AnimatePacket.class);
-        addMapping(19, false, true, UpdatePlayerStatePacket.class);
-        addMapping(20, true, false, AddPlayerPacket.class);
-        addMapping(21, true, false, AddItemEntityPacket.class);
-        addMapping(22, true, false, TakeItemEntityPacket.class);
-        addMapping(23, true, false, AddEntityPacket.class);
-        addMapping(24, true, false, AddMobPacket.class);
-        addMapping(25, true, false, AddPaintingPacket.class);
-        addMapping(26, true, true, BoatControlPacket.class);
-        addMapping(27, true, true, SetHeldObjectPacket.class);
-        addMapping(28, true, false, SetEntityMotionPacket.class);
-        addMapping(29, true, false, RemoveEntityPacket.class);
-        addMapping(30, true, false, MoveEntityPacket.class);
-        addMapping(31, true, false, MoveEntityPacket.Pos.class);
-        addMapping(32, true, false, MoveEntityPacket.Rot.class);
-        addMapping(33, true, false, MoveEntityPacket.PosRot.class);
-        addMapping(34, true, false, TeleportEntityPacket.class);
-        addMapping(35, true, true, EntityNicknamePacket.class);
-        addMapping(38, true, false, EnitityEventPacket.class);
-        addMapping(39, true, false, SetRidingPacket.class);
-        addMapping(40, true, false, SetEntityDataPacket.class);
-        addMapping(41, true, false, PlayerGamemodePacket.class);
-        addMapping(42, true, false, EntityTagDataPacket.class);
-        addMapping(50, true, false, ChunkVisibilityPacket.class);
-        addMapping(51, true, false, BlockRegionUpdatePacket.class);
-        addMapping(52, true, false, ChunkBlocksUpdatePacket.class);
-        addMapping(53, true, false, BlockUpdatePacket.class);
-        addMapping(54, true, false, BlockEventPacket.class);
-        addMapping(60, true, false, ExplosionPacket.class);
-        addMapping(61, true, false, PlaySoundEffectPacket.class);
-        addMapping(62, true, false, PlaySoundEffectDirectPacket.class);
-        addMapping(63, true, false, AddParticlePacket.class);
-        addMapping(70, true, false, BedMessagePacket.class);
-        addMapping(71, true, false, WeatherEffectPacket.class);
-        addMapping(72, true, false, UpdatePlayerProfilePacket.class);
-        addMapping(73, true, false, WeatherStatusPacket.class);
-        addMapping(74, true, false, GameRulePacket.class);
-        addMapping(75, true, false, RecipeSyncPacket.class);
-        addMapping(100, true, false, ContainerOpenPacket.class);
-        addMapping(101, true, true, ContainerClosePacket.class);
-        addMapping(102, false, true, ContainerClickPacket.class);
-        addMapping(103, true, false, ContainerSetSlotPacket.class);
-        addMapping(104, true, false, ContainerSetContentPacket.class);
-        addMapping(105, true, false, ContainerSetDataPacket.class);
-        addMapping(106, true, true, ContainerAckPacket.class);
-        addMapping(107, false, true, UpdateCreativeInventoryPacket.class);
-        addMapping(108, true, true, SetHotbarOffsetPacket.class);
-        addMapping(120, true, false, CommandManagerPacket.class);
-        addMapping(121, false, true, RequestCommandManagerPacket.class);
-        addMapping(130, false, true, SignUpdatePacket.class);
-        addMapping(131, true, false, MapDataPacket.class);
-        addMapping(132, true, true, SetMobSpawnerPacket.class);
-        addMapping(133, false, true, GuidebookPacket.class);
-        addMapping(136, true, false, AESSendKeyPacket.class);
-        addMapping(137, false, true, SetItemNamePacket.class);
-        addMapping(138, true, false, PlayerListPacket.class);
-        addMapping(139, false, true, SetPaintingArtPacket.class);
-        addMapping(140, true, false, BlockEntityDataPacket.class);
-        addMapping(142, true, false, FlagOpenPacket.class);
-        addMapping(143, true, false, PhotoModePacket.class);
-        addMapping(200, true, false, StatisticPacket.class);
-        addMapping(201, true, false, SyncIDsPacket.class);
-        addMapping(250, true, true, CustomPayloadPacket.class);
-        addMapping(254, false, true, PingHandshakePacket.class);
-        addMapping(255, true, true, DisconnectPacket.class);
+        addMapping(0, true, true, PacketKeepAlive.class);
+        addMapping(1, true, true, PacketLogin.class);
+        addMapping(2, true, true, PacketPreLogin.class);
+        addMapping(3, true, true, PacketChat.class);
+        addMapping(4, true, false, PacketSetTime.class);
+        addMapping(5, true, false, PacketSetEquippedItem.class);
+        addMapping(6, true, false, PacketSetSpawnPosition.class);
+        addMapping(7, false, true, PacketInteract.class);
+        addMapping(8, true, false, PacketSetHealth.class);
+        addMapping(9, true, true, PacketRespawn.class);
+        addMapping(10, true, true, PacketMovePlayer.class);
+        addMapping(11, true, true, PacketMovePlayer.Pos.class);
+        addMapping(12, true, true, PacketMovePlayer.Rot.class);
+        addMapping(13, true, true, PacketMovePlayer.PosRot.class);
+        addMapping(14, false, true, PacketPlayerAction.class);
+        addMapping(15, false, true, PacketUseItem.class);
+        addMapping(16, true, true, PacketSetCarriedItem.class);
+        addMapping(17, true, false, PacketSleep.class);
+        addMapping(18, true, true, PacketAnimate.class);
+        addMapping(19, false, true, PacketUpdatePlayerState.class);
+        addMapping(20, true, false, PacketAddPlayer.class);
+        addMapping(21, true, false, PacketAddItemEntity.class);
+        addMapping(22, true, false, PacketTakeItemEntity.class);
+        addMapping(23, true, false, PacketAddEntity.class);
+        addMapping(24, true, false, PacketAddMob.class);
+        addMapping(25, true, false, PacketAddPainting.class);
+        addMapping(26, true, true, PacketBoatControl.class);
+        addMapping(27, true, true, PacketSetHeldObject.class);
+        addMapping(28, true, false, PacketSetEntityMotion.class);
+        addMapping(29, true, false, PacketRemoveEntity.class);
+        addMapping(30, true, false, PacketMoveEntity.class);
+        addMapping(31, true, false, PacketMoveEntity.Pos.class);
+        addMapping(32, true, false, PacketMoveEntity.Rot.class);
+        addMapping(33, true, false, PacketMoveEntity.PosRot.class);
+        addMapping(34, true, false, PacketTeleportEntity.class);
+        addMapping(35, true, true, PacketEntityNickname.class);
+        addMapping(38, true, false, PacketEntityEvent.class);
+        addMapping(39, true, false, PacketSetRiding.class);
+        addMapping(40, true, false, PacketSetEntityData.class);
+        addMapping(41, true, false, PacketPlayerGamemode.class);
+        addMapping(42, true, false, PacketEntityTagData.class);
+        addMapping(50, true, false, PacketChunkVisibility.class);
+        addMapping(51, true, false, PacketBlockRegionUpdate.class);
+        addMapping(52, true, false, PacketChunkBlocksUpdate.class);
+        addMapping(53, true, false, PacketBlockUpdate.class);
+        addMapping(54, true, false, PacketBlockEvent.class);
+        addMapping(60, true, false, PacketExplosion.class);
+        addMapping(61, true, false, PacketPlaySoundEffect.class);
+        addMapping(62, true, false, PacketPlaySoundEffectDirect.class);
+        addMapping(63, true, false, PacketAddParticle.class);
+        addMapping(70, true, false, PacketBedMessage.class);
+        addMapping(71, true, false, PacketWeatherEffect.class);
+        addMapping(72, true, false, PacketUpdatePlayerProfile.class);
+        addMapping(73, true, false, PacketWeatherStatus.class);
+        addMapping(74, true, false, PacketGameRule.class);
+        addMapping(75, true, false, PacketRecipeSync.class);
+        addMapping(100, true, false, PacketContainerOpen.class);
+        addMapping(101, true, true, PacketContainerClose.class);
+        addMapping(102, false, true, PacketContainerClick.class);
+        addMapping(103, true, false, PacketContainerSetSlot.class);
+        addMapping(104, true, false, PacketContainerSetContent.class);
+        addMapping(105, true, false, PacketContainerSetData.class);
+        addMapping(106, true, true, PacketContainerAck.class);
+        addMapping(107, false, true, PacketUpdateCreativeInventory.class);
+        addMapping(108, true, true, PacketSetHotbarOffset.class);
+        addMapping(120, true, false, PacketCommandManager.class);
+        addMapping(121, false, true, PacketRequestCommandManager.class);
+        addMapping(130, false, true, PacketSignUpdate.class);
+        addMapping(131, true, false, PacketMapData.class);
+        addMapping(132, true, true, PacketSetMobSpawner.class);
+        addMapping(133, false, true, PacketGuidebook.class);
+        addMapping(136, true, false, PacketAESSendKey.class);
+        addMapping(137, false, true, PacketSetItemName.class);
+        addMapping(138, true, false, PacketPlayerList.class);
+        addMapping(139, false, true, PacketSetPaintingArt.class);
+        addMapping(140, true, false, PacketBlockEntityData.class);
+        addMapping(142, true, false, PacketFlagOpen.class);
+        addMapping(143, true, false, PacketPhotoMode.class);
+        addMapping(200, true, false, PacketStatistic.class);
+        addMapping(201, true, false, PacketSyncIDs.class);
+        addMapping(250, true, true, PacketCustomPayload.class);
+        addMapping(254, false, true, PacketPingHandshake.class);
+        addMapping(255, true, true, PacketDisconnect.class);
     }
 }
diff --git a/src/main/java/net/minecraft/core/net/packet/AESSendKeyPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAESSendKey.java
similarity index 86%
rename from src/main/java/net/minecraft/core/net/packet/AESSendKeyPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketAESSendKey.java
index 935b9d746..27f4b6fcd 100644
--- a/src/main/java/net/minecraft/core/net/packet/AESSendKeyPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAESSendKey.java
@@ -7,14 +7,14 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class AESSendKeyPacket extends Packet
+public class PacketAESSendKey extends Packet
 {
 
-    public AESSendKeyPacket()
+    public PacketAESSendKey()
     {
     }
 
-    public AESSendKeyPacket(String KEY)
+    public PacketAESSendKey(String KEY)
     {
         this.KEY = KEY;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/AddEntityPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddEntity.java
similarity index 91%
rename from src/main/java/net/minecraft/core/net/packet/AddEntityPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketAddEntity.java
index 4d3c990e0..c8b51221d 100644
--- a/src/main/java/net/minecraft/core/net/packet/AddEntityPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddEntity.java
@@ -8,7 +8,7 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class AddEntityPacket extends Packet {
+public class PacketAddEntity extends Packet {
     public int entityId;
     public int xPosition;
     public int yPosition;
@@ -22,14 +22,14 @@ public class AddEntityPacket extends Packet {
     public short type = -1;
     public int ownerId = -1;
     public int metaData = -1;
-    public AddEntityPacket() {}
-    public AddEntityPacket(Entity entity)
+    public PacketAddEntity() {}
+    public PacketAddEntity(Entity entity)
     {
         this(entity, -1, -1, null, null, null);
     }
-    public AddEntityPacket(Entity entity, int metaData){ this(entity, metaData, -1, null, null, null); }
-    public AddEntityPacket(Entity entity, int metaData, int ownerId){ this(entity, metaData, ownerId, null, null, null); }
-    public AddEntityPacket(Entity entity, int metaData, int ownerId, Double xVelocity, Double yVelocity, Double zVelocity) {
+    public PacketAddEntity(Entity entity, int metaData){ this(entity, metaData, -1, null, null, null); }
+    public PacketAddEntity(Entity entity, int metaData, int ownerId){ this(entity, metaData, ownerId, null, null, null); }
+    public PacketAddEntity(Entity entity, int metaData, int ownerId, Double xVelocity, Double yVelocity, Double zVelocity) {
         this.entityId = entity.id;
         this.xPosition = MathHelper.floor(entity.x * 32D);
         this.yPosition = MathHelper.floor(entity.y * 32D);
@@ -47,7 +47,7 @@ public class AddEntityPacket extends Packet {
             this.hasVelocity = false;
         }
     }
-    public AddEntityPacket setType(int type){
+    public PacketAddEntity setType(int type){
         this.type = (short) type;
         return this;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/AddItemEntityPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddItemEntity.java
similarity index 93%
rename from src/main/java/net/minecraft/core/net/packet/AddItemEntityPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketAddItemEntity.java
index 1a82688b0..585a4bf9d 100644
--- a/src/main/java/net/minecraft/core/net/packet/AddItemEntityPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddItemEntity.java
@@ -7,7 +7,7 @@ import net.minecraft.core.util.helper.MathHelper;
 
 import java.io.*;
 
-public class AddItemEntityPacket extends Packet {
+public class PacketAddItemEntity extends Packet {
     public int entityId;
     public int xPosition;
     public int yPosition;
@@ -20,9 +20,9 @@ public class AddItemEntityPacket extends Packet {
     public int itemDamage;
     public CompoundTag tag;
 
-    public AddItemEntityPacket() {}
+    public PacketAddItemEntity() {}
 
-    public AddItemEntityPacket(EntityItem entityitem) {
+    public PacketAddItemEntity(EntityItem entityitem) {
         entityId = entityitem.id;
         itemID = entityitem.item.itemID;
         count = entityitem.item.stackSize;
diff --git a/src/main/java/net/minecraft/core/net/packet/AddMobPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddMob.java
similarity index 95%
rename from src/main/java/net/minecraft/core/net/packet/AddMobPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketAddMob.java
index 0201ce533..dd7696f53 100644
--- a/src/main/java/net/minecraft/core/net/packet/AddMobPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddMob.java
@@ -9,7 +9,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 import java.io.*;
 import java.util.List;
 
-public class AddMobPacket extends Packet
+public class PacketAddMob extends Packet
 {
     public int id;
     public short type;
@@ -23,11 +23,11 @@ public class AddMobPacket extends Packet
     public String nickname;
     public byte chatColor;
 
-    public AddMobPacket()
+    public PacketAddMob()
     {
     }
 
-    public AddMobPacket(Mob mob)
+    public PacketAddMob(Mob mob)
     {
         id = mob.id;
         type = (short) EntityDispatcher.numericIdForClass(mob.getClass());
diff --git a/src/main/java/net/minecraft/core/net/packet/AddPaintingPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddPainting.java
similarity index 93%
rename from src/main/java/net/minecraft/core/net/packet/AddPaintingPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketAddPainting.java
index c7bf2744d..0cc408516 100644
--- a/src/main/java/net/minecraft/core/net/packet/AddPaintingPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddPainting.java
@@ -7,14 +7,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class AddPaintingPacket extends Packet
+public class PacketAddPainting extends Packet
 {
 
-    public AddPaintingPacket()
+    public PacketAddPainting()
     {
     }
 
-    public AddPaintingPacket(EntityPainting entitypainting)
+    public PacketAddPainting(EntityPainting entitypainting)
     {
         entityId = entitypainting.id;
         xPosition = entitypainting.blockX;
diff --git a/src/main/java/net/minecraft/core/net/packet/AddParticlePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddParticle.java
similarity index 93%
rename from src/main/java/net/minecraft/core/net/packet/AddParticlePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketAddParticle.java
index 914100b7c..5c1aa9150 100644
--- a/src/main/java/net/minecraft/core/net/packet/AddParticlePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddParticle.java
@@ -6,7 +6,7 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class AddParticlePacket extends Packet{
+public class PacketAddParticle extends Packet{
     public String particleKey;
     public double x;
     public double y;
@@ -25,20 +25,20 @@ public class AddParticlePacket extends Packet{
     public float randMotionY;
     public float randMotionZ;
 
-    public AddParticlePacket(){
+    public PacketAddParticle(){
 
     }
-    public AddParticlePacket(String particleKey, double x, double y, double z,
+    public PacketAddParticle(String particleKey, double x, double y, double z,
                              double motionX, double motionY, double motionZ, int data){
         this(particleKey, x, y, z, motionX, motionY, motionZ, data, 16D);
     }
-    public AddParticlePacket(String particleKey, double x, double y, double z,
+    public PacketAddParticle(String particleKey, double x, double y, double z,
                              double motionX, double motionY, double motionZ, int data, double maxDistance){
         this(particleKey, x, y, z, motionX, motionY, motionZ, data,
                 maxDistance, (byte) -1, 0, 0, 0, 0, 0, 0);
 
     }
-    public AddParticlePacket(String particleKey, double x, double y, double z,
+    public PacketAddParticle(String particleKey, double x, double y, double z,
                              double motionX, double motionY, double motionZ,
                              int data, double maxDistance, byte amount, float randOffX,
                              float randOffY, float randOffZ, float randMotionX,
diff --git a/src/main/java/net/minecraft/core/net/packet/AddPlayerPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddPlayer.java
similarity index 96%
rename from src/main/java/net/minecraft/core/net/packet/AddPlayerPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketAddPlayer.java
index 38bf0a6a7..3b46a20ae 100644
--- a/src/main/java/net/minecraft/core/net/packet/AddPlayerPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAddPlayer.java
@@ -10,14 +10,14 @@ import org.jetbrains.annotations.Nullable;
 import java.io.*;
 import java.util.UUID;
 
-public class AddPlayerPacket extends Packet
+public class PacketAddPlayer extends Packet
 {
 
-    public AddPlayerPacket()
+    public PacketAddPlayer()
     {
     }
 
-    public AddPlayerPacket(Player entityplayer)
+    public PacketAddPlayer(Player entityplayer)
     {
         entityId = entityplayer.id;
         name = entityplayer.username;
diff --git a/src/main/java/net/minecraft/core/net/packet/AnimatePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAnimate.java
similarity index 87%
rename from src/main/java/net/minecraft/core/net/packet/AnimatePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketAnimate.java
index ab15256e4..bafad1fdf 100644
--- a/src/main/java/net/minecraft/core/net/packet/AnimatePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketAnimate.java
@@ -5,14 +5,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class AnimatePacket extends Packet
+public class PacketAnimate extends Packet
 {
 
-    public AnimatePacket()
+    public PacketAnimate()
     {
     }
 
-    public AnimatePacket(Entity entity, int i)
+    public PacketAnimate(Entity entity, int i)
     {
         entityId = entity.id;
         animate = i;
diff --git a/src/main/java/net/minecraft/core/net/packet/BedMessagePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBedMessage.java
similarity index 86%
rename from src/main/java/net/minecraft/core/net/packet/BedMessagePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketBedMessage.java
index 45fbfecfc..ae0042483 100644
--- a/src/main/java/net/minecraft/core/net/packet/BedMessagePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBedMessage.java
@@ -4,14 +4,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class BedMessagePacket extends Packet
+public class PacketBedMessage extends Packet
 {
 
-    public BedMessagePacket()
+    public PacketBedMessage()
     {
     }
     
-    public BedMessagePacket(int state)
+    public PacketBedMessage(int state)
     {
     	bedState = state;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/BlockEntityDataPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockEntityData.java
similarity index 84%
rename from src/main/java/net/minecraft/core/net/packet/BlockEntityDataPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockEntityData.java
index 9de957f3f..271cdc35a 100644
--- a/src/main/java/net/minecraft/core/net/packet/BlockEntityDataPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockEntityData.java
@@ -6,17 +6,17 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class BlockEntityDataPacket
+public class PacketBlockEntityData
     extends Packet
 {
     public CompoundTag tag;
 
-    public BlockEntityDataPacket()
+    public PacketBlockEntityData()
     {
         isChunkDataPacket = true;
     }
 
-    public BlockEntityDataPacket(TileEntity tileEntity)
+    public PacketBlockEntityData(TileEntity tileEntity)
     {
         this();
 
@@ -24,7 +24,7 @@ public class BlockEntityDataPacket
         tileEntity.writeToNBT(tag);
     }
 
-    public BlockEntityDataPacket(CompoundTag tag) {
+    public PacketBlockEntityData(CompoundTag tag) {
         this.tag = tag;
     }
 
diff --git a/src/main/java/net/minecraft/core/net/packet/BlockEventPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockEvent.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/packet/BlockEventPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockEvent.java
index 13c76e2a5..182a0f0a8 100644
--- a/src/main/java/net/minecraft/core/net/packet/BlockEventPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockEvent.java
@@ -4,7 +4,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class BlockEventPacket extends Packet
+public class PacketBlockEvent extends Packet
 {
     public int xLocation;
     public int yLocation;
@@ -12,11 +12,11 @@ public class BlockEventPacket extends Packet
     public int index;
     public int data;
 
-    public BlockEventPacket()
+    public PacketBlockEvent()
     {
     }
 
-    public BlockEventPacket(int x, int y, int z, int index, int data)
+    public PacketBlockEvent(int x, int y, int z, int index, int data)
     {
         xLocation = x;
         yLocation = y;
diff --git a/src/main/java/net/minecraft/core/net/packet/BlockRegionUpdatePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockRegionUpdate.java
similarity index 94%
rename from src/main/java/net/minecraft/core/net/packet/BlockRegionUpdatePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockRegionUpdate.java
index 913c4516e..f3690c8f9 100644
--- a/src/main/java/net/minecraft/core/net/packet/BlockRegionUpdatePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockRegionUpdate.java
@@ -8,15 +8,15 @@ import java.util.zip.DataFormatException;
 import java.util.zip.Deflater;
 import java.util.zip.Inflater;
 
-public class BlockRegionUpdatePacket extends Packet
+public class PacketBlockRegionUpdate extends Packet
 {
 
-    public BlockRegionUpdatePacket()
+    public PacketBlockRegionUpdate()
     {
         isChunkDataPacket = true;
     }
     
-    public BlockRegionUpdatePacket(int xPosition, int yPosition, int zPosition, int xSize, int ySize, int zSize, World world)
+    public PacketBlockRegionUpdate(int xPosition, int yPosition, int zPosition, int xSize, int ySize, int zSize, World world)
     {
         isChunkDataPacket = true;
 
diff --git a/src/main/java/net/minecraft/core/net/packet/BlockUpdatePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockUpdate.java
similarity index 90%
rename from src/main/java/net/minecraft/core/net/packet/BlockUpdatePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockUpdate.java
index 467672504..eb773a0e0 100644
--- a/src/main/java/net/minecraft/core/net/packet/BlockUpdatePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBlockUpdate.java
@@ -5,7 +5,7 @@ import net.minecraft.core.world.World;
 
 import java.io.*;
 
-public class BlockUpdatePacket extends Packet
+public class PacketBlockUpdate extends Packet
 {
     public int xPosition;
     public int yPosition;
@@ -14,12 +14,12 @@ public class BlockUpdatePacket extends Packet
     public int metadata;
 
 
-    public BlockUpdatePacket()
+    public PacketBlockUpdate()
     {
         isChunkDataPacket = true;
     }
 
-    public BlockUpdatePacket(int x, int y, int z, World world)
+    public PacketBlockUpdate(int x, int y, int z, World world)
     {
         isChunkDataPacket = true;
         xPosition = x;
diff --git a/src/main/java/net/minecraft/core/net/packet/BoatControlPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBoatControl.java
similarity index 90%
rename from src/main/java/net/minecraft/core/net/packet/BoatControlPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketBoatControl.java
index 0e4762e4a..ae29725cb 100644
--- a/src/main/java/net/minecraft/core/net/packet/BoatControlPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketBoatControl.java
@@ -7,13 +7,13 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class BoatControlPacket extends Packet{
+public class PacketBoatControl extends Packet{
     public int entityId;
     public float targetXD;
     public float targetZD;
     public float targetYRot;
-    public BoatControlPacket(){}
-    public BoatControlPacket(Entity entity){
+    public PacketBoatControl(){}
+    public PacketBoatControl(Entity entity){
         entityId = entity.id;
         targetXD = (float) entity.xd;
         targetZD = (float) entity.zd;
diff --git a/src/main/java/net/minecraft/core/net/packet/ChatPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketChat.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/packet/ChatPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketChat.java
index ad9490cbe..42501348c 100644
--- a/src/main/java/net/minecraft/core/net/packet/ChatPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketChat.java
@@ -6,7 +6,7 @@ import net.minecraft.core.util.helper.AES;
 import java.io.*;
 import java.security.Key;
 
-public class ChatPacket extends Packet {
+public class PacketChat extends Packet {
 	
 	public static final String ENCRYPTION_ERROR_MESSAGE = "This crash is caused by outdated Java, please update to 8u161 or newer! If your Java version is out of date due to a technical requirement, please add the JCE Unlimited Strength Jurisdiction Policy Files to your installation. https://www.oracle.com/java/technologies/javase-jce-all-downloads.html";
 	
@@ -14,19 +14,19 @@ public class ChatPacket extends Packet {
 	public int type;
 	public boolean encrypted;
 
-	public ChatPacket() {
+	public PacketChat() {
 		
 	}
 
-	public ChatPacket(String string) {
+	public PacketChat(String string) {
 		this(string, 0, null);
 	}
 
-	public ChatPacket(String string, Key key) {
+	public PacketChat(String string, Key key) {
 		this(string, 0, key);
 	}
 	
-	public ChatPacket(String string, int type, Key key) {
+	public PacketChat(String string, int type, Key key) {
 		if(string.length() > 512) {
 			string = string.substring(0, 512);
 		}
diff --git a/src/main/java/net/minecraft/core/net/packet/ChunkBlocksUpdatePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketChunkBlocksUpdate.java
similarity index 94%
rename from src/main/java/net/minecraft/core/net/packet/ChunkBlocksUpdatePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketChunkBlocksUpdate.java
index cba18abd2..b01712ca1 100644
--- a/src/main/java/net/minecraft/core/net/packet/ChunkBlocksUpdatePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketChunkBlocksUpdate.java
@@ -6,15 +6,15 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class ChunkBlocksUpdatePacket extends Packet
+public class PacketChunkBlocksUpdate extends Packet
 {
 
-    public ChunkBlocksUpdatePacket()
+    public PacketChunkBlocksUpdate()
     {
         isChunkDataPacket = true;
     }
     
-    public ChunkBlocksUpdatePacket(int xChunk, int zChunk, int[] blocksToUpdate, int numBlocksToUpdate, World world)
+    public PacketChunkBlocksUpdate(int xChunk, int zChunk, int[] blocksToUpdate, int numBlocksToUpdate, World world)
     {
         isChunkDataPacket = true;
         this.xChunk = xChunk;
diff --git a/src/main/java/net/minecraft/core/net/packet/ChunkVisibilityPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketChunkVisibility.java
similarity index 87%
rename from src/main/java/net/minecraft/core/net/packet/ChunkVisibilityPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketChunkVisibility.java
index a853526a2..fd32cdd10 100644
--- a/src/main/java/net/minecraft/core/net/packet/ChunkVisibilityPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketChunkVisibility.java
@@ -4,18 +4,18 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class ChunkVisibilityPacket extends Packet
+public class PacketChunkVisibility extends Packet
 {
     public int chunkX;
     public int chunkZ;
     public boolean playerAdded;
 
-    public ChunkVisibilityPacket()
+    public PacketChunkVisibility()
     {
         isChunkDataPacket = false;
     }
     
-    public ChunkVisibilityPacket(int chunkX, int chunkZ, boolean playerAdded)
+    public PacketChunkVisibility(int chunkX, int chunkZ, boolean playerAdded)
     {
         isChunkDataPacket = false;
         this.chunkX = chunkX;
diff --git a/src/main/java/net/minecraft/core/net/packet/CommandManagerPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketCommandManager.java
similarity index 98%
rename from src/main/java/net/minecraft/core/net/packet/CommandManagerPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketCommandManager.java
index 5046af2d5..c705faa82 100644
--- a/src/main/java/net/minecraft/core/net/packet/CommandManagerPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketCommandManager.java
@@ -27,7 +27,7 @@ import java.io.IOException;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 
-public class CommandManagerPacket extends Packet {
+public class PacketCommandManager extends Packet {
     private CommandDispatcher<CommandSource> dispatcher;
     private CommandSource source;
     private String text;
@@ -35,14 +35,14 @@ public class CommandManagerPacket extends Packet {
 
     public JsonObject suggestions;
 
-    public CommandManagerPacket(CommandDispatcher<CommandSource> dispatcher, CommandSource source, String text, int cursor) {
+    public PacketCommandManager(CommandDispatcher<CommandSource> dispatcher, CommandSource source, String text, int cursor) {
         this.dispatcher = dispatcher;
         this.source = source;
         this.text = text;
         this.cursor = cursor;
     }
 
-    public CommandManagerPacket() {
+    public PacketCommandManager() {
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/net/packet/ContainerAckPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerAck.java
similarity index 87%
rename from src/main/java/net/minecraft/core/net/packet/ContainerAckPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerAck.java
index 3c54938e0..1b8ee3986 100644
--- a/src/main/java/net/minecraft/core/net/packet/ContainerAckPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerAck.java
@@ -4,14 +4,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class ContainerAckPacket extends Packet
+public class PacketContainerAck extends Packet
 {
 
-    public ContainerAckPacket()
+    public PacketContainerAck()
     {
     }
 
-    public ContainerAckPacket(int windowId, short shortWindowId, boolean accepted)
+    public PacketContainerAck(int windowId, short shortWindowId, boolean accepted)
     {
         this.windowId = windowId;
         this.shortWindowId = shortWindowId;
diff --git a/src/main/java/net/minecraft/core/net/packet/ContainerClickPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerClick.java
similarity index 93%
rename from src/main/java/net/minecraft/core/net/packet/ContainerClickPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerClick.java
index 83ba8e7ff..01f6267c1 100644
--- a/src/main/java/net/minecraft/core/net/packet/ContainerClickPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerClick.java
@@ -6,12 +6,12 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class ContainerClickPacket extends Packet {
+public class PacketContainerClick extends Packet {
 
-	public ContainerClickPacket() {
+	public PacketContainerClick() {
 	}
 
-	public ContainerClickPacket(int windowId, InventoryAction action, int[] args, ItemStack itemstack, short actionId) {
+	public PacketContainerClick(int windowId, InventoryAction action, int[] args, ItemStack itemstack, short actionId) {
 		this.window_Id = windowId;
 		this.action = action;
 		this.args = args;
diff --git a/src/main/java/net/minecraft/core/net/packet/ContainerClosePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerClose.java
similarity index 84%
rename from src/main/java/net/minecraft/core/net/packet/ContainerClosePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerClose.java
index 0a7177f9b..051fe3795 100644
--- a/src/main/java/net/minecraft/core/net/packet/ContainerClosePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerClose.java
@@ -4,14 +4,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class ContainerClosePacket extends Packet
+public class PacketContainerClose extends Packet
 {
 
-    public ContainerClosePacket()
+    public PacketContainerClose()
     {
     }
 
-    public ContainerClosePacket(int i)
+    public PacketContainerClose(int i)
     {
         windowId = i;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/ContainerOpenPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerOpen.java
similarity index 92%
rename from src/main/java/net/minecraft/core/net/packet/ContainerOpenPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerOpen.java
index 7d93ab1eb..e3edd7dd7 100644
--- a/src/main/java/net/minecraft/core/net/packet/ContainerOpenPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerOpen.java
@@ -4,7 +4,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class ContainerOpenPacket extends Packet
+public class PacketContainerOpen extends Packet
 {
     public static final int TYPE_GENERIC_CONTAINER = 0;
     public static final int TYPE_CRAFTING = 1;
@@ -20,11 +20,11 @@ public class ContainerOpenPacket extends Packet
     public String windowTitle;
     public int slotsCount;
 
-    public ContainerOpenPacket()
+    public PacketContainerOpen()
     {
     }
     
-    public ContainerOpenPacket(int windowId, int inventoryType, String windowTitle, int slotCount)
+    public PacketContainerOpen(int windowId, int inventoryType, String windowTitle, int slotCount)
     {
         assert windowId <= Byte.MAX_VALUE : "Window Id > 127 won't serialize properly";
         assert inventoryType <= Byte.MAX_VALUE : "Inventory Type > 127 won't serialize properly";
diff --git a/src/main/java/net/minecraft/core/net/packet/ContainerSetContentPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerSetContent.java
similarity index 93%
rename from src/main/java/net/minecraft/core/net/packet/ContainerSetContentPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerSetContent.java
index eea501c1d..82870c956 100644
--- a/src/main/java/net/minecraft/core/net/packet/ContainerSetContentPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerSetContent.java
@@ -7,17 +7,17 @@ import net.minecraft.core.net.handler.PacketHandler;
 import java.io.*;
 import java.util.List;
 
-public class ContainerSetContentPacket extends Packet
+public class PacketContainerSetContent extends Packet
 {
     public int windowId;
     public ItemStack[] stackList;
 
 
-    public ContainerSetContentPacket()
+    public PacketContainerSetContent()
     {
     }
 
-    public ContainerSetContentPacket(int i, List<ItemStack> list)
+    public PacketContainerSetContent(int i, List<ItemStack> list)
     {
         windowId = i;
         stackList = new ItemStack[list.size()];
diff --git a/src/main/java/net/minecraft/core/net/packet/ContainerSetDataPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerSetData.java
similarity index 86%
rename from src/main/java/net/minecraft/core/net/packet/ContainerSetDataPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerSetData.java
index b96ad1082..eb223f9eb 100644
--- a/src/main/java/net/minecraft/core/net/packet/ContainerSetDataPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerSetData.java
@@ -4,14 +4,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class ContainerSetDataPacket extends Packet
+public class PacketContainerSetData extends Packet
 {
 
-    public ContainerSetDataPacket()
+    public PacketContainerSetData()
     {
     }
 
-    public ContainerSetDataPacket(int windowId, int progressBar, int progressBarValue)
+    public PacketContainerSetData(int windowId, int progressBar, int progressBarValue)
     {
         this.windowId = windowId;
         this.progressBar = progressBar;
diff --git a/src/main/java/net/minecraft/core/net/packet/ContainerSetSlotPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerSetSlot.java
similarity index 91%
rename from src/main/java/net/minecraft/core/net/packet/ContainerSetSlotPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerSetSlot.java
index 3c6d3b013..3f8590dcd 100644
--- a/src/main/java/net/minecraft/core/net/packet/ContainerSetSlotPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketContainerSetSlot.java
@@ -6,10 +6,10 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class ContainerSetSlotPacket extends Packet
+public class PacketContainerSetSlot extends Packet
 {
 
-    public ContainerSetSlotPacket()
+    public PacketContainerSetSlot()
     {
     }
 
@@ -19,7 +19,7 @@ public class ContainerSetSlotPacket extends Packet
         packetHandler.handleSetSlot(this);
     }
     
-    public ContainerSetSlotPacket(int i, int j, ItemStack itemstack)
+    public PacketContainerSetSlot(int i, int j, ItemStack itemstack)
     {
         windowId = i;
         itemSlot = j;
diff --git a/src/main/java/net/minecraft/core/net/packet/CustomPayloadPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketCustomPayload.java
similarity index 89%
rename from src/main/java/net/minecraft/core/net/packet/CustomPayloadPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketCustomPayload.java
index 1834a6d4b..f69822da2 100644
--- a/src/main/java/net/minecraft/core/net/packet/CustomPayloadPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketCustomPayload.java
@@ -6,17 +6,17 @@ import java.io.IOException;
 
 import net.minecraft.core.net.handler.PacketHandler;
 
-public class CustomPayloadPacket extends Packet {
+public class PacketCustomPayload extends Packet {
 	public static final int MAX_CHANNEL_SIZE = 128;
 
 	public String channel;
 	public byte[] data;
 	
-	public CustomPayloadPacket() {
+	public PacketCustomPayload() {
 		
 	}
 	
-	public CustomPayloadPacket(String channel, byte[] data) {
+	public PacketCustomPayload(String channel, byte[] data) {
 		this.channel = channel;
 		
 		if(data != null) {
diff --git a/src/main/java/net/minecraft/core/net/packet/DisconnectPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketDisconnect.java
similarity index 83%
rename from src/main/java/net/minecraft/core/net/packet/DisconnectPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketDisconnect.java
index 17b81d8a5..5ce9975bd 100644
--- a/src/main/java/net/minecraft/core/net/packet/DisconnectPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketDisconnect.java
@@ -4,19 +4,19 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class DisconnectPacket extends Packet
+public class PacketDisconnect extends Packet
 {
 
-    public DisconnectPacket()
+    public PacketDisconnect()
     {
     }
 
-    public DisconnectPacket(String s)
+    public PacketDisconnect(String s)
     {
         this(s, null);
     }
 
-    public DisconnectPacket(String s, byte[] image)
+    public PacketDisconnect(String s, byte[] image)
     {
         reason = s;
         this.image = image;
diff --git a/src/main/java/net/minecraft/core/net/packet/EnitityEventPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketEntityEvent.java
similarity index 82%
rename from src/main/java/net/minecraft/core/net/packet/EnitityEventPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketEntityEvent.java
index 50f9070d9..47a420691 100644
--- a/src/main/java/net/minecraft/core/net/packet/EnitityEventPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketEntityEvent.java
@@ -4,21 +4,21 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class EnitityEventPacket extends Packet
+public class PacketEntityEvent extends Packet
 {
 
-    public EnitityEventPacket()
+    public PacketEntityEvent()
     {
     }
     
-    public EnitityEventPacket(int entityId, byte entityStatus)
+    public PacketEntityEvent(int entityId, byte entityStatus)
     {
         this.entityId = entityId;
         this.entityStatus = entityStatus;
         attackedAtYaw = 0;
     }
 
-    public EnitityEventPacket(int entityId, byte entityStatus, float attackedAtYaw)
+    public PacketEntityEvent(int entityId, byte entityStatus, float attackedAtYaw)
     {
         this.entityId = entityId;
         this.entityStatus = entityStatus;
diff --git a/src/main/java/net/minecraft/core/net/packet/EntityNicknamePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketEntityNickname.java
similarity index 86%
rename from src/main/java/net/minecraft/core/net/packet/EntityNicknamePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketEntityNickname.java
index e57a34f66..0b53456c6 100644
--- a/src/main/java/net/minecraft/core/net/packet/EntityNicknamePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketEntityNickname.java
@@ -6,16 +6,16 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class EntityNicknamePacket extends Packet
+public class PacketEntityNickname extends Packet
 {
     public int entityId;
     public String nickname;
     public byte chatColor;
-    public EntityNicknamePacket()
+    public PacketEntityNickname()
     {
     }
 
-    public EntityNicknamePacket(int entityId, String nickname, byte chatColor)
+    public PacketEntityNickname(int entityId, String nickname, byte chatColor)
     {
         this.entityId = entityId;
         this.nickname = nickname;
diff --git a/src/main/java/net/minecraft/core/net/packet/EntityTagDataPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketEntityTagData.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/packet/EntityTagDataPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketEntityTagData.java
index a871bc41a..f387667b3 100644
--- a/src/main/java/net/minecraft/core/net/packet/EntityTagDataPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketEntityTagData.java
@@ -8,15 +8,15 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class EntityTagDataPacket extends Packet {
+public class PacketEntityTagData extends Packet {
     public int entityId;
     public CompoundTag tag;
 
-    public EntityTagDataPacket() {
+    public PacketEntityTagData() {
         super();
     }
 
-    public EntityTagDataPacket(Entity entity) {
+    public PacketEntityTagData(Entity entity) {
         super();
         this.entityId = entity.id;
         this.tag = new CompoundTag();
diff --git a/src/main/java/net/minecraft/core/net/packet/ExplosionPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketExplosion.java
similarity index 94%
rename from src/main/java/net/minecraft/core/net/packet/ExplosionPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketExplosion.java
index 53d990e94..65b01f637 100644
--- a/src/main/java/net/minecraft/core/net/packet/ExplosionPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketExplosion.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 import java.io.*;
 import java.util.*;
 
-public class ExplosionPacket extends Packet
+public class PacketExplosion extends Packet
 {
 
     public double explosionX;
@@ -16,11 +16,11 @@ public class ExplosionPacket extends Packet
     public Set<ChunkPosition> destroyedBlockPositions;
     public boolean isCannonball;
 
-    public ExplosionPacket()
+    public PacketExplosion()
     {
     }
 
-    public ExplosionPacket(double d, double d1, double d2, float f, Set<ChunkPosition> set, boolean isCannonball)
+    public PacketExplosion(double d, double d1, double d2, float f, Set<ChunkPosition> set, boolean isCannonball)
     {
         explosionX = d;
         explosionY = d1;
diff --git a/src/main/java/net/minecraft/core/net/packet/FlagOpenPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketFlagOpen.java
similarity index 89%
rename from src/main/java/net/minecraft/core/net/packet/FlagOpenPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketFlagOpen.java
index 8797f400f..83f8257f4 100644
--- a/src/main/java/net/minecraft/core/net/packet/FlagOpenPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketFlagOpen.java
@@ -6,7 +6,7 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class FlagOpenPacket
+public class PacketFlagOpen
     extends Packet
 {
     public int windowId;
@@ -14,9 +14,9 @@ public class FlagOpenPacket
     public int y;
     public int z;
 
-    public FlagOpenPacket() { }
+    public PacketFlagOpen() { }
 
-    public FlagOpenPacket(int windowId, int x, int y, int z)
+    public PacketFlagOpen(int windowId, int x, int y, int z)
     {
         this.windowId = windowId;
         this.x = x;
diff --git a/src/main/java/net/minecraft/core/net/packet/GameRulePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketGameRule.java
similarity index 90%
rename from src/main/java/net/minecraft/core/net/packet/GameRulePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketGameRule.java
index ce75056b2..7c8f94a3c 100644
--- a/src/main/java/net/minecraft/core/net/packet/GameRulePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketGameRule.java
@@ -9,15 +9,15 @@ import com.mojang.nbt.CompoundTag;
 import net.minecraft.core.data.gamerule.GameRuleCollection;
 import net.minecraft.core.net.handler.PacketHandler;
 
-public class GameRulePacket
+public class PacketGameRule
     extends Packet {
     private GameRuleCollection gameRules;
 
-    public GameRulePacket() {
+    public PacketGameRule() {
         gameRules = null;
     }
 
-    public GameRulePacket(GameRuleCollection gameRules) {
+    public PacketGameRule(GameRuleCollection gameRules) {
         this.gameRules = gameRules;
     }
 
diff --git a/src/main/java/net/minecraft/core/net/packet/GuidebookPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketGuidebook.java
similarity index 87%
rename from src/main/java/net/minecraft/core/net/packet/GuidebookPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketGuidebook.java
index 2550b69ef..fab8fcd93 100644
--- a/src/main/java/net/minecraft/core/net/packet/GuidebookPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketGuidebook.java
@@ -6,13 +6,13 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class GuidebookPacket extends Packet{
+public class PacketGuidebook extends Packet{
 
-    public GuidebookPacket()
+    public PacketGuidebook()
     {
     }
 
-    public GuidebookPacket(boolean i)
+    public PacketGuidebook(boolean i)
     {
         isGuidebookOpen = i;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/InteractPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketInteract.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/packet/InteractPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketInteract.java
index e7df42227..1a3fbcb9e 100644
--- a/src/main/java/net/minecraft/core/net/packet/InteractPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketInteract.java
@@ -4,7 +4,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class InteractPacket extends Packet
+public class PacketInteract extends Packet
 {
     public static final int ACTION_INTERACT = 0;
     public static final int ACTION_ATTACK = 1;
@@ -13,11 +13,11 @@ public class InteractPacket extends Packet
     public int action;
 
 
-    public InteractPacket()
+    public PacketInteract()
     {
     }
 
-    public InteractPacket(int source, int target, int action)
+    public PacketInteract(int source, int target, int action)
     {
         sourceEntityID = source;
         targetEntityID = target;
diff --git a/src/main/java/net/minecraft/core/net/packet/KeepAlivePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketKeepAlive.java
similarity index 86%
rename from src/main/java/net/minecraft/core/net/packet/KeepAlivePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketKeepAlive.java
index 18457b2f8..cf3ffdc5d 100644
--- a/src/main/java/net/minecraft/core/net/packet/KeepAlivePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketKeepAlive.java
@@ -4,10 +4,10 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class KeepAlivePacket extends Packet
+public class PacketKeepAlive extends Packet
 {
 
-    public KeepAlivePacket()
+    public PacketKeepAlive()
     {
     }
 
diff --git a/src/main/java/net/minecraft/core/net/packet/LoginPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketLogin.java
similarity index 91%
rename from src/main/java/net/minecraft/core/net/packet/LoginPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketLogin.java
index b86470626..5d44681bb 100644
--- a/src/main/java/net/minecraft/core/net/packet/LoginPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketLogin.java
@@ -5,7 +5,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 import java.io.*;
 import java.util.UUID;
 
-public class LoginPacket extends Packet
+public class PacketLogin extends Packet
 {
     public int playerEntityIdAndProtocolVersion;
     public String username;
@@ -16,11 +16,11 @@ public class LoginPacket extends Packet
     public int packetDelay;
     public String publicKey;
 
-    public LoginPacket()
+    public PacketLogin()
     {
     }
 
-    public LoginPacket(String username, UUID uuid, int playerEntityIdOrProtocolVersion, long worldSeed, byte dimensionId, byte worldTypeId, int packetDelay, String publicKey)
+    public PacketLogin(String username, UUID uuid, int playerEntityIdOrProtocolVersion, long worldSeed, byte dimensionId, byte worldTypeId, int packetDelay, String publicKey)
     {
         this.username = username;
         this.uuid = uuid;
@@ -32,7 +32,7 @@ public class LoginPacket extends Packet
         this.publicKey = publicKey;
     }
 
-    public LoginPacket(String username, UUID uuid, int i, String publicKey)
+    public PacketLogin(String username, UUID uuid, int i, String publicKey)
     {
         this.username = username;
         this.uuid = uuid;
diff --git a/src/main/java/net/minecraft/core/net/packet/MapDataPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketMapData.java
similarity index 92%
rename from src/main/java/net/minecraft/core/net/packet/MapDataPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketMapData.java
index b0ee5176b..c441bfe2a 100644
--- a/src/main/java/net/minecraft/core/net/packet/MapDataPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketMapData.java
@@ -7,7 +7,7 @@ import java.io.*;
 import java.util.ArrayList;
 import java.util.List;
 
-public class MapDataPacket extends Packet {
+public class PacketMapData extends Packet {
 
 	public short itemId;
 	public short meta;
@@ -15,11 +15,11 @@ public class MapDataPacket extends Packet {
 	public byte[] mapData;
 	public List<MapWaypoint> waypoints;
 
-	public MapDataPacket() {
+	public PacketMapData() {
 		this.isChunkDataPacket = true;
 	}
 
-	public MapDataPacket(short itemId, short meta, byte scale, byte[] mapData, List<MapWaypoint> waypoints) {
+	public PacketMapData(short itemId, short meta, byte scale, byte[] mapData, List<MapWaypoint> waypoints) {
 		this.isChunkDataPacket = true;
 		this.itemId = itemId;
 		this.meta = meta;
diff --git a/src/main/java/net/minecraft/core/net/packet/MoveEntityPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketMoveEntity.java
similarity index 92%
rename from src/main/java/net/minecraft/core/net/packet/MoveEntityPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketMoveEntity.java
index d5cbee447..5039abcd3 100644
--- a/src/main/java/net/minecraft/core/net/packet/MoveEntityPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketMoveEntity.java
@@ -4,7 +4,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class MoveEntityPacket extends Packet
+public class PacketMoveEntity extends Packet
 {
     public int id;
     public byte x;
@@ -14,12 +14,12 @@ public class MoveEntityPacket extends Packet
     public byte pitch;
     public boolean rotating;
 
-    public MoveEntityPacket()
+    public PacketMoveEntity()
     {
         rotating = false;
     }
     
-    public MoveEntityPacket(int i)
+    public PacketMoveEntity(int i)
     {
         rotating = false;
         id = i;
@@ -51,7 +51,7 @@ public class MoveEntityPacket extends Packet
         return 4;
     }
 
-    public static class Pos extends MoveEntityPacket
+    public static class Pos extends PacketMoveEntity
     {
 
         public Pos()
@@ -93,7 +93,7 @@ public class MoveEntityPacket extends Packet
         }
     }
 
-    public static class Rot extends MoveEntityPacket
+    public static class Rot extends PacketMoveEntity
     {
 
         public Rot()
@@ -133,7 +133,7 @@ public class MoveEntityPacket extends Packet
             return 6;
         }
     }
-    public static class PosRot extends MoveEntityPacket
+    public static class PosRot extends PacketMoveEntity
     {
 
         public PosRot()
diff --git a/src/main/java/net/minecraft/core/net/packet/MovePlayerPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketMovePlayer.java
similarity index 93%
rename from src/main/java/net/minecraft/core/net/packet/MovePlayerPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketMovePlayer.java
index 5aea9dff7..4403909a1 100644
--- a/src/main/java/net/minecraft/core/net/packet/MovePlayerPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketMovePlayer.java
@@ -4,7 +4,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class MovePlayerPacket extends Packet
+public class PacketMovePlayer extends Packet
 {
     public double x;
     public double y;
@@ -14,11 +14,11 @@ public class MovePlayerPacket extends Packet
     public boolean onGround;
     public boolean hasPosition;
     public boolean hasRotation;
-    public MovePlayerPacket()
+    public PacketMovePlayer()
     {
     }
 
-    public MovePlayerPacket(boolean flag)
+    public PacketMovePlayer(boolean flag)
     {
         onGround = flag;
     }
@@ -49,7 +49,7 @@ public class MovePlayerPacket extends Packet
         return 1;
     }
 
-    public static class Rot extends MovePlayerPacket
+    public static class Rot extends PacketMovePlayer
     {
         public Rot() {
             this.hasRotation = true;
@@ -82,7 +82,7 @@ public class MovePlayerPacket extends Packet
         }
     }
 
-    public static class Pos extends MovePlayerPacket
+    public static class Pos extends PacketMovePlayer
     {
         public Pos() {
             this.hasPosition = true;
@@ -118,7 +118,7 @@ public class MovePlayerPacket extends Packet
         }
     }
 
-    public static class PosRot extends MovePlayerPacket
+    public static class PosRot extends PacketMovePlayer
     {
         public PosRot() {
             this.hasRotation = true;
diff --git a/src/main/java/net/minecraft/core/net/packet/PhotoModePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPhotoMode.java
similarity index 87%
rename from src/main/java/net/minecraft/core/net/packet/PhotoModePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketPhotoMode.java
index c5027acef..ddc9702a2 100644
--- a/src/main/java/net/minecraft/core/net/packet/PhotoModePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPhotoMode.java
@@ -6,14 +6,14 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class PhotoModePacket
+public class PacketPhotoMode
     extends Packet
 {
     public boolean disabled = false;
 
-    public PhotoModePacket() { }
+    public PacketPhotoMode() { }
 
-    public PhotoModePacket(boolean disabled)
+    public PacketPhotoMode(boolean disabled)
     {
         this.disabled = disabled;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/PingHandshakePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPingHandshake.java
similarity index 93%
rename from src/main/java/net/minecraft/core/net/packet/PingHandshakePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketPingHandshake.java
index cbe51ed24..662f5d974 100644
--- a/src/main/java/net/minecraft/core/net/packet/PingHandshakePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPingHandshake.java
@@ -7,7 +7,7 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 
-public class PingHandshakePacket
+public class PacketPingHandshake
     extends Packet {
     public static long startTime = 0;
 
@@ -18,10 +18,10 @@ public class PingHandshakePacket
     public String hostname;
     public int port;
 
-    public PingHandshakePacket() {
+    public PacketPingHandshake() {
     }
 
-    public PingHandshakePacket(int payload, int identifier, String pingHostString, int protocolVersion, String hostname, int port) {
+    public PacketPingHandshake(int payload, int identifier, String pingHostString, int protocolVersion, String hostname, int port) {
         this.payload = payload;
         this.identifier = identifier;
         this.pingHostString = pingHostString;
diff --git a/src/main/java/net/minecraft/core/net/packet/PlaySoundEffectPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPlaySoundEffect.java
similarity index 87%
rename from src/main/java/net/minecraft/core/net/packet/PlaySoundEffectPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketPlaySoundEffect.java
index 8ad9cb5e3..8ec862afd 100644
--- a/src/main/java/net/minecraft/core/net/packet/PlaySoundEffectPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPlaySoundEffect.java
@@ -4,14 +4,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class PlaySoundEffectPacket extends Packet
+public class PacketPlaySoundEffect extends Packet
 {
 
-    public PlaySoundEffectPacket()
+    public PacketPlaySoundEffect()
     {
     }
     
-    public PlaySoundEffectPacket(int soundId, int x, int y, int z, int data)
+    public PacketPlaySoundEffect(int soundId, int x, int y, int z, int data)
     {
         soundID = soundId;
         this.x = x;
diff --git a/src/main/java/net/minecraft/core/net/packet/PlaySoundEffectDirectPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPlaySoundEffectDirect.java
similarity index 90%
rename from src/main/java/net/minecraft/core/net/packet/PlaySoundEffectDirectPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketPlaySoundEffectDirect.java
index 37b125ed5..ad0db67cc 100644
--- a/src/main/java/net/minecraft/core/net/packet/PlaySoundEffectDirectPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPlaySoundEffectDirect.java
@@ -7,7 +7,7 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class PlaySoundEffectDirectPacket extends Packet {
+public class PacketPlaySoundEffectDirect extends Packet {
 	public int soundId;
     public SoundCategory soundType;
     public double x;
@@ -16,11 +16,11 @@ public class PlaySoundEffectDirectPacket extends Packet {
     public float volume;
     public float pitch;
 
-    public PlaySoundEffectDirectPacket()
+    public PacketPlaySoundEffectDirect()
     {
     }
 
-    public PlaySoundEffectDirectPacket(int soundId, SoundCategory soundType, double x, double y, double z, float volume, float pitch)
+    public PacketPlaySoundEffectDirect(int soundId, SoundCategory soundType, double x, double y, double z, float volume, float pitch)
     {
     	this.soundId = soundId;
         this.soundType = soundType;
diff --git a/src/main/java/net/minecraft/core/net/packet/PlayerActionPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPlayerAction.java
similarity index 92%
rename from src/main/java/net/minecraft/core/net/packet/PlayerActionPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketPlayerAction.java
index e006a7837..2a04fb891 100644
--- a/src/main/java/net/minecraft/core/net/packet/PlayerActionPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPlayerAction.java
@@ -7,7 +7,7 @@ import java.io.IOException;
 import net.minecraft.core.net.handler.PacketHandler;
 import net.minecraft.core.util.helper.Side;
 
-public class PlayerActionPacket extends Packet
+public class PacketPlayerAction extends Packet
 {
     public static final int ACTION_DIG_START = 0;
     public static final int ACTION_DIG_CONTINUED = 1;
@@ -26,11 +26,11 @@ public class PlayerActionPacket extends Packet
     public int action;
 
 
-    public PlayerActionPacket()
+    public PacketPlayerAction()
     {
     }
 
-    public PlayerActionPacket(int action, int x, int y, int z, Side side, double xHit, double yHit)
+    public PacketPlayerAction(int action, int x, int y, int z, Side side, double xHit, double yHit)
     {
         this.action = action;
         xPosition = x;
diff --git a/src/main/java/net/minecraft/core/net/packet/PlayerGamemodePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPlayerGamemode.java
similarity index 84%
rename from src/main/java/net/minecraft/core/net/packet/PlayerGamemodePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketPlayerGamemode.java
index 648b70cea..a64162b85 100644
--- a/src/main/java/net/minecraft/core/net/packet/PlayerGamemodePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPlayerGamemode.java
@@ -4,14 +4,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class PlayerGamemodePacket extends Packet
+public class PacketPlayerGamemode extends Packet
 {
 
-    public PlayerGamemodePacket()
+    public PacketPlayerGamemode()
     {
     }
     
-    public PlayerGamemodePacket(int entityId, int gamemodeId)
+    public PacketPlayerGamemode(int entityId, int gamemodeId)
     {
         this.entityId = entityId;
         this.gamemodeId = gamemodeId;
diff --git a/src/main/java/net/minecraft/core/net/packet/PlayerListPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPlayerList.java
similarity index 90%
rename from src/main/java/net/minecraft/core/net/packet/PlayerListPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketPlayerList.java
index 476ca8e46..04cfc9de4 100644
--- a/src/main/java/net/minecraft/core/net/packet/PlayerListPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPlayerList.java
@@ -6,7 +6,7 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class PlayerListPacket extends Packet {
+public class PacketPlayerList extends Packet {
 	public static final int MAX_SCORE_STRING_SIZE = 256;
 	public String[] players;
 	/**
@@ -15,11 +15,11 @@ public class PlayerListPacket extends Packet {
 	public String[] scores;
 	public int count;
 	
-	public PlayerListPacket() {
+	public PacketPlayerList() {
 		
 	}
 
-	public PlayerListPacket(int playerCount, String[] players, String[] scores) {
+	public PacketPlayerList(int playerCount, String[] players, String[] scores) {
 		this.count = playerCount;
 		this.players = players;
 		this.scores = scores;
diff --git a/src/main/java/net/minecraft/core/net/packet/PreLoginPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPreLogin.java
similarity index 86%
rename from src/main/java/net/minecraft/core/net/packet/PreLoginPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketPreLogin.java
index 12a411e8f..7462f0c42 100644
--- a/src/main/java/net/minecraft/core/net/packet/PreLoginPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketPreLogin.java
@@ -4,16 +4,16 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class PreLoginPacket extends Packet
+public class PacketPreLogin extends Packet
 {
     public String username;
 
 
-    public PreLoginPacket()
+    public PacketPreLogin()
     {
     }
 
-    public PreLoginPacket(String s)
+    public PacketPreLogin(String s)
     {
         username = s;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/RecipeSyncPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketRecipeSync.java
similarity index 87%
rename from src/main/java/net/minecraft/core/net/packet/RecipeSyncPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketRecipeSync.java
index 98e234ffb..7233ea9d2 100644
--- a/src/main/java/net/minecraft/core/net/packet/RecipeSyncPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketRecipeSync.java
@@ -8,17 +8,17 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class RecipeSyncPacket extends Packet {
+public class PacketRecipeSync extends Packet {
 
     public String recipe;
     public long maxRecipes;
 
-    public RecipeSyncPacket(RecipeEntryBase<?,?,?> recipe, long maxRecipes) {
+    public PacketRecipeSync(RecipeEntryBase<?,?,?> recipe, long maxRecipes) {
         this.recipe = DataLoader.serializeRecipe(recipe);
         this.maxRecipes = maxRecipes;
     }
 
-    public RecipeSyncPacket(){}
+    public PacketRecipeSync(){}
 
 
     @Override
diff --git a/src/main/java/net/minecraft/core/net/packet/RemoveEntityPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketRemoveEntity.java
similarity index 84%
rename from src/main/java/net/minecraft/core/net/packet/RemoveEntityPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketRemoveEntity.java
index c3ba39c60..1ce01d896 100644
--- a/src/main/java/net/minecraft/core/net/packet/RemoveEntityPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketRemoveEntity.java
@@ -4,14 +4,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class RemoveEntityPacket extends Packet
+public class PacketRemoveEntity extends Packet
 {
 
-    public RemoveEntityPacket()
+    public PacketRemoveEntity()
     {
     }
     
-    public RemoveEntityPacket(int i)
+    public PacketRemoveEntity(int i)
     {
         entityId = i;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/RequestCommandManagerPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketRequestCommandManager.java
similarity index 85%
rename from src/main/java/net/minecraft/core/net/packet/RequestCommandManagerPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketRequestCommandManager.java
index d7b9e4f2d..0edb80462 100644
--- a/src/main/java/net/minecraft/core/net/packet/RequestCommandManagerPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketRequestCommandManager.java
@@ -6,18 +6,18 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class RequestCommandManagerPacket extends Packet {
+public class PacketRequestCommandManager extends Packet {
     public String username;
     public String text;
     public int cursor;
 
-    public RequestCommandManagerPacket(String username, String text, int cursor) {
+    public PacketRequestCommandManager(String username, String text, int cursor) {
         this.username = username;
         this.text = text;
         this.cursor = cursor;
     }
 
-    public RequestCommandManagerPacket() {
+    public PacketRequestCommandManager() {
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/net/packet/RespawnPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketRespawn.java
similarity index 87%
rename from src/main/java/net/minecraft/core/net/packet/RespawnPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketRespawn.java
index ff35f4a2d..a1b53779e 100644
--- a/src/main/java/net/minecraft/core/net/packet/RespawnPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketRespawn.java
@@ -4,17 +4,17 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class RespawnPacket extends Packet
+public class PacketRespawn extends Packet
 {
     public byte respawnDimensionId;
     public byte respawnWorldTypeId;
 
 
-    public RespawnPacket()
+    public PacketRespawn()
     {
     }
 
-    public RespawnPacket(byte respawnDimensionId, byte respawnWorldTypeId)
+    public PacketRespawn(byte respawnDimensionId, byte respawnWorldTypeId)
     {
         this.respawnDimensionId = respawnDimensionId;
         this.respawnWorldTypeId = respawnWorldTypeId;
diff --git a/src/main/java/net/minecraft/core/net/packet/SetCarriedItemPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetCarriedItem.java
similarity index 83%
rename from src/main/java/net/minecraft/core/net/packet/SetCarriedItemPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetCarriedItem.java
index 02453eb7f..a53b53bb8 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetCarriedItemPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetCarriedItem.java
@@ -4,14 +4,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class SetCarriedItemPacket extends Packet
+public class PacketSetCarriedItem extends Packet
 {
 
-    public SetCarriedItemPacket()
+    public PacketSetCarriedItem()
     {
     }
 
-    public SetCarriedItemPacket(int i)
+    public PacketSetCarriedItem(int i)
     {
         id = i;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/SetEntityDataPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetEntityData.java
similarity index 87%
rename from src/main/java/net/minecraft/core/net/packet/SetEntityDataPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetEntityData.java
index c4290d9eb..b656c3cef 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetEntityDataPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetEntityData.java
@@ -6,14 +6,14 @@ import net.minecraft.core.world.data.SynchedEntityData;
 import java.io.*;
 import java.util.List;
 
-public class SetEntityDataPacket extends Packet
+public class PacketSetEntityData extends Packet
 {
 
-    public SetEntityDataPacket()
+    public PacketSetEntityData()
     {
     }
     
-    public SetEntityDataPacket(int i, SynchedEntityData datawatcher)
+    public PacketSetEntityData(int i, SynchedEntityData datawatcher)
     {
         entityId = i;
         packedItems = datawatcher.packDirty();
diff --git a/src/main/java/net/minecraft/core/net/packet/SetEntityMotionPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetEntityMotion.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/packet/SetEntityMotionPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetEntityMotion.java
index c76a33a92..12a195bf0 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetEntityMotionPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetEntityMotion.java
@@ -5,19 +5,19 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class SetEntityMotionPacket extends Packet
+public class PacketSetEntityMotion extends Packet
 {
 
-    public SetEntityMotionPacket()
+    public PacketSetEntityMotion()
     {
     }
 
-    public SetEntityMotionPacket(Entity entity)
+    public PacketSetEntityMotion(Entity entity)
     {
         this(entity.id, entity.xd, entity.yd, entity.zd);
     }
 
-    public SetEntityMotionPacket(int i, double d, double d1, double d2)
+    public PacketSetEntityMotion(int i, double d, double d1, double d2)
     {
         entityId = i;
         double d3 = 3.8999999999999999D;
diff --git a/src/main/java/net/minecraft/core/net/packet/SetEquippedItemPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetEquippedItem.java
similarity index 90%
rename from src/main/java/net/minecraft/core/net/packet/SetEquippedItemPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetEquippedItem.java
index 1497e5777..55c7e1a41 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetEquippedItemPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetEquippedItem.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class SetEquippedItemPacket extends Packet
+public class PacketSetEquippedItem extends Packet
 {
     public int entityID;
     public int slot;
@@ -15,11 +15,11 @@ public class SetEquippedItemPacket extends Packet
     public CompoundTag itemData;
 
 
-    public SetEquippedItemPacket()
+    public PacketSetEquippedItem()
     {
     }
 
-    public SetEquippedItemPacket(int entityID, int slot, ItemStack itemstack)
+    public PacketSetEquippedItem(int entityID, int slot, ItemStack itemstack)
     {
         this.entityID = entityID;
         this.slot = slot;
diff --git a/src/main/java/net/minecraft/core/net/packet/SetHealthPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetHealth.java
similarity index 85%
rename from src/main/java/net/minecraft/core/net/packet/SetHealthPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetHealth.java
index c26830d3b..c4a94a588 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetHealthPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetHealth.java
@@ -4,16 +4,16 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class SetHealthPacket extends Packet
+public class PacketSetHealth extends Packet
 {
     public int healthMP;
 
 
-    public SetHealthPacket()
+    public PacketSetHealth()
     {
     }
 
-    public SetHealthPacket(int i)
+    public PacketSetHealth(int i)
     {
         healthMP = i;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/SetHeldObjectPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetHeldObject.java
similarity index 90%
rename from src/main/java/net/minecraft/core/net/packet/SetHeldObjectPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetHeldObject.java
index f65a465e3..f89168aa7 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetHeldObjectPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetHeldObject.java
@@ -9,14 +9,14 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class SetHeldObjectPacket extends Packet{
+public class PacketSetHeldObject extends Packet{
     public int entityID;
     public @Nullable CompoundTag objectTag;
-    public SetHeldObjectPacket() {
+    public PacketSetHeldObject() {
 
     }
 
-    public SetHeldObjectPacket(int entityID, @Nullable ICarriable object) {
+    public PacketSetHeldObject(int entityID, @Nullable ICarriable object) {
         this.entityID = entityID;
         if (object != null) {
             CompoundTag tag = new CompoundTag();
diff --git a/src/main/java/net/minecraft/core/net/packet/SetHotbarOffsetPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetHotbarOffset.java
similarity index 84%
rename from src/main/java/net/minecraft/core/net/packet/SetHotbarOffsetPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetHotbarOffset.java
index e67e7ca9c..55e218ceb 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetHotbarOffsetPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetHotbarOffset.java
@@ -6,16 +6,16 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class SetHotbarOffsetPacket extends Packet
+public class PacketSetHotbarOffset extends Packet
 {
     public int hotbarOffset;
 
-    public SetHotbarOffsetPacket(int hotbarOffset)
+    public PacketSetHotbarOffset(int hotbarOffset)
     {
         this.hotbarOffset = hotbarOffset;
     }
 
-    public SetHotbarOffsetPacket()
+    public PacketSetHotbarOffset()
     {
     }
 
diff --git a/src/main/java/net/minecraft/core/net/packet/SetItemNamePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetItemName.java
similarity index 85%
rename from src/main/java/net/minecraft/core/net/packet/SetItemNamePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetItemName.java
index b0b7a5870..1e872140b 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetItemNamePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetItemName.java
@@ -6,12 +6,12 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class SetItemNamePacket extends Packet{
+public class PacketSetItemName extends Packet{
     public int slot;
     public String name;
-    public SetItemNamePacket() { }
+    public PacketSetItemName() { }
 
-    public SetItemNamePacket(int slot, String name)
+    public PacketSetItemName(int slot, String name)
     {
         this.slot = slot;
         this.name = name;
diff --git a/src/main/java/net/minecraft/core/net/packet/SetMobSpawnerPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetMobSpawner.java
similarity index 91%
rename from src/main/java/net/minecraft/core/net/packet/SetMobSpawnerPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetMobSpawner.java
index 4c4743fba..0f9784a70 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetMobSpawnerPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetMobSpawner.java
@@ -9,17 +9,17 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class SetMobSpawnerPacket extends Packet {
+public class PacketSetMobSpawner extends Packet {
     public int xPosition;
     public int yPosition;
     public int zPosition;
     public @Nullable Class<? extends Entity> entityClass;
 
-    public SetMobSpawnerPacket() {
+    public PacketSetMobSpawner() {
         isChunkDataPacket = true;
     }
 
-    public SetMobSpawnerPacket(int x, int y, int z, @Nullable Class<? extends Entity> entityClass) {
+    public PacketSetMobSpawner(int x, int y, int z, @Nullable Class<? extends Entity> entityClass) {
         isChunkDataPacket = true;
         this.xPosition = x;
         this.yPosition = y;
diff --git a/src/main/java/net/minecraft/core/net/packet/SetPaintingArtPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetPaintingArt.java
similarity index 87%
rename from src/main/java/net/minecraft/core/net/packet/SetPaintingArtPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetPaintingArt.java
index 90ac9ac75..603dc4028 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetPaintingArtPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetPaintingArt.java
@@ -7,16 +7,16 @@ import java.io.DataInputStream;
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class SetPaintingArtPacket
+public class PacketSetPaintingArt
     extends Packet
 {
     public int motive;
 
-    public SetPaintingArtPacket()
+    public PacketSetPaintingArt()
     {
     }
 
-    public SetPaintingArtPacket(ArtType art)
+    public PacketSetPaintingArt(ArtType art)
     {
         this.motive = ArtType.values.indexOf(art);
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/SetRidingPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetRiding.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/packet/SetRidingPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetRiding.java
index 6532d88d0..d07180c54 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetRidingPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetRiding.java
@@ -5,21 +5,21 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class SetRidingPacket extends Packet
+public class PacketSetRiding extends Packet
 {
 
-    public SetRidingPacket()
+    public PacketSetRiding()
     {
     }
     
-    public SetRidingPacket(Entity passenger, Entity vehicle)
+    public PacketSetRiding(Entity passenger, Entity vehicle)
     {
         passengerId = passenger.id;
         vehicleId = vehicle == null ? -1 : vehicle.id;
         isTileEntity = false;
     }
 
-    public SetRidingPacket(Entity passenger, int x, int y, int z)
+    public PacketSetRiding(Entity passenger, int x, int y, int z)
     {
         passengerId = passenger.id;
         this.x = x;
diff --git a/src/main/java/net/minecraft/core/net/packet/SetSpawnPositionPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetSpawnPosition.java
similarity index 85%
rename from src/main/java/net/minecraft/core/net/packet/SetSpawnPositionPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetSpawnPosition.java
index 7cbe8008f..a1769feb8 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetSpawnPositionPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetSpawnPosition.java
@@ -4,18 +4,18 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class SetSpawnPositionPacket extends Packet
+public class PacketSetSpawnPosition extends Packet
 {
     public int x;
     public int y;
     public int z;
 
 
-    public SetSpawnPositionPacket()
+    public PacketSetSpawnPosition()
     {
     }
 
-    public SetSpawnPositionPacket(int x, int y, int z)
+    public PacketSetSpawnPosition(int x, int y, int z)
     {
         this.x = x;
         this.y = y;
diff --git a/src/main/java/net/minecraft/core/net/packet/SetTimePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetTime.java
similarity index 86%
rename from src/main/java/net/minecraft/core/net/packet/SetTimePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSetTime.java
index 772ef8920..a590a32e0 100644
--- a/src/main/java/net/minecraft/core/net/packet/SetTimePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSetTime.java
@@ -4,16 +4,16 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class SetTimePacket extends Packet
+public class PacketSetTime extends Packet
 {
     public long time;
 
 
-    public SetTimePacket()
+    public PacketSetTime()
     {
     }
 
-    public SetTimePacket(long l)
+    public PacketSetTime(long l)
     {
         time = l;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/SignUpdatePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSignUpdate.java
similarity index 92%
rename from src/main/java/net/minecraft/core/net/packet/SignUpdatePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSignUpdate.java
index 025e0ef73..667fec2e6 100644
--- a/src/main/java/net/minecraft/core/net/packet/SignUpdatePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSignUpdate.java
@@ -5,15 +5,15 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class SignUpdatePacket extends Packet
+public class PacketSignUpdate extends Packet
 {
 
-    public SignUpdatePacket()
+    public PacketSignUpdate()
     {
         isChunkDataPacket = true;
     }
 
-    public SignUpdatePacket(int x, int y, int z, String[] lines, int picture, int color)
+    public PacketSignUpdate(int x, int y, int z, String[] lines, int picture, int color)
     {
         isChunkDataPacket = true;
         xPosition = x;
diff --git a/src/main/java/net/minecraft/core/net/packet/SleepPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSleep.java
similarity index 87%
rename from src/main/java/net/minecraft/core/net/packet/SleepPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSleep.java
index cd5486f41..30a740e4d 100644
--- a/src/main/java/net/minecraft/core/net/packet/SleepPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSleep.java
@@ -5,7 +5,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class SleepPacket extends Packet {
+public class PacketSleep extends Packet {
 
 	public int entityID;
 	public int x;
@@ -13,9 +13,9 @@ public class SleepPacket extends Packet {
 	public int z;
 	public int field_22046_e;
 
-	public SleepPacket() {}
+	public PacketSleep() {}
 
-	public SleepPacket(Entity entity, int i, int x, int y, int z) {
+	public PacketSleep(Entity entity, int i, int x, int y, int z) {
 		this.field_22046_e = i;
 		this.x = x;
 		this.y = y;
diff --git a/src/main/java/net/minecraft/core/net/packet/StatisticPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketStatistic.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/packet/StatisticPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketStatistic.java
index 0db1befd5..610653289 100644
--- a/src/main/java/net/minecraft/core/net/packet/StatisticPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketStatistic.java
@@ -6,17 +6,17 @@ import net.minecraft.core.util.collection.NamespaceID;
 
 import java.io.*;
 
-public class StatisticPacket extends Packet
+public class PacketStatistic extends Packet
 {
     public NamespaceID statID;
     public int valueChange;
 
 
-    public StatisticPacket()
+    public PacketStatistic()
     {
     }
 
-    public StatisticPacket(NamespaceID statID, int change)
+    public PacketStatistic(NamespaceID statID, int change)
     {
         this.statID = statID;
         valueChange = change;
diff --git a/src/main/java/net/minecraft/core/net/packet/SyncIDsPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSyncIDs.java
similarity index 93%
rename from src/main/java/net/minecraft/core/net/packet/SyncIDsPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketSyncIDs.java
index 0d67e8722..7b3c4b0e9 100644
--- a/src/main/java/net/minecraft/core/net/packet/SyncIDsPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketSyncIDs.java
@@ -9,7 +9,7 @@ import java.util.Map.Entry;
 
 import net.minecraft.core.net.handler.PacketHandler;
 
-public class SyncIDsPacket extends Packet {
+public class PacketSyncIDs extends Packet {
 	public static final int MAX_ID_STRING_SIZE = 128;
 	public static final int DESTINATION_SOUND_IDS = 0;
 	public static final int DESTINATION_ENTITY_IDS = 1;
@@ -19,11 +19,11 @@ public class SyncIDsPacket extends Packet {
 	public int destinationId = -1;
 	public Map<Integer, String> mapping;
 
-	public SyncIDsPacket() {
+	public PacketSyncIDs() {
 
 	}
 
-	public SyncIDsPacket(int destinationId, Map<Integer, String> mapping) {
+	public PacketSyncIDs(int destinationId, Map<Integer, String> mapping) {
 		this.destinationId = destinationId;
 		this.mapping = mapping;
 	}
diff --git a/src/main/java/net/minecraft/core/net/packet/TakeItemEntityPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketTakeItemEntity.java
similarity index 86%
rename from src/main/java/net/minecraft/core/net/packet/TakeItemEntityPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketTakeItemEntity.java
index a25a2d063..be25131d9 100644
--- a/src/main/java/net/minecraft/core/net/packet/TakeItemEntityPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketTakeItemEntity.java
@@ -4,14 +4,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class TakeItemEntityPacket extends Packet
+public class PacketTakeItemEntity extends Packet
 {
 
-    public TakeItemEntityPacket()
+    public PacketTakeItemEntity()
     {
     }
     
-    public TakeItemEntityPacket(int i, int j)
+    public PacketTakeItemEntity(int i, int j)
     {
         collectedEntityId = i;
         collectorEntityId = j;
diff --git a/src/main/java/net/minecraft/core/net/packet/TeleportEntityPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketTeleportEntity.java
similarity index 88%
rename from src/main/java/net/minecraft/core/net/packet/TeleportEntityPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketTeleportEntity.java
index 1f0f19112..2b0ba07ae 100644
--- a/src/main/java/net/minecraft/core/net/packet/TeleportEntityPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketTeleportEntity.java
@@ -6,7 +6,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class TeleportEntityPacket extends Packet
+public class PacketTeleportEntity extends Packet
 {
     public int id;
     public int x;
@@ -15,11 +15,11 @@ public class TeleportEntityPacket extends Packet
     public byte yaw;
     public byte pitch;
 
-    public TeleportEntityPacket()
+    public PacketTeleportEntity()
     {
     }
 
-    public TeleportEntityPacket(Entity entity)
+    public PacketTeleportEntity(Entity entity)
     {
         id = entity.id;
         x = MathHelper.floor(entity.x * 32D);
@@ -29,7 +29,7 @@ public class TeleportEntityPacket extends Packet
         pitch = (byte)(int)((entity.xRot * 256F) / 360F);
     }
     
-    public TeleportEntityPacket(int id, int x, int y, int z, byte yaw, byte pitch)
+    public PacketTeleportEntity(int id, int x, int y, int z, byte yaw, byte pitch)
     {
         this.id = id;
         this.x = x;
diff --git a/src/main/java/net/minecraft/core/net/packet/UpdateCreativeInventoryPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketUpdateCreativeInventory.java
similarity index 85%
rename from src/main/java/net/minecraft/core/net/packet/UpdateCreativeInventoryPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketUpdateCreativeInventory.java
index 7079089e1..2b2745a7c 100644
--- a/src/main/java/net/minecraft/core/net/packet/UpdateCreativeInventoryPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketUpdateCreativeInventory.java
@@ -4,14 +4,14 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class UpdateCreativeInventoryPacket extends Packet
+public class PacketUpdateCreativeInventory extends Packet
 {
 
-    public UpdateCreativeInventoryPacket()
+    public PacketUpdateCreativeInventory()
     {
     }
 
-    public UpdateCreativeInventoryPacket(int windowId, int page, String searchText)
+    public PacketUpdateCreativeInventory(int windowId, int page, String searchText)
     {
         this.windowId = windowId;
         this.page = page;
diff --git a/src/main/java/net/minecraft/core/net/packet/UpdatePlayerProfilePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketUpdatePlayerProfile.java
similarity index 91%
rename from src/main/java/net/minecraft/core/net/packet/UpdatePlayerProfilePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketUpdatePlayerProfile.java
index e79e77365..b5c348be6 100644
--- a/src/main/java/net/minecraft/core/net/packet/UpdatePlayerProfilePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketUpdatePlayerProfile.java
@@ -7,14 +7,14 @@ import java.io.DataOutputStream;
 import java.io.IOException;
 import java.util.UUID;
 
-public class UpdatePlayerProfilePacket extends Packet
+public class PacketUpdatePlayerProfile extends Packet
 {
 
-    public UpdatePlayerProfilePacket()
+    public PacketUpdatePlayerProfile()
     {
     }
 
-    public UpdatePlayerProfilePacket(String username, String nickname, UUID uuid, int score, byte chatColor, boolean isOnline, boolean isOperator)
+    public PacketUpdatePlayerProfile(String username, String nickname, UUID uuid, int score, byte chatColor, boolean isOnline, boolean isOperator)
     {
         this.username = username;
         this.nickname = nickname;
diff --git a/src/main/java/net/minecraft/core/net/packet/UpdatePlayerStatePacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketUpdatePlayerState.java
similarity index 85%
rename from src/main/java/net/minecraft/core/net/packet/UpdatePlayerStatePacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketUpdatePlayerState.java
index 25a295144..9d717edfc 100644
--- a/src/main/java/net/minecraft/core/net/packet/UpdatePlayerStatePacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketUpdatePlayerState.java
@@ -4,18 +4,18 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class UpdatePlayerStatePacket extends Packet
+public class PacketUpdatePlayerState extends Packet
 {
     public static final int STATE_SNEAK = 1;
     public static final int STATE_UN_SNEAK = 2;
     public static final int STATE_LEAVE_BED = 3;
     public int state;
 
-    public UpdatePlayerStatePacket()
+    public PacketUpdatePlayerState()
     {
     }
 
-    public UpdatePlayerStatePacket(int state)
+    public PacketUpdatePlayerState(int state)
     {
         this.state = state;
     }
diff --git a/src/main/java/net/minecraft/core/net/packet/UseItemPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketUseItem.java
similarity index 94%
rename from src/main/java/net/minecraft/core/net/packet/UseItemPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketUseItem.java
index ad69ea35d..432226682 100644
--- a/src/main/java/net/minecraft/core/net/packet/UseItemPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketUseItem.java
@@ -8,7 +8,7 @@ import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.net.handler.PacketHandler;
 import net.minecraft.core.util.helper.Direction;
 
-public class UseItemPacket extends Packet
+public class PacketUseItem extends Packet
 {
 
     public int xPosition;
@@ -19,11 +19,11 @@ public class UseItemPacket extends Packet
     public double yPlaced;
     public ItemStack itemStack;
 
-    public UseItemPacket()
+    public PacketUseItem()
     {
     }
 
-    public UseItemPacket(int x, int y, int z, Direction direction, ItemStack itemstack, double xPlaced, double yPlaced)
+    public PacketUseItem(int x, int y, int z, Direction direction, ItemStack itemstack, double xPlaced, double yPlaced)
     {
         xPosition = x;
         yPosition = y;
diff --git a/src/main/java/net/minecraft/core/net/packet/WeatherEffectPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketWeatherEffect.java
similarity index 91%
rename from src/main/java/net/minecraft/core/net/packet/WeatherEffectPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketWeatherEffect.java
index 2c61ba902..e1ff54c3a 100644
--- a/src/main/java/net/minecraft/core/net/packet/WeatherEffectPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketWeatherEffect.java
@@ -7,7 +7,7 @@ import net.minecraft.core.util.helper.MathHelper;
 
 import java.io.*;
 
-public class WeatherEffectPacket extends Packet
+public class PacketWeatherEffect extends Packet
 {
     public static final int EFFECT_LIGHTNING = 1;
     public int id;
@@ -15,11 +15,11 @@ public class WeatherEffectPacket extends Packet
     public int y;
     public int z;
     public int effectId;
-    public WeatherEffectPacket()
+    public PacketWeatherEffect()
     {
     }
 
-    public WeatherEffectPacket(Entity entity)
+    public PacketWeatherEffect(Entity entity)
     {
         id = entity.id;
         x = MathHelper.floor(entity.x * 32D);
diff --git a/src/main/java/net/minecraft/core/net/packet/WeatherStatusPacket.java b/game/core/src/main/java/net/minecraft/core/net/packet/PacketWeatherStatus.java
similarity index 89%
rename from src/main/java/net/minecraft/core/net/packet/WeatherStatusPacket.java
rename to game/core/src/main/java/net/minecraft/core/net/packet/PacketWeatherStatus.java
index bf43370db..22ac30d91 100644
--- a/src/main/java/net/minecraft/core/net/packet/WeatherStatusPacket.java
+++ b/game/core/src/main/java/net/minecraft/core/net/packet/PacketWeatherStatus.java
@@ -4,7 +4,7 @@ import net.minecraft.core.net.handler.PacketHandler;
 
 import java.io.*;
 
-public class WeatherStatusPacket extends Packet
+public class PacketWeatherStatus extends Packet
 {
     public int dimId;
     public int id;
@@ -13,11 +13,11 @@ public class WeatherStatusPacket extends Packet
     public float intensity;
     public float power;
 
-    public WeatherStatusPacket()
+    public PacketWeatherStatus()
     {
     }
 
-    public WeatherStatusPacket(int dimId, int id, int newId, long duration, float intensity, float power)
+    public PacketWeatherStatus(int dimId, int id, int newId, long duration, float intensity, float power)
     {
     	this.dimId = dimId;
         this.id = id;
diff --git a/src/main/java/net/minecraft/core/player/Session.java b/game/core/src/main/java/net/minecraft/core/player/Session.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/Session.java
rename to game/core/src/main/java/net/minecraft/core/player/Session.java
diff --git a/src/main/java/net/minecraft/core/player/gamemode/Gamemode.java b/game/core/src/main/java/net/minecraft/core/player/gamemode/Gamemode.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/gamemode/Gamemode.java
rename to game/core/src/main/java/net/minecraft/core/player/gamemode/Gamemode.java
diff --git a/src/main/java/net/minecraft/core/player/gamemode/GamemodeCreative.java b/game/core/src/main/java/net/minecraft/core/player/gamemode/GamemodeCreative.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/gamemode/GamemodeCreative.java
rename to game/core/src/main/java/net/minecraft/core/player/gamemode/GamemodeCreative.java
diff --git a/src/main/java/net/minecraft/core/player/gamemode/GamemodeSurvival.java b/game/core/src/main/java/net/minecraft/core/player/gamemode/GamemodeSurvival.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/gamemode/GamemodeSurvival.java
rename to game/core/src/main/java/net/minecraft/core/player/gamemode/GamemodeSurvival.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/InventorySorter.java b/game/core/src/main/java/net/minecraft/core/player/inventory/InventorySorter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/InventorySorter.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/InventorySorter.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/container/Container.java b/game/core/src/main/java/net/minecraft/core/player/inventory/container/Container.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/container/Container.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/container/Container.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/container/ContainerCompound.java b/game/core/src/main/java/net/minecraft/core/player/inventory/container/ContainerCompound.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/container/ContainerCompound.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/container/ContainerCompound.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/container/ContainerCrafting.java b/game/core/src/main/java/net/minecraft/core/player/inventory/container/ContainerCrafting.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/container/ContainerCrafting.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/container/ContainerCrafting.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/container/ContainerInventory.java b/game/core/src/main/java/net/minecraft/core/player/inventory/container/ContainerInventory.java
similarity index 98%
rename from src/main/java/net/minecraft/core/player/inventory/container/ContainerInventory.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/container/ContainerInventory.java
index 84238f80d..04bb5881a 100644
--- a/src/main/java/net/minecraft/core/player/inventory/container/ContainerInventory.java
+++ b/game/core/src/main/java/net/minecraft/core/player/inventory/container/ContainerInventory.java
@@ -5,6 +5,7 @@ import com.mojang.nbt.CompoundTag;
 import com.mojang.nbt.ListTag;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.player.Player;
@@ -157,9 +158,9 @@ public class ContainerInventory
         if (currentItemLocked()) return currentItem;
     	if (!flag) return currentItem;
     	
-    	if (itemstack.itemID < Block.blocksList.length)
+    	if (itemstack.itemID < Blocks.blocksList.length)
     	{
-    		if (Block.blocksList[itemstack.itemID].hasTag(BlockTags.NOT_IN_CREATIVE_MENU)) return currentItem;
+    		if (Blocks.blocksList[itemstack.itemID].hasTag(BlockTags.NOT_IN_CREATIVE_MENU)) return currentItem;
     	}
     	else
     	{
diff --git a/src/main/java/net/minecraft/core/player/inventory/container/ContainerResult.java b/game/core/src/main/java/net/minecraft/core/player/inventory/container/ContainerResult.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/container/ContainerResult.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/container/ContainerResult.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/container/ContainerSimple.java b/game/core/src/main/java/net/minecraft/core/player/inventory/container/ContainerSimple.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/container/ContainerSimple.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/container/ContainerSimple.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/menu/MenuAbstract.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuAbstract.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/menu/MenuAbstract.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuAbstract.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/menu/MenuActivator.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuActivator.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/menu/MenuActivator.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuActivator.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/menu/MenuContainer.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuContainer.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/menu/MenuContainer.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuContainer.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/menu/MenuCrafting.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuCrafting.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/menu/MenuCrafting.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuCrafting.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/menu/MenuFlag.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuFlag.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/menu/MenuFlag.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuFlag.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/menu/MenuFurnace.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuFurnace.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/menu/MenuFurnace.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuFurnace.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/menu/MenuGuidebook.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuGuidebook.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/menu/MenuGuidebook.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuGuidebook.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventory.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventory.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/menu/MenuInventory.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventory.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventoryCreative.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventoryCreative.java
similarity index 90%
rename from src/main/java/net/minecraft/core/player/inventory/menu/MenuInventoryCreative.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventoryCreative.java
index 0aa4b84ee..da517e6ab 100644
--- a/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventoryCreative.java
+++ b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuInventoryCreative.java
@@ -130,18 +130,18 @@ public class MenuInventoryCreative extends MenuInventory
 	{
 		int count = 0;
 		
-		for (int id = 0; id < Block.blocksList.length; id++)
+		for (int id = 0; id < Blocks.blocksList.length; id++)
 		{
-			if (Block.blocksList[id] != null && !Block.blocksList[id].hasTag(BlockTags.NOT_IN_CREATIVE_MENU))
+			if (Blocks.blocksList[id] != null && !Blocks.blocksList[id].hasTag(BlockTags.NOT_IN_CREATIVE_MENU))
 			{
-				creativeItems.add(new ItemStack(Block.blocksList[id]));
+				creativeItems.add(new ItemStack(Blocks.blocksList[id]));
 				count++;
 				
 				if (id == Blocks.WOOL.id || id == Blocks.PLANKS_OAK_PAINTED.id || id == Blocks.LAMP_IDLE.id || id == Blocks.FENCE_PLANKS_OAK_PAINTED.id)
 				{
 					for (int i = 1; i < 16; i++)
 					{
-						creativeItems.add(new ItemStack(Block.blocksList[id], 1, i));
+						creativeItems.add(new ItemStack(Blocks.blocksList[id], 1, i));
 						count++;
 					}
 				}
@@ -151,14 +151,14 @@ public class MenuInventoryCreative extends MenuInventory
 				{
 					for (int i = 0x10; i < 0x100; i += 0x10)
 					{
-						creativeItems.add(new ItemStack(Block.blocksList[id], 1, i));
+						creativeItems.add(new ItemStack(Blocks.blocksList[id], 1, i));
 						count++;
 					}
 				}
 			}
 		}
 		
-		for (int i = Block.blocksList.length; i < Item.itemsList.length; i++)
+		for (int i = Blocks.blocksList.length; i < Item.itemsList.length; i++)
 		{
 			if (Item.itemsList[i] != null && !Item.itemsList[i].hasTag(ItemTags.NOT_IN_CREATIVE_MENU))
 			{
diff --git a/src/main/java/net/minecraft/core/player/inventory/menu/MenuTrap.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuTrap.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/menu/MenuTrap.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuTrap.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/menu/MenuTrommel.java b/game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuTrommel.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/menu/MenuTrommel.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/menu/MenuTrommel.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/slot/Slot.java b/game/core/src/main/java/net/minecraft/core/player/inventory/slot/Slot.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/slot/Slot.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/slot/Slot.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/slot/SlotArmor.java b/game/core/src/main/java/net/minecraft/core/player/inventory/slot/SlotArmor.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/slot/SlotArmor.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/slot/SlotArmor.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/slot/SlotCreative.java b/game/core/src/main/java/net/minecraft/core/player/inventory/slot/SlotCreative.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/slot/SlotCreative.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/slot/SlotCreative.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/slot/SlotDye.java b/game/core/src/main/java/net/minecraft/core/player/inventory/slot/SlotDye.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/slot/SlotDye.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/slot/SlotDye.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/slot/SlotFurnace.java b/game/core/src/main/java/net/minecraft/core/player/inventory/slot/SlotFurnace.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/slot/SlotFurnace.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/slot/SlotFurnace.java
diff --git a/src/main/java/net/minecraft/core/player/inventory/slot/SlotResult.java b/game/core/src/main/java/net/minecraft/core/player/inventory/slot/SlotResult.java
similarity index 100%
rename from src/main/java/net/minecraft/core/player/inventory/slot/SlotResult.java
rename to game/core/src/main/java/net/minecraft/core/player/inventory/slot/SlotResult.java
diff --git a/src/main/java/net/minecraft/core/sound/BlockSound.java b/game/core/src/main/java/net/minecraft/core/sound/BlockSound.java
similarity index 100%
rename from src/main/java/net/minecraft/core/sound/BlockSound.java
rename to game/core/src/main/java/net/minecraft/core/sound/BlockSound.java
diff --git a/src/main/java/net/minecraft/core/sound/BlockSounds.java b/game/core/src/main/java/net/minecraft/core/sound/BlockSounds.java
similarity index 100%
rename from src/main/java/net/minecraft/core/sound/BlockSounds.java
rename to game/core/src/main/java/net/minecraft/core/sound/BlockSounds.java
diff --git a/src/main/java/net/minecraft/core/sound/SoundCategory.java b/game/core/src/main/java/net/minecraft/core/sound/SoundCategory.java
similarity index 100%
rename from src/main/java/net/minecraft/core/sound/SoundCategory.java
rename to game/core/src/main/java/net/minecraft/core/sound/SoundCategory.java
diff --git a/src/main/java/net/minecraft/core/sound/SoundTypes.java b/game/core/src/main/java/net/minecraft/core/sound/SoundTypes.java
similarity index 95%
rename from src/main/java/net/minecraft/core/sound/SoundTypes.java
rename to game/core/src/main/java/net/minecraft/core/sound/SoundTypes.java
index e8a2e975f..fafaca869 100644
--- a/src/main/java/net/minecraft/core/sound/SoundTypes.java
+++ b/game/core/src/main/java/net/minecraft/core/sound/SoundTypes.java
@@ -5,7 +5,7 @@ import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParseException;
 import com.google.gson.JsonParser;
-import net.minecraft.core.net.packet.SyncIDsPacket;
+import net.minecraft.core.net.packet.PacketSyncIDs;
 
 import java.io.InputStream;
 import java.util.HashMap;
@@ -44,7 +44,7 @@ public class SoundTypes {
 	}
 
 	public static boolean register(String soundPath) {
-		if(soundPath.length() > SyncIDsPacket.MAX_ID_STRING_SIZE) {
+		if(soundPath.length() > PacketSyncIDs.MAX_ID_STRING_SIZE) {
 			throw new RuntimeException("Sound Path is too long: '" + soundPath + "'!");
 		}
 		
diff --git a/src/main/java/net/minecraft/core/util/HardIllegalArgumentException.java b/game/core/src/main/java/net/minecraft/core/util/HardIllegalArgumentException.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/HardIllegalArgumentException.java
rename to game/core/src/main/java/net/minecraft/core/util/HardIllegalArgumentException.java
diff --git a/src/main/java/net/minecraft/core/util/collection/IntHashMap.java b/game/core/src/main/java/net/minecraft/core/util/collection/IntHashMap.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/collection/IntHashMap.java
rename to game/core/src/main/java/net/minecraft/core/util/collection/IntHashMap.java
diff --git a/src/main/java/net/minecraft/core/util/collection/LongHashMap.java b/game/core/src/main/java/net/minecraft/core/util/collection/LongHashMap.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/collection/LongHashMap.java
rename to game/core/src/main/java/net/minecraft/core/util/collection/LongHashMap.java
diff --git a/src/main/java/net/minecraft/core/util/collection/NamespaceID.java b/game/core/src/main/java/net/minecraft/core/util/collection/NamespaceID.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/collection/NamespaceID.java
rename to game/core/src/main/java/net/minecraft/core/util/collection/NamespaceID.java
diff --git a/src/main/java/net/minecraft/core/util/collection/Pair.java b/game/core/src/main/java/net/minecraft/core/util/collection/Pair.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/collection/Pair.java
rename to game/core/src/main/java/net/minecraft/core/util/collection/Pair.java
diff --git a/src/main/java/net/minecraft/core/util/debug/Debug.java b/game/core/src/main/java/net/minecraft/core/util/debug/Debug.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/debug/Debug.java
rename to game/core/src/main/java/net/minecraft/core/util/debug/Debug.java
diff --git a/src/main/java/net/minecraft/core/util/helper/AES.java b/game/core/src/main/java/net/minecraft/core/util/helper/AES.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/AES.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/AES.java
diff --git a/src/main/java/net/minecraft/core/util/helper/Axis.java b/game/core/src/main/java/net/minecraft/core/util/helper/Axis.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/Axis.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/Axis.java
diff --git a/src/main/java/net/minecraft/core/util/helper/BlockParticleHelper.java b/game/core/src/main/java/net/minecraft/core/util/helper/BlockParticleHelper.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/BlockParticleHelper.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/BlockParticleHelper.java
diff --git a/src/main/java/net/minecraft/core/util/helper/Buffer.java b/game/core/src/main/java/net/minecraft/core/util/helper/Buffer.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/Buffer.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/Buffer.java
diff --git a/src/main/java/net/minecraft/core/util/helper/ChatAllowedCharacters.java b/game/core/src/main/java/net/minecraft/core/util/helper/ChatAllowedCharacters.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/ChatAllowedCharacters.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/ChatAllowedCharacters.java
diff --git a/src/main/java/net/minecraft/core/util/helper/Color.java b/game/core/src/main/java/net/minecraft/core/util/helper/Color.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/Color.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/Color.java
diff --git a/src/main/java/net/minecraft/core/util/helper/DamageType.java b/game/core/src/main/java/net/minecraft/core/util/helper/DamageType.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/DamageType.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/DamageType.java
diff --git a/src/main/java/net/minecraft/core/util/helper/Direction.java b/game/core/src/main/java/net/minecraft/core/util/helper/Direction.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/Direction.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/Direction.java
diff --git a/src/main/java/net/minecraft/core/util/helper/DyeColor.java b/game/core/src/main/java/net/minecraft/core/util/helper/DyeColor.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/DyeColor.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/DyeColor.java
diff --git a/src/main/java/net/minecraft/core/util/helper/GetMonsterSkinUrlThread.java b/game/core/src/main/java/net/minecraft/core/util/helper/GetMonsterSkinUrlThread.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/GetMonsterSkinUrlThread.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/GetMonsterSkinUrlThread.java
diff --git a/src/main/java/net/minecraft/core/util/helper/GetSkinUrlThread.java b/game/core/src/main/java/net/minecraft/core/util/helper/GetSkinUrlThread.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/GetSkinUrlThread.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/GetSkinUrlThread.java
diff --git a/src/main/java/net/minecraft/core/util/helper/ITranslatable.java b/game/core/src/main/java/net/minecraft/core/util/helper/ITranslatable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/ITranslatable.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/ITranslatable.java
diff --git a/src/main/java/net/minecraft/core/util/helper/JTextAreaWriter.java b/game/core/src/main/java/net/minecraft/core/util/helper/JTextAreaWriter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/JTextAreaWriter.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/JTextAreaWriter.java
diff --git a/src/main/java/net/minecraft/core/util/helper/Listener.java b/game/core/src/main/java/net/minecraft/core/util/helper/Listener.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/Listener.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/Listener.java
diff --git a/src/main/java/net/minecraft/core/util/helper/LoggedPrintStream.java b/game/core/src/main/java/net/minecraft/core/util/helper/LoggedPrintStream.java
similarity index 98%
rename from src/main/java/net/minecraft/core/util/helper/LoggedPrintStream.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/LoggedPrintStream.java
index 5d3d8efe9..a07009f13 100644
--- a/src/main/java/net/minecraft/core/util/helper/LoggedPrintStream.java
+++ b/game/core/src/main/java/net/minecraft/core/util/helper/LoggedPrintStream.java
@@ -41,7 +41,7 @@ public class LoggedPrintStream extends PrintStream
 		boolean a = false;
 		for(int i=0; i < string.length(); i++) {
 			char c = string.charAt(i);
-			if(c == '§') {
+			if(c == '\u00a7') {
 				a = true;
 			}else if(a) {
 				a = false;
diff --git a/src/main/java/net/minecraft/core/util/helper/MathHelper.java b/game/core/src/main/java/net/minecraft/core/util/helper/MathHelper.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/MathHelper.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/MathHelper.java
diff --git a/src/main/java/net/minecraft/core/util/helper/RSA.java b/game/core/src/main/java/net/minecraft/core/util/helper/RSA.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/RSA.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/RSA.java
diff --git a/src/main/java/net/minecraft/core/util/helper/ReflectionHelper.java b/game/core/src/main/java/net/minecraft/core/util/helper/ReflectionHelper.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/ReflectionHelper.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/ReflectionHelper.java
diff --git a/src/main/java/net/minecraft/core/util/helper/RestHandler.java b/game/core/src/main/java/net/minecraft/core/util/helper/RestHandler.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/RestHandler.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/RestHandler.java
diff --git a/src/main/java/net/minecraft/core/util/helper/Side.java b/game/core/src/main/java/net/minecraft/core/util/helper/Side.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/Side.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/Side.java
diff --git a/src/main/java/net/minecraft/core/util/helper/Sides.java b/game/core/src/main/java/net/minecraft/core/util/helper/Sides.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/Sides.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/Sides.java
diff --git a/src/main/java/net/minecraft/core/util/helper/Time.java b/game/core/src/main/java/net/minecraft/core/util/helper/Time.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/Time.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/Time.java
diff --git a/src/main/java/net/minecraft/core/util/helper/Toggleable.java b/game/core/src/main/java/net/minecraft/core/util/helper/Toggleable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/Toggleable.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/Toggleable.java
diff --git a/src/main/java/net/minecraft/core/util/helper/UUIDHelper.java b/game/core/src/main/java/net/minecraft/core/util/helper/UUIDHelper.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/UUIDHelper.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/UUIDHelper.java
diff --git a/src/main/java/net/minecraft/core/util/helper/Utils.java b/game/core/src/main/java/net/minecraft/core/util/helper/Utils.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/helper/Utils.java
rename to game/core/src/main/java/net/minecraft/core/util/helper/Utils.java
diff --git a/src/main/java/net/minecraft/core/util/phys/AABB.java b/game/core/src/main/java/net/minecraft/core/util/phys/AABB.java
similarity index 98%
rename from src/main/java/net/minecraft/core/util/phys/AABB.java
rename to game/core/src/main/java/net/minecraft/core/util/phys/AABB.java
index d1fcf3616..55acecb25 100644
--- a/src/main/java/net/minecraft/core/util/phys/AABB.java
+++ b/game/core/src/main/java/net/minecraft/core/util/phys/AABB.java
@@ -16,9 +16,9 @@ public class AABB
     public double maxY;
     public double maxZ;
 
-    public static AABB getPermanentBB(double d, double d1, double d2, double d3, double d4, double d5)
+    public static AABB getPermanentBB(double minX, double minY, double minZ, double maxX, double maxY, double maxZ)
     {
-        return new AABB(d, d1, d2, d3, d4, d5);
+        return new AABB(minX, minY, minZ, maxX, maxY, maxZ);
     }
 
     public static void deinitializePool()
diff --git a/src/main/java/net/minecraft/core/util/phys/BoundingVolume.java b/game/core/src/main/java/net/minecraft/core/util/phys/BoundingVolume.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/phys/BoundingVolume.java
rename to game/core/src/main/java/net/minecraft/core/util/phys/BoundingVolume.java
diff --git a/src/main/java/net/minecraft/core/util/phys/HitResult.java b/game/core/src/main/java/net/minecraft/core/util/phys/HitResult.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/phys/HitResult.java
rename to game/core/src/main/java/net/minecraft/core/util/phys/HitResult.java
diff --git a/src/main/java/net/minecraft/core/util/phys/Vec3.java b/game/core/src/main/java/net/minecraft/core/util/phys/Vec3.java
similarity index 100%
rename from src/main/java/net/minecraft/core/util/phys/Vec3.java
rename to game/core/src/main/java/net/minecraft/core/util/phys/Vec3.java
diff --git a/src/main/java/net/minecraft/core/world/AuroraProvider.java b/game/core/src/main/java/net/minecraft/core/world/AuroraProvider.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/AuroraProvider.java
rename to game/core/src/main/java/net/minecraft/core/world/AuroraProvider.java
index 05476f7b8..43cf3b070 100644
--- a/src/main/java/net/minecraft/core/world/AuroraProvider.java
+++ b/game/core/src/main/java/net/minecraft/core/world/AuroraProvider.java
@@ -1,104 +1,104 @@
-package net.minecraft.core.world;
-
-import net.minecraft.core.world.noise.ImprovedNoise;
-
-import java.util.Random;
-
-public class AuroraProvider
-{
-    private final ImprovedNoise noise;
-    private final World world;
-
-    public AuroraProvider(World world, long seed)
-    {
-        this.world = world;
-        noise = new ImprovedNoise(new Random(seed));
-    }
-
-    public double getAuroraPresence(double x, double z, long worldTime, float celestialAngle)
-    {
-        double auroraLevel = 0.0f;
-        double auroraRadius = 0.03f;
-
-        double mult;
-        if (celestialAngle < 0.25f || celestialAngle > 0.75f)
-        {
-            return 0.0f;
-        }
-        else
-        {
-            // celestialAngle from 0.25f to 0.75f
-            celestialAngle = (celestialAngle - 0.25f) * 2;
-            // celestialAngle from 0.0f to 1.0f
-            celestialAngle = (celestialAngle * 2) - 1f;
-            // celestialAngle from -1.0f to 1.0f
-            celestialAngle = Math.abs(celestialAngle);
-            // celestialAngle from 1.0f to 0.0f to 1.0f
-            celestialAngle = -celestialAngle + 1.0f;
-            // celestialAngle from 0.0f to 1.0f to 0.0f
-            mult = celestialAngle;
-        }
-
-        double sample = noise.getValue(x / 1000d, worldTime / 5000d, z / 1000d);
-        sample += noise.getValue(x / 30d, worldTime / 50d, z / 30d) * 0.05d;
-        if (sample < auroraLevel - auroraRadius || sample > auroraLevel + auroraRadius)
-        {
-            return 0.0f;
-        }
-        else
-        {
-            // Range = auroraLevel - auroraRadius to auroraLevel + auroraRadius
-            sample -= auroraLevel;
-            // Range = -auroraRadius to auroraRadius
-            sample /= auroraRadius;
-            // Range = -1.0 to 1.0
-            sample = Math.abs(sample);
-            // Range = 1.0 to 0.0 to 1.0
-            sample = -sample;
-            // Range = -1.0 to 0.0 to -1.0
-            sample += 1.0d;
-            // Range = 0.0 to 1.0 to 0.0
-            return sample * mult;
-        }
-    }
-
-    public double getAuroraHeightOffset(double x, double z, double worldTime)
-    {
-        return noise.getValue(x / 100d, worldTime / 5000d, z / 100d) * 25d;
-    }
-
-    public float getAuroraRedOffset(double x, double z, double worldTime)
-    {
-        double sample = noise.getValue(x / 500d, worldTime / 5000d + 10000, z / 500d);
-        double sample2 = noise.getValue(x / 200d, worldTime / 5000d, z / 200d);
-        if (sample < 0.0f) sample = 0.0f;
-        if (sample > 0.25f) sample = 0.25f;
-        if (sample2 < 0.0f) sample2 = 0.0f;
-        if (sample2 > 0.1f) sample2 = 0.1f;
-
-
-        return (float) (sample * 3 + sample2 * 2);
-    }
-
-    public float getAuroraGreenOffset(double x, double z, double worldTime)
-    {
-        double sample = noise.getValue(x / 500d, worldTime / 5000d + 10000d, z / 500d);
-        double sample2 = noise.getValue(x / 500d, worldTime / 5000d, z / 500d);
-        if (sample < 0) sample = 0;
-        if (sample > 0.125f) sample = 0.125f;
-        if (sample2 < 0.0f) sample2 = 0.0f;
-        if (sample2 > 0.25f) sample2 = 0.25f;
-
-
-        return (float) (sample * 4 - sample2 * 2);
-    }
-
-    public float getAuroraBlueOffset(double x, double z, double worldTime)
-    {
-        double sample = noise.getValue(x / 500d, worldTime / 5000d, z / 500d);
-        if (sample < 0.0f) sample = 0.0f;
-        if (sample > 0.25f) sample = 0.25f;
-
-        return (float) sample;
-    }
-}
+package net.minecraft.core.world;
+
+import net.minecraft.core.world.noise.ImprovedNoise;
+
+import java.util.Random;
+
+public class AuroraProvider
+{
+    private final ImprovedNoise noise;
+    private final World world;
+
+    public AuroraProvider(World world, long seed)
+    {
+        this.world = world;
+        noise = new ImprovedNoise(new Random(seed));
+    }
+
+    public double getAuroraPresence(double x, double z, long worldTime, float celestialAngle)
+    {
+        double auroraLevel = 0.0f;
+        double auroraRadius = 0.03f;
+
+        double mult;
+        if (celestialAngle < 0.25f || celestialAngle > 0.75f)
+        {
+            return 0.0f;
+        }
+        else
+        {
+            // celestialAngle from 0.25f to 0.75f
+            celestialAngle = (celestialAngle - 0.25f) * 2;
+            // celestialAngle from 0.0f to 1.0f
+            celestialAngle = (celestialAngle * 2) - 1f;
+            // celestialAngle from -1.0f to 1.0f
+            celestialAngle = Math.abs(celestialAngle);
+            // celestialAngle from 1.0f to 0.0f to 1.0f
+            celestialAngle = -celestialAngle + 1.0f;
+            // celestialAngle from 0.0f to 1.0f to 0.0f
+            mult = celestialAngle;
+        }
+
+        double sample = noise.getValue(x / 1000d, worldTime / 5000d, z / 1000d);
+        sample += noise.getValue(x / 30d, worldTime / 50d, z / 30d) * 0.05d;
+        if (sample < auroraLevel - auroraRadius || sample > auroraLevel + auroraRadius)
+        {
+            return 0.0f;
+        }
+        else
+        {
+            // Range = auroraLevel - auroraRadius to auroraLevel + auroraRadius
+            sample -= auroraLevel;
+            // Range = -auroraRadius to auroraRadius
+            sample /= auroraRadius;
+            // Range = -1.0 to 1.0
+            sample = Math.abs(sample);
+            // Range = 1.0 to 0.0 to 1.0
+            sample = -sample;
+            // Range = -1.0 to 0.0 to -1.0
+            sample += 1.0d;
+            // Range = 0.0 to 1.0 to 0.0
+            return sample * mult;
+        }
+    }
+
+    public double getAuroraHeightOffset(double x, double z, double worldTime)
+    {
+        return noise.getValue(x / 100d, worldTime / 5000d, z / 100d) * 25d;
+    }
+
+    public float getAuroraRedOffset(double x, double z, double worldTime)
+    {
+        double sample = noise.getValue(x / 500d, worldTime / 5000d + 10000, z / 500d);
+        double sample2 = noise.getValue(x / 200d, worldTime / 5000d, z / 200d);
+        if (sample < 0.0f) sample = 0.0f;
+        if (sample > 0.25f) sample = 0.25f;
+        if (sample2 < 0.0f) sample2 = 0.0f;
+        if (sample2 > 0.1f) sample2 = 0.1f;
+
+
+        return (float) (sample * 3 + sample2 * 2);
+    }
+
+    public float getAuroraGreenOffset(double x, double z, double worldTime)
+    {
+        double sample = noise.getValue(x / 500d, worldTime / 5000d + 10000d, z / 500d);
+        double sample2 = noise.getValue(x / 500d, worldTime / 5000d, z / 500d);
+        if (sample < 0) sample = 0;
+        if (sample > 0.125f) sample = 0.125f;
+        if (sample2 < 0.0f) sample2 = 0.0f;
+        if (sample2 > 0.25f) sample2 = 0.25f;
+
+
+        return (float) (sample * 4 - sample2 * 2);
+    }
+
+    public float getAuroraBlueOffset(double x, double z, double worldTime)
+    {
+        double sample = noise.getValue(x / 500d, worldTime / 5000d, z / 500d);
+        if (sample < 0.0f) sample = 0.0f;
+        if (sample > 0.25f) sample = 0.25f;
+
+        return (float) sample;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/BlocksContainer.java b/game/core/src/main/java/net/minecraft/core/world/BlocksContainer.java
similarity index 98%
rename from src/main/java/net/minecraft/core/world/BlocksContainer.java
rename to game/core/src/main/java/net/minecraft/core/world/BlocksContainer.java
index 397297255..b4ad36886 100644
--- a/src/main/java/net/minecraft/core/world/BlocksContainer.java
+++ b/game/core/src/main/java/net/minecraft/core/world/BlocksContainer.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.world;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.entity.Entity;
@@ -55,7 +56,7 @@ public class BlocksContainer implements WorldSource {
 
     @Override
     public Block getBlock(int x, int y, int z) {
-        return Block.getBlock(getBlockId(x, y, z));
+        return Blocks.getBlock(getBlockId(x, y, z));
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/core/world/Dimension.java b/game/core/src/main/java/net/minecraft/core/world/Dimension.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/Dimension.java
rename to game/core/src/main/java/net/minecraft/core/world/Dimension.java
diff --git a/src/main/java/net/minecraft/core/world/Explosion.java b/game/core/src/main/java/net/minecraft/core/world/Explosion.java
similarity index 94%
rename from src/main/java/net/minecraft/core/world/Explosion.java
rename to game/core/src/main/java/net/minecraft/core/world/Explosion.java
index f48cd58b7..43fc7e8c4 100644
--- a/src/main/java/net/minecraft/core/world/Explosion.java
+++ b/game/core/src/main/java/net/minecraft/core/world/Explosion.java
@@ -88,9 +88,9 @@ public class Explosion {
             }
             if(id > 0)
             {
-                Block.blocksList[id].dropBlockWithCause(worldObj, EnumDropCause.EXPLOSION, x, y, z, worldObj.getBlockMetadata(x, y, z), tileEntity, null);
+                Blocks.blocksList[id].dropBlockWithCause(worldObj, EnumDropCause.EXPLOSION, x, y, z, worldObj.getBlockMetadata(x, y, z), tileEntity, null);
                 worldObj.setBlockWithNotify(x, y, z, 0);
-                Block.blocksList[id].onBlockDestroyedByExplosion(worldObj, x, y, z);
+                Blocks.blocksList[id].onBlockDestroyedByExplosion(worldObj, x, y, z);
             }
         }
     }
@@ -124,7 +124,7 @@ public class Explosion {
                         int l4 = MathHelper.floor(d9);
                         int i5 = worldObj.getBlockId(j4, k4, l4);
                         if(i5 > 0) {
-                            f1 -= (Block.blocksList[i5].getBlastResistance(exploder) + 0.3F) * f2;
+                            f1 -= (Blocks.blocksList[i5].getBlastResistance(exploder) + 0.3F) * f2;
                         }
                         if(f1 > 0.0F) {
                             destroyedBlockPositions.add(new ChunkPosition(j4, k4, l4));
@@ -180,7 +180,7 @@ public class Explosion {
 			int y1 = chunkposition.y;
 			int z1 = chunkposition.z;
 			
-			if(worldObj.getBlockId(x1, y1, z1) == 0 && Block.solid[worldObj.getBlockId(x1, y1 - 1, z1)] && ExplosionRNG.nextInt(3) == 0) {
+			if(worldObj.getBlockId(x1, y1, z1) == 0 && Blocks.solid[worldObj.getBlockId(x1, y1 - 1, z1)] && ExplosionRNG.nextInt(3) == 0) {
 				worldObj.setBlockWithNotify(x1, y1, z1, Blocks.FIRE.id);
 			}
 		}
diff --git a/src/main/java/net/minecraft/core/world/ExplosionCannonball.java b/game/core/src/main/java/net/minecraft/core/world/ExplosionCannonball.java
similarity index 88%
rename from src/main/java/net/minecraft/core/world/ExplosionCannonball.java
rename to game/core/src/main/java/net/minecraft/core/world/ExplosionCannonball.java
index 8c6c0079b..2faa0280b 100644
--- a/src/main/java/net/minecraft/core/world/ExplosionCannonball.java
+++ b/game/core/src/main/java/net/minecraft/core/world/ExplosionCannonball.java
@@ -61,7 +61,7 @@ public class ExplosionCannonball extends Explosion{
                         int i5 = worldObj.getBlockId(j4, k4, l4);
                         if(i5 > 0)
                         {
-                            f1 -= (Block.blocksList[i5].getBlastResistance(exploder) + 0.3F) * f2;
+                            f1 -= (Blocks.blocksList[i5].getBlastResistance(exploder) + 0.3F) * f2;
                         }
                         if(f1 > 0.0F)
                         {
@@ -121,7 +121,7 @@ public class ExplosionCannonball extends Explosion{
                 int k3 = chunkposition.z;
                 int l3 = worldObj.getBlockId(i3, j3, k3);
                 int i4 = worldObj.getBlockId(i3, j3 - 1, k3);
-                if(l3 == 0 && Block.solid[i4] && ExplosionRNG.nextInt(3) == 0)
+                if(l3 == 0 && Blocks.solid[i4] && ExplosionRNG.nextInt(3) == 0)
                 {
                     worldObj.setBlockWithNotify(i3, j3, k3, Blocks.FIRE.id);
                 }
@@ -165,16 +165,16 @@ public class ExplosionCannonball extends Explosion{
                 worldObj.spawnParticle("explode", (d + explosionX) / 2D, (d1 + explosionY) / 2D, (d2 + explosionZ) / 2D, d3, d4, d5, 0 );
                 worldObj.spawnParticle("smoke", d, d1, d2, d3, d4, d5, 0);
             }
-            if(i1 > 0 && (Block.blocksList[i1].id == Blocks.GLASS.id
-                    ||  Block.blocksList[i1].blockMaterial == Material.topSnow
-                    ||  Block.blocksList[i1].blockMaterial == Material.plant
-                    ||  Block.blocksList[i1].blockMaterial == Material.web
-                    ||  Block.blocksList[i1].blockMaterial == Material.decoration
-                    ||  Block.blocksList[i1].blockMaterial == Material.ice))
+            if(i1 > 0 && (Blocks.blocksList[i1].id == Blocks.GLASS.id
+                    ||  Blocks.blocksList[i1].blockMaterial == Material.topSnow
+                    ||  Blocks.blocksList[i1].blockMaterial == Material.plant
+                    ||  Blocks.blocksList[i1].blockMaterial == Material.web
+                    ||  Blocks.blocksList[i1].blockMaterial == Material.decoration
+                    ||  Blocks.blocksList[i1].blockMaterial == Material.ice))
             {
-                Block.blocksList[i1].dropBlockWithCause(worldObj, EnumDropCause.EXPLOSION, x, y, z, worldObj.getBlockMetadata(x, y, z), tileEntity, null);
+                Blocks.blocksList[i1].dropBlockWithCause(worldObj, EnumDropCause.EXPLOSION, x, y, z, worldObj.getBlockMetadata(x, y, z), tileEntity, null);
                 worldObj.setBlockWithNotify(x, y, z, 0);
-                Block.blocksList[i1].onBlockDestroyedByExplosion(worldObj, x, y, z);
+                Blocks.blocksList[i1].onBlockDestroyedByExplosion(worldObj, x, y, z);
             }
         }
 
diff --git a/src/main/java/net/minecraft/core/world/ICarriable.java b/game/core/src/main/java/net/minecraft/core/world/ICarriable.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/ICarriable.java
rename to game/core/src/main/java/net/minecraft/core/world/ICarriable.java
diff --git a/src/main/java/net/minecraft/core/world/IVehicle.java b/game/core/src/main/java/net/minecraft/core/world/IVehicle.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/IVehicle.java
rename to game/core/src/main/java/net/minecraft/core/world/IVehicle.java
diff --git a/src/main/java/net/minecraft/core/world/LevelListener.java b/game/core/src/main/java/net/minecraft/core/world/LevelListener.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/LevelListener.java
rename to game/core/src/main/java/net/minecraft/core/world/LevelListener.java
diff --git a/src/main/java/net/minecraft/core/world/PortalHandler.java b/game/core/src/main/java/net/minecraft/core/world/PortalHandler.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/PortalHandler.java
rename to game/core/src/main/java/net/minecraft/core/world/PortalHandler.java
index 1b010846e..5a5c1cac2 100644
--- a/src/main/java/net/minecraft/core/world/PortalHandler.java
+++ b/game/core/src/main/java/net/minecraft/core/world/PortalHandler.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.world;
 
 import net.minecraft.core.block.BlockPortal;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.util.helper.DyeColor;
 import net.minecraft.core.util.helper.MathHelper;
@@ -73,7 +74,7 @@ public class PortalHandler
                         continue;
                     }
 
-                    if (portalColor != null && targetPortalId > 0 && ((BlockPortal)Block.getBlock(targetPortalId)).getColor(world, dx, dy, dz) != portalColor) {
+                    if (portalColor != null && targetPortalId > 0 && ((BlockPortal)Blocks.getBlock(targetPortalId)).getColor(world, dx, dy, dz) != portalColor) {
                         continue;
                     }
                     
@@ -108,7 +109,7 @@ public class PortalHandler
                             continue;
                         }
 
-                        if (portalColor != null && targetPortalId > 0 && ((BlockPortal) Block.getBlock(targetPortalId)).getColor(world, dx, dy, dz) != portalColor) {
+                        if (portalColor != null && targetPortalId > 0 && ((BlockPortal) Blocks.getBlock(targetPortalId)).getColor(world, dx, dy, dz) != portalColor) {
                             continue;
                         }
 
@@ -192,12 +193,12 @@ public class PortalHandler
         
         if (newDim.homeDim == null)
         {
-        	targetPortalFrameId = ((BlockPortal) Block.blocksList[oldDim.portalBlockId]).portalFrameId;
+        	targetPortalFrameId = ((BlockPortal) Blocks.blocksList[oldDim.portalBlockId]).portalFrameId;
         	targetPortalId = oldDim.portalBlockId;
         }
         else
         {
-        	targetPortalFrameId = ((BlockPortal)Block.blocksList[newDim.portalBlockId]).portalFrameId;
+        	targetPortalFrameId = ((BlockPortal)Blocks.blocksList[newDim.portalBlockId]).portalFrameId;
         	targetPortalId = newDim.portalBlockId;
         }
         
@@ -363,7 +364,7 @@ label1:
 
             }
             
-            ((BlockPortal)Block.blocksList[targetPortalId]).tryToCreatePortal(world, portalX,  portalY,  portalZ, portalColor);
+            ((BlockPortal)Blocks.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/ProgressListener.java b/game/core/src/main/java/net/minecraft/core/world/ProgressListener.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/ProgressListener.java
rename to game/core/src/main/java/net/minecraft/core/world/ProgressListener.java
diff --git a/src/main/java/net/minecraft/core/world/SpawnerMobs.java b/game/core/src/main/java/net/minecraft/core/world/SpawnerMobs.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/SpawnerMobs.java
rename to game/core/src/main/java/net/minecraft/core/world/SpawnerMobs.java
diff --git a/src/main/java/net/minecraft/core/world/World.java b/game/core/src/main/java/net/minecraft/core/world/World.java
similarity index 95%
rename from src/main/java/net/minecraft/core/world/World.java
rename to game/core/src/main/java/net/minecraft/core/world/World.java
index 87461f1dd..ea80c584b 100644
--- a/src/main/java/net/minecraft/core/world/World.java
+++ b/game/core/src/main/java/net/minecraft/core/world/World.java
@@ -446,7 +446,7 @@ public class World implements WorldSource {
 
     @Override
     public Block getBlock(int x, int y, int z) {
-        return Block.getBlock(getBlockId(x, y, z));
+        return Blocks.getBlock(getBlockId(x, y, z));
     }
 
     @Override
@@ -738,7 +738,7 @@ public class World implements WorldSource {
             return Material.air;
         } else
         {
-            return Block.blocksList[l].blockMaterial;
+            return Blocks.blocksList[l].blockMaterial;
         }
     }
 
@@ -772,7 +772,7 @@ public class World implements WorldSource {
             markBlockNeedsUpdate(x, y, z);
             int id = getBlockId(x, y, z);
             // TODO The name neighborNotifyOnMetadataChangeDisabled suggests that this should be inverted, but doing that breaks redstone
-            if(Block.neighborNotifyOnMetadataChangeDisabled[id & 0x3fff])
+            if(Blocks.neighborNotifyOnMetadataChangeDisabled[id & 0x3fff])
             {
                 notifyBlocksOfNeighborChange(x, y, z, id);
             }
@@ -883,7 +883,7 @@ public class World implements WorldSource {
         {
             return;
         }
-        Block block = Block.blocksList[getBlockId(x, y, z)];
+        Block block = Blocks.blocksList[getBlockId(x, y, z)];
         if(block != null)
         {
             block.onNeighborBlockChange(this, x, y, z, blockId);
@@ -1024,9 +1024,9 @@ public class World implements WorldSource {
         else if(lightLayer == LightLayer.Block)
         {
             int i1 = getBlockId(x, y, z);
-            if(Block.lightEmission[i1] > lightValue)
+            if(Blocks.lightEmission[i1] > lightValue)
             {
-                lightValue = Block.lightEmission[i1];
+                lightValue = Blocks.lightEmission[i1];
             }
         }
         if(getSavedLightValue(lightLayer, x, y, z) != lightValue)
@@ -1141,17 +1141,17 @@ public class World implements WorldSource {
     @Nullable
     public HitResult checkBlockCollisionBetweenPoints(Vec3 start, Vec3 end)
     {
-        return checkBlockCollisionBetweenPoints(start, end, false, false);
+        return checkBlockCollisionBetweenPoints(start, end, false, false, false);
     }
 
     @Nullable
     public HitResult checkBlockCollisionBetweenPoints(Vec3 start, Vec3 end, boolean shouldCollideWithFluids)
     {
-        return checkBlockCollisionBetweenPoints(start, end, shouldCollideWithFluids, false);
+        return checkBlockCollisionBetweenPoints(start, end, shouldCollideWithFluids, false, false);
     }
 
     @Nullable
-    public HitResult checkBlockCollisionBetweenPoints(Vec3 start, Vec3 end, boolean shouldCollideWithFluids, boolean ignoreNonColliderBlocks)
+    public HitResult checkBlockCollisionBetweenPoints(Vec3 start, Vec3 end, boolean shouldCollideWithFluids, boolean ignoreNonColliderBlocks, boolean useSelectorBoxes)
     {
         if(Double.isNaN(start.x) || Double.isNaN(start.y) || Double.isNaN(start.z))
         {
@@ -1169,10 +1169,14 @@ public class World implements WorldSource {
         int blockStartZ = MathHelper.floor(start.z);
         int id = getBlockId(blockStartX, blockStartY, blockStartZ);
         int meta = getBlockMetadata(blockStartX, blockStartY, blockStartZ);
-        Block block = Block.blocksList[id];
-        if((!ignoreNonColliderBlocks || block == null || block.getCollisionBoundingBoxFromPool(this, blockStartX, blockStartY, blockStartZ) != null) && id > 0 && (block.canCollideCheck(meta, shouldCollideWithFluids)))
-        {
-            HitResult hitResult = block.collisionRayTrace(this, blockStartX, blockStartY, blockStartZ, start, end);
+        Block block = Blocks.blocksList[id];
+        if(
+            (
+                !ignoreNonColliderBlocks ||
+                    (block == null) ||
+                    ((useSelectorBoxes ? block.getSelectedBoundingBoxFromPool(this, blockStartX, blockStartY, blockStartZ) : block.getCollisionBoundingBoxFromPool(this, blockStartX, blockStartY, blockStartZ)) != null)) && (id > 0) && (block.canCollideCheck(meta, shouldCollideWithFluids)))
+        {
+            HitResult hitResult = block.collisionRayTrace(this, blockStartX, blockStartY, blockStartZ, start, end, useSelectorBoxes);
             if(hitResult != null)
             {
                 return hitResult;
@@ -1305,9 +1309,10 @@ public class World implements WorldSource {
             }
             Block block1 = getBlock(blockStartX, blockStartY, blockStartZ);
             int metadata1 = getBlockMetadata(blockStartX, blockStartY, blockStartZ);
-            if((!ignoreNonColliderBlocks || block1 == null || block1.getCollisionBoundingBoxFromPool(this, blockStartX, blockStartY, blockStartZ) != null) && block1 != null && block1.canCollideCheck(metadata1, shouldCollideWithFluids))
+            if(
+                (!ignoreNonColliderBlocks || (block1 == null) || ((useSelectorBoxes ? block1.getSelectedBoundingBoxFromPool(this, blockStartX, blockStartY, blockStartZ) : block1.getCollisionBoundingBoxFromPool(this, blockStartX, blockStartY, blockStartZ)) != null)) && (block1 != null) && block1.canCollideCheck(metadata1, shouldCollideWithFluids))
             {
-                HitResult hitResult = block1.collisionRayTrace(this, blockStartX, blockStartY, blockStartZ, start, end);
+                HitResult hitResult = block1.collisionRayTrace(this, blockStartX, blockStartY, blockStartZ, start, end, useSelectorBoxes);
                 if(hitResult != null)
                 {
                     return hitResult;
@@ -1483,16 +1488,16 @@ public class World implements WorldSource {
     {
         listeners.remove(iworldaccess);
     }
-    public List<AABB> getCubes(Entity entity, AABB axisalignedbb)
+    public List<AABB> getCubes(Entity entity, AABB aabb)
     {
         collidingBoundingBoxes.clear();
 
-        int minX = MathHelper.floor(axisalignedbb.minX);
-        int maxX = MathHelper.floor(axisalignedbb.maxX + 1.0D);
-        int minY = MathHelper.floor(axisalignedbb.minY);
-        int maxY = MathHelper.floor(axisalignedbb.maxY + 1.0D);
-        int minZ = MathHelper.floor(axisalignedbb.minZ);
-        int maxZ = MathHelper.floor(axisalignedbb.maxZ + 1.0D);
+        int minX = MathHelper.floor(aabb.minX);
+        int maxX = MathHelper.floor(aabb.maxX + 1.0D);
+        int minY = MathHelper.floor(aabb.minY);
+        int maxY = MathHelper.floor(aabb.maxY + 1.0D);
+        int minZ = MathHelper.floor(aabb.minZ);
+        int maxZ = MathHelper.floor(aabb.maxZ + 1.0D);
         for(int dx = minX - 1; dx <= maxX; dx++)
         {
             for(int dz = minZ - 1; dz <= maxZ; dz++)
@@ -1503,13 +1508,13 @@ public class World implements WorldSource {
                 }
                 for(int dy = minY - 1; dy <= maxY; dy++)
                 {
-                    Block block = Block.blocksList[getBlockId(dx, dy, dz)];
+                    Block block = getBlock(dx, dy, dz);
                     if(block != null)
                     {
                         int metadata = getBlockMetadata(dx, dy, dz);
                         if (block.collidesWithEntity(entity, this, dx, dy, dz) && entity.collidesWithBlock(block, metadata))
                         {
-                            block.getCollidingBoundingBoxes(this, dx, dy, dz, axisalignedbb, collidingBoundingBoxes);
+                            block.getCollidingBoundingBoxes(this, dx, dy, dz, aabb, collidingBoundingBoxes);
                         }
                     }
                 }
@@ -1519,11 +1524,11 @@ public class World implements WorldSource {
         }
 
         double radius = 0.25D;
-        List<Entity> list = getEntitiesWithinAABBExcludingEntity(entity, axisalignedbb.grow(radius, radius, radius));
-        for (Entity value : list) {
-            AABB axisalignedbb1 = value.getBb();
-            if (axisalignedbb1 != null && axisalignedbb1.intersects(axisalignedbb)) {
-                collidingBoundingBoxes.add(axisalignedbb1);
+        List<Entity> entities = getEntitiesWithinAABBExcludingEntity(entity, aabb.grow(radius, radius, radius));
+        for (Entity e : entities) {
+            AABB entityBB = e.getBb();
+            if (entityBB != null && entityBB.intersects(aabb)) {
+                collidingBoundingBoxes.add(entityBB);
             }
         }
 
@@ -1549,7 +1554,7 @@ public class World implements WorldSource {
                 }
                 for(int dy = minY - 1; dy <= maxY; dy++)
                 {
-                    Block block = Block.blocksList[getBlockId(dx, dy, dz)];
+                    Block block = Blocks.blocksList[getBlockId(dx, dy, dz)];
                     if(block != null && block.isSolidRender())
                     {
                         // ignore mesh blocks if entity is instance of an item
@@ -1616,7 +1621,7 @@ public class World implements WorldSource {
         while(y > 0)
         {
             int id = chunk.getBlockID(x, y, z);
-            Material material = id != 0 ? Block.blocksList[id].blockMaterial : Material.air;
+            Material material = id != 0 ? Blocks.blocksList[id].blockMaterial : Material.air;
             if(!material.blocksMotion() && !material.isLiquid())
             {
                 y--;
@@ -1637,7 +1642,7 @@ public class World implements WorldSource {
         z &= (Chunk.CHUNK_SIZE_Z - 1);
         while(y > 0)
         {
-            Block block = Block.getBlock(chunk.getBlockID(x, y, z));
+            Block block = Blocks.getBlock(chunk.getBlockID(x, y, z));
             Material material = block != null ? block.blockMaterial : Material.air;
             if(!material.blocksMotion())
             {
@@ -1674,7 +1679,7 @@ public class World implements WorldSource {
                 int id1 = getBlockId(entry.x, entry.y, entry.z);
                 if(id1 == entry.blockId && id1 > 0) {
                     immediatelyUpdatedPositions.add(entry);
-                    Block.blocksList[id1].updateTick(this, entry.x, entry.y, entry.z, rand);
+                    Blocks.blocksList[id1].updateTick(this, entry.x, entry.y, entry.z, rand);
                 }
             }
             return;
@@ -1883,7 +1888,7 @@ public class World implements WorldSource {
 		for(int x = minX; x <= maxX; x++) {
 			for(int y = minY; y <= maxY; y++) {
 				for(int z = minZ; z <= maxZ; z++) {
-					Block block = Block.blocksList[getBlockId(x, y, z)];
+					Block block = Blocks.blocksList[getBlockId(x, y, z)];
 					if(block != null) {
 						return true;
 					}
@@ -1915,7 +1920,7 @@ public class World implements WorldSource {
 		for(int x = minX; x <= maxX; x++) {
 			for(int y = minY; y <= maxY; y++) {
 				for(int z = minZ; z <= maxZ; z++) {
-					Block block = Block.blocksList[getBlockId(x, y, z)];
+					Block block = Blocks.blocksList[getBlockId(x, y, z)];
 					if(block != null && block.blockMaterial.isLiquid()) {
 						return true;
 					}
@@ -1951,7 +1956,7 @@ public class World implements WorldSource {
             {
                 for(int i2 = i1; i2 < j1; i2++)
                 {
-                    Block block = Block.blocksList[getBlockId(k1, l1, i2)];
+                    Block block = Blocks.blocksList[getBlockId(k1, l1, i2)];
                     if(block == null || !isMaterialInBB(aabb, material))
                     {
                         continue;
@@ -1975,21 +1980,21 @@ public class World implements WorldSource {
         return flag;
     }
 
-    public boolean isMaterialInBB(AABB axisalignedbb, Material ... materials)
+    public boolean isMaterialInBB(AABB aabb, Material ... materials)
     {
-        int minX_i = MathHelper.floor(axisalignedbb.minX);
-        int maxX_i = MathHelper.floor(axisalignedbb.maxX + 1.0D);
-        int minY_i = MathHelper.floor(axisalignedbb.minY);
-        int maxY_i = MathHelper.floor(axisalignedbb.maxY + 1.0D);
-        int minZ_i = MathHelper.floor(axisalignedbb.minZ);
-        int maxZ_i = MathHelper.floor(axisalignedbb.maxZ + 1.0D);
+        int minX_i = MathHelper.floor(aabb.minX);
+        int maxX_i = MathHelper.floor(aabb.maxX + 1.0D);
+        int minY_i = MathHelper.floor(aabb.minY);
+        int maxY_i = MathHelper.floor(aabb.maxY + 1.0D);
+        int minZ_i = MathHelper.floor(aabb.minZ);
+        int maxZ_i = MathHelper.floor(aabb.maxZ + 1.0D);
         for(int _x = minX_i; _x < maxX_i; _x++)
         {
             for(int _y = minY_i; _y < maxY_i; _y++)
             {
                 for(int _z = minZ_i; _z < maxZ_i; _z++)
                 {
-                    Block block = Block.blocksList[getBlockId(_x, _y, _z)];
+                    Block block = Blocks.blocksList[getBlockId(_x, _y, _z)];
                     if(block != null) {
                         boolean isMaterial = false;
                         for (Material m : materials){
@@ -2000,10 +2005,7 @@ public class World implements WorldSource {
                         }
                         if (!isMaterial) continue;
 
-                        block.setBlockBoundsBasedOnState(this, _x, _y, _z);
-                        if (axisalignedbb.intersects(
-                            AABB.getTemporaryBB(_x + block.minZ, _y + block.minY, _z + block.minZ,
-                                _x + block.maxZ, _y + block.maxY, _z + block.maxZ))){
+                        if (aabb.intersects(block.getBlockBoundsFromState(this, _x, _y, _z).move(_x, _y, _z))){
                             return true;
                         }
 
@@ -2015,21 +2017,21 @@ public class World implements WorldSource {
         return false;
     }
 
-    public boolean isAABBInMaterial(AABB axisalignedbb, Material material)
+    public boolean isAABBInMaterial(AABB aabb, Material material)
     {
-        int i = MathHelper.floor(axisalignedbb.minX);
-        int j = MathHelper.floor(axisalignedbb.maxX + 1.0D);
-        int k = MathHelper.floor(axisalignedbb.minY);
-        int l = MathHelper.floor(axisalignedbb.maxY + 1.0D);
-        int i1 = MathHelper.floor(axisalignedbb.minZ);
-        int j1 = MathHelper.floor(axisalignedbb.maxZ + 1.0D);
+        int i = MathHelper.floor(aabb.minX);
+        int j = MathHelper.floor(aabb.maxX + 1.0D);
+        int k = MathHelper.floor(aabb.minY);
+        int l = MathHelper.floor(aabb.maxY + 1.0D);
+        int i1 = MathHelper.floor(aabb.minZ);
+        int j1 = MathHelper.floor(aabb.maxZ + 1.0D);
         for(int k1 = i; k1 < j; k1++)
         {
             for(int l1 = k; l1 < l; l1++)
             {
                 for(int i2 = i1; i2 < j1; i2++)
                 {
-                    Block block = Block.blocksList[getBlockId(k1, l1, i2)];
+                    Block block = Blocks.blocksList[getBlockId(k1, l1, i2)];
                     if(block == null || block.blockMaterial != material)
                     {
                         continue;
@@ -2040,7 +2042,7 @@ public class World implements WorldSource {
                     {
                         d = (double)(l1 + 1) - (double)j2 / 8D;
                     }
-                    if(d >= axisalignedbb.minY)
+                    if(d >= aabb.minY)
                     {
                         return true;
                     }
@@ -2184,7 +2186,7 @@ public class World implements WorldSource {
     @Override
     public boolean isBlockOpaqueCube(int x, int y, int z)
     {
-        Block block = Block.blocksList[getBlockId(x, y, z)];
+        Block block = Blocks.blocksList[getBlockId(x, y, z)];
         if(block == null)
         {
             return false;
@@ -2196,7 +2198,7 @@ public class World implements WorldSource {
 
     public boolean canPlaceOnSurfaceOfBlock(int x, int y, int z)
     {
-        Block block = Block.blocksList[getBlockId(x, y, z)];
+        Block block = Blocks.blocksList[getBlockId(x, y, z)];
         if(block == null)
         {
             return false;
@@ -2209,7 +2211,7 @@ public class World implements WorldSource {
     @Override
     public boolean isBlockNormalCube(int x, int y, int z)
     {
-        Block block = Block.blocksList[getBlockId(x, y, z)];
+        Block block = Blocks.blocksList[getBlockId(x, y, z)];
         if(block == null)
         {
             return false;
@@ -2222,7 +2224,7 @@ public class World implements WorldSource {
     public boolean canPlaceInsideBlock(int x, int y, int z) {
         int id = getBlockId(x, y, z);
 
-        return id == 0 || Block.getBlock(id).hasTag(BlockTags.PLACE_OVERWRITES);
+        return id == 0 || Blocks.getBlock(id).hasTag(BlockTags.PLACE_OVERWRITES);
     }
 
     public void onUnload()
@@ -2487,8 +2489,8 @@ public class World implements WorldSource {
                 int iBlockZ = (iRandVal / (Chunk.CHUNK_SIZE_Z * Chunk.CHUNK_SIZE_X)) & (Chunk.CHUNK_SIZE_Z - 1);
                 int iBlockY = (iRandVal / (HEIGHT_BLOCKS * Chunk.CHUNK_SIZE_Z * Chunk.CHUNK_SIZE_X)) & (HEIGHT_BLOCKS - 1);
                 int id = chunk.getBlockID(iBlockX, iBlockY, iBlockZ);
-                if (Block.shouldTick[id]) {
-                    Block.blocksList[id].updateTick(this, iBlockX + chunkBlockX, iBlockY, iBlockZ + chunkBlockZ, rand);
+                if (Blocks.shouldTick[id]) {
+                    Blocks.blocksList[id].updateTick(this, iBlockX + chunkBlockX, iBlockY, iBlockZ + chunkBlockZ, rand);
                 }
                 i++;
             }
@@ -2524,7 +2526,7 @@ public class World implements WorldSource {
             int blockId = getBlockId(entry.x, entry.y, entry.z);
             if(blockId == entry.blockId && blockId > 0)
             {
-                Block.blocksList[blockId].updateTick(this, entry.x, entry.y, entry.z, rand);
+                Blocks.blocksList[blockId].updateTick(this, entry.x, entry.y, entry.z, rand);
             }
         }
 
@@ -2652,8 +2654,8 @@ public class World implements WorldSource {
     		return false;
     	}
         int j1 = getBlockId(x, y, z);
-        Block block = Block.blocksList[j1];
-        Block block1 = Block.blocksList[blockId];
+        Block block = Blocks.blocksList[j1];
+        Block block1 = Blocks.blocksList[blockId];
         AABB axisalignedbb = block1.getCollisionBoundingBoxFromPool(this, x, y, z);
         if(flag)
         {
@@ -3055,7 +3057,7 @@ public class World implements WorldSource {
         int j1 = getBlockId(x, y, z);
         if(j1 > 0)
         {
-            Block.blocksList[j1].triggerEvent(this, x, y, z, index, data);
+            Blocks.blocksList[j1].triggerEvent(this, x, y, z, index, data);
         }
     }
     
diff --git a/src/main/java/net/minecraft/core/world/WorldSource.java b/game/core/src/main/java/net/minecraft/core/world/WorldSource.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/WorldSource.java
rename to game/core/src/main/java/net/minecraft/core/world/WorldSource.java
index 7f5d4a380..4e4b90303 100644
--- a/src/main/java/net/minecraft/core/world/WorldSource.java
+++ b/game/core/src/main/java/net/minecraft/core/world/WorldSource.java
@@ -1,40 +1,40 @@
-package net.minecraft.core.world;
-
-import net.minecraft.core.block.Block;
-import net.minecraft.core.block.entity.TileEntity;
-import net.minecraft.core.block.material.Material;
-import net.minecraft.core.enums.LightLayer;
-import net.minecraft.core.world.biome.Biome;
-import net.minecraft.core.world.season.SeasonManager;
-
-public interface WorldSource
-{
-
-    int getBlockId(int x, int y, int z);
-
-    Block getBlock(int x, int y, int z);
-
-    TileEntity getBlockEntity(int x, int y, int z);
-
-    float getBrightness(int x, int y, int z, int blockLightValue);
-    
-    int getLightmapCoord(int x, int y, int z, int blockLightValue);
-
-    int getLightmapCoord(int skylight, int blocklight);
-
-    float getLightBrightness(int x, int y, int z);
-
-    int getBlockMetadata(int x, int y, int z);
-
-    Material getBlockMaterial(int x, int y, int z);
-
-    boolean isBlockOpaqueCube(int x, int y, int z);
-
-    boolean isBlockNormalCube(int x, int y, int z);
-    double getBlockTemperature(int x, int z);
-    double getBlockHumidity(int x, int z);
-    SeasonManager getSeasonManager();
-    Biome getBlockBiome(int x, int y, int z);
-    
-    public int getSavedLightValue(LightLayer layer, int x, int y, int z);
-}
+package net.minecraft.core.world;
+
+import net.minecraft.core.block.Block;
+import net.minecraft.core.block.entity.TileEntity;
+import net.minecraft.core.block.material.Material;
+import net.minecraft.core.enums.LightLayer;
+import net.minecraft.core.world.biome.Biome;
+import net.minecraft.core.world.season.SeasonManager;
+
+public interface WorldSource
+{
+
+    int getBlockId(int x, int y, int z);
+
+    Block getBlock(int x, int y, int z);
+
+    TileEntity getBlockEntity(int x, int y, int z);
+
+    float getBrightness(int x, int y, int z, int blockLightValue);
+    
+    int getLightmapCoord(int x, int y, int z, int blockLightValue);
+
+    int getLightmapCoord(int skylight, int blocklight);
+
+    float getLightBrightness(int x, int y, int z);
+
+    int getBlockMetadata(int x, int y, int z);
+
+    Material getBlockMaterial(int x, int y, int z);
+
+    boolean isBlockOpaqueCube(int x, int y, int z);
+
+    boolean isBlockNormalCube(int x, int y, int z);
+    double getBlockTemperature(int x, int z);
+    double getBlockHumidity(int x, int z);
+    SeasonManager getSeasonManager();
+    Biome getBlockBiome(int x, int y, int z);
+    
+    public int getSavedLightValue(LightLayer layer, int x, int y, int z);
+}
diff --git a/src/main/java/net/minecraft/core/world/biome/Biome.java b/game/core/src/main/java/net/minecraft/core/world/biome/Biome.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/Biome.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/Biome.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeBirchForest.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeBirchForest.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeBirchForest.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeBirchForest.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeBorealForest.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeBorealForest.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeBorealForest.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeBorealForest.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeCaatinga.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeCaatinga.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeCaatinga.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeCaatinga.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeDesert.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeDesert.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeDesert.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeDesert.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeForest.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeForest.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeForest.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeForest.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeNether.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeNether.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeNether.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeNether.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeOutback.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeOutback.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeOutback.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeOutback.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeParadise.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeParadise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeParadise.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeParadise.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomePlains.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomePlains.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomePlains.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomePlains.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeRainforest.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeRainforest.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeRainforest.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeRainforest.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeRetro.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeRetro.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/biome/BiomeRetro.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeRetro.java
index 7637a82a0..2c31c5f4b 100644
--- a/src/main/java/net/minecraft/core/world/biome/BiomeRetro.java
+++ b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeRetro.java
@@ -1,46 +1,46 @@
-package net.minecraft.core.world.biome;
-
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.entity.SpawnListEntry;
-import net.minecraft.core.entity.animal.*;
-import net.minecraft.core.entity.monster.*;
-import net.minecraft.core.world.generate.feature.WorldFeature;
-import net.minecraft.core.world.generate.feature.tree.WorldFeatureTree;
-import net.minecraft.core.world.generate.feature.tree.WorldFeatureTreeFancy;
-
-import java.util.Random;
-
-public class BiomeRetro
-    extends Biome
-{
-    protected BiomeRetro(String key)
-    {
-    	super(key);
-        spawnableMonsterList.clear();
-        spawnableCreatureList.clear();
-        spawnableWaterCreatureList.clear();
-        spawnableAmbientCreatureList.clear();
-        spawnableMonsterList.add(new SpawnListEntry(MobSpider.class, 10));
-        spawnableMonsterList.add(new SpawnListEntry(MobZombie.class, 10));
-        spawnableMonsterList.add(new SpawnListEntry(MobSkeleton.class, 10));
-        spawnableMonsterList.add(new SpawnListEntry(MobCreeper.class, 10));
-        spawnableMonsterList.add(new SpawnListEntry(MobSlime.class, 10));
-        spawnableCreatureList.add(new SpawnListEntry(MobSheep.class, 102));
-        spawnableCreatureList.add(new SpawnListEntry(MobPig.class, 102));
-        spawnableCreatureList.add(new SpawnListEntry(MobChicken.class, 102));
-        spawnableCreatureList.add(new SpawnListEntry(MobCow.class, 102));
-
-    }
-
-    @Override
-    public WorldFeature getRandomWorldGenForTrees(Random random)
-    {
-        WorldFeature feature = new WorldFeatureTree(Blocks.LEAVES_OAK_RETRO.id, Blocks.LOG_OAK.id, 4);
-        if (random.nextInt(10) == 0)
-        {
-            feature = new WorldFeatureTreeFancy(Blocks.LEAVES_OAK_RETRO.id, Blocks.LOG_OAK.id);
-        }
-
-        return feature;
-    }
-}
+package net.minecraft.core.world.biome;
+
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.entity.SpawnListEntry;
+import net.minecraft.core.entity.animal.*;
+import net.minecraft.core.entity.monster.*;
+import net.minecraft.core.world.generate.feature.WorldFeature;
+import net.minecraft.core.world.generate.feature.tree.WorldFeatureTree;
+import net.minecraft.core.world.generate.feature.tree.WorldFeatureTreeFancy;
+
+import java.util.Random;
+
+public class BiomeRetro
+    extends Biome
+{
+    protected BiomeRetro(String key)
+    {
+    	super(key);
+        spawnableMonsterList.clear();
+        spawnableCreatureList.clear();
+        spawnableWaterCreatureList.clear();
+        spawnableAmbientCreatureList.clear();
+        spawnableMonsterList.add(new SpawnListEntry(MobSpider.class, 10));
+        spawnableMonsterList.add(new SpawnListEntry(MobZombie.class, 10));
+        spawnableMonsterList.add(new SpawnListEntry(MobSkeleton.class, 10));
+        spawnableMonsterList.add(new SpawnListEntry(MobCreeper.class, 10));
+        spawnableMonsterList.add(new SpawnListEntry(MobSlime.class, 10));
+        spawnableCreatureList.add(new SpawnListEntry(MobSheep.class, 102));
+        spawnableCreatureList.add(new SpawnListEntry(MobPig.class, 102));
+        spawnableCreatureList.add(new SpawnListEntry(MobChicken.class, 102));
+        spawnableCreatureList.add(new SpawnListEntry(MobCow.class, 102));
+
+    }
+
+    @Override
+    public WorldFeature getRandomWorldGenForTrees(Random random)
+    {
+        WorldFeature feature = new WorldFeatureTree(Blocks.LEAVES_OAK_RETRO.id, Blocks.LOG_OAK.id, 4);
+        if (random.nextInt(10) == 0)
+        {
+            feature = new WorldFeatureTreeFancy(Blocks.LEAVES_OAK_RETRO.id, Blocks.LOG_OAK.id);
+        }
+
+        return feature;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeSeasonalForest.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeSeasonalForest.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeSeasonalForest.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeSeasonalForest.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeShrubland.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeShrubland.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeShrubland.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeShrubland.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeSwamp.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeSwamp.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeSwamp.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeSwamp.java
diff --git a/src/main/java/net/minecraft/core/world/biome/BiomeTaiga.java b/game/core/src/main/java/net/minecraft/core/world/biome/BiomeTaiga.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/biome/BiomeTaiga.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/BiomeTaiga.java
diff --git a/src/main/java/net/minecraft/core/world/biome/Biomes.java b/game/core/src/main/java/net/minecraft/core/world/biome/Biomes.java
similarity index 99%
rename from src/main/java/net/minecraft/core/world/biome/Biomes.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/Biomes.java
index c5e36fe66..de9b6da70 100644
--- a/src/main/java/net/minecraft/core/world/biome/Biomes.java
+++ b/game/core/src/main/java/net/minecraft/core/world/biome/Biomes.java
@@ -1,42 +1,42 @@
-package net.minecraft.core.world.biome;
-
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.data.registry.Registries;
-import net.minecraft.core.world.weather.Weathers;
-
-public class Biomes
-{
-
-    public static final Biome OVERWORLD_RAINFOREST = register("minecraft:overworld.rainforest", new BiomeRainforest("rainforest").setColor(0x1cf100).setBlockedWeathers(Weathers.OVERWORLD_SNOW));
-    public static final Biome OVERWORLD_SWAMPLAND = register("minecraft:overworld.swampland", new BiomeSwamp("swampland").setColor(0x00ff78));
-    public static final Biome OVERWORLD_SEASONAL_FOREST = register("minecraft:overworld.seasonal_forest", new BiomeSeasonalForest("seasonal_forest").setColor(0x64ce15));
-    public static final Biome OVERWORLD_FOREST = register("minecraft:overworld.forest", new BiomeForest("forest").setColor(0x26a615));
-    public static final Biome OVERWORLD_GRASSLANDS = register("minecraft:overworld.grasslands", new Biome("grasslands").setColor(0xf0f048).setBlockedWeathers(Weathers.OVERWORLD_SNOW));
-    public static final Biome OVERWORLD_OUTBACK = register("minecraft:overworld.outback", new BiomeOutback("outback").setColor(0xd95e20).setBlockedWeathers(Weathers.OVERWORLD_SNOW).setTopBlock(Blocks.DIRT_SCORCHED.id).setFillerBlock(Blocks.DIRT_SCORCHED.id));
-    public static final Biome OVERWORLD_SHRUBLAND = register("minecraft:overworld.shrubland", new BiomeShrubland("shrubland").setColor(0xbaba38));
-    public static final Biome OVERWORLD_TAIGA = register("minecraft:overworld.taiga", new BiomeTaiga("taiga").setColor(0x8abcff).setSurfaceSnow());
-    public static final Biome OVERWORLD_BOREAL_FOREST = register("minecraft:overworld.boreal_forest", new BiomeBorealForest("boreal_forest").setColor(0x148564));
-    public static final Biome OVERWORLD_DESERT = register("minecraft:overworld.desert", new BiomeDesert("desert").setColor(0xEDE26F).setBlockedWeathers(Weathers.OVERWORLD_RAIN, Weathers.OVERWORLD_SNOW, Weathers.OVERWORLD_STORM).setTopBlock(Blocks.SAND.id).setFillerBlock(Blocks.SAND.id));
-    public static final Biome OVERWORLD_PLAINS = register("minecraft:overworld.plains", new BiomePlains("plains").setColor(0xA3C649));
-    public static final Biome OVERWORLD_GLACIER = register("minecraft:overworld.glacier", new Biome("glacier").setColor(0xcbf6ff).setSurfaceSnow().setTopBlock(Blocks.BLOCK_SNOW.id).setFillerBlock(Blocks.BLOCK_SNOW.id));
-    public static final Biome OVERWORLD_TUNDRA = register("minecraft:overworld.tundra", new Biome("tundra").setColor(0x57e0ff).setSurfaceSnow());
-    public static final Biome OVERWORLD_MEADOW = register("minecraft:overworld.meadow", new BiomeBorealForest("meadow").setColor(0x8c8c22));
-    public static final Biome NETHER_NETHER = register("minecraft:nether.nether", new BiomeNether("nether").setColor(0xDD0000).setBlockedWeathers(Weathers.OVERWORLD_RAIN, Weathers.OVERWORLD_SNOW, Weathers.OVERWORLD_STORM, Weathers.OVERWORLD_FOG));
-    public static final Biome PARADISE_PARADISE = register("minecraft:paradise.paradise", new BiomeParadise("paradise").setColor(0x8080FF).setBlockedWeathers(Weathers.OVERWORLD_RAIN, Weathers.OVERWORLD_SNOW, Weathers.OVERWORLD_STORM, Weathers.OVERWORLD_FOG));
-    public static final Biome OVERWORLD_BIRCH_FOREST = register("minecraft:overworld.birch_forest", new BiomeBirchForest("birch_forest").setColor(0x4bcb5e));
-    public static final Biome OVERWORLD_RETRO = register("minecraft:overworld.retro", new BiomeRetro("retro").setColor(0x76B14A).setTopBlock(Blocks.GRASS_RETRO.id));
-    public static final Biome OVERWORLD_HELL = register("minecraft:overworld.hell", new Biome("hell").setColor(0xD96223).setTopBlock(Blocks.DIRT_SCORCHED.id).setTopBlock(Blocks.DIRT_SCORCHED.id));
-    public static final Biome OVERWORLD_SWAMPLAND_MUDDY = register("minecraft:overworld.swampland.muddy", new BiomeSwamp("swampland.muddy").setColor(0x522700));
-    public static final Biome OVERWORLD_OUTBACK_GRASSY = register("minecraft:overworld.outback.grassy", new BiomeOutback("outback.grassy").setColor(0xf09037).setBlockedWeathers(Weathers.OVERWORLD_SNOW).setTopBlock(Blocks.GRASS_SCORCHED.id).setFillerBlock(Blocks.DIRT_SCORCHED.id));
-    public static final Biome OVERWORLD_CAATINGA = register("minecraft:overworld.caatinga", new BiomeCaatinga("caatinga").setColor(0xdecda6).setTopBlock(Blocks.MUD_BAKED.id).setFillerBlock(Blocks.MUD_BAKED.id).setBlockedWeathers(Weathers.OVERWORLD_SNOW));
-    public static final Biome OVERWORLD_CAATINGA_PLAINS = register("minecraft:overworld.caatinga.plains", new Biome("caatinga.plains").setColor(0xa19477).setTopBlock(Blocks.MUD_BAKED.id).setFillerBlock(Blocks.MUD_BAKED.id).setBlockedWeathers(Weathers.OVERWORLD_SNOW));
-    public static Biome register(String key, Biome biome)
-    {
-        Registries.BIOMES.register(key, biome);
-
-        return biome;
-    }
-
-    public static void init() { }
-
-}
+package net.minecraft.core.world.biome;
+
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.data.registry.Registries;
+import net.minecraft.core.world.weather.Weathers;
+
+public class Biomes
+{
+
+    public static final Biome OVERWORLD_RAINFOREST = register("minecraft:overworld.rainforest", new BiomeRainforest("rainforest").setColor(0x1cf100).setBlockedWeathers(Weathers.OVERWORLD_SNOW));
+    public static final Biome OVERWORLD_SWAMPLAND = register("minecraft:overworld.swampland", new BiomeSwamp("swampland").setColor(0x00ff78));
+    public static final Biome OVERWORLD_SEASONAL_FOREST = register("minecraft:overworld.seasonal_forest", new BiomeSeasonalForest("seasonal_forest").setColor(0x64ce15));
+    public static final Biome OVERWORLD_FOREST = register("minecraft:overworld.forest", new BiomeForest("forest").setColor(0x26a615));
+    public static final Biome OVERWORLD_GRASSLANDS = register("minecraft:overworld.grasslands", new Biome("grasslands").setColor(0xf0f048).setBlockedWeathers(Weathers.OVERWORLD_SNOW));
+    public static final Biome OVERWORLD_OUTBACK = register("minecraft:overworld.outback", new BiomeOutback("outback").setColor(0xd95e20).setBlockedWeathers(Weathers.OVERWORLD_SNOW).setTopBlock(Blocks.DIRT_SCORCHED.id).setFillerBlock(Blocks.DIRT_SCORCHED.id));
+    public static final Biome OVERWORLD_SHRUBLAND = register("minecraft:overworld.shrubland", new BiomeShrubland("shrubland").setColor(0xbaba38));
+    public static final Biome OVERWORLD_TAIGA = register("minecraft:overworld.taiga", new BiomeTaiga("taiga").setColor(0x8abcff).setSurfaceSnow());
+    public static final Biome OVERWORLD_BOREAL_FOREST = register("minecraft:overworld.boreal_forest", new BiomeBorealForest("boreal_forest").setColor(0x148564));
+    public static final Biome OVERWORLD_DESERT = register("minecraft:overworld.desert", new BiomeDesert("desert").setColor(0xEDE26F).setBlockedWeathers(Weathers.OVERWORLD_RAIN, Weathers.OVERWORLD_SNOW, Weathers.OVERWORLD_STORM).setTopBlock(Blocks.SAND.id).setFillerBlock(Blocks.SAND.id));
+    public static final Biome OVERWORLD_PLAINS = register("minecraft:overworld.plains", new BiomePlains("plains").setColor(0xA3C649));
+    public static final Biome OVERWORLD_GLACIER = register("minecraft:overworld.glacier", new Biome("glacier").setColor(0xcbf6ff).setSurfaceSnow().setTopBlock(Blocks.BLOCK_SNOW.id).setFillerBlock(Blocks.BLOCK_SNOW.id));
+    public static final Biome OVERWORLD_TUNDRA = register("minecraft:overworld.tundra", new Biome("tundra").setColor(0x57e0ff).setSurfaceSnow());
+    public static final Biome OVERWORLD_MEADOW = register("minecraft:overworld.meadow", new BiomeBorealForest("meadow").setColor(0x8c8c22));
+    public static final Biome NETHER_NETHER = register("minecraft:nether.nether", new BiomeNether("nether").setColor(0xDD0000).setBlockedWeathers(Weathers.OVERWORLD_RAIN, Weathers.OVERWORLD_SNOW, Weathers.OVERWORLD_STORM, Weathers.OVERWORLD_FOG));
+    public static final Biome PARADISE_PARADISE = register("minecraft:paradise.paradise", new BiomeParadise("paradise").setColor(0x8080FF).setBlockedWeathers(Weathers.OVERWORLD_RAIN, Weathers.OVERWORLD_SNOW, Weathers.OVERWORLD_STORM, Weathers.OVERWORLD_FOG));
+    public static final Biome OVERWORLD_BIRCH_FOREST = register("minecraft:overworld.birch_forest", new BiomeBirchForest("birch_forest").setColor(0x4bcb5e));
+    public static final Biome OVERWORLD_RETRO = register("minecraft:overworld.retro", new BiomeRetro("retro").setColor(0x76B14A).setTopBlock(Blocks.GRASS_RETRO.id));
+    public static final Biome OVERWORLD_HELL = register("minecraft:overworld.hell", new Biome("hell").setColor(0xD96223).setTopBlock(Blocks.DIRT_SCORCHED.id).setTopBlock(Blocks.DIRT_SCORCHED.id));
+    public static final Biome OVERWORLD_SWAMPLAND_MUDDY = register("minecraft:overworld.swampland.muddy", new BiomeSwamp("swampland.muddy").setColor(0x522700));
+    public static final Biome OVERWORLD_OUTBACK_GRASSY = register("minecraft:overworld.outback.grassy", new BiomeOutback("outback.grassy").setColor(0xf09037).setBlockedWeathers(Weathers.OVERWORLD_SNOW).setTopBlock(Blocks.GRASS_SCORCHED.id).setFillerBlock(Blocks.DIRT_SCORCHED.id));
+    public static final Biome OVERWORLD_CAATINGA = register("minecraft:overworld.caatinga", new BiomeCaatinga("caatinga").setColor(0xdecda6).setTopBlock(Blocks.MUD_BAKED.id).setFillerBlock(Blocks.MUD_BAKED.id).setBlockedWeathers(Weathers.OVERWORLD_SNOW));
+    public static final Biome OVERWORLD_CAATINGA_PLAINS = register("minecraft:overworld.caatinga.plains", new Biome("caatinga.plains").setColor(0xa19477).setTopBlock(Blocks.MUD_BAKED.id).setFillerBlock(Blocks.MUD_BAKED.id).setBlockedWeathers(Weathers.OVERWORLD_SNOW));
+    public static Biome register(String key, Biome biome)
+    {
+        Registries.BIOMES.register(key, biome);
+
+        return biome;
+    }
+
+    public static void init() { }
+
+}
diff --git a/src/main/java/net/minecraft/core/world/biome/data/BiomeRange.java b/game/core/src/main/java/net/minecraft/core/world/biome/data/BiomeRange.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/biome/data/BiomeRange.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/data/BiomeRange.java
index df6aa884d..208e45548 100644
--- a/src/main/java/net/minecraft/core/world/biome/data/BiomeRange.java
+++ b/game/core/src/main/java/net/minecraft/core/world/biome/data/BiomeRange.java
@@ -1,102 +1,102 @@
-package net.minecraft.core.world.biome.data;
-
-import java.util.Objects;
-
-public final class BiomeRange
-{
-    private final double minTemperature;
-    private final double maxTemperature;
-
-    private final double minHumidity;
-    private final double maxHumidity;
-
-    private final double minAltitude;
-    private final double maxAltitude;
-
-    private final double minVariety;
-    private final double maxVariety;
-
-    public BiomeRange(double minTemperature, double maxTemperature, double minHumidity, double maxHumidity, double minAltitude, double maxAltitude, double minVariety, double maxVariety)
-    {
-        this.minTemperature = minTemperature;
-        this.maxTemperature = maxTemperature;
-        this.minHumidity = minHumidity;
-        this.maxHumidity = maxHumidity;
-        this.minAltitude = minAltitude;
-        this.maxAltitude = maxAltitude;
-        this.minVariety = minVariety;
-        this.maxVariety = maxVariety;
-    }
-
-    public double getMinTemperature()
-    {
-        return minTemperature;
-    }
-
-    public double getMaxTemperature()
-    {
-        return maxTemperature;
-    }
-
-    public double getMinHumidity()
-    {
-        return minHumidity;
-    }
-
-    public double getMaxHumidity()
-    {
-        return maxHumidity;
-    }
-
-    public double getMinAltitude()
-    {
-        return minAltitude;
-    }
-
-    public double getMaxAltitude()
-    {
-        return maxAltitude;
-    }
-    public double getMinVariety()
-    {
-        return minVariety;
-    }
-
-    public double getMaxVariety()
-    {
-        return maxVariety;
-    }
-
-    public boolean contains(double temperature, double humidity, double altitude, double variety)
-    {
-        return temperature >= getMinTemperature() &&
-                temperature < getMaxTemperature() &&
-                humidity >= getMinHumidity() &&
-                humidity < getMaxHumidity() &&
-                altitude >= getMinAltitude() &&
-                altitude < getMaxAltitude() &&
-                variety >= getMinVariety() &&
-                variety < getMaxVariety();
-    }
-
-    @Override
-    public boolean equals(Object o)
-    {
-        if (this == o)
-        {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass())
-        {
-            return false;
-        }
-        BiomeRange that = (BiomeRange) o;
-        return Double.compare(that.minTemperature, minTemperature) == 0 && Double.compare(that.maxTemperature, maxTemperature) == 0 && Double.compare(that.minHumidity, minHumidity) == 0 && Double.compare(that.maxHumidity, maxHumidity) == 0 && Double.compare(that.minAltitude, minAltitude) == 0 && Double.compare(that.maxAltitude, maxAltitude) == 0 && Double.compare(that.maxVariety, maxVariety) == 0;
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return Objects.hash(minTemperature, maxTemperature, minHumidity, maxHumidity, minAltitude, maxAltitude, minVariety, maxVariety);
-    }
-}
+package net.minecraft.core.world.biome.data;
+
+import java.util.Objects;
+
+public final class BiomeRange
+{
+    private final double minTemperature;
+    private final double maxTemperature;
+
+    private final double minHumidity;
+    private final double maxHumidity;
+
+    private final double minAltitude;
+    private final double maxAltitude;
+
+    private final double minVariety;
+    private final double maxVariety;
+
+    public BiomeRange(double minTemperature, double maxTemperature, double minHumidity, double maxHumidity, double minAltitude, double maxAltitude, double minVariety, double maxVariety)
+    {
+        this.minTemperature = minTemperature;
+        this.maxTemperature = maxTemperature;
+        this.minHumidity = minHumidity;
+        this.maxHumidity = maxHumidity;
+        this.minAltitude = minAltitude;
+        this.maxAltitude = maxAltitude;
+        this.minVariety = minVariety;
+        this.maxVariety = maxVariety;
+    }
+
+    public double getMinTemperature()
+    {
+        return minTemperature;
+    }
+
+    public double getMaxTemperature()
+    {
+        return maxTemperature;
+    }
+
+    public double getMinHumidity()
+    {
+        return minHumidity;
+    }
+
+    public double getMaxHumidity()
+    {
+        return maxHumidity;
+    }
+
+    public double getMinAltitude()
+    {
+        return minAltitude;
+    }
+
+    public double getMaxAltitude()
+    {
+        return maxAltitude;
+    }
+    public double getMinVariety()
+    {
+        return minVariety;
+    }
+
+    public double getMaxVariety()
+    {
+        return maxVariety;
+    }
+
+    public boolean contains(double temperature, double humidity, double altitude, double variety)
+    {
+        return temperature >= getMinTemperature() &&
+                temperature < getMaxTemperature() &&
+                humidity >= getMinHumidity() &&
+                humidity < getMaxHumidity() &&
+                altitude >= getMinAltitude() &&
+                altitude < getMaxAltitude() &&
+                variety >= getMinVariety() &&
+                variety < getMaxVariety();
+    }
+
+    @Override
+    public boolean equals(Object o)
+    {
+        if (this == o)
+        {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass())
+        {
+            return false;
+        }
+        BiomeRange that = (BiomeRange) o;
+        return Double.compare(that.minTemperature, minTemperature) == 0 && Double.compare(that.maxTemperature, maxTemperature) == 0 && Double.compare(that.minHumidity, minHumidity) == 0 && Double.compare(that.maxHumidity, maxHumidity) == 0 && Double.compare(that.minAltitude, minAltitude) == 0 && Double.compare(that.maxAltitude, maxAltitude) == 0 && Double.compare(that.maxVariety, maxVariety) == 0;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return Objects.hash(minTemperature, maxTemperature, minHumidity, maxHumidity, minAltitude, maxAltitude, minVariety, maxVariety);
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/biome/data/BiomeRangeLookup.java b/game/core/src/main/java/net/minecraft/core/world/biome/data/BiomeRangeLookup.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/biome/data/BiomeRangeLookup.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/data/BiomeRangeLookup.java
index 1a174ecce..fcf09c3c7 100644
--- a/src/main/java/net/minecraft/core/world/biome/data/BiomeRangeLookup.java
+++ b/game/core/src/main/java/net/minecraft/core/world/biome/data/BiomeRangeLookup.java
@@ -1,65 +1,65 @@
-package net.minecraft.core.world.biome.data;
-
-import net.minecraft.core.data.registry.Registries;
-import net.minecraft.core.world.biome.Biome;
-
-public class BiomeRangeLookup
-{
-    private final byte[] lookup;
-    private final int span;
-
-    public BiomeRangeLookup(BiomeRangeMap map, int span)
-    {
-        this.lookup = new byte[span * span * span * span];
-        this.span = span;
-
-        for (int iTemperature = 0; iTemperature < span; iTemperature++)
-        {
-            for (int iHumidity = 0; iHumidity < span; iHumidity++)
-            {
-                for (int iAltitude = 0; iAltitude < span; iAltitude++)
-                {
-                    for (int iVariety = 0; iVariety < span; iVariety++)
-                    {
-                        Biome biome = map.findBiome(
-                                iTemperature / (double)span,
-                                iHumidity / (double)span,
-                                iAltitude / (double)span,
-                                iVariety / (double)span
-                        );
-                        if (biome == null) throw new RuntimeException("Biome at T: " + iTemperature / 50f + " H: " + iHumidity / 50f + " A: " + iAltitude / 50f + " V: " + iVariety / 50f + " is null!");
-                        setBiome(iTemperature, iHumidity, iAltitude, iVariety, biome);
-                    }
-                }
-            }
-        }
-    }
-
-    private void setBiome(int temperature, int humidity, int altitude, int variety, Biome biome)
-    {
-        this.lookup[(variety * span * span * span) + (altitude * span * span) + (humidity * span) + (temperature)] = (byte) Registries.BIOMES.getNumericIdOfItem(biome);
-    }
-
-    public Biome getBiome(double temperature, double humidity, double altitude, double variety)
-    {
-        int iTemperature = integerize(temperature);
-        int iHumidity = integerize(humidity);
-        int iAltitude = integerize(altitude);
-        int iVariety = integerize(variety);
-
-        return Registries.BIOMES.getItemByNumericId(this.lookup[
-                (iVariety * span * span * span) +
-                (iAltitude * span * span) +
-                (iHumidity * span) +
-                (iTemperature)
-        ]);
-    }
-
-    private int integerize(double d)
-    {
-        int i = (int)(d * span);
-        if (i < 0) i = 0;
-        if (i >= span) i = span - 1;
-        return i;
-    }
-}
+package net.minecraft.core.world.biome.data;
+
+import net.minecraft.core.data.registry.Registries;
+import net.minecraft.core.world.biome.Biome;
+
+public class BiomeRangeLookup
+{
+    private final byte[] lookup;
+    private final int span;
+
+    public BiomeRangeLookup(BiomeRangeMap map, int span)
+    {
+        this.lookup = new byte[span * span * span * span];
+        this.span = span;
+
+        for (int iTemperature = 0; iTemperature < span; iTemperature++)
+        {
+            for (int iHumidity = 0; iHumidity < span; iHumidity++)
+            {
+                for (int iAltitude = 0; iAltitude < span; iAltitude++)
+                {
+                    for (int iVariety = 0; iVariety < span; iVariety++)
+                    {
+                        Biome biome = map.findBiome(
+                                iTemperature / (double)span,
+                                iHumidity / (double)span,
+                                iAltitude / (double)span,
+                                iVariety / (double)span
+                        );
+                        if (biome == null) throw new RuntimeException("Biome at T: " + iTemperature / 50f + " H: " + iHumidity / 50f + " A: " + iAltitude / 50f + " V: " + iVariety / 50f + " is null!");
+                        setBiome(iTemperature, iHumidity, iAltitude, iVariety, biome);
+                    }
+                }
+            }
+        }
+    }
+
+    private void setBiome(int temperature, int humidity, int altitude, int variety, Biome biome)
+    {
+        this.lookup[(variety * span * span * span) + (altitude * span * span) + (humidity * span) + (temperature)] = (byte) Registries.BIOMES.getNumericIdOfItem(biome);
+    }
+
+    public Biome getBiome(double temperature, double humidity, double altitude, double variety)
+    {
+        int iTemperature = integerize(temperature);
+        int iHumidity = integerize(humidity);
+        int iAltitude = integerize(altitude);
+        int iVariety = integerize(variety);
+
+        return Registries.BIOMES.getItemByNumericId(this.lookup[
+                (iVariety * span * span * span) +
+                (iAltitude * span * span) +
+                (iHumidity * span) +
+                (iTemperature)
+        ]);
+    }
+
+    private int integerize(double d)
+    {
+        int i = (int)(d * span);
+        if (i < 0) i = 0;
+        if (i >= span) i = span - 1;
+        return i;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/biome/data/BiomeRangeMap.java b/game/core/src/main/java/net/minecraft/core/world/biome/data/BiomeRangeMap.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/biome/data/BiomeRangeMap.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/data/BiomeRangeMap.java
index 2205a37e8..0ccdd749e 100644
--- a/src/main/java/net/minecraft/core/world/biome/data/BiomeRangeMap.java
+++ b/game/core/src/main/java/net/minecraft/core/world/biome/data/BiomeRangeMap.java
@@ -1,166 +1,166 @@
-package net.minecraft.core.world.biome.data;
-
-import com.b100.utils.ImageUtils;
-import com.mojang.logging.LogUtils;
-import net.minecraft.core.data.registry.Registries;
-import net.minecraft.core.util.helper.MathHelper;
-import net.minecraft.core.world.biome.Biome;
-import org.slf4j.Logger;
-
-import java.awt.*;
-import java.awt.image.BufferedImage;
-import java.util.*;
-
-public final class BiomeRangeMap
-{
-    private static final Logger LOGGER = LogUtils.getLogger();
-    private final Map<Biome, Set<BiomeRange>> ranges = new LinkedHashMap<>();
-    private BiomeRangeLookup lookup = null;
-
-    public void addRange(Biome biome, BiomeRange... ranges)
-    {
-        if (ranges == null || ranges.length == 0 || lookup != null) return;
-        Set<BiomeRange> set = this.ranges.getOrDefault(biome, new HashSet<>());
-        set.addAll(Arrays.asList(ranges));
-        this.ranges.put(biome, set);
-    }
-
-    public void lock()
-    {
-        lookup = new BiomeRangeLookup(this, 50);
-    }
-
-    public Set<BiomeRange> getRanges(Biome biome)
-    {
-        Set<BiomeRange> ranges = this.ranges.get(biome);
-        if (ranges == null) return null;
-
-        return Collections.unmodifiableSet(ranges);
-    }
-
-    public void clear() {
-        lookup = null;
-        ranges.clear();
-    }
-
-    public boolean hasGaps()
-    {
-        for (double temperature = 0; temperature < 1.0; temperature += 0.01)
-        {
-            for (double humidity = 0; humidity < 1.0; humidity += 0.01)
-            {
-                for (double altitude = 0; altitude < 1.0; altitude += 0.01)
-                {
-                    for (double variety = 0; variety < 1.0; variety += 0.01) {
-                        Biome biome = lookupBiome(temperature, humidity, altitude, variety);
-
-                        if (biome == null) {
-                            LOGGER.warn("Gap found in biome map at:\nTemperature: {}\nHumidity: {}\nAltitude: {}", temperature, humidity, altitude);
-                            return true;
-                        }
-                    }
-                }
-            }
-        }
-
-        return false;
-    }
-
-    public Biome lookupBiome(double temperature, double humidity, double altitude, double variety)
-    {
-        temperature = MathHelper.clamp(temperature, 0.0, 1.0);
-        humidity = MathHelper.clamp(humidity, 0.0, 1.0);
-        altitude = MathHelper.clamp(altitude, 0.0, 1.0);
-        variety = MathHelper.clamp(variety, 0.0, 1.0);
-
-        return lookup.getBiome(temperature, humidity, altitude, variety);
-    }
-
-    Biome findBiome(double temperature, double humidity, double altitude, double variety)
-    {
-        temperature = MathHelper.clamp(temperature, 0.0, 1.0);
-        humidity = MathHelper.clamp(humidity, 0.0, 1.0);
-        altitude = MathHelper.clamp(altitude, 0.0, 1.0);
-        variety = MathHelper.clamp(variety, 0.0, 1.0);
-        Biome last = null;
-
-        for (Map.Entry<Biome, Set<BiomeRange>> entry : ranges.entrySet())
-        {
-            for (BiomeRange range : entry.getValue())
-            {
-                if (range.contains(temperature, humidity, altitude, variety))
-                {
-                    last = entry.getKey();
-                }
-            }
-        }
-
-        if (last == null)
-        {
-            LOGGER.warn("Warning: found NULL biome for T: {} H: {} A: {} V: {}", temperature, humidity, altitude, variety);
-        }
-        return last;
-    }
-
-    public void generateDebugImage(boolean debugText) {
-        BufferedImage image = new BufferedImage(4800, 4800, BufferedImage.TYPE_INT_RGB);
-        Graphics2D g = image.createGraphics();
-        g.setColor(Color.black);
-        g.fillRect(0, 0, 48 * 100, 48 * 100);
-
-        for (int ti = 0; ti < 100; ti++) {
-            for (int hi = 0; hi < 100; hi++) {
-                double temperature = (100 - ti) / 99.0;
-                double humidity = (100 - hi) / 99.0;
-                temperature = Math.round(temperature * 100.0) / 100.0;
-                humidity = Math.round(humidity * 100.0) / 100.0;
-                Biome biome = lookupBiome(temperature, humidity, 0.5, 0.5);
-                Color color;
-                if (biome == null) {
-                    color = Color.magenta;
-                } else {
-                    color = hex2Rgb(biome.color);
-                }
-                g.setColor(color);
-                g.fillRect(ti * 48, hi * 48, 48, 48);
-
-                if(debugText) {
-                    g.setColor(Color.black);
-                    g.drawRect(ti * 48, hi * 48, 48, 48);
-                    g.drawString("T: " + temperature, ti * 48, (hi * 48) + 12);
-                    g.drawString("H: " + humidity, ti * 48, (hi * 48) + 24);
-                }
-                if (biome != null)
-                {
-                    g.drawString(String.format("%6.6s", Registries.BIOMES.getKey(biome).substring("minecraft:overworld.".length())), ti * 48, (hi * 48) + 36);
-                }
-            }
-        }
-
-        Polygon cutOffPoint = new Polygon();
-        cutOffPoint.addPoint(0, 0);
-        cutOffPoint.addPoint(100 * 48, 0);
-        cutOffPoint.addPoint(100 * 48, 100 * 48);
-
-        g.setColor(Color.gray);
-        g.fillPolygon(cutOffPoint);
-
-        g.dispose();
-        try
-        {
-            ImageUtils.saveExternalImage(image, "BiomeLookup.png");
-        }
-        catch (Exception e)
-        {
-            LOGGER.error("Failed to save BiomeLookup image!", e);
-        }
-    }
-
-    public static Color hex2Rgb(int colourHex) {
-        int r = (colourHex & 0xFF0000) >> 16;
-        int g = (colourHex & 0xFF00) >> 8;
-        int b = (colourHex & 0xFF);
-        return new Color(r, g, b);
-    }
-
-}
+package net.minecraft.core.world.biome.data;
+
+import com.b100.utils.ImageUtils;
+import com.mojang.logging.LogUtils;
+import net.minecraft.core.data.registry.Registries;
+import net.minecraft.core.util.helper.MathHelper;
+import net.minecraft.core.world.biome.Biome;
+import org.slf4j.Logger;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.util.*;
+
+public final class BiomeRangeMap
+{
+    private static final Logger LOGGER = LogUtils.getLogger();
+    private final Map<Biome, Set<BiomeRange>> ranges = new LinkedHashMap<>();
+    private BiomeRangeLookup lookup = null;
+
+    public void addRange(Biome biome, BiomeRange... ranges)
+    {
+        if (ranges == null || ranges.length == 0 || lookup != null) return;
+        Set<BiomeRange> set = this.ranges.getOrDefault(biome, new HashSet<>());
+        set.addAll(Arrays.asList(ranges));
+        this.ranges.put(biome, set);
+    }
+
+    public void lock()
+    {
+        lookup = new BiomeRangeLookup(this, 50);
+    }
+
+    public Set<BiomeRange> getRanges(Biome biome)
+    {
+        Set<BiomeRange> ranges = this.ranges.get(biome);
+        if (ranges == null) return null;
+
+        return Collections.unmodifiableSet(ranges);
+    }
+
+    public void clear() {
+        lookup = null;
+        ranges.clear();
+    }
+
+    public boolean hasGaps()
+    {
+        for (double temperature = 0; temperature < 1.0; temperature += 0.01)
+        {
+            for (double humidity = 0; humidity < 1.0; humidity += 0.01)
+            {
+                for (double altitude = 0; altitude < 1.0; altitude += 0.01)
+                {
+                    for (double variety = 0; variety < 1.0; variety += 0.01) {
+                        Biome biome = lookupBiome(temperature, humidity, altitude, variety);
+
+                        if (biome == null) {
+                            LOGGER.warn("Gap found in biome map at:\nTemperature: {}\nHumidity: {}\nAltitude: {}", temperature, humidity, altitude);
+                            return true;
+                        }
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+
+    public Biome lookupBiome(double temperature, double humidity, double altitude, double variety)
+    {
+        temperature = MathHelper.clamp(temperature, 0.0, 1.0);
+        humidity = MathHelper.clamp(humidity, 0.0, 1.0);
+        altitude = MathHelper.clamp(altitude, 0.0, 1.0);
+        variety = MathHelper.clamp(variety, 0.0, 1.0);
+
+        return lookup.getBiome(temperature, humidity, altitude, variety);
+    }
+
+    Biome findBiome(double temperature, double humidity, double altitude, double variety)
+    {
+        temperature = MathHelper.clamp(temperature, 0.0, 1.0);
+        humidity = MathHelper.clamp(humidity, 0.0, 1.0);
+        altitude = MathHelper.clamp(altitude, 0.0, 1.0);
+        variety = MathHelper.clamp(variety, 0.0, 1.0);
+        Biome last = null;
+
+        for (Map.Entry<Biome, Set<BiomeRange>> entry : ranges.entrySet())
+        {
+            for (BiomeRange range : entry.getValue())
+            {
+                if (range.contains(temperature, humidity, altitude, variety))
+                {
+                    last = entry.getKey();
+                }
+            }
+        }
+
+        if (last == null)
+        {
+            LOGGER.warn("Warning: found NULL biome for T: {} H: {} A: {} V: {}", temperature, humidity, altitude, variety);
+        }
+        return last;
+    }
+
+    public void generateDebugImage(boolean debugText) {
+        BufferedImage image = new BufferedImage(4800, 4800, BufferedImage.TYPE_INT_RGB);
+        Graphics2D g = image.createGraphics();
+        g.setColor(Color.black);
+        g.fillRect(0, 0, 48 * 100, 48 * 100);
+
+        for (int ti = 0; ti < 100; ti++) {
+            for (int hi = 0; hi < 100; hi++) {
+                double temperature = (100 - ti) / 99.0;
+                double humidity = (100 - hi) / 99.0;
+                temperature = Math.round(temperature * 100.0) / 100.0;
+                humidity = Math.round(humidity * 100.0) / 100.0;
+                Biome biome = lookupBiome(temperature, humidity, 0.5, 0.5);
+                Color color;
+                if (biome == null) {
+                    color = Color.magenta;
+                } else {
+                    color = hex2Rgb(biome.color);
+                }
+                g.setColor(color);
+                g.fillRect(ti * 48, hi * 48, 48, 48);
+
+                if(debugText) {
+                    g.setColor(Color.black);
+                    g.drawRect(ti * 48, hi * 48, 48, 48);
+                    g.drawString("T: " + temperature, ti * 48, (hi * 48) + 12);
+                    g.drawString("H: " + humidity, ti * 48, (hi * 48) + 24);
+                }
+                if (biome != null)
+                {
+                    g.drawString(String.format("%6.6s", Registries.BIOMES.getKey(biome).substring("minecraft:overworld.".length())), ti * 48, (hi * 48) + 36);
+                }
+            }
+        }
+
+        Polygon cutOffPoint = new Polygon();
+        cutOffPoint.addPoint(0, 0);
+        cutOffPoint.addPoint(100 * 48, 0);
+        cutOffPoint.addPoint(100 * 48, 100 * 48);
+
+        g.setColor(Color.gray);
+        g.fillPolygon(cutOffPoint);
+
+        g.dispose();
+        try
+        {
+            ImageUtils.saveExternalImage(image, "BiomeLookup.png");
+        }
+        catch (Exception e)
+        {
+            LOGGER.error("Failed to save BiomeLookup image!", e);
+        }
+    }
+
+    public static Color hex2Rgb(int colourHex) {
+        int r = (colourHex & 0xFF0000) >> 16;
+        int g = (colourHex & 0xFF00) >> 8;
+        int b = (colourHex & 0xFF);
+        return new Color(r, g, b);
+    }
+
+}
diff --git a/src/main/java/net/minecraft/core/world/biome/provider/BiomeProvider.java b/game/core/src/main/java/net/minecraft/core/world/biome/provider/BiomeProvider.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/biome/provider/BiomeProvider.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/provider/BiomeProvider.java
index f3b1abb7b..35ba89ae4 100644
--- a/src/main/java/net/minecraft/core/world/biome/provider/BiomeProvider.java
+++ b/game/core/src/main/java/net/minecraft/core/world/biome/provider/BiomeProvider.java
@@ -1,106 +1,106 @@
-package net.minecraft.core.world.biome.provider;
-
-import net.minecraft.core.data.registry.Registries;
-import net.minecraft.core.world.biome.Biome;
-
-import java.util.HashMap;
-import java.util.Map;
-
-public abstract class BiomeProvider
-{
-    public Biome getBiome(int x, int y, int z)
-    {
-        Biome[] out = getBiomes(null, x, y, z, 1, 1, 1);
-        return out[0];
-    }
-
-    public double getTemperature(int x, int z)
-    {
-        double[] out = getTemperatures(null, x, z, 1, 1);
-        return out[0];
-    }
-
-    public double getHumidity(int x, int z)
-    {
-        double[] out = getHumidities(null, x, z, 1, 1);
-        return out[0];
-    }
-
-    public double getVariety(int x, int z)
-    {
-        double[] out = getVarieties(null, x, z, 1, 1);
-        return out[0];
-    }
-
-
-    public double getBiomeness(int x, int y, int z)
-    {
-        double[] out = getBiomenesses(null, x, y, z, 1, 1, 1);
-        return out[0];
-    }
-
-    public Biome[] getBiomes(Biome[] biomes, int x, int y, int z, int xSize, int ySize, int zSize)
-    {
-        return getBiomes(biomes, null, null, null, x, y, z, xSize, ySize, zSize);
-    }
-
-    public abstract Biome[] getBiomes(Biome[] biomes, double[] temperatures, double[] humidities, double[] varieties, int x, int y, int z, int xSize, int ySize, int zSize);
-
-    public abstract double[] getTemperatures(double[] temperatures, int x, int z, int xSize, int zSize);
-
-    public abstract double[] getHumidities(double[] humidities, int x, int z, int xSize, int zSize);
-    public abstract double[] getVarieties(double[] varieties, int x, int z, int xSize, int zSize);
-
-    public abstract double[] getBiomenesses(double[] biomenesses, int x, int y, int z, int xSize, int ySize, int zSize);
-
-    public abstract Biome lookupBiome(double temperature, double humidity, double altitude, double variety);
-
-    protected void generateBiomeDistributionStats()
-    {
-        int lastReport = 0;
-        int sizeChunks = 2048;
-        int chunksSampled = 0;
-        Map<Biome, Integer> biomeOccurrenceMap = new HashMap<>();
-        double tempAcc = 0.0;
-        double humAcc = 0.0;
-
-        System.out.println("Sampling " + sizeChunks * sizeChunks + " chunks for biome test...");
-
-        for (int x = -sizeChunks / 2; x < sizeChunks / 2; x++)
-        {
-            for (int z = -sizeChunks / 2; z < sizeChunks / 2; z++)
-            {
-                int pctg = (int) (chunksSampled / (float)(sizeChunks * sizeChunks) * 100);
-                if (pctg != lastReport)
-                {
-                    System.out.println(pctg + "% complete...");
-                    lastReport = pctg;
-                }
-                tempAcc += getTemperature(x * 16, z * 16);
-                humAcc += getHumidity(x * 16, z * 16);
-                Biome biome = getBiome(x * 16, 64, z * 16);
-                biomeOccurrenceMap.put(biome, biomeOccurrenceMap.getOrDefault(biome, 0) + 1);
-                chunksSampled++;
-            }
-        }
-
-        System.out.println("Seed analysis sampling " + sizeChunks * sizeChunks + " chunks:");
-        System.out.println("    Average temperature: " + String.format("%.2f", tempAcc / (float) (sizeChunks * sizeChunks)));
-        System.out.println("    Average humidity: " + String.format("%.2f", humAcc / (float) (sizeChunks * sizeChunks)));
-        System.out.println("    Biome distribution:");
-        for (Biome biome : Registries.BIOMES)
-        {
-            float pctg;
-            if (biomeOccurrenceMap.containsKey(biome))
-            {
-                pctg = biomeOccurrenceMap.get(biome) / (float) (sizeChunks * sizeChunks);
-                pctg *= 100;
-            }
-            else
-            {
-                pctg = 0.0f;
-            }
-            System.out.println("        " + Registries.BIOMES.getKey(biome) + ": " + String.format("%.2f", pctg) + "%");
-        }
-    }
-}
+package net.minecraft.core.world.biome.provider;
+
+import net.minecraft.core.data.registry.Registries;
+import net.minecraft.core.world.biome.Biome;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public abstract class BiomeProvider
+{
+    public Biome getBiome(int x, int y, int z)
+    {
+        Biome[] out = getBiomes(null, x, y, z, 1, 1, 1);
+        return out[0];
+    }
+
+    public double getTemperature(int x, int z)
+    {
+        double[] out = getTemperatures(null, x, z, 1, 1);
+        return out[0];
+    }
+
+    public double getHumidity(int x, int z)
+    {
+        double[] out = getHumidities(null, x, z, 1, 1);
+        return out[0];
+    }
+
+    public double getVariety(int x, int z)
+    {
+        double[] out = getVarieties(null, x, z, 1, 1);
+        return out[0];
+    }
+
+
+    public double getBiomeness(int x, int y, int z)
+    {
+        double[] out = getBiomenesses(null, x, y, z, 1, 1, 1);
+        return out[0];
+    }
+
+    public Biome[] getBiomes(Biome[] biomes, int x, int y, int z, int xSize, int ySize, int zSize)
+    {
+        return getBiomes(biomes, null, null, null, x, y, z, xSize, ySize, zSize);
+    }
+
+    public abstract Biome[] getBiomes(Biome[] biomes, double[] temperatures, double[] humidities, double[] varieties, int x, int y, int z, int xSize, int ySize, int zSize);
+
+    public abstract double[] getTemperatures(double[] temperatures, int x, int z, int xSize, int zSize);
+
+    public abstract double[] getHumidities(double[] humidities, int x, int z, int xSize, int zSize);
+    public abstract double[] getVarieties(double[] varieties, int x, int z, int xSize, int zSize);
+
+    public abstract double[] getBiomenesses(double[] biomenesses, int x, int y, int z, int xSize, int ySize, int zSize);
+
+    public abstract Biome lookupBiome(double temperature, double humidity, double altitude, double variety);
+
+    protected void generateBiomeDistributionStats()
+    {
+        int lastReport = 0;
+        int sizeChunks = 2048;
+        int chunksSampled = 0;
+        Map<Biome, Integer> biomeOccurrenceMap = new HashMap<>();
+        double tempAcc = 0.0;
+        double humAcc = 0.0;
+
+        System.out.println("Sampling " + sizeChunks * sizeChunks + " chunks for biome test...");
+
+        for (int x = -sizeChunks / 2; x < sizeChunks / 2; x++)
+        {
+            for (int z = -sizeChunks / 2; z < sizeChunks / 2; z++)
+            {
+                int pctg = (int) (chunksSampled / (float)(sizeChunks * sizeChunks) * 100);
+                if (pctg != lastReport)
+                {
+                    System.out.println(pctg + "% complete...");
+                    lastReport = pctg;
+                }
+                tempAcc += getTemperature(x * 16, z * 16);
+                humAcc += getHumidity(x * 16, z * 16);
+                Biome biome = getBiome(x * 16, 64, z * 16);
+                biomeOccurrenceMap.put(biome, biomeOccurrenceMap.getOrDefault(biome, 0) + 1);
+                chunksSampled++;
+            }
+        }
+
+        System.out.println("Seed analysis sampling " + sizeChunks * sizeChunks + " chunks:");
+        System.out.println("    Average temperature: " + String.format("%.2f", tempAcc / (float) (sizeChunks * sizeChunks)));
+        System.out.println("    Average humidity: " + String.format("%.2f", humAcc / (float) (sizeChunks * sizeChunks)));
+        System.out.println("    Biome distribution:");
+        for (Biome biome : Registries.BIOMES)
+        {
+            float pctg;
+            if (biomeOccurrenceMap.containsKey(biome))
+            {
+                pctg = biomeOccurrenceMap.get(biome) / (float) (sizeChunks * sizeChunks);
+                pctg *= 100;
+            }
+            else
+            {
+                pctg = 0.0f;
+            }
+            System.out.println("        " + Registries.BIOMES.getKey(biome) + ": " + String.format("%.2f", pctg) + "%");
+        }
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderOverworld.java b/game/core/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderOverworld.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderOverworld.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderOverworld.java
index 8f2b1b55a..61c5dc3a1 100644
--- a/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderOverworld.java
+++ b/game/core/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderOverworld.java
@@ -1,403 +1,403 @@
-package net.minecraft.core.world.biome.provider;
-
-import net.minecraft.core.util.helper.MathHelper;
-import net.minecraft.core.world.biome.Biome;
-import net.minecraft.core.world.biome.Biomes;
-import net.minecraft.core.world.biome.data.BiomeRange;
-import net.minecraft.core.world.biome.data.BiomeRangeMap;
-import net.minecraft.core.world.noise.PerlinSimplexNoise;
-import net.minecraft.core.world.type.WorldType;
-
-import java.util.Random;
-import java.util.Set;
-
-public final class BiomeProviderOverworld
-    extends BiomeProvider
-{
-    private static final BiomeRangeMap brm = new BiomeRangeMap();
-
-    private final PerlinSimplexNoise temperatureNoise;
-    private final PerlinSimplexNoise humidityNoise;
-    private final PerlinSimplexNoise varietyNoise;
-    private final PerlinSimplexNoise fuzzinessNoise;
-
-    private double temperatureXScale = 0.0125;
-    private double temperatureZScale = 0.0125;
-    private double temperatureExponent = 0.25;
-    private double temperatureFuzzPercentage = 0.01;
-
-    private double humidityXScale = 0.025;
-    private double humidityZScale = 0.025;
-    private double humidityExponent = 0.3;
-    private double humidityFuzzPercentage = 0.01;
-
-    private double varietyXScale = 0.25;
-    private double varietyZScale = 0.25;
-    private double varietyExponent = 0.3;
-    private double varietyFuzzPercentage = 0.0;
-
-    private double fuzzinessXScale = 0.25;
-    private double fuzzinessZScale = 0.25;
-    private double fuzzinessExponent = 1.0;
-
-    private final WorldType worldType;
-
-    public BiomeProviderOverworld(long seed, WorldType worldType)
-    {
-        this.worldType = worldType;
-
-        this.temperatureNoise = new PerlinSimplexNoise(new Random(seed * 9871L), 4);
-        this.humidityNoise = new PerlinSimplexNoise(new Random(seed * 39811L), 4);
-        this.varietyNoise = new PerlinSimplexNoise(new Random(seed), 4);
-
-        this.fuzzinessNoise = new PerlinSimplexNoise(new Random(seed * 0x84a59L), 2);
-    }
-
-    public BiomeProviderOverworld withTemperatureScales(double xScale, double zScale, double exponent, double fuzzPercentage)
-    {
-        this.temperatureXScale = xScale;
-        this.temperatureZScale = zScale;
-        this.temperatureExponent = exponent;
-        this.temperatureFuzzPercentage = fuzzPercentage;
-
-        return this;
-    }
-
-    public BiomeProviderOverworld withHumidityScales(double xScale, double zScale, double exponent, double fuzzPercentage)
-    {
-        this.humidityXScale = xScale;
-        this.humidityZScale = zScale;
-        this.humidityExponent = exponent;
-        this.humidityFuzzPercentage = fuzzPercentage;
-
-        return this;
-    }
-
-    public BiomeProviderOverworld withFuzzinessScales(double xScale, double zScale, double exponent)
-    {
-        this.fuzzinessXScale = xScale;
-        this.fuzzinessZScale = zScale;
-        this.fuzzinessExponent = exponent;
-
-        return this;
-    }
-
-    @Override
-    public Biome[] getBiomes(Biome[] biomes, double[] temperatures, double[] humidities, double[] varieties, int x, int y, int z, int xSize, int ySize, int zSize)
-    {
-        if (biomes == null || biomes.length < xSize * ySize * zSize)
-        {
-            biomes = new Biome[xSize * ySize * zSize];
-        }
-        if (temperatures == null || temperatures.length < xSize * zSize)
-        {
-            temperatures = getTemperatures(temperatures, x, z, xSize, zSize);
-        }
-        if (humidities == null || humidities.length < xSize * zSize)
-        {
-            humidities = getHumidities(humidities, x, z, xSize, zSize);
-        }
-        if (varieties == null || varieties.length < xSize * zSize)
-        {
-            varieties = getVarieties(varieties, x, z, xSize, zSize);
-        }
-
-        for (int dx = 0; dx < xSize; dx++)
-        {
-            for (int dz = 0; dz < zSize; dz++)
-            {
-                double temperature = temperatures[dx * zSize + dz];
-                double humidity = humidities[dx * zSize + dz];
-                double variety = varieties[dx * zSize + dz];
-
-                for (int dy = 0; dy < ySize; dy++)
-                {
-                    double altitude = worldType.getYPercentage((y + dy) << 3);
-                    biomes[dy * xSize * zSize + dz * xSize + dx] = lookupBiome(temperature, humidity, altitude, variety);
-                }
-            }
-        }
-
-        return biomes;
-    }
-
-    @Override
-    public double[] getTemperatures(double[] temperatures, int x, int z, int xSize, int zSize)
-    {
-        if (temperatures == null || temperatures.length < xSize * zSize)
-        {
-            temperatures = new double[xSize * zSize];
-        }
-
-        double[] tnResult = temperatureNoise.getValue(null, x, z, xSize, zSize, temperatureXScale, temperatureZScale, temperatureExponent);
-        double[] fnResult = fuzzinessNoise.getValue(null, x, z, xSize, zSize, fuzzinessXScale, fuzzinessZScale, fuzzinessExponent);
-
-        for (int dx = 0; dx < xSize; dx++)
-        {
-            for (int dz = 0; dz < zSize; dz++)
-            {
-                double fuzziness = fnResult[dx * zSize + dz] * 1.1 + 0.5;
-
-                double fuzzPctg = temperatureFuzzPercentage;
-                double valPctg = 1.0 - fuzzPctg;
-                double temperature = (tnResult[dx * zSize + dz] * 0.15 + 0.7) * valPctg + fuzziness * fuzzPctg;
-
-                if (temperature < 0.0)
-                {
-                    temperature = 0.0;
-                }
-                if (temperature > 1.0)
-                {
-                    temperature = 1.0;
-                }
-
-                temperatures[dx * zSize + dz] = temperature;
-            }
-        }
-
-        return temperatures;
-    }
-
-    @Override
-    public double[] getHumidities(double[] humidities, int x, int z, int xSize, int zSize)
-    {
-        if (humidities == null || humidities.length < xSize * zSize)
-        {
-            humidities = new double[xSize * zSize];
-        }
-
-        double[] hnResult = humidityNoise.getValue(null, x, z, xSize, zSize, humidityXScale, humidityZScale, humidityExponent);
-        double[] fnResult = fuzzinessNoise.getValue(null, x, z, xSize, zSize, fuzzinessXScale, fuzzinessZScale, fuzzinessExponent);
-
-        for (int dx = 0; dx < xSize; dx++)
-        {
-            for (int dz = 0; dz < zSize; dz++)
-            {
-                double fuzziness = fnResult[dx * zSize + dz] * 1.1 + 0.5;
-
-                double fuzzPctg = humidityFuzzPercentage;
-                double valPctg = 1.0 - fuzzPctg;
-                double humidity = (hnResult[dx * zSize + dz] * 0.15 + 0.5) * valPctg + fuzziness * fuzzPctg;
-
-                if (humidity < 0.0)
-                {
-                    humidity = 0.0;
-                }
-                if (humidity > 1.0)
-                {
-                    humidity = 1.0;
-                }
-
-                humidities[dx * zSize + dz] = humidity;
-            }
-        }
-
-        return humidities;
-    }
-    @Override
-    public double[] getVarieties(double[] varieties, int x, int z, int xSize, int zSize)
-    {
-        if (varieties == null || varieties.length < xSize * zSize)
-        {
-            varieties = new double[xSize * zSize];
-        }
-
-        double[] vnResult = varietyNoise.getValue(null, x, z, xSize, zSize, varietyXScale, varietyZScale, varietyExponent);
-        double[] fnResult = fuzzinessNoise.getValue(null, x, z, xSize, zSize, fuzzinessXScale, fuzzinessZScale, fuzzinessExponent);
-
-        for (int dx = 0; dx < xSize; dx++)
-        {
-            for (int dz = 0; dz < zSize; dz++)
-            {
-                double fuzziness = fnResult[dx * zSize + dz] * 1.1 + 0.5;
-
-                double fuzzPctg = varietyFuzzPercentage;
-                double valPctg = 1.0 - fuzzPctg;
-                double variety = (vnResult[dx * zSize + dz] * 0.15 + 0.5) * valPctg + fuzziness * fuzzPctg;
-
-                if (variety < 0.0)
-                {
-                    variety = 0.0;
-                }
-                if (variety > 1.0)
-                {
-                    variety = 1.0;
-                }
-
-                varieties[dx * zSize + dz] = variety;
-            }
-        }
-
-        return varieties;
-    }
-
-    @Override
-    public double[] getBiomenesses(double[] biomenesses, int x, int y, int z, int xSize, int ySize, int zSize)
-    {
-        if (biomenesses == null || biomenesses.length < xSize * ySize * zSize)
-        {
-            biomenesses = new double[xSize * ySize * zSize];
-        }
-
-        double[] temperatures = getTemperatures(null, x, z, xSize, zSize);
-        double[] humidities = getHumidities(null, x, z, xSize, zSize);
-        double[] varieties = getVarieties(null, x, z, xSize, zSize);
-
-        for (int dx = 0; dx < xSize; dx++)
-        {
-            for (int dy = 0; dy < ySize; dy++)
-            {
-                for (int dz = 0; dz < zSize; dz++)
-                {
-                    double temperature = MathHelper.clamp(temperatures[dx * zSize + dz], 0.0, 1.0);
-                    double humidity = MathHelper.clamp(humidities[dx * zSize + dz], 0.0, 1.0);
-                    double altitude = MathHelper.clamp(worldType.getYPercentage((y + dy) << 3), 0.0, 1.0);
-                    double variety = MathHelper.clamp(varieties[dx * zSize + dz], 0.0, 1.0);
-                    Biome biome = lookupBiome(temperature, humidity, altitude, variety);
-                    Set<BiomeRange> ranges = brm.getRanges(biome);
-
-                    humidity *= temperature;
-
-                    double biomeness = 0.0;
-                    for (BiomeRange range : ranges)
-                    {
-                        if (!range.contains(temperature, humidity, variety, altitude)) continue;
-
-                        double newTemperature = temperature;
-                        double newHumidity = humidity;
-                        double newAltitude = altitude;
-                        double newVariety = variety;
-
-                        double temperatureRange = range.getMaxTemperature() - range.getMinTemperature();
-                        double humidityRange = range.getMaxHumidity() - range.getMinHumidity();
-                        double altitudeRange = range.getMaxAltitude() - range.getMinAltitude();
-                        double varietyRange = range.getMaxVariety() - range.getMinVariety();
-
-                        // Normalize, 0.0 to 1.0
-                        newTemperature = (newTemperature - range.getMinTemperature()) / temperatureRange;
-                        newHumidity = (newHumidity - range.getMinHumidity()) / humidityRange;
-                        newAltitude = (newAltitude - range.getMinAltitude()) / altitudeRange;
-                        newVariety = (newVariety - range.getMinVariety()) / varietyRange;
-
-                        // Convert to 0.0 to 1.0 to 0.0
-                        if ((range.getMinTemperature() <= 0.0 && newTemperature <= 0.5) || (range.getMaxTemperature() >= 1.0 && newTemperature >= 0.5))
-                        {
-                            newTemperature = 1.0;
-                        }
-                        else
-                        {
-                            newTemperature = -Math.abs((newTemperature * 2.0) - 1.0) + 1.0;
-                        }
-                        if ((range.getMinHumidity() <= 0.0 && newHumidity <= 0.5) || (range.getMaxHumidity() >= 1.0 && newHumidity >= 0.5))
-                        {
-                            newHumidity = 1.0;
-                        }
-                        else
-                        {
-                            newHumidity = -Math.abs((newHumidity * 2.0) - 1.0) + 1.0;
-                        }
-                        if ((range.getMinAltitude() <= 0.0 && newAltitude <= 0.5) || (range.getMaxAltitude() >= 1.0 && newAltitude >= 0.5))
-                        {
-                            newAltitude = 1.0;
-                        }
-                        else
-                        {
-                            newAltitude = -Math.abs((newAltitude * 2.0) - 1.0) + 1.0;
-                        }
-                        if ((range.getMinVariety() <= 0.0 && newVariety <= 0.5) || (range.getMaxVariety() >= 1.0 && newVariety >= 0.5))
-                        {
-                            newVariety = 1.0;
-                        }
-                        else
-                        {
-                            newVariety = -Math.abs((newVariety * 2.0) - 1.0) + 1.0;
-                        }
-
-                        double newBiomeness = newTemperature * newHumidity * newAltitude * newVariety;
-                        if (newBiomeness > biomeness) biomeness = newBiomeness;
-                    }
-
-                    biomenesses[dy * xSize * zSize + dz * xSize + dx] = biomeness;
-                }
-            }
-        }
-
-        return biomenesses;
-    }
-
-    @Override
-    public Biome lookupBiome(double temperature, double humidity, double variety, double altitude)
-    {
-        humidity *= temperature;
-        return brm.lookupBiome(temperature, humidity, variety, altitude);
-    }
-
-    public static void init()
-    {
-        brm.clear();
-        brm.addRange(Biomes.OVERWORLD_GLACIER,
-                new BiomeRange(0.0, 0.3, 0.0, 0.01, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_TUNDRA,
-                new BiomeRange(0.0, 0.3, 0.01, 0.1, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_TAIGA,
-                new BiomeRange(0.0, 0.3, 0.1, 1.0, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_BOREAL_FOREST,
-                new BiomeRange(0.3, 0.5, 0.05, 1.0, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_GRASSLANDS,
-            new BiomeRange(0.5, 0.98, 0.0, 0.05, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_MEADOW,
-                new BiomeRange(0.3, 0.5, 0.0, 0.05, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_BIRCH_FOREST,
-                new BiomeRange(0.5, 0.75, 0.3, 0.5, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_SHRUBLAND,
-                new BiomeRange(0.5, 0.75, 0.05, 0.3, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_SEASONAL_FOREST,
-                new BiomeRange(0.5, 0.75, 0.5, 1.0, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_SWAMPLAND,
-                new BiomeRange(0.75, 0.95, 0.85, 1.0, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_FOREST,
-                new BiomeRange(0.75, 0.95, 0.4, 0.85, 0.0, 1.0, 0.0, 1),
-                new BiomeRange(0.95, 1.0, 0.4, 0.85, 0.0, 1.0, 0.0, 1)
-        );
-        brm.addRange(Biomes.OVERWORLD_PLAINS,
-                new BiomeRange(0.75, 1.0, 0.1, 0.4, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_DESERT,
-                new BiomeRange(0.85, 1.0, 0.0, 0.01, 0.0, 1.0, 0.0, 1.0)
-        );
-
-        brm.addRange(Biomes.OVERWORLD_OUTBACK,
-                new BiomeRange(0.75, 0.9, 0.0, 0.2, 0.0, 1.0, 0.0, 0.95)
-        );
-        brm.addRange(Biomes.OVERWORLD_OUTBACK_GRASSY,
-                new BiomeRange(0.75, 0.9, 0.0, 0.2, 0.0, 1.0, 0.95, 1.0)
-        );
-
-
-        brm.addRange(Biomes.OVERWORLD_CAATINGA,
-                new BiomeRange(0.9, 1.0, 0.01, 0.2, 0.0, 1.0, 0.1, 1.0)
-        );
-        brm.addRange(Biomes.OVERWORLD_CAATINGA_PLAINS,
-                new BiomeRange(0.9, 1.0, 0.01, 0.2, 0.0, 1.0, 0.0, 0.1)
-        );
-        brm.addRange(Biomes.OVERWORLD_RAINFOREST,
-                new BiomeRange(0.95, 1.0, 0.85, 1.0, 0.0, 1.0, 0.0, 1.0)
-        );
-        brm.lock();
-        
-//		Stop turning this on it crashes servers
-//        if (!Global.isServer){
-//            brm.generateDebugImage(true);
-//        }
-    }
-}
+package net.minecraft.core.world.biome.provider;
+
+import net.minecraft.core.util.helper.MathHelper;
+import net.minecraft.core.world.biome.Biome;
+import net.minecraft.core.world.biome.Biomes;
+import net.minecraft.core.world.biome.data.BiomeRange;
+import net.minecraft.core.world.biome.data.BiomeRangeMap;
+import net.minecraft.core.world.noise.PerlinSimplexNoise;
+import net.minecraft.core.world.type.WorldType;
+
+import java.util.Random;
+import java.util.Set;
+
+public final class BiomeProviderOverworld
+    extends BiomeProvider
+{
+    private static final BiomeRangeMap brm = new BiomeRangeMap();
+
+    private final PerlinSimplexNoise temperatureNoise;
+    private final PerlinSimplexNoise humidityNoise;
+    private final PerlinSimplexNoise varietyNoise;
+    private final PerlinSimplexNoise fuzzinessNoise;
+
+    private double temperatureXScale = 0.0125;
+    private double temperatureZScale = 0.0125;
+    private double temperatureExponent = 0.25;
+    private double temperatureFuzzPercentage = 0.01;
+
+    private double humidityXScale = 0.025;
+    private double humidityZScale = 0.025;
+    private double humidityExponent = 0.3;
+    private double humidityFuzzPercentage = 0.01;
+
+    private double varietyXScale = 0.25;
+    private double varietyZScale = 0.25;
+    private double varietyExponent = 0.3;
+    private double varietyFuzzPercentage = 0.0;
+
+    private double fuzzinessXScale = 0.25;
+    private double fuzzinessZScale = 0.25;
+    private double fuzzinessExponent = 1.0;
+
+    private final WorldType worldType;
+
+    public BiomeProviderOverworld(long seed, WorldType worldType)
+    {
+        this.worldType = worldType;
+
+        this.temperatureNoise = new PerlinSimplexNoise(new Random(seed * 9871L), 4);
+        this.humidityNoise = new PerlinSimplexNoise(new Random(seed * 39811L), 4);
+        this.varietyNoise = new PerlinSimplexNoise(new Random(seed), 4);
+
+        this.fuzzinessNoise = new PerlinSimplexNoise(new Random(seed * 0x84a59L), 2);
+    }
+
+    public BiomeProviderOverworld withTemperatureScales(double xScale, double zScale, double exponent, double fuzzPercentage)
+    {
+        this.temperatureXScale = xScale;
+        this.temperatureZScale = zScale;
+        this.temperatureExponent = exponent;
+        this.temperatureFuzzPercentage = fuzzPercentage;
+
+        return this;
+    }
+
+    public BiomeProviderOverworld withHumidityScales(double xScale, double zScale, double exponent, double fuzzPercentage)
+    {
+        this.humidityXScale = xScale;
+        this.humidityZScale = zScale;
+        this.humidityExponent = exponent;
+        this.humidityFuzzPercentage = fuzzPercentage;
+
+        return this;
+    }
+
+    public BiomeProviderOverworld withFuzzinessScales(double xScale, double zScale, double exponent)
+    {
+        this.fuzzinessXScale = xScale;
+        this.fuzzinessZScale = zScale;
+        this.fuzzinessExponent = exponent;
+
+        return this;
+    }
+
+    @Override
+    public Biome[] getBiomes(Biome[] biomes, double[] temperatures, double[] humidities, double[] varieties, int x, int y, int z, int xSize, int ySize, int zSize)
+    {
+        if (biomes == null || biomes.length < xSize * ySize * zSize)
+        {
+            biomes = new Biome[xSize * ySize * zSize];
+        }
+        if (temperatures == null || temperatures.length < xSize * zSize)
+        {
+            temperatures = getTemperatures(temperatures, x, z, xSize, zSize);
+        }
+        if (humidities == null || humidities.length < xSize * zSize)
+        {
+            humidities = getHumidities(humidities, x, z, xSize, zSize);
+        }
+        if (varieties == null || varieties.length < xSize * zSize)
+        {
+            varieties = getVarieties(varieties, x, z, xSize, zSize);
+        }
+
+        for (int dx = 0; dx < xSize; dx++)
+        {
+            for (int dz = 0; dz < zSize; dz++)
+            {
+                double temperature = temperatures[dx * zSize + dz];
+                double humidity = humidities[dx * zSize + dz];
+                double variety = varieties[dx * zSize + dz];
+
+                for (int dy = 0; dy < ySize; dy++)
+                {
+                    double altitude = worldType.getYPercentage((y + dy) << 3);
+                    biomes[dy * xSize * zSize + dz * xSize + dx] = lookupBiome(temperature, humidity, altitude, variety);
+                }
+            }
+        }
+
+        return biomes;
+    }
+
+    @Override
+    public double[] getTemperatures(double[] temperatures, int x, int z, int xSize, int zSize)
+    {
+        if (temperatures == null || temperatures.length < xSize * zSize)
+        {
+            temperatures = new double[xSize * zSize];
+        }
+
+        double[] tnResult = temperatureNoise.getValue(null, x, z, xSize, zSize, temperatureXScale, temperatureZScale, temperatureExponent);
+        double[] fnResult = fuzzinessNoise.getValue(null, x, z, xSize, zSize, fuzzinessXScale, fuzzinessZScale, fuzzinessExponent);
+
+        for (int dx = 0; dx < xSize; dx++)
+        {
+            for (int dz = 0; dz < zSize; dz++)
+            {
+                double fuzziness = fnResult[dx * zSize + dz] * 1.1 + 0.5;
+
+                double fuzzPctg = temperatureFuzzPercentage;
+                double valPctg = 1.0 - fuzzPctg;
+                double temperature = (tnResult[dx * zSize + dz] * 0.15 + 0.7) * valPctg + fuzziness * fuzzPctg;
+
+                if (temperature < 0.0)
+                {
+                    temperature = 0.0;
+                }
+                if (temperature > 1.0)
+                {
+                    temperature = 1.0;
+                }
+
+                temperatures[dx * zSize + dz] = temperature;
+            }
+        }
+
+        return temperatures;
+    }
+
+    @Override
+    public double[] getHumidities(double[] humidities, int x, int z, int xSize, int zSize)
+    {
+        if (humidities == null || humidities.length < xSize * zSize)
+        {
+            humidities = new double[xSize * zSize];
+        }
+
+        double[] hnResult = humidityNoise.getValue(null, x, z, xSize, zSize, humidityXScale, humidityZScale, humidityExponent);
+        double[] fnResult = fuzzinessNoise.getValue(null, x, z, xSize, zSize, fuzzinessXScale, fuzzinessZScale, fuzzinessExponent);
+
+        for (int dx = 0; dx < xSize; dx++)
+        {
+            for (int dz = 0; dz < zSize; dz++)
+            {
+                double fuzziness = fnResult[dx * zSize + dz] * 1.1 + 0.5;
+
+                double fuzzPctg = humidityFuzzPercentage;
+                double valPctg = 1.0 - fuzzPctg;
+                double humidity = (hnResult[dx * zSize + dz] * 0.15 + 0.5) * valPctg + fuzziness * fuzzPctg;
+
+                if (humidity < 0.0)
+                {
+                    humidity = 0.0;
+                }
+                if (humidity > 1.0)
+                {
+                    humidity = 1.0;
+                }
+
+                humidities[dx * zSize + dz] = humidity;
+            }
+        }
+
+        return humidities;
+    }
+    @Override
+    public double[] getVarieties(double[] varieties, int x, int z, int xSize, int zSize)
+    {
+        if (varieties == null || varieties.length < xSize * zSize)
+        {
+            varieties = new double[xSize * zSize];
+        }
+
+        double[] vnResult = varietyNoise.getValue(null, x, z, xSize, zSize, varietyXScale, varietyZScale, varietyExponent);
+        double[] fnResult = fuzzinessNoise.getValue(null, x, z, xSize, zSize, fuzzinessXScale, fuzzinessZScale, fuzzinessExponent);
+
+        for (int dx = 0; dx < xSize; dx++)
+        {
+            for (int dz = 0; dz < zSize; dz++)
+            {
+                double fuzziness = fnResult[dx * zSize + dz] * 1.1 + 0.5;
+
+                double fuzzPctg = varietyFuzzPercentage;
+                double valPctg = 1.0 - fuzzPctg;
+                double variety = (vnResult[dx * zSize + dz] * 0.15 + 0.5) * valPctg + fuzziness * fuzzPctg;
+
+                if (variety < 0.0)
+                {
+                    variety = 0.0;
+                }
+                if (variety > 1.0)
+                {
+                    variety = 1.0;
+                }
+
+                varieties[dx * zSize + dz] = variety;
+            }
+        }
+
+        return varieties;
+    }
+
+    @Override
+    public double[] getBiomenesses(double[] biomenesses, int x, int y, int z, int xSize, int ySize, int zSize)
+    {
+        if (biomenesses == null || biomenesses.length < xSize * ySize * zSize)
+        {
+            biomenesses = new double[xSize * ySize * zSize];
+        }
+
+        double[] temperatures = getTemperatures(null, x, z, xSize, zSize);
+        double[] humidities = getHumidities(null, x, z, xSize, zSize);
+        double[] varieties = getVarieties(null, x, z, xSize, zSize);
+
+        for (int dx = 0; dx < xSize; dx++)
+        {
+            for (int dy = 0; dy < ySize; dy++)
+            {
+                for (int dz = 0; dz < zSize; dz++)
+                {
+                    double temperature = MathHelper.clamp(temperatures[dx * zSize + dz], 0.0, 1.0);
+                    double humidity = MathHelper.clamp(humidities[dx * zSize + dz], 0.0, 1.0);
+                    double altitude = MathHelper.clamp(worldType.getYPercentage((y + dy) << 3), 0.0, 1.0);
+                    double variety = MathHelper.clamp(varieties[dx * zSize + dz], 0.0, 1.0);
+                    Biome biome = lookupBiome(temperature, humidity, altitude, variety);
+                    Set<BiomeRange> ranges = brm.getRanges(biome);
+
+                    humidity *= temperature;
+
+                    double biomeness = 0.0;
+                    for (BiomeRange range : ranges)
+                    {
+                        if (!range.contains(temperature, humidity, variety, altitude)) continue;
+
+                        double newTemperature = temperature;
+                        double newHumidity = humidity;
+                        double newAltitude = altitude;
+                        double newVariety = variety;
+
+                        double temperatureRange = range.getMaxTemperature() - range.getMinTemperature();
+                        double humidityRange = range.getMaxHumidity() - range.getMinHumidity();
+                        double altitudeRange = range.getMaxAltitude() - range.getMinAltitude();
+                        double varietyRange = range.getMaxVariety() - range.getMinVariety();
+
+                        // Normalize, 0.0 to 1.0
+                        newTemperature = (newTemperature - range.getMinTemperature()) / temperatureRange;
+                        newHumidity = (newHumidity - range.getMinHumidity()) / humidityRange;
+                        newAltitude = (newAltitude - range.getMinAltitude()) / altitudeRange;
+                        newVariety = (newVariety - range.getMinVariety()) / varietyRange;
+
+                        // Convert to 0.0 to 1.0 to 0.0
+                        if ((range.getMinTemperature() <= 0.0 && newTemperature <= 0.5) || (range.getMaxTemperature() >= 1.0 && newTemperature >= 0.5))
+                        {
+                            newTemperature = 1.0;
+                        }
+                        else
+                        {
+                            newTemperature = -Math.abs((newTemperature * 2.0) - 1.0) + 1.0;
+                        }
+                        if ((range.getMinHumidity() <= 0.0 && newHumidity <= 0.5) || (range.getMaxHumidity() >= 1.0 && newHumidity >= 0.5))
+                        {
+                            newHumidity = 1.0;
+                        }
+                        else
+                        {
+                            newHumidity = -Math.abs((newHumidity * 2.0) - 1.0) + 1.0;
+                        }
+                        if ((range.getMinAltitude() <= 0.0 && newAltitude <= 0.5) || (range.getMaxAltitude() >= 1.0 && newAltitude >= 0.5))
+                        {
+                            newAltitude = 1.0;
+                        }
+                        else
+                        {
+                            newAltitude = -Math.abs((newAltitude * 2.0) - 1.0) + 1.0;
+                        }
+                        if ((range.getMinVariety() <= 0.0 && newVariety <= 0.5) || (range.getMaxVariety() >= 1.0 && newVariety >= 0.5))
+                        {
+                            newVariety = 1.0;
+                        }
+                        else
+                        {
+                            newVariety = -Math.abs((newVariety * 2.0) - 1.0) + 1.0;
+                        }
+
+                        double newBiomeness = newTemperature * newHumidity * newAltitude * newVariety;
+                        if (newBiomeness > biomeness) biomeness = newBiomeness;
+                    }
+
+                    biomenesses[dy * xSize * zSize + dz * xSize + dx] = biomeness;
+                }
+            }
+        }
+
+        return biomenesses;
+    }
+
+    @Override
+    public Biome lookupBiome(double temperature, double humidity, double variety, double altitude)
+    {
+        humidity *= temperature;
+        return brm.lookupBiome(temperature, humidity, variety, altitude);
+    }
+
+    public static void init()
+    {
+        brm.clear();
+        brm.addRange(Biomes.OVERWORLD_GLACIER,
+                new BiomeRange(0.0, 0.3, 0.0, 0.01, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_TUNDRA,
+                new BiomeRange(0.0, 0.3, 0.01, 0.1, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_TAIGA,
+                new BiomeRange(0.0, 0.3, 0.1, 1.0, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_BOREAL_FOREST,
+                new BiomeRange(0.3, 0.5, 0.05, 1.0, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_GRASSLANDS,
+            new BiomeRange(0.5, 0.98, 0.0, 0.05, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_MEADOW,
+                new BiomeRange(0.3, 0.5, 0.0, 0.05, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_BIRCH_FOREST,
+                new BiomeRange(0.5, 0.75, 0.3, 0.5, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_SHRUBLAND,
+                new BiomeRange(0.5, 0.75, 0.05, 0.3, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_SEASONAL_FOREST,
+                new BiomeRange(0.5, 0.75, 0.5, 1.0, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_SWAMPLAND,
+                new BiomeRange(0.75, 0.95, 0.85, 1.0, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_FOREST,
+                new BiomeRange(0.75, 0.95, 0.4, 0.85, 0.0, 1.0, 0.0, 1),
+                new BiomeRange(0.95, 1.0, 0.4, 0.85, 0.0, 1.0, 0.0, 1)
+        );
+        brm.addRange(Biomes.OVERWORLD_PLAINS,
+                new BiomeRange(0.75, 1.0, 0.1, 0.4, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_DESERT,
+                new BiomeRange(0.85, 1.0, 0.0, 0.01, 0.0, 1.0, 0.0, 1.0)
+        );
+
+        brm.addRange(Biomes.OVERWORLD_OUTBACK,
+                new BiomeRange(0.75, 0.9, 0.0, 0.2, 0.0, 1.0, 0.0, 0.95)
+        );
+        brm.addRange(Biomes.OVERWORLD_OUTBACK_GRASSY,
+                new BiomeRange(0.75, 0.9, 0.0, 0.2, 0.0, 1.0, 0.95, 1.0)
+        );
+
+
+        brm.addRange(Biomes.OVERWORLD_CAATINGA,
+                new BiomeRange(0.9, 1.0, 0.01, 0.2, 0.0, 1.0, 0.1, 1.0)
+        );
+        brm.addRange(Biomes.OVERWORLD_CAATINGA_PLAINS,
+                new BiomeRange(0.9, 1.0, 0.01, 0.2, 0.0, 1.0, 0.0, 0.1)
+        );
+        brm.addRange(Biomes.OVERWORLD_RAINFOREST,
+                new BiomeRange(0.95, 1.0, 0.85, 1.0, 0.0, 1.0, 0.0, 1.0)
+        );
+        brm.lock();
+        
+//		Stop turning this on it crashes servers
+//        if (!Global.isServer){
+//            brm.generateDebugImage(true);
+//        }
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderSingleBiome.java b/game/core/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderSingleBiome.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderSingleBiome.java
rename to game/core/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderSingleBiome.java
index 6cf6e6ec9..eb38c7ca1 100644
--- a/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderSingleBiome.java
+++ b/game/core/src/main/java/net/minecraft/core/world/biome/provider/BiomeProviderSingleBiome.java
@@ -1,92 +1,92 @@
-package net.minecraft.core.world.biome.provider;
-
-import net.minecraft.core.world.biome.Biome;
-
-import java.util.Arrays;
-
-public class BiomeProviderSingleBiome
-    extends BiomeProvider
-{
-    private final Biome defaultBiome;
-    private final double defaultTemperature;
-    private final double defaultHumidity;
-    private final double defaultVariety;
-
-    public BiomeProviderSingleBiome(Biome defaultBiome, double defaultTemperature, double defaultHumidity, double defaultVariety)
-    {
-        this.defaultBiome = defaultBiome;
-        this.defaultTemperature = defaultTemperature;
-        this.defaultHumidity = defaultHumidity;
-        this.defaultVariety = defaultVariety;
-    }
-
-    @Override
-    public Biome[] getBiomes(Biome[] biomes, double[] temperatures, double[] humidities, double[] varieties, int x, int y, int z, int xSize, int ySize, int zSize)
-    {
-        if (biomes == null || biomes.length != xSize * ySize * zSize)
-        {
-            biomes = new Biome[xSize * ySize * zSize];
-        }
-
-        Arrays.fill(biomes, defaultBiome);
-
-        return biomes;
-    }
-
-    @Override
-    public double[] getTemperatures(double[] temperatures, int x, int z, int xSize, int zSize)
-    {
-        if (temperatures == null || temperatures.length < xSize * zSize)
-        {
-            temperatures = new double[xSize * zSize];
-        }
-
-        Arrays.fill(temperatures, defaultTemperature);
-
-        return temperatures;
-    }
-
-    @Override
-    public double[] getHumidities(double[] humidities, int x, int z, int xSize, int zSize)
-    {
-        if (humidities == null || humidities.length < xSize * zSize)
-        {
-            humidities = new double[xSize * zSize];
-        }
-
-        Arrays.fill(humidities, defaultHumidity);
-
-        return humidities;
-    }
-
-    @Override
-    public double[] getVarieties(double[] varieties, int x, int z, int xSize, int zSize) {
-        if (varieties == null || varieties.length < xSize * zSize)
-        {
-            varieties = new double[xSize * zSize];
-        }
-
-        Arrays.fill(varieties, defaultVariety);
-
-        return varieties;
-    }
-
-    @Override
-    public double[] getBiomenesses(double[] biomenesses, int x, int y, int z, int xSize, int ySize, int zSize)
-    {
-        if (biomenesses == null || biomenesses.length < xSize * ySize * zSize)
-        {
-            biomenesses = new double[xSize * ySize * zSize];
-        }
-
-        Arrays.fill(biomenesses, 1.0);
-
-        return biomenesses;
-    }
-
-    @Override
-    public Biome lookupBiome(double temperature, double humidity, double altitude, double variety)
-    {
-        return defaultBiome;
-    }
-}
+package net.minecraft.core.world.biome.provider;
+
+import net.minecraft.core.world.biome.Biome;
+
+import java.util.Arrays;
+
+public class BiomeProviderSingleBiome
+    extends BiomeProvider
+{
+    private final Biome defaultBiome;
+    private final double defaultTemperature;
+    private final double defaultHumidity;
+    private final double defaultVariety;
+
+    public BiomeProviderSingleBiome(Biome defaultBiome, double defaultTemperature, double defaultHumidity, double defaultVariety)
+    {
+        this.defaultBiome = defaultBiome;
+        this.defaultTemperature = defaultTemperature;
+        this.defaultHumidity = defaultHumidity;
+        this.defaultVariety = defaultVariety;
+    }
+
+    @Override
+    public Biome[] getBiomes(Biome[] biomes, double[] temperatures, double[] humidities, double[] varieties, int x, int y, int z, int xSize, int ySize, int zSize)
+    {
+        if (biomes == null || biomes.length != xSize * ySize * zSize)
+        {
+            biomes = new Biome[xSize * ySize * zSize];
+        }
+
+        Arrays.fill(biomes, defaultBiome);
+
+        return biomes;
+    }
+
+    @Override
+    public double[] getTemperatures(double[] temperatures, int x, int z, int xSize, int zSize)
+    {
+        if (temperatures == null || temperatures.length < xSize * zSize)
+        {
+            temperatures = new double[xSize * zSize];
+        }
+
+        Arrays.fill(temperatures, defaultTemperature);
+
+        return temperatures;
+    }
+
+    @Override
+    public double[] getHumidities(double[] humidities, int x, int z, int xSize, int zSize)
+    {
+        if (humidities == null || humidities.length < xSize * zSize)
+        {
+            humidities = new double[xSize * zSize];
+        }
+
+        Arrays.fill(humidities, defaultHumidity);
+
+        return humidities;
+    }
+
+    @Override
+    public double[] getVarieties(double[] varieties, int x, int z, int xSize, int zSize) {
+        if (varieties == null || varieties.length < xSize * zSize)
+        {
+            varieties = new double[xSize * zSize];
+        }
+
+        Arrays.fill(varieties, defaultVariety);
+
+        return varieties;
+    }
+
+    @Override
+    public double[] getBiomenesses(double[] biomenesses, int x, int y, int z, int xSize, int ySize, int zSize)
+    {
+        if (biomenesses == null || biomenesses.length < xSize * ySize * zSize)
+        {
+            biomenesses = new double[xSize * ySize * zSize];
+        }
+
+        Arrays.fill(biomenesses, 1.0);
+
+        return biomenesses;
+    }
+
+    @Override
+    public Biome lookupBiome(double temperature, double humidity, double altitude, double variety)
+    {
+        return defaultBiome;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/chunk/Chunk.java b/game/core/src/main/java/net/minecraft/core/world/chunk/Chunk.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/chunk/Chunk.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/Chunk.java
index 60c7ea72f..67c5a6bd4 100644
--- a/src/main/java/net/minecraft/core/world/chunk/Chunk.java
+++ b/game/core/src/main/java/net/minecraft/core/world/chunk/Chunk.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.world.chunk;
 
 import com.mojang.logging.LogUtils;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.util.helper.MathHelper;
@@ -100,7 +101,7 @@ public class Chunk
             for(int z = 0; z < CHUNK_SIZE_Z; z++)
             {
                 int y = CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y - 1;
-                while (y > 0 && Block.lightBlock[getBlockID(x, y - 1, z)] == 0) {
+                while (y > 0 && Blocks.lightBlock[getBlockID(x, y - 1, z)] == 0) {
                     y--;
                 }
                 setHeightValue(x, z, y);
@@ -130,7 +131,7 @@ public class Chunk
                     int skyLightValue = 15;
                     int lightY = (CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y) - 1;
                     do {
-                        skyLightValue -= Block.lightBlock[getBlockID(x, lightY, z) & 0x3fff];
+                        skyLightValue -= Blocks.lightBlock[getBlockID(x, lightY, z) & 0x3fff];
                         if(skyLightValue > 0) {
                             setBrightness(LightLayer.Sky, x, lightY, z, skyLightValue);
                         }
@@ -182,7 +183,7 @@ public class Chunk
         {
             iy = y;
         }
-        for(; iy > 0 && Block.lightBlock[getBlockID(x, iy - 1, z) & 0x3fff] == 0; iy--) { }
+        for(; iy > 0 && Blocks.lightBlock[getBlockID(x, iy - 1, z) & 0x3fff] == 0; iy--) { }
         if(iy == heightValue)
         {
             return;
@@ -233,7 +234,7 @@ public class Chunk
         while(iy > 0 && lightValue > 0)
         {
             iy--;
-            int lightBlock = Block.lightBlock[getBlockID(x, iy, z)];
+            int lightBlock = Blocks.lightBlock[getBlockID(x, iy, z)];
             if(lightBlock == 0)
             {
                 lightBlock = 1;
@@ -245,7 +246,7 @@ public class Chunk
             }
             setBrightness(LightLayer.Sky, x, iy, z, lightValue);
         }
-        for(; iy > 0 && Block.lightBlock[getBlockID(x, iy - 1, z)] == 0; iy--) { }
+        for(; iy > 0 && Blocks.lightBlock[getBlockID(x, iy - 1, z)] == 0; iy--) { }
         if(iy != lightY)
         {
             world.scheduleLightingUpdate(LightLayer.Sky, worldX - 1, iy, worldZ - 1, worldX + 1, lightY, worldZ + 1);
@@ -283,7 +284,7 @@ public class Chunk
 
         if(!world.worldType.hasCeiling())
         {
-            if(Block.lightBlock[id & 0x3fff] != 0) {
+            if(Blocks.lightBlock[id & 0x3fff] != 0) {
                 if(y >= heightValue) {
                     recalcHeight(x, y + 1, z);
                 }
@@ -322,12 +323,12 @@ public class Chunk
         int worldZ = zPosition * CHUNK_SIZE_Z + z;
         if(currentId != 0 && !world.isClientSide)
         {
-            Block.blocksList[currentId].onBlockRemoved(world, worldX, y, worldZ, currentData);
+            Blocks.blocksList[currentId].onBlockRemoved(world, worldX, y, worldZ, currentData);
         }
 
         if(!world.worldType.hasCeiling())
         {
-            if(Block.lightBlock[id & 0x3fff] != 0) {
+            if(Blocks.lightBlock[id & 0x3fff] != 0) {
                 if(y >= heightValue) {
                     recalcHeight(x, y + 1, z);
                 }
@@ -341,8 +342,8 @@ public class Chunk
         world.scheduleLightingUpdate(LightLayer.Block, worldX, y, worldZ, worldX, y, worldZ);
         lightGaps(x, z);
 
-        if(Block.getBlock(id) != null) {
-            Block.blocksList[id].onBlockPlacedByWorld(world, worldX, y, worldZ);
+        if(Blocks.getBlock(id) != null) {
+            Blocks.blocksList[id].onBlockPlacedByWorld(world, worldX, y, worldZ);
         }
 
         isModified = true;
@@ -456,6 +457,7 @@ public class Chunk
     public void addEntity(Entity entity)
     {
         hasEntities = true;
+        isModified = true;
         int x = MathHelper.floor(entity.x / CHUNK_SIZE_X);
         int z = MathHelper.floor(entity.z / CHUNK_SIZE_Z);
         if(x != xPosition || z != zPosition)
@@ -494,11 +496,11 @@ public class Chunk
         if(tileEntity == null)
         {
             int id = getBlockID(x, y, z);
-            if(!Block.isEntityTile[id])
+            if(!Blocks.isEntityTile[id])
             {
                 return null;
             }
-            BlockTileEntity tileEntityBlock = (BlockTileEntity)Block.blocksList[id];
+            BlockTileEntity tileEntityBlock = (BlockTileEntity)Blocks.blocksList[id];
             tileEntityBlock.onBlockPlacedByWorld(world, xPosition * CHUNK_SIZE_X + x, y, zPosition * CHUNK_SIZE_Z + z);
             tileEntity = blockEntityMap.get(pos);
         }
@@ -535,7 +537,7 @@ public class Chunk
         tileEntity.x = xPosition * CHUNK_SIZE_X + x;
         tileEntity.y = y;
         tileEntity.z = zPosition * CHUNK_SIZE_Z + z;
-        if (!(Block.blocksList[getBlockID(x, y, z)] instanceof BlockTileEntity))
+        if (!(Blocks.blocksList[getBlockID(x, y, z)] instanceof BlockTileEntity))
         {
             LOGGER.warn("Attempted to place a tile entity where there was no entity tile!");
             Thread.dumpStack();
diff --git a/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/chunk/ChunkCache.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java
index 0b1da4705..57918ce91 100644
--- a/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java
+++ b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkCache.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.world.chunk;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.block.material.Material;
 import net.minecraft.core.enums.LightLayer;
@@ -65,7 +66,7 @@ public class ChunkCache
 
     @Override
     public Block getBlock(int x, int y, int z) {
-        return Block.getBlock(getBlockId(x, y, z));
+        return Blocks.getBlock(getBlockId(x, y, z));
     }
 
     @Override
@@ -226,14 +227,14 @@ public class ChunkCache
             return Material.air;
         } else
         {
-            return Block.blocksList[l].blockMaterial;
+            return Blocks.blocksList[l].blockMaterial;
         }
     }
 
     @Override
 	public boolean isBlockOpaqueCube(int x, int y, int z)
     {
-        Block block = Block.blocksList[getBlockId(x, y, z)];
+        Block block = Blocks.blocksList[getBlockId(x, y, z)];
         if(block == null)
         {
             return false;
@@ -246,7 +247,7 @@ public class ChunkCache
     @Override
 	public boolean isBlockNormalCube(int x, int y, int z)
     {
-        Block block = Block.blocksList[getBlockId(x, y, z)];
+        Block block = Blocks.blocksList[getBlockId(x, y, z)];
         if(block == null)
         {
             return false;
diff --git a/src/main/java/net/minecraft/core/world/chunk/ChunkCoordinate.java b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkCoordinate.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/chunk/ChunkCoordinate.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/ChunkCoordinate.java
diff --git a/src/main/java/net/minecraft/core/world/chunk/ChunkCoordinates.java b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkCoordinates.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/chunk/ChunkCoordinates.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/ChunkCoordinates.java
diff --git a/src/main/java/net/minecraft/core/world/chunk/ChunkLoaderLegacy.java b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkLoaderLegacy.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/chunk/ChunkLoaderLegacy.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/ChunkLoaderLegacy.java
diff --git a/src/main/java/net/minecraft/core/world/chunk/ChunkLoaderRegion.java b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkLoaderRegion.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/chunk/ChunkLoaderRegion.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/ChunkLoaderRegion.java
diff --git a/src/main/java/net/minecraft/core/world/chunk/ChunkLoaderRegionAsync.java b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkLoaderRegionAsync.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/chunk/ChunkLoaderRegionAsync.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/ChunkLoaderRegionAsync.java
index c4d6edc21..31f4b3456 100644
--- a/src/main/java/net/minecraft/core/world/chunk/ChunkLoaderRegionAsync.java
+++ b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkLoaderRegionAsync.java
@@ -1,99 +1,99 @@
-package net.minecraft.core.world.chunk;
-
-import com.mojang.logging.LogUtils;
-import net.minecraft.core.world.World;
-import org.slf4j.Logger;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.LinkedList;
-import java.util.Queue;
-import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-
-public class ChunkLoaderRegionAsync
-    implements IChunkLoader
-{
-    private static final Logger LOGGER = LogUtils.getLogger();
-    private static final Queue<Chunk> chunksToSave = new LinkedList<>();
-    private static final Queue<World> worldsToSave = new LinkedList<>();
-    private static final Queue<ChunkLoaderRegion> chunkLoaders = new LinkedList<>();
-    private static final Lock lockChunksToSave = new ReentrantLock();
-    private static final Condition notEmpty = lockChunksToSave.newCondition();
-    private static final ChunkSaveThread chunkSaveThread;
-
-    static
-    {
-        chunkSaveThread = new ChunkSaveThread();
-        chunkSaveThread.start();
-        System.out.println("Spawned new chunk save thread!");
-    }
-
-    private final ChunkLoaderRegion chunkLoaderRegion;
-
-    public ChunkLoaderRegionAsync(File worldDir)
-    {
-        chunkLoaderRegion = new ChunkLoaderRegion(worldDir);
-    }
-
-    @Override
-    public Chunk loadChunk(World world, int x, int z) throws IOException
-    {
-        return chunkLoaderRegion.loadChunk(world, x, z);
-    }
-
-    @Override
-    public void saveChunk(World world, Chunk chunk)
-            throws IOException
-    {
-        lockChunksToSave.lock();
-        try
-        {
-            if (!chunksToSave.contains(chunk)) {
-                chunksToSave.add(chunk);
-                worldsToSave.add(world);
-                chunkLoaders.add(chunkLoaderRegion);
-                notEmpty.signal();
-            }
-        }
-        finally
-        {
-            lockChunksToSave.unlock();
-        }
-    }
-
-    @Override
-    public boolean isSaving() {
-        return !chunksToSave.isEmpty();
-    }
-
-    private static class ChunkSaveThread extends Thread
-    {
-        public volatile boolean shouldStop = false;
-
-        @Override
-        public void run()
-        {
-            while (!shouldStop)
-            {
-                // Save exactly one chunk from queue
-                lockChunksToSave.lock();
-                try {
-                    if (!chunksToSave.isEmpty()) {
-                        Chunk chunk = chunksToSave.remove();
-                        World world = worldsToSave.remove();
-                        ChunkLoaderRegion chunkLoaderRegion = chunkLoaders.remove();
-                        chunkLoaderRegion.saveChunk(world, chunk);
-                    } else {
-                        notEmpty.await();
-                    }
-                } catch (IOException | InterruptedException e) {
-                    LOGGER.error("Exception while attempting to save chunks in async loader", e);
-                } finally {
-                    lockChunksToSave.unlock();
-                }
-            }
-        }
-    }
-}
+package net.minecraft.core.world.chunk;
+
+import com.mojang.logging.LogUtils;
+import net.minecraft.core.world.World;
+import org.slf4j.Logger;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.LinkedList;
+import java.util.Queue;
+import java.util.concurrent.locks.Condition;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+public class ChunkLoaderRegionAsync
+    implements IChunkLoader
+{
+    private static final Logger LOGGER = LogUtils.getLogger();
+    private static final Queue<Chunk> chunksToSave = new LinkedList<>();
+    private static final Queue<World> worldsToSave = new LinkedList<>();
+    private static final Queue<ChunkLoaderRegion> chunkLoaders = new LinkedList<>();
+    private static final Lock lockChunksToSave = new ReentrantLock();
+    private static final Condition notEmpty = lockChunksToSave.newCondition();
+    private static final ChunkSaveThread chunkSaveThread;
+
+    static
+    {
+        chunkSaveThread = new ChunkSaveThread();
+        chunkSaveThread.start();
+        System.out.println("Spawned new chunk save thread!");
+    }
+
+    private final ChunkLoaderRegion chunkLoaderRegion;
+
+    public ChunkLoaderRegionAsync(File worldDir)
+    {
+        chunkLoaderRegion = new ChunkLoaderRegion(worldDir);
+    }
+
+    @Override
+    public Chunk loadChunk(World world, int x, int z) throws IOException
+    {
+        return chunkLoaderRegion.loadChunk(world, x, z);
+    }
+
+    @Override
+    public void saveChunk(World world, Chunk chunk)
+            throws IOException
+    {
+        lockChunksToSave.lock();
+        try
+        {
+            if (!chunksToSave.contains(chunk)) {
+                chunksToSave.add(chunk);
+                worldsToSave.add(world);
+                chunkLoaders.add(chunkLoaderRegion);
+                notEmpty.signal();
+            }
+        }
+        finally
+        {
+            lockChunksToSave.unlock();
+        }
+    }
+
+    @Override
+    public boolean isSaving() {
+        return !chunksToSave.isEmpty();
+    }
+
+    private static class ChunkSaveThread extends Thread
+    {
+        public volatile boolean shouldStop = false;
+
+        @Override
+        public void run()
+        {
+            while (!shouldStop)
+            {
+                // Save exactly one chunk from queue
+                lockChunksToSave.lock();
+                try {
+                    if (!chunksToSave.isEmpty()) {
+                        Chunk chunk = chunksToSave.remove();
+                        World world = worldsToSave.remove();
+                        ChunkLoaderRegion chunkLoaderRegion = chunkLoaders.remove();
+                        chunkLoaderRegion.saveChunk(world, chunk);
+                    } else {
+                        notEmpty.await();
+                    }
+                } catch (IOException | InterruptedException e) {
+                    LOGGER.error("Exception while attempting to save chunks in async loader", e);
+                } finally {
+                    lockChunksToSave.unlock();
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/chunk/ChunkPosition.java b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkPosition.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/chunk/ChunkPosition.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/ChunkPosition.java
diff --git a/src/main/java/net/minecraft/core/world/chunk/ChunkSection.java b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkSection.java
similarity index 99%
rename from src/main/java/net/minecraft/core/world/chunk/ChunkSection.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/ChunkSection.java
index c37d3ff2a..dd4557136 100644
--- a/src/main/java/net/minecraft/core/world/chunk/ChunkSection.java
+++ b/game/core/src/main/java/net/minecraft/core/world/chunk/ChunkSection.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.world.chunk;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.data.registry.Registries;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.enums.LightLayer;
@@ -60,7 +61,7 @@ public class ChunkSection {
     }
 
     public void setBlock(int x, int y, int z, int id) {
-        assert id == 0 || Block.getBlock(id) != null;
+        assert id == 0 || Blocks.getBlock(id) != null;
 
         if (x < 0 || x >= Chunk.CHUNK_SIZE_X || y < 0 || y >= SECTION_SIZE_Y || z < 0 || z >= Chunk.CHUNK_SIZE_Z) return;
         if (blocks == null && id == 0) {
diff --git a/src/main/java/net/minecraft/core/world/chunk/DisplayChunk.java b/game/core/src/main/java/net/minecraft/core/world/chunk/DisplayChunk.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/chunk/DisplayChunk.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/DisplayChunk.java
diff --git a/src/main/java/net/minecraft/core/world/chunk/EmptyChunk.java b/game/core/src/main/java/net/minecraft/core/world/chunk/EmptyChunk.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/chunk/EmptyChunk.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/EmptyChunk.java
diff --git a/src/main/java/net/minecraft/core/world/chunk/IChunkLoader.java b/game/core/src/main/java/net/minecraft/core/world/chunk/IChunkLoader.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/chunk/IChunkLoader.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/IChunkLoader.java
diff --git a/src/main/java/net/minecraft/core/world/chunk/LightUpdate.java b/game/core/src/main/java/net/minecraft/core/world/chunk/LightUpdate.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/chunk/LightUpdate.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/LightUpdate.java
index c60aea73e..44cb500f6 100644
--- a/src/main/java/net/minecraft/core/world/chunk/LightUpdate.java
+++ b/game/core/src/main/java/net/minecraft/core/world/chunk/LightUpdate.java
@@ -2,6 +2,7 @@ package net.minecraft.core.world.chunk;
 
 import com.mojang.logging.LogUtils;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.enums.LightLayer;
 import net.minecraft.core.world.World;
 import org.slf4j.Logger;
@@ -73,7 +74,7 @@ public class LightUpdate
                     int savedLightValue = world.getSavedLightValue(layer, x, y, z);
                     int newLightValue;
                     int blockId = world.getBlockId(x, y, z);
-                    int blockLightOpacity = Block.lightBlock[blockId];
+                    int blockLightOpacity = Blocks.lightBlock[blockId];
 
                     if(blockLightOpacity == 0)
                     {
@@ -90,7 +91,7 @@ public class LightUpdate
                     }
                     else if(layer == LightLayer.Block)
                     {
-                        blockLightValue = Block.lightEmission[blockId];
+                        blockLightValue = Blocks.lightEmission[blockId];
                     }
 
                     if(blockLightOpacity >= 15 && blockLightValue == 0)
diff --git a/src/main/java/net/minecraft/core/world/chunk/MissingBlockFixer.java b/game/core/src/main/java/net/minecraft/core/world/chunk/MissingBlockFixer.java
similarity index 78%
rename from src/main/java/net/minecraft/core/world/chunk/MissingBlockFixer.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/MissingBlockFixer.java
index 51f828601..ec62e906c 100644
--- a/src/main/java/net/minecraft/core/world/chunk/MissingBlockFixer.java
+++ b/game/core/src/main/java/net/minecraft/core/world/chunk/MissingBlockFixer.java
@@ -1,7 +1,7 @@
 package net.minecraft.core.world.chunk;
 
 import com.mojang.logging.LogUtils;
-import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import org.slf4j.Logger;
 
 public class MissingBlockFixer
@@ -23,13 +23,13 @@ public class MissingBlockFixer
 
     static 
     {
-        blocksArray = new short[Block.blocksList.length];
+        blocksArray = new short[Blocks.blocksList.length];
         try
         {
-            for (int i = 0; i < Block.blocksList.length; i++)
+            for (int i = 0; i < Blocks.blocksList.length; i++)
             {
                 short id = (short)i;
-                if(id != 0 && Block.blocksList[id & 0x3FFF] == null)
+                if(id != 0 && Blocks.blocksList[id & 0x3FFF] == null)
                 {
                 	id = 0;
                 }
diff --git a/src/main/java/net/minecraft/core/world/chunk/provider/IChunkProvider.java b/game/core/src/main/java/net/minecraft/core/world/chunk/provider/IChunkProvider.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/chunk/provider/IChunkProvider.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/provider/IChunkProvider.java
diff --git a/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReader.java b/game/core/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReader.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/chunk/reader/ChunkReader.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReader.java
index 7783be806..75a371da3 100644
--- a/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReader.java
+++ b/game/core/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReader.java
@@ -1,33 +1,33 @@
-package net.minecraft.core.world.chunk.reader;
-
-import com.mojang.nbt.CompoundTag;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.data.ChunkNibbleArray;
-import net.minecraft.core.world.data.ChunkUnsignedByteArray;
-
-import java.util.Map;
-
-public abstract class ChunkReader
-{
-    protected final CompoundTag tag;
-    protected final World world;
-
-    public ChunkReader(World world, CompoundTag chunkTag)
-    {
-        this.world = world;
-        this.tag = chunkTag;
-    }
-    public abstract int getX();
-    public abstract int getZ();
-    public abstract short[] getBlocks(int ySection);
-    public abstract ChunkUnsignedByteArray getData(int ySection);
-    public abstract ChunkNibbleArray getSkyLight(int ySection);
-    public abstract ChunkNibbleArray getBlockLight(int ySection);
-    public abstract short[] getHeightMap();
-    public abstract int getAverageBlockHeight();
-    public abstract boolean getIsTerrainPopulated();
-    public abstract double[] getTemperatureMap();
-    public abstract double[] getHumidityMap();
-    public abstract byte[] getBiomeMap(int ySection, Map<Integer, String> biomeRegistry);
-    public abstract Map<Integer, String> getBiomeRegistry();
-}
+package net.minecraft.core.world.chunk.reader;
+
+import com.mojang.nbt.CompoundTag;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.data.ChunkNibbleArray;
+import net.minecraft.core.world.data.ChunkUnsignedByteArray;
+
+import java.util.Map;
+
+public abstract class ChunkReader
+{
+    protected final CompoundTag tag;
+    protected final World world;
+
+    public ChunkReader(World world, CompoundTag chunkTag)
+    {
+        this.world = world;
+        this.tag = chunkTag;
+    }
+    public abstract int getX();
+    public abstract int getZ();
+    public abstract short[] getBlocks(int ySection);
+    public abstract ChunkUnsignedByteArray getData(int ySection);
+    public abstract ChunkNibbleArray getSkyLight(int ySection);
+    public abstract ChunkNibbleArray getBlockLight(int ySection);
+    public abstract short[] getHeightMap();
+    public abstract int getAverageBlockHeight();
+    public abstract boolean getIsTerrainPopulated();
+    public abstract double[] getTemperatureMap();
+    public abstract double[] getHumidityMap();
+    public abstract byte[] getBiomeMap(int ySection, Map<Integer, String> biomeRegistry);
+    public abstract Map<Integer, String> getBiomeRegistry();
+}
diff --git a/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderLegacy.java b/game/core/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderLegacy.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderLegacy.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderLegacy.java
index e6833d784..6c755740e 100644
--- a/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderLegacy.java
+++ b/game/core/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderLegacy.java
@@ -1,196 +1,196 @@
-package net.minecraft.core.world.chunk.reader;
-
-import com.mojang.nbt.CompoundTag;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.chunk.ChunkSection;
-import net.minecraft.core.world.data.ChunkNibbleArray;
-import net.minecraft.core.world.data.ChunkUnsignedByteArray;
-
-import java.util.Map;
-
-public class ChunkReaderLegacy
-    extends ChunkReader
-{
-    private final short[] blocks;
-    private final byte[] data;
-    private final byte[] skylight;
-    private final byte[] blocklight;
-
-    private static int makeBlockIndex(int x, int y, int z)
-    {
-        return (x * 16 * 256) + (z * 256) + y;
-    }
-
-    private static int makeNibbleIndex(int x, int y, int z)
-    {
-        return (x * 16 * 256) + (z * 256) + y;
-    }
-
-    public ChunkReaderLegacy(World world, CompoundTag tag)
-    {
-        super(world, tag);
-
-        blocks = tag.getShortArrayOrDefault("Blocks", null);
-        data = tag.getByteArrayOrDefault("Data", null);
-        skylight = tag.getByteArrayOrDefault("SkyLight", null);
-        blocklight = tag.getByteArrayOrDefault("BlockLight", null);
-    }
-
-    @Override
-    public int getX()
-    {
-        return tag.getInteger("xPos");
-    }
-
-    @Override
-    public int getZ()
-    {
-        return tag.getInteger("zPos");
-    }
-
-    @Override
-    public short[] getBlocks(int ySection)
-    {
-        short[] newBlocks = new short[Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z];
-
-        if (blocks != null && makeBlockIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < blocks.length) {
-            for (int x = 0; x < 16; x++) {
-                for (int z = 0; z < 16; z++) {
-                    for (int y = 0; y < 16; y++) {
-                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
-                        short id = this.blocks[makeBlockIndex(x, yOffset + y, z)];
-                        newBlocks[ChunkSection.makeBlockIndex(x, y, z)] = id;
-                    }
-                }
-            }
-        }
-
-        return newBlocks;
-    }
-
-    @Override
-    public ChunkUnsignedByteArray getData(int ySection)
-    {
-        byte[] newData = new byte[Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z];
-        ChunkUnsignedByteArray array = new ChunkUnsignedByteArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newData);
-
-        if (data != null && makeBlockIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < data.length) {
-            for (int x = 0; x < 16; x++) {
-                for (int z = 0; z < 16; z++) {
-                    for (int y = 0; y < 16; y++) {
-                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
-                        byte data = this.data[makeBlockIndex(x, yOffset + y, z)];
-                        array.set(x, y, z, Byte.toUnsignedInt(data));
-                    }
-                }
-            }
-        }
-
-        return array;
-    }
-
-    @Override
-    public ChunkNibbleArray getSkyLight(int ySection)
-    {
-        byte[] newSkyLight = new byte[(Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z) >> 1];
-        ChunkNibbleArray array = new ChunkNibbleArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newSkyLight);
-
-        if (skylight != null && makeNibbleIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < skylight.length * 2) {
-            for (int x = 0; x < 16; x++) {
-                for (int z = 0; z < 16; z++) {
-                    for (int y = 0; y < 16; y++) {
-                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
-                        int index = makeNibbleIndex(x, yOffset + y, z);
-                        int nibbleIndex = index >> 1;
-                        int nibblePart = index & 0x01;
-                        int nibble;
-                        if (nibblePart == 0) {
-                            nibble = Byte.toUnsignedInt(skylight[nibbleIndex]) & 0x0F;
-                        } else {
-                            nibble = (Byte.toUnsignedInt(skylight[nibbleIndex]) >> 4) & 0x0F;
-                        }
-                        array.set(x, y, z, nibble);
-                    }
-                }
-            }
-        }
-
-        return array;
-    }
-
-    @Override
-    public ChunkNibbleArray getBlockLight(int ySection)
-    {
-        byte[] newBlockLight = new byte[(Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z) >> 1];
-        ChunkNibbleArray array = new ChunkNibbleArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newBlockLight);
-
-        if (blocklight != null && makeNibbleIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < blocklight.length * 2) {
-            for (int x = 0; x < 16; x++) {
-                for (int z = 0; z < 16; z++) {
-                    for (int y = 0; y < 16; y++) {
-                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
-                        int index = makeNibbleIndex(x, yOffset + y, z);
-                        int nibbleIndex = index >> 1;
-                        int nibblePart = index & 0x01;
-                        int nibble;
-                        if (nibblePart == 0) {
-                            nibble = Byte.toUnsignedInt(blocklight[nibbleIndex]) & 0x0F;
-                        } else {
-                            nibble = (Byte.toUnsignedInt(blocklight[nibbleIndex]) >> 4) & 0x0F;
-                        }
-                        array.set(x, y, z, nibble);
-                    }
-                }
-            }
-        }
-
-        return array;
-    }
-
-    @Override
-    public short[] getHeightMap()
-    {
-        return tag.getShortArrayOrDefault("HeightMap", null);
-    }
-
-    @Override
-    public int getAverageBlockHeight()
-    {
-        // Not supported
-        return -1;
-    }
-
-    @Override
-    public boolean getIsTerrainPopulated()
-    {
-        return tag.getBoolean("TerrainPopulated");
-    }
-
-    @Override
-    public double[] getTemperatureMap()
-    {
-        // Not supported
-        return null;
-    }
-
-    @Override
-    public double[] getHumidityMap()
-    {
-        // Not supported
-        return null;
-    }
-
-    @Override
-    public byte[] getBiomeMap(int ySection, Map<Integer, String> biomeRegistry)
-    {
-        // Not supported
-        return null;
-    }
-
-    @Override
-    public Map<Integer, String> getBiomeRegistry() {
-        // Not supported
-        return null;
-    }
-}
+package net.minecraft.core.world.chunk.reader;
+
+import com.mojang.nbt.CompoundTag;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.chunk.ChunkSection;
+import net.minecraft.core.world.data.ChunkNibbleArray;
+import net.minecraft.core.world.data.ChunkUnsignedByteArray;
+
+import java.util.Map;
+
+public class ChunkReaderLegacy
+    extends ChunkReader
+{
+    private final short[] blocks;
+    private final byte[] data;
+    private final byte[] skylight;
+    private final byte[] blocklight;
+
+    private static int makeBlockIndex(int x, int y, int z)
+    {
+        return (x * 16 * 256) + (z * 256) + y;
+    }
+
+    private static int makeNibbleIndex(int x, int y, int z)
+    {
+        return (x * 16 * 256) + (z * 256) + y;
+    }
+
+    public ChunkReaderLegacy(World world, CompoundTag tag)
+    {
+        super(world, tag);
+
+        blocks = tag.getShortArrayOrDefault("Blocks", null);
+        data = tag.getByteArrayOrDefault("Data", null);
+        skylight = tag.getByteArrayOrDefault("SkyLight", null);
+        blocklight = tag.getByteArrayOrDefault("BlockLight", null);
+    }
+
+    @Override
+    public int getX()
+    {
+        return tag.getInteger("xPos");
+    }
+
+    @Override
+    public int getZ()
+    {
+        return tag.getInteger("zPos");
+    }
+
+    @Override
+    public short[] getBlocks(int ySection)
+    {
+        short[] newBlocks = new short[Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z];
+
+        if (blocks != null && makeBlockIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < blocks.length) {
+            for (int x = 0; x < 16; x++) {
+                for (int z = 0; z < 16; z++) {
+                    for (int y = 0; y < 16; y++) {
+                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
+                        short id = this.blocks[makeBlockIndex(x, yOffset + y, z)];
+                        newBlocks[ChunkSection.makeBlockIndex(x, y, z)] = id;
+                    }
+                }
+            }
+        }
+
+        return newBlocks;
+    }
+
+    @Override
+    public ChunkUnsignedByteArray getData(int ySection)
+    {
+        byte[] newData = new byte[Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z];
+        ChunkUnsignedByteArray array = new ChunkUnsignedByteArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newData);
+
+        if (data != null && makeBlockIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < data.length) {
+            for (int x = 0; x < 16; x++) {
+                for (int z = 0; z < 16; z++) {
+                    for (int y = 0; y < 16; y++) {
+                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
+                        byte data = this.data[makeBlockIndex(x, yOffset + y, z)];
+                        array.set(x, y, z, Byte.toUnsignedInt(data));
+                    }
+                }
+            }
+        }
+
+        return array;
+    }
+
+    @Override
+    public ChunkNibbleArray getSkyLight(int ySection)
+    {
+        byte[] newSkyLight = new byte[(Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z) >> 1];
+        ChunkNibbleArray array = new ChunkNibbleArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newSkyLight);
+
+        if (skylight != null && makeNibbleIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < skylight.length * 2) {
+            for (int x = 0; x < 16; x++) {
+                for (int z = 0; z < 16; z++) {
+                    for (int y = 0; y < 16; y++) {
+                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
+                        int index = makeNibbleIndex(x, yOffset + y, z);
+                        int nibbleIndex = index >> 1;
+                        int nibblePart = index & 0x01;
+                        int nibble;
+                        if (nibblePart == 0) {
+                            nibble = Byte.toUnsignedInt(skylight[nibbleIndex]) & 0x0F;
+                        } else {
+                            nibble = (Byte.toUnsignedInt(skylight[nibbleIndex]) >> 4) & 0x0F;
+                        }
+                        array.set(x, y, z, nibble);
+                    }
+                }
+            }
+        }
+
+        return array;
+    }
+
+    @Override
+    public ChunkNibbleArray getBlockLight(int ySection)
+    {
+        byte[] newBlockLight = new byte[(Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z) >> 1];
+        ChunkNibbleArray array = new ChunkNibbleArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newBlockLight);
+
+        if (blocklight != null && makeNibbleIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < blocklight.length * 2) {
+            for (int x = 0; x < 16; x++) {
+                for (int z = 0; z < 16; z++) {
+                    for (int y = 0; y < 16; y++) {
+                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
+                        int index = makeNibbleIndex(x, yOffset + y, z);
+                        int nibbleIndex = index >> 1;
+                        int nibblePart = index & 0x01;
+                        int nibble;
+                        if (nibblePart == 0) {
+                            nibble = Byte.toUnsignedInt(blocklight[nibbleIndex]) & 0x0F;
+                        } else {
+                            nibble = (Byte.toUnsignedInt(blocklight[nibbleIndex]) >> 4) & 0x0F;
+                        }
+                        array.set(x, y, z, nibble);
+                    }
+                }
+            }
+        }
+
+        return array;
+    }
+
+    @Override
+    public short[] getHeightMap()
+    {
+        return tag.getShortArrayOrDefault("HeightMap", null);
+    }
+
+    @Override
+    public int getAverageBlockHeight()
+    {
+        // Not supported
+        return -1;
+    }
+
+    @Override
+    public boolean getIsTerrainPopulated()
+    {
+        return tag.getBoolean("TerrainPopulated");
+    }
+
+    @Override
+    public double[] getTemperatureMap()
+    {
+        // Not supported
+        return null;
+    }
+
+    @Override
+    public double[] getHumidityMap()
+    {
+        // Not supported
+        return null;
+    }
+
+    @Override
+    public byte[] getBiomeMap(int ySection, Map<Integer, String> biomeRegistry)
+    {
+        // Not supported
+        return null;
+    }
+
+    @Override
+    public Map<Integer, String> getBiomeRegistry() {
+        // Not supported
+        return null;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderVersion1.java b/game/core/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderVersion1.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderVersion1.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderVersion1.java
index 0cf3a3dac..a15c1f7cc 100644
--- a/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderVersion1.java
+++ b/game/core/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderVersion1.java
@@ -1,233 +1,233 @@
-package net.minecraft.core.world.chunk.reader;
-
-import com.mojang.nbt.CompoundTag;
-import net.minecraft.core.data.registry.Registries;
-import net.minecraft.core.data.registry.Registry;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.chunk.ChunkSection;
-import net.minecraft.core.world.data.ChunkNibbleArray;
-import net.minecraft.core.world.data.ChunkUnsignedByteArray;
-
-import java.util.Map;
-
-public class ChunkReaderVersion1
-    extends ChunkReader
-{
-    private final short[] blocks;
-    private final byte[] data;
-    private final byte[] skylight;
-    private final byte[] blocklight;
-    private final byte[] biome;
-
-    private static int makeBlockIndex(int x, int y, int z) {
-        return (x * 16 * 256) + (z * 256) + y;
-    }
-
-    public static int makeBiomeIndex(int x, int y, int z) {
-        return ((y >> 3) * 16 * 16) + (x * 16) + z;
-    }
-
-    private static int makeNibbleIndex(int x, int y, int z) {
-        return (x * 16 * 256) + (z * 256) + y;
-    }
-
-    public ChunkReaderVersion1(World world, CompoundTag tag)
-    {
-        super(world, tag);
-
-        blocks = tag.getShortArrayOrDefault("Blocks", null);
-        data = tag.getByteArrayOrDefault("Data", null);
-        skylight = tag.getByteArrayOrDefault("SkyLight", null);
-        blocklight = tag.getByteArrayOrDefault("BlockLight", null);
-        biome = tag.getByteArrayOrDefault("BiomeMap", null);
-    }
-
-    @Override
-    public int getX()
-    {
-        return tag.getInteger("xPos");
-    }
-
-    @Override
-    public int getZ()
-    {
-        return tag.getInteger("zPos");
-    }
-
-    @Override
-    public short[] getBlocks(int ySection)
-    {
-        short[] newBlocks = new short[Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z];
-
-        if (blocks != null && makeBlockIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < blocks.length) {
-            for (int x = 0; x < 16; x++) {
-                for (int z = 0; z < 16; z++) {
-                    for (int y = 0; y < 16; y++) {
-                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
-                        short id = this.blocks[makeBlockIndex(x, yOffset + y, z)];
-                        newBlocks[ChunkSection.makeBlockIndex(x, y, z)] = id;
-                    }
-                }
-            }
-        }
-
-        return newBlocks;
-    }
-
-    @Override
-    public ChunkUnsignedByteArray getData(int ySection)
-    {
-        byte[] newData = new byte[Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z];
-        ChunkUnsignedByteArray array = new ChunkUnsignedByteArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newData);
-
-        if (data != null && makeBlockIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < data.length) {
-            for (int x = 0; x < 16; x++) {
-                for (int z = 0; z < 16; z++) {
-                    for (int y = 0; y < 16; y++) {
-                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
-                        byte data = this.data[makeBlockIndex(x, yOffset + y, z)];
-                        array.set(x, y, z, Byte.toUnsignedInt(data));
-                    }
-                }
-            }
-        }
-
-        return array;
-    }
-
-    @Override
-    public ChunkNibbleArray getSkyLight(int ySection)
-    {
-        byte[] newSkyLight = new byte[(Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z) >> 1];
-        ChunkNibbleArray array = new ChunkNibbleArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newSkyLight);
-
-        if (skylight != null && makeNibbleIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < skylight.length * 2) {
-            for (int x = 0; x < 16; x++) {
-                for (int z = 0; z < 16; z++) {
-                    for (int y = 0; y < 16; y++) {
-                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
-                        int index = makeNibbleIndex(x, yOffset + y, z);
-                        int nibbleIndex = index >> 1;
-                        int nibblePart = index & 0x01;
-                        int nibble;
-                        if (nibblePart == 0) {
-                            nibble = Byte.toUnsignedInt(skylight[nibbleIndex]) & 0x0F;
-                        } else {
-                            nibble = (Byte.toUnsignedInt(skylight[nibbleIndex]) >> 4) & 0x0F;
-                        }
-                        array.set(x, y, z, nibble);
-                    }
-                }
-            }
-        }
-
-        return array;
-    }
-
-    @Override
-    public ChunkNibbleArray getBlockLight(int ySection)
-    {
-        byte[] newBlockLight = new byte[(Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z) >> 1];
-        ChunkNibbleArray array = new ChunkNibbleArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newBlockLight);
-
-        if (blocklight != null && makeNibbleIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < blocklight.length * 2) {
-            for (int x = 0; x < 16; x++) {
-                for (int z = 0; z < 16; z++) {
-                    for (int y = 0; y < 16; y++) {
-                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
-                        int index = makeNibbleIndex(x, yOffset + y, z);
-                        int nibbleIndex = index >> 1;
-                        int nibblePart = index & 0x01;
-                        int nibble;
-                        if (nibblePart == 0) {
-                            nibble = Byte.toUnsignedInt(blocklight[nibbleIndex]) & 0x0F;
-                        } else {
-                            nibble = (Byte.toUnsignedInt(blocklight[nibbleIndex]) >> 4) & 0x0F;
-                        }
-                        array.set(x, y, z, nibble);
-                    }
-                }
-            }
-        }
-
-        return array;
-    }
-
-    @Override
-    public short[] getHeightMap()
-    {
-        return tag.getShortArrayOrDefault("HeightMap", null);
-    }
-
-    @Override
-    public int getAverageBlockHeight()
-    {
-        return tag.getInteger("AverageBlockHeight");
-    }
-
-    @Override
-    public boolean getIsTerrainPopulated()
-    {
-        return tag.getBoolean("TerrainPopulated");
-    }
-
-    @Override
-    public double[] getTemperatureMap()
-    {
-        return tag.getDoubleArray("TemperatureMap");
-    }
-
-    @Override
-    public double[] getHumidityMap()
-    {
-        return tag.getDoubleArray("HumidityMap");
-    }
-
-    @Override
-    public byte[] getBiomeMap(int ySection, Map<Integer, String> biomeRegistry)
-    {
-        byte[] newBiomes = new byte[Chunk.CHUNK_SIZE_X * (ChunkSection.SECTION_SIZE_Y >> 3) * Chunk.CHUNK_SIZE_Z];
-
-        if (biome != null && makeBiomeIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < biome.length) {
-            for (int x = 0; x < 16; x++) {
-                for (int z = 0; z < 16; z++) {
-                    for (int y = 0; y < 16; y++) {
-                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
-                        byte oldBiomeId = biome[makeBiomeIndex(x, yOffset + y, z)];
-                        if (oldBiomeId < 0) {
-                            newBiomes[ChunkSection.makeBiomeIndex(x, y, z)] = oldBiomeId;
-                        } else {
-                            try {
-                                byte newBiomeId = (byte) Registries.BIOMES.getNumericIdOfItem(Registries.BIOMES.getItem(biomeRegistry.get((int) oldBiomeId)));
-                                newBiomes[ChunkSection.makeBiomeIndex(x, y, z)] = newBiomeId;
-                            } catch (NullPointerException n){
-                                newBiomes[ChunkSection.makeBiomeIndex(x, y, z)] = -1;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        return newBiomes;
-    }
-
-    @Override
-    public Map<Integer, String> getBiomeRegistry() {
-        CompoundTag registriesTag = tag.getCompoundOrDefault("Registries", null);
-        CompoundTag biomesTag = null;
-        if (registriesTag != null)
-        {
-            biomesTag = registriesTag.getCompoundOrDefault("Biomes", null);
-        }
-
-        if (registriesTag == null || biomesTag == null)
-        {
-            // Give up on conversion as we can't really interpret this data meaningfully
-            return null;
-        }
-
-        return Registry.readIdMapFromTag(biomesTag);
-    }
-}
+package net.minecraft.core.world.chunk.reader;
+
+import com.mojang.nbt.CompoundTag;
+import net.minecraft.core.data.registry.Registries;
+import net.minecraft.core.data.registry.Registry;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.chunk.ChunkSection;
+import net.minecraft.core.world.data.ChunkNibbleArray;
+import net.minecraft.core.world.data.ChunkUnsignedByteArray;
+
+import java.util.Map;
+
+public class ChunkReaderVersion1
+    extends ChunkReader
+{
+    private final short[] blocks;
+    private final byte[] data;
+    private final byte[] skylight;
+    private final byte[] blocklight;
+    private final byte[] biome;
+
+    private static int makeBlockIndex(int x, int y, int z) {
+        return (x * 16 * 256) + (z * 256) + y;
+    }
+
+    public static int makeBiomeIndex(int x, int y, int z) {
+        return ((y >> 3) * 16 * 16) + (x * 16) + z;
+    }
+
+    private static int makeNibbleIndex(int x, int y, int z) {
+        return (x * 16 * 256) + (z * 256) + y;
+    }
+
+    public ChunkReaderVersion1(World world, CompoundTag tag)
+    {
+        super(world, tag);
+
+        blocks = tag.getShortArrayOrDefault("Blocks", null);
+        data = tag.getByteArrayOrDefault("Data", null);
+        skylight = tag.getByteArrayOrDefault("SkyLight", null);
+        blocklight = tag.getByteArrayOrDefault("BlockLight", null);
+        biome = tag.getByteArrayOrDefault("BiomeMap", null);
+    }
+
+    @Override
+    public int getX()
+    {
+        return tag.getInteger("xPos");
+    }
+
+    @Override
+    public int getZ()
+    {
+        return tag.getInteger("zPos");
+    }
+
+    @Override
+    public short[] getBlocks(int ySection)
+    {
+        short[] newBlocks = new short[Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z];
+
+        if (blocks != null && makeBlockIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < blocks.length) {
+            for (int x = 0; x < 16; x++) {
+                for (int z = 0; z < 16; z++) {
+                    for (int y = 0; y < 16; y++) {
+                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
+                        short id = this.blocks[makeBlockIndex(x, yOffset + y, z)];
+                        newBlocks[ChunkSection.makeBlockIndex(x, y, z)] = id;
+                    }
+                }
+            }
+        }
+
+        return newBlocks;
+    }
+
+    @Override
+    public ChunkUnsignedByteArray getData(int ySection)
+    {
+        byte[] newData = new byte[Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z];
+        ChunkUnsignedByteArray array = new ChunkUnsignedByteArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newData);
+
+        if (data != null && makeBlockIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < data.length) {
+            for (int x = 0; x < 16; x++) {
+                for (int z = 0; z < 16; z++) {
+                    for (int y = 0; y < 16; y++) {
+                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
+                        byte data = this.data[makeBlockIndex(x, yOffset + y, z)];
+                        array.set(x, y, z, Byte.toUnsignedInt(data));
+                    }
+                }
+            }
+        }
+
+        return array;
+    }
+
+    @Override
+    public ChunkNibbleArray getSkyLight(int ySection)
+    {
+        byte[] newSkyLight = new byte[(Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z) >> 1];
+        ChunkNibbleArray array = new ChunkNibbleArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newSkyLight);
+
+        if (skylight != null && makeNibbleIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < skylight.length * 2) {
+            for (int x = 0; x < 16; x++) {
+                for (int z = 0; z < 16; z++) {
+                    for (int y = 0; y < 16; y++) {
+                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
+                        int index = makeNibbleIndex(x, yOffset + y, z);
+                        int nibbleIndex = index >> 1;
+                        int nibblePart = index & 0x01;
+                        int nibble;
+                        if (nibblePart == 0) {
+                            nibble = Byte.toUnsignedInt(skylight[nibbleIndex]) & 0x0F;
+                        } else {
+                            nibble = (Byte.toUnsignedInt(skylight[nibbleIndex]) >> 4) & 0x0F;
+                        }
+                        array.set(x, y, z, nibble);
+                    }
+                }
+            }
+        }
+
+        return array;
+    }
+
+    @Override
+    public ChunkNibbleArray getBlockLight(int ySection)
+    {
+        byte[] newBlockLight = new byte[(Chunk.CHUNK_SIZE_X * ChunkSection.SECTION_SIZE_Y * Chunk.CHUNK_SIZE_Z) >> 1];
+        ChunkNibbleArray array = new ChunkNibbleArray(Chunk.CHUNK_SIZE_X, ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, newBlockLight);
+
+        if (blocklight != null && makeNibbleIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < blocklight.length * 2) {
+            for (int x = 0; x < 16; x++) {
+                for (int z = 0; z < 16; z++) {
+                    for (int y = 0; y < 16; y++) {
+                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
+                        int index = makeNibbleIndex(x, yOffset + y, z);
+                        int nibbleIndex = index >> 1;
+                        int nibblePart = index & 0x01;
+                        int nibble;
+                        if (nibblePart == 0) {
+                            nibble = Byte.toUnsignedInt(blocklight[nibbleIndex]) & 0x0F;
+                        } else {
+                            nibble = (Byte.toUnsignedInt(blocklight[nibbleIndex]) >> 4) & 0x0F;
+                        }
+                        array.set(x, y, z, nibble);
+                    }
+                }
+            }
+        }
+
+        return array;
+    }
+
+    @Override
+    public short[] getHeightMap()
+    {
+        return tag.getShortArrayOrDefault("HeightMap", null);
+    }
+
+    @Override
+    public int getAverageBlockHeight()
+    {
+        return tag.getInteger("AverageBlockHeight");
+    }
+
+    @Override
+    public boolean getIsTerrainPopulated()
+    {
+        return tag.getBoolean("TerrainPopulated");
+    }
+
+    @Override
+    public double[] getTemperatureMap()
+    {
+        return tag.getDoubleArray("TemperatureMap");
+    }
+
+    @Override
+    public double[] getHumidityMap()
+    {
+        return tag.getDoubleArray("HumidityMap");
+    }
+
+    @Override
+    public byte[] getBiomeMap(int ySection, Map<Integer, String> biomeRegistry)
+    {
+        byte[] newBiomes = new byte[Chunk.CHUNK_SIZE_X * (ChunkSection.SECTION_SIZE_Y >> 3) * Chunk.CHUNK_SIZE_Z];
+
+        if (biome != null && makeBiomeIndex(15, (ySection * ChunkSection.SECTION_SIZE_Y) + 15, 15) < biome.length) {
+            for (int x = 0; x < 16; x++) {
+                for (int z = 0; z < 16; z++) {
+                    for (int y = 0; y < 16; y++) {
+                        int yOffset = ySection * ChunkSection.SECTION_SIZE_Y;
+                        byte oldBiomeId = biome[makeBiomeIndex(x, yOffset + y, z)];
+                        if (oldBiomeId < 0) {
+                            newBiomes[ChunkSection.makeBiomeIndex(x, y, z)] = oldBiomeId;
+                        } else {
+                            try {
+                                byte newBiomeId = (byte) Registries.BIOMES.getNumericIdOfItem(Registries.BIOMES.getItem(biomeRegistry.get((int) oldBiomeId)));
+                                newBiomes[ChunkSection.makeBiomeIndex(x, y, z)] = newBiomeId;
+                            } catch (NullPointerException n){
+                                newBiomes[ChunkSection.makeBiomeIndex(x, y, z)] = -1;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return newBiomes;
+    }
+
+    @Override
+    public Map<Integer, String> getBiomeRegistry() {
+        CompoundTag registriesTag = tag.getCompoundOrDefault("Registries", null);
+        CompoundTag biomesTag = null;
+        if (registriesTag != null)
+        {
+            biomesTag = registriesTag.getCompoundOrDefault("Biomes", null);
+        }
+
+        if (registriesTag == null || biomesTag == null)
+        {
+            // Give up on conversion as we can't really interpret this data meaningfully
+            return null;
+        }
+
+        return Registry.readIdMapFromTag(biomesTag);
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderVersion2.java b/game/core/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderVersion2.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderVersion2.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/reader/ChunkReaderVersion2.java
diff --git a/src/main/java/net/minecraft/core/world/chunk/writer/ChunkWriter.java b/game/core/src/main/java/net/minecraft/core/world/chunk/writer/ChunkWriter.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/chunk/writer/ChunkWriter.java
rename to game/core/src/main/java/net/minecraft/core/world/chunk/writer/ChunkWriter.java
index 88f2a2232..616c73f78 100644
--- a/src/main/java/net/minecraft/core/world/chunk/writer/ChunkWriter.java
+++ b/game/core/src/main/java/net/minecraft/core/world/chunk/writer/ChunkWriter.java
@@ -1,121 +1,121 @@
-package net.minecraft.core.world.chunk.writer;
-
-import com.mojang.nbt.CompoundTag;
-import com.mojang.nbt.ListTag;
-import com.mojang.nbt.Tag;
-import net.minecraft.core.data.registry.Registries;
-import net.minecraft.core.data.registry.Registry;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.data.ChunkNibbleArray;
-import net.minecraft.core.world.data.ChunkUnsignedByteArray;
-
-public class ChunkWriter
-{
-    private final World world;
-    private final CompoundTag tag;
-    private final ListTag sectionsTag;
-
-    public ChunkWriter(World world, CompoundTag tag)
-    {
-        this.world = world;
-        this.tag = tag;
-
-        if (this.tag.containsKey("Sections")) {
-            this.sectionsTag = this.tag.getList("Sections");
-        } else {
-            this.sectionsTag = new ListTag();
-            this.tag.putList("Sections", this.sectionsTag);
-        }
-    }
-
-    private CompoundTag findSection(int ySection) {
-        for (Tag<?> tag : this.sectionsTag) {
-            if (tag instanceof CompoundTag) {
-                CompoundTag cTag = (CompoundTag) tag;
-                int tagY = cTag.getInteger("yPos");
-                if (tagY == ySection) {
-                    return cTag;
-                }
-            }
-        }
-
-        CompoundTag sectionTag = new CompoundTag();
-        sectionTag.putInt("yPos", ySection);
-        this.sectionsTag.addTag(sectionTag);
-        return sectionTag;
-    }
-
-
-    public void putXPos(int xPos)
-    {
-        tag.putInt("xPos", xPos);
-    }
-
-    public void putZPos(int zPos)
-    {
-        tag.putInt("zPos", zPos);
-    }
-
-    public void putLastUpdate(long lastUpdate)
-    {
-        tag.putLong("LastUpdate", lastUpdate);
-    }
-
-    public void putBlocks(int ySection, short[] blocks)
-    {
-        findSection(ySection).putShortArray("Blocks", blocks);
-    }
-
-    public void putData(int ySection, ChunkUnsignedByteArray data)
-    {
-        findSection(ySection).putByteArray("Data", data.data);
-    }
-
-    public void putSkyLight(int ySection, ChunkNibbleArray skyLight)
-    {
-        findSection(ySection).putByteArray("SkyLight", skyLight.data);
-    }
-
-    public void putBlockLight(int ySection, ChunkNibbleArray blockLight)
-    {
-        findSection(ySection).putByteArray("BlockLight", blockLight.data);
-    }
-
-    public void putHeightMap(short[] heightMap)
-    {
-        tag.putShortArray("HeightMap", heightMap);
-    }
-
-    public void putAverageBlockHeight(int averageBlockHeight)
-    {
-        tag.putInt("AverageBlockHeight", averageBlockHeight);
-    }
-
-    public void putTerrainPopulated(boolean terrainPopulated)
-    {
-        tag.putBoolean("TerrainPopulated", terrainPopulated);
-    }
-
-    public void putTemperatureMap(double[] temperatureMap)
-    {
-        tag.putDoubleArray("TemperatureMap", temperatureMap);
-    }
-
-    public void putHumidityMap(double[] humidityMap)
-    {
-        tag.putDoubleArray("HumidityMap", humidityMap);
-    }
-
-    public void putBiomeMap(int ySection, byte[] biomeMap)
-    {
-        findSection(ySection).putByteArray("BiomeMap", biomeMap);
-    }
-
-    public void putBiomeRegistry() {
-        CompoundTag registriesTag = tag.getCompoundOrDefault("Registries", new CompoundTag());
-        CompoundTag biomesTag = new CompoundTag();
-        Registry.writeIdMapToTag(Registries.BIOMES, biomesTag);
-        registriesTag.putCompound("Biomes", biomesTag);
-        tag.putCompound("Registries", registriesTag);
-    }
-}
+package net.minecraft.core.world.chunk.writer;
+
+import com.mojang.nbt.CompoundTag;
+import com.mojang.nbt.ListTag;
+import com.mojang.nbt.Tag;
+import net.minecraft.core.data.registry.Registries;
+import net.minecraft.core.data.registry.Registry;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.data.ChunkNibbleArray;
+import net.minecraft.core.world.data.ChunkUnsignedByteArray;
+
+public class ChunkWriter
+{
+    private final World world;
+    private final CompoundTag tag;
+    private final ListTag sectionsTag;
+
+    public ChunkWriter(World world, CompoundTag tag)
+    {
+        this.world = world;
+        this.tag = tag;
+
+        if (this.tag.containsKey("Sections")) {
+            this.sectionsTag = this.tag.getList("Sections");
+        } else {
+            this.sectionsTag = new ListTag();
+            this.tag.putList("Sections", this.sectionsTag);
+        }
+    }
+
+    private CompoundTag findSection(int ySection) {
+        for (Tag<?> tag : this.sectionsTag) {
+            if (tag instanceof CompoundTag) {
+                CompoundTag cTag = (CompoundTag) tag;
+                int tagY = cTag.getInteger("yPos");
+                if (tagY == ySection) {
+                    return cTag;
+                }
+            }
+        }
+
+        CompoundTag sectionTag = new CompoundTag();
+        sectionTag.putInt("yPos", ySection);
+        this.sectionsTag.addTag(sectionTag);
+        return sectionTag;
+    }
+
+
+    public void putXPos(int xPos)
+    {
+        tag.putInt("xPos", xPos);
+    }
+
+    public void putZPos(int zPos)
+    {
+        tag.putInt("zPos", zPos);
+    }
+
+    public void putLastUpdate(long lastUpdate)
+    {
+        tag.putLong("LastUpdate", lastUpdate);
+    }
+
+    public void putBlocks(int ySection, short[] blocks)
+    {
+        findSection(ySection).putShortArray("Blocks", blocks);
+    }
+
+    public void putData(int ySection, ChunkUnsignedByteArray data)
+    {
+        findSection(ySection).putByteArray("Data", data.data);
+    }
+
+    public void putSkyLight(int ySection, ChunkNibbleArray skyLight)
+    {
+        findSection(ySection).putByteArray("SkyLight", skyLight.data);
+    }
+
+    public void putBlockLight(int ySection, ChunkNibbleArray blockLight)
+    {
+        findSection(ySection).putByteArray("BlockLight", blockLight.data);
+    }
+
+    public void putHeightMap(short[] heightMap)
+    {
+        tag.putShortArray("HeightMap", heightMap);
+    }
+
+    public void putAverageBlockHeight(int averageBlockHeight)
+    {
+        tag.putInt("AverageBlockHeight", averageBlockHeight);
+    }
+
+    public void putTerrainPopulated(boolean terrainPopulated)
+    {
+        tag.putBoolean("TerrainPopulated", terrainPopulated);
+    }
+
+    public void putTemperatureMap(double[] temperatureMap)
+    {
+        tag.putDoubleArray("TemperatureMap", temperatureMap);
+    }
+
+    public void putHumidityMap(double[] humidityMap)
+    {
+        tag.putDoubleArray("HumidityMap", humidityMap);
+    }
+
+    public void putBiomeMap(int ySection, byte[] biomeMap)
+    {
+        findSection(ySection).putByteArray("BiomeMap", biomeMap);
+    }
+
+    public void putBiomeRegistry() {
+        CompoundTag registriesTag = tag.getCompoundOrDefault("Registries", new CompoundTag());
+        CompoundTag biomesTag = new CompoundTag();
+        Registry.writeIdMapToTag(Registries.BIOMES, biomesTag);
+        registriesTag.putCompound("Biomes", biomesTag);
+        tag.putCompound("Registries", registriesTag);
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/config/season/SeasonConfig.java b/game/core/src/main/java/net/minecraft/core/world/config/season/SeasonConfig.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/config/season/SeasonConfig.java
rename to game/core/src/main/java/net/minecraft/core/world/config/season/SeasonConfig.java
diff --git a/src/main/java/net/minecraft/core/world/config/season/SeasonConfigBuilder.java b/game/core/src/main/java/net/minecraft/core/world/config/season/SeasonConfigBuilder.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/config/season/SeasonConfigBuilder.java
rename to game/core/src/main/java/net/minecraft/core/world/config/season/SeasonConfigBuilder.java
diff --git a/src/main/java/net/minecraft/core/world/config/season/SeasonConfigCycle.java b/game/core/src/main/java/net/minecraft/core/world/config/season/SeasonConfigCycle.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/config/season/SeasonConfigCycle.java
rename to game/core/src/main/java/net/minecraft/core/world/config/season/SeasonConfigCycle.java
diff --git a/src/main/java/net/minecraft/core/world/config/season/SeasonConfigSingle.java b/game/core/src/main/java/net/minecraft/core/world/config/season/SeasonConfigSingle.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/config/season/SeasonConfigSingle.java
rename to game/core/src/main/java/net/minecraft/core/world/config/season/SeasonConfigSingle.java
diff --git a/src/main/java/net/minecraft/core/world/config/spawning/SpawnerConfig.java b/game/core/src/main/java/net/minecraft/core/world/config/spawning/SpawnerConfig.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/config/spawning/SpawnerConfig.java
rename to game/core/src/main/java/net/minecraft/core/world/config/spawning/SpawnerConfig.java
diff --git a/src/main/java/net/minecraft/core/world/data/ChunkArray.java b/game/core/src/main/java/net/minecraft/core/world/data/ChunkArray.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/data/ChunkArray.java
rename to game/core/src/main/java/net/minecraft/core/world/data/ChunkArray.java
diff --git a/src/main/java/net/minecraft/core/world/data/ChunkNibbleArray.java b/game/core/src/main/java/net/minecraft/core/world/data/ChunkNibbleArray.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/data/ChunkNibbleArray.java
rename to game/core/src/main/java/net/minecraft/core/world/data/ChunkNibbleArray.java
diff --git a/src/main/java/net/minecraft/core/world/data/ChunkUnsignedByteArray.java b/game/core/src/main/java/net/minecraft/core/world/data/ChunkUnsignedByteArray.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/data/ChunkUnsignedByteArray.java
rename to game/core/src/main/java/net/minecraft/core/world/data/ChunkUnsignedByteArray.java
diff --git a/src/main/java/net/minecraft/core/world/data/SynchedEntityData.java b/game/core/src/main/java/net/minecraft/core/world/data/SynchedEntityData.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/data/SynchedEntityData.java
rename to game/core/src/main/java/net/minecraft/core/world/data/SynchedEntityData.java
diff --git a/src/main/java/net/minecraft/core/world/generate/CavesLargeFeature.java b/game/core/src/main/java/net/minecraft/core/world/generate/CavesLargeFeature.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/CavesLargeFeature.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/CavesLargeFeature.java
diff --git a/src/main/java/net/minecraft/core/world/generate/LargeFeature.java b/game/core/src/main/java/net/minecraft/core/world/generate/LargeFeature.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/LargeFeature.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/LargeFeature.java
index f45790a17..fc15fb1e5 100644
--- a/src/main/java/net/minecraft/core/world/generate/LargeFeature.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/LargeFeature.java
@@ -1,42 +1,42 @@
-package net.minecraft.core.world.generate;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-
-import java.util.Random;
-
-public class LargeFeature
-{
-
-    public LargeFeature()
-    {
-        radiusChunk = 8;
-    }
-
-    public void generate(World world, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result)
-    {
-        int radius = radiusChunk;
-        rand.setSeed(world.getRandomSeed());
-        worldObj = world;
-        long randX = (rand.nextLong() / 2L) * 2L + 1L;
-        long randZ = (rand.nextLong() / 2L) * 2L + 1L;
-        for(int chunkX = baseChunkX - radius; chunkX <= baseChunkX + radius; chunkX++)
-        {
-            for(int chunkZ = baseChunkZ - radius; chunkZ <= baseChunkZ + radius; chunkZ++)
-            {
-                rand.setSeed((long)chunkX * randX + (long)chunkZ * randZ ^ world.getRandomSeed());
-                doGeneration(world, chunkX, chunkZ, baseChunkX, baseChunkZ, result);
-            }
-
-        }
-
-    }
-
-    protected void doGeneration(World world, int chunkX, int chunkZ, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result)
-    {
-    }
-
-    protected int radiusChunk;
-    protected static Random rand = new Random();
-    protected World worldObj;
+package net.minecraft.core.world.generate;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+
+import java.util.Random;
+
+public class LargeFeature
+{
+
+    public LargeFeature()
+    {
+        radiusChunk = 8;
+    }
+
+    public void generate(World world, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result)
+    {
+        int radius = radiusChunk;
+        rand.setSeed(world.getRandomSeed());
+        worldObj = world;
+        long randX = (rand.nextLong() / 2L) * 2L + 1L;
+        long randZ = (rand.nextLong() / 2L) * 2L + 1L;
+        for(int chunkX = baseChunkX - radius; chunkX <= baseChunkX + radius; chunkX++)
+        {
+            for(int chunkZ = baseChunkZ - radius; chunkZ <= baseChunkZ + radius; chunkZ++)
+            {
+                rand.setSeed((long)chunkX * randX + (long)chunkZ * randZ ^ world.getRandomSeed());
+                doGeneration(world, chunkX, chunkZ, baseChunkX, baseChunkZ, result);
+            }
+
+        }
+
+    }
+
+    protected void doGeneration(World world, int chunkX, int chunkZ, int baseChunkX, int baseChunkZ, ChunkGeneratorResult result)
+    {
+    }
+
+    protected int radiusChunk;
+    protected static Random rand = new Random();
+    protected World worldObj;
 }
\ No newline at end of file
diff --git a/src/main/java/net/minecraft/core/world/generate/WarrensCavesLargeFeature.java b/game/core/src/main/java/net/minecraft/core/world/generate/WarrensCavesLargeFeature.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/WarrensCavesLargeFeature.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/WarrensCavesLargeFeature.java
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/ChunkDecorator.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/ChunkDecorator.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/chunk/ChunkDecorator.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/ChunkDecorator.java
index 28866ff46..9ac66e3a6 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/ChunkDecorator.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/ChunkDecorator.java
@@ -1,11 +1,11 @@
-package net.minecraft.core.world.generate.chunk;
-
-import net.minecraft.core.world.chunk.Chunk;
-
-public interface ChunkDecorator
-{
-    /**
-     * Places {@link net.minecraft.core.world.generate.feature.WorldFeature world features} on a given chunk.
-     */
-    void decorate(Chunk chunk);
-}
+package net.minecraft.core.world.generate.chunk;
+
+import net.minecraft.core.world.chunk.Chunk;
+
+public interface ChunkDecorator
+{
+    /**
+     * Places {@link net.minecraft.core.world.generate.feature.WorldFeature world features} on a given chunk.
+     */
+    void decorate(Chunk chunk);
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/ChunkGenerator.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/ChunkGenerator.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/ChunkGenerator.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/ChunkGenerator.java
index 445f15767..d2eb8aa71 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/ChunkGenerator.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/ChunkGenerator.java
@@ -1,90 +1,90 @@
-package net.minecraft.core.world.generate.chunk;
-
-import net.minecraft.core.data.registry.Registries;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.biome.Biome;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.chunk.ChunkSection;
-import net.minecraft.core.world.generate.feature.WorldFeature;
-
-import static net.minecraft.core.world.chunk.Chunk.CHUNK_SIZE_X;
-import static net.minecraft.core.world.chunk.Chunk.CHUNK_SIZE_Z;
-import static net.minecraft.core.world.chunk.ChunkSection.SECTION_SIZE_Y;
-
-/**
- * This interface provides the ability to generate {@link Chunk chunk}s at specified
- * coordinates for a particular {@link World world}, and to perform
- * {@link WorldFeature world feature} placement for that chunk.
- */
-public abstract class ChunkGenerator
-{
-    protected final World world;
-    private final ChunkDecorator decorator;
-
-    /**
-     * Creates a new instance of {@link ChunkGenerator}.
-     * @param world The world to generate a chunk for.
-     * @param decorator The decorator to use to decorate the chunk.
-     */
-    public ChunkGenerator(World world, ChunkDecorator decorator)
-    {
-        this.world = world;
-        this.decorator = decorator;
-    }
-
-    /**
-     * Generates a {@link Chunk chunk} at the specified coordinates chunkX and chunkZ.
-     * This does not include placement of {@link WorldFeature world features}.
-     * @return A chunk.
-     */
-    public final Chunk generate(int chunkX, int chunkZ)
-    {
-        // Create chunk
-        Chunk chunk = new Chunk(world, chunkX, chunkZ);
-
-        // Set up chunk temperature, humidity, and biome maps
-        chunk.temperature = world.getBiomeProvider().getTemperatures(null, chunkX * CHUNK_SIZE_X, chunkZ * CHUNK_SIZE_Z, CHUNK_SIZE_X, CHUNK_SIZE_Z);
-        chunk.humidity = world.getBiomeProvider().getHumidities(null, chunkX * CHUNK_SIZE_X, chunkZ * CHUNK_SIZE_Z, CHUNK_SIZE_X, CHUNK_SIZE_Z);
-        chunk.variety = world.getBiomeProvider().getVarieties(null, chunkX * CHUNK_SIZE_X, chunkZ * CHUNK_SIZE_Z, CHUNK_SIZE_X, CHUNK_SIZE_Z);
-
-        Biome[] biomes = new Biome[CHUNK_SIZE_X * (SECTION_SIZE_Y >> 3) * CHUNK_SIZE_Z];
-        for (int sectionY = 0; sectionY < Chunk.CHUNK_SECTIONS; sectionY++) {
-            world.getBiomeProvider().getBiomes(biomes, chunk.temperature, chunk.humidity, chunk.variety, chunkX * CHUNK_SIZE_X, sectionY * SECTION_SIZE_Y, chunkZ * CHUNK_SIZE_Z, CHUNK_SIZE_X, SECTION_SIZE_Y >> 3, CHUNK_SIZE_Z);
-            ChunkSection section = chunk.getSection(sectionY);
-            for (int i = 0; i < biomes.length; i++) {
-                section.biome[i] = (byte) Registries.BIOMES.getNumericIdOfItem(biomes[i]);
-            }
-        }
-
-        // Perform block generation
-        ChunkGeneratorResult result = doBlockGeneration(chunk);
-
-        // Slice up blocks
-        int blocksInSection = CHUNK_SIZE_X * SECTION_SIZE_Y * CHUNK_SIZE_Z;
-        for (int sectionY = 0; sectionY < Chunk.CHUNK_SECTIONS; sectionY++) {
-            ChunkSection section = chunk.getSection(sectionY);
-            section.blocks = result.getSectionBlocks(sectionY);
-        }
-
-        // Generate maps (e.g. height map, sky light map)
-        chunk.recalcHeightmap();
-
-        return chunk;
-    }
-
-    /**
-     * Decorate a chunk using the provided {@link ChunkDecorator}.
-     * @param chunk The chunk to decorate.
-     */
-    public final void decorate(Chunk chunk)
-    {
-        decorator.decorate(chunk);
-    }
-
-    /**
-     * Generates the block array for a given chunk.
-     * @param chunk The chunk to generate the block array for.
-     * @return The block array resulting from chunk generation.
-     */
-    protected abstract ChunkGeneratorResult doBlockGeneration(Chunk chunk);
-}
+package net.minecraft.core.world.generate.chunk;
+
+import net.minecraft.core.data.registry.Registries;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.biome.Biome;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.chunk.ChunkSection;
+import net.minecraft.core.world.generate.feature.WorldFeature;
+
+import static net.minecraft.core.world.chunk.Chunk.CHUNK_SIZE_X;
+import static net.minecraft.core.world.chunk.Chunk.CHUNK_SIZE_Z;
+import static net.minecraft.core.world.chunk.ChunkSection.SECTION_SIZE_Y;
+
+/**
+ * This interface provides the ability to generate {@link Chunk chunk}s at specified
+ * coordinates for a particular {@link World world}, and to perform
+ * {@link WorldFeature world feature} placement for that chunk.
+ */
+public abstract class ChunkGenerator
+{
+    protected final World world;
+    private final ChunkDecorator decorator;
+
+    /**
+     * Creates a new instance of {@link ChunkGenerator}.
+     * @param world The world to generate a chunk for.
+     * @param decorator The decorator to use to decorate the chunk.
+     */
+    public ChunkGenerator(World world, ChunkDecorator decorator)
+    {
+        this.world = world;
+        this.decorator = decorator;
+    }
+
+    /**
+     * Generates a {@link Chunk chunk} at the specified coordinates chunkX and chunkZ.
+     * This does not include placement of {@link WorldFeature world features}.
+     * @return A chunk.
+     */
+    public final Chunk generate(int chunkX, int chunkZ)
+    {
+        // Create chunk
+        Chunk chunk = new Chunk(world, chunkX, chunkZ);
+
+        // Set up chunk temperature, humidity, and biome maps
+        chunk.temperature = world.getBiomeProvider().getTemperatures(null, chunkX * CHUNK_SIZE_X, chunkZ * CHUNK_SIZE_Z, CHUNK_SIZE_X, CHUNK_SIZE_Z);
+        chunk.humidity = world.getBiomeProvider().getHumidities(null, chunkX * CHUNK_SIZE_X, chunkZ * CHUNK_SIZE_Z, CHUNK_SIZE_X, CHUNK_SIZE_Z);
+        chunk.variety = world.getBiomeProvider().getVarieties(null, chunkX * CHUNK_SIZE_X, chunkZ * CHUNK_SIZE_Z, CHUNK_SIZE_X, CHUNK_SIZE_Z);
+
+        Biome[] biomes = new Biome[CHUNK_SIZE_X * (SECTION_SIZE_Y >> 3) * CHUNK_SIZE_Z];
+        for (int sectionY = 0; sectionY < Chunk.CHUNK_SECTIONS; sectionY++) {
+            world.getBiomeProvider().getBiomes(biomes, chunk.temperature, chunk.humidity, chunk.variety, chunkX * CHUNK_SIZE_X, sectionY * SECTION_SIZE_Y, chunkZ * CHUNK_SIZE_Z, CHUNK_SIZE_X, SECTION_SIZE_Y >> 3, CHUNK_SIZE_Z);
+            ChunkSection section = chunk.getSection(sectionY);
+            for (int i = 0; i < biomes.length; i++) {
+                section.biome[i] = (byte) Registries.BIOMES.getNumericIdOfItem(biomes[i]);
+            }
+        }
+
+        // Perform block generation
+        ChunkGeneratorResult result = doBlockGeneration(chunk);
+
+        // Slice up blocks
+        int blocksInSection = CHUNK_SIZE_X * SECTION_SIZE_Y * CHUNK_SIZE_Z;
+        for (int sectionY = 0; sectionY < Chunk.CHUNK_SECTIONS; sectionY++) {
+            ChunkSection section = chunk.getSection(sectionY);
+            section.blocks = result.getSectionBlocks(sectionY);
+        }
+
+        // Generate maps (e.g. height map, sky light map)
+        chunk.recalcHeightmap();
+
+        return chunk;
+    }
+
+    /**
+     * Decorate a chunk using the provided {@link ChunkDecorator}.
+     * @param chunk The chunk to decorate.
+     */
+    public final void decorate(Chunk chunk)
+    {
+        decorator.decorate(chunk);
+    }
+
+    /**
+     * Generates the block array for a given chunk.
+     * @param chunk The chunk to generate the block array for.
+     * @return The block array resulting from chunk generation.
+     */
+    protected abstract ChunkGeneratorResult doBlockGeneration(Chunk chunk);
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/ChunkGeneratorResult.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/ChunkGeneratorResult.java
similarity index 94%
rename from src/main/java/net/minecraft/core/world/generate/chunk/ChunkGeneratorResult.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/ChunkGeneratorResult.java
index 680286b03..c9b0b5e25 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/ChunkGeneratorResult.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/ChunkGeneratorResult.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.world.generate.chunk;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.chunk.Chunk;
 import net.minecraft.core.world.chunk.ChunkSection;
 
@@ -22,7 +23,7 @@ public class ChunkGeneratorResult {
         int section = y / ChunkSection.SECTION_SIZE_Y;
         int cy = y % ChunkSection.SECTION_SIZE_Y;
 
-        Block newBlock = Block.getBlock(id);
+        Block newBlock = Blocks.getBlock(id);
 
         // If the array is null and we're only clearing a block, skip creating it; otherwise, create it
         if (sectionBlocksArray[section] == null) {
@@ -34,7 +35,7 @@ public class ChunkGeneratorResult {
         }
 
         // Increment or decrement numBlocksInSection depending on whether we're setting or clearing a block
-        Block currentBlock = Block.getBlock(getBlock(x, y, z));
+        Block currentBlock = Blocks.getBlock(getBlock(x, y, z));
         if (newBlock == null && currentBlock != null) {
             numBlocksInSectionArray[section]--;
         } else if (newBlock != null && currentBlock == null) {
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/classic/ChunkGeneratorClassic.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/classic/ChunkGeneratorClassic.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/chunk/classic/ChunkGeneratorClassic.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/classic/ChunkGeneratorClassic.java
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkDecoratorDebug.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkDecoratorDebug.java
similarity index 84%
rename from src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkDecoratorDebug.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkDecoratorDebug.java
index 87360d25b..131e1dc52 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkDecoratorDebug.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkDecoratorDebug.java
@@ -1,38 +1,38 @@
-package net.minecraft.core.world.generate.chunk.debug;
-
-import net.minecraft.core.block.Block;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkDecorator;
-
-public class ChunkDecoratorDebug
-    implements ChunkDecorator
-{
-    @Override
-    public void decorate(Chunk chunk)
-    {
-        int chunkX = chunk.xPosition;
-        int chunkZ = chunk.zPosition;
-
-        int chunkBlockOffset = chunkX * (Chunk.CHUNK_SIZE_X / 2);
-        int chunkMetaOffset = chunkZ * (Chunk.CHUNK_SIZE_Z / 2);
-
-        for (int x = 0; x < Chunk.CHUNK_SIZE_X; x++)
-        {
-            for (int z =  0; z < Chunk.CHUNK_SIZE_X; z++)
-            {
-                int blockBlockOffset = x / 2;
-                int blockMetaOffset = z / 2;
-
-                if (x % 2 == 0 && z % 2 == 0)
-                {
-                    int blockId = chunkBlockOffset + blockBlockOffset;
-                    int meta = chunkMetaOffset + blockMetaOffset;
-
-                    if (blockId < 0 || blockId >= Block.blocksList.length || Block.blocksList[blockId] == null) continue;
-
-                    chunk.setBlockIDWithMetadata(x, 0, z, blockId, meta);
-                }
-            }
-        }
-    }
-}
+package net.minecraft.core.world.generate.chunk.debug;
+
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkDecorator;
+
+public class ChunkDecoratorDebug
+    implements ChunkDecorator
+{
+    @Override
+    public void decorate(Chunk chunk)
+    {
+        int chunkX = chunk.xPosition;
+        int chunkZ = chunk.zPosition;
+
+        int chunkBlockOffset = chunkX * (Chunk.CHUNK_SIZE_X / 2);
+        int chunkMetaOffset = chunkZ * (Chunk.CHUNK_SIZE_Z / 2);
+
+        for (int x = 0; x < Chunk.CHUNK_SIZE_X; x++)
+        {
+            for (int z =  0; z < Chunk.CHUNK_SIZE_X; z++)
+            {
+                int blockBlockOffset = x / 2;
+                int blockMetaOffset = z / 2;
+
+                if (x % 2 == 0 && z % 2 == 0)
+                {
+                    int blockId = chunkBlockOffset + blockBlockOffset;
+                    int meta = chunkMetaOffset + blockMetaOffset;
+
+                    if (blockId < 0 || blockId >= Blocks.blocksList.length || Blocks.blocksList[blockId] == null) continue;
+
+                    chunk.setBlockIDWithMetadata(x, 0, z, blockId, meta);
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkGeneratorDebug.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkGeneratorDebug.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkGeneratorDebug.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkGeneratorDebug.java
index bbdb6c6a0..5fc72a338 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkGeneratorDebug.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/debug/ChunkGeneratorDebug.java
@@ -1,21 +1,21 @@
-package net.minecraft.core.world.generate.chunk.debug;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkGenerator;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-
-public class ChunkGeneratorDebug
-    extends ChunkGenerator
-{
-    public ChunkGeneratorDebug(World world)
-    {
-        super(world, new ChunkDecoratorDebug());
-    }
-
-    @Override
-    protected ChunkGeneratorResult doBlockGeneration(Chunk chunk)
-    {
-        return new ChunkGeneratorResult();
-    }
-}
+package net.minecraft.core.world.generate.chunk.debug;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkGenerator;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+
+public class ChunkGeneratorDebug
+    extends ChunkGenerator
+{
+    public ChunkGeneratorDebug(World world)
+    {
+        super(world, new ChunkDecoratorDebug());
+    }
+
+    @Override
+    protected ChunkGeneratorResult doBlockGeneration(Chunk chunk)
+    {
+        return new ChunkGeneratorResult();
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkDecoratorEmpty.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkDecoratorEmpty.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkDecoratorEmpty.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkDecoratorEmpty.java
index 3be9f40cd..0f681cd77 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkDecoratorEmpty.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkDecoratorEmpty.java
@@ -1,18 +1,18 @@
-package net.minecraft.core.world.generate.chunk.empty;
-
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkDecorator;
-
-public class ChunkDecoratorEmpty
-    implements ChunkDecorator
-{
-    @Override
-    public void decorate(Chunk chunk)
-    {
-        if (chunk.xPosition == 0 && chunk.zPosition == 0)
-        {
-            chunk.setBlockID(0, 0, 0, Blocks.BEDROCK.id);
-        }
-    }
-}
+package net.minecraft.core.world.generate.chunk.empty;
+
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkDecorator;
+
+public class ChunkDecoratorEmpty
+    implements ChunkDecorator
+{
+    @Override
+    public void decorate(Chunk chunk)
+    {
+        if (chunk.xPosition == 0 && chunk.zPosition == 0)
+        {
+            chunk.setBlockID(0, 0, 0, Blocks.BEDROCK.id);
+        }
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkGeneratorEmpty.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkGeneratorEmpty.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkGeneratorEmpty.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkGeneratorEmpty.java
index 9013709dd..48b21c7b1 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkGeneratorEmpty.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/empty/ChunkGeneratorEmpty.java
@@ -1,21 +1,21 @@
-package net.minecraft.core.world.generate.chunk.empty;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkGenerator;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-
-public class ChunkGeneratorEmpty
-    extends ChunkGenerator
-{
-    public ChunkGeneratorEmpty(World world)
-    {
-        super(world, new ChunkDecoratorEmpty());
-    }
-
-    @Override
-    protected ChunkGeneratorResult doBlockGeneration(Chunk chunk)
-    {
-        return new ChunkGeneratorResult();
-    }
-}
+package net.minecraft.core.world.generate.chunk.empty;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkGenerator;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+
+public class ChunkGeneratorEmpty
+    extends ChunkGenerator
+{
+    public ChunkGeneratorEmpty(World world)
+    {
+        super(world, new ChunkDecoratorEmpty());
+    }
+
+    @Override
+    protected ChunkGeneratorResult doBlockGeneration(Chunk chunk)
+    {
+        return new ChunkGeneratorResult();
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkDecoratorFlat.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkDecoratorFlat.java
similarity index 95%
rename from src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkDecoratorFlat.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkDecoratorFlat.java
index c7f562395..5527847fa 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkDecoratorFlat.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkDecoratorFlat.java
@@ -1,14 +1,14 @@
-package net.minecraft.core.world.generate.chunk.flat;
-
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkDecorator;
-
-public class ChunkDecoratorFlat
-    implements ChunkDecorator
-{
-    @Override
-    public void decorate(Chunk chunk)
-    {
-        // Do nothing lol
-    }
-}
+package net.minecraft.core.world.generate.chunk.flat;
+
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkDecorator;
+
+public class ChunkDecoratorFlat
+    implements ChunkDecorator
+{
+    @Override
+    public void decorate(Chunk chunk)
+    {
+        // Do nothing lol
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkGeneratorFlat.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkGeneratorFlat.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkGeneratorFlat.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkGeneratorFlat.java
index e034e4c65..96d8888e0 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkGeneratorFlat.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/flat/ChunkGeneratorFlat.java
@@ -1,37 +1,37 @@
-package net.minecraft.core.world.generate.chunk.flat;
-
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkGenerator;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-
-public class ChunkGeneratorFlat
-    extends ChunkGenerator
-{
-    public ChunkGeneratorFlat(World world)
-    {
-        super(world, new ChunkDecoratorFlat());
-    }
-
-    @Override
-    protected ChunkGeneratorResult doBlockGeneration(Chunk chunk)
-    {
-        ChunkGeneratorResult result = new ChunkGeneratorResult();
-
-        for (int z = 0; z < Chunk.CHUNK_SIZE_Z; z++) {
-            for (int x = 0; x < Chunk.CHUNK_SIZE_X; x++) {
-                result.setBlock(x, 0, z, Blocks.BEDROCK.id);
-                for (int y = 1; y < 4; y++) {
-                    result.setBlock(x, y, z, Blocks.STONE.id);
-                }
-                for (int y = 4; y < 6; y++) {
-                    result.setBlock(x, y, z, Blocks.DIRT.id);
-                }
-                result.setBlock(x, 6, z, Blocks.GRASS.id);
-            }
-        }
-
-        return result;
-    }
-}
+package net.minecraft.core.world.generate.chunk.flat;
+
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkGenerator;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+
+public class ChunkGeneratorFlat
+    extends ChunkGenerator
+{
+    public ChunkGeneratorFlat(World world)
+    {
+        super(world, new ChunkDecoratorFlat());
+    }
+
+    @Override
+    protected ChunkGeneratorResult doBlockGeneration(Chunk chunk)
+    {
+        ChunkGeneratorResult result = new ChunkGeneratorResult();
+
+        for (int z = 0; z < Chunk.CHUNK_SIZE_Z; z++) {
+            for (int x = 0; x < Chunk.CHUNK_SIZE_X; x++) {
+                result.setBlock(x, 0, z, Blocks.BEDROCK.id);
+                for (int y = 1; y < 4; y++) {
+                    result.setBlock(x, y, z, Blocks.STONE.id);
+                }
+                for (int y = 4; y < 6; y++) {
+                    result.setBlock(x, y, z, Blocks.DIRT.id);
+                }
+                result.setBlock(x, 6, z, Blocks.GRASS.id);
+            }
+        }
+
+        return result;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/indev/ChunkGeneratorIndev.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/indev/ChunkGeneratorIndev.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/chunk/indev/ChunkGeneratorIndev.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/indev/ChunkGeneratorIndev.java
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/indev/IndevWorldTheme.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/indev/IndevWorldTheme.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/chunk/indev/IndevWorldTheme.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/indev/IndevWorldTheme.java
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/indev/IndevWorldType.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/indev/IndevWorldType.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/chunk/indev/IndevWorldType.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/indev/IndevWorldType.java
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/indev/LevelGenerator.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/indev/LevelGenerator.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/chunk/indev/LevelGenerator.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/indev/LevelGenerator.java
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/ChunkGeneratorPerlin.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/ChunkGeneratorPerlin.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/ChunkGeneratorPerlin.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/ChunkGeneratorPerlin.java
index da5c5d75c..59acb350e 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/ChunkGeneratorPerlin.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/ChunkGeneratorPerlin.java
@@ -1,44 +1,44 @@
-package net.minecraft.core.world.generate.chunk.perlin;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.LargeFeature;
-import net.minecraft.core.world.generate.chunk.ChunkDecorator;
-import net.minecraft.core.world.generate.chunk.ChunkGenerator;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * This class provides basic functionality to generate a {@link Chunk chunk} using 3-dimensional Perlin noise.
- */
-public class ChunkGeneratorPerlin
-    extends ChunkGenerator
-{
-    private final TerrainGenerator terrainGenerator;
-    private final SurfaceGenerator surfaceGenerator;
-    private final List<LargeFeature> largeFeatures;
-
-    protected ChunkGeneratorPerlin(World world, ChunkDecorator decorator, TerrainGenerator terrainGenerator, SurfaceGenerator surfaceGenerator, LargeFeature[] largeFeatures)
-    {
-        super(world, decorator);
-
-        this.terrainGenerator = terrainGenerator;
-        this.surfaceGenerator = surfaceGenerator;
-        this.largeFeatures = Arrays.asList(largeFeatures);
-    }
-
-    @Override
-    protected ChunkGeneratorResult doBlockGeneration(Chunk chunk)
-    {
-        double[] densityMap = terrainGenerator.getDensityGenerator().generateDensityMap(chunk);
-        ChunkGeneratorResult result = terrainGenerator.generateTerrain(chunk, densityMap);
-        surfaceGenerator.generateSurface(chunk, result);
-        for (LargeFeature largeFeature : largeFeatures) {
-            largeFeature.generate(world, chunk.xPosition, chunk.zPosition, result);
-        }
-
-        return result;
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.LargeFeature;
+import net.minecraft.core.world.generate.chunk.ChunkDecorator;
+import net.minecraft.core.world.generate.chunk.ChunkGenerator;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * This class provides basic functionality to generate a {@link Chunk chunk} using 3-dimensional Perlin noise.
+ */
+public class ChunkGeneratorPerlin
+    extends ChunkGenerator
+{
+    private final TerrainGenerator terrainGenerator;
+    private final SurfaceGenerator surfaceGenerator;
+    private final List<LargeFeature> largeFeatures;
+
+    protected ChunkGeneratorPerlin(World world, ChunkDecorator decorator, TerrainGenerator terrainGenerator, SurfaceGenerator surfaceGenerator, LargeFeature[] largeFeatures)
+    {
+        super(world, decorator);
+
+        this.terrainGenerator = terrainGenerator;
+        this.surfaceGenerator = surfaceGenerator;
+        this.largeFeatures = Arrays.asList(largeFeatures);
+    }
+
+    @Override
+    protected ChunkGeneratorResult doBlockGeneration(Chunk chunk)
+    {
+        double[] densityMap = terrainGenerator.getDensityGenerator().generateDensityMap(chunk);
+        ChunkGeneratorResult result = terrainGenerator.generateTerrain(chunk, densityMap);
+        surfaceGenerator.generateSurface(chunk, result);
+        for (LargeFeature largeFeature : largeFeatures) {
+            largeFeature.generate(world, chunk.xPosition, chunk.zPosition, result);
+        }
+
+        return result;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/DensityGenerator.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/DensityGenerator.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/DensityGenerator.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/DensityGenerator.java
index cfc0d2736..0a82f783d 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/DensityGenerator.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/DensityGenerator.java
@@ -1,30 +1,30 @@
-package net.minecraft.core.world.generate.chunk.perlin;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-
-/**
- * This interface provides the ability to generate a 3-dimensional density map, as would be used in a subclass of
- * {@link ChunkGeneratorPerlin} to generate terrain for a {@link Chunk}.
- */
-public interface DensityGenerator
-{
-    /**
-     * Reads the density in densities at the given x, y, and z coordinates.
-     */
-    static double readDensity(World world, double[] densities, int x, int y, int z)
-    {
-        int sizeX = 4 + 1;
-        int sizeY = (world.getHeightBlocks() / 8) + 1;
-        int sizeZ = 4 + 1;
-
-        return densities[(x * sizeY * sizeZ) + (z * sizeY) + y];
-    }
-
-    /**
-     * Generates a density map at the given coordinates and of the specified size.
-     * @return A density map with dimensions equal to 5 * 33 * 5, arranged such that a given set of
-     * coordinates x, y, z can be accessed by index [(x * 33 * 5) + (z * 33) + y].
-     */
-    double[] generateDensityMap(Chunk chunk);
-}
+package net.minecraft.core.world.generate.chunk.perlin;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+
+/**
+ * This interface provides the ability to generate a 3-dimensional density map, as would be used in a subclass of
+ * {@link ChunkGeneratorPerlin} to generate terrain for a {@link Chunk}.
+ */
+public interface DensityGenerator
+{
+    /**
+     * Reads the density in densities at the given x, y, and z coordinates.
+     */
+    static double readDensity(World world, double[] densities, int x, int y, int z)
+    {
+        int sizeX = 4 + 1;
+        int sizeY = (world.getHeightBlocks() / 8) + 1;
+        int sizeZ = 4 + 1;
+
+        return densities[(x * sizeY * sizeZ) + (z * sizeY) + y];
+    }
+
+    /**
+     * Generates a density map at the given coordinates and of the specified size.
+     * @return A density map with dimensions equal to 5 * 33 * 5, arranged such that a given set of
+     * coordinates x, y, z can be accessed by index [(x * 33 * 5) + (z * 33) + y].
+     */
+    double[] generateDensityMap(Chunk chunk);
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/SurfaceGenerator.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/SurfaceGenerator.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/SurfaceGenerator.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/SurfaceGenerator.java
index 41c7368e9..d1e2a2820 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/SurfaceGenerator.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/SurfaceGenerator.java
@@ -1,9 +1,9 @@
-package net.minecraft.core.world.generate.chunk.perlin;
-
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-
-public interface SurfaceGenerator
-{
-    void generateSurface(Chunk chunk, ChunkGeneratorResult result);
-}
+package net.minecraft.core.world.generate.chunk.perlin;
+
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+
+public interface SurfaceGenerator
+{
+    void generateSurface(Chunk chunk, ChunkGeneratorResult result);
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGenerator.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGenerator.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGenerator.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGenerator.java
index 03481316a..920c8a1da 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGenerator.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGenerator.java
@@ -1,11 +1,11 @@
-package net.minecraft.core.world.generate.chunk.perlin;
-
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-
-public interface TerrainGenerator
-{
-    ChunkGeneratorResult generateTerrain(Chunk chunk, double[] densityMap);
-
-    DensityGenerator getDensityGenerator();
-}
+package net.minecraft.core.world.generate.chunk.perlin;
+
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+
+public interface TerrainGenerator
+{
+    ChunkGeneratorResult generateTerrain(Chunk chunk, double[] densityMap);
+
+    DensityGenerator getDensityGenerator();
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGeneratorLerp.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGeneratorLerp.java
similarity index 98%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGeneratorLerp.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGeneratorLerp.java
index 891e26a5a..11954ff36 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGeneratorLerp.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/TerrainGeneratorLerp.java
@@ -1,158 +1,158 @@
-package net.minecraft.core.world.generate.chunk.perlin;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-
-import java.util.Random;
-
-public abstract class TerrainGeneratorLerp
-    implements TerrainGenerator
-{
-    protected final World world;
-    protected final Random rand;
-
-    public TerrainGeneratorLerp(World world)
-    {
-        this.world = world;
-        this.rand = new Random();
-    }
-
-    protected abstract int getBlockAt(int x, int y, int z, double density);
-
-    @Override
-    public ChunkGeneratorResult generateTerrain(Chunk chunk, double[] densityMap)
-    {
-        int terrainHeight = (world.getWorldType().getMaxY() + 1) - world.getWorldType().getMinY();
-
-        rand.setSeed((long) chunk.xPosition * 0x4F9939F508L + (long) chunk.zPosition * 0x1EF1565BD5L);
-
-        // Number of blocks per chunk.
-        final int xBlocksPerChunk = Chunk.CHUNK_SIZE_X;
-        final int yBlocksPerChunk = terrainHeight;
-        final int zBlocksPerChunk = Chunk.CHUNK_SIZE_Z;
-
-        // Number of blocks per blob.
-        // A blob is a density region, i.e. a cuboid where each corner has a density value. Density is generated at a
-        // smaller scale than the real world and then linearly interpolated to generate each block inside the blob.
-        final byte xBlocksPerBlob = 4;
-        final byte yBlocksPerBlob = 8;
-        final byte zBlocksPerBlob = 4;
-
-        // Number of blobs per chunk.
-        // Simply the number of blocks per chunk divided by the number of blocks per blob.
-        final int xBlobsPerChunk = xBlocksPerChunk / xBlocksPerBlob;
-        final int yBlobsPerChunk = yBlocksPerChunk / yBlocksPerBlob;
-        final int zBlobsPerChunk = zBlocksPerChunk / zBlocksPerBlob;
-
-        // Number of densities per chunk.
-        // It's plus one because we need the upper and lower density of each blob - each upper blob density is also the
-        // lower density of the next blob sequentially. Think of it as if we looked at 4 boxes of an infinite line, each
-        // of which shares a wall with the next box, like so:
-        /* ┬─┬─┬─┬─┬
-           ┴─┴─┴─┴─┴ */
-        // Four boxes, but if you count them, there are five shared walls. Each box represents a blob, and each shared
-        // wall represents a density value.
-        final int xDensitiesPerChunk = xBlobsPerChunk + 1;
-        final int yDensitiesPerChunk = yBlobsPerChunk + 1;
-        final int zDensitiesPerChunk = zBlobsPerChunk + 1;
-
-        // Lerp interval, i.e. how much more of the density to add per block.
-        // As an example, if you have a starting density of 4 and an ending density of 12, your density change is 8.
-        // If your blob is 4 blocks across, you add 1/4 of the density change each time, so your lerp interval is 1/4 or 0.25.
-        // Your final density is then: density = start density + (density change * lerp interval) * block position.
-        // Block 0: density = 4 + (8 * 0.25) * 0 = 4
-        // Block 1: density = 4 + (8 * 0.25) * 1 = 6
-        // Block 2: density = 4 + (8 * 0.25) * 2 = 8
-        // Block 3: density = 4 + (8 * 0.25) * 3 = 10
-        // Lerp end is non-inclusive, which is why it's fine to stop at 10.
-        final double xLerpInterval = 1D / xBlocksPerBlob;
-        final double yLerpInterval = 1D / yBlocksPerBlob;
-        final double zLerpInterval = 1D / zBlocksPerBlob;
-
-        // Create output array
-        ChunkGeneratorResult result = new ChunkGeneratorResult();
-
-        // Iterate through each blob in the chunk.
-        for (int blobX = 0; blobX < xBlobsPerChunk; blobX++)
-        {
-            for (int blobZ = 0; blobZ < zBlobsPerChunk; blobZ++)
-            {
-                for (int blobY = 0; blobY < yBlobsPerChunk; blobY++)
-                {
-                    // Fetches the densities for each corner of the current blob, so we can interpolate between them.
-                    final double densityMinXMinYMinZ = densityMap[(((blobX * zDensitiesPerChunk) + blobZ) * yDensitiesPerChunk) + blobY];
-                    final double densityMinXMinYMaxZ = densityMap[(((blobX * zDensitiesPerChunk) + (blobZ + 1)) * yDensitiesPerChunk) + blobY];
-                    final double densityMinXMaxYMinZ = densityMap[(((blobX * zDensitiesPerChunk) + blobZ) * yDensitiesPerChunk) + (blobY + 1)];
-                    final double densityMinXMaxYMaxZ = densityMap[(((blobX * zDensitiesPerChunk) + (blobZ + 1)) * yDensitiesPerChunk) + (blobY + 1)];
-                    final double densityMaxXMinYMinZ = densityMap[((((blobX + 1) * zDensitiesPerChunk) + blobZ) * yDensitiesPerChunk) + blobY];
-                    final double densityMaxXMinYMaxZ = densityMap[((((blobX + 1) * zDensitiesPerChunk) + (blobZ + 1)) * yDensitiesPerChunk) + blobY];
-                    final double densityMaxXMaxYMinZ = densityMap[((((blobX + 1) * zDensitiesPerChunk) + blobZ) * yDensitiesPerChunk) + (blobY + 1)];
-                    final double densityMaxXMaxYMaxZ = densityMap[((((blobX + 1) * zDensitiesPerChunk) + (blobZ + 1)) * yDensitiesPerChunk) + (blobY + 1)];
-
-                    // Determines for each corner on the Y axis how much density to add per lerp interval.
-                    double yLerpAmountMinXMinZ = (densityMinXMaxYMinZ - densityMinXMinYMinZ) * yLerpInterval;
-                    double yLerpAmountMinXMaxZ = (densityMinXMaxYMaxZ - densityMinXMinYMaxZ) * yLerpInterval;
-                    double yLerpAmountMaxXMinZ = (densityMaxXMaxYMinZ - densityMaxXMinYMinZ) * yLerpInterval;
-                    double yLerpAmountMaxXMaxZ = (densityMaxXMaxYMaxZ - densityMaxXMinYMaxZ) * yLerpInterval;
-
-                    // Tracks the current interpolated density for the Y coordinate.
-                    double yLerpDensityMinXMinZ = densityMinXMinYMinZ;
-                    double yLerpDensityMinXMaxZ = densityMinXMinYMaxZ;
-                    double yLerpDensityMaxXMinZ = densityMaxXMinYMinZ;
-                    double yLerpDensityMaxXMaxZ = densityMaxXMinYMaxZ;
-
-                    for(int yInBlob = 0; yInBlob < yBlocksPerBlob; yInBlob++)
-                    {
-                        // Determines for each corner on the X axis how much density to add per lerp interval.
-                        double xLerpAmountMinZ = (yLerpDensityMaxXMinZ - yLerpDensityMinXMinZ) * xLerpInterval;
-                        double xLerpAmountMaxZ = (yLerpDensityMaxXMaxZ - yLerpDensityMinXMaxZ) * xLerpInterval;
-
-                        // Tracks the current interpolated density for the X coordinate.
-                        double xLerpDensityMinZ = yLerpDensityMinXMinZ;
-                        double xLerpDensityMaxZ = yLerpDensityMinXMaxZ;
-
-                        for(int xInBlob = 0; xInBlob < xBlocksPerBlob; xInBlob++)
-                        {
-                            // Determines for each corner on the Z axis how much density to add per lerp interval.
-                            double zLerpAmount = (xLerpDensityMaxZ - xLerpDensityMinZ) * zLerpInterval;
-
-                            // Tracks the current interpolated density for the Z coordinate.
-                            double zLerpDensity = xLerpDensityMinZ;
-
-                            for(int zInBlob = 0; zInBlob < zBlocksPerBlob; zInBlob++)
-                            {
-                                // Determine the coordinates for the block within the blob.
-                                int blockX = xInBlob + blobX * xBlocksPerBlob;
-                                int blockY = yInBlob + blobY * yBlocksPerBlob + world.worldType.getMinY();
-                                int blockZ = zInBlob + blobZ * zBlocksPerBlob;
-
-                                int id = getBlockAt(blockX, blockY, blockZ, zLerpDensity);
-
-                                result.setBlock(blockX, blockY, blockZ, id);
-
-                                // Add the lerp amount for the Z axis - i.e. the amount the density needs to increase by
-                                // per Z coordinate to linearly interpolate - to the Z axis density for any corners.
-                                zLerpDensity += zLerpAmount;
-                            }
-
-                            // Add the lerp amount for the X axis - i.e. the amount the density needs to increase by per
-                            // X coordinate to linearly interpolate - to the X axis density for any corners.
-                            xLerpDensityMinZ += xLerpAmountMinZ;
-                            xLerpDensityMaxZ += xLerpAmountMaxZ;
-                        }
-
-                        // Add the lerp amount for the Y axis - i.e. the amount the density needs to increase by per Y
-                        // coordinate to linearly interpolate - to the Y axis density for any corners.
-                        yLerpDensityMinXMinZ += yLerpAmountMinXMinZ;
-                        yLerpDensityMinXMaxZ += yLerpAmountMinXMaxZ;
-                        yLerpDensityMaxXMinZ += yLerpAmountMaxXMinZ;
-                        yLerpDensityMaxXMaxZ += yLerpAmountMaxXMaxZ;
-                    }
-                }
-            }
-        }
-
-        return result;
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+
+import java.util.Random;
+
+public abstract class TerrainGeneratorLerp
+    implements TerrainGenerator
+{
+    protected final World world;
+    protected final Random rand;
+
+    public TerrainGeneratorLerp(World world)
+    {
+        this.world = world;
+        this.rand = new Random();
+    }
+
+    protected abstract int getBlockAt(int x, int y, int z, double density);
+
+    @Override
+    public ChunkGeneratorResult generateTerrain(Chunk chunk, double[] densityMap)
+    {
+        int terrainHeight = (world.getWorldType().getMaxY() + 1) - world.getWorldType().getMinY();
+
+        rand.setSeed((long) chunk.xPosition * 0x4F9939F508L + (long) chunk.zPosition * 0x1EF1565BD5L);
+
+        // Number of blocks per chunk.
+        final int xBlocksPerChunk = Chunk.CHUNK_SIZE_X;
+        final int yBlocksPerChunk = terrainHeight;
+        final int zBlocksPerChunk = Chunk.CHUNK_SIZE_Z;
+
+        // Number of blocks per blob.
+        // A blob is a density region, i.e. a cuboid where each corner has a density value. Density is generated at a
+        // smaller scale than the real world and then linearly interpolated to generate each block inside the blob.
+        final byte xBlocksPerBlob = 4;
+        final byte yBlocksPerBlob = 8;
+        final byte zBlocksPerBlob = 4;
+
+        // Number of blobs per chunk.
+        // Simply the number of blocks per chunk divided by the number of blocks per blob.
+        final int xBlobsPerChunk = xBlocksPerChunk / xBlocksPerBlob;
+        final int yBlobsPerChunk = yBlocksPerChunk / yBlocksPerBlob;
+        final int zBlobsPerChunk = zBlocksPerChunk / zBlocksPerBlob;
+
+        // Number of densities per chunk.
+        // It's plus one because we need the upper and lower density of each blob - each upper blob density is also the
+        // lower density of the next blob sequentially. Think of it as if we looked at 4 boxes of an infinite line, each
+        // of which shares a wall with the next box, like so:
+        /* ┬─┬─┬─┬─┬
+           ┴─┴─┴─┴─┴ */
+        // Four boxes, but if you count them, there are five shared walls. Each box represents a blob, and each shared
+        // wall represents a density value.
+        final int xDensitiesPerChunk = xBlobsPerChunk + 1;
+        final int yDensitiesPerChunk = yBlobsPerChunk + 1;
+        final int zDensitiesPerChunk = zBlobsPerChunk + 1;
+
+        // Lerp interval, i.e. how much more of the density to add per block.
+        // As an example, if you have a starting density of 4 and an ending density of 12, your density change is 8.
+        // If your blob is 4 blocks across, you add 1/4 of the density change each time, so your lerp interval is 1/4 or 0.25.
+        // Your final density is then: density = start density + (density change * lerp interval) * block position.
+        // Block 0: density = 4 + (8 * 0.25) * 0 = 4
+        // Block 1: density = 4 + (8 * 0.25) * 1 = 6
+        // Block 2: density = 4 + (8 * 0.25) * 2 = 8
+        // Block 3: density = 4 + (8 * 0.25) * 3 = 10
+        // Lerp end is non-inclusive, which is why it's fine to stop at 10.
+        final double xLerpInterval = 1D / xBlocksPerBlob;
+        final double yLerpInterval = 1D / yBlocksPerBlob;
+        final double zLerpInterval = 1D / zBlocksPerBlob;
+
+        // Create output array
+        ChunkGeneratorResult result = new ChunkGeneratorResult();
+
+        // Iterate through each blob in the chunk.
+        for (int blobX = 0; blobX < xBlobsPerChunk; blobX++)
+        {
+            for (int blobZ = 0; blobZ < zBlobsPerChunk; blobZ++)
+            {
+                for (int blobY = 0; blobY < yBlobsPerChunk; blobY++)
+                {
+                    // Fetches the densities for each corner of the current blob, so we can interpolate between them.
+                    final double densityMinXMinYMinZ = densityMap[(((blobX * zDensitiesPerChunk) + blobZ) * yDensitiesPerChunk) + blobY];
+                    final double densityMinXMinYMaxZ = densityMap[(((blobX * zDensitiesPerChunk) + (blobZ + 1)) * yDensitiesPerChunk) + blobY];
+                    final double densityMinXMaxYMinZ = densityMap[(((blobX * zDensitiesPerChunk) + blobZ) * yDensitiesPerChunk) + (blobY + 1)];
+                    final double densityMinXMaxYMaxZ = densityMap[(((blobX * zDensitiesPerChunk) + (blobZ + 1)) * yDensitiesPerChunk) + (blobY + 1)];
+                    final double densityMaxXMinYMinZ = densityMap[((((blobX + 1) * zDensitiesPerChunk) + blobZ) * yDensitiesPerChunk) + blobY];
+                    final double densityMaxXMinYMaxZ = densityMap[((((blobX + 1) * zDensitiesPerChunk) + (blobZ + 1)) * yDensitiesPerChunk) + blobY];
+                    final double densityMaxXMaxYMinZ = densityMap[((((blobX + 1) * zDensitiesPerChunk) + blobZ) * yDensitiesPerChunk) + (blobY + 1)];
+                    final double densityMaxXMaxYMaxZ = densityMap[((((blobX + 1) * zDensitiesPerChunk) + (blobZ + 1)) * yDensitiesPerChunk) + (blobY + 1)];
+
+                    // Determines for each corner on the Y axis how much density to add per lerp interval.
+                    double yLerpAmountMinXMinZ = (densityMinXMaxYMinZ - densityMinXMinYMinZ) * yLerpInterval;
+                    double yLerpAmountMinXMaxZ = (densityMinXMaxYMaxZ - densityMinXMinYMaxZ) * yLerpInterval;
+                    double yLerpAmountMaxXMinZ = (densityMaxXMaxYMinZ - densityMaxXMinYMinZ) * yLerpInterval;
+                    double yLerpAmountMaxXMaxZ = (densityMaxXMaxYMaxZ - densityMaxXMinYMaxZ) * yLerpInterval;
+
+                    // Tracks the current interpolated density for the Y coordinate.
+                    double yLerpDensityMinXMinZ = densityMinXMinYMinZ;
+                    double yLerpDensityMinXMaxZ = densityMinXMinYMaxZ;
+                    double yLerpDensityMaxXMinZ = densityMaxXMinYMinZ;
+                    double yLerpDensityMaxXMaxZ = densityMaxXMinYMaxZ;
+
+                    for(int yInBlob = 0; yInBlob < yBlocksPerBlob; yInBlob++)
+                    {
+                        // Determines for each corner on the X axis how much density to add per lerp interval.
+                        double xLerpAmountMinZ = (yLerpDensityMaxXMinZ - yLerpDensityMinXMinZ) * xLerpInterval;
+                        double xLerpAmountMaxZ = (yLerpDensityMaxXMaxZ - yLerpDensityMinXMaxZ) * xLerpInterval;
+
+                        // Tracks the current interpolated density for the X coordinate.
+                        double xLerpDensityMinZ = yLerpDensityMinXMinZ;
+                        double xLerpDensityMaxZ = yLerpDensityMinXMaxZ;
+
+                        for(int xInBlob = 0; xInBlob < xBlocksPerBlob; xInBlob++)
+                        {
+                            // Determines for each corner on the Z axis how much density to add per lerp interval.
+                            double zLerpAmount = (xLerpDensityMaxZ - xLerpDensityMinZ) * zLerpInterval;
+
+                            // Tracks the current interpolated density for the Z coordinate.
+                            double zLerpDensity = xLerpDensityMinZ;
+
+                            for(int zInBlob = 0; zInBlob < zBlocksPerBlob; zInBlob++)
+                            {
+                                // Determine the coordinates for the block within the blob.
+                                int blockX = xInBlob + blobX * xBlocksPerBlob;
+                                int blockY = yInBlob + blobY * yBlocksPerBlob + world.worldType.getMinY();
+                                int blockZ = zInBlob + blobZ * zBlocksPerBlob;
+
+                                int id = getBlockAt(blockX, blockY, blockZ, zLerpDensity);
+
+                                result.setBlock(blockX, blockY, blockZ, id);
+
+                                // Add the lerp amount for the Z axis - i.e. the amount the density needs to increase by
+                                // per Z coordinate to linearly interpolate - to the Z axis density for any corners.
+                                zLerpDensity += zLerpAmount;
+                            }
+
+                            // Add the lerp amount for the X axis - i.e. the amount the density needs to increase by per
+                            // X coordinate to linearly interpolate - to the X axis density for any corners.
+                            xLerpDensityMinZ += xLerpAmountMinZ;
+                            xLerpDensityMaxZ += xLerpAmountMaxZ;
+                        }
+
+                        // Add the lerp amount for the Y axis - i.e. the amount the density needs to increase by per Y
+                        // coordinate to linearly interpolate - to the Y axis density for any corners.
+                        yLerpDensityMinXMinZ += yLerpAmountMinXMinZ;
+                        yLerpDensityMinXMaxZ += yLerpAmountMinXMaxZ;
+                        yLerpDensityMaxXMinZ += yLerpAmountMaxXMinZ;
+                        yLerpDensityMaxXMaxZ += yLerpAmountMaxXMaxZ;
+                    }
+                }
+            }
+        }
+
+        return result;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkDecoratorNether.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkDecoratorNether.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkDecoratorNether.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkDecoratorNether.java
index 4f5131175..6b7d61976 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkDecoratorNether.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkDecoratorNether.java
@@ -1,96 +1,96 @@
-package net.minecraft.core.world.generate.chunk.perlin.nether;
-
-import net.minecraft.core.block.BlockSand;
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkDecorator;
-import net.minecraft.core.world.generate.feature.*;
-
-import java.util.Random;
-
-public class ChunkDecoratorNether
-    implements ChunkDecorator
-{
-    private final World world;
-
-    public ChunkDecoratorNether(World world)
-    {
-        this.world = world;
-    }
-
-    @Override
-    public void decorate(Chunk chunk)
-    {
-        int chunkX = chunk.xPosition;
-        int chunkZ = chunk.zPosition;
-
-        int minY = world.getWorldType().getMinY();
-        int maxY = world.getWorldType().getMaxY();
-        int rangeY = (maxY + 1) - minY;
-
-        Random rand = new Random((long) chunkX * 0x4f9939f508L + (long) chunkZ * 0x1ef1565bd5L);
-
-        BlockSand.fallInstantly = true;
-        int x = chunkX * 16;
-        int z = chunkZ * 16;
-        for(int i = 0; i < 8; i++)
-        {
-            int xf = x + rand.nextInt(16) + 8;
-            int yf = minY + rand.nextInt(rangeY - 8) + 4;
-            int zf = z + rand.nextInt(16) + 8;
-            (new WorldFeatureNetherLava(Blocks.FLUID_LAVA_FLOWING.id)).place(world, rand, xf, yf, zf);
-        }
-
-        for(int i = 0; i < 10; i++)
-        {
-            int xf = x + rand.nextInt(16);
-            int yf = minY + rand.nextInt(rangeY - 8) + 4;
-            int zf = z + rand.nextInt(16);
-            (new WorldFeatureOre(Blocks.ORE_NETHERCOAL_NETHERRACK.id, 12)).place(world, rand, xf, yf, zf);
-        }
-
-        int max = rand.nextInt(rand.nextInt(10) + 1);
-        for(int i = 0; i < max; i++)
-        {
-            int xf = x + rand.nextInt(16) + 8;
-            int yf = minY + rand.nextInt(rangeY - 8) + 4;
-            int zf = z + rand.nextInt(16) + 8;
-            (new WorldFeatureFire()).place(world, rand, xf, yf, zf);
-        }
-
-        max = rand.nextInt(rand.nextInt(10) + 1);
-        for(int i = 0; i < max; i++)
-        {
-            int xf = x + rand.nextInt(16) + 8;
-            int yf = minY + rand.nextInt(rangeY - 8) + 4;
-            int zf = z + rand.nextInt(16) + 8;
-            (new WorldFeatureGlowstoneA()).place(world, rand, xf, yf, zf);
-        }
-
-        for(int i = 0; i < 10; i++)
-        {
-            int xf = x + rand.nextInt(16) + 8;
-            int yf = minY + rand.nextInt(rangeY - 8) + 4;
-            int zf = z + rand.nextInt(16) + 8;
-            (new WorldFeatureGlowstoneB()).place(world, rand, xf, yf, zf);
-        }
-
-        if (rand.nextInt(8) == 0) {
-            int xf = x + rand.nextInt(16) + 8;
-            int yf = minY + rand.nextInt(rangeY - 16) + 8;
-            int zf = z + rand.nextInt(16) + 8;
-            (new WorldFeatureLake(Blocks.FLUID_LAVA_STILL.id)).place(world, rand, xf, yf, zf);
-        }
-
-        for (int i = 0; i < /*20*/80; i++) {
-            int xf = x + rand.nextInt(16);
-            int yf = minY + rand.nextInt(rangeY);
-            int zf = z + rand.nextInt(16);
-            (new WorldFeaturePumice(32)).place(world, rand, xf, yf, zf);
-        }
-
-        BlockSand.fallInstantly = false;
-
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.nether;
+
+import net.minecraft.core.block.BlockSand;
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkDecorator;
+import net.minecraft.core.world.generate.feature.*;
+
+import java.util.Random;
+
+public class ChunkDecoratorNether
+    implements ChunkDecorator
+{
+    private final World world;
+
+    public ChunkDecoratorNether(World world)
+    {
+        this.world = world;
+    }
+
+    @Override
+    public void decorate(Chunk chunk)
+    {
+        int chunkX = chunk.xPosition;
+        int chunkZ = chunk.zPosition;
+
+        int minY = world.getWorldType().getMinY();
+        int maxY = world.getWorldType().getMaxY();
+        int rangeY = (maxY + 1) - minY;
+
+        Random rand = new Random((long) chunkX * 0x4f9939f508L + (long) chunkZ * 0x1ef1565bd5L);
+
+        BlockSand.fallInstantly = true;
+        int x = chunkX * 16;
+        int z = chunkZ * 16;
+        for(int i = 0; i < 8; i++)
+        {
+            int xf = x + rand.nextInt(16) + 8;
+            int yf = minY + rand.nextInt(rangeY - 8) + 4;
+            int zf = z + rand.nextInt(16) + 8;
+            (new WorldFeatureNetherLava(Blocks.FLUID_LAVA_FLOWING.id)).place(world, rand, xf, yf, zf);
+        }
+
+        for(int i = 0; i < 10; i++)
+        {
+            int xf = x + rand.nextInt(16);
+            int yf = minY + rand.nextInt(rangeY - 8) + 4;
+            int zf = z + rand.nextInt(16);
+            (new WorldFeatureOre(Blocks.ORE_NETHERCOAL_NETHERRACK.id, 12)).place(world, rand, xf, yf, zf);
+        }
+
+        int max = rand.nextInt(rand.nextInt(10) + 1);
+        for(int i = 0; i < max; i++)
+        {
+            int xf = x + rand.nextInt(16) + 8;
+            int yf = minY + rand.nextInt(rangeY - 8) + 4;
+            int zf = z + rand.nextInt(16) + 8;
+            (new WorldFeatureFire()).place(world, rand, xf, yf, zf);
+        }
+
+        max = rand.nextInt(rand.nextInt(10) + 1);
+        for(int i = 0; i < max; i++)
+        {
+            int xf = x + rand.nextInt(16) + 8;
+            int yf = minY + rand.nextInt(rangeY - 8) + 4;
+            int zf = z + rand.nextInt(16) + 8;
+            (new WorldFeatureGlowstoneA()).place(world, rand, xf, yf, zf);
+        }
+
+        for(int i = 0; i < 10; i++)
+        {
+            int xf = x + rand.nextInt(16) + 8;
+            int yf = minY + rand.nextInt(rangeY - 8) + 4;
+            int zf = z + rand.nextInt(16) + 8;
+            (new WorldFeatureGlowstoneB()).place(world, rand, xf, yf, zf);
+        }
+
+        if (rand.nextInt(8) == 0) {
+            int xf = x + rand.nextInt(16) + 8;
+            int yf = minY + rand.nextInt(rangeY - 16) + 8;
+            int zf = z + rand.nextInt(16) + 8;
+            (new WorldFeatureLake(Blocks.FLUID_LAVA_STILL.id)).place(world, rand, xf, yf, zf);
+        }
+
+        for (int i = 0; i < /*20*/80; i++) {
+            int xf = x + rand.nextInt(16);
+            int yf = minY + rand.nextInt(rangeY);
+            int zf = z + rand.nextInt(16);
+            (new WorldFeaturePumice(32)).place(world, rand, xf, yf, zf);
+        }
+
+        BlockSand.fallInstantly = false;
+
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkGeneratorNether.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkGeneratorNether.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkGeneratorNether.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkGeneratorNether.java
index df70b1d23..25735df83 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkGeneratorNether.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/ChunkGeneratorNether.java
@@ -1,16 +1,16 @@
-package net.minecraft.core.world.generate.chunk.perlin.nether;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.CavesLargeFeature;
-import net.minecraft.core.world.generate.LargeFeature;
-import net.minecraft.core.world.generate.WarrensCavesLargeFeature;
-import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
-
-public class ChunkGeneratorNether
-    extends ChunkGeneratorPerlin
-{
-    public ChunkGeneratorNether(World world)
-    {
-        super(world, new ChunkDecoratorNether(world), new TerrainGeneratorNether(world), new SurfaceGeneratorNether(world), new LargeFeature[] { new CavesLargeFeature(128, 256), new WarrensCavesLargeFeature(0, 128) });
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.nether;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
+import net.minecraft.core.world.generate.WarrensCavesLargeFeature;
+import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
+
+public class ChunkGeneratorNether
+    extends ChunkGeneratorPerlin
+{
+    public ChunkGeneratorNether(World world)
+    {
+        super(world, new ChunkDecoratorNether(world), new TerrainGeneratorNether(world), new SurfaceGeneratorNether(world), new LargeFeature[] { new CavesLargeFeature(128, 256), new WarrensCavesLargeFeature(0, 128) });
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/DensityGeneratorNether.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/DensityGeneratorNether.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/DensityGeneratorNether.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/DensityGeneratorNether.java
index 124c8ae5f..078a7b736 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/DensityGeneratorNether.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/DensityGeneratorNether.java
@@ -1,182 +1,182 @@
-package net.minecraft.core.world.generate.chunk.perlin.nether;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
-import net.minecraft.core.world.noise.PerlinNoise;
-
-public class DensityGeneratorNether
-    implements DensityGenerator
-{
-    private final World world;
-
-    private final PerlinNoise minLimitNoise;
-    private final PerlinNoise maxLimitNoise;
-    private final PerlinNoise mainNoise;
-//    private final PerlinNoise scaleNoise;
-//    private final PerlinNoise depthNoise;
-
-
-    public DensityGeneratorNether(World world)
-    {
-        this.world = world;
-
-        this.minLimitNoise = new PerlinNoise(world.getRandomSeed(), 16, 0);
-        this.maxLimitNoise = new PerlinNoise(world.getRandomSeed(), 16, 16);
-        this.mainNoise = new PerlinNoise(world.getRandomSeed(), 8, 32);
-//        this.scaleNoise = new PerlinNoise(world.getRandomSeed(), 10, 48);
-//        this.depthNoise = new PerlinNoise(world.getRandomSeed(), 16, 58);
-    }
-
-    @Override
-    public double[] generateDensityMap(Chunk chunk)
-    {
-        int terrainHeight = (world.getWorldType().getMaxY() + 1) - world.getWorldType().getMinY();
-        int xSize = 4 + 1;
-        int ySize = (terrainHeight / 8) + 1;
-        int zSize = 4 + 1;
-        int x = chunk.xPosition * 4;
-        int y = 0;
-        int z = chunk.zPosition * 4;
-
-        double[] densityMapArray = new double[xSize * ySize * zSize];
-
-        final double mainNoiseScaleX = 80.0;
-        final double mainNoiseScaleY = 60.0;
-        final double mainNoiseScaleZ = 80.0;
-
-//        final double scaleNoiseScaleX = 1.0;
-//        final double scaleNoiseScaleZ = 1.0;
-
-//        final double depthNoiseScaleX = 100.0;
-//        final double depthNoiseScaleZ = 100.0;
-
-//        final double depthBaseSize = (terrainHeight / 16D) + 0.5D;
-
-        final double coordScale = 684.412D;
-        final double heightScale = 2053.236D;
-
-        final double upperLimitScale = 512.0;
-        final double lowerLimitScale = 512.0;
-
-//        double[] scaleArray = scaleNoise.get(null, x, z, xSize, zSize, scaleNoiseScaleX, scaleNoiseScaleZ);
-//        double[] depthArray = depthNoise.get(null, x, z, xSize, zSize, depthNoiseScaleX, depthNoiseScaleZ);
-        double[] mainNoiseArray = mainNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale / mainNoiseScaleX, heightScale / mainNoiseScaleY, coordScale / mainNoiseScaleZ);
-        double[] minLimitArray = minLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
-        double[] maxLimitArray = maxLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
-        int mainIndex = 0;
-//        int depthScaleIndex = 0;
-        double[] densityOffsetArray = new double[ySize];
-        for(int dy = 0; dy < ySize; dy++)
-        {
-            densityOffsetArray[dy] = Math.cos(((double)dy * Math.PI * 6D) / (double)ySize) * 2D;
-            double densityOffset = dy;
-            if(dy > ySize / 2)
-            {
-                densityOffset = ySize - 1 - dy;
-            }
-            if(densityOffset < 4D)
-            {
-                densityOffset = 4D - densityOffset;
-                densityOffsetArray[dy] -= densityOffset * densityOffset * densityOffset * 10D;
-            }
-        }
-
-        for(int dx = 0; dx < xSize; dx++)
-        {
-            for(int dz = 0; dz < zSize; dz++)
-            {
-                // Calculate scale
-//                double scale = (scaleArray[depthScaleIndex] + 256D) / 512D;
-//                if(scale > 1.0D)
-//                {
-//                    scale = 1.0D;
-//                }
-//                double d4 = 0.0D;
-
-                // Calculate depth
-//                double depth = depthArray[depthScaleIndex] / 8000D;
-//                if(depth < 0.0D)
-//                {
-//                    depth = -depth;
-//                }
-//                depth = depth * 3D - 3D;
-
-//                if(depth < 0.0D)
-//                {
-//                    depth /= 2D;
-//                    if(depth < -1D)
-//                    {
-//                        depth = -1D;
-//                    }
-//                    depth /= 1.4D;
-//                    depth /= 2D;
-//                    scale = 0.0D;
-//                }
-//                else
-//                {
-//                    if(depth > 1.0D)
-//                    {
-//                        depth = 1.0D;
-//                    }
-//                    depth /= 6D;
-//                }
-
-//                scale += 0.5D;
-//                depth = (depth * (depthBaseSize * 2)) / 16D;
-
-//                depthScaleIndex++;
-                for(int dy = 0; dy < ySize; dy++)
-                {
-                    double density;
-                    double densityOffset = densityOffsetArray[dy];
-                    double minDensity = minLimitArray[mainIndex] / upperLimitScale;
-                    double maxDensity = maxLimitArray[mainIndex] / lowerLimitScale;
-                    double mainDensity = (mainNoiseArray[mainIndex] / 10D + 1.0D) / 2D;
-
-                    // Constrain density
-                    if(mainDensity < 0.0D)
-                    {
-                        density = minDensity;
-                    }
-                    else if(mainDensity > 1.0D)
-                    {
-                        density = maxDensity;
-                    }
-                    else
-                    {
-                        density = minDensity + (maxDensity - minDensity) * mainDensity;
-                    }
-                    density -= densityOffset;
-
-                    if(dy > ySize - 4)
-                    {
-                        double d11 = (float)(dy - (ySize - 4)) / 3F;
-                        density = density * (1.0D - d11) + -10D * d11;
-                    }
-                    // This code was always false
-//                    if((double)dy < d4)
-//                    {
-//                        double densityMod = (d4 - (double)dy) / 4D;
-//                        if(densityMod < 0.0D)
-//                        {
-//                            densityMod = 0.0D;
-//                        }
-//                        if(densityMod > 1.0D)
-//                        {
-//                            densityMod = 1.0D;
-//                        }
-//                        density = density * (1.0D - densityMod) + -10D * densityMod;
-//                    }
-
-                    densityMapArray[mainIndex] = density;
-                    mainIndex++;
-                }
-
-            }
-
-        }
-
-        return densityMapArray;
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.nether;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
+import net.minecraft.core.world.noise.PerlinNoise;
+
+public class DensityGeneratorNether
+    implements DensityGenerator
+{
+    private final World world;
+
+    private final PerlinNoise minLimitNoise;
+    private final PerlinNoise maxLimitNoise;
+    private final PerlinNoise mainNoise;
+//    private final PerlinNoise scaleNoise;
+//    private final PerlinNoise depthNoise;
+
+
+    public DensityGeneratorNether(World world)
+    {
+        this.world = world;
+
+        this.minLimitNoise = new PerlinNoise(world.getRandomSeed(), 16, 0);
+        this.maxLimitNoise = new PerlinNoise(world.getRandomSeed(), 16, 16);
+        this.mainNoise = new PerlinNoise(world.getRandomSeed(), 8, 32);
+//        this.scaleNoise = new PerlinNoise(world.getRandomSeed(), 10, 48);
+//        this.depthNoise = new PerlinNoise(world.getRandomSeed(), 16, 58);
+    }
+
+    @Override
+    public double[] generateDensityMap(Chunk chunk)
+    {
+        int terrainHeight = (world.getWorldType().getMaxY() + 1) - world.getWorldType().getMinY();
+        int xSize = 4 + 1;
+        int ySize = (terrainHeight / 8) + 1;
+        int zSize = 4 + 1;
+        int x = chunk.xPosition * 4;
+        int y = 0;
+        int z = chunk.zPosition * 4;
+
+        double[] densityMapArray = new double[xSize * ySize * zSize];
+
+        final double mainNoiseScaleX = 80.0;
+        final double mainNoiseScaleY = 60.0;
+        final double mainNoiseScaleZ = 80.0;
+
+//        final double scaleNoiseScaleX = 1.0;
+//        final double scaleNoiseScaleZ = 1.0;
+
+//        final double depthNoiseScaleX = 100.0;
+//        final double depthNoiseScaleZ = 100.0;
+
+//        final double depthBaseSize = (terrainHeight / 16D) + 0.5D;
+
+        final double coordScale = 684.412D;
+        final double heightScale = 2053.236D;
+
+        final double upperLimitScale = 512.0;
+        final double lowerLimitScale = 512.0;
+
+//        double[] scaleArray = scaleNoise.get(null, x, z, xSize, zSize, scaleNoiseScaleX, scaleNoiseScaleZ);
+//        double[] depthArray = depthNoise.get(null, x, z, xSize, zSize, depthNoiseScaleX, depthNoiseScaleZ);
+        double[] mainNoiseArray = mainNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale / mainNoiseScaleX, heightScale / mainNoiseScaleY, coordScale / mainNoiseScaleZ);
+        double[] minLimitArray = minLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
+        double[] maxLimitArray = maxLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
+        int mainIndex = 0;
+//        int depthScaleIndex = 0;
+        double[] densityOffsetArray = new double[ySize];
+        for(int dy = 0; dy < ySize; dy++)
+        {
+            densityOffsetArray[dy] = Math.cos(((double)dy * Math.PI * 6D) / (double)ySize) * 2D;
+            double densityOffset = dy;
+            if(dy > ySize / 2)
+            {
+                densityOffset = ySize - 1 - dy;
+            }
+            if(densityOffset < 4D)
+            {
+                densityOffset = 4D - densityOffset;
+                densityOffsetArray[dy] -= densityOffset * densityOffset * densityOffset * 10D;
+            }
+        }
+
+        for(int dx = 0; dx < xSize; dx++)
+        {
+            for(int dz = 0; dz < zSize; dz++)
+            {
+                // Calculate scale
+//                double scale = (scaleArray[depthScaleIndex] + 256D) / 512D;
+//                if(scale > 1.0D)
+//                {
+//                    scale = 1.0D;
+//                }
+//                double d4 = 0.0D;
+
+                // Calculate depth
+//                double depth = depthArray[depthScaleIndex] / 8000D;
+//                if(depth < 0.0D)
+//                {
+//                    depth = -depth;
+//                }
+//                depth = depth * 3D - 3D;
+
+//                if(depth < 0.0D)
+//                {
+//                    depth /= 2D;
+//                    if(depth < -1D)
+//                    {
+//                        depth = -1D;
+//                    }
+//                    depth /= 1.4D;
+//                    depth /= 2D;
+//                    scale = 0.0D;
+//                }
+//                else
+//                {
+//                    if(depth > 1.0D)
+//                    {
+//                        depth = 1.0D;
+//                    }
+//                    depth /= 6D;
+//                }
+
+//                scale += 0.5D;
+//                depth = (depth * (depthBaseSize * 2)) / 16D;
+
+//                depthScaleIndex++;
+                for(int dy = 0; dy < ySize; dy++)
+                {
+                    double density;
+                    double densityOffset = densityOffsetArray[dy];
+                    double minDensity = minLimitArray[mainIndex] / upperLimitScale;
+                    double maxDensity = maxLimitArray[mainIndex] / lowerLimitScale;
+                    double mainDensity = (mainNoiseArray[mainIndex] / 10D + 1.0D) / 2D;
+
+                    // Constrain density
+                    if(mainDensity < 0.0D)
+                    {
+                        density = minDensity;
+                    }
+                    else if(mainDensity > 1.0D)
+                    {
+                        density = maxDensity;
+                    }
+                    else
+                    {
+                        density = minDensity + (maxDensity - minDensity) * mainDensity;
+                    }
+                    density -= densityOffset;
+
+                    if(dy > ySize - 4)
+                    {
+                        double d11 = (float)(dy - (ySize - 4)) / 3F;
+                        density = density * (1.0D - d11) + -10D * d11;
+                    }
+                    // This code was always false
+//                    if((double)dy < d4)
+//                    {
+//                        double densityMod = (d4 - (double)dy) / 4D;
+//                        if(densityMod < 0.0D)
+//                        {
+//                            densityMod = 0.0D;
+//                        }
+//                        if(densityMod > 1.0D)
+//                        {
+//                            densityMod = 1.0D;
+//                        }
+//                        density = density * (1.0D - densityMod) + -10D * densityMod;
+//                    }
+
+                    densityMapArray[mainIndex] = density;
+                    mainIndex++;
+                }
+
+            }
+
+        }
+
+        return densityMapArray;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/SurfaceGeneratorNether.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/SurfaceGeneratorNether.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/SurfaceGeneratorNether.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/SurfaceGeneratorNether.java
index 1d4d3f013..30ab6ec5c 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/SurfaceGeneratorNether.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/SurfaceGeneratorNether.java
@@ -1,138 +1,138 @@
-package net.minecraft.core.world.generate.chunk.perlin.nether;
-
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-import net.minecraft.core.world.generate.chunk.perlin.SurfaceGenerator;
-import net.minecraft.core.world.noise.PerlinNoise;
-
-import java.util.Random;
-
-public class SurfaceGeneratorNether
-    implements SurfaceGenerator
-{
-    private final World world;
-
-    private final PerlinNoise beachNoise;
-    private final PerlinNoise soilNoise;
-
-    public SurfaceGeneratorNether(World world)
-    {
-        this.world = world;
-
-        beachNoise = new PerlinNoise(world.getRandomSeed(), 4, 40);
-        soilNoise = new PerlinNoise(world.getRandomSeed(), 4, 44);
-    }
-
-    @Override
-    public void generateSurface(Chunk chunk, ChunkGeneratorResult result)
-    {
-        int oceanY = world.getWorldType().getOceanY();
-        int minY = world.getWorldType().getMinY();
-        int maxY = world.getWorldType().getMaxY();
-        int chunkX = chunk.xPosition;
-        int chunkZ = chunk.zPosition;
-
-        int oceanBlock = world.getWorldType().getOceanBlockId();
-        int worldFillBlock = world.getWorldType().getFillerBlockId();
-
-        Random rand = new Random((long) chunkX * 0x4F9939F508L + (long) chunkZ * 0x1EF1565BD5L);
-
-        double beachScale = 0.03125D;
-        double[] sandBeachNoise = beachNoise.get(null, chunkX * 16, chunkZ * 16, 0.0D, 16, 16, 1, beachScale, beachScale, 1.0D);
-        double[] gravelBeachNoise = beachNoise.get(null, chunkX * 16, 109.0134D, chunkZ * 16, 16, 1, 16, beachScale, 1.0D, beachScale);
-        double[] soilThicknessNoise = soilNoise.get(null, chunkX * 16, chunkZ * 16, 0.0D, 16, 16, 1, beachScale * 2D, beachScale * 2D, beachScale * 2D);
-        for(int z = 0; z < 16; z++)
-        {
-            for(int x = 0; x < 16; x++)
-            {
-                boolean generateSandBeach = sandBeachNoise[z + x * 16] + rand.nextDouble() * 0.2D > 0.0D;
-                boolean generateGravelBeach = gravelBeachNoise[z + x * 16] + rand.nextDouble() * 0.2D > 0.0D;
-                int soilThickness = (int)(soilThicknessNoise[z + x * 16] / 3D + 3D + rand.nextDouble() * 0.25D);
-
-                int currentLayerDepth = -1;
-                short topBlock = (short) worldFillBlock;
-                short fillerBlock = (short) worldFillBlock;
-
-                for(int y = maxY; y >= minY; y--)
-                {
-                    int block = result.getBlock(x, y, z);
-
-                    // reset the currently generating surface thickness to 0 if encountered air
-                    if(block == 0)
-                    {
-                        currentLayerDepth = -1;
-                        continue;
-                    }
-
-                    // will skip a generation loop if it encounters something other than netherrack
-                    if(block != worldFillBlock)
-                    {
-                        continue;
-                    }
-
-                    // if thickness == -1, find what block to place on layer level
-                    if(currentLayerDepth == -1)
-                    {
-                        // if soil thickness is below 0, generate a stone basin where there is no top block layer
-                        if(soilThickness <= 0)
-                        {
-                            topBlock = 0;
-                            fillerBlock = (short) worldFillBlock;
-                        }
-                        else if(y >= minY + oceanY - 4 && y <= minY + oceanY + 1)
-                        {
-                            // Generate coastlines
-                            topBlock = (short) worldFillBlock;
-                            fillerBlock = (short) worldFillBlock;
-                            if(generateGravelBeach)
-                            {
-                                topBlock = (short) Blocks.GRAVEL.id;
-                            }
-                            if(generateGravelBeach)
-                            {
-                                fillerBlock = (short) Blocks.COBBLE_NETHERRACK.id;
-                            }
-                            if(generateSandBeach)
-                            {
-                                topBlock = (short) Blocks.SOULSAND.id;
-                            }
-                            if(generateSandBeach)
-                            {
-                                fillerBlock = (short) Blocks.SOULSAND.id;
-                            }
-                        }
-
-                        // failsafe so that if a basin is generated under the ocean, the ocean is not replaced with air
-                        if(y < minY + oceanY && topBlock == 0)
-                        {
-                            topBlock = (short) oceanBlock;
-                        }
-                        // if a new surface layer has been chosen to be generated, set the current layer depth to the generated soil thickness level and begin generating downwards
-                        currentLayerDepth = soilThickness;
-
-                        // set block at index to designated surface block above ocean level
-                        if(y >= minY + oceanY - 1)
-                        {
-                            result.setBlock(x, y, z, topBlock);
-                        }
-                        else
-                        {
-                            // if the block is below ocean level, set it to the chosen filler block
-                            result.setBlock(x, y, z, fillerBlock);
-                        }
-                        continue;
-                    }
-
-                    // fill blocks with filler block until current layer level = -1 or air is encountered
-                    if(currentLayerDepth > 0)
-                    {
-                        currentLayerDepth--;
-                        result.setBlock(x, y, z, fillerBlock);
-                    }
-                }
-            }
-        }
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.nether;
+
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+import net.minecraft.core.world.generate.chunk.perlin.SurfaceGenerator;
+import net.minecraft.core.world.noise.PerlinNoise;
+
+import java.util.Random;
+
+public class SurfaceGeneratorNether
+    implements SurfaceGenerator
+{
+    private final World world;
+
+    private final PerlinNoise beachNoise;
+    private final PerlinNoise soilNoise;
+
+    public SurfaceGeneratorNether(World world)
+    {
+        this.world = world;
+
+        beachNoise = new PerlinNoise(world.getRandomSeed(), 4, 40);
+        soilNoise = new PerlinNoise(world.getRandomSeed(), 4, 44);
+    }
+
+    @Override
+    public void generateSurface(Chunk chunk, ChunkGeneratorResult result)
+    {
+        int oceanY = world.getWorldType().getOceanY();
+        int minY = world.getWorldType().getMinY();
+        int maxY = world.getWorldType().getMaxY();
+        int chunkX = chunk.xPosition;
+        int chunkZ = chunk.zPosition;
+
+        int oceanBlock = world.getWorldType().getOceanBlockId();
+        int worldFillBlock = world.getWorldType().getFillerBlockId();
+
+        Random rand = new Random((long) chunkX * 0x4F9939F508L + (long) chunkZ * 0x1EF1565BD5L);
+
+        double beachScale = 0.03125D;
+        double[] sandBeachNoise = beachNoise.get(null, chunkX * 16, chunkZ * 16, 0.0D, 16, 16, 1, beachScale, beachScale, 1.0D);
+        double[] gravelBeachNoise = beachNoise.get(null, chunkX * 16, 109.0134D, chunkZ * 16, 16, 1, 16, beachScale, 1.0D, beachScale);
+        double[] soilThicknessNoise = soilNoise.get(null, chunkX * 16, chunkZ * 16, 0.0D, 16, 16, 1, beachScale * 2D, beachScale * 2D, beachScale * 2D);
+        for(int z = 0; z < 16; z++)
+        {
+            for(int x = 0; x < 16; x++)
+            {
+                boolean generateSandBeach = sandBeachNoise[z + x * 16] + rand.nextDouble() * 0.2D > 0.0D;
+                boolean generateGravelBeach = gravelBeachNoise[z + x * 16] + rand.nextDouble() * 0.2D > 0.0D;
+                int soilThickness = (int)(soilThicknessNoise[z + x * 16] / 3D + 3D + rand.nextDouble() * 0.25D);
+
+                int currentLayerDepth = -1;
+                short topBlock = (short) worldFillBlock;
+                short fillerBlock = (short) worldFillBlock;
+
+                for(int y = maxY; y >= minY; y--)
+                {
+                    int block = result.getBlock(x, y, z);
+
+                    // reset the currently generating surface thickness to 0 if encountered air
+                    if(block == 0)
+                    {
+                        currentLayerDepth = -1;
+                        continue;
+                    }
+
+                    // will skip a generation loop if it encounters something other than netherrack
+                    if(block != worldFillBlock)
+                    {
+                        continue;
+                    }
+
+                    // if thickness == -1, find what block to place on layer level
+                    if(currentLayerDepth == -1)
+                    {
+                        // if soil thickness is below 0, generate a stone basin where there is no top block layer
+                        if(soilThickness <= 0)
+                        {
+                            topBlock = 0;
+                            fillerBlock = (short) worldFillBlock;
+                        }
+                        else if(y >= minY + oceanY - 4 && y <= minY + oceanY + 1)
+                        {
+                            // Generate coastlines
+                            topBlock = (short) worldFillBlock;
+                            fillerBlock = (short) worldFillBlock;
+                            if(generateGravelBeach)
+                            {
+                                topBlock = (short) Blocks.GRAVEL.id;
+                            }
+                            if(generateGravelBeach)
+                            {
+                                fillerBlock = (short) Blocks.COBBLE_NETHERRACK.id;
+                            }
+                            if(generateSandBeach)
+                            {
+                                topBlock = (short) Blocks.SOULSAND.id;
+                            }
+                            if(generateSandBeach)
+                            {
+                                fillerBlock = (short) Blocks.SOULSAND.id;
+                            }
+                        }
+
+                        // failsafe so that if a basin is generated under the ocean, the ocean is not replaced with air
+                        if(y < minY + oceanY && topBlock == 0)
+                        {
+                            topBlock = (short) oceanBlock;
+                        }
+                        // if a new surface layer has been chosen to be generated, set the current layer depth to the generated soil thickness level and begin generating downwards
+                        currentLayerDepth = soilThickness;
+
+                        // set block at index to designated surface block above ocean level
+                        if(y >= minY + oceanY - 1)
+                        {
+                            result.setBlock(x, y, z, topBlock);
+                        }
+                        else
+                        {
+                            // if the block is below ocean level, set it to the chosen filler block
+                            result.setBlock(x, y, z, fillerBlock);
+                        }
+                        continue;
+                    }
+
+                    // fill blocks with filler block until current layer level = -1 or air is encountered
+                    if(currentLayerDepth > 0)
+                    {
+                        currentLayerDepth--;
+                        result.setBlock(x, y, z, fillerBlock);
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/TerrainGeneratorNether.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/TerrainGeneratorNether.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/TerrainGeneratorNether.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/TerrainGeneratorNether.java
index e643374c0..67bd855e7 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/TerrainGeneratorNether.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/nether/TerrainGeneratorNether.java
@@ -1,60 +1,60 @@
-package net.minecraft.core.world.generate.chunk.perlin.nether;
-
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
-import net.minecraft.core.world.generate.chunk.perlin.TerrainGeneratorLerp;
-import net.minecraft.core.world.type.WorldType;
-
-public class TerrainGeneratorNether
-    extends TerrainGeneratorLerp
-{
-    private final DensityGenerator densityGenerator;
-
-    public TerrainGeneratorNether(World world)
-    {
-        super(world);
-
-        this.densityGenerator = new DensityGeneratorNether(world);
-    }
-
-    @Override
-    protected int getBlockAt(int x, int y, int z, double density)
-    {
-        WorldType type = world.getWorldType();
-        int halfHeight = type.getMaxY() / 2;
-
-        if (y >= type.getMaxY() - rand.nextInt(5))
-        {
-            return Blocks.BEDROCK.id;
-        }
-        else if (y >= halfHeight - rand.nextInt(5) && y <= halfHeight + 5 - rand.nextInt(5))
-        {
-            return Blocks.BONESHALE.id;
-        }
-        else if (y <= type.getMinY() + rand.nextInt(5))
-        {
-            return Blocks.BEDROCK.id;
-        }
-        else if (y <= halfHeight)
-        {
-            return Blocks.SOULSCHIST.id;
-        }
-        else if (density > 0.0)
-        {
-            return type.getFillerBlockId();
-        }
-        else if (y >= halfHeight && y < type.getOceanY())
-        {
-            return type.getOceanBlockId();
-        }
-
-        return 0;
-    }
-
-    @Override
-    public DensityGenerator getDensityGenerator()
-    {
-        return densityGenerator;
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.nether;
+
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
+import net.minecraft.core.world.generate.chunk.perlin.TerrainGeneratorLerp;
+import net.minecraft.core.world.type.WorldType;
+
+public class TerrainGeneratorNether
+    extends TerrainGeneratorLerp
+{
+    private final DensityGenerator densityGenerator;
+
+    public TerrainGeneratorNether(World world)
+    {
+        super(world);
+
+        this.densityGenerator = new DensityGeneratorNether(world);
+    }
+
+    @Override
+    protected int getBlockAt(int x, int y, int z, double density)
+    {
+        WorldType type = world.getWorldType();
+        int halfHeight = type.getMaxY() / 2;
+
+        if (y >= type.getMaxY() - rand.nextInt(5))
+        {
+            return Blocks.BEDROCK.id;
+        }
+        else if (y >= halfHeight - rand.nextInt(5) && y <= halfHeight + 5 - rand.nextInt(5))
+        {
+            return Blocks.BONESHALE.id;
+        }
+        else if (y <= type.getMinY() + rand.nextInt(5))
+        {
+            return Blocks.BEDROCK.id;
+        }
+        else if (y <= halfHeight)
+        {
+            return Blocks.SOULSCHIST.id;
+        }
+        else if (density > 0.0)
+        {
+            return type.getFillerBlockId();
+        }
+        else if (y >= halfHeight && y < type.getOceanY())
+        {
+            return type.getOceanBlockId();
+        }
+
+        return 0;
+    }
+
+    @Override
+    public DensityGenerator getDensityGenerator()
+    {
+        return densityGenerator;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkDecoratorOverworld.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkDecoratorOverworld.java
similarity index 95%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkDecoratorOverworld.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkDecoratorOverworld.java
index ae62cf9ea..bb43679a1 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkDecoratorOverworld.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkDecoratorOverworld.java
@@ -1,596 +1,596 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld;
-
-import net.minecraft.core.block.BlockLeavesBase;
-import net.minecraft.core.block.Block;
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.block.BlockOreCoal;
-import net.minecraft.core.block.BlockOreDiamond;
-import net.minecraft.core.block.BlockOreGold;
-import net.minecraft.core.block.BlockOreIron;
-import net.minecraft.core.block.BlockOreLapis;
-import net.minecraft.core.block.BlockMoss;
-import net.minecraft.core.block.BlockOreRedstone;
-import net.minecraft.core.block.BlockSand;
-import net.minecraft.core.block.material.Material;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.biome.Biomes;
-import net.minecraft.core.world.type.WorldTypes;
-import net.minecraft.core.world.biome.Biome;
-import net.minecraft.core.world.biome.BiomeOutback;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkDecorator;
-import net.minecraft.core.world.generate.feature.*;
-import net.minecraft.core.world.noise.PerlinNoise;
-
-import java.util.Random;
-
-public class ChunkDecoratorOverworld
-    implements ChunkDecorator
-{
-    private final World world;
-    private final PerlinNoise treeDensityNoise;
-    private final int treeDensityOverride;
-
-    protected ChunkDecoratorOverworld(World world, int treeDensityOverride)
-    {
-        this.world = world;
-        this.treeDensityOverride = treeDensityOverride;
-
-        treeDensityNoise = new PerlinNoise(world.getRandomSeed(), 8, 74);
-    }
-
-    public ChunkDecoratorOverworld(World world)
-    {
-        this(world, -1);
-    }
-
-    @Override
-    public void decorate(Chunk chunk)
-    {
-        world.scheduledUpdatesAreImmediate = true;
-        int chunkX = chunk.xPosition;
-        int chunkZ = chunk.zPosition;
-
-        int minY = world.getWorldType().getMinY();
-        int maxY = world.getWorldType().getMaxY();
-        int rangeY = (maxY + 1) - minY;
-
-        float oreHeightModifier = rangeY / 128f;
-
-        BlockSand.fallInstantly = true;
-        int x = chunkX * 16;
-        int z = chunkZ * 16;
-        int y = world.getHeightValue(x + 16, z + 16);
-        Biome biome = world.getBlockBiome(x + 16, y, z + 16);
-        Random rand = new Random(world.getRandomSeed());
-        long l1 = (rand.nextLong() / 2L) * 2L + 1L;
-        long l2 = (rand.nextLong() / 2L) * 2L + 1L;
-        rand.setSeed((long) chunkX * l1 + (long) chunkZ * l2 ^ world.getRandomSeed());
-        Random swampRand = new Random((long) chunkX * l1 + (long) chunkZ * l2 ^ world.getRandomSeed());
-
-        // Water pass for swamps
-        if (biome == Biomes.OVERWORLD_SWAMPLAND)
-        {
-            for (int dx = 0; dx < 16; dx++)
-            {
-                for (int dz = 0; dz < 16; dz++)
-                {
-                    int topBlock = world.getHeightValue(x + dx, z + dz);
-                    int id = world.getBlockId(x + dx, topBlock - 1, z + dz);
-                    if (id == Blocks.GRASS.id)
-                    {
-                        boolean shouldPlaceWater = swampRand.nextFloat() < 0.5f;
-                        if (shouldPlaceWater)
-                        {
-                            int posXId = world.getBlockId(x + dx + 1, topBlock - 1, z + dz);
-                            int negXId = world.getBlockId(x + dx - 1, topBlock - 1, z + dz);
-                            int posZId = world.getBlockId(x + dx, topBlock - 1, z + dz + 1);
-                            int negZId = world.getBlockId(x + dx, topBlock - 1, z + dz - 1);
-                            int negYId = world.getBlockId(x + dx, topBlock - 2, z + dz);
-                            if (
-                                    posXId != 0 && (Block.blocksList[posXId].blockMaterial.isSolid() || Block.blocksList[posXId].blockMaterial == Material.water) &&
-                                            negXId != 0 && (Block.blocksList[negXId].blockMaterial.isSolid() || Block.blocksList[negXId].blockMaterial == Material.water) &&
-                                            posZId != 0 && (Block.blocksList[posZId].blockMaterial.isSolid() || Block.blocksList[posZId].blockMaterial == Material.water) &&
-                                            negZId != 0 && (Block.blocksList[negZId].blockMaterial.isSolid() || Block.blocksList[negZId].blockMaterial == Material.water) &&
-                                            negYId != 0 && Block.blocksList[negYId].blockMaterial.isSolid()
-                            )
-                            {
-                                world.setBlock(x + dx, topBlock - 1, z + dz, Blocks.FLUID_WATER_STILL.id);
-                                world.setBlock(x + dx, topBlock, z + dz, 0);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        int lakeChance = 4;
-        if (biome == Biomes.OVERWORLD_SWAMPLAND)
-            lakeChance = 2;
-        if (biome == Biomes.OVERWORLD_DESERT)
-            lakeChance = 0;
-        if (lakeChance != 0 && rand.nextInt(lakeChance) == 0) {
-            int fluid = Blocks.FLUID_WATER_STILL.id;
-            if (biome.hasSurfaceSnow())
-            {
-                fluid = Blocks.ICE.id;
-            }
-            int i1 = x + rand.nextInt(16) + 8;
-            int l4 = minY + rand.nextInt(rangeY);
-            int i8 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureLake(fluid)).place(world, rand, i1, l4, i8);
-        }
-        if (rand.nextInt(8) == 0) {
-            int xf = x + rand.nextInt(16) + 8;
-            int yf = minY + rand.nextInt(rand.nextInt(rangeY - (rangeY / 16)) + (rangeY / 16));
-            int zf = z + rand.nextInt(16) + 8;
-            if (yf < minY + rangeY / 2 || rand.nextInt(10) == 0) {
-                (new WorldFeatureLake(Blocks.FLUID_LAVA_STILL.id)).place(world, rand, xf, yf, zf);
-            }
-        }
-        for (int k1 = 0; k1 < (8 * oreHeightModifier); k1++) {
-            int j5 = x + rand.nextInt(16) + 8;
-            int k8 = minY + rand.nextInt(rangeY);
-            int j11 = z + rand.nextInt(16) + 8;
-            if (rand.nextInt(2) == 0) {
-                (new WorldFeatureDungeon(Blocks.BRICK_CLAY.id, Blocks.BRICK_CLAY.id, null)).place(world, rand, j5, k8, j11);
-            } else {
-                (new WorldFeatureDungeon(Blocks.COBBLE_STONE.id, Blocks.COBBLE_STONE_MOSSY.id, null)).place(world, rand, j5, k8, j11);
-            }
-        }
-
-        for (int k1 = 0; k1 < 1; k1++) {
-            int j5 = x + rand.nextInt(16) + 8;
-            int j11 = z + rand.nextInt(16) + 8;
-            int k8 = world.getHeightValue(j5, j11) - (rand.nextInt(2) + 2);
-
-            //chance to sink labyrinth
-            if (rand.nextInt(5) == 0) {
-                k8 -= rand.nextInt(10) + 30;
-            }
-
-            if (rand.nextInt(700) == 0) {
-                Random lRand = chunk.getChunkRandom(0x4823F58);
-                (new WorldFeatureLabyrinth()).place(world, lRand, j5, k8, j11);
-            }
-        }
-
-        for (int i2 = 0; i2 < (20 * oreHeightModifier); i2++) {
-            int k5 = x + rand.nextInt(16);
-            int l8 = minY + rand.nextInt(rangeY);
-            int k11 = z + rand.nextInt(16);
-            (new WorldFeatureClay(32)).place(world, rand, k5, l8, k11);
-        }
-        if (biome instanceof BiomeOutback || biome == Biomes.OVERWORLD_OUTBACK) {
-            int l5 = x + rand.nextInt(16);
-            int l11 = z + rand.nextInt(16);
-            int i9 = world.getHeightValue(l5, l11);
-            (new WorldFeatureRichScorchedDirt(10)).place(world, rand, l5, i9, l11);
-        }
-
-        if (biome == Biomes.OVERWORLD_GLACIER || biome == Biomes.OVERWORLD_TUNDRA){
-            for (int i4 = 0; i4 < 5 * oreHeightModifier; i4++) {
-                int j7 = x + rand.nextInt(16);
-                int k10 = minY + rand.nextInt(rangeY / 2);
-                int j13 = z + rand.nextInt(16);
-                (new WorldFeaturePermaice(32 + rand.nextInt(32), Blocks.PERMAFROST)).place(world, rand, j7, k10, j13);
-            }
-        }
-
-        for (int j2 = 0; j2 < (20 * oreHeightModifier); j2++) {
-            int l5 = x + rand.nextInt(16);
-            int i9 = minY + rand.nextInt(rangeY);
-            int l11 = z + rand.nextInt(16);
-            (new WorldFeatureOre(Blocks.DIRT.id, 32)).place(world, rand, l5, i9, l11);
-        }
-
-        for (int k2 = 0; k2 < (10 * oreHeightModifier); k2++) {
-            int i6 = x + rand.nextInt(16);
-            int j9 = minY + rand.nextInt(rangeY);
-            int i12 = z + rand.nextInt(16);
-            (new WorldFeatureOre(Blocks.GRAVEL.id, 32)).place(world, rand, i6, j9, i12);
-        }
-
-        for (int i3 = 0; i3 < (20 * oreHeightModifier); i3++) {
-            int j6 = x + rand.nextInt(16);
-            int k9 = minY + rand.nextInt(rangeY);
-            int j12 = z + rand.nextInt(16);
-            new WorldFeatureOre(BlockOreCoal.variantMap, 16).place(world, rand, j6, k9, j12);
-        }
-
-        for (int j3 = 0; j3 < (20 * oreHeightModifier); j3++) {
-            int k6 = x + rand.nextInt(16);
-            int l9 = minY + rand.nextInt(rangeY / 2);
-            int k12 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreIron.variantMap, 8)).place(world, rand, k6, l9, k12);
-        }
-
-        for (int k3 = 0; k3 < (2 * oreHeightModifier); k3++) {
-            int l6 = x + rand.nextInt(16);
-            int i10 = minY + rand.nextInt(rangeY / 4);
-            int l12 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreGold.variantMap, 8)).place(world, rand, l6, i10, l12);
-        }
-
-        for (int l3 = 0; l3 < (8 * oreHeightModifier); l3++) {
-            int i7 = x + rand.nextInt(16);
-            int j10 = minY + rand.nextInt(rangeY / 8);
-            int i13 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreRedstone.variantMap, 7)).place(world, rand, i7, j10, i13);
-        }
-
-        for (int i4 = 0; i4 < oreHeightModifier; i4++) {
-            int j7 = x + rand.nextInt(16);
-            int k10 = minY + rand.nextInt(rangeY / 8);
-            int j13 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreDiamond.variantMap, 7)).place(world, rand, j7, k10, j13);
-        }
-
-        for (int i4 = 0; i4 < oreHeightModifier; i4++) {
-            int j7 = x + rand.nextInt(16);
-            int k10 = minY + rand.nextInt(rangeY / 2);
-            int j13 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockMoss.variantMap, 32)).place(world, rand, j7, k10, j13);
-        }
-
-        for (int j4 = 0; j4 < oreHeightModifier; j4++) {
-            int k7 = x + rand.nextInt(16);
-            int l10 = minY + rand.nextInt(rangeY / 8) + rand.nextInt(rangeY / 8);
-            int k13 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreLapis.variantMap, 6)).place(world, rand, k7, l10, k13);
-        }
-
-
-        double d = 0.5D;
-        int k4 = (int) ((treeDensityNoise.get((double) x * d, (double) z * d) / 8D + rand.nextDouble() * 4D + 4D) / 3D);
-        int treeDensity = 0;
-        if (rand.nextInt(10) == 0) {
-            treeDensity++;
-        }
-        if (biome == Biomes.OVERWORLD_FOREST) {
-            treeDensity += k4 + 5;
-        }
-        if (biome == Biomes.OVERWORLD_SHRUBLAND) {
-            treeDensity += k4 - 2;
-        }
-        if (biome == Biomes.OVERWORLD_BIRCH_FOREST) {
-            treeDensity += k4 + 4;
-        }
-        if (biome == Biomes.OVERWORLD_RAINFOREST) {
-            treeDensity += k4 + 10;
-        }
-        if (biome == Biomes.OVERWORLD_SEASONAL_FOREST) {
-            treeDensity += k4 + 2;
-        }
-        if (biome == Biomes.OVERWORLD_TAIGA) {
-            treeDensity += k4 + 5;
-        }
-        if (biome == Biomes.OVERWORLD_BOREAL_FOREST) {
-            treeDensity += k4 + 3;
-        }
-        if (biome == Biomes.OVERWORLD_DESERT) {
-            treeDensity = 0;
-        }
-        if (biome == Biomes.OVERWORLD_TUNDRA) {
-            treeDensity -= 20;
-        }
-        if (biome == Biomes.OVERWORLD_DESERT) {
-            treeDensity += k4;
-        }
-        if (biome == Biomes.OVERWORLD_CAATINGA) {
-            treeDensity += k4 + 4;
-        }
-        if (biome == Biomes.OVERWORLD_SWAMPLAND) {
-            treeDensity += k4 + 4;
-        }
-        if (biome == Biomes.OVERWORLD_OUTBACK_GRASSY) {
-            treeDensity += k4;
-        }
-        if (treeDensityOverride != -1) treeDensity = treeDensityOverride;
-        try {
-        	BlockLeavesBase.enableDecay = false;
-            for (int i11 = 0; i11 < treeDensity; i11++) {
-                int l13 = x + rand.nextInt(16) + 8;
-                int j14 = z + rand.nextInt(16) + 8;
-                WorldFeature feature = biome.getRandomWorldGenForTrees(rand);
-                feature.init(1.0D, 1.0D, 1.0D);
-                feature.place(world, rand, l13, world.getHeightValue(l13, j14), j14);
-            }
-        }finally {
-        	BlockLeavesBase.enableDecay = true;
-        }
-        byte byteReeds = 0;
-        if (biome == Biomes.OVERWORLD_RAINFOREST) {
-            byteReeds = 1;
-        }
-        for (int i11 = 0; i11 < byteReeds; i11++) {
-            int i18 = x + rand.nextInt(16) + 8;
-            int i23 = z + rand.nextInt(16) + 8;
-            int i21 = world.getHeightValue(i18, i23);
-            (new WorldFeatureSugarCaneTall()).place(world, rand, i18, i21, i23);
-        }
-
-        byte byteOrchid = 0;
-        if (biome == Biomes.OVERWORLD_BIRCH_FOREST) {
-            byteOrchid = 3;
-        }
-        if (biome == Biomes.OVERWORLD_SEASONAL_FOREST) {
-            byteOrchid = 1;
-        }
-        for (int l14 = 0; l14 < byteOrchid; l14++) {
-            int[] flowerIds= { Blocks.FLOWER_YELLOW.id, Blocks.FLOWER_PINK.id, Blocks.FLOWER_RED.id };
-
-            int l19 = x + rand.nextInt(16) + 8;
-            int k22 = rand.nextInt(world.getHeightBlocks());
-            int j24 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureMeadow(flowerIds)).place(world, rand, l19, k22, j24);
-        }
-
-        byte byteMeadow = 0;
-        if (biome == Biomes.OVERWORLD_MEADOW) {
-            byteMeadow = 3;
-        }
-        if (biome == Biomes.OVERWORLD_BOREAL_FOREST) {
-            byteMeadow = 2;
-        }
-        if (biome == Biomes.OVERWORLD_SHRUBLAND) {
-            byteMeadow = 1;
-        }
-        if (biome == Biomes.OVERWORLD_TAIGA) {
-            byteMeadow = 1;
-        }
-
-        for (int l14 = 0; l14 < byteMeadow; l14++) {
-            int blockId = Blocks.FLOWER_PURPLE.id;
-            if (rand.nextInt(12) == 0) {
-                blockId = Blocks.FLOWER_RED.id;
-            }
-            if (rand.nextInt(6) == 0) {
-                blockId = Blocks.FLOWER_YELLOW.id;
-            }
-            int l19 = x + rand.nextInt(16) + 8;
-            int k22 = rand.nextInt(world.getHeightBlocks());
-            int j24 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureFlowers(blockId, 128, true)).place(world, rand, l19, k22, j24);
-        }
-
-        byte byteBluebells = 0;
-        if (biome == Biomes.OVERWORLD_FOREST) {
-            byteBluebells = 2;
-        }
-        if (biome == Biomes.OVERWORLD_SWAMPLAND) {
-            byteBluebells = 3;
-        }
-        if (biome == Biomes.OVERWORLD_RAINFOREST) {
-            byteBluebells = 4;
-        }
-        if (biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_CAATINGA_PLAINS) {
-            byteBluebells = 3;
-        }
-
-        for (int i14 = 0; i14 < byteBluebells; i14++) {
-            int k14 = x + rand.nextInt(16) + 8;
-            int l16 = minY + rand.nextInt(rangeY);
-            int k19 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureFlowers(Blocks.FLOWER_LIGHT_BLUE.id, 64, true)).place(world, rand, k14, l16, k19);
-        }
-
-        byte byteMarigold = 0;
-
-        if (biome == Biomes.OVERWORLD_GRASSLANDS) {
-            byteMarigold = 1;
-        }
-        if (biome == Biomes.OVERWORLD_PLAINS) {
-            byteMarigold = 5;
-        }
-
-        if (biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_CAATINGA_PLAINS) {
-            byteMarigold = 5;
-        }
-        if (biome == Biomes.OVERWORLD_OUTBACK_GRASSY || biome == Biomes.OVERWORLD_OUTBACK) {
-            byteMarigold = 3;
-        }
-
-        for (int i14 = 0; i14 < byteMarigold; i14++) {
-            int k14 = x + rand.nextInt(16) + 8;
-            int l16 = minY + rand.nextInt(rangeY);
-            int k19 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureFlowers(Blocks.FLOWER_ORANGE.id, 64, true)).place(world, rand, k14, l16, k19);
-        }
-
-        byte byte0 = 0;
-        if (biome == Biomes.OVERWORLD_FOREST) {
-            byte0 = 2;
-        }
-        if (biome == Biomes.OVERWORLD_SWAMPLAND) {
-            byte0 = 2;
-        }
-        if (biome == Biomes.OVERWORLD_TAIGA) {
-            byte0 = 2;
-        }
-        if (biome == Biomes.OVERWORLD_PLAINS) {
-            byte0 = 3;
-        }
-        if (biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_CAATINGA_PLAINS) {
-            byte0 = 5;
-        }
-
-        if (biome == Biomes.OVERWORLD_OUTBACK_GRASSY || biome == Biomes.OVERWORLD_OUTBACK) {
-            byte0 = 2;
-        }
-
-        for (int i14 = 0; i14 < byte0; i14++) {
-            int k14 = x + rand.nextInt(16) + 8;
-            int l16 = minY + rand.nextInt(rangeY);
-            int k19 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureFlowers(Blocks.FLOWER_YELLOW.id, 64, true)).place(world, rand, k14, l16, k19);
-        }
-
-        byte byte1 = 0;
-        if (biome == Biomes.OVERWORLD_FOREST) {
-            byte1 = 2;
-        }
-        if (biome == Biomes.OVERWORLD_MEADOW) {
-            byte1 = 2;
-        }
-        if (biome == Biomes.OVERWORLD_RAINFOREST) {
-            byte1 = 10;
-        }
-        if (biome == Biomes.OVERWORLD_SEASONAL_FOREST) {
-            byte1 = 2;
-        }
-        if (biome == Biomes.OVERWORLD_TAIGA) {
-            byte1 = 1;
-        }
-        if (biome == Biomes.OVERWORLD_BOREAL_FOREST) {
-            byte1 = 5;
-        }
-        if (biome == Biomes.OVERWORLD_GRASSLANDS) {
-            byte1 = 8;
-        }
-        if (biome == Biomes.OVERWORLD_CAATINGA) {
-            byte1 = 2;
-        }
-        if (biome == Biomes.OVERWORLD_SWAMPLAND) {
-            byte1 = 4;
-        }
-        if (biome == Biomes.OVERWORLD_BIRCH_FOREST) {
-            byte1 = 2;
-        }
-        for (int l14 = 0; l14 < byte1; l14++) {
-            int type = Blocks.TALLGRASS.id;
-            if ((biome == Biomes.OVERWORLD_RAINFOREST || biome == Biomes.OVERWORLD_SWAMPLAND || biome == Biomes.OVERWORLD_BOREAL_FOREST || biome == Biomes.OVERWORLD_TAIGA) && rand.nextInt(3) != 0) {
-                type = Blocks.TALLGRASS_FERN.id;
-            }
-            int l19 = x + rand.nextInt(16) + 8;
-            int k22 = minY + rand.nextInt(rangeY);
-            int j24 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureTallGrass(type)).place(world, rand, l19, k22, j24);
-        }
-
-        byte1 = 0;
-        if (biome == Biomes.OVERWORLD_OUTBACK || biome == Biomes.OVERWORLD_OUTBACK_GRASSY) {
-            byte1 = 2;
-        }
-        for (int i15 = 0; i15 < byte1; i15++) {
-            int i17 = x + rand.nextInt(16) + 8;
-            int i20 = minY + rand.nextInt(rangeY);
-            int l22 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureSpinifexPatch()).place(world, rand, i17, i20, l22);
-        }
-
-        byte1 = 0;
-        if (biome == Biomes.OVERWORLD_DESERT) {
-            byte1 = 2;
-        }
-        if (biome == Biomes.OVERWORLD_CAATINGA_PLAINS || biome == Biomes.OVERWORLD_CAATINGA) {
-            byte1 = 1;
-        }
-        for (int i15 = 0; i15 < byte1; i15++) {
-            int i17 = x + rand.nextInt(16) + 8;
-            int i20 = minY + rand.nextInt(rangeY);
-            int l22 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureDeadBush(Blocks.DEADBUSH.id)).place(world, rand, i17, i20, l22);
-        }
-
-        if (rand.nextInt(2) == 0) {
-            int j15 = x + rand.nextInt(16) + 8;
-            int j17 = minY + rand.nextInt(rangeY);
-            int j20 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureFlowers(Blocks.FLOWER_RED.id, 64, true)).place(world, rand, j15, j17, j20);
-        }
-        if (rand.nextInt(4) == 0) {
-            int k15 = x + rand.nextInt(16) + 8;
-            int k17 = minY + rand.nextInt(rangeY);
-            int k20 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureFlowers(Blocks.MUSHROOM_BROWN.id, 64, false)).place(world, rand, k15, k17, k20);
-        }
-        if (rand.nextInt(8) == 0) {
-            int l15 = x + rand.nextInt(16) + 8;
-            int l17 = minY + rand.nextInt(rangeY);
-            int l20 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureFlowers(Blocks.MUSHROOM_RED.id, 64, false)).place(world, rand, l15, l17, l20);
-        }
-        if(rand.nextInt(5) == 0) {
-            int i18 = x + rand.nextInt(16) + 8;
-            int i23 = z + rand.nextInt(16) + 8;
-            int i21 = world.getHeightValue(i18, i23);
-            (new WorldFeatureSugarCane()).place(world, rand, i18, i21, i23);
-        }
-
-        if(rand.nextInt(128) == 0)
-        {
-            int j16 = x + rand.nextInt(16) + 8;
-            int j21 = z + rand.nextInt(16) + 8;
-            int i22 = world.getHeightValue(j16, j21);
-            (new WorldFeaturePumpkin()).place(world, rand, j16, i22, j21);
-        }
-        if(rand.nextInt(64) == 0)
-        {
-            int j16 = x + rand.nextInt(16) + 8;
-            int j21 = z + rand.nextInt(16) + 8;
-            int i22 = world.getHeightValue(j16, j21);
-            (new WorldFeatureSponge()).place(world, rand, j16, i22, j21);
-        }
-
-        int k16 = 0;
-        if(biome == Biomes.OVERWORLD_DESERT)
-        {
-            k16 += 10;
-        }
-        if(biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_CAATINGA_PLAINS)
-        {
-            k16 += 10;
-        }
-        for(int k18 = 0; k18 < k16; k18++)
-        {
-            int k21 = x + rand.nextInt(16) + 8;
-            int j23 = minY + rand.nextInt(rangeY);
-            int k24 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureCactus()).place(world, rand, k21, j23, k24);
-        }
-
-        for(int l18 = 0; l18 < 50; l18++)
-        {
-            int l21 = x + rand.nextInt(16) + 8;
-            int k23 = minY + rand.nextInt(rand.nextInt(rangeY - (rangeY / 16)) + (rangeY / 16));
-            int l24 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureLiquid(Blocks.FLUID_WATER_FLOWING.id)).place(world, rand, l21, k23, l24);
-        }
-
-        for(int i19 = 0; i19 < 20; i19++)
-        {
-            int i22 = x + rand.nextInt(16) + 8;
-            int l23 = minY + rand.nextInt(rand.nextInt(rand.nextInt(rangeY - (rangeY / 8)) + (rangeY / 16)) + (rangeY / 16));
-            int i25 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureLiquid(Blocks.FLUID_LAVA_FLOWING.id)).place(world, rand, i22, l23, i25);
-        }
-
-        int oceanY = world.getWorldType().getOceanY();
-        for(int dx = x + 8; dx < x + 8 + 16; dx++)
-        {
-            for(int dz = z + 8; dz < z + 8 + 16; dz++)
-            {
-                int dy = world.getHeightValue(dx, dz);
-                Biome localBiome = world.getBlockBiome(dx, dy, dz);
-
-                if ((localBiome.hasSurfaceSnow() || world.worldType == WorldTypes.OVERWORLD_WINTER) && dy > 0 && dy < world.getHeightBlocks())
-                {
-                    if (world.isAirBlock(dx, dy, dz) && world.getBlockMaterial(dx, dy - 1, dz).blocksMotion())
-                    {
-                        world.setBlockWithNotify(dx, dy, dz, Blocks.LAYER_SNOW.id);
-                    }
-                }
-                if ((localBiome.hasSurfaceSnow() || world.worldType == WorldTypes.OVERWORLD_WINTER) && (world.getBlockId(dx, oceanY - 1, dz) == Blocks.FLUID_WATER_STILL.id || world.getBlockId(dx, oceanY - 1, dz) == Blocks.FLUID_WATER_FLOWING.id))
-                {
-                    world.setBlockWithNotify(dx, oceanY - 1, dz, Blocks.ICE.id);
-                }
-
-            }
-
-        }
-
-        BlockSand.fallInstantly = false;
-        world.scheduledUpdatesAreImmediate = false;
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld;
+
+import net.minecraft.core.block.BlockLeavesBase;
+import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.block.BlockOreCoal;
+import net.minecraft.core.block.BlockOreDiamond;
+import net.minecraft.core.block.BlockOreGold;
+import net.minecraft.core.block.BlockOreIron;
+import net.minecraft.core.block.BlockOreLapis;
+import net.minecraft.core.block.BlockMoss;
+import net.minecraft.core.block.BlockOreRedstone;
+import net.minecraft.core.block.BlockSand;
+import net.minecraft.core.block.material.Material;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.biome.Biomes;
+import net.minecraft.core.world.type.WorldTypes;
+import net.minecraft.core.world.biome.Biome;
+import net.minecraft.core.world.biome.BiomeOutback;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkDecorator;
+import net.minecraft.core.world.generate.feature.*;
+import net.minecraft.core.world.noise.PerlinNoise;
+
+import java.util.Random;
+
+public class ChunkDecoratorOverworld
+    implements ChunkDecorator
+{
+    private final World world;
+    private final PerlinNoise treeDensityNoise;
+    private final int treeDensityOverride;
+
+    protected ChunkDecoratorOverworld(World world, int treeDensityOverride)
+    {
+        this.world = world;
+        this.treeDensityOverride = treeDensityOverride;
+
+        treeDensityNoise = new PerlinNoise(world.getRandomSeed(), 8, 74);
+    }
+
+    public ChunkDecoratorOverworld(World world)
+    {
+        this(world, -1);
+    }
+
+    @Override
+    public void decorate(Chunk chunk)
+    {
+        world.scheduledUpdatesAreImmediate = true;
+        int chunkX = chunk.xPosition;
+        int chunkZ = chunk.zPosition;
+
+        int minY = world.getWorldType().getMinY();
+        int maxY = world.getWorldType().getMaxY();
+        int rangeY = (maxY + 1) - minY;
+
+        float oreHeightModifier = rangeY / 128f;
+
+        BlockSand.fallInstantly = true;
+        int x = chunkX * 16;
+        int z = chunkZ * 16;
+        int y = world.getHeightValue(x + 16, z + 16);
+        Biome biome = world.getBlockBiome(x + 16, y, z + 16);
+        Random rand = new Random(world.getRandomSeed());
+        long l1 = (rand.nextLong() / 2L) * 2L + 1L;
+        long l2 = (rand.nextLong() / 2L) * 2L + 1L;
+        rand.setSeed((long) chunkX * l1 + (long) chunkZ * l2 ^ world.getRandomSeed());
+        Random swampRand = new Random((long) chunkX * l1 + (long) chunkZ * l2 ^ world.getRandomSeed());
+
+        // Water pass for swamps
+        if (biome == Biomes.OVERWORLD_SWAMPLAND)
+        {
+            for (int dx = 0; dx < 16; dx++)
+            {
+                for (int dz = 0; dz < 16; dz++)
+                {
+                    int topBlock = world.getHeightValue(x + dx, z + dz);
+                    int id = world.getBlockId(x + dx, topBlock - 1, z + dz);
+                    if (id == Blocks.GRASS.id)
+                    {
+                        boolean shouldPlaceWater = swampRand.nextFloat() < 0.5f;
+                        if (shouldPlaceWater)
+                        {
+                            int posXId = world.getBlockId(x + dx + 1, topBlock - 1, z + dz);
+                            int negXId = world.getBlockId(x + dx - 1, topBlock - 1, z + dz);
+                            int posZId = world.getBlockId(x + dx, topBlock - 1, z + dz + 1);
+                            int negZId = world.getBlockId(x + dx, topBlock - 1, z + dz - 1);
+                            int negYId = world.getBlockId(x + dx, topBlock - 2, z + dz);
+                            if (
+                                    posXId != 0 && (Blocks.blocksList[posXId].blockMaterial.isSolid() || Blocks.blocksList[posXId].blockMaterial == Material.water) &&
+                                            negXId != 0 && (Blocks.blocksList[negXId].blockMaterial.isSolid() || Blocks.blocksList[negXId].blockMaterial == Material.water) &&
+                                            posZId != 0 && (Blocks.blocksList[posZId].blockMaterial.isSolid() || Blocks.blocksList[posZId].blockMaterial == Material.water) &&
+                                            negZId != 0 && (Blocks.blocksList[negZId].blockMaterial.isSolid() || Blocks.blocksList[negZId].blockMaterial == Material.water) &&
+                                            negYId != 0 && Blocks.blocksList[negYId].blockMaterial.isSolid()
+                            )
+                            {
+                                world.setBlock(x + dx, topBlock - 1, z + dz, Blocks.FLUID_WATER_STILL.id);
+                                world.setBlock(x + dx, topBlock, z + dz, 0);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        int lakeChance = 4;
+        if (biome == Biomes.OVERWORLD_SWAMPLAND)
+            lakeChance = 2;
+        if (biome == Biomes.OVERWORLD_DESERT)
+            lakeChance = 0;
+        if (lakeChance != 0 && rand.nextInt(lakeChance) == 0) {
+            int fluid = Blocks.FLUID_WATER_STILL.id;
+            if (biome.hasSurfaceSnow())
+            {
+                fluid = Blocks.ICE.id;
+            }
+            int i1 = x + rand.nextInt(16) + 8;
+            int l4 = minY + rand.nextInt(rangeY);
+            int i8 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureLake(fluid)).place(world, rand, i1, l4, i8);
+        }
+        if (rand.nextInt(8) == 0) {
+            int xf = x + rand.nextInt(16) + 8;
+            int yf = minY + rand.nextInt(rand.nextInt(rangeY - (rangeY / 16)) + (rangeY / 16));
+            int zf = z + rand.nextInt(16) + 8;
+            if (yf < minY + rangeY / 2 || rand.nextInt(10) == 0) {
+                (new WorldFeatureLake(Blocks.FLUID_LAVA_STILL.id)).place(world, rand, xf, yf, zf);
+            }
+        }
+        for (int k1 = 0; k1 < (8 * oreHeightModifier); k1++) {
+            int j5 = x + rand.nextInt(16) + 8;
+            int k8 = minY + rand.nextInt(rangeY);
+            int j11 = z + rand.nextInt(16) + 8;
+            if (rand.nextInt(2) == 0) {
+                (new WorldFeatureDungeon(Blocks.BRICK_CLAY.id, Blocks.BRICK_CLAY.id, null)).place(world, rand, j5, k8, j11);
+            } else {
+                (new WorldFeatureDungeon(Blocks.COBBLE_STONE.id, Blocks.COBBLE_STONE_MOSSY.id, null)).place(world, rand, j5, k8, j11);
+            }
+        }
+
+        for (int k1 = 0; k1 < 1; k1++) {
+            int j5 = x + rand.nextInt(16) + 8;
+            int j11 = z + rand.nextInt(16) + 8;
+            int k8 = world.getHeightValue(j5, j11) - (rand.nextInt(2) + 2);
+
+            //chance to sink labyrinth
+            if (rand.nextInt(5) == 0) {
+                k8 -= rand.nextInt(10) + 30;
+            }
+
+            if (rand.nextInt(700) == 0) {
+                Random lRand = chunk.getChunkRandom(0x4823F58);
+                (new WorldFeatureLabyrinth()).place(world, lRand, j5, k8, j11);
+            }
+        }
+
+        for (int i2 = 0; i2 < (20 * oreHeightModifier); i2++) {
+            int k5 = x + rand.nextInt(16);
+            int l8 = minY + rand.nextInt(rangeY);
+            int k11 = z + rand.nextInt(16);
+            (new WorldFeatureClay(32)).place(world, rand, k5, l8, k11);
+        }
+        if (biome instanceof BiomeOutback || biome == Biomes.OVERWORLD_OUTBACK) {
+            int l5 = x + rand.nextInt(16);
+            int l11 = z + rand.nextInt(16);
+            int i9 = world.getHeightValue(l5, l11);
+            (new WorldFeatureRichScorchedDirt(10)).place(world, rand, l5, i9, l11);
+        }
+
+        if (biome == Biomes.OVERWORLD_GLACIER || biome == Biomes.OVERWORLD_TUNDRA){
+            for (int i4 = 0; i4 < 5 * oreHeightModifier; i4++) {
+                int j7 = x + rand.nextInt(16);
+                int k10 = minY + rand.nextInt(rangeY / 2);
+                int j13 = z + rand.nextInt(16);
+                (new WorldFeaturePermaice(32 + rand.nextInt(32), Blocks.PERMAFROST)).place(world, rand, j7, k10, j13);
+            }
+        }
+
+        for (int j2 = 0; j2 < (20 * oreHeightModifier); j2++) {
+            int l5 = x + rand.nextInt(16);
+            int i9 = minY + rand.nextInt(rangeY);
+            int l11 = z + rand.nextInt(16);
+            (new WorldFeatureOre(Blocks.DIRT.id, 32)).place(world, rand, l5, i9, l11);
+        }
+
+        for (int k2 = 0; k2 < (10 * oreHeightModifier); k2++) {
+            int i6 = x + rand.nextInt(16);
+            int j9 = minY + rand.nextInt(rangeY);
+            int i12 = z + rand.nextInt(16);
+            (new WorldFeatureOre(Blocks.GRAVEL.id, 32)).place(world, rand, i6, j9, i12);
+        }
+
+        for (int i3 = 0; i3 < (20 * oreHeightModifier); i3++) {
+            int j6 = x + rand.nextInt(16);
+            int k9 = minY + rand.nextInt(rangeY);
+            int j12 = z + rand.nextInt(16);
+            new WorldFeatureOre(BlockOreCoal.variantMap, 16).place(world, rand, j6, k9, j12);
+        }
+
+        for (int j3 = 0; j3 < (20 * oreHeightModifier); j3++) {
+            int k6 = x + rand.nextInt(16);
+            int l9 = minY + rand.nextInt(rangeY / 2);
+            int k12 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreIron.variantMap, 8)).place(world, rand, k6, l9, k12);
+        }
+
+        for (int k3 = 0; k3 < (2 * oreHeightModifier); k3++) {
+            int l6 = x + rand.nextInt(16);
+            int i10 = minY + rand.nextInt(rangeY / 4);
+            int l12 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreGold.variantMap, 8)).place(world, rand, l6, i10, l12);
+        }
+
+        for (int l3 = 0; l3 < (8 * oreHeightModifier); l3++) {
+            int i7 = x + rand.nextInt(16);
+            int j10 = minY + rand.nextInt(rangeY / 8);
+            int i13 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreRedstone.variantMap, 7)).place(world, rand, i7, j10, i13);
+        }
+
+        for (int i4 = 0; i4 < oreHeightModifier; i4++) {
+            int j7 = x + rand.nextInt(16);
+            int k10 = minY + rand.nextInt(rangeY / 8);
+            int j13 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreDiamond.variantMap, 7)).place(world, rand, j7, k10, j13);
+        }
+
+        for (int i4 = 0; i4 < oreHeightModifier; i4++) {
+            int j7 = x + rand.nextInt(16);
+            int k10 = minY + rand.nextInt(rangeY / 2);
+            int j13 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockMoss.variantMap, 32)).place(world, rand, j7, k10, j13);
+        }
+
+        for (int j4 = 0; j4 < oreHeightModifier; j4++) {
+            int k7 = x + rand.nextInt(16);
+            int l10 = minY + rand.nextInt(rangeY / 8) + rand.nextInt(rangeY / 8);
+            int k13 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreLapis.variantMap, 6)).place(world, rand, k7, l10, k13);
+        }
+
+
+        double d = 0.5D;
+        int k4 = (int) ((treeDensityNoise.get((double) x * d, (double) z * d) / 8D + rand.nextDouble() * 4D + 4D) / 3D);
+        int treeDensity = 0;
+        if (rand.nextInt(10) == 0) {
+            treeDensity++;
+        }
+        if (biome == Biomes.OVERWORLD_FOREST) {
+            treeDensity += k4 + 5;
+        }
+        if (biome == Biomes.OVERWORLD_SHRUBLAND) {
+            treeDensity += k4 - 2;
+        }
+        if (biome == Biomes.OVERWORLD_BIRCH_FOREST) {
+            treeDensity += k4 + 4;
+        }
+        if (biome == Biomes.OVERWORLD_RAINFOREST) {
+            treeDensity += k4 + 10;
+        }
+        if (biome == Biomes.OVERWORLD_SEASONAL_FOREST) {
+            treeDensity += k4 + 2;
+        }
+        if (biome == Biomes.OVERWORLD_TAIGA) {
+            treeDensity += k4 + 5;
+        }
+        if (biome == Biomes.OVERWORLD_BOREAL_FOREST) {
+            treeDensity += k4 + 3;
+        }
+        if (biome == Biomes.OVERWORLD_DESERT) {
+            treeDensity = 0;
+        }
+        if (biome == Biomes.OVERWORLD_TUNDRA) {
+            treeDensity -= 20;
+        }
+        if (biome == Biomes.OVERWORLD_DESERT) {
+            treeDensity += k4;
+        }
+        if (biome == Biomes.OVERWORLD_CAATINGA) {
+            treeDensity += k4 + 4;
+        }
+        if (biome == Biomes.OVERWORLD_SWAMPLAND) {
+            treeDensity += k4 + 4;
+        }
+        if (biome == Biomes.OVERWORLD_OUTBACK_GRASSY) {
+            treeDensity += k4;
+        }
+        if (treeDensityOverride != -1) treeDensity = treeDensityOverride;
+        try {
+        	BlockLeavesBase.enableDecay = false;
+            for (int i11 = 0; i11 < treeDensity; i11++) {
+                int l13 = x + rand.nextInt(16) + 8;
+                int j14 = z + rand.nextInt(16) + 8;
+                WorldFeature feature = biome.getRandomWorldGenForTrees(rand);
+                feature.init(1.0D, 1.0D, 1.0D);
+                feature.place(world, rand, l13, world.getHeightValue(l13, j14), j14);
+            }
+        }finally {
+        	BlockLeavesBase.enableDecay = true;
+        }
+        byte byteReeds = 0;
+        if (biome == Biomes.OVERWORLD_RAINFOREST) {
+            byteReeds = 1;
+        }
+        for (int i11 = 0; i11 < byteReeds; i11++) {
+            int i18 = x + rand.nextInt(16) + 8;
+            int i23 = z + rand.nextInt(16) + 8;
+            int i21 = world.getHeightValue(i18, i23);
+            (new WorldFeatureSugarCaneTall()).place(world, rand, i18, i21, i23);
+        }
+
+        byte byteOrchid = 0;
+        if (biome == Biomes.OVERWORLD_BIRCH_FOREST) {
+            byteOrchid = 3;
+        }
+        if (biome == Biomes.OVERWORLD_SEASONAL_FOREST) {
+            byteOrchid = 1;
+        }
+        for (int l14 = 0; l14 < byteOrchid; l14++) {
+            int[] flowerIds= { Blocks.FLOWER_YELLOW.id, Blocks.FLOWER_PINK.id, Blocks.FLOWER_RED.id };
+
+            int l19 = x + rand.nextInt(16) + 8;
+            int k22 = rand.nextInt(world.getHeightBlocks());
+            int j24 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureMeadow(flowerIds)).place(world, rand, l19, k22, j24);
+        }
+
+        byte byteMeadow = 0;
+        if (biome == Biomes.OVERWORLD_MEADOW) {
+            byteMeadow = 3;
+        }
+        if (biome == Biomes.OVERWORLD_BOREAL_FOREST) {
+            byteMeadow = 2;
+        }
+        if (biome == Biomes.OVERWORLD_SHRUBLAND) {
+            byteMeadow = 1;
+        }
+        if (biome == Biomes.OVERWORLD_TAIGA) {
+            byteMeadow = 1;
+        }
+
+        for (int l14 = 0; l14 < byteMeadow; l14++) {
+            int blockId = Blocks.FLOWER_PURPLE.id;
+            if (rand.nextInt(12) == 0) {
+                blockId = Blocks.FLOWER_RED.id;
+            }
+            if (rand.nextInt(6) == 0) {
+                blockId = Blocks.FLOWER_YELLOW.id;
+            }
+            int l19 = x + rand.nextInt(16) + 8;
+            int k22 = rand.nextInt(world.getHeightBlocks());
+            int j24 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(blockId, 128, true)).place(world, rand, l19, k22, j24);
+        }
+
+        byte byteBluebells = 0;
+        if (biome == Biomes.OVERWORLD_FOREST) {
+            byteBluebells = 2;
+        }
+        if (biome == Biomes.OVERWORLD_SWAMPLAND) {
+            byteBluebells = 3;
+        }
+        if (biome == Biomes.OVERWORLD_RAINFOREST) {
+            byteBluebells = 4;
+        }
+        if (biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_CAATINGA_PLAINS) {
+            byteBluebells = 3;
+        }
+
+        for (int i14 = 0; i14 < byteBluebells; i14++) {
+            int k14 = x + rand.nextInt(16) + 8;
+            int l16 = minY + rand.nextInt(rangeY);
+            int k19 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Blocks.FLOWER_LIGHT_BLUE.id, 64, true)).place(world, rand, k14, l16, k19);
+        }
+
+        byte byteMarigold = 0;
+
+        if (biome == Biomes.OVERWORLD_GRASSLANDS) {
+            byteMarigold = 1;
+        }
+        if (biome == Biomes.OVERWORLD_PLAINS) {
+            byteMarigold = 5;
+        }
+
+        if (biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_CAATINGA_PLAINS) {
+            byteMarigold = 5;
+        }
+        if (biome == Biomes.OVERWORLD_OUTBACK_GRASSY || biome == Biomes.OVERWORLD_OUTBACK) {
+            byteMarigold = 3;
+        }
+
+        for (int i14 = 0; i14 < byteMarigold; i14++) {
+            int k14 = x + rand.nextInt(16) + 8;
+            int l16 = minY + rand.nextInt(rangeY);
+            int k19 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Blocks.FLOWER_ORANGE.id, 64, true)).place(world, rand, k14, l16, k19);
+        }
+
+        byte byte0 = 0;
+        if (biome == Biomes.OVERWORLD_FOREST) {
+            byte0 = 2;
+        }
+        if (biome == Biomes.OVERWORLD_SWAMPLAND) {
+            byte0 = 2;
+        }
+        if (biome == Biomes.OVERWORLD_TAIGA) {
+            byte0 = 2;
+        }
+        if (biome == Biomes.OVERWORLD_PLAINS) {
+            byte0 = 3;
+        }
+        if (biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_CAATINGA_PLAINS) {
+            byte0 = 5;
+        }
+
+        if (biome == Biomes.OVERWORLD_OUTBACK_GRASSY || biome == Biomes.OVERWORLD_OUTBACK) {
+            byte0 = 2;
+        }
+
+        for (int i14 = 0; i14 < byte0; i14++) {
+            int k14 = x + rand.nextInt(16) + 8;
+            int l16 = minY + rand.nextInt(rangeY);
+            int k19 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Blocks.FLOWER_YELLOW.id, 64, true)).place(world, rand, k14, l16, k19);
+        }
+
+        byte byte1 = 0;
+        if (biome == Biomes.OVERWORLD_FOREST) {
+            byte1 = 2;
+        }
+        if (biome == Biomes.OVERWORLD_MEADOW) {
+            byte1 = 2;
+        }
+        if (biome == Biomes.OVERWORLD_RAINFOREST) {
+            byte1 = 10;
+        }
+        if (biome == Biomes.OVERWORLD_SEASONAL_FOREST) {
+            byte1 = 2;
+        }
+        if (biome == Biomes.OVERWORLD_TAIGA) {
+            byte1 = 1;
+        }
+        if (biome == Biomes.OVERWORLD_BOREAL_FOREST) {
+            byte1 = 5;
+        }
+        if (biome == Biomes.OVERWORLD_GRASSLANDS) {
+            byte1 = 8;
+        }
+        if (biome == Biomes.OVERWORLD_CAATINGA) {
+            byte1 = 2;
+        }
+        if (biome == Biomes.OVERWORLD_SWAMPLAND) {
+            byte1 = 4;
+        }
+        if (biome == Biomes.OVERWORLD_BIRCH_FOREST) {
+            byte1 = 2;
+        }
+        for (int l14 = 0; l14 < byte1; l14++) {
+            int type = Blocks.TALLGRASS.id;
+            if ((biome == Biomes.OVERWORLD_RAINFOREST || biome == Biomes.OVERWORLD_SWAMPLAND || biome == Biomes.OVERWORLD_BOREAL_FOREST || biome == Biomes.OVERWORLD_TAIGA) && rand.nextInt(3) != 0) {
+                type = Blocks.TALLGRASS_FERN.id;
+            }
+            int l19 = x + rand.nextInt(16) + 8;
+            int k22 = minY + rand.nextInt(rangeY);
+            int j24 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureTallGrass(type)).place(world, rand, l19, k22, j24);
+        }
+
+        byte1 = 0;
+        if (biome == Biomes.OVERWORLD_OUTBACK || biome == Biomes.OVERWORLD_OUTBACK_GRASSY) {
+            byte1 = 2;
+        }
+        for (int i15 = 0; i15 < byte1; i15++) {
+            int i17 = x + rand.nextInt(16) + 8;
+            int i20 = minY + rand.nextInt(rangeY);
+            int l22 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureSpinifexPatch()).place(world, rand, i17, i20, l22);
+        }
+
+        byte1 = 0;
+        if (biome == Biomes.OVERWORLD_DESERT) {
+            byte1 = 2;
+        }
+        if (biome == Biomes.OVERWORLD_CAATINGA_PLAINS || biome == Biomes.OVERWORLD_CAATINGA) {
+            byte1 = 1;
+        }
+        for (int i15 = 0; i15 < byte1; i15++) {
+            int i17 = x + rand.nextInt(16) + 8;
+            int i20 = minY + rand.nextInt(rangeY);
+            int l22 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureDeadBush(Blocks.DEADBUSH.id)).place(world, rand, i17, i20, l22);
+        }
+
+        if (rand.nextInt(2) == 0) {
+            int j15 = x + rand.nextInt(16) + 8;
+            int j17 = minY + rand.nextInt(rangeY);
+            int j20 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Blocks.FLOWER_RED.id, 64, true)).place(world, rand, j15, j17, j20);
+        }
+        if (rand.nextInt(4) == 0) {
+            int k15 = x + rand.nextInt(16) + 8;
+            int k17 = minY + rand.nextInt(rangeY);
+            int k20 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Blocks.MUSHROOM_BROWN.id, 64, false)).place(world, rand, k15, k17, k20);
+        }
+        if (rand.nextInt(8) == 0) {
+            int l15 = x + rand.nextInt(16) + 8;
+            int l17 = minY + rand.nextInt(rangeY);
+            int l20 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Blocks.MUSHROOM_RED.id, 64, false)).place(world, rand, l15, l17, l20);
+        }
+        if(rand.nextInt(5) == 0) {
+            int i18 = x + rand.nextInt(16) + 8;
+            int i23 = z + rand.nextInt(16) + 8;
+            int i21 = world.getHeightValue(i18, i23);
+            (new WorldFeatureSugarCane()).place(world, rand, i18, i21, i23);
+        }
+
+        if(rand.nextInt(128) == 0)
+        {
+            int j16 = x + rand.nextInt(16) + 8;
+            int j21 = z + rand.nextInt(16) + 8;
+            int i22 = world.getHeightValue(j16, j21);
+            (new WorldFeaturePumpkin()).place(world, rand, j16, i22, j21);
+        }
+        if(rand.nextInt(64) == 0)
+        {
+            int j16 = x + rand.nextInt(16) + 8;
+            int j21 = z + rand.nextInt(16) + 8;
+            int i22 = world.getHeightValue(j16, j21);
+            (new WorldFeatureSponge()).place(world, rand, j16, i22, j21);
+        }
+
+        int k16 = 0;
+        if(biome == Biomes.OVERWORLD_DESERT)
+        {
+            k16 += 10;
+        }
+        if(biome == Biomes.OVERWORLD_CAATINGA || biome == Biomes.OVERWORLD_CAATINGA_PLAINS)
+        {
+            k16 += 10;
+        }
+        for(int k18 = 0; k18 < k16; k18++)
+        {
+            int k21 = x + rand.nextInt(16) + 8;
+            int j23 = minY + rand.nextInt(rangeY);
+            int k24 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureCactus()).place(world, rand, k21, j23, k24);
+        }
+
+        for(int l18 = 0; l18 < 50; l18++)
+        {
+            int l21 = x + rand.nextInt(16) + 8;
+            int k23 = minY + rand.nextInt(rand.nextInt(rangeY - (rangeY / 16)) + (rangeY / 16));
+            int l24 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureLiquid(Blocks.FLUID_WATER_FLOWING.id)).place(world, rand, l21, k23, l24);
+        }
+
+        for(int i19 = 0; i19 < 20; i19++)
+        {
+            int i22 = x + rand.nextInt(16) + 8;
+            int l23 = minY + rand.nextInt(rand.nextInt(rand.nextInt(rangeY - (rangeY / 8)) + (rangeY / 16)) + (rangeY / 16));
+            int i25 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureLiquid(Blocks.FLUID_LAVA_FLOWING.id)).place(world, rand, i22, l23, i25);
+        }
+
+        int oceanY = world.getWorldType().getOceanY();
+        for(int dx = x + 8; dx < x + 8 + 16; dx++)
+        {
+            for(int dz = z + 8; dz < z + 8 + 16; dz++)
+            {
+                int dy = world.getHeightValue(dx, dz);
+                Biome localBiome = world.getBlockBiome(dx, dy, dz);
+
+                if ((localBiome.hasSurfaceSnow() || world.worldType == WorldTypes.OVERWORLD_WINTER) && dy > 0 && dy < world.getHeightBlocks())
+                {
+                    if (world.isAirBlock(dx, dy, dz) && world.getBlockMaterial(dx, dy - 1, dz).blocksMotion())
+                    {
+                        world.setBlockWithNotify(dx, dy, dz, Blocks.LAYER_SNOW.id);
+                    }
+                }
+                if ((localBiome.hasSurfaceSnow() || world.worldType == WorldTypes.OVERWORLD_WINTER) && (world.getBlockId(dx, oceanY - 1, dz) == Blocks.FLUID_WATER_STILL.id || world.getBlockId(dx, oceanY - 1, dz) == Blocks.FLUID_WATER_FLOWING.id))
+                {
+                    world.setBlockWithNotify(dx, oceanY - 1, dz, Blocks.ICE.id);
+                }
+
+            }
+
+        }
+
+        BlockSand.fallInstantly = false;
+        world.scheduledUpdatesAreImmediate = false;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkGeneratorOverworld.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkGeneratorOverworld.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkGeneratorOverworld.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkGeneratorOverworld.java
index fc86a3ab8..d95a3dad3 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkGeneratorOverworld.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/ChunkGeneratorOverworld.java
@@ -1,15 +1,15 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.CavesLargeFeature;
-import net.minecraft.core.world.generate.LargeFeature;
-import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
-
-public class ChunkGeneratorOverworld
-    extends ChunkGeneratorPerlin
-{
-    public ChunkGeneratorOverworld(World world)
-    {
-        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
+import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
+
+public class ChunkGeneratorOverworld
+    extends ChunkGeneratorPerlin
+{
+    public ChunkGeneratorOverworld(World world)
+    {
+        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/DensityGeneratorOverworld.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/DensityGeneratorOverworld.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/DensityGeneratorOverworld.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/DensityGeneratorOverworld.java
index 4f8b25ae9..4d985b1bb 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/DensityGeneratorOverworld.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/DensityGeneratorOverworld.java
@@ -1,313 +1,313 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.type.WorldTypes;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
-import net.minecraft.core.world.noise.BasePerlinNoise;
-import net.minecraft.core.world.noise.PerlinNoise;
-
-public class DensityGeneratorOverworld
-    implements DensityGenerator
-{
-    private final World world;
-
-    private final BasePerlinNoise<?> minLimitNoise;
-    private final BasePerlinNoise<?> maxLimitNoise;
-    private final BasePerlinNoise<?> mainNoise;
-    private final BasePerlinNoise<?> scaleNoise;
-    private final BasePerlinNoise<?> depthNoise;
-
-    private final boolean generateRivers;
-    private final BasePerlinNoise<?> smoothingRiverNoise;
-    private final BasePerlinNoise<?> carvingRiverNoise;
-
-    protected DensityGeneratorOverworld(World world, BasePerlinNoise<?> minLimitNoise, BasePerlinNoise<?> maxLimitNoise, BasePerlinNoise<?> mainNoise, BasePerlinNoise<?> scaleNoise, BasePerlinNoise<?> depthNoise, boolean generateRivers)
-    {
-        this.world = world;
-
-        this.minLimitNoise = minLimitNoise;
-        this.maxLimitNoise = maxLimitNoise;
-        this.mainNoise = mainNoise;
-        this.scaleNoise = scaleNoise;
-        this.depthNoise = depthNoise;
-
-        this.generateRivers = generateRivers;
-        this.smoothingRiverNoise = new PerlinNoise(world.getRandomSeed(), 1);
-        this.carvingRiverNoise = new PerlinNoise(world.getRandomSeed() + 1, 1);
-    }
-
-    public DensityGeneratorOverworld(World world)
-    {
-        this(world,
-             new PerlinNoise(world.getRandomSeed(), 16, 0),
-             new PerlinNoise(world.getRandomSeed(), 16, 16),
-             new PerlinNoise(world.getRandomSeed(), 8, 32),
-             new PerlinNoise(world.getRandomSeed(), 10, 48),
-             new PerlinNoise(world.getRandomSeed(), 16, 58),
-             true
-         );
-    }
-
-    private void modifyDensityMapSmoothingRivers(int chunkX, int chunkZ, int terrainHeight, double[] densityMapArray)
-    {
-        int xSize = 4 + 1;
-        int ySize = (terrainHeight / 8) + 1;
-        int zSize = 4 + 1;
-        int x = chunkX * 4;
-        int z = chunkZ * 4;
-
-        double riverLevel = 0d;
-
-        double[] largeSmoothing = smoothingRiverNoise.get(null, x, z, xSize, zSize, 1 / (1000d / xSize), 1 / (1000d / zSize));
-        double[] mediumSmoothing = smoothingRiverNoise.get(null, x, z, xSize, zSize, 1 / (50d / xSize), 1 / (50d / zSize));
-        double[] smallSmoothing = smoothingRiverNoise.get(null, x, z, xSize, zSize, 1 / (10d / xSize), 1 / (10d / zSize));
-
-        double[] riverRadiuses = new double[] { 0.006, 0.024, 0.036 };
-        double[] riverMults = new double[] { 20, 60, 60 };
-
-        for (int dx = 0; dx < xSize; dx++)
-        {
-            for (int dz = 0; dz < zSize; dz++)
-            {
-                final double sample = largeSmoothing[dx * zSize + dz] + mediumSmoothing[dx * zSize + dz] * 0.04 + smallSmoothing[dx * zSize + dz] * 0.004;
-                double finalSample = 0.0;
-
-                for (int i = 0; i < riverRadiuses.length; i++)
-                {
-                    if (sample < riverLevel - riverRadiuses[i] || sample > riverLevel + riverRadiuses[i]) continue;
-                    double modSample = sample;
-                    modSample -= riverLevel;
-                    modSample /= riverRadiuses[i];
-                    modSample = Math.abs(modSample);
-                    modSample = -modSample;
-                    modSample += 1.0d;
-                    modSample *= riverMults[i];
-                    finalSample += modSample;
-                }
-
-                for (int dy = 0; dy < ySize; dy++)
-                {
-                    if (dy < ySize / 2)
-                    {
-                        densityMapArray[(dx * ySize * zSize) + (dz * ySize) + dy] -= finalSample * (dy / (ySize / 2d)) * (dy / (ySize / 2d));
-                    }
-                    else
-                    {
-                        densityMapArray[(dx * ySize * zSize) + (dz * ySize) + dy] -= finalSample;
-                    }
-                }
-            }
-        }
-    }
-
-    private void modifyDensityMapCarvingRivers(int chunkX, int chunkZ, int terrainHeight, double[] densityMapArray)
-    {
-        int xSize = 4 + 1;
-        int ySize = (terrainHeight / 8) + 1;
-        int zSize = 4 + 1;
-        int x = chunkX * 4;
-        int z = chunkZ * 4;
-
-        int maxUndergroundRiverHeight = 2;
-
-        double riverLevel = 0d;
-
-        double[] largeCarving = carvingRiverNoise.get(null, x, z, xSize, zSize, 1 / (1000d / xSize), 1 / (1000d / zSize));
-        double[] mediumCarving = carvingRiverNoise.get(null, x, z, xSize, zSize, 1 / (50d / xSize), 1 / (50d / zSize));
-        double[] smallCarving = carvingRiverNoise.get(null, x, z, xSize, zSize, 1 / (10d / xSize), 1 / (10d / zSize));
-
-        double[] riverRadiuses = new double[] { 0.012, 0.018, 0.024 };
-        double[] riverMults = new double[] { 20, 60, 60 };
-
-        for (int dx = 0; dx < xSize; dx++)
-        {
-            for (int dz = 0; dz < zSize; dz++)
-            {
-                final double sample = largeCarving[dx * zSize + dz] + mediumCarving[dx * zSize + dz] * 0.04 + smallCarving[dx * zSize + dz] * 0.004;
-                double finalSample = 0.0;
-
-                for (int i = 0; i < riverRadiuses.length; i++)
-                {
-                    if (sample < riverLevel - riverRadiuses[i] || sample > riverLevel + riverRadiuses[i]) continue;
-                    double modSample = sample;
-                    modSample -= riverLevel;
-                    modSample /= riverRadiuses[i];
-                    modSample = Math.abs(modSample);
-                    modSample = -modSample;
-                    modSample += 1.0d;
-                    modSample *= riverMults[i];
-                    finalSample += modSample;
-                }
-
-                if (finalSample <= 0.0) continue;
-
-                for (int dy = ySize / 2 - maxUndergroundRiverHeight; dy < ySize / 2 + maxUndergroundRiverHeight; dy++)
-                {
-                    double heightFactor = dy;                                           // Range = ySize / 2 - maxUndergroundRiverHeight to ySize / 2 + maxUndergroundRiverHeight
-                    heightFactor = heightFactor - (int)(ySize / 2);                     // Range = -maxUndergroundRiverHeight to maxUndergroundRiverHeight
-                    heightFactor /= maxUndergroundRiverHeight;
-                    heightFactor = Math.abs(heightFactor);
-                    heightFactor = -heightFactor;
-                    heightFactor += 1.0;
-
-                    densityMapArray[(dx * ySize * zSize) + (dz * ySize) + dy] -= finalSample * heightFactor;
-                }
-            }
-        }
-    }
-
-    @Override
-    public double[] generateDensityMap(Chunk chunk)
-    {
-        int terrainHeight = (world.getWorldType().getMaxY() + 1) - world.getWorldType().getMinY();
-
-        int xSize = 4 + 1;
-        int ySize = (terrainHeight / 8) + 1;
-        int zSize = 4 + 1;
-        int x = chunk.xPosition * 4;
-        int y = 0;
-        int z = chunk.zPosition * 4;
-
-        double[] densityMapArray = new double[xSize * ySize * zSize];
-
-        final double mainNoiseScaleX = 80;
-        final double mainNoiseScaleY = 160;
-        final double mainNoiseScaleZ = 80;
-
-        final double scaleNoiseScaleX = 1.121;
-        final double scaleNoiseScaleZ = 1.121;
-
-        final double depthNoiseScaleX = 200;
-        final double depthNoiseScaleZ = 200;
-
-        // This ternary operator business should be replaced properly once world settings are added.
-        final double depthBaseSize = world.getWorldType() == WorldTypes.OVERWORLD_AMPLIFIED ? 8.5D : (terrainHeight / 16D) + 0.5D;
-
-        final double coordScale = 684.412D;
-        final double heightScale = 684.412D;
-
-        final double heightStretch = 12;
-
-        // Ditto to ^
-        final double upperLimitScale = world.getWorldType() == WorldTypes.OVERWORLD_AMPLIFIED ? 128 : 512;
-        final double lowerLimitScale = 512;
-
-        // uses temp and humidity to alter terrain shape.
-        double[] scaleArray = scaleNoise.get(null, x, z, xSize, zSize, scaleNoiseScaleX, scaleNoiseScaleZ);
-        double[] depthArray = depthNoise.get(null, x, z, xSize, zSize, depthNoiseScaleX, depthNoiseScaleZ);
-        double[] mainNoiseArray = mainNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale / mainNoiseScaleX, heightScale / mainNoiseScaleY, coordScale / mainNoiseScaleZ);
-        double[] minLimitArray = minLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
-        double[] maxLimitArray = maxLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
-        int mainIndex = 0;
-        int depthScaleIndex = 0;
-        int xSizeScale = 16 / xSize;
-        for(int dx = 0; dx < xSize; dx++)
-        {
-            int ix = dx * xSizeScale + xSizeScale / 2;
-            for(int dz = 0; dz < zSize; dz++)
-            {
-                int iz = dz * xSizeScale + xSizeScale / 2;
-
-                // used to control temperature based on temp and humid
-                double temperature = chunk.temperature[ix * 16 + iz];
-                double humidity = chunk.humidity[ix * 16 + iz] * temperature;
-                humidity = 1.0D - humidity;
-                humidity *= humidity;
-                humidity *= humidity;
-                humidity = 1.0D - humidity;
-
-                // Calculate scale
-                double scale = (scaleArray[depthScaleIndex] + 256D) / 512D;
-                scale *= humidity;
-                if(scale > 1.0D)
-                {
-                    scale = 1.0D;
-                }
-
-                // Calculate depth
-                double depth = depthArray[depthScaleIndex] / 8000D;
-                if(depth < 0.0D)
-                {
-                    depth = -depth * 0.3D;
-                }
-                depth = depth * 3D - 2D;
-
-                if(depth < 0.0D)
-                {
-                    depth /= 2D;
-                    if(depth < -1D)
-                    {
-                        depth = -1D;
-                    }
-                    depth /= 1.4D;
-                    depth /= 2D;
-                    scale = 0.0D;
-                }
-                else
-                {
-                    if(depth > 1.0D)
-                    {
-                        depth = 1.0D;
-                    }
-                    depth /= 8D;
-                }
-
-                if(scale < 0.0D)
-                {
-                    scale = 0.0D;
-                }
-
-                scale += 0.5D;
-                depth = (depth * (depthBaseSize * 2)) / 16D;
-
-                double offsetY = depthBaseSize + depth * 4D;
-                depthScaleIndex++;
-                for(int dy = 0; dy < ySize; dy++)
-                {
-                    double density;
-                    double densityOffset = (((double)dy - offsetY) * heightStretch) / scale;
-                    if(densityOffset < 0.0D)
-                    {
-                        densityOffset *= 4D;
-                    }
-                    double minDensity = minLimitArray[mainIndex] / upperLimitScale;
-                    double maxDensity = maxLimitArray[mainIndex] / lowerLimitScale;
-                    double mainDensity = (mainNoiseArray[mainIndex] / 10D + 1.0D) / 2D;
-
-                    // Constrain density
-                    if(mainDensity < 0.0D)
-                    {
-                        density = minDensity;
-                    }
-                    else if(mainDensity > 1.0D)
-                    {
-                        density = maxDensity;
-                    }
-                    else
-                    {
-                        density = minDensity + (maxDensity - minDensity) * mainDensity;
-                    }
-                    density -= densityOffset;
-
-                    if(dy > ySize - 4)
-                    {
-                        double densityMod = (float)(dy - (ySize - 4)) / 3F;
-                        density = density * (1.0D - densityMod) + -10D * densityMod;
-                    }
-
-                    densityMapArray[mainIndex] = density;
-                    mainIndex++;
-                }
-            }
-        }
-
-        if (generateRivers)
-        {
-            modifyDensityMapSmoothingRivers(chunk.xPosition, chunk.zPosition, terrainHeight, densityMapArray);
-            modifyDensityMapCarvingRivers(chunk.xPosition, chunk.zPosition, terrainHeight, densityMapArray);
-        }
-
-        return densityMapArray;
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.type.WorldTypes;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
+import net.minecraft.core.world.noise.BasePerlinNoise;
+import net.minecraft.core.world.noise.PerlinNoise;
+
+public class DensityGeneratorOverworld
+    implements DensityGenerator
+{
+    private final World world;
+
+    private final BasePerlinNoise<?> minLimitNoise;
+    private final BasePerlinNoise<?> maxLimitNoise;
+    private final BasePerlinNoise<?> mainNoise;
+    private final BasePerlinNoise<?> scaleNoise;
+    private final BasePerlinNoise<?> depthNoise;
+
+    private final boolean generateRivers;
+    private final BasePerlinNoise<?> smoothingRiverNoise;
+    private final BasePerlinNoise<?> carvingRiverNoise;
+
+    protected DensityGeneratorOverworld(World world, BasePerlinNoise<?> minLimitNoise, BasePerlinNoise<?> maxLimitNoise, BasePerlinNoise<?> mainNoise, BasePerlinNoise<?> scaleNoise, BasePerlinNoise<?> depthNoise, boolean generateRivers)
+    {
+        this.world = world;
+
+        this.minLimitNoise = minLimitNoise;
+        this.maxLimitNoise = maxLimitNoise;
+        this.mainNoise = mainNoise;
+        this.scaleNoise = scaleNoise;
+        this.depthNoise = depthNoise;
+
+        this.generateRivers = generateRivers;
+        this.smoothingRiverNoise = new PerlinNoise(world.getRandomSeed(), 1);
+        this.carvingRiverNoise = new PerlinNoise(world.getRandomSeed() + 1, 1);
+    }
+
+    public DensityGeneratorOverworld(World world)
+    {
+        this(world,
+             new PerlinNoise(world.getRandomSeed(), 16, 0),
+             new PerlinNoise(world.getRandomSeed(), 16, 16),
+             new PerlinNoise(world.getRandomSeed(), 8, 32),
+             new PerlinNoise(world.getRandomSeed(), 10, 48),
+             new PerlinNoise(world.getRandomSeed(), 16, 58),
+             true
+         );
+    }
+
+    private void modifyDensityMapSmoothingRivers(int chunkX, int chunkZ, int terrainHeight, double[] densityMapArray)
+    {
+        int xSize = 4 + 1;
+        int ySize = (terrainHeight / 8) + 1;
+        int zSize = 4 + 1;
+        int x = chunkX * 4;
+        int z = chunkZ * 4;
+
+        double riverLevel = 0d;
+
+        double[] largeSmoothing = smoothingRiverNoise.get(null, x, z, xSize, zSize, 1 / (1000d / xSize), 1 / (1000d / zSize));
+        double[] mediumSmoothing = smoothingRiverNoise.get(null, x, z, xSize, zSize, 1 / (50d / xSize), 1 / (50d / zSize));
+        double[] smallSmoothing = smoothingRiverNoise.get(null, x, z, xSize, zSize, 1 / (10d / xSize), 1 / (10d / zSize));
+
+        double[] riverRadiuses = new double[] { 0.006, 0.024, 0.036 };
+        double[] riverMults = new double[] { 20, 60, 60 };
+
+        for (int dx = 0; dx < xSize; dx++)
+        {
+            for (int dz = 0; dz < zSize; dz++)
+            {
+                final double sample = largeSmoothing[dx * zSize + dz] + mediumSmoothing[dx * zSize + dz] * 0.04 + smallSmoothing[dx * zSize + dz] * 0.004;
+                double finalSample = 0.0;
+
+                for (int i = 0; i < riverRadiuses.length; i++)
+                {
+                    if (sample < riverLevel - riverRadiuses[i] || sample > riverLevel + riverRadiuses[i]) continue;
+                    double modSample = sample;
+                    modSample -= riverLevel;
+                    modSample /= riverRadiuses[i];
+                    modSample = Math.abs(modSample);
+                    modSample = -modSample;
+                    modSample += 1.0d;
+                    modSample *= riverMults[i];
+                    finalSample += modSample;
+                }
+
+                for (int dy = 0; dy < ySize; dy++)
+                {
+                    if (dy < ySize / 2)
+                    {
+                        densityMapArray[(dx * ySize * zSize) + (dz * ySize) + dy] -= finalSample * (dy / (ySize / 2d)) * (dy / (ySize / 2d));
+                    }
+                    else
+                    {
+                        densityMapArray[(dx * ySize * zSize) + (dz * ySize) + dy] -= finalSample;
+                    }
+                }
+            }
+        }
+    }
+
+    private void modifyDensityMapCarvingRivers(int chunkX, int chunkZ, int terrainHeight, double[] densityMapArray)
+    {
+        int xSize = 4 + 1;
+        int ySize = (terrainHeight / 8) + 1;
+        int zSize = 4 + 1;
+        int x = chunkX * 4;
+        int z = chunkZ * 4;
+
+        int maxUndergroundRiverHeight = 2;
+
+        double riverLevel = 0d;
+
+        double[] largeCarving = carvingRiverNoise.get(null, x, z, xSize, zSize, 1 / (1000d / xSize), 1 / (1000d / zSize));
+        double[] mediumCarving = carvingRiverNoise.get(null, x, z, xSize, zSize, 1 / (50d / xSize), 1 / (50d / zSize));
+        double[] smallCarving = carvingRiverNoise.get(null, x, z, xSize, zSize, 1 / (10d / xSize), 1 / (10d / zSize));
+
+        double[] riverRadiuses = new double[] { 0.012, 0.018, 0.024 };
+        double[] riverMults = new double[] { 20, 60, 60 };
+
+        for (int dx = 0; dx < xSize; dx++)
+        {
+            for (int dz = 0; dz < zSize; dz++)
+            {
+                final double sample = largeCarving[dx * zSize + dz] + mediumCarving[dx * zSize + dz] * 0.04 + smallCarving[dx * zSize + dz] * 0.004;
+                double finalSample = 0.0;
+
+                for (int i = 0; i < riverRadiuses.length; i++)
+                {
+                    if (sample < riverLevel - riverRadiuses[i] || sample > riverLevel + riverRadiuses[i]) continue;
+                    double modSample = sample;
+                    modSample -= riverLevel;
+                    modSample /= riverRadiuses[i];
+                    modSample = Math.abs(modSample);
+                    modSample = -modSample;
+                    modSample += 1.0d;
+                    modSample *= riverMults[i];
+                    finalSample += modSample;
+                }
+
+                if (finalSample <= 0.0) continue;
+
+                for (int dy = ySize / 2 - maxUndergroundRiverHeight; dy < ySize / 2 + maxUndergroundRiverHeight; dy++)
+                {
+                    double heightFactor = dy;                                           // Range = ySize / 2 - maxUndergroundRiverHeight to ySize / 2 + maxUndergroundRiverHeight
+                    heightFactor = heightFactor - (int)(ySize / 2);                     // Range = -maxUndergroundRiverHeight to maxUndergroundRiverHeight
+                    heightFactor /= maxUndergroundRiverHeight;
+                    heightFactor = Math.abs(heightFactor);
+                    heightFactor = -heightFactor;
+                    heightFactor += 1.0;
+
+                    densityMapArray[(dx * ySize * zSize) + (dz * ySize) + dy] -= finalSample * heightFactor;
+                }
+            }
+        }
+    }
+
+    @Override
+    public double[] generateDensityMap(Chunk chunk)
+    {
+        int terrainHeight = (world.getWorldType().getMaxY() + 1) - world.getWorldType().getMinY();
+
+        int xSize = 4 + 1;
+        int ySize = (terrainHeight / 8) + 1;
+        int zSize = 4 + 1;
+        int x = chunk.xPosition * 4;
+        int y = 0;
+        int z = chunk.zPosition * 4;
+
+        double[] densityMapArray = new double[xSize * ySize * zSize];
+
+        final double mainNoiseScaleX = 80;
+        final double mainNoiseScaleY = 160;
+        final double mainNoiseScaleZ = 80;
+
+        final double scaleNoiseScaleX = 1.121;
+        final double scaleNoiseScaleZ = 1.121;
+
+        final double depthNoiseScaleX = 200;
+        final double depthNoiseScaleZ = 200;
+
+        // This ternary operator business should be replaced properly once world settings are added.
+        final double depthBaseSize = world.getWorldType() == WorldTypes.OVERWORLD_AMPLIFIED ? 8.5D : (terrainHeight / 16D) + 0.5D;
+
+        final double coordScale = 684.412D;
+        final double heightScale = 684.412D;
+
+        final double heightStretch = 12;
+
+        // Ditto to ^
+        final double upperLimitScale = world.getWorldType() == WorldTypes.OVERWORLD_AMPLIFIED ? 128 : 512;
+        final double lowerLimitScale = 512;
+
+        // uses temp and humidity to alter terrain shape.
+        double[] scaleArray = scaleNoise.get(null, x, z, xSize, zSize, scaleNoiseScaleX, scaleNoiseScaleZ);
+        double[] depthArray = depthNoise.get(null, x, z, xSize, zSize, depthNoiseScaleX, depthNoiseScaleZ);
+        double[] mainNoiseArray = mainNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale / mainNoiseScaleX, heightScale / mainNoiseScaleY, coordScale / mainNoiseScaleZ);
+        double[] minLimitArray = minLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
+        double[] maxLimitArray = maxLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
+        int mainIndex = 0;
+        int depthScaleIndex = 0;
+        int xSizeScale = 16 / xSize;
+        for(int dx = 0; dx < xSize; dx++)
+        {
+            int ix = dx * xSizeScale + xSizeScale / 2;
+            for(int dz = 0; dz < zSize; dz++)
+            {
+                int iz = dz * xSizeScale + xSizeScale / 2;
+
+                // used to control temperature based on temp and humid
+                double temperature = chunk.temperature[ix * 16 + iz];
+                double humidity = chunk.humidity[ix * 16 + iz] * temperature;
+                humidity = 1.0D - humidity;
+                humidity *= humidity;
+                humidity *= humidity;
+                humidity = 1.0D - humidity;
+
+                // Calculate scale
+                double scale = (scaleArray[depthScaleIndex] + 256D) / 512D;
+                scale *= humidity;
+                if(scale > 1.0D)
+                {
+                    scale = 1.0D;
+                }
+
+                // Calculate depth
+                double depth = depthArray[depthScaleIndex] / 8000D;
+                if(depth < 0.0D)
+                {
+                    depth = -depth * 0.3D;
+                }
+                depth = depth * 3D - 2D;
+
+                if(depth < 0.0D)
+                {
+                    depth /= 2D;
+                    if(depth < -1D)
+                    {
+                        depth = -1D;
+                    }
+                    depth /= 1.4D;
+                    depth /= 2D;
+                    scale = 0.0D;
+                }
+                else
+                {
+                    if(depth > 1.0D)
+                    {
+                        depth = 1.0D;
+                    }
+                    depth /= 8D;
+                }
+
+                if(scale < 0.0D)
+                {
+                    scale = 0.0D;
+                }
+
+                scale += 0.5D;
+                depth = (depth * (depthBaseSize * 2)) / 16D;
+
+                double offsetY = depthBaseSize + depth * 4D;
+                depthScaleIndex++;
+                for(int dy = 0; dy < ySize; dy++)
+                {
+                    double density;
+                    double densityOffset = (((double)dy - offsetY) * heightStretch) / scale;
+                    if(densityOffset < 0.0D)
+                    {
+                        densityOffset *= 4D;
+                    }
+                    double minDensity = minLimitArray[mainIndex] / upperLimitScale;
+                    double maxDensity = maxLimitArray[mainIndex] / lowerLimitScale;
+                    double mainDensity = (mainNoiseArray[mainIndex] / 10D + 1.0D) / 2D;
+
+                    // Constrain density
+                    if(mainDensity < 0.0D)
+                    {
+                        density = minDensity;
+                    }
+                    else if(mainDensity > 1.0D)
+                    {
+                        density = maxDensity;
+                    }
+                    else
+                    {
+                        density = minDensity + (maxDensity - minDensity) * mainDensity;
+                    }
+                    density -= densityOffset;
+
+                    if(dy > ySize - 4)
+                    {
+                        double densityMod = (float)(dy - (ySize - 4)) / 3F;
+                        density = density * (1.0D - densityMod) + -10D * densityMod;
+                    }
+
+                    densityMapArray[mainIndex] = density;
+                    mainIndex++;
+                }
+            }
+        }
+
+        if (generateRivers)
+        {
+            modifyDensityMapSmoothingRivers(chunk.xPosition, chunk.zPosition, terrainHeight, densityMapArray);
+            modifyDensityMapCarvingRivers(chunk.xPosition, chunk.zPosition, terrainHeight, densityMapArray);
+        }
+
+        return densityMapArray;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/SurfaceGeneratorOverworld.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/SurfaceGeneratorOverworld.java
similarity index 98%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/SurfaceGeneratorOverworld.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/SurfaceGeneratorOverworld.java
index 26ae72e5a..e72eaa908 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/SurfaceGeneratorOverworld.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/SurfaceGeneratorOverworld.java
@@ -1,271 +1,271 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld;
-
-import java.util.Random;
-
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.biome.Biome;
-import net.minecraft.core.world.biome.Biomes;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
-import net.minecraft.core.world.generate.chunk.perlin.SurfaceGenerator;
-import net.minecraft.core.world.noise.BasePerlinNoise;
-import net.minecraft.core.world.noise.PerlinNoise;
-
-public class SurfaceGeneratorOverworld
-    implements SurfaceGenerator
-{
-    private final World world;
-
-    private final BasePerlinNoise<?> beachNoise;
-    private final BasePerlinNoise<?> soilNoise;
-    private final BasePerlinNoise<?> mainNoise;
-
-    private final boolean generateStoneVariants;
-
-    protected SurfaceGeneratorOverworld(World world, BasePerlinNoise<?> beachNoise, BasePerlinNoise<?> soilNoise, BasePerlinNoise<?> mainNoise, boolean generateStoneVariants)
-    {
-        this.world = world;
-        this.beachNoise = beachNoise;
-        this.soilNoise = soilNoise;
-        this.mainNoise = mainNoise;
-        this.generateStoneVariants = generateStoneVariants;
-    }
-
-    public SurfaceGeneratorOverworld(World world)
-    {
-        this(world,
-             new PerlinNoise(world.getRandomSeed(), 4, 40),
-             new PerlinNoise(world.getRandomSeed(), 4, 44),
-             new PerlinNoise(world.getRandomSeed(), 8, 32),
-             true
-        );
-    }
-
-    @Override
-    public void generateSurface(Chunk chunk, ChunkGeneratorResult result)
-    {
-        int oceanY = world.getWorldType().getOceanY();
-        int minY = world.getWorldType().getMinY();
-        int maxY = world.getWorldType().getMaxY();
-        int terrainHeight = (maxY + 1) - minY;
-        int chunkX = chunk.xPosition;
-        int chunkZ = chunk.zPosition;
-
-        int oceanBlock = world.getWorldType().getOceanBlockId();
-        int worldFillBlock = world.getWorldType().getFillerBlockId();
-
-        Random rand = new Random((long) chunkX * 0x4F9939F508L + (long) chunkZ * 0x1EF1565BD5L);
-
-        double beachScale = 0.03125;
-        double[] sandBeachNoise = beachNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, chunkZ * Chunk.CHUNK_SIZE_Z, 0.0D, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SIZE_Z, 1, beachScale, beachScale, 1.0D);
-        double[] gravelBeachNoise = beachNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, 109.0134D, chunkZ * Chunk.CHUNK_SIZE_Z, Chunk.CHUNK_SIZE_X, 1, Chunk.CHUNK_SIZE_Z, beachScale, 1.0D, beachScale);
-        double[] soilThicknessNoise = soilNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, chunkZ * Chunk.CHUNK_SIZE_Z, 0.0D, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SIZE_Z, 1, beachScale * 2D, beachScale * 2D, beachScale * 2D);
-
-        double[] stoneLayerNoise = null;
-        double[] stoneLayerNoiseGranite = null;
-        double[] stoneLayerNoiseLimestone = null;
-        if (generateStoneVariants)
-        {
-            stoneLayerNoise = soilNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, chunkZ * Chunk.CHUNK_SIZE_Z, 0.0D, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SIZE_Z, 1, beachScale * 4D, beachScale * 4D, beachScale * 4D);
-            stoneLayerNoiseGranite = mainNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, chunkZ * Chunk.CHUNK_SIZE_Z, 0.0D, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SIZE_Z, 1, beachScale * 4D, beachScale * 4D, beachScale * 4D);
-            stoneLayerNoiseLimestone = beachNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, chunkZ * Chunk.CHUNK_SIZE_Z, 0.0D, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SIZE_Z, 1, beachScale * 4D, beachScale * 4D, beachScale * 4D);
-        }
-
-        for(int z = 0; z < Chunk.CHUNK_SIZE_Z; z++)
-        {
-            for(int x = 0; x < Chunk.CHUNK_SIZE_X; x++)
-            {
-                boolean generateSandBeach = sandBeachNoise[z + (x * Chunk.CHUNK_SIZE_Z)] + rand.nextDouble() * 0.2D > 0.0D;
-                boolean generateGravelBeach = gravelBeachNoise[z + (x * Chunk.CHUNK_SIZE_Z)] + rand.nextDouble() * 0.2D > 3D;
-                int soilThickness = (int)(soilThicknessNoise[z + (x * Chunk.CHUNK_SIZE_Z)] / 3D + 3D + rand.nextDouble() * 0.25D);
-
-                boolean generateBasaltLayer = false;
-                boolean generateGraniteLayer = false;
-                boolean generateLimestoneLayer = false;
-
-                int basaltThicknessLevel = 0;
-                int graniteThicknessLevel = 0;
-                int limestoneThicknessLevel = 0;
-
-                if (generateStoneVariants)
-                {
-                    generateBasaltLayer = stoneLayerNoise[z + (x * Chunk.CHUNK_SIZE_Z)] + rand.nextDouble() * 0.2D > 0D;
-                    generateGraniteLayer = stoneLayerNoiseGranite[z + (x * Chunk.CHUNK_SIZE_Z)] + rand.nextDouble() * 0.2D > 2D;
-                    generateLimestoneLayer = stoneLayerNoiseLimestone[z + (x * Chunk.CHUNK_SIZE_Z)] + rand.nextDouble() * 0.2D > 3D;
-                    basaltThicknessLevel = (int)(stoneLayerNoise[z + x] + rand.nextDouble() * 0.5D);
-                    graniteThicknessLevel = (int)(stoneLayerNoiseGranite[z + x] + rand.nextDouble() * 0.5D);
-                    limestoneThicknessLevel = (int)(stoneLayerNoiseLimestone[z + x] + rand.nextDouble() * 0.5D);
-                }
-
-
-                int currentLayerDepth = -1;
-                short topBlock = -1;
-                short fillerBlock = -1;
-
-                Biome lastBiome = null;
-
-                for(int y = maxY; y >= minY; y--)
-                {
-                    Biome biome = chunk.getBlockBiome(x, y, z);
-                    if (biome == null) biome = world.getBiomeProvider().getBiome(chunkX * Chunk.CHUNK_SIZE_X + x, y >> 3, chunkZ * Chunk.CHUNK_SIZE_Z + z);
-
-                    int block = result.getBlock(x, y, z);
-
-                    if ((biome != lastBiome || topBlock == -1 || fillerBlock == -1) && block == 0)
-                    {
-                        topBlock = biome.topBlock;
-                        fillerBlock = biome.fillerBlock;
-                    }
-                    lastBiome = biome;
-
-                    // reset the currently generating surface thickness to -1 if air encountered
-                    if(block == 0)
-                    {
-                        currentLayerDepth = -1;
-                        continue;
-                    }
-
-                    // will skip a generation loop if it encounters something other than stone
-                    if(block != worldFillBlock)
-                    {
-                        continue;
-                    }
-
-                    // if thickness == -1, find what block to place on layer level based on biome
-                    if(currentLayerDepth == -1)
-                    {
-                        // if soil thickness is below 0, generate a stone basin where there is no top block layer
-                        if(soilThickness <= 0)
-                        {
-                            topBlock = 0;
-                            fillerBlock = (short) worldFillBlock;
-                        }
-                        else {
-                            //todo: biome tags
-                            boolean biomeGeneratesMud = biome ==
-                                    Biomes.OVERWORLD_CAATINGA_PLAINS ||
-                                    biome == Biomes.OVERWORLD_CAATINGA ||
-                                    biome == Biomes.OVERWORLD_SWAMPLAND ||
-                                    biome == Biomes.OVERWORLD_SWAMPLAND_MUDDY;
-
-                            if(y >= minY + oceanY - 4 && y <= minY + oceanY + 1)
-                            {
-                                // generate coastlines
-                                topBlock = biome.topBlock;
-                                fillerBlock = biome.fillerBlock;
-                                if(biomeGeneratesMud)
-                                {
-                                    topBlock = (short) Blocks.MUD.id;
-                                    fillerBlock = (short) Blocks.MUD.id;
-                                }
-                                else if(generateGravelBeach)
-                                {
-                                    topBlock = 0;
-                                    fillerBlock = (short) Blocks.GRAVEL.id;
-                                }
-                                else if(generateSandBeach)
-                                {
-                                    topBlock = (short) Blocks.SAND.id;
-                                    fillerBlock = (short) Blocks.SAND.id;
-                                }
-                            } else if (y <= oceanY) {
-                                if(biomeGeneratesMud) // Make mud under the ocean always be regular mud
-                                {
-                                    topBlock = (short) Blocks.MUD.id;
-                                    fillerBlock = (short) Blocks.MUD.id;
-                                }
-                            }
-                        }
-
-                        //failsafe so that if a basin is generated under the ocean, the ocean is not replaced with air
-                        if(y < minY + oceanY && topBlock == 0)
-                        {
-                            topBlock = (short) oceanBlock;
-                        }
-                        // if a new surface layer has been chosen to be generated, set the current layer depth to the generated soil thickness level and begin generating downwards
-                        currentLayerDepth = soilThickness;
-
-                        // set block at index to designated surface block above ocean level
-                        if(y >= minY + oceanY - 1)
-                        {
-                            result.setBlock(x, y, z, topBlock);
-                        } else
-                        {
-                            // if the block is below the water level, set it to the chosen filler block
-                            result.setBlock(x, y, z, fillerBlock);
-                        }
-                        continue;
-                    }
-
-                    if (generateStoneVariants)
-                    {
-                        // begin stone layer pass when current surface layer has finished generating
-                        if(currentLayerDepth <= 0)
-                        {
-                            // basalt only generates at y 30 + the basalt thickness value at the current block level + a random number between 0 and 2 (gives the layer a random gradiant at the edge)
-                            if (y >= (minY + basaltThicknessLevel - rand.nextInt(3)) && y <= (minY + 30 + basaltThicknessLevel - rand.nextInt(3)))
-                            {
-                                if (generateBasaltLayer)
-                                {
-                                    result.setBlock(x, y, z, Blocks.BASALT.id);
-                                    continue;
-                                }
-                            }
-                            if(biome == Biomes.OVERWORLD_GLACIER){
-                                if (y >= (minY + 56 + graniteThicknessLevel/4 - rand.nextInt(3)) && y <= maxY)
-                                {
-                                    result.setBlock(x, y, z, Blocks.PERMAFROST.id);
-                                    continue;
-                                }
-                            }
-                            if(biome == Biomes.OVERWORLD_TUNDRA){
-                                if (y >= (minY + 56 + graniteThicknessLevel/4 - rand.nextInt(3)) && y <= (minY + (56 + 36) + graniteThicknessLevel/8 - rand.nextInt(3)))
-                                {
-                                    result.setBlock(x, y, z, Blocks.PERMAFROST.id);
-                                    continue;
-                                }
-                            }
-                            if (y >= ((minY + 128 / 2) + graniteThicknessLevel - rand.nextInt(3)) && y <= (minY + 128 + graniteThicknessLevel - rand.nextInt(3)))
-                            {
-                                if (generateGraniteLayer)
-                                {
-                                    result.setBlock(x, y, z, Blocks.GRANITE.id);
-                                    continue;
-                                }
-                            }
-                            if (y >= ((minY + 128 / 2) + limestoneThicknessLevel - rand.nextInt(3)) && y <= (minY + 128 + limestoneThicknessLevel - rand.nextInt(3)))
-                            {
-                                if (generateLimestoneLayer)
-                                {
-                                    result.setBlock(x, y, z, Blocks.LIMESTONE.id);
-                                    continue;
-                                }
-                            }
-                            continue;
-                        }
-                    }
-
-                    // fill blocks with filler block until current layer level = -1 or air is encountered.
-                    if (currentLayerDepth > 0)
-                    {
-                        currentLayerDepth--;
-                        result.setBlock(x, y, z, fillerBlock);
-                    }
-
-                    // if reached end of filler layer, fill world with sandstone/permafrost if inside a glacier or desert biome
-                    if(currentLayerDepth == 0)
-                    {
-                        if(biome == Biomes.OVERWORLD_DESERT && fillerBlock == Blocks.SAND.id) {
-                            currentLayerDepth = rand.nextInt(8) + 2;
-                            fillerBlock = (short)Blocks.SANDSTONE.id;
-                        } else if(biome == Biomes.OVERWORLD_GLACIER && fillerBlock == Blocks.BLOCK_SNOW.id){
-                            currentLayerDepth = rand.nextInt(8) + 14;
-                            fillerBlock = (short)Blocks.PERMAFROST.id;
-                        }
-                    }
-                }
-            }
-        }
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld;
+
+import java.util.Random;
+
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.biome.Biome;
+import net.minecraft.core.world.biome.Biomes;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkGeneratorResult;
+import net.minecraft.core.world.generate.chunk.perlin.SurfaceGenerator;
+import net.minecraft.core.world.noise.BasePerlinNoise;
+import net.minecraft.core.world.noise.PerlinNoise;
+
+public class SurfaceGeneratorOverworld
+    implements SurfaceGenerator
+{
+    private final World world;
+
+    private final BasePerlinNoise<?> beachNoise;
+    private final BasePerlinNoise<?> soilNoise;
+    private final BasePerlinNoise<?> mainNoise;
+
+    private final boolean generateStoneVariants;
+
+    protected SurfaceGeneratorOverworld(World world, BasePerlinNoise<?> beachNoise, BasePerlinNoise<?> soilNoise, BasePerlinNoise<?> mainNoise, boolean generateStoneVariants)
+    {
+        this.world = world;
+        this.beachNoise = beachNoise;
+        this.soilNoise = soilNoise;
+        this.mainNoise = mainNoise;
+        this.generateStoneVariants = generateStoneVariants;
+    }
+
+    public SurfaceGeneratorOverworld(World world)
+    {
+        this(world,
+             new PerlinNoise(world.getRandomSeed(), 4, 40),
+             new PerlinNoise(world.getRandomSeed(), 4, 44),
+             new PerlinNoise(world.getRandomSeed(), 8, 32),
+             true
+        );
+    }
+
+    @Override
+    public void generateSurface(Chunk chunk, ChunkGeneratorResult result)
+    {
+        int oceanY = world.getWorldType().getOceanY();
+        int minY = world.getWorldType().getMinY();
+        int maxY = world.getWorldType().getMaxY();
+        int terrainHeight = (maxY + 1) - minY;
+        int chunkX = chunk.xPosition;
+        int chunkZ = chunk.zPosition;
+
+        int oceanBlock = world.getWorldType().getOceanBlockId();
+        int worldFillBlock = world.getWorldType().getFillerBlockId();
+
+        Random rand = new Random((long) chunkX * 0x4F9939F508L + (long) chunkZ * 0x1EF1565BD5L);
+
+        double beachScale = 0.03125;
+        double[] sandBeachNoise = beachNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, chunkZ * Chunk.CHUNK_SIZE_Z, 0.0D, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SIZE_Z, 1, beachScale, beachScale, 1.0D);
+        double[] gravelBeachNoise = beachNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, 109.0134D, chunkZ * Chunk.CHUNK_SIZE_Z, Chunk.CHUNK_SIZE_X, 1, Chunk.CHUNK_SIZE_Z, beachScale, 1.0D, beachScale);
+        double[] soilThicknessNoise = soilNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, chunkZ * Chunk.CHUNK_SIZE_Z, 0.0D, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SIZE_Z, 1, beachScale * 2D, beachScale * 2D, beachScale * 2D);
+
+        double[] stoneLayerNoise = null;
+        double[] stoneLayerNoiseGranite = null;
+        double[] stoneLayerNoiseLimestone = null;
+        if (generateStoneVariants)
+        {
+            stoneLayerNoise = soilNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, chunkZ * Chunk.CHUNK_SIZE_Z, 0.0D, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SIZE_Z, 1, beachScale * 4D, beachScale * 4D, beachScale * 4D);
+            stoneLayerNoiseGranite = mainNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, chunkZ * Chunk.CHUNK_SIZE_Z, 0.0D, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SIZE_Z, 1, beachScale * 4D, beachScale * 4D, beachScale * 4D);
+            stoneLayerNoiseLimestone = beachNoise.get(null, chunkX * Chunk.CHUNK_SIZE_X, chunkZ * Chunk.CHUNK_SIZE_Z, 0.0D, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SIZE_Z, 1, beachScale * 4D, beachScale * 4D, beachScale * 4D);
+        }
+
+        for(int z = 0; z < Chunk.CHUNK_SIZE_Z; z++)
+        {
+            for(int x = 0; x < Chunk.CHUNK_SIZE_X; x++)
+            {
+                boolean generateSandBeach = sandBeachNoise[z + (x * Chunk.CHUNK_SIZE_Z)] + rand.nextDouble() * 0.2D > 0.0D;
+                boolean generateGravelBeach = gravelBeachNoise[z + (x * Chunk.CHUNK_SIZE_Z)] + rand.nextDouble() * 0.2D > 3D;
+                int soilThickness = (int)(soilThicknessNoise[z + (x * Chunk.CHUNK_SIZE_Z)] / 3D + 3D + rand.nextDouble() * 0.25D);
+
+                boolean generateBasaltLayer = false;
+                boolean generateGraniteLayer = false;
+                boolean generateLimestoneLayer = false;
+
+                int basaltThicknessLevel = 0;
+                int graniteThicknessLevel = 0;
+                int limestoneThicknessLevel = 0;
+
+                if (generateStoneVariants)
+                {
+                    generateBasaltLayer = stoneLayerNoise[z + (x * Chunk.CHUNK_SIZE_Z)] + rand.nextDouble() * 0.2D > 0D;
+                    generateGraniteLayer = stoneLayerNoiseGranite[z + (x * Chunk.CHUNK_SIZE_Z)] + rand.nextDouble() * 0.2D > 2D;
+                    generateLimestoneLayer = stoneLayerNoiseLimestone[z + (x * Chunk.CHUNK_SIZE_Z)] + rand.nextDouble() * 0.2D > 3D;
+                    basaltThicknessLevel = (int)(stoneLayerNoise[z + x] + rand.nextDouble() * 0.5D);
+                    graniteThicknessLevel = (int)(stoneLayerNoiseGranite[z + x] + rand.nextDouble() * 0.5D);
+                    limestoneThicknessLevel = (int)(stoneLayerNoiseLimestone[z + x] + rand.nextDouble() * 0.5D);
+                }
+
+
+                int currentLayerDepth = -1;
+                short topBlock = -1;
+                short fillerBlock = -1;
+
+                Biome lastBiome = null;
+
+                for(int y = maxY; y >= minY; y--)
+                {
+                    Biome biome = chunk.getBlockBiome(x, y, z);
+                    if (biome == null) biome = world.getBiomeProvider().getBiome(chunkX * Chunk.CHUNK_SIZE_X + x, y >> 3, chunkZ * Chunk.CHUNK_SIZE_Z + z);
+
+                    int block = result.getBlock(x, y, z);
+
+                    if ((biome != lastBiome || topBlock == -1 || fillerBlock == -1) && block == 0)
+                    {
+                        topBlock = biome.topBlock;
+                        fillerBlock = biome.fillerBlock;
+                    }
+                    lastBiome = biome;
+
+                    // reset the currently generating surface thickness to -1 if air encountered
+                    if(block == 0)
+                    {
+                        currentLayerDepth = -1;
+                        continue;
+                    }
+
+                    // will skip a generation loop if it encounters something other than stone
+                    if(block != worldFillBlock)
+                    {
+                        continue;
+                    }
+
+                    // if thickness == -1, find what block to place on layer level based on biome
+                    if(currentLayerDepth == -1)
+                    {
+                        // if soil thickness is below 0, generate a stone basin where there is no top block layer
+                        if(soilThickness <= 0)
+                        {
+                            topBlock = 0;
+                            fillerBlock = (short) worldFillBlock;
+                        }
+                        else {
+                            //todo: biome tags
+                            boolean biomeGeneratesMud = biome ==
+                                    Biomes.OVERWORLD_CAATINGA_PLAINS ||
+                                    biome == Biomes.OVERWORLD_CAATINGA ||
+                                    biome == Biomes.OVERWORLD_SWAMPLAND ||
+                                    biome == Biomes.OVERWORLD_SWAMPLAND_MUDDY;
+
+                            if(y >= minY + oceanY - 4 && y <= minY + oceanY + 1)
+                            {
+                                // generate coastlines
+                                topBlock = biome.topBlock;
+                                fillerBlock = biome.fillerBlock;
+                                if(biomeGeneratesMud)
+                                {
+                                    topBlock = (short) Blocks.MUD.id;
+                                    fillerBlock = (short) Blocks.MUD.id;
+                                }
+                                else if(generateGravelBeach)
+                                {
+                                    topBlock = 0;
+                                    fillerBlock = (short) Blocks.GRAVEL.id;
+                                }
+                                else if(generateSandBeach)
+                                {
+                                    topBlock = (short) Blocks.SAND.id;
+                                    fillerBlock = (short) Blocks.SAND.id;
+                                }
+                            } else if (y <= oceanY) {
+                                if(biomeGeneratesMud) // Make mud under the ocean always be regular mud
+                                {
+                                    topBlock = (short) Blocks.MUD.id;
+                                    fillerBlock = (short) Blocks.MUD.id;
+                                }
+                            }
+                        }
+
+                        //failsafe so that if a basin is generated under the ocean, the ocean is not replaced with air
+                        if(y < minY + oceanY && topBlock == 0)
+                        {
+                            topBlock = (short) oceanBlock;
+                        }
+                        // if a new surface layer has been chosen to be generated, set the current layer depth to the generated soil thickness level and begin generating downwards
+                        currentLayerDepth = soilThickness;
+
+                        // set block at index to designated surface block above ocean level
+                        if(y >= minY + oceanY - 1)
+                        {
+                            result.setBlock(x, y, z, topBlock);
+                        } else
+                        {
+                            // if the block is below the water level, set it to the chosen filler block
+                            result.setBlock(x, y, z, fillerBlock);
+                        }
+                        continue;
+                    }
+
+                    if (generateStoneVariants)
+                    {
+                        // begin stone layer pass when current surface layer has finished generating
+                        if(currentLayerDepth <= 0)
+                        {
+                            // basalt only generates at y 30 + the basalt thickness value at the current block level + a random number between 0 and 2 (gives the layer a random gradiant at the edge)
+                            if (y >= (minY + basaltThicknessLevel - rand.nextInt(3)) && y <= (minY + 30 + basaltThicknessLevel - rand.nextInt(3)))
+                            {
+                                if (generateBasaltLayer)
+                                {
+                                    result.setBlock(x, y, z, Blocks.BASALT.id);
+                                    continue;
+                                }
+                            }
+                            if(biome == Biomes.OVERWORLD_GLACIER){
+                                if (y >= (minY + 56 + graniteThicknessLevel/4 - rand.nextInt(3)) && y <= maxY)
+                                {
+                                    result.setBlock(x, y, z, Blocks.PERMAFROST.id);
+                                    continue;
+                                }
+                            }
+                            if(biome == Biomes.OVERWORLD_TUNDRA){
+                                if (y >= (minY + 56 + graniteThicknessLevel/4 - rand.nextInt(3)) && y <= (minY + (56 + 36) + graniteThicknessLevel/8 - rand.nextInt(3)))
+                                {
+                                    result.setBlock(x, y, z, Blocks.PERMAFROST.id);
+                                    continue;
+                                }
+                            }
+                            if (y >= ((minY + 128 / 2) + graniteThicknessLevel - rand.nextInt(3)) && y <= (minY + 128 + graniteThicknessLevel - rand.nextInt(3)))
+                            {
+                                if (generateGraniteLayer)
+                                {
+                                    result.setBlock(x, y, z, Blocks.GRANITE.id);
+                                    continue;
+                                }
+                            }
+                            if (y >= ((minY + 128 / 2) + limestoneThicknessLevel - rand.nextInt(3)) && y <= (minY + 128 + limestoneThicknessLevel - rand.nextInt(3)))
+                            {
+                                if (generateLimestoneLayer)
+                                {
+                                    result.setBlock(x, y, z, Blocks.LIMESTONE.id);
+                                    continue;
+                                }
+                            }
+                            continue;
+                        }
+                    }
+
+                    // fill blocks with filler block until current layer level = -1 or air is encountered.
+                    if (currentLayerDepth > 0)
+                    {
+                        currentLayerDepth--;
+                        result.setBlock(x, y, z, fillerBlock);
+                    }
+
+                    // if reached end of filler layer, fill world with sandstone/permafrost if inside a glacier or desert biome
+                    if(currentLayerDepth == 0)
+                    {
+                        if(biome == Biomes.OVERWORLD_DESERT && fillerBlock == Blocks.SAND.id) {
+                            currentLayerDepth = rand.nextInt(8) + 2;
+                            fillerBlock = (short)Blocks.SANDSTONE.id;
+                        } else if(biome == Biomes.OVERWORLD_GLACIER && fillerBlock == Blocks.BLOCK_SNOW.id){
+                            currentLayerDepth = rand.nextInt(8) + 14;
+                            fillerBlock = (short)Blocks.PERMAFROST.id;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/TerrainGeneratorOverworld.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/TerrainGeneratorOverworld.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/TerrainGeneratorOverworld.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/TerrainGeneratorOverworld.java
index dee0984a5..75ac3317f 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/TerrainGeneratorOverworld.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/TerrainGeneratorOverworld.java
@@ -1,52 +1,52 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld;
-
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
-import net.minecraft.core.world.generate.chunk.perlin.TerrainGeneratorLerp;
-import net.minecraft.core.world.type.WorldType;
-
-public class TerrainGeneratorOverworld
-    extends TerrainGeneratorLerp
-{
-    private final DensityGenerator densityGenerator;
-
-    protected TerrainGeneratorOverworld(World world, DensityGenerator densityGenerator)
-    {
-        super(world);
-
-        this.densityGenerator = densityGenerator;
-    }
-
-    public TerrainGeneratorOverworld(World world)
-    {
-        this(world, new DensityGeneratorOverworld(world));
-    }
-
-    @Override
-    protected int getBlockAt(int x, int y, int z, double density)
-    {
-        WorldType type = world.getWorldType();
-
-        if (y <= type.getMinY() + rand.nextInt(5))
-        {
-            return Blocks.BEDROCK.id;
-        }
-        else if (density > 0.0)
-        {
-            return type.getFillerBlockId();
-        }
-        else if (y >= type.getMinY() && y < type.getMinY() + type.getOceanY())
-        {
-            return type.getOceanBlockId();
-        }
-
-        return 0;
-    }
-
-    @Override
-    public DensityGenerator getDensityGenerator()
-    {
-        return densityGenerator;
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld;
+
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
+import net.minecraft.core.world.generate.chunk.perlin.TerrainGeneratorLerp;
+import net.minecraft.core.world.type.WorldType;
+
+public class TerrainGeneratorOverworld
+    extends TerrainGeneratorLerp
+{
+    private final DensityGenerator densityGenerator;
+
+    protected TerrainGeneratorOverworld(World world, DensityGenerator densityGenerator)
+    {
+        super(world);
+
+        this.densityGenerator = densityGenerator;
+    }
+
+    public TerrainGeneratorOverworld(World world)
+    {
+        this(world, new DensityGeneratorOverworld(world));
+    }
+
+    @Override
+    protected int getBlockAt(int x, int y, int z, double density)
+    {
+        WorldType type = world.getWorldType();
+
+        if (y <= type.getMinY() + rand.nextInt(5))
+        {
+            return Blocks.BEDROCK.id;
+        }
+        else if (density > 0.0)
+        {
+            return type.getFillerBlockId();
+        }
+        else if (y >= type.getMinY() && y < type.getMinY() + type.getOceanY())
+        {
+            return type.getOceanBlockId();
+        }
+
+        return 0;
+    }
+
+    @Override
+    public DensityGenerator getDensityGenerator()
+    {
+        return densityGenerator;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/floating/ChunkGeneratorOverworldFloating.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/floating/ChunkGeneratorOverworldFloating.java
similarity index 98%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/floating/ChunkGeneratorOverworldFloating.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/floating/ChunkGeneratorOverworldFloating.java
index 290bd0d8f..dc3009002 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/floating/ChunkGeneratorOverworldFloating.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/floating/ChunkGeneratorOverworldFloating.java
@@ -1,18 +1,18 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld.floating;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.CavesLargeFeature;
-import net.minecraft.core.world.generate.LargeFeature;
-import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.ChunkDecoratorOverworld;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
-import net.minecraft.core.world.generate.chunk.perlin.paradise.TerrainGeneratorParadise;
-
-public class ChunkGeneratorOverworldFloating
-    extends ChunkGeneratorPerlin
-{
-    public ChunkGeneratorOverworldFloating(World world)
-    {
-        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorParadise(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld.floating;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
+import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.ChunkDecoratorOverworld;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
+import net.minecraft.core.world.generate.chunk.perlin.paradise.TerrainGeneratorParadise;
+
+public class ChunkGeneratorOverworldFloating
+    extends ChunkGeneratorPerlin
+{
+    public ChunkGeneratorOverworldFloating(World world)
+    {
+        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorParadise(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkDecoratorOverworldHell.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkDecoratorOverworldHell.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkDecoratorOverworldHell.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkDecoratorOverworldHell.java
index 5cbb48a10..9ae76f29d 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkDecoratorOverworldHell.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkDecoratorOverworldHell.java
@@ -1,249 +1,249 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld.hell;
-
-import net.minecraft.core.block.BlockSand;
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.block.BlockOreCoal;
-import net.minecraft.core.block.BlockOreDiamond;
-import net.minecraft.core.block.BlockOreGold;
-import net.minecraft.core.block.BlockOreIron;
-import net.minecraft.core.block.BlockOreLapis;
-import net.minecraft.core.block.BlockOreRedstone;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkDecorator;
-import net.minecraft.core.world.generate.feature.*;
-import net.minecraft.core.world.generate.feature.tree.WorldFeatureTree;
-import net.minecraft.core.world.generate.feature.tree.WorldFeatureTreeFancy;
-import net.minecraft.core.world.noise.PerlinNoise;
-
-import java.util.Random;
-
-public class ChunkDecoratorOverworldHell
-    implements ChunkDecorator
-{
-    private final World world;
-    private final PerlinNoise treeDensityNoise;
-
-    public ChunkDecoratorOverworldHell(World world)
-    {
-        this.world = world;
-
-        treeDensityNoise = new PerlinNoise(world.getRandomSeed(), 8, 74);
-    }
-
-    @Override
-    public void decorate(Chunk chunk)
-    {
-        int chunkX = chunk.xPosition;
-        int chunkZ = chunk.zPosition;
-
-        int minY = world.getWorldType().getMinY();
-        int maxY = world.getWorldType().getMaxY();
-        int rangeY = (maxY + 1) - minY;
-
-//        float oreHeightModifier = rangeY / 128f;
-
-        BlockSand.fallInstantly = true;
-        int x = chunkX * 16;
-        int z = chunkZ * 16;
-//        int y = world.getHeightValue(x + 16, z + 16);
-//        Biome biome = world.getBlockBiome(x + 16, y, z + 16);
-        Random rand = new Random(world.getRandomSeed());
-        long l1 = (rand.nextLong() / 2L) * 2L + 1L;
-        long l2 = (rand.nextLong() / 2L) * 2L + 1L;
-        rand.setSeed((long)chunkX * l1 + (long) chunkZ * l2 ^ world.getRandomSeed());
-        if(rand.nextInt(32) == 0)
-        {
-            int i1 = x + rand.nextInt(16) + 8;
-            int l4 = minY + rand.nextInt(rangeY);
-            int i8 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureLake(Blocks.FLUID_LAVA_STILL.id)).place(world, rand, i1, l4, i8);
-        }
-        if(rand.nextInt(16) == 0)
-        {
-            int j1 = x + rand.nextInt(16) + 8;
-            int i5 = minY + rand.nextInt(rangeY - 16) + 8;
-            int j8 = z + rand.nextInt(16) + 8;
-
-            if(i5 < minY + rangeY / 2 || rand.nextInt(10) == 0)
-            {
-                if(rand.nextInt(4) == 0)
-                {
-                    (new WorldFeatureLake(Blocks.OBSIDIAN.id)).place(world, rand, j1, i5, j8);
-                }
-                else
-                {
-                    (new WorldFeatureLake(Blocks.FLUID_LAVA_STILL.id)).place(world, rand, j1, i5, j8);
-                }
-            }
-        }
-
-        for(int l18 = 0; l18 < 50; l18++)
-        {
-            int l21 = x + rand.nextInt(16) + 8;
-            int k23 = minY + rand.nextInt(rangeY / 2);
-            int l24 = z + rand.nextInt(16) + 8;
-            if(k23 < minY + rangeY / 2) {
-                (new WorldFeatureLiquid(Blocks.FLUID_WATER_FLOWING.id)).place(world, rand, l21, k23, l24);
-            }
-        }
-        for(int k1 = 0; k1 < 8; k1++)
-        {
-            int j5 = x + rand.nextInt(16) + 8;
-            int k8 = minY + rand.nextInt(rangeY);
-            int j11 = z + rand.nextInt(16) + 8;
-            if (rand.nextInt(2) == 0)
-            {
-                (new WorldFeatureDungeon(Blocks.BRICK_CLAY.id, Blocks.BRICK_CLAY.id, null)).place(world, rand, j5, k8, j11);
-            }
-            else
-            {
-                (new WorldFeatureDungeon(Blocks.COBBLE_STONE.id, Blocks.COBBLE_STONE_MOSSY.id, null)).place(world, rand, j5, k8, j11);
-            }
-        }
-
-        for(int k1 = 0; k1 < 1; k1++)
-        {
-            int j5 = x + rand.nextInt(16) + 8;
-            int j11 = z + rand.nextInt(16) + 8;
-            int k8 = world.getHeightValue(j5, j11) - (rand.nextInt(2)+2);
-
-            //chance to sink labyrinth
-            if(rand.nextInt(10)==0)
-                k8 -= rand.nextInt(10)+30;
-
-            if(rand.nextInt(512) == 0) {
-                (new WorldFeatureLabyrinth()).place(world, rand, j5, k8, j11);
-            }
-        }
-
-        for(int i2 = 0; i2 < 20; i2++)
-        {
-            int k5 = x + rand.nextInt(16);
-            int l8 = minY + rand.nextInt(rangeY);
-            int k11 = z + rand.nextInt(16);
-            (new WorldFeatureClay(32)).place(world, rand, k5, l8, k11);
-        }
-
-        for(int j2 = 0; j2 < 20; j2++)
-        {
-            int l5 = x + rand.nextInt(16);
-            int i9 = minY + rand.nextInt(rangeY);
-            int l11 = z + rand.nextInt(16);
-            (new WorldFeatureOre(Blocks.DIRT.id, 32)).place(world, rand, l5, i9, l11);
-        }
-
-        for(int k2 = 0; k2 < 10; k2++)
-        {
-            int i6 = x + rand.nextInt(16);
-            int j9 = minY + rand.nextInt(rangeY);
-            int i12 = z + rand.nextInt(16);
-            (new WorldFeatureOre(Blocks.GRAVEL.id, 32)).place(world, rand, i6, j9, i12);
-        }
-
-        for(int i3 = 0; i3 < 20; i3++)
-        {
-            int j6 = x + rand.nextInt(16);
-            int k9 = minY + rand.nextInt(rangeY);
-            int j12 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreCoal.variantMap, 16)).place(world, rand, j6, k9, j12);
-        }
-
-        for(int j3 = 0; j3 < 20; j3++)
-        {
-            int k6 = x + rand.nextInt(16);
-            int l9 = minY + rand.nextInt(rangeY / 2);
-            int k12 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreIron.variantMap, 8)).place(world, rand, k6, l9, k12);
-        }
-
-        for(int k3 = 0; k3 < 2; k3++)
-        {
-            int l6 = x + rand.nextInt(16);
-            int i10 = minY + rand.nextInt(rangeY / 4);
-            int l12 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreGold.variantMap, 8)).place(world, rand, l6, i10, l12);
-        }
-
-        for(int l3 = 0; l3 < 8; l3++)
-        {
-            int i7 = x + rand.nextInt(16);
-            int j10 = minY + rand.nextInt(rangeY / 8);
-            int i13 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreRedstone.variantMap, 7)).place(world, rand, i7, j10, i13);
-        }
-
-        for(int i4 = 0; i4 < 1; i4++)
-        {
-            int j7 = x + rand.nextInt(16);
-            int k10 = minY + rand.nextInt(rangeY / 8);
-            int j13 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreDiamond.variantMap, 7)).place(world, rand, j7, k10, j13);
-        }
-
-        for(int j4 = 0; j4 < 1; j4++)
-        {
-            int k7 = x + rand.nextInt(16);
-            int l10 = minY + rand.nextInt(rangeY / 8) + rand.nextInt(rangeY / 8);
-            int k13 = z + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreLapis.variantMap, 6)).place(world, rand, k7, l10, k13);
-        }
-
-        double d = 0.5D;
-        int treeDensity = (int)((treeDensityNoise.get((double)x * d, (double)z * d) / 8D + rand.nextDouble() * 4D + 4D) / 3D);
-        if(rand.nextInt(10) == 0)
-        {
-            treeDensity++;
-        }
-        treeDensity /= 2;
-        for(int i11 = 0; i11 < treeDensity; i11++)
-        {
-            boolean hasLeaves = rand.nextInt(1234) == 0;
-            int l13 = x + rand.nextInt(16) + 8;
-            int j14 = z + rand.nextInt(16) + 8;
-            WorldFeature wf;
-            if(rand.nextInt(10) == 0)
-            {
-                wf = new WorldFeatureTreeFancy(hasLeaves ? Blocks.LEAVES_OAK.id : 0, Blocks.LOG_OAK.id);
-            } else
-            {
-                wf = new WorldFeatureTree(hasLeaves ? Blocks.LEAVES_OAK.id : 0, Blocks.LOG_OAK.id, 4);
-            }
-            wf.init(1.0D, 1.0D, 1.0D);
-            wf.place(world, rand, l13, world.getHeightValue(l13, j14), j14);
-        }
-
-        byte byte1 = 10;
-        for(int i15 = 0; i15 < byte1; i15++)
-        {
-            int i17 = x + rand.nextInt(16) + 8;
-            int i20 = minY + rand.nextInt(rangeY);
-            int l22 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureDeadBush(Blocks.DEADBUSH.id)).place(world, rand, i17, i20, l22);
-        }
-
-        for(int l18 = 0; l18 < 5; l18++)
-        {
-            int l21 = x + rand.nextInt(16) + 8;
-            int k23 = minY + rand.nextInt(rand.nextInt(rangeY - 8) + 8);
-            int l24 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureLiquid(Blocks.FLUID_LAVA_FLOWING.id)).place(world, rand, l21, k23, l24);
-        }
-
-        for(int i19 = 0; i19 < 20; i19++)
-        {
-            int i22 = x + rand.nextInt(16) + 8;
-            int l23 = minY + rand.nextInt(rand.nextInt(rand.nextInt(rangeY - rangeY / 8) + 8) + 8);
-            int i25 = z + rand.nextInt(16) + 8;
-            (new WorldFeatureLiquid(Blocks.FLUID_LAVA_FLOWING.id)).place(world, rand, i22, l23, i25);
-        }
-
-        if (world.getBlockId(x, minY + world.getWorldType().getOceanY() - 1, z) == world.getWorldType().getOceanBlockId())
-        {
-            world.setBlockWithNotify(x, minY + world.getWorldType().getOceanY() - 1, z, world.getWorldType().getOceanBlockId());
-        }
-
-        BlockSand.fallInstantly = false;
-
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld.hell;
+
+import net.minecraft.core.block.BlockSand;
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.block.BlockOreCoal;
+import net.minecraft.core.block.BlockOreDiamond;
+import net.minecraft.core.block.BlockOreGold;
+import net.minecraft.core.block.BlockOreIron;
+import net.minecraft.core.block.BlockOreLapis;
+import net.minecraft.core.block.BlockOreRedstone;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkDecorator;
+import net.minecraft.core.world.generate.feature.*;
+import net.minecraft.core.world.generate.feature.tree.WorldFeatureTree;
+import net.minecraft.core.world.generate.feature.tree.WorldFeatureTreeFancy;
+import net.minecraft.core.world.noise.PerlinNoise;
+
+import java.util.Random;
+
+public class ChunkDecoratorOverworldHell
+    implements ChunkDecorator
+{
+    private final World world;
+    private final PerlinNoise treeDensityNoise;
+
+    public ChunkDecoratorOverworldHell(World world)
+    {
+        this.world = world;
+
+        treeDensityNoise = new PerlinNoise(world.getRandomSeed(), 8, 74);
+    }
+
+    @Override
+    public void decorate(Chunk chunk)
+    {
+        int chunkX = chunk.xPosition;
+        int chunkZ = chunk.zPosition;
+
+        int minY = world.getWorldType().getMinY();
+        int maxY = world.getWorldType().getMaxY();
+        int rangeY = (maxY + 1) - minY;
+
+//        float oreHeightModifier = rangeY / 128f;
+
+        BlockSand.fallInstantly = true;
+        int x = chunkX * 16;
+        int z = chunkZ * 16;
+//        int y = world.getHeightValue(x + 16, z + 16);
+//        Biome biome = world.getBlockBiome(x + 16, y, z + 16);
+        Random rand = new Random(world.getRandomSeed());
+        long l1 = (rand.nextLong() / 2L) * 2L + 1L;
+        long l2 = (rand.nextLong() / 2L) * 2L + 1L;
+        rand.setSeed((long)chunkX * l1 + (long) chunkZ * l2 ^ world.getRandomSeed());
+        if(rand.nextInt(32) == 0)
+        {
+            int i1 = x + rand.nextInt(16) + 8;
+            int l4 = minY + rand.nextInt(rangeY);
+            int i8 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureLake(Blocks.FLUID_LAVA_STILL.id)).place(world, rand, i1, l4, i8);
+        }
+        if(rand.nextInt(16) == 0)
+        {
+            int j1 = x + rand.nextInt(16) + 8;
+            int i5 = minY + rand.nextInt(rangeY - 16) + 8;
+            int j8 = z + rand.nextInt(16) + 8;
+
+            if(i5 < minY + rangeY / 2 || rand.nextInt(10) == 0)
+            {
+                if(rand.nextInt(4) == 0)
+                {
+                    (new WorldFeatureLake(Blocks.OBSIDIAN.id)).place(world, rand, j1, i5, j8);
+                }
+                else
+                {
+                    (new WorldFeatureLake(Blocks.FLUID_LAVA_STILL.id)).place(world, rand, j1, i5, j8);
+                }
+            }
+        }
+
+        for(int l18 = 0; l18 < 50; l18++)
+        {
+            int l21 = x + rand.nextInt(16) + 8;
+            int k23 = minY + rand.nextInt(rangeY / 2);
+            int l24 = z + rand.nextInt(16) + 8;
+            if(k23 < minY + rangeY / 2) {
+                (new WorldFeatureLiquid(Blocks.FLUID_WATER_FLOWING.id)).place(world, rand, l21, k23, l24);
+            }
+        }
+        for(int k1 = 0; k1 < 8; k1++)
+        {
+            int j5 = x + rand.nextInt(16) + 8;
+            int k8 = minY + rand.nextInt(rangeY);
+            int j11 = z + rand.nextInt(16) + 8;
+            if (rand.nextInt(2) == 0)
+            {
+                (new WorldFeatureDungeon(Blocks.BRICK_CLAY.id, Blocks.BRICK_CLAY.id, null)).place(world, rand, j5, k8, j11);
+            }
+            else
+            {
+                (new WorldFeatureDungeon(Blocks.COBBLE_STONE.id, Blocks.COBBLE_STONE_MOSSY.id, null)).place(world, rand, j5, k8, j11);
+            }
+        }
+
+        for(int k1 = 0; k1 < 1; k1++)
+        {
+            int j5 = x + rand.nextInt(16) + 8;
+            int j11 = z + rand.nextInt(16) + 8;
+            int k8 = world.getHeightValue(j5, j11) - (rand.nextInt(2)+2);
+
+            //chance to sink labyrinth
+            if(rand.nextInt(10)==0)
+                k8 -= rand.nextInt(10)+30;
+
+            if(rand.nextInt(512) == 0) {
+                (new WorldFeatureLabyrinth()).place(world, rand, j5, k8, j11);
+            }
+        }
+
+        for(int i2 = 0; i2 < 20; i2++)
+        {
+            int k5 = x + rand.nextInt(16);
+            int l8 = minY + rand.nextInt(rangeY);
+            int k11 = z + rand.nextInt(16);
+            (new WorldFeatureClay(32)).place(world, rand, k5, l8, k11);
+        }
+
+        for(int j2 = 0; j2 < 20; j2++)
+        {
+            int l5 = x + rand.nextInt(16);
+            int i9 = minY + rand.nextInt(rangeY);
+            int l11 = z + rand.nextInt(16);
+            (new WorldFeatureOre(Blocks.DIRT.id, 32)).place(world, rand, l5, i9, l11);
+        }
+
+        for(int k2 = 0; k2 < 10; k2++)
+        {
+            int i6 = x + rand.nextInt(16);
+            int j9 = minY + rand.nextInt(rangeY);
+            int i12 = z + rand.nextInt(16);
+            (new WorldFeatureOre(Blocks.GRAVEL.id, 32)).place(world, rand, i6, j9, i12);
+        }
+
+        for(int i3 = 0; i3 < 20; i3++)
+        {
+            int j6 = x + rand.nextInt(16);
+            int k9 = minY + rand.nextInt(rangeY);
+            int j12 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreCoal.variantMap, 16)).place(world, rand, j6, k9, j12);
+        }
+
+        for(int j3 = 0; j3 < 20; j3++)
+        {
+            int k6 = x + rand.nextInt(16);
+            int l9 = minY + rand.nextInt(rangeY / 2);
+            int k12 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreIron.variantMap, 8)).place(world, rand, k6, l9, k12);
+        }
+
+        for(int k3 = 0; k3 < 2; k3++)
+        {
+            int l6 = x + rand.nextInt(16);
+            int i10 = minY + rand.nextInt(rangeY / 4);
+            int l12 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreGold.variantMap, 8)).place(world, rand, l6, i10, l12);
+        }
+
+        for(int l3 = 0; l3 < 8; l3++)
+        {
+            int i7 = x + rand.nextInt(16);
+            int j10 = minY + rand.nextInt(rangeY / 8);
+            int i13 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreRedstone.variantMap, 7)).place(world, rand, i7, j10, i13);
+        }
+
+        for(int i4 = 0; i4 < 1; i4++)
+        {
+            int j7 = x + rand.nextInt(16);
+            int k10 = minY + rand.nextInt(rangeY / 8);
+            int j13 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreDiamond.variantMap, 7)).place(world, rand, j7, k10, j13);
+        }
+
+        for(int j4 = 0; j4 < 1; j4++)
+        {
+            int k7 = x + rand.nextInt(16);
+            int l10 = minY + rand.nextInt(rangeY / 8) + rand.nextInt(rangeY / 8);
+            int k13 = z + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreLapis.variantMap, 6)).place(world, rand, k7, l10, k13);
+        }
+
+        double d = 0.5D;
+        int treeDensity = (int)((treeDensityNoise.get((double)x * d, (double)z * d) / 8D + rand.nextDouble() * 4D + 4D) / 3D);
+        if(rand.nextInt(10) == 0)
+        {
+            treeDensity++;
+        }
+        treeDensity /= 2;
+        for(int i11 = 0; i11 < treeDensity; i11++)
+        {
+            boolean hasLeaves = rand.nextInt(1234) == 0;
+            int l13 = x + rand.nextInt(16) + 8;
+            int j14 = z + rand.nextInt(16) + 8;
+            WorldFeature wf;
+            if(rand.nextInt(10) == 0)
+            {
+                wf = new WorldFeatureTreeFancy(hasLeaves ? Blocks.LEAVES_OAK.id : 0, Blocks.LOG_OAK.id);
+            } else
+            {
+                wf = new WorldFeatureTree(hasLeaves ? Blocks.LEAVES_OAK.id : 0, Blocks.LOG_OAK.id, 4);
+            }
+            wf.init(1.0D, 1.0D, 1.0D);
+            wf.place(world, rand, l13, world.getHeightValue(l13, j14), j14);
+        }
+
+        byte byte1 = 10;
+        for(int i15 = 0; i15 < byte1; i15++)
+        {
+            int i17 = x + rand.nextInt(16) + 8;
+            int i20 = minY + rand.nextInt(rangeY);
+            int l22 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureDeadBush(Blocks.DEADBUSH.id)).place(world, rand, i17, i20, l22);
+        }
+
+        for(int l18 = 0; l18 < 5; l18++)
+        {
+            int l21 = x + rand.nextInt(16) + 8;
+            int k23 = minY + rand.nextInt(rand.nextInt(rangeY - 8) + 8);
+            int l24 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureLiquid(Blocks.FLUID_LAVA_FLOWING.id)).place(world, rand, l21, k23, l24);
+        }
+
+        for(int i19 = 0; i19 < 20; i19++)
+        {
+            int i22 = x + rand.nextInt(16) + 8;
+            int l23 = minY + rand.nextInt(rand.nextInt(rand.nextInt(rangeY - rangeY / 8) + 8) + 8);
+            int i25 = z + rand.nextInt(16) + 8;
+            (new WorldFeatureLiquid(Blocks.FLUID_LAVA_FLOWING.id)).place(world, rand, i22, l23, i25);
+        }
+
+        if (world.getBlockId(x, minY + world.getWorldType().getOceanY() - 1, z) == world.getWorldType().getOceanBlockId())
+        {
+            world.setBlockWithNotify(x, minY + world.getWorldType().getOceanY() - 1, z, world.getWorldType().getOceanBlockId());
+        }
+
+        BlockSand.fallInstantly = false;
+
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkGeneratorOverworldHell.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkGeneratorOverworldHell.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkGeneratorOverworldHell.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkGeneratorOverworldHell.java
index 2aba0f926..d73d388be 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkGeneratorOverworldHell.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/hell/ChunkGeneratorOverworldHell.java
@@ -1,18 +1,18 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld.hell;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.CavesLargeFeature;
-import net.minecraft.core.world.generate.LargeFeature;
-import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.TerrainGeneratorOverworld;
-
-public class ChunkGeneratorOverworldHell
-    extends ChunkGeneratorPerlin
-{
-
-    public ChunkGeneratorOverworldHell(World world)
-    {
-        super(world, new ChunkDecoratorOverworldHell(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld.hell;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
+import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.TerrainGeneratorOverworld;
+
+public class ChunkGeneratorOverworldHell
+    extends ChunkGeneratorPerlin
+{
+
+    public ChunkGeneratorOverworldHell(World world)
+    {
+        super(world, new ChunkDecoratorOverworldHell(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkDecoratorOverworldRetro.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkDecoratorOverworldRetro.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkDecoratorOverworldRetro.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkDecoratorOverworldRetro.java
index 27628e349..59f9cb22b 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkDecoratorOverworldRetro.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkDecoratorOverworldRetro.java
@@ -1,232 +1,232 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld.retro;
-
-import net.minecraft.core.block.BlockSand;
-import net.minecraft.core.block.Blocks;
-import net.minecraft.core.block.BlockOreCoal;
-import net.minecraft.core.block.BlockOreDiamond;
-import net.minecraft.core.block.BlockOreGold;
-import net.minecraft.core.block.BlockOreIron;
-import net.minecraft.core.block.BlockOreRedstone;
-import net.minecraft.core.block.material.Material;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.ChunkDecorator;
-import net.minecraft.core.world.generate.feature.*;
-import net.minecraft.core.world.generate.feature.tree.WorldFeatureTree;
-import net.minecraft.core.world.generate.feature.tree.WorldFeatureTreeFancy;
-import net.minecraft.core.world.noise.RetroPerlinNoise;
-
-import java.util.Random;
-
-public class ChunkDecoratorOverworldRetro
-    implements ChunkDecorator
-{
-    private final World world;
-    private final RetroPerlinNoise treeDensityNoise;
-
-    private final boolean snowCovered;
-
-    public ChunkDecoratorOverworldRetro(World world)
-    {
-        this.world = world;
-
-        treeDensityNoise = new RetroPerlinNoise(world.getRandomSeed(), 8, 74);
-
-        snowCovered = false;//new Random(world.getRandomSeed()).nextBoolean();
-    }
-
-    @Override
-    public void decorate(Chunk chunk)
-    {
-        world.scheduledUpdatesAreImmediate = true;
-        int chunkX = chunk.xPosition;
-        int chunkZ = chunk.zPosition;
-
-        int minY = world.getWorldType().getMinY();
-        int maxY = world.getWorldType().getMaxY();
-        int rangeY = (maxY + 1) - minY;
-
-        BlockSand.fallInstantly = true;
-        int k = chunkX * 16;
-        int l = chunkZ * 16;
-        Random rand = new Random(world.getRandomSeed());
-        long l1 = (rand.nextLong() / 2L) * 2L + 1L;
-        long l2 = (rand.nextLong() / 2L) * 2L + 1L;
-        rand.setSeed((long) chunkX * l1 + (long) chunkZ * l2 ^ world.getRandomSeed());
-        for (int i1 = 0; i1 < 8; i1++)
-        {
-            int i4 = k + rand.nextInt(16) + 8;
-            int j6 = minY + rand.nextInt(rangeY);
-            int i11 = l + rand.nextInt(16) + 8;
-            (new WorldFeatureDungeon(Blocks.COBBLE_STONE.id, Blocks.COBBLE_STONE_MOSSY.id, null)).place(world, rand, i4, j6, i11);
-        }
-
-        for (int j1 = 0; j1 < 10; j1++)
-        {
-            int j4 = k + rand.nextInt(16);
-            int k6 = minY + rand.nextInt(rangeY);
-            int j11 = l + rand.nextInt(16);
-            (new WorldFeatureClay(32)).place(world, rand, j4, k6, j11);
-        }
-
-        for (int k1 = 0; k1 < 20; k1++)
-        {
-            int k4 = k + rand.nextInt(16);
-            int l6 = minY + rand.nextInt(rangeY);
-            int k11 = l + rand.nextInt(16);
-            (new WorldFeatureOre(Blocks.DIRT.id, 32)).place(world, rand, k4, l6, k11);
-        }
-
-        for (int i2 = 0; i2 < 10; i2++)
-        {
-            int l4 = k + rand.nextInt(16);
-            int i7 = minY + rand.nextInt(rangeY);
-            int l11 = l + rand.nextInt(16);
-            (new WorldFeatureOre(Blocks.GRAVEL.id, 32)).place(world, rand, l4, i7, l11);
-        }
-
-        for (int j2 = 0; j2 < 20; j2++)
-        {
-            int i5 = k + rand.nextInt(16);
-            int j7 = minY + rand.nextInt(rangeY);
-            int i12 = l + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreCoal.variantMap, 16)).place(world, rand, i5, j7, i12);
-        }
-
-        for (int k2 = 0; k2 < 20; k2++)
-        {
-            int j5 = k + rand.nextInt(16);
-            int k7 = minY + rand.nextInt(rangeY / 2);
-            int j12 = l + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreIron.variantMap, 8)).place(world, rand, j5, k7, j12);
-        }
-
-        for (int i3 = 0; i3 < 2; i3++)
-        {
-            int k5 = k + rand.nextInt(16);
-            int l7 = minY + rand.nextInt(rangeY / 4);
-            int k12 = l + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreGold.variantMap, 8)).place(world, rand, k5, l7, k12);
-        }
-
-        for (int j3 = 0; j3 < 8; j3++)
-        {
-            int l5 = k + rand.nextInt(16);
-            int i8 = minY + rand.nextInt(rangeY / 8);
-            int l12 = l + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreRedstone.variantMap, 7)).place(world, rand, l5, i8, l12);
-        }
-
-        for (int k3 = 0; k3 < 1; k3++)
-        {
-            int i6 = k + rand.nextInt(16);
-            int j8 = minY + rand.nextInt(rangeY / 8);
-            int i13 = l + rand.nextInt(16);
-            (new WorldFeatureOre(BlockOreDiamond.variantMap, 7)).place(world, rand, i6, j8, i13);
-        }
-
-        double d = 0.5D;
-        int l3 = (int)((treeDensityNoise.get((double)k * d, (double)l * d) / 8D + rand.nextDouble() * 4D + 4D) / 3D);
-        if (l3 < 0)
-        {
-            l3 = 0;
-        }
-        if (rand.nextInt(10) == 0)
-        {
-            l3++;
-        }
-        Object obj = new WorldFeatureTree(Blocks.LEAVES_OAK_RETRO.id, Blocks.LOG_OAK.id, 4);
-        if (rand.nextInt(10) == 0)
-        {
-            obj = new WorldFeatureTreeFancy(Blocks.LEAVES_OAK_RETRO.id, Blocks.LOG_OAK.id);
-        }
-        for (int k8 = 0; k8 < l3; k8++)
-        {
-            int j13 = k + rand.nextInt(16) + 8;
-            int l15 = l + rand.nextInt(16) + 8;
-            ((WorldFeature)(obj)).init(1.0D, 1.0D, 1.0D);
-            ((WorldFeature)(obj)).place(world, rand, j13, world.getHeightValue(j13, l15), l15);
-        }
-
-        for (int l8 = 0; l8 < 2; l8++)
-        {
-            int k13 = k + rand.nextInt(16) + 8;
-            int i16 = minY + rand.nextInt(rangeY);
-            int j18 = l + rand.nextInt(16) + 8;
-            (new WorldFeatureFlowers(Blocks.FLOWER_YELLOW.id, 64, false)).place(world, rand, k13, i16, j18);
-        }
-
-        if (rand.nextInt(2) == 0)
-        {
-            int i9 = k + rand.nextInt(16) + 8;
-            int l13 = minY + rand.nextInt(rangeY);
-            int j16 = l + rand.nextInt(16) + 8;
-            (new WorldFeatureFlowers(Blocks.FLOWER_RED.id, 64, false)).place(world, rand, i9, l13, j16);
-        }
-        if (rand.nextInt(4) == 0)
-        {
-            int j9 = k + rand.nextInt(16) + 8;
-            int i14 = minY + rand.nextInt(rangeY);
-            int k16 = l + rand.nextInt(16) + 8;
-            (new WorldFeatureFlowers(Blocks.MUSHROOM_BROWN.id, 64, false)).place(world, rand, j9, i14, k16);
-        }
-        if (rand.nextInt(8) == 0)
-        {
-            int k9 = k + rand.nextInt(16) + 8;
-            int j14 = minY + rand.nextInt(rangeY);
-            int l16 = l + rand.nextInt(16) + 8;
-            (new WorldFeatureFlowers(Blocks.MUSHROOM_RED.id, 64, false)).place(world, rand, k9, j14, l16);
-        }
-        for (int l9 = 0; l9 < 10; l9++)
-        {
-            int k14 = k + rand.nextInt(16) + 8;
-            int i17 = minY + rand.nextInt(rangeY);
-            int k18 = l + rand.nextInt(16) + 8;
-            (new WorldFeatureSugarCane()).place(world, rand, k14, i17, k18);
-        }
-
-        for (int i10 = 0; i10 < 1; i10++)
-        {
-            int l14 = k + rand.nextInt(16) + 8;
-            int j17 = minY + rand.nextInt(rangeY);
-            int l18 = l + rand.nextInt(16) + 8;
-            (new WorldFeatureCactus()).place(world, rand, l14, j17, l18);
-        }
-
-        for (int j10 = 0; j10 < 50; j10++)
-        {
-            int i15 = k + rand.nextInt(16) + 8;
-            int k17 = minY + rand.nextInt(rand.nextInt(rangeY - 8) + 8);
-            int i19 = l + rand.nextInt(16) + 8;
-            (new WorldFeatureLiquid(Blocks.FLUID_WATER_FLOWING.id)).place(world, rand, i15, k17, i19);
-        }
-
-        for (int k10 = 0; k10 < 20; k10++)
-        {
-            int j15 = k + rand.nextInt(16) + 8;
-            int l17 = minY + rand.nextInt(rand.nextInt(rand.nextInt(rangeY / 2 - rangeY / 8) + 8) + 8);
-            int j19 = l + rand.nextInt(16) + 8;
-            (new WorldFeatureLiquid(Blocks.FLUID_LAVA_FLOWING.id)).place(world, rand, j15, l17, j19);
-        }
-
-        for (int l10 = k + 8 + 0; l10 < k + 8 + 16; l10++)
-        {
-            for (int k15 = l + 8 + 0; k15 < l + 8 + 16; k15++)
-            {
-                int i18 = world.findTopSolidBlock(l10, k15);
-                if (snowCovered && i18 > minY && i18 <= maxY && world.getBlockId(l10, i18, k15) == 0 && world.getBlockMaterial(l10, i18 - 1, k15).blocksMotion() && world.getBlockMaterial(l10, i18 - 1, k15) != Material.ice)
-                {
-                    world.setBlockWithNotify(l10, i18, k15, Blocks.LAYER_SNOW.id);
-                }
-                if (snowCovered && world.getBlockMaterial(l10, world.getWorldType().getOceanY() - 1, k15) == Material.water)
-                {
-                    world.setBlockWithNotify(l10, world.getWorldType().getOceanY() - 1, k15, Blocks.ICE.id);
-                }
-            }
-
-        }
-
-        BlockSand.fallInstantly = false;
-        world.scheduledUpdatesAreImmediate = false;
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld.retro;
+
+import net.minecraft.core.block.BlockSand;
+import net.minecraft.core.block.Blocks;
+import net.minecraft.core.block.BlockOreCoal;
+import net.minecraft.core.block.BlockOreDiamond;
+import net.minecraft.core.block.BlockOreGold;
+import net.minecraft.core.block.BlockOreIron;
+import net.minecraft.core.block.BlockOreRedstone;
+import net.minecraft.core.block.material.Material;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.ChunkDecorator;
+import net.minecraft.core.world.generate.feature.*;
+import net.minecraft.core.world.generate.feature.tree.WorldFeatureTree;
+import net.minecraft.core.world.generate.feature.tree.WorldFeatureTreeFancy;
+import net.minecraft.core.world.noise.RetroPerlinNoise;
+
+import java.util.Random;
+
+public class ChunkDecoratorOverworldRetro
+    implements ChunkDecorator
+{
+    private final World world;
+    private final RetroPerlinNoise treeDensityNoise;
+
+    private final boolean snowCovered;
+
+    public ChunkDecoratorOverworldRetro(World world)
+    {
+        this.world = world;
+
+        treeDensityNoise = new RetroPerlinNoise(world.getRandomSeed(), 8, 74);
+
+        snowCovered = false;//new Random(world.getRandomSeed()).nextBoolean();
+    }
+
+    @Override
+    public void decorate(Chunk chunk)
+    {
+        world.scheduledUpdatesAreImmediate = true;
+        int chunkX = chunk.xPosition;
+        int chunkZ = chunk.zPosition;
+
+        int minY = world.getWorldType().getMinY();
+        int maxY = world.getWorldType().getMaxY();
+        int rangeY = (maxY + 1) - minY;
+
+        BlockSand.fallInstantly = true;
+        int k = chunkX * 16;
+        int l = chunkZ * 16;
+        Random rand = new Random(world.getRandomSeed());
+        long l1 = (rand.nextLong() / 2L) * 2L + 1L;
+        long l2 = (rand.nextLong() / 2L) * 2L + 1L;
+        rand.setSeed((long) chunkX * l1 + (long) chunkZ * l2 ^ world.getRandomSeed());
+        for (int i1 = 0; i1 < 8; i1++)
+        {
+            int i4 = k + rand.nextInt(16) + 8;
+            int j6 = minY + rand.nextInt(rangeY);
+            int i11 = l + rand.nextInt(16) + 8;
+            (new WorldFeatureDungeon(Blocks.COBBLE_STONE.id, Blocks.COBBLE_STONE_MOSSY.id, null)).place(world, rand, i4, j6, i11);
+        }
+
+        for (int j1 = 0; j1 < 10; j1++)
+        {
+            int j4 = k + rand.nextInt(16);
+            int k6 = minY + rand.nextInt(rangeY);
+            int j11 = l + rand.nextInt(16);
+            (new WorldFeatureClay(32)).place(world, rand, j4, k6, j11);
+        }
+
+        for (int k1 = 0; k1 < 20; k1++)
+        {
+            int k4 = k + rand.nextInt(16);
+            int l6 = minY + rand.nextInt(rangeY);
+            int k11 = l + rand.nextInt(16);
+            (new WorldFeatureOre(Blocks.DIRT.id, 32)).place(world, rand, k4, l6, k11);
+        }
+
+        for (int i2 = 0; i2 < 10; i2++)
+        {
+            int l4 = k + rand.nextInt(16);
+            int i7 = minY + rand.nextInt(rangeY);
+            int l11 = l + rand.nextInt(16);
+            (new WorldFeatureOre(Blocks.GRAVEL.id, 32)).place(world, rand, l4, i7, l11);
+        }
+
+        for (int j2 = 0; j2 < 20; j2++)
+        {
+            int i5 = k + rand.nextInt(16);
+            int j7 = minY + rand.nextInt(rangeY);
+            int i12 = l + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreCoal.variantMap, 16)).place(world, rand, i5, j7, i12);
+        }
+
+        for (int k2 = 0; k2 < 20; k2++)
+        {
+            int j5 = k + rand.nextInt(16);
+            int k7 = minY + rand.nextInt(rangeY / 2);
+            int j12 = l + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreIron.variantMap, 8)).place(world, rand, j5, k7, j12);
+        }
+
+        for (int i3 = 0; i3 < 2; i3++)
+        {
+            int k5 = k + rand.nextInt(16);
+            int l7 = minY + rand.nextInt(rangeY / 4);
+            int k12 = l + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreGold.variantMap, 8)).place(world, rand, k5, l7, k12);
+        }
+
+        for (int j3 = 0; j3 < 8; j3++)
+        {
+            int l5 = k + rand.nextInt(16);
+            int i8 = minY + rand.nextInt(rangeY / 8);
+            int l12 = l + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreRedstone.variantMap, 7)).place(world, rand, l5, i8, l12);
+        }
+
+        for (int k3 = 0; k3 < 1; k3++)
+        {
+            int i6 = k + rand.nextInt(16);
+            int j8 = minY + rand.nextInt(rangeY / 8);
+            int i13 = l + rand.nextInt(16);
+            (new WorldFeatureOre(BlockOreDiamond.variantMap, 7)).place(world, rand, i6, j8, i13);
+        }
+
+        double d = 0.5D;
+        int l3 = (int)((treeDensityNoise.get((double)k * d, (double)l * d) / 8D + rand.nextDouble() * 4D + 4D) / 3D);
+        if (l3 < 0)
+        {
+            l3 = 0;
+        }
+        if (rand.nextInt(10) == 0)
+        {
+            l3++;
+        }
+        Object obj = new WorldFeatureTree(Blocks.LEAVES_OAK_RETRO.id, Blocks.LOG_OAK.id, 4);
+        if (rand.nextInt(10) == 0)
+        {
+            obj = new WorldFeatureTreeFancy(Blocks.LEAVES_OAK_RETRO.id, Blocks.LOG_OAK.id);
+        }
+        for (int k8 = 0; k8 < l3; k8++)
+        {
+            int j13 = k + rand.nextInt(16) + 8;
+            int l15 = l + rand.nextInt(16) + 8;
+            ((WorldFeature)(obj)).init(1.0D, 1.0D, 1.0D);
+            ((WorldFeature)(obj)).place(world, rand, j13, world.getHeightValue(j13, l15), l15);
+        }
+
+        for (int l8 = 0; l8 < 2; l8++)
+        {
+            int k13 = k + rand.nextInt(16) + 8;
+            int i16 = minY + rand.nextInt(rangeY);
+            int j18 = l + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Blocks.FLOWER_YELLOW.id, 64, false)).place(world, rand, k13, i16, j18);
+        }
+
+        if (rand.nextInt(2) == 0)
+        {
+            int i9 = k + rand.nextInt(16) + 8;
+            int l13 = minY + rand.nextInt(rangeY);
+            int j16 = l + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Blocks.FLOWER_RED.id, 64, false)).place(world, rand, i9, l13, j16);
+        }
+        if (rand.nextInt(4) == 0)
+        {
+            int j9 = k + rand.nextInt(16) + 8;
+            int i14 = minY + rand.nextInt(rangeY);
+            int k16 = l + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Blocks.MUSHROOM_BROWN.id, 64, false)).place(world, rand, j9, i14, k16);
+        }
+        if (rand.nextInt(8) == 0)
+        {
+            int k9 = k + rand.nextInt(16) + 8;
+            int j14 = minY + rand.nextInt(rangeY);
+            int l16 = l + rand.nextInt(16) + 8;
+            (new WorldFeatureFlowers(Blocks.MUSHROOM_RED.id, 64, false)).place(world, rand, k9, j14, l16);
+        }
+        for (int l9 = 0; l9 < 10; l9++)
+        {
+            int k14 = k + rand.nextInt(16) + 8;
+            int i17 = minY + rand.nextInt(rangeY);
+            int k18 = l + rand.nextInt(16) + 8;
+            (new WorldFeatureSugarCane()).place(world, rand, k14, i17, k18);
+        }
+
+        for (int i10 = 0; i10 < 1; i10++)
+        {
+            int l14 = k + rand.nextInt(16) + 8;
+            int j17 = minY + rand.nextInt(rangeY);
+            int l18 = l + rand.nextInt(16) + 8;
+            (new WorldFeatureCactus()).place(world, rand, l14, j17, l18);
+        }
+
+        for (int j10 = 0; j10 < 50; j10++)
+        {
+            int i15 = k + rand.nextInt(16) + 8;
+            int k17 = minY + rand.nextInt(rand.nextInt(rangeY - 8) + 8);
+            int i19 = l + rand.nextInt(16) + 8;
+            (new WorldFeatureLiquid(Blocks.FLUID_WATER_FLOWING.id)).place(world, rand, i15, k17, i19);
+        }
+
+        for (int k10 = 0; k10 < 20; k10++)
+        {
+            int j15 = k + rand.nextInt(16) + 8;
+            int l17 = minY + rand.nextInt(rand.nextInt(rand.nextInt(rangeY / 2 - rangeY / 8) + 8) + 8);
+            int j19 = l + rand.nextInt(16) + 8;
+            (new WorldFeatureLiquid(Blocks.FLUID_LAVA_FLOWING.id)).place(world, rand, j15, l17, j19);
+        }
+
+        for (int l10 = k + 8 + 0; l10 < k + 8 + 16; l10++)
+        {
+            for (int k15 = l + 8 + 0; k15 < l + 8 + 16; k15++)
+            {
+                int i18 = world.findTopSolidBlock(l10, k15);
+                if (snowCovered && i18 > minY && i18 <= maxY && world.getBlockId(l10, i18, k15) == 0 && world.getBlockMaterial(l10, i18 - 1, k15).blocksMotion() && world.getBlockMaterial(l10, i18 - 1, k15) != Material.ice)
+                {
+                    world.setBlockWithNotify(l10, i18, k15, Blocks.LAYER_SNOW.id);
+                }
+                if (snowCovered && world.getBlockMaterial(l10, world.getWorldType().getOceanY() - 1, k15) == Material.water)
+                {
+                    world.setBlockWithNotify(l10, world.getWorldType().getOceanY() - 1, k15, Blocks.ICE.id);
+                }
+            }
+
+        }
+
+        BlockSand.fallInstantly = false;
+        world.scheduledUpdatesAreImmediate = false;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkGeneratorOverworldRetro.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkGeneratorOverworldRetro.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkGeneratorOverworldRetro.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkGeneratorOverworldRetro.java
index 118166f8b..fe6ec3396 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkGeneratorOverworldRetro.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/ChunkGeneratorOverworldRetro.java
@@ -1,21 +1,21 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld.retro;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.CavesLargeFeature;
-import net.minecraft.core.world.generate.LargeFeature;
-import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
-
-public class ChunkGeneratorOverworldRetro
-    extends ChunkGeneratorPerlin
-{
-
-    public ChunkGeneratorOverworldRetro(World world)
-    {
-        super(world,
-              new ChunkDecoratorOverworldRetro(world),
-              new TerrainGeneratorOverworldRetro(world),
-              new SurfaceGeneratorOverworldRetro(world),
-              new LargeFeature[] { new CavesLargeFeature() }
-        );
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld.retro;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
+import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
+
+public class ChunkGeneratorOverworldRetro
+    extends ChunkGeneratorPerlin
+{
+
+    public ChunkGeneratorOverworldRetro(World world)
+    {
+        super(world,
+              new ChunkDecoratorOverworldRetro(world),
+              new TerrainGeneratorOverworldRetro(world),
+              new SurfaceGeneratorOverworldRetro(world),
+              new LargeFeature[] { new CavesLargeFeature() }
+        );
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/DensityGeneratorOverworldRetro.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/DensityGeneratorOverworldRetro.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/DensityGeneratorOverworldRetro.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/DensityGeneratorOverworldRetro.java
index 4bdef7159..c5790fb8e 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/DensityGeneratorOverworldRetro.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/DensityGeneratorOverworldRetro.java
@@ -1,21 +1,21 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld.retro;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.DensityGeneratorOverworld;
-import net.minecraft.core.world.noise.RetroPerlinNoise;
-
-public class DensityGeneratorOverworldRetro
-    extends DensityGeneratorOverworld
-{
-    public DensityGeneratorOverworldRetro(World world)
-    {
-        super(world,
-              new RetroPerlinNoise(world.getRandomSeed(), 16, 0),
-              new RetroPerlinNoise(world.getRandomSeed(), 16, 16),
-              new RetroPerlinNoise(world.getRandomSeed(), 8, 32),
-              new RetroPerlinNoise(world.getRandomSeed(), 10, 48),
-              new RetroPerlinNoise(world.getRandomSeed(), 16, 58),
-              false
-        );
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld.retro;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.DensityGeneratorOverworld;
+import net.minecraft.core.world.noise.RetroPerlinNoise;
+
+public class DensityGeneratorOverworldRetro
+    extends DensityGeneratorOverworld
+{
+    public DensityGeneratorOverworldRetro(World world)
+    {
+        super(world,
+              new RetroPerlinNoise(world.getRandomSeed(), 16, 0),
+              new RetroPerlinNoise(world.getRandomSeed(), 16, 16),
+              new RetroPerlinNoise(world.getRandomSeed(), 8, 32),
+              new RetroPerlinNoise(world.getRandomSeed(), 10, 48),
+              new RetroPerlinNoise(world.getRandomSeed(), 16, 58),
+              false
+        );
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/SurfaceGeneratorOverworldRetro.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/SurfaceGeneratorOverworldRetro.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/SurfaceGeneratorOverworldRetro.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/SurfaceGeneratorOverworldRetro.java
index 1c9b1030b..e1b7903ac 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/SurfaceGeneratorOverworldRetro.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/SurfaceGeneratorOverworldRetro.java
@@ -1,19 +1,19 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld.retro;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
-import net.minecraft.core.world.noise.RetroPerlinNoise;
-
-public class SurfaceGeneratorOverworldRetro
-    extends SurfaceGeneratorOverworld
-{
-    public SurfaceGeneratorOverworldRetro(World world)
-    {
-        super(world,
-              new RetroPerlinNoise(world.getRandomSeed(), 4, 40),
-              new RetroPerlinNoise(world.getRandomSeed(), 4, 44),
-              new RetroPerlinNoise(world.getRandomSeed(), 8, 32),
-              false
-        );
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld.retro;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
+import net.minecraft.core.world.noise.RetroPerlinNoise;
+
+public class SurfaceGeneratorOverworldRetro
+    extends SurfaceGeneratorOverworld
+{
+    public SurfaceGeneratorOverworldRetro(World world)
+    {
+        super(world,
+              new RetroPerlinNoise(world.getRandomSeed(), 4, 40),
+              new RetroPerlinNoise(world.getRandomSeed(), 4, 44),
+              new RetroPerlinNoise(world.getRandomSeed(), 8, 32),
+              false
+        );
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/TerrainGeneratorOverworldRetro.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/TerrainGeneratorOverworldRetro.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/TerrainGeneratorOverworldRetro.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/TerrainGeneratorOverworldRetro.java
index 8bce0d64b..b71100674 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/TerrainGeneratorOverworldRetro.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/retro/TerrainGeneratorOverworldRetro.java
@@ -1,13 +1,13 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld.retro;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.TerrainGeneratorOverworld;
-
-public class TerrainGeneratorOverworldRetro
-    extends TerrainGeneratorOverworld
-{
-    public TerrainGeneratorOverworldRetro(World world)
-    {
-        super(world, new DensityGeneratorOverworldRetro(world));
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld.retro;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.TerrainGeneratorOverworld;
+
+public class TerrainGeneratorOverworldRetro
+    extends TerrainGeneratorOverworld
+{
+    public TerrainGeneratorOverworldRetro(World world)
+    {
+        super(world, new DensityGeneratorOverworldRetro(world));
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkDecoratorOverworldWoods.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkDecoratorOverworldWoods.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkDecoratorOverworldWoods.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkDecoratorOverworldWoods.java
index e6a858ad9..d617ba1d7 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkDecoratorOverworldWoods.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkDecoratorOverworldWoods.java
@@ -1,13 +1,13 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld.woods;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.ChunkDecoratorOverworld;
-
-public class ChunkDecoratorOverworldWoods
-    extends ChunkDecoratorOverworld
-{
-    public ChunkDecoratorOverworldWoods(World world)
-    {
-        super(world, 50);
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld.woods;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.ChunkDecoratorOverworld;
+
+public class ChunkDecoratorOverworldWoods
+    extends ChunkDecoratorOverworld
+{
+    public ChunkDecoratorOverworldWoods(World world)
+    {
+        super(world, 50);
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkGeneratorOverworldWoods.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkGeneratorOverworldWoods.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkGeneratorOverworldWoods.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkGeneratorOverworldWoods.java
index 0014d4d9a..f26db10b4 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkGeneratorOverworldWoods.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/overworld/woods/ChunkGeneratorOverworldWoods.java
@@ -1,17 +1,17 @@
-package net.minecraft.core.world.generate.chunk.perlin.overworld.woods;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.CavesLargeFeature;
-import net.minecraft.core.world.generate.LargeFeature;
-import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.TerrainGeneratorOverworld;
-
-public class ChunkGeneratorOverworldWoods
-    extends ChunkGeneratorPerlin
-{
-    public ChunkGeneratorOverworldWoods(World world)
-    {
-        super(world, new ChunkDecoratorOverworldWoods(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.overworld.woods;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
+import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.TerrainGeneratorOverworld;
+
+public class ChunkGeneratorOverworldWoods
+    extends ChunkGeneratorPerlin
+{
+    public ChunkGeneratorOverworldWoods(World world)
+    {
+        super(world, new ChunkDecoratorOverworldWoods(world), new TerrainGeneratorOverworld(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/ChunkGeneratorParadise.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/ChunkGeneratorParadise.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/ChunkGeneratorParadise.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/ChunkGeneratorParadise.java
index dc967fac1..ec6e5c2b8 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/ChunkGeneratorParadise.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/ChunkGeneratorParadise.java
@@ -1,17 +1,17 @@
-package net.minecraft.core.world.generate.chunk.perlin.paradise;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.CavesLargeFeature;
-import net.minecraft.core.world.generate.LargeFeature;
-import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.ChunkDecoratorOverworld;
-import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
-
-public class ChunkGeneratorParadise
-    extends ChunkGeneratorPerlin
-{
-    public ChunkGeneratorParadise(World world)
-    {
-        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorParadise(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.paradise;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.CavesLargeFeature;
+import net.minecraft.core.world.generate.LargeFeature;
+import net.minecraft.core.world.generate.chunk.perlin.ChunkGeneratorPerlin;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.ChunkDecoratorOverworld;
+import net.minecraft.core.world.generate.chunk.perlin.overworld.SurfaceGeneratorOverworld;
+
+public class ChunkGeneratorParadise
+    extends ChunkGeneratorPerlin
+{
+    public ChunkGeneratorParadise(World world)
+    {
+        super(world, new ChunkDecoratorOverworld(world), new TerrainGeneratorParadise(world), new SurfaceGeneratorOverworld(world), new LargeFeature[] { new CavesLargeFeature() });
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/DensityGeneratorParadise.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/DensityGeneratorParadise.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/DensityGeneratorParadise.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/DensityGeneratorParadise.java
index ce4c77ee4..99e5c9882 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/DensityGeneratorParadise.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/DensityGeneratorParadise.java
@@ -1,171 +1,171 @@
-package net.minecraft.core.world.generate.chunk.perlin.paradise;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.chunk.Chunk;
-import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
-import net.minecraft.core.world.noise.PerlinNoise;
-
-public class DensityGeneratorParadise
-    implements DensityGenerator
-{
-    private final World world;
-
-    private final PerlinNoise minLimitNoise;
-    private final PerlinNoise maxLimitNoise;
-    private final PerlinNoise mainNoise;
-//    private final PerlinNoise scaleNoise;
-//    private final PerlinNoise depthNoise;
-
-    public DensityGeneratorParadise(World world)
-    {
-        this.world = world;
-
-        minLimitNoise = new PerlinNoise(world.getRandomSeed(), 16, 0);
-        maxLimitNoise = new PerlinNoise(world.getRandomSeed(), 16, 16);
-        mainNoise = new PerlinNoise(world.getRandomSeed(), 8, 32);
-//        scaleNoise = new PerlinNoise(world.getRandomSeed(), 10, 48);
-//        depthNoise = new PerlinNoise(world.getRandomSeed(), 16, 58);
-    }
-
-    @Override
-    public double[] generateDensityMap(Chunk chunk)
-    {
-        int terrainHeight = (world.getWorldType().getMaxY() + 1) - world.getWorldType().getMinY();
-
-        int xSize = 4 + 1;
-        int ySize = (terrainHeight / 8) + 1;
-        int zSize = 4 + 1;
-        int x = chunk.xPosition * 4;
-        int y = 0;
-        int z = chunk.zPosition * 4;
-
-        double[] densityMapArray = new double[xSize * ySize * zSize];
-
-        final double mainNoiseScaleX = 80;
-        final double mainNoiseScaleY = 120;
-        final double mainNoiseScaleZ = 80;
-
-//        final double scaleNoiseScaleX = 1.121;
-//        final double scaleNoiseScaleZ = 1.121;
-
-//        final double depthNoiseScaleX = 200;
-//        final double depthNoiseScaleZ = 200;
-
-//        final double depthBaseSize = (terrainHeight / 16D) + 0.5D;
-
-        final double coordScale = 684.412D / 4;
-        final double heightScale = 684.412D / 2;
-
-//        final double heightStretch = 4;
-
-        final double upperLimitScale = 512;
-        final double lowerLimitScale = 512;
-
-        // uses temp and humidity to alter terrain shape.
-//        double[] scaleArray = scaleNoise.get(null, x, z, xSize, zSize, scaleNoiseScaleX, scaleNoiseScaleZ);
-//        double[] depthArray = depthNoise.get(null, x, z, xSize, zSize, depthNoiseScaleX, depthNoiseScaleZ);
-        double[] mainNoiseArray = mainNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale / mainNoiseScaleX, heightScale / mainNoiseScaleY, coordScale / mainNoiseScaleZ);
-        double[] minLimitArray = minLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
-        double[] maxLimitArray = maxLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
-        int mainIndex = 0;
-//        int depthScaleIndex = 0;
-        int xSizeScale = 16 / xSize;
-        for(int dx = 0; dx < xSize; dx++)
-        {
-            int ix = dx * xSizeScale + xSizeScale / 2;
-            for(int dz = 0; dz < zSize; dz++)
-            {
-                int iz = dz * xSizeScale + xSizeScale / 2;
-
-                // used to control temperature based on temp and humid
-                double temperature = chunk.temperature[ix * 16 + iz];
-                double humidity = chunk.humidity[ix * 16 + iz] * temperature;
-                humidity = 1.0D - humidity;
-                humidity *= humidity;
-                humidity *= humidity;
-                humidity = 1.0D - humidity;
-
-                // Calculate scale
-//                double scale = (scaleArray[depthScaleIndex] + 256D) / 512D;
-//                scale *= humidity;
-//                if(scale > 1.0D)
-//                {
-//                    scale = 1.0D;
-//                }
-
-                // Calculate depth
-//                double depth = depthArray[depthScaleIndex] / 8000D;
-//                if(depth < 0.0D)
-//                {
-//                    depth = -depth * 0.3D;
-//                }
-//                depth = depth * 3D - 2D;
-
-//                if(depth > 1.0D)
-//                {
-//                    depth = 1.0D;
-//                }
-//                depth /= 8D;
-//                depth = 0.0D;
-//                if(scale < 0.0D)
-//                {
-//                    scale = 0.0D;
-//                }
-
-//                scale += 0.5D;
-//                depth = (depth * (depthBaseSize * 2)) / 16D;
-
-//                double offsetY = (double)ySize / 2D;
-//                depthScaleIndex++;
-
-                for(int dy = 0; dy < ySize; dy++)
-                {
-                    double density = 0.0D;
-//                    double densityOffset = (((double)dy - offsetY) * heightStretch) / scale;
-//                    if(densityOffset < 0.0D)
-//                    {
-//                        densityOffset *= -1D;
-//                    }
-                    double minDensity = minLimitArray[mainIndex] / upperLimitScale;
-                    double maxDensity = maxLimitArray[mainIndex] / lowerLimitScale;
-                    double mainDensity = (mainNoiseArray[mainIndex] / 10D + 1.0D) / 2D;
-                    if(mainDensity < 0.0D)
-                    {
-                        density = minDensity;
-                    }
-                    else if(mainDensity > 1.0D)
-                    {
-                        density = maxDensity;
-                    }
-                    else
-                    {
-                        density = minDensity + (maxDensity - minDensity) * mainDensity;
-                    }
-                    density -= 8D;
-
-                    int upperLowerLimit = 8;
-                    // Upper cutoff
-                    if(dy > ySize - upperLowerLimit)
-                    {
-                        double densityMod = (float)(dy - (ySize - upperLowerLimit)) / ((float)upperLowerLimit - 1.0F);
-                        density = density * (1.0D - densityMod) + -30D * densityMod;
-                    }
-                    upperLowerLimit = 2;
-                    // Lower cutoff
-                    if(dy < upperLowerLimit)
-                    {
-                        double densityMod = (float)(upperLowerLimit - dy) / ((float)upperLowerLimit - 1.0F);
-                        density = density * (1.0D - densityMod) + -30D * densityMod;
-                    }
-
-                    densityMapArray[mainIndex] = density;
-                    mainIndex++;
-                }
-
-            }
-        }
-
-        return densityMapArray;
-
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.paradise;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.chunk.Chunk;
+import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
+import net.minecraft.core.world.noise.PerlinNoise;
+
+public class DensityGeneratorParadise
+    implements DensityGenerator
+{
+    private final World world;
+
+    private final PerlinNoise minLimitNoise;
+    private final PerlinNoise maxLimitNoise;
+    private final PerlinNoise mainNoise;
+//    private final PerlinNoise scaleNoise;
+//    private final PerlinNoise depthNoise;
+
+    public DensityGeneratorParadise(World world)
+    {
+        this.world = world;
+
+        minLimitNoise = new PerlinNoise(world.getRandomSeed(), 16, 0);
+        maxLimitNoise = new PerlinNoise(world.getRandomSeed(), 16, 16);
+        mainNoise = new PerlinNoise(world.getRandomSeed(), 8, 32);
+//        scaleNoise = new PerlinNoise(world.getRandomSeed(), 10, 48);
+//        depthNoise = new PerlinNoise(world.getRandomSeed(), 16, 58);
+    }
+
+    @Override
+    public double[] generateDensityMap(Chunk chunk)
+    {
+        int terrainHeight = (world.getWorldType().getMaxY() + 1) - world.getWorldType().getMinY();
+
+        int xSize = 4 + 1;
+        int ySize = (terrainHeight / 8) + 1;
+        int zSize = 4 + 1;
+        int x = chunk.xPosition * 4;
+        int y = 0;
+        int z = chunk.zPosition * 4;
+
+        double[] densityMapArray = new double[xSize * ySize * zSize];
+
+        final double mainNoiseScaleX = 80;
+        final double mainNoiseScaleY = 120;
+        final double mainNoiseScaleZ = 80;
+
+//        final double scaleNoiseScaleX = 1.121;
+//        final double scaleNoiseScaleZ = 1.121;
+
+//        final double depthNoiseScaleX = 200;
+//        final double depthNoiseScaleZ = 200;
+
+//        final double depthBaseSize = (terrainHeight / 16D) + 0.5D;
+
+        final double coordScale = 684.412D / 4;
+        final double heightScale = 684.412D / 2;
+
+//        final double heightStretch = 4;
+
+        final double upperLimitScale = 512;
+        final double lowerLimitScale = 512;
+
+        // uses temp and humidity to alter terrain shape.
+//        double[] scaleArray = scaleNoise.get(null, x, z, xSize, zSize, scaleNoiseScaleX, scaleNoiseScaleZ);
+//        double[] depthArray = depthNoise.get(null, x, z, xSize, zSize, depthNoiseScaleX, depthNoiseScaleZ);
+        double[] mainNoiseArray = mainNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale / mainNoiseScaleX, heightScale / mainNoiseScaleY, coordScale / mainNoiseScaleZ);
+        double[] minLimitArray = minLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
+        double[] maxLimitArray = maxLimitNoise.get(null, x, y, z, xSize, ySize, zSize, coordScale, heightScale, coordScale);
+        int mainIndex = 0;
+//        int depthScaleIndex = 0;
+        int xSizeScale = 16 / xSize;
+        for(int dx = 0; dx < xSize; dx++)
+        {
+            int ix = dx * xSizeScale + xSizeScale / 2;
+            for(int dz = 0; dz < zSize; dz++)
+            {
+                int iz = dz * xSizeScale + xSizeScale / 2;
+
+                // used to control temperature based on temp and humid
+                double temperature = chunk.temperature[ix * 16 + iz];
+                double humidity = chunk.humidity[ix * 16 + iz] * temperature;
+                humidity = 1.0D - humidity;
+                humidity *= humidity;
+                humidity *= humidity;
+                humidity = 1.0D - humidity;
+
+                // Calculate scale
+//                double scale = (scaleArray[depthScaleIndex] + 256D) / 512D;
+//                scale *= humidity;
+//                if(scale > 1.0D)
+//                {
+//                    scale = 1.0D;
+//                }
+
+                // Calculate depth
+//                double depth = depthArray[depthScaleIndex] / 8000D;
+//                if(depth < 0.0D)
+//                {
+//                    depth = -depth * 0.3D;
+//                }
+//                depth = depth * 3D - 2D;
+
+//                if(depth > 1.0D)
+//                {
+//                    depth = 1.0D;
+//                }
+//                depth /= 8D;
+//                depth = 0.0D;
+//                if(scale < 0.0D)
+//                {
+//                    scale = 0.0D;
+//                }
+
+//                scale += 0.5D;
+//                depth = (depth * (depthBaseSize * 2)) / 16D;
+
+//                double offsetY = (double)ySize / 2D;
+//                depthScaleIndex++;
+
+                for(int dy = 0; dy < ySize; dy++)
+                {
+                    double density = 0.0D;
+//                    double densityOffset = (((double)dy - offsetY) * heightStretch) / scale;
+//                    if(densityOffset < 0.0D)
+//                    {
+//                        densityOffset *= -1D;
+//                    }
+                    double minDensity = minLimitArray[mainIndex] / upperLimitScale;
+                    double maxDensity = maxLimitArray[mainIndex] / lowerLimitScale;
+                    double mainDensity = (mainNoiseArray[mainIndex] / 10D + 1.0D) / 2D;
+                    if(mainDensity < 0.0D)
+                    {
+                        density = minDensity;
+                    }
+                    else if(mainDensity > 1.0D)
+                    {
+                        density = maxDensity;
+                    }
+                    else
+                    {
+                        density = minDensity + (maxDensity - minDensity) * mainDensity;
+                    }
+                    density -= 8D;
+
+                    int upperLowerLimit = 8;
+                    // Upper cutoff
+                    if(dy > ySize - upperLowerLimit)
+                    {
+                        double densityMod = (float)(dy - (ySize - upperLowerLimit)) / ((float)upperLowerLimit - 1.0F);
+                        density = density * (1.0D - densityMod) + -30D * densityMod;
+                    }
+                    upperLowerLimit = 2;
+                    // Lower cutoff
+                    if(dy < upperLowerLimit)
+                    {
+                        double densityMod = (float)(upperLowerLimit - dy) / ((float)upperLowerLimit - 1.0F);
+                        density = density * (1.0D - densityMod) + -30D * densityMod;
+                    }
+
+                    densityMapArray[mainIndex] = density;
+                    mainIndex++;
+                }
+
+            }
+        }
+
+        return densityMapArray;
+
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/TerrainGeneratorParadise.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/TerrainGeneratorParadise.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/TerrainGeneratorParadise.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/TerrainGeneratorParadise.java
index bbc3f5834..f2b0a228a 100644
--- a/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/TerrainGeneratorParadise.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/perlin/paradise/TerrainGeneratorParadise.java
@@ -1,38 +1,38 @@
-package net.minecraft.core.world.generate.chunk.perlin.paradise;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
-import net.minecraft.core.world.generate.chunk.perlin.TerrainGeneratorLerp;
-import net.minecraft.core.world.type.WorldType;
-
-public class TerrainGeneratorParadise
-    extends TerrainGeneratorLerp
-{
-    private final DensityGenerator densityGenerator;
-
-    public TerrainGeneratorParadise(World world)
-    {
-        super(world);
-
-        this.densityGenerator = new DensityGeneratorParadise(world);
-    }
-
-    @Override
-    public DensityGenerator getDensityGenerator()
-    {
-        return densityGenerator;
-    }
-
-    @Override
-    protected int getBlockAt(int x, int y, int z, double density)
-    {
-        WorldType type = world.getWorldType();
-
-        if (density > 0.0)
-        {
-            return type.getFillerBlockId();
-        }
-
-        return 0;
-    }
-}
+package net.minecraft.core.world.generate.chunk.perlin.paradise;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.generate.chunk.perlin.DensityGenerator;
+import net.minecraft.core.world.generate.chunk.perlin.TerrainGeneratorLerp;
+import net.minecraft.core.world.type.WorldType;
+
+public class TerrainGeneratorParadise
+    extends TerrainGeneratorLerp
+{
+    private final DensityGenerator densityGenerator;
+
+    public TerrainGeneratorParadise(World world)
+    {
+        super(world);
+
+        this.densityGenerator = new DensityGeneratorParadise(world);
+    }
+
+    @Override
+    public DensityGenerator getDensityGenerator()
+    {
+        return densityGenerator;
+    }
+
+    @Override
+    protected int getBlockAt(int x, int y, int z, double density)
+    {
+        WorldType type = world.getWorldType();
+
+        if (density > 0.0)
+        {
+            return type.getFillerBlockId();
+        }
+
+        return 0;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkDecoratorSkyblock.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkDecoratorSkyblock.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkDecoratorSkyblock.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkDecoratorSkyblock.java
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkDecoratorSkyblockNether.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkDecoratorSkyblockNether.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkDecoratorSkyblockNether.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkDecoratorSkyblockNether.java
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkGeneratorSkyblock.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkGeneratorSkyblock.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkGeneratorSkyblock.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkGeneratorSkyblock.java
diff --git a/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkGeneratorSkyblockNether.java b/game/core/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkGeneratorSkyblockNether.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkGeneratorSkyblockNether.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/chunk/skyblock/ChunkGeneratorSkyblockNether.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/MethodParametersAnnotation.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/MethodParametersAnnotation.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/MethodParametersAnnotation.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/MethodParametersAnnotation.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeature.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeature.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeature.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeature.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureAlgae.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureAlgae.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureAlgae.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureAlgae.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCactus.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCactus.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCactus.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureCactus.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureClay.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureClay.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureClay.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureClay.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDeadBush.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDeadBush.java
similarity index 81%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDeadBush.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDeadBush.java
index cdf7e68df..06485a40d 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDeadBush.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDeadBush.java
@@ -2,6 +2,7 @@ package net.minecraft.core.world.generate.feature;
 
 import net.minecraft.core.block.BlockLeavesBase;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.World;
 
 import java.util.Random;
@@ -18,13 +19,13 @@ public class WorldFeatureDeadBush extends WorldFeature
     @Override
 	public boolean place(World world, Random random, int x, int y, int z)
     {
-        for(int l; ((l = world.getBlockId(x, y, z)) == 0 || Block.blocksList[l] instanceof BlockLeavesBase) && y > 0; y--) { }
+        for(int l; ((l = world.getBlockId(x, y, z)) == 0 || Blocks.blocksList[l] instanceof BlockLeavesBase) && y > 0; y--) { }
         for(int i1 = 0; i1 < 4; i1++)
         {
             int j1 = (x + random.nextInt(8)) - random.nextInt(8);
             int k1 = (y + random.nextInt(4)) - random.nextInt(4);
             int l1 = (z + random.nextInt(8)) - random.nextInt(8);
-            if(world.isAirBlock(j1, k1, l1) && Block.blocksList[blockId].canBlockStay(world, j1, k1, l1))
+            if(world.isAirBlock(j1, k1, l1) && Blocks.blocksList[blockId].canBlockStay(world, j1, k1, l1))
             {
                 world.setBlock(j1, k1, l1, blockId);
             }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDungeon.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDungeon.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDungeon.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureDungeon.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFire.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFire.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFire.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFire.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFlowers.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFlowers.java
similarity index 89%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFlowers.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFlowers.java
index aaab501e6..438e8196f 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFlowers.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureFlowers.java
@@ -2,6 +2,7 @@ package net.minecraft.core.world.generate.feature;
 
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockFlowerStackable;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.World;
 
 import java.util.Random;
@@ -28,10 +29,10 @@ public class WorldFeatureFlowers extends WorldFeature
             int i1 = (x + random.nextInt(8)) - random.nextInt(8);
             int j1 = (y + random.nextInt(4)) - random.nextInt(4);
             int k1 = (z + random.nextInt(8)) - random.nextInt(8);
-            if(world.isAirBlock(i1, j1, k1) && Block.blocksList[plantBlockId].canBlockStay(world, i1, j1, k1))
+            if(world.isAirBlock(i1, j1, k1) && Blocks.blocksList[plantBlockId].canBlockStay(world, i1, j1, k1))
             {
                 final int metadata;
-                if (Block.getBlock(plantBlockId) instanceof BlockFlowerStackable) {
+                if (Blocks.getBlock(plantBlockId) instanceof BlockFlowerStackable) {
                     final int stackSize;
                     if (varyStackSize) {
                         stackSize = getStackSize(random);
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGlowstoneA.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGlowstoneA.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGlowstoneA.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGlowstoneA.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGlowstoneB.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGlowstoneB.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGlowstoneB.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGlowstoneB.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGrassPatch.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGrassPatch.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGrassPatch.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureGrassPatch.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLabyrinth.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLabyrinth.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLabyrinth.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLabyrinth.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLake.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLake.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLake.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLake.java
index fd80e4a6d..746ed8185 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLake.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLake.java
@@ -19,7 +19,7 @@ public class WorldFeatureLake extends WorldFeature
     @Override
 	public boolean place(World world, Random random, int x, int y, int z)
     {
-//    	Block liquid = Block.blocksList[liquidId];
+//    	Block liquid = Blocks.blocksList[liquidId];
 //    	Biome biome = world.getBlockBiome(x, y, z);
 
         x -= 8;
@@ -119,7 +119,7 @@ public class WorldFeatureLake extends WorldFeature
 
         }
 
-        if(Block.blocksList[liquidId].blockMaterial == Material.lava)
+        if(Blocks.blocksList[liquidId].blockMaterial == Material.lava)
         {
             for(int dx = 0; dx < 16; dx++)
             {
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLiquid.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLiquid.java
similarity index 95%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLiquid.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLiquid.java
index 5f26b11d4..a19c45dfe 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLiquid.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureLiquid.java
@@ -67,7 +67,7 @@ public class WorldFeatureLiquid extends WorldFeature
         {
             world.setBlockWithNotify(x, y, z, liquidBlockId);
             world.scheduledUpdatesAreImmediate = true;
-            Block.blocksList[liquidBlockId].updateTick(world, x, y, z, random);
+            Blocks.blocksList[liquidBlockId].updateTick(world, x, y, z, random);
             world.scheduledUpdatesAreImmediate = false;
         }
         return true;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMeadow.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMeadow.java
similarity index 85%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMeadow.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMeadow.java
index 312d3c7df..dc8d1fe4f 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMeadow.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMeadow.java
@@ -3,6 +3,7 @@ package net.minecraft.core.world.generate.feature;
 import net.minecraft.core.block.BlockLeavesBase;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockFlowerStackable;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.World;
 
 import java.util.Random;
@@ -18,7 +19,7 @@ public class WorldFeatureMeadow extends WorldFeature
     @Override
     public boolean place(World world, Random random, int x, int y, int z)
     {
-        for(int l; ((l = world.getBlockId(x, y, z)) == 0 || Block.blocksList[l] instanceof BlockLeavesBase) && y > 0; y--) { }
+        for(int l; ((l = world.getBlockId(x, y, z)) == 0 || Blocks.blocksList[l] instanceof BlockLeavesBase) && y > 0; y--) { }
         for(int i1 = 0; i1 < 128; i1++)
         {
             int j1 = (x + random.nextInt(8)) - random.nextInt(8);
@@ -29,7 +30,7 @@ public class WorldFeatureMeadow extends WorldFeature
             int index = random.nextInt(blockIds.length);
             int flowerId = blockIds[index];
 
-            if(world.isAirBlock(j1, k1, l1) && Block.blocksList[flowerId].canBlockStay(world, j1, k1, l1))
+            if(world.isAirBlock(j1, k1, l1) && Blocks.blocksList[flowerId].canBlockStay(world, j1, k1, l1))
             {
                 final int meta = BlockFlowerStackable.setStackCount(0, WorldFeatureFlowers.getStackSize(random));
                 world.setBlockAndMetadata(j1, k1, l1, flowerId, meta);
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMudPatch.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMudPatch.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMudPatch.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureMudPatch.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherLava.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherLava.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherLava.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherLava.java
index 768152aab..cca2f0297 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherLava.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureNetherLava.java
@@ -72,7 +72,7 @@ public class WorldFeatureNetherLava extends WorldFeature
         {
             world.setBlockWithNotify(x, y, z, blockId);
             world.scheduledUpdatesAreImmediate = true;
-            Block.blocksList[blockId].updateTick(world, x, y, z, random);
+            Blocks.blocksList[blockId].updateTick(world, x, y, z, random);
             world.scheduledUpdatesAreImmediate = false;
         }
         return true;
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureOre.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureOre.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureOre.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureOre.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePermaice.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePermaice.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePermaice.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePermaice.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePumice.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePumice.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePumice.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePumice.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePumpkin.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePumpkin.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePumpkin.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeaturePumpkin.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureRichScorchedDirt.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureRichScorchedDirt.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureRichScorchedDirt.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureRichScorchedDirt.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSpinifexPatch.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSpinifexPatch.java
similarity index 93%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSpinifexPatch.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSpinifexPatch.java
index e0cb29cae..7cfb9f89d 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSpinifexPatch.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSpinifexPatch.java
@@ -12,7 +12,7 @@ public class WorldFeatureSpinifexPatch extends WorldFeature
     @Override
     public boolean place(World world, Random random, int x, int y, int z)
     {
-        for(int l; ((l = world.getBlockId(x, y, z)) == 0 || Block.blocksList[l] instanceof BlockLeavesBase) && y > 0; y--) { }
+        for(int l; ((l = world.getBlockId(x, y, z)) == 0 || Blocks.blocksList[l] instanceof BlockLeavesBase) && y > 0; y--) { }
         for(int i1 = 0; i1 < 64; i1++)
         {
             int j1 = (x + random.nextInt(4)) - random.nextInt(4);
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSponge.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSponge.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSponge.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSponge.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSugarCane.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSugarCane.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSugarCane.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSugarCane.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSugarCaneTall.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSugarCaneTall.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSugarCaneTall.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureSugarCaneTall.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureTallGrass.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureTallGrass.java
similarity index 78%
rename from src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureTallGrass.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureTallGrass.java
index e6fda6c8f..f7295c918 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureTallGrass.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/WorldFeatureTallGrass.java
@@ -2,6 +2,7 @@ package net.minecraft.core.world.generate.feature;
 
 import net.minecraft.core.block.BlockLeavesBase;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.world.World;
 
 import java.util.Random;
@@ -19,7 +20,7 @@ public class WorldFeatureTallGrass extends WorldFeature
 	public boolean place(World world, Random random, int x, int y, int z)
     {
         int l;
-        while (((l = world.getBlockId(x, y, z)) == 0 || Block.blocksList[l] instanceof BlockLeavesBase) && y > 0) {
+        while (((l = world.getBlockId(x, y, z)) == 0 || Blocks.blocksList[l] instanceof BlockLeavesBase) && y > 0) {
             y--;
         }
         for(int i1 = 0; i1 < 128; i1++)
@@ -30,7 +31,7 @@ public class WorldFeatureTallGrass extends WorldFeature
 
             int meta = 0;
 
-            if(world.isAirBlock(j1, k1, l1) && Block.blocksList[blockId].canBlockStay(world, j1, k1, l1))
+            if(world.isAirBlock(j1, k1, l1) && Blocks.blocksList[blockId].canBlockStay(world, j1, k1, l1))
             {
                 world.setBlockAndMetadata(j1, k1, l1, blockId, meta);
             }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTree.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTree.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTree.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTree.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCaatinga.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCherry.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCherry.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCherry.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeCherry.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeEucalyptus.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeEucalyptus.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeEucalyptus.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeEucalyptus.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancy.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancy.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancy.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancy.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancyRainforest.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancyRainforest.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancyRainforest.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeFancyRainforest.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreePalm.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreePalm.java
similarity index 99%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreePalm.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreePalm.java
index 0a9ac8c46..c19e11a01 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreePalm.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreePalm.java
@@ -176,7 +176,7 @@ public class WorldFeatureTreePalm extends WorldFeature {
 		if(id == 0) {
 			return true;
 		}
-		Block block = Block.getBlock(id);
+		Block block = Blocks.getBlock(id);
 		
 		// TODO Create BlockTag and apply to all trees
 		if(block instanceof BlockLog) {
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShapeSwamp.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShapeSwamp.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShapeSwamp.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShapeSwamp.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShrub.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShrub.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShrub.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeShrub.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaBushy.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaBushy.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaBushy.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaBushy.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaTall.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaTall.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaTall.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTaigaTall.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTall.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTall.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTall.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeTall.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeThorn.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeThorn.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeThorn.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/WorldFeatureTreeThorn.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTree.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTree.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTree.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTree.java
index 404504338..248b36af7 100644
--- a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTree.java
+++ b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTree.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.world.generate.feature.tree.spooner;
 
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.tag.BlockTags;
 import net.minecraft.core.world.World;
 import net.minecraft.core.world.generate.feature.MethodParametersAnnotation;
@@ -100,7 +101,7 @@ public abstract class WorldFeatureSpoonerTree
         int interruptedTrunkHeight = -1;
         int y = pos[1];
         while (y < world.getHeightBlocks()) {
-            if (Block.solid[world.getBlockId(pos[0], y, pos[2])]) {
+            if (Blocks.solid[world.getBlockId(pos[0], y, pos[2])]) {
                 interruptedTrunkHeight = y - pos[1];
                 break;
             }
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeBamboo.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeBamboo.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeBamboo.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeBamboo.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeCone.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeCone.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeCone.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeCone.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeMangrove.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeMangrove.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeMangrove.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeMangrove.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeNormal.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeNormal.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeNormal.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeNormal.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreePalm.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreePalm.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreePalm.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreePalm.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeProcedural.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeProcedural.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeProcedural.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeProcedural.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRainforest.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRainforest.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRainforest.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRainforest.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRound.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRound.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRound.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeRound.java
diff --git a/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeStick.java b/game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeStick.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeStick.java
rename to game/core/src/main/java/net/minecraft/core/world/generate/feature/tree/spooner/WorldFeatureSpoonerTreeStick.java
diff --git a/src/main/java/net/minecraft/core/world/noise/BaseImprovedNoise.java b/game/core/src/main/java/net/minecraft/core/world/noise/BaseImprovedNoise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/noise/BaseImprovedNoise.java
rename to game/core/src/main/java/net/minecraft/core/world/noise/BaseImprovedNoise.java
diff --git a/src/main/java/net/minecraft/core/world/noise/BasePerlinNoise.java b/game/core/src/main/java/net/minecraft/core/world/noise/BasePerlinNoise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/noise/BasePerlinNoise.java
rename to game/core/src/main/java/net/minecraft/core/world/noise/BasePerlinNoise.java
diff --git a/src/main/java/net/minecraft/core/world/noise/CombinedPerlinNoise.java b/game/core/src/main/java/net/minecraft/core/world/noise/CombinedPerlinNoise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/noise/CombinedPerlinNoise.java
rename to game/core/src/main/java/net/minecraft/core/world/noise/CombinedPerlinNoise.java
diff --git a/src/main/java/net/minecraft/core/world/noise/ImprovedNoise.java b/game/core/src/main/java/net/minecraft/core/world/noise/ImprovedNoise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/noise/ImprovedNoise.java
rename to game/core/src/main/java/net/minecraft/core/world/noise/ImprovedNoise.java
diff --git a/src/main/java/net/minecraft/core/world/noise/PerlinNoise.java b/game/core/src/main/java/net/minecraft/core/world/noise/PerlinNoise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/noise/PerlinNoise.java
rename to game/core/src/main/java/net/minecraft/core/world/noise/PerlinNoise.java
diff --git a/src/main/java/net/minecraft/core/world/noise/PerlinSimplexNoise.java b/game/core/src/main/java/net/minecraft/core/world/noise/PerlinSimplexNoise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/noise/PerlinSimplexNoise.java
rename to game/core/src/main/java/net/minecraft/core/world/noise/PerlinSimplexNoise.java
diff --git a/src/main/java/net/minecraft/core/world/noise/RetroImprovedNoise.java b/game/core/src/main/java/net/minecraft/core/world/noise/RetroImprovedNoise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/noise/RetroImprovedNoise.java
rename to game/core/src/main/java/net/minecraft/core/world/noise/RetroImprovedNoise.java
diff --git a/src/main/java/net/minecraft/core/world/noise/RetroPerlinNoise.java b/game/core/src/main/java/net/minecraft/core/world/noise/RetroPerlinNoise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/noise/RetroPerlinNoise.java
rename to game/core/src/main/java/net/minecraft/core/world/noise/RetroPerlinNoise.java
diff --git a/src/main/java/net/minecraft/core/world/noise/SimplexNoise.java b/game/core/src/main/java/net/minecraft/core/world/noise/SimplexNoise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/noise/SimplexNoise.java
rename to game/core/src/main/java/net/minecraft/core/world/noise/SimplexNoise.java
diff --git a/src/main/java/net/minecraft/core/world/noise/SurfaceNoise.java b/game/core/src/main/java/net/minecraft/core/world/noise/SurfaceNoise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/noise/SurfaceNoise.java
rename to game/core/src/main/java/net/minecraft/core/world/noise/SurfaceNoise.java
diff --git a/src/main/java/net/minecraft/core/world/pathfinder/BinaryHeap.java b/game/core/src/main/java/net/minecraft/core/world/pathfinder/BinaryHeap.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/pathfinder/BinaryHeap.java
rename to game/core/src/main/java/net/minecraft/core/world/pathfinder/BinaryHeap.java
diff --git a/src/main/java/net/minecraft/core/world/pathfinder/Node.java b/game/core/src/main/java/net/minecraft/core/world/pathfinder/Node.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/pathfinder/Node.java
rename to game/core/src/main/java/net/minecraft/core/world/pathfinder/Node.java
diff --git a/src/main/java/net/minecraft/core/world/pathfinder/Path.java b/game/core/src/main/java/net/minecraft/core/world/pathfinder/Path.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/pathfinder/Path.java
rename to game/core/src/main/java/net/minecraft/core/world/pathfinder/Path.java
diff --git a/src/main/java/net/minecraft/core/world/pathfinder/PathFinder.java b/game/core/src/main/java/net/minecraft/core/world/pathfinder/PathFinder.java
similarity index 97%
rename from src/main/java/net/minecraft/core/world/pathfinder/PathFinder.java
rename to game/core/src/main/java/net/minecraft/core/world/pathfinder/PathFinder.java
index 5b6fa2c05..fb8d14baf 100644
--- a/src/main/java/net/minecraft/core/world/pathfinder/PathFinder.java
+++ b/game/core/src/main/java/net/minecraft/core/world/pathfinder/PathFinder.java
@@ -1,6 +1,7 @@
 package net.minecraft.core.world.pathfinder;
 
 import net.minecraft.core.block.BlockDoor;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.material.Material;
@@ -191,7 +192,7 @@ public class PathFinder
                     {
                         continue;
                     }
-                    if(Block.blocksList[k1] instanceof BlockDoor)
+                    if(Blocks.blocksList[k1] instanceof BlockDoor)
                     {
                         int l1 = worldSource.getBlockMetadata(x1, y1, z1);
                         if(!BlockDoor.isOpen(l1))
@@ -200,7 +201,7 @@ public class PathFinder
                         }
                         continue;
                     }
-                    Material material = Block.blocksList[k1].blockMaterial;
+                    Material material = Blocks.blocksList[k1].blockMaterial;
                     if(material.blocksMotion())
                     {
                         return 0;
diff --git a/src/main/java/net/minecraft/core/world/save/DimensionData.java b/game/core/src/main/java/net/minecraft/core/world/save/DimensionData.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/DimensionData.java
rename to game/core/src/main/java/net/minecraft/core/world/save/DimensionData.java
diff --git a/src/main/java/net/minecraft/core/world/save/ISaveConverter.java b/game/core/src/main/java/net/minecraft/core/world/save/ISaveConverter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/ISaveConverter.java
rename to game/core/src/main/java/net/minecraft/core/world/save/ISaveConverter.java
diff --git a/src/main/java/net/minecraft/core/world/save/ISaveFormat.java b/game/core/src/main/java/net/minecraft/core/world/save/ISaveFormat.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/ISaveFormat.java
rename to game/core/src/main/java/net/minecraft/core/world/save/ISaveFormat.java
diff --git a/src/main/java/net/minecraft/core/world/save/LevelData.java b/game/core/src/main/java/net/minecraft/core/world/save/LevelData.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/LevelData.java
rename to game/core/src/main/java/net/minecraft/core/world/save/LevelData.java
diff --git a/src/main/java/net/minecraft/core/world/save/LevelStorage.java b/game/core/src/main/java/net/minecraft/core/world/save/LevelStorage.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/LevelStorage.java
rename to game/core/src/main/java/net/minecraft/core/world/save/LevelStorage.java
diff --git a/src/main/java/net/minecraft/core/world/save/PlayerIO.java b/game/core/src/main/java/net/minecraft/core/world/save/PlayerIO.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/PlayerIO.java
rename to game/core/src/main/java/net/minecraft/core/world/save/PlayerIO.java
diff --git a/src/main/java/net/minecraft/core/world/save/SaveConverters.java b/game/core/src/main/java/net/minecraft/core/world/save/SaveConverters.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/SaveConverters.java
rename to game/core/src/main/java/net/minecraft/core/world/save/SaveConverters.java
diff --git a/src/main/java/net/minecraft/core/world/save/SaveFile.java b/game/core/src/main/java/net/minecraft/core/world/save/SaveFile.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/SaveFile.java
rename to game/core/src/main/java/net/minecraft/core/world/save/SaveFile.java
diff --git a/src/main/java/net/minecraft/core/world/save/SaveFormatBase.java b/game/core/src/main/java/net/minecraft/core/world/save/SaveFormatBase.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/SaveFormatBase.java
rename to game/core/src/main/java/net/minecraft/core/world/save/SaveFormatBase.java
diff --git a/src/main/java/net/minecraft/core/world/save/SaveFormats.java b/game/core/src/main/java/net/minecraft/core/world/save/SaveFormats.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/SaveFormats.java
rename to game/core/src/main/java/net/minecraft/core/world/save/SaveFormats.java
diff --git a/src/main/java/net/minecraft/core/world/save/SaveHandlerBase.java b/game/core/src/main/java/net/minecraft/core/world/save/SaveHandlerBase.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/SaveHandlerBase.java
rename to game/core/src/main/java/net/minecraft/core/world/save/SaveHandlerBase.java
diff --git a/src/main/java/net/minecraft/core/world/save/SaveHandlerCore.java b/game/core/src/main/java/net/minecraft/core/world/save/SaveHandlerCore.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/SaveHandlerCore.java
rename to game/core/src/main/java/net/minecraft/core/world/save/SaveHandlerCore.java
diff --git a/src/main/java/net/minecraft/core/world/save/SaveHandlerServer.java b/game/core/src/main/java/net/minecraft/core/world/save/SaveHandlerServer.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/SaveHandlerServer.java
rename to game/core/src/main/java/net/minecraft/core/world/save/SaveHandlerServer.java
diff --git a/src/main/java/net/minecraft/core/world/save/conversion/ChunkConverter.java b/game/core/src/main/java/net/minecraft/core/world/save/conversion/ChunkConverter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/conversion/ChunkConverter.java
rename to game/core/src/main/java/net/minecraft/core/world/save/conversion/ChunkConverter.java
diff --git a/src/main/java/net/minecraft/core/world/save/conversion/SaveConverter19132To19133.java b/game/core/src/main/java/net/minecraft/core/world/save/conversion/SaveConverter19132To19133.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/conversion/SaveConverter19132To19133.java
rename to game/core/src/main/java/net/minecraft/core/world/save/conversion/SaveConverter19132To19133.java
diff --git a/src/main/java/net/minecraft/core/world/save/conversion/SaveConverter19133To19134.java b/game/core/src/main/java/net/minecraft/core/world/save/conversion/SaveConverter19133To19134.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/conversion/SaveConverter19133To19134.java
rename to game/core/src/main/java/net/minecraft/core/world/save/conversion/SaveConverter19133To19134.java
diff --git a/src/main/java/net/minecraft/core/world/save/conversion/SaveConverterLegacyTo19132.java b/game/core/src/main/java/net/minecraft/core/world/save/conversion/SaveConverterLegacyTo19132.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/conversion/SaveConverterLegacyTo19132.java
rename to game/core/src/main/java/net/minecraft/core/world/save/conversion/SaveConverterLegacyTo19132.java
diff --git a/src/main/java/net/minecraft/core/world/save/conversion/SaveConverterMCRegionBase.java b/game/core/src/main/java/net/minecraft/core/world/save/conversion/SaveConverterMCRegionBase.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/conversion/SaveConverterMCRegionBase.java
rename to game/core/src/main/java/net/minecraft/core/world/save/conversion/SaveConverterMCRegionBase.java
diff --git a/src/main/java/net/minecraft/core/world/save/legacy/ChunkFile.java b/game/core/src/main/java/net/minecraft/core/world/save/legacy/ChunkFile.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/legacy/ChunkFile.java
rename to game/core/src/main/java/net/minecraft/core/world/save/legacy/ChunkFile.java
diff --git a/src/main/java/net/minecraft/core/world/save/legacy/ChunkFilePattern.java b/game/core/src/main/java/net/minecraft/core/world/save/legacy/ChunkFilePattern.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/legacy/ChunkFilePattern.java
rename to game/core/src/main/java/net/minecraft/core/world/save/legacy/ChunkFilePattern.java
diff --git a/src/main/java/net/minecraft/core/world/save/legacy/ChunkFolderPattern.java b/game/core/src/main/java/net/minecraft/core/world/save/legacy/ChunkFolderPattern.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/legacy/ChunkFolderPattern.java
rename to game/core/src/main/java/net/minecraft/core/world/save/legacy/ChunkFolderPattern.java
diff --git a/src/main/java/net/minecraft/core/world/save/legacy/SaveFormatLegacy.java b/game/core/src/main/java/net/minecraft/core/world/save/legacy/SaveFormatLegacy.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/legacy/SaveFormatLegacy.java
rename to game/core/src/main/java/net/minecraft/core/world/save/legacy/SaveFormatLegacy.java
diff --git a/src/main/java/net/minecraft/core/world/save/mcregion/RegionFile.java b/game/core/src/main/java/net/minecraft/core/world/save/mcregion/RegionFile.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/mcregion/RegionFile.java
rename to game/core/src/main/java/net/minecraft/core/world/save/mcregion/RegionFile.java
diff --git a/src/main/java/net/minecraft/core/world/save/mcregion/RegionFileCache.java b/game/core/src/main/java/net/minecraft/core/world/save/mcregion/RegionFileCache.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/mcregion/RegionFileCache.java
rename to game/core/src/main/java/net/minecraft/core/world/save/mcregion/RegionFileCache.java
diff --git a/src/main/java/net/minecraft/core/world/save/mcregion/RegionFileChunkBuffer.java b/game/core/src/main/java/net/minecraft/core/world/save/mcregion/RegionFileChunkBuffer.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/mcregion/RegionFileChunkBuffer.java
rename to game/core/src/main/java/net/minecraft/core/world/save/mcregion/RegionFileChunkBuffer.java
diff --git a/src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19132.java b/game/core/src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19132.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19132.java
rename to game/core/src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19132.java
diff --git a/src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19133.java b/game/core/src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19133.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19133.java
rename to game/core/src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19133.java
diff --git a/src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19134.java b/game/core/src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19134.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19134.java
rename to game/core/src/main/java/net/minecraft/core/world/save/mcregion/SaveFormat19134.java
diff --git a/src/main/java/net/minecraft/core/world/saveddata/SavedData.java b/game/core/src/main/java/net/minecraft/core/world/saveddata/SavedData.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/saveddata/SavedData.java
rename to game/core/src/main/java/net/minecraft/core/world/saveddata/SavedData.java
diff --git a/src/main/java/net/minecraft/core/world/saveddata/SavedDataStorage.java b/game/core/src/main/java/net/minecraft/core/world/saveddata/SavedDataStorage.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/saveddata/SavedDataStorage.java
rename to game/core/src/main/java/net/minecraft/core/world/saveddata/SavedDataStorage.java
diff --git a/src/main/java/net/minecraft/core/world/saveddata/maps/ItemMapSavedData.java b/game/core/src/main/java/net/minecraft/core/world/saveddata/maps/ItemMapSavedData.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/saveddata/maps/ItemMapSavedData.java
rename to game/core/src/main/java/net/minecraft/core/world/saveddata/maps/ItemMapSavedData.java
diff --git a/src/main/java/net/minecraft/core/world/saveddata/maps/MapWaypoint.java b/game/core/src/main/java/net/minecraft/core/world/saveddata/maps/MapWaypoint.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/saveddata/maps/MapWaypoint.java
rename to game/core/src/main/java/net/minecraft/core/world/saveddata/maps/MapWaypoint.java
diff --git a/src/main/java/net/minecraft/core/world/season/Season.java b/game/core/src/main/java/net/minecraft/core/world/season/Season.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/season/Season.java
rename to game/core/src/main/java/net/minecraft/core/world/season/Season.java
diff --git a/src/main/java/net/minecraft/core/world/season/SeasonFall.java b/game/core/src/main/java/net/minecraft/core/world/season/SeasonFall.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/season/SeasonFall.java
rename to game/core/src/main/java/net/minecraft/core/world/season/SeasonFall.java
diff --git a/src/main/java/net/minecraft/core/world/season/SeasonManager.java b/game/core/src/main/java/net/minecraft/core/world/season/SeasonManager.java
similarity index 96%
rename from src/main/java/net/minecraft/core/world/season/SeasonManager.java
rename to game/core/src/main/java/net/minecraft/core/world/season/SeasonManager.java
index ad66f7d9d..1dbf08351 100644
--- a/src/main/java/net/minecraft/core/world/season/SeasonManager.java
+++ b/game/core/src/main/java/net/minecraft/core/world/season/SeasonManager.java
@@ -1,86 +1,86 @@
-package net.minecraft.core.world.season;
-
-import net.minecraft.core.util.helper.MathHelper;
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.config.season.SeasonConfig;
-import net.minecraft.core.world.config.season.SeasonConfigCycle;
-import net.minecraft.core.world.config.season.SeasonConfigSingle;
-
-import java.util.List;
-
-/**
- * Provides functions to model and manage a set of {@link Season}s that apply to a world.
- */
-public abstract class SeasonManager
-{
-    public static SeasonManager fromConfig(World world, SeasonConfig config)
-    {
-        if (config instanceof SeasonConfigSingle)
-        {
-            return new SeasonManagerSingle(world, (SeasonConfigSingle) config);
-        }
-        else if (config instanceof SeasonConfigCycle)
-        {
-            return new SeasonManagerCycle(world, (SeasonConfigCycle) config);
-        }
-        else
-        {
-            return null;
-        }
-    }
-
-    /**
-     * The current world this season manager applies to.
-     */
-    protected final World world;
-
-    public SeasonManager(World world)
-    {
-        this.world = world;
-    }
-
-    /**
-     * Fetches the set of seasons that apply to the current world.
-     */
-    public abstract List<Season> getSeasons();
-
-    /**
-     * Fetches the last season in the yearly cycle.
-     */
-    public abstract Season getPreviousSeason();
-
-    /**
-     * Fetches the current season in the yearly cycle.
-     */
-    public abstract Season getCurrentSeason();
-
-    /**
-     * Fetches the next season in the yearly cycle.
-     */
-    public abstract Season getNextSeason();
-
-    /**
-     * Fetches the progress through the current season.
-     * @return Progress from 0.0 to 1.0.
-     */
-    public abstract float getSeasonProgress();
-
-    /**
-     * Fetches the day in the current season, starting at 0.
-     */
-    public abstract int getDayInSeason();
-
-    /**
-     * Fetches a multiplier for a value such that it is at 0 at the start of the season, ramps up to 1 at the middle of
-     * the season, and ramps back down to 0 at the end of the season.
-     */
-    public float getSeasonModifier() {
-        float progress = getSeasonProgress();
-        // Adjust progress to range from cos(-pi) to cos(pi)
-        progress = MathHelper.cos((progress * 2 - 1) * MathHelper.PI);
-        // Adjust progress to range from 0 to 1
-        progress = (progress + 1) / 2;
-
-        return progress;
-    }
-}
+package net.minecraft.core.world.season;
+
+import net.minecraft.core.util.helper.MathHelper;
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.config.season.SeasonConfig;
+import net.minecraft.core.world.config.season.SeasonConfigCycle;
+import net.minecraft.core.world.config.season.SeasonConfigSingle;
+
+import java.util.List;
+
+/**
+ * Provides functions to model and manage a set of {@link Season}s that apply to a world.
+ */
+public abstract class SeasonManager
+{
+    public static SeasonManager fromConfig(World world, SeasonConfig config)
+    {
+        if (config instanceof SeasonConfigSingle)
+        {
+            return new SeasonManagerSingle(world, (SeasonConfigSingle) config);
+        }
+        else if (config instanceof SeasonConfigCycle)
+        {
+            return new SeasonManagerCycle(world, (SeasonConfigCycle) config);
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+    /**
+     * The current world this season manager applies to.
+     */
+    protected final World world;
+
+    public SeasonManager(World world)
+    {
+        this.world = world;
+    }
+
+    /**
+     * Fetches the set of seasons that apply to the current world.
+     */
+    public abstract List<Season> getSeasons();
+
+    /**
+     * Fetches the last season in the yearly cycle.
+     */
+    public abstract Season getPreviousSeason();
+
+    /**
+     * Fetches the current season in the yearly cycle.
+     */
+    public abstract Season getCurrentSeason();
+
+    /**
+     * Fetches the next season in the yearly cycle.
+     */
+    public abstract Season getNextSeason();
+
+    /**
+     * Fetches the progress through the current season.
+     * @return Progress from 0.0 to 1.0.
+     */
+    public abstract float getSeasonProgress();
+
+    /**
+     * Fetches the day in the current season, starting at 0.
+     */
+    public abstract int getDayInSeason();
+
+    /**
+     * Fetches a multiplier for a value such that it is at 0 at the start of the season, ramps up to 1 at the middle of
+     * the season, and ramps back down to 0 at the end of the season.
+     */
+    public float getSeasonModifier() {
+        float progress = getSeasonProgress();
+        // Adjust progress to range from cos(-pi) to cos(pi)
+        progress = MathHelper.cos((progress * 2 - 1) * MathHelper.PI);
+        // Adjust progress to range from 0 to 1
+        progress = (progress + 1) / 2;
+
+        return progress;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/season/SeasonManagerCycle.java b/game/core/src/main/java/net/minecraft/core/world/season/SeasonManagerCycle.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/season/SeasonManagerCycle.java
rename to game/core/src/main/java/net/minecraft/core/world/season/SeasonManagerCycle.java
diff --git a/src/main/java/net/minecraft/core/world/season/SeasonManagerSingle.java b/game/core/src/main/java/net/minecraft/core/world/season/SeasonManagerSingle.java
similarity index 95%
rename from src/main/java/net/minecraft/core/world/season/SeasonManagerSingle.java
rename to game/core/src/main/java/net/minecraft/core/world/season/SeasonManagerSingle.java
index 6eec18dc3..0d52245ad 100644
--- a/src/main/java/net/minecraft/core/world/season/SeasonManagerSingle.java
+++ b/game/core/src/main/java/net/minecraft/core/world/season/SeasonManagerSingle.java
@@ -1,59 +1,59 @@
-package net.minecraft.core.world.season;
-
-import net.minecraft.core.world.World;
-import net.minecraft.core.world.config.season.SeasonConfigSingle;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-public class SeasonManagerSingle
-    extends SeasonManager
-{
-    private final SeasonConfigSingle config;
-    private final List<Season> singleSeasonList = new ArrayList<>();
-
-    public SeasonManagerSingle(World world, SeasonConfigSingle config)
-    {
-        super(world);
-
-        this.config = config;
-        this.singleSeasonList.add(this.config.getSingleSeason());
-    }
-
-    @Override
-    public List<Season> getSeasons()
-    {
-        return Collections.unmodifiableList(singleSeasonList);
-    }
-
-    @Override
-    public Season getPreviousSeason()
-    {
-        return this.config.getSingleSeason();
-    }
-
-    @Override
-    public Season getCurrentSeason()
-    {
-        return this.config.getSingleSeason();
-    }
-
-    @Override
-    public Season getNextSeason()
-    {
-        return this.config.getSingleSeason();
-    }
-
-    @Override
-    public float getSeasonProgress()
-    {
-        return 0.5f;
-    }
-
-    @Override
-    public int getDayInSeason()
-    {
-        return 0;
-    }
-}
+package net.minecraft.core.world.season;
+
+import net.minecraft.core.world.World;
+import net.minecraft.core.world.config.season.SeasonConfigSingle;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class SeasonManagerSingle
+    extends SeasonManager
+{
+    private final SeasonConfigSingle config;
+    private final List<Season> singleSeasonList = new ArrayList<>();
+
+    public SeasonManagerSingle(World world, SeasonConfigSingle config)
+    {
+        super(world);
+
+        this.config = config;
+        this.singleSeasonList.add(this.config.getSingleSeason());
+    }
+
+    @Override
+    public List<Season> getSeasons()
+    {
+        return Collections.unmodifiableList(singleSeasonList);
+    }
+
+    @Override
+    public Season getPreviousSeason()
+    {
+        return this.config.getSingleSeason();
+    }
+
+    @Override
+    public Season getCurrentSeason()
+    {
+        return this.config.getSingleSeason();
+    }
+
+    @Override
+    public Season getNextSeason()
+    {
+        return this.config.getSingleSeason();
+    }
+
+    @Override
+    public float getSeasonProgress()
+    {
+        return 0.5f;
+    }
+
+    @Override
+    public int getDayInSeason()
+    {
+        return 0;
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/season/SeasonNull.java b/game/core/src/main/java/net/minecraft/core/world/season/SeasonNull.java
similarity index 93%
rename from src/main/java/net/minecraft/core/world/season/SeasonNull.java
rename to game/core/src/main/java/net/minecraft/core/world/season/SeasonNull.java
index 6d6418069..384e9de90 100644
--- a/src/main/java/net/minecraft/core/world/season/SeasonNull.java
+++ b/game/core/src/main/java/net/minecraft/core/world/season/SeasonNull.java
@@ -1,10 +1,10 @@
-package net.minecraft.core.world.season;
-
-public class SeasonNull
-    extends Season
-{
-    public SeasonNull(String id)
-    {
-        super(id);
-    }
-}
+package net.minecraft.core.world.season;
+
+public class SeasonNull
+    extends Season
+{
+    public SeasonNull(String id)
+    {
+        super(id);
+    }
+}
diff --git a/src/main/java/net/minecraft/core/world/season/SeasonOverworldHell.java b/game/core/src/main/java/net/minecraft/core/world/season/SeasonOverworldHell.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/season/SeasonOverworldHell.java
rename to game/core/src/main/java/net/minecraft/core/world/season/SeasonOverworldHell.java
diff --git a/src/main/java/net/minecraft/core/world/season/SeasonParadiseGold.java b/game/core/src/main/java/net/minecraft/core/world/season/SeasonParadiseGold.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/season/SeasonParadiseGold.java
rename to game/core/src/main/java/net/minecraft/core/world/season/SeasonParadiseGold.java
diff --git a/src/main/java/net/minecraft/core/world/season/SeasonParadiseSilver.java b/game/core/src/main/java/net/minecraft/core/world/season/SeasonParadiseSilver.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/season/SeasonParadiseSilver.java
rename to game/core/src/main/java/net/minecraft/core/world/season/SeasonParadiseSilver.java
diff --git a/src/main/java/net/minecraft/core/world/season/SeasonSpring.java b/game/core/src/main/java/net/minecraft/core/world/season/SeasonSpring.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/season/SeasonSpring.java
rename to game/core/src/main/java/net/minecraft/core/world/season/SeasonSpring.java
diff --git a/src/main/java/net/minecraft/core/world/season/SeasonSummer.java b/game/core/src/main/java/net/minecraft/core/world/season/SeasonSummer.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/season/SeasonSummer.java
rename to game/core/src/main/java/net/minecraft/core/world/season/SeasonSummer.java
diff --git a/src/main/java/net/minecraft/core/world/season/SeasonWinter.java b/game/core/src/main/java/net/minecraft/core/world/season/SeasonWinter.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/season/SeasonWinter.java
rename to game/core/src/main/java/net/minecraft/core/world/season/SeasonWinter.java
diff --git a/src/main/java/net/minecraft/core/world/season/Seasons.java b/game/core/src/main/java/net/minecraft/core/world/season/Seasons.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/season/Seasons.java
rename to game/core/src/main/java/net/minecraft/core/world/season/Seasons.java
diff --git a/src/main/java/net/minecraft/core/world/settings/WorldSetting.java b/game/core/src/main/java/net/minecraft/core/world/settings/WorldSetting.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/settings/WorldSetting.java
rename to game/core/src/main/java/net/minecraft/core/world/settings/WorldSetting.java
diff --git a/src/main/java/net/minecraft/core/world/settings/WorldSettingCollection.java b/game/core/src/main/java/net/minecraft/core/world/settings/WorldSettingCollection.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/settings/WorldSettingCollection.java
rename to game/core/src/main/java/net/minecraft/core/world/settings/WorldSettingCollection.java
diff --git a/src/main/java/net/minecraft/core/world/settings/WorldSettingEnum.java b/game/core/src/main/java/net/minecraft/core/world/settings/WorldSettingEnum.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/settings/WorldSettingEnum.java
rename to game/core/src/main/java/net/minecraft/core/world/settings/WorldSettingEnum.java
diff --git a/src/main/java/net/minecraft/core/world/settings/WorldSettingRange.java b/game/core/src/main/java/net/minecraft/core/world/settings/WorldSettingRange.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/settings/WorldSettingRange.java
rename to game/core/src/main/java/net/minecraft/core/world/settings/WorldSettingRange.java
diff --git a/src/main/java/net/minecraft/core/world/settings/WorldSettings.java b/game/core/src/main/java/net/minecraft/core/world/settings/WorldSettings.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/settings/WorldSettings.java
rename to game/core/src/main/java/net/minecraft/core/world/settings/WorldSettings.java
diff --git a/src/main/java/net/minecraft/core/world/type/WorldType.java b/game/core/src/main/java/net/minecraft/core/world/type/WorldType.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/WorldType.java
rename to game/core/src/main/java/net/minecraft/core/world/type/WorldType.java
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypeDebug.java b/game/core/src/main/java/net/minecraft/core/world/type/WorldTypeDebug.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/WorldTypeDebug.java
rename to game/core/src/main/java/net/minecraft/core/world/type/WorldTypeDebug.java
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypeEmpty.java b/game/core/src/main/java/net/minecraft/core/world/type/WorldTypeEmpty.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/WorldTypeEmpty.java
rename to game/core/src/main/java/net/minecraft/core/world/type/WorldTypeEmpty.java
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypeGroups.java b/game/core/src/main/java/net/minecraft/core/world/type/WorldTypeGroups.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/WorldTypeGroups.java
rename to game/core/src/main/java/net/minecraft/core/world/type/WorldTypeGroups.java
diff --git a/src/main/java/net/minecraft/core/world/type/WorldTypes.java b/game/core/src/main/java/net/minecraft/core/world/type/WorldTypes.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/WorldTypes.java
rename to game/core/src/main/java/net/minecraft/core/world/type/WorldTypes.java
diff --git a/src/main/java/net/minecraft/core/world/type/nether/WorldTypeNether.java b/game/core/src/main/java/net/minecraft/core/world/type/nether/WorldTypeNether.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/nether/WorldTypeNether.java
rename to game/core/src/main/java/net/minecraft/core/world/type/nether/WorldTypeNether.java
diff --git a/src/main/java/net/minecraft/core/world/type/nether/WorldTypeNetherSkyblock.java b/game/core/src/main/java/net/minecraft/core/world/type/nether/WorldTypeNetherSkyblock.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/nether/WorldTypeNetherSkyblock.java
rename to game/core/src/main/java/net/minecraft/core/world/type/nether/WorldTypeNetherSkyblock.java
diff --git a/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeFlat.java b/game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeFlat.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/overworld/WorldTypeFlat.java
rename to game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeFlat.java
diff --git a/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworld.java b/game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworld.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworld.java
rename to game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworld.java
diff --git a/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldClassic.java b/game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldClassic.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldClassic.java
rename to game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldClassic.java
diff --git a/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldFloating.java b/game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldFloating.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldFloating.java
rename to game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldFloating.java
diff --git a/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldHell.java b/game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldHell.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldHell.java
rename to game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldHell.java
diff --git a/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldIndev.java b/game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldIndev.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldIndev.java
rename to game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldIndev.java
diff --git a/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldInland.java b/game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldInland.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldInland.java
rename to game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldInland.java
diff --git a/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldParadise.java b/game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldParadise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldParadise.java
rename to game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldParadise.java
diff --git a/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldRetro.java b/game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldRetro.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldRetro.java
rename to game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldRetro.java
diff --git a/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldSkyblock.java b/game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldSkyblock.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldSkyblock.java
rename to game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldSkyblock.java
diff --git a/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldWoods.java b/game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldWoods.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldWoods.java
rename to game/core/src/main/java/net/minecraft/core/world/type/overworld/WorldTypeOverworldWoods.java
diff --git a/src/main/java/net/minecraft/core/world/type/paradise/WorldTypeParadise.java b/game/core/src/main/java/net/minecraft/core/world/type/paradise/WorldTypeParadise.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/type/paradise/WorldTypeParadise.java
rename to game/core/src/main/java/net/minecraft/core/world/type/paradise/WorldTypeParadise.java
diff --git a/src/main/java/net/minecraft/core/world/weather/Weather.java b/game/core/src/main/java/net/minecraft/core/world/weather/Weather.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/weather/Weather.java
rename to game/core/src/main/java/net/minecraft/core/world/weather/Weather.java
diff --git a/src/main/java/net/minecraft/core/world/weather/WeatherClear.java b/game/core/src/main/java/net/minecraft/core/world/weather/WeatherClear.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/weather/WeatherClear.java
rename to game/core/src/main/java/net/minecraft/core/world/weather/WeatherClear.java
diff --git a/src/main/java/net/minecraft/core/world/weather/WeatherManager.java b/game/core/src/main/java/net/minecraft/core/world/weather/WeatherManager.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/weather/WeatherManager.java
rename to game/core/src/main/java/net/minecraft/core/world/weather/WeatherManager.java
diff --git a/src/main/java/net/minecraft/core/world/weather/WeatherRain.java b/game/core/src/main/java/net/minecraft/core/world/weather/WeatherRain.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/weather/WeatherRain.java
rename to game/core/src/main/java/net/minecraft/core/world/weather/WeatherRain.java
diff --git a/src/main/java/net/minecraft/core/world/weather/WeatherSnow.java b/game/core/src/main/java/net/minecraft/core/world/weather/WeatherSnow.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/weather/WeatherSnow.java
rename to game/core/src/main/java/net/minecraft/core/world/weather/WeatherSnow.java
diff --git a/src/main/java/net/minecraft/core/world/weather/WeatherStorm.java b/game/core/src/main/java/net/minecraft/core/world/weather/WeatherStorm.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/weather/WeatherStorm.java
rename to game/core/src/main/java/net/minecraft/core/world/weather/WeatherStorm.java
diff --git a/src/main/java/net/minecraft/core/world/weather/Weathers.java b/game/core/src/main/java/net/minecraft/core/world/weather/Weathers.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/weather/Weathers.java
rename to game/core/src/main/java/net/minecraft/core/world/weather/Weathers.java
diff --git a/src/main/java/net/minecraft/core/world/wind/WindProvider.java b/game/core/src/main/java/net/minecraft/core/world/wind/WindProvider.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/wind/WindProvider.java
rename to game/core/src/main/java/net/minecraft/core/world/wind/WindProvider.java
diff --git a/src/main/java/net/minecraft/core/world/wind/WindProviderGeneric.java b/game/core/src/main/java/net/minecraft/core/world/wind/WindProviderGeneric.java
similarity index 100%
rename from src/main/java/net/minecraft/core/world/wind/WindProviderGeneric.java
rename to game/core/src/main/java/net/minecraft/core/world/wind/WindProviderGeneric.java
diff --git a/src/common/resources/achievement/map.txt b/game/core/src/main/resources/achievement/map.txt
similarity index 100%
rename from src/common/resources/achievement/map.txt
rename to game/core/src/main/resources/achievement/map.txt
diff --git a/src/common/resources/assets/minecraft/sounds/sounds.json b/game/core/src/main/resources/assets/minecraft/sounds/sounds.json
similarity index 100%
rename from src/common/resources/assets/minecraft/sounds/sounds.json
rename to game/core/src/main/resources/assets/minecraft/sounds/sounds.json
diff --git a/src/common/resources/font.txt b/game/core/src/main/resources/font.txt
similarity index 100%
rename from src/common/resources/font.txt
rename to game/core/src/main/resources/font.txt
diff --git a/src/common/resources/lang/en_US/biomes.lang b/game/core/src/main/resources/lang/en_US/biomes.lang
similarity index 100%
rename from src/common/resources/lang/en_US/biomes.lang
rename to game/core/src/main/resources/lang/en_US/biomes.lang
diff --git a/src/common/resources/lang/en_US/command.lang b/game/core/src/main/resources/lang/en_US/command.lang
similarity index 100%
rename from src/common/resources/lang/en_US/command.lang
rename to game/core/src/main/resources/lang/en_US/command.lang
diff --git a/src/common/resources/lang/en_US/gui.lang b/game/core/src/main/resources/lang/en_US/gui.lang
similarity index 100%
rename from src/common/resources/lang/en_US/gui.lang
rename to game/core/src/main/resources/lang/en_US/gui.lang
diff --git a/src/common/resources/lang/en_US/guidebook.lang b/game/core/src/main/resources/lang/en_US/guidebook.lang
similarity index 100%
rename from src/common/resources/lang/en_US/guidebook.lang
rename to game/core/src/main/resources/lang/en_US/guidebook.lang
diff --git a/src/common/resources/lang/en_US/info.lang b/game/core/src/main/resources/lang/en_US/info.lang
similarity index 100%
rename from src/common/resources/lang/en_US/info.lang
rename to game/core/src/main/resources/lang/en_US/info.lang
diff --git a/src/common/resources/lang/en_US/item.lang b/game/core/src/main/resources/lang/en_US/item.lang
similarity index 100%
rename from src/common/resources/lang/en_US/item.lang
rename to game/core/src/main/resources/lang/en_US/item.lang
diff --git a/src/common/resources/lang/en_US/options.lang b/game/core/src/main/resources/lang/en_US/options.lang
similarity index 100%
rename from src/common/resources/lang/en_US/options.lang
rename to game/core/src/main/resources/lang/en_US/options.lang
diff --git a/src/common/resources/lang/en_US/stats.lang b/game/core/src/main/resources/lang/en_US/stats.lang
similarity index 100%
rename from src/common/resources/lang/en_US/stats.lang
rename to game/core/src/main/resources/lang/en_US/stats.lang
diff --git a/src/common/resources/lang/en_US/strings.lang b/game/core/src/main/resources/lang/en_US/strings.lang
similarity index 100%
rename from src/common/resources/lang/en_US/strings.lang
rename to game/core/src/main/resources/lang/en_US/strings.lang
diff --git a/src/common/resources/lang/en_US/subtitles.lang b/game/core/src/main/resources/lang/en_US/subtitles.lang
similarity index 100%
rename from src/common/resources/lang/en_US/subtitles.lang
rename to game/core/src/main/resources/lang/en_US/subtitles.lang
diff --git a/src/common/resources/lang/en_US/tile.lang b/game/core/src/main/resources/lang/en_US/tile.lang
similarity index 100%
rename from src/common/resources/lang/en_US/tile.lang
rename to game/core/src/main/resources/lang/en_US/tile.lang
diff --git a/src/common/resources/lang/en_US/tips.txt b/game/core/src/main/resources/lang/en_US/tips.txt
similarity index 100%
rename from src/common/resources/lang/en_US/tips.txt
rename to game/core/src/main/resources/lang/en_US/tips.txt
diff --git a/src/common/resources/lang/en_US/worldnames.txt b/game/core/src/main/resources/lang/en_US/worldnames.txt
similarity index 100%
rename from src/common/resources/lang/en_US/worldnames.txt
rename to game/core/src/main/resources/lang/en_US/worldnames.txt
diff --git a/src/common/resources/log4j2.xml b/game/core/src/main/resources/log4j2.xml
similarity index 100%
rename from src/common/resources/log4j2.xml
rename to game/core/src/main/resources/log4j2.xml
diff --git a/game/server/.gitignore b/game/server/.gitignore
new file mode 100644
index 000000000..8219306d0
--- /dev/null
+++ b/game/server/.gitignore
@@ -0,0 +1,3 @@
+build
+mp
+logs
\ No newline at end of file
diff --git a/game/server/build.gradle.kts b/game/server/build.gradle.kts
new file mode 100644
index 000000000..c16e586bb
--- /dev/null
+++ b/game/server/build.gradle.kts
@@ -0,0 +1,74 @@
+import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
+import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer
+
+plugins {
+    id("java")
+    alias(libs.plugins.shadow)
+}
+
+group = providers.gradleProperty("bta.group").get()
+version = providers.gradleProperty("bta.version").get()
+
+val include: Configuration by configurations.creating
+
+repositories {
+    mavenCentral()
+    maven("https://libraries.minecraft.net/")
+}
+
+dependencies {
+    implementation(project(":game:core"))?.let { include(it) }
+    runtimeOnly(project(path = ":util:datagen", configuration = "output"))?.let { include(it) }
+
+    // <core dependencies>
+    implementation(libs.jetbrains.annotations)?.let { include(it) }
+    implementation(libs.gson)?.let { include(it) }
+    implementation(libs.brigadier)?.let { include(it) }
+    implementation(libs.bundles.log4j)?.let { include(it) }
+    // </core dependencies>
+}
+
+java {
+    sourceCompatibility = JavaVersion.VERSION_1_8
+    targetCompatibility = JavaVersion.VERSION_1_8
+}
+
+//region Tasks
+val run by tasks.registering(JavaExec::class) {
+    group = "bta"
+
+    File(workingDir, "mp").let {
+        it.mkdirs()
+        workingDir = it
+    }
+
+    mainClass.set("net.minecraft.server.MinecraftServer")
+    classpath += sourceSets["main"].runtimeClasspath
+    jvmArgs = listOf("-ea")
+}
+
+val buildJar by tasks.registering(ShadowJar::class) {
+    group = "bta"
+    configurations = listOf(include)
+
+    from(sourceSets.main.get().output.classesDirs)
+    from(sourceSets.main.get().resources)
+    exclude("fabric.mod.json")
+
+    archiveFileName = "bta-server.jar"
+    transform(Log4j2PluginsCacheFileTransformer::class.java)
+    manifest {
+        attributes["Main-Class"] = "net.minecraft.server.MinecraftServer"
+        attributes["Implementation-Version"] = version
+    }
+}
+
+tasks.withType(JavaCompile::class.java) {
+    options.isIncremental = false
+    options.encoding = "UTF-8"
+    if (JavaVersion.current() != JavaVersion.VERSION_1_8) {
+        options.compilerArgs.add("--release")
+        options.compilerArgs.add("8")
+    }
+}
+//endregion
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/game/server/src/main/java/net/minecraft/server/MinecraftServer.java
similarity index 99%
rename from src/main/java/net/minecraft/server/MinecraftServer.java
rename to game/server/src/main/java/net/minecraft/server/MinecraftServer.java
index 7a314abed..f2359f95d 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/game/server/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -53,7 +53,7 @@ import net.minecraft.core.net.command.commands.CommandWeather;
 import net.minecraft.core.net.command.util.CommandHelper;
 import net.minecraft.server.entity.player.PlayerServer;
 import net.minecraft.server.net.command.ConsoleCommandSource;
-import net.minecraft.core.net.packet.SetTimePacket;
+import net.minecraft.core.net.packet.PacketSetTime;
 import net.minecraft.core.player.gamemode.Gamemode;
 import net.minecraft.core.sound.SoundTypes;
 import net.minecraft.core.util.helper.RSA;
@@ -750,7 +750,7 @@ public class MinecraftServer
             }
             if (deathTime % 20 == 0)
             {
-                playerList.sendPacketToAllPlayersInDimension(new SetTimePacket(worldServer.getWorldTime()), worldServer.dimension.id);
+                playerList.sendPacketToAllPlayersInDimension(new PacketSetTime(worldServer.getWorldTime()), worldServer.dimension.id);
             }
             try {
                 worldServer.tick();
diff --git a/src/main/java/net/minecraft/server/entity/EntityTrackerEntryImpl.java b/game/server/src/main/java/net/minecraft/server/entity/EntityTrackerEntryImpl.java
similarity index 84%
rename from src/main/java/net/minecraft/server/entity/EntityTrackerEntryImpl.java
rename to game/server/src/main/java/net/minecraft/server/entity/EntityTrackerEntryImpl.java
index 476ad3ab7..026f4632c 100644
--- a/src/main/java/net/minecraft/server/entity/EntityTrackerEntryImpl.java
+++ b/game/server/src/main/java/net/minecraft/server/entity/EntityTrackerEntryImpl.java
@@ -6,16 +6,16 @@ import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.net.entity.EntityTrackerEntry;
 import net.minecraft.core.net.entity.NetEntityHandler;
-import net.minecraft.core.net.packet.MoveEntityPacket;
+import net.minecraft.core.net.packet.PacketMoveEntity;
 import net.minecraft.core.net.packet.Packet;
-import net.minecraft.core.net.packet.SleepPacket;
-import net.minecraft.core.net.packet.SetEntityMotionPacket;
-import net.minecraft.core.net.packet.RemoveEntityPacket;
-import net.minecraft.core.net.packet.TeleportEntityPacket;
-import net.minecraft.core.net.packet.EntityNicknamePacket;
-import net.minecraft.core.net.packet.SetEntityDataPacket;
-import net.minecraft.core.net.packet.EntityTagDataPacket;
-import net.minecraft.core.net.packet.SetEquippedItemPacket;
+import net.minecraft.core.net.packet.PacketSleep;
+import net.minecraft.core.net.packet.PacketSetEntityMotion;
+import net.minecraft.core.net.packet.PacketRemoveEntity;
+import net.minecraft.core.net.packet.PacketTeleportEntity;
+import net.minecraft.core.net.packet.PacketEntityNickname;
+import net.minecraft.core.net.packet.PacketSetEntityData;
+import net.minecraft.core.net.packet.PacketEntityTagData;
+import net.minecraft.core.net.packet.PacketSetEquippedItem;
 import net.minecraft.core.util.helper.MathHelper;
 import net.minecraft.core.world.data.SynchedEntityData;
 import net.minecraft.server.entity.player.PlayerServer;
@@ -102,13 +102,13 @@ public class EntityTrackerEntryImpl implements EntityTrackerEntry {
                 trackedEntity.x = (double)entityX / 32D;
                 trackedEntity.y = (double)entityY / 32D;
                 trackedEntity.z = (double)entityZ / 32D;
-                packet = new TeleportEntityPacket(trackedEntity.id, entityX, entityY, entityZ, (byte)entityYaw, (byte)entityPitch);
+                packet = new PacketTeleportEntity(trackedEntity.id, entityX, entityY, entityZ, (byte)entityYaw, (byte)entityPitch);
             } else if(hasMoved && hasLooked) {
-                packet = new MoveEntityPacket.PosRot(trackedEntity.id, (byte)dx, (byte)dy, (byte)dz, (byte)entityYaw, (byte)entityPitch);
+                packet = new PacketMoveEntity.PosRot(trackedEntity.id, (byte)dx, (byte)dy, (byte)dz, (byte)entityYaw, (byte)entityPitch);
             } else if(hasMoved) {
-                packet = new MoveEntityPacket.Pos(trackedEntity.id, (byte)dx, (byte)dy, (byte)dz);
+                packet = new PacketMoveEntity.Pos(trackedEntity.id, (byte)dx, (byte)dy, (byte)dz);
             } else if(hasLooked) {
-                packet = new MoveEntityPacket.Rot(trackedEntity.id, (byte)entityYaw, (byte)entityPitch);
+                packet = new PacketMoveEntity.Rot(trackedEntity.id, (byte)entityYaw, (byte)entityPitch);
             }
             if(shouldSendMotionUpdates) {
                 double d = trackedEntity.xd - lastTrackedEntityMotionX;
@@ -120,7 +120,7 @@ public class EntityTrackerEntryImpl implements EntityTrackerEntry {
                     lastTrackedEntityMotionX = trackedEntity.xd;
                     lastTrackedEntityMotionY = trackedEntity.yd;
                     lastTrackedEntityMotionZ = trackedEntity.zd;
-                    sendPacketToTrackedPlayers(new SetEntityMotionPacket(trackedEntity.id, lastTrackedEntityMotionX, lastTrackedEntityMotionY, lastTrackedEntityMotionZ));
+                    sendPacketToTrackedPlayers(new PacketSetEntityMotion(trackedEntity.id, lastTrackedEntityMotionX, lastTrackedEntityMotionY, lastTrackedEntityMotionZ));
                 }
             }
             if(packet != null) {
@@ -128,7 +128,7 @@ public class EntityTrackerEntryImpl implements EntityTrackerEntry {
             }
             SynchedEntityData synchedEntityData = trackedEntity.getEntityData();
             if(synchedEntityData.isDirty()) {
-                sendPacketToTrackedPlayersAndTrackedEntity(new SetEntityDataPacket(trackedEntity.id, synchedEntityData));
+                sendPacketToTrackedPlayersAndTrackedEntity(new PacketSetEntityData(trackedEntity.id, synchedEntityData));
             }
             if(hasMoved) {
                 encodedPosX = entityX;
@@ -141,11 +141,11 @@ public class EntityTrackerEntryImpl implements EntityTrackerEntry {
             }
         }
         if(trackedEntity.hurtMarked) {
-            sendPacketToTrackedPlayersAndTrackedEntity(new SetEntityMotionPacket(trackedEntity));
+            sendPacketToTrackedPlayersAndTrackedEntity(new PacketSetEntityMotion(trackedEntity));
             trackedEntity.hurtMarked = false;
         }
         if (trackedEntity.hadNicknameSet) {
-            sendPacketToTrackedPlayersAndTrackedEntity(new EntityNicknamePacket(trackedEntity.id, ((Mob) trackedEntity).nickname, ((Mob) trackedEntity).chatColor));
+            sendPacketToTrackedPlayersAndTrackedEntity(new PacketEntityNickname(trackedEntity.id, ((Mob) trackedEntity).nickname, ((Mob) trackedEntity).chatColor));
             trackedEntity.hadNicknameSet = false;
         }
     }
@@ -164,7 +164,7 @@ public class EntityTrackerEntryImpl implements EntityTrackerEntry {
     }
 
     public void sendDestroyEntityPacketToTrackedPlayers() {
-        sendPacketToTrackedPlayers(new RemoveEntityPacket(trackedEntity.id));
+        sendPacketToTrackedPlayers(new PacketRemoveEntity(trackedEntity.id));
     }
 
     public void removeFromTrackedPlayers(Player player) {
@@ -184,28 +184,28 @@ public class EntityTrackerEntryImpl implements EntityTrackerEntry {
                 trackedPlayers.add(playerServer);
                 playerServer.playerNetServerHandler.sendPacket(NetEntityHandler.getSpawnPacket(this));
                 if (trackedEntity.sendAdditionalData) {
-                    playerServer.playerNetServerHandler.sendPacket(new EntityTagDataPacket(trackedEntity));
+                    playerServer.playerNetServerHandler.sendPacket(new PacketEntityTagData(trackedEntity));
                 }
                 if(shouldSendMotionUpdates) {
-                    playerServer.playerNetServerHandler.sendPacket(new SetEntityMotionPacket(trackedEntity.id, trackedEntity.xd, trackedEntity.yd, trackedEntity.zd));
+                    playerServer.playerNetServerHandler.sendPacket(new PacketSetEntityMotion(trackedEntity.id, trackedEntity.xd, trackedEntity.yd, trackedEntity.zd));
                 }
                 ItemStack[] aitemstack = trackedEntity.getInventory();
                 if(aitemstack != null) {
                     for(int i = 0; i < aitemstack.length; i++) {
-                        playerServer.playerNetServerHandler.sendPacket(new SetEquippedItemPacket(trackedEntity.id, i, aitemstack[i]));
+                        playerServer.playerNetServerHandler.sendPacket(new PacketSetEquippedItem(trackedEntity.id, i, aitemstack[i]));
                     }
                 }
                 if(trackedEntity instanceof PlayerServer) {
                     PlayerServer trackedPlayerServer = (PlayerServer) trackedEntity;
                     if(trackedPlayerServer.isPlayerSleeping())
                     {
-                        playerServer.playerNetServerHandler.sendPacket(new SleepPacket(trackedEntity, 0, MathHelper.floor(trackedEntity.x), MathHelper.floor(trackedEntity.y), MathHelper.floor(trackedEntity.z)));
+                        playerServer.playerNetServerHandler.sendPacket(new PacketSleep(trackedEntity, 0, MathHelper.floor(trackedEntity.x), MathHelper.floor(trackedEntity.y), MathHelper.floor(trackedEntity.z)));
                     }
                 }
             }
         } else if(trackedPlayers.contains(playerServer)) {
             trackedPlayers.remove(playerServer);
-            playerServer.playerNetServerHandler.sendPacket(new RemoveEntityPacket(trackedEntity.id));
+            playerServer.playerNetServerHandler.sendPacket(new PacketRemoveEntity(trackedEntity.id));
         }
     }
 
@@ -219,7 +219,7 @@ public class EntityTrackerEntryImpl implements EntityTrackerEntry {
             PlayerServer playerServer = (PlayerServer) player;
             if(trackedPlayers.contains(playerServer)) {
                 trackedPlayers.remove(playerServer);
-                playerServer.playerNetServerHandler.sendPacket(new RemoveEntityPacket(trackedEntity.id));
+                playerServer.playerNetServerHandler.sendPacket(new PacketRemoveEntity(trackedEntity.id));
             }
         }
     }
diff --git a/src/main/java/net/minecraft/server/entity/EntityTrackerImpl.java b/game/server/src/main/java/net/minecraft/server/entity/EntityTrackerImpl.java
similarity index 100%
rename from src/main/java/net/minecraft/server/entity/EntityTrackerImpl.java
rename to game/server/src/main/java/net/minecraft/server/entity/EntityTrackerImpl.java
diff --git a/src/main/java/net/minecraft/server/entity/ServerSkinVariantList.java b/game/server/src/main/java/net/minecraft/server/entity/ServerSkinVariantList.java
similarity index 75%
rename from src/main/java/net/minecraft/server/entity/ServerSkinVariantList.java
rename to game/server/src/main/java/net/minecraft/server/entity/ServerSkinVariantList.java
index 4c79c58aa..cd1812c8b 100644
--- a/src/main/java/net/minecraft/server/entity/ServerSkinVariantList.java
+++ b/game/server/src/main/java/net/minecraft/server/entity/ServerSkinVariantList.java
@@ -9,4 +9,9 @@ public class ServerSkinVariantList extends SkinVariantList {
     public @NotNull String getSkinReference(@Nullable String variantJsonPath, @NotNull String defaultKey, int skinIndex) {
         return "";
     }
+
+    @Override
+    public int nextSkinVariant(@Nullable String variantJsonPath, int skinIndex) {
+        return skinIndex;
+    }
 }
diff --git a/src/main/java/net/minecraft/server/entity/player/PlayerServer.java b/game/server/src/main/java/net/minecraft/server/entity/player/PlayerServer.java
similarity index 87%
rename from src/main/java/net/minecraft/server/entity/player/PlayerServer.java
rename to game/server/src/main/java/net/minecraft/server/entity/player/PlayerServer.java
index 9d69846bb..85cd53ee9 100644
--- a/src/main/java/net/minecraft/server/entity/player/PlayerServer.java
+++ b/game/server/src/main/java/net/minecraft/server/entity/player/PlayerServer.java
@@ -3,6 +3,7 @@ package net.minecraft.server.entity.player;
 import net.minecraft.core.achievement.stat.Stat;
 import net.minecraft.core.block.Block;
 import net.minecraft.core.block.BlockPortal;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.*;
 import net.minecraft.core.crafting.ContainerListener;
 import net.minecraft.core.entity.*;
@@ -95,7 +96,7 @@ public class PlayerServer extends Player implements ContainerListener {
     @Override
 	public void setGamemode(Gamemode gamemode)
     {
-        mcServer.playerList.sendPacketToAllPlayers(new PlayerGamemodePacket(this.id, gamemode.getId()));
+        mcServer.playerList.sendPacketToAllPlayers(new PacketPlayerGamemode(this.id, gamemode.getId()));
         this.gamemode = gamemode;
 
         MenuInventory newContainer = gamemode.getContainer(this.inventory, !world.isClientSide);
@@ -199,7 +200,7 @@ public class PlayerServer extends Player implements ContainerListener {
             ItemStack itemstack = getEquipmentInSlot(i);
             if (itemstack != playerInventory[i])
             {
-                mcServer.getEntityTracker(dimension).sendPacketToTrackedPlayers(this, new SetEquippedItemPacket(id, i, itemstack));
+                mcServer.getEntityTracker(dimension).sendPacketToTrackedPlayers(this, new PacketSetEquippedItem(id, i, itemstack));
                 playerInventory[i] = itemstack;
             }
         }
@@ -301,7 +302,7 @@ public class PlayerServer extends Player implements ContainerListener {
 
         if (inPortal)
         {
-            int targetDim = ((BlockPortal) Block.blocksList[portalID]).targetDimension;
+            int targetDim = ((BlockPortal) Blocks.blocksList[portalID]).targetDimension;
             boolean netherAllowed = mcServer.propertyManager.getBooleanProperty("allow-nether", true);
             boolean paradiseAllowed = mcServer.propertyManager.getBooleanProperty("allow-paradise", false);
             if ((netherAllowed && targetDim == Dimension.NETHER.id) || (paradiseAllowed && targetDim == Dimension.PARADISE.id) || (targetDim != Dimension.NETHER.id && targetDim != Dimension.PARADISE.id))
@@ -351,7 +352,7 @@ public class PlayerServer extends Player implements ContainerListener {
         }
         if (getHealth() != lastHealth)
         {
-            playerNetServerHandler.sendPacket(new SetHealthPacket(getHealth()));
+            playerNetServerHandler.sendPacket(new PacketSetHealth(getHealth()));
             lastHealth = getHealth();
         }
         if (score != lastScore)
@@ -372,7 +373,7 @@ public class PlayerServer extends Player implements ContainerListener {
                 {
                     WorldServer worldserver = mcServer.getDimensionWorld(dimension);
                     loadedChunks.remove(chunkCoord);
-                    playerNetServerHandler.sendPacket(new BlockRegionUpdatePacket(chunkCoord.x * Chunk.CHUNK_SIZE_X, 0, chunkCoord.z * Chunk.CHUNK_SIZE_Z, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, worldserver));
+                    playerNetServerHandler.sendPacket(new PacketBlockRegionUpdate(chunkCoord.x * Chunk.CHUNK_SIZE_X, 0, chunkCoord.z * Chunk.CHUNK_SIZE_Z, Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y, Chunk.CHUNK_SIZE_Z, worldserver));
                     List list = worldserver.getBlockEntitiesWithinBounds(chunkCoord.x * Chunk.CHUNK_SIZE_X, 0, chunkCoord.z * Chunk.CHUNK_SIZE_Z, chunkCoord.x * Chunk.CHUNK_SIZE_X + Chunk.CHUNK_SIZE_X, Chunk.CHUNK_SECTIONS * ChunkSection.SECTION_SIZE_Y, chunkCoord.z * Chunk.CHUNK_SIZE_Z + Chunk.CHUNK_SIZE_Z);
                     for (int j = 0; j < list.size(); j++)
                     {
@@ -413,11 +414,11 @@ public class PlayerServer extends Player implements ContainerListener {
             EntityTrackerImpl entitytracker = mcServer.getEntityTracker(dimension);
             if (entity instanceof EntityItem)
             {
-                entitytracker.sendPacketToTrackedPlayers(entity, new TakeItemEntityPacket(entity.id, id));
+                entitytracker.sendPacketToTrackedPlayers(entity, new PacketTakeItemEntity(entity.id, id));
             }
             if (entity instanceof ProjectileArrow)
             {
-                entitytracker.sendPacketToTrackedPlayers(entity, new TakeItemEntityPacket(entity.id, id));
+                entitytracker.sendPacketToTrackedPlayers(entity, new PacketTakeItemEntity(entity.id, id));
             }
         }
         super.onItemPickup(entity, item);
@@ -432,7 +433,7 @@ public class PlayerServer extends Player implements ContainerListener {
             swingProgressInt = -1;
             isSwinging = true;
             EntityTrackerImpl entitytracker = mcServer.getEntityTracker(dimension);
-            entitytracker.sendPacketToTrackedPlayers(this, new AnimatePacket(this, 1));
+            entitytracker.sendPacketToTrackedPlayers(this, new PacketAnimate(this, 1));
         }
     }
 
@@ -447,7 +448,7 @@ public class PlayerServer extends Player implements ContainerListener {
         if (status == EnumSleepStatus.OK)
         {
             EntityTrackerImpl entitytracker = mcServer.getEntityTracker(dimension);
-            SleepPacket sleepPacket = new SleepPacket(this, 0, x, y, z);
+            PacketSleep sleepPacket = new PacketSleep(this, 0, x, y, z);
             entitytracker.sendPacketToTrackedPlayers(this, sleepPacket);
             playerNetServerHandler.teleportAndRotate(this.x, this.y, this.z, yRot, xRot);
             playerNetServerHandler.sendPacket(sleepPacket);
@@ -461,7 +462,7 @@ public class PlayerServer extends Player implements ContainerListener {
         if (isPlayerSleeping())
         {
             EntityTrackerImpl entitytracker = mcServer.getEntityTracker(dimension);
-            entitytracker.sendPacketToTrackedPlayersAndTrackedEntity(this, new AnimatePacket(this, 3));
+            entitytracker.sendPacketToTrackedPlayersAndTrackedEntity(this, new PacketAnimate(this, 3));
             super.wakeUpPlayer(flag, flag1);
         }
         if (playerNetServerHandler != null)
@@ -481,10 +482,10 @@ public class PlayerServer extends Player implements ContainerListener {
         }
         super.startRiding(vehicle);
         if (vehicle instanceof Entity) {
-            playerNetServerHandler.sendPacket(new SetRidingPacket(this, (Entity) this.vehicle));
+            playerNetServerHandler.sendPacket(new PacketSetRiding(this, (Entity) this.vehicle));
         } else if (vehicle instanceof TileEntity) {
             TileEntity tileEntity = (TileEntity) vehicle;
-            playerNetServerHandler.sendPacket(new SetRidingPacket(this, tileEntity.x, tileEntity.y, tileEntity.z));
+            playerNetServerHandler.sendPacket(new PacketSetRiding(this, tileEntity.x, tileEntity.y, tileEntity.z));
         }
         playerNetServerHandler.teleport(x, y, z);
     }
@@ -508,7 +509,7 @@ public class PlayerServer extends Player implements ContainerListener {
 	public void displayWorkbenchScreen(int x, int y, int z)
     {
         getNextWindowId();
-        playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_CRAFTING, "Crafting", 9));
+        playerNetServerHandler.sendPacket(new PacketContainerOpen(currentWindowId, PacketContainerOpen.TYPE_CRAFTING, "Crafting", 9));
         craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new MenuCrafting(inventory, world, x, y, z);
         craftingInventory.containerId = currentWindowId;
@@ -518,7 +519,7 @@ public class PlayerServer extends Player implements ContainerListener {
     @Override
     public void displayPaintingPickerScreen()
     {
-        playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_PAINTING, "Painting", 0));
+        playerNetServerHandler.sendPacket(new PacketContainerOpen(currentWindowId, PacketContainerOpen.TYPE_PAINTING, "Painting", 0));
     }
 
     @Override
@@ -526,7 +527,7 @@ public class PlayerServer extends Player implements ContainerListener {
     {
         getNextWindowId();
         PacketHandlerServer.LOGGER.info("{} interacted with chest at ({}, {}, {})", username, x, y, z);
-        playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_GENERIC_CONTAINER, container.getName(), container.getContainerSize()));
+        playerNetServerHandler.sendPacket(new PacketContainerOpen(currentWindowId, PacketContainerOpen.TYPE_GENERIC_CONTAINER, container.getName(), container.getContainerSize()));
         craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new MenuContainer(inventory, container);
         craftingInventory.containerId = currentWindowId;
@@ -539,11 +540,11 @@ public class PlayerServer extends Player implements ContainerListener {
         getNextWindowId();
         if (blockEntity instanceof TileEntityFurnaceBlastFurnace)
         {
-            playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_BLAST_FURNACE, blockEntity.getName(), blockEntity.getContainerSize()));
+            playerNetServerHandler.sendPacket(new PacketContainerOpen(currentWindowId, PacketContainerOpen.TYPE_BLAST_FURNACE, blockEntity.getName(), blockEntity.getContainerSize()));
         }
         else
         {
-            playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_FURNACE, blockEntity.getName(), blockEntity.getContainerSize()));
+            playerNetServerHandler.sendPacket(new PacketContainerOpen(currentWindowId, PacketContainerOpen.TYPE_FURNACE, blockEntity.getName(), blockEntity.getContainerSize()));
         }
         craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new MenuFurnace(inventory, blockEntity);
@@ -555,7 +556,7 @@ public class PlayerServer extends Player implements ContainerListener {
 	public void displayDispenserScreen(TileEntityDispenser blockEntity)
     {
         getNextWindowId();
-        playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_DISPENSER, blockEntity.getName(), blockEntity.getContainerSize()));
+        playerNetServerHandler.sendPacket(new PacketContainerOpen(currentWindowId, PacketContainerOpen.TYPE_DISPENSER, blockEntity.getName(), blockEntity.getContainerSize()));
         craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new MenuTrap(inventory, blockEntity);
         craftingInventory.containerId = currentWindowId;
@@ -566,7 +567,7 @@ public class PlayerServer extends Player implements ContainerListener {
     public void displayActivatorScreen(TileEntityActivator blockEntity)
     {
         getNextWindowId();
-        playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_ACTIVATOR, blockEntity.getName(), blockEntity.getContainerSize()));
+        playerNetServerHandler.sendPacket(new PacketContainerOpen(currentWindowId, PacketContainerOpen.TYPE_ACTIVATOR, blockEntity.getName(), blockEntity.getContainerSize()));
         craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new MenuActivator(inventory, blockEntity);
         craftingInventory.containerId = currentWindowId;
@@ -578,7 +579,7 @@ public class PlayerServer extends Player implements ContainerListener {
 	public void displayTrommelScreen(TileEntityTrommel blockEntity)
     {
         getNextWindowId();
-        playerNetServerHandler.sendPacket(new ContainerOpenPacket(currentWindowId, ContainerOpenPacket.TYPE_TROMMEL, blockEntity.getName(), blockEntity.getContainerSize()));
+        playerNetServerHandler.sendPacket(new PacketContainerOpen(currentWindowId, PacketContainerOpen.TYPE_TROMMEL, blockEntity.getName(), blockEntity.getContainerSize()));
         craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new MenuTrommel(inventory, blockEntity);
         craftingInventory.containerId = currentWindowId;
@@ -589,7 +590,7 @@ public class PlayerServer extends Player implements ContainerListener {
     public void displayFlagEditorScreen(TileEntityFlag blockEntity)
     {
         getNextWindowId();
-        playerNetServerHandler.sendPacket(new FlagOpenPacket(currentWindowId, blockEntity.x, blockEntity.y, blockEntity.z));
+        playerNetServerHandler.sendPacket(new PacketFlagOpen(currentWindowId, blockEntity.x, blockEntity.y, blockEntity.z));
         craftingInventory.onCraftGuiClosed(this);
         craftingInventory = new MenuFlag(inventory, blockEntity);
         craftingInventory.containerId = currentWindowId;
@@ -621,7 +622,7 @@ public class PlayerServer extends Player implements ContainerListener {
         {
             if (playerNetServerHandler != null)
             {
-                playerNetServerHandler.sendPacket(new ContainerSetSlotPacket(container.containerId, i, itemstack));
+                playerNetServerHandler.sendPacket(new PacketContainerSetSlot(container.containerId, i, itemstack));
             }
             return;
         }
@@ -639,7 +640,7 @@ public class PlayerServer extends Player implements ContainerListener {
         //playernetserverhandler returning false?
         if (playerNetServerHandler != null)
         {
-            playerNetServerHandler.sendPacket(new ContainerSetContentPacket(container.containerId, list));
+            playerNetServerHandler.sendPacket(new PacketContainerSetContent(container.containerId, list));
 //            playerNetServerHandler.sendPacket(new ContainerSetSlotPacket(-1, -1, inventory.getHeldItemStack()));
         }
     }
@@ -647,7 +648,7 @@ public class PlayerServer extends Player implements ContainerListener {
     @Override
 	public void updateCraftingInventoryInfo(MenuAbstract container, int id, int value)
     {
-        playerNetServerHandler.sendPacket(new ContainerSetDataPacket(container.containerId, id, value));
+        playerNetServerHandler.sendPacket(new PacketContainerSetData(container.containerId, id, value));
     }
 
     @Override
@@ -657,7 +658,7 @@ public class PlayerServer extends Player implements ContainerListener {
 
     public void usePersonalCraftingInventory()
     {
-        playerNetServerHandler.sendPacket(new ContainerClosePacket(craftingInventory.containerId));
+        playerNetServerHandler.sendPacket(new PacketContainerClose(craftingInventory.containerId));
         closeCraftingGui();
     }
 
@@ -669,7 +670,7 @@ public class PlayerServer extends Player implements ContainerListener {
         }
         else
         {
-            playerNetServerHandler.sendPacket(new ContainerSetSlotPacket(-1, -1, inventory.getHeldItemStack()));
+            playerNetServerHandler.sendPacket(new PacketContainerSetSlot(-1, -1, inventory.getHeldItemStack()));
             return;
         }
     }
@@ -700,11 +701,11 @@ public class PlayerServer extends Player implements ContainerListener {
         if (!stat.clientside)
         {
             for (; i > 100; i -= 100) { // send value change in groups of 100
-                playerNetServerHandler.sendPacket(new StatisticPacket(stat.statId, 100));
+                playerNetServerHandler.sendPacket(new PacketStatistic(stat.statId, 100));
             }
 
             if (i > 0) {
-                playerNetServerHandler.sendPacket(new StatisticPacket(stat.statId, i));
+                playerNetServerHandler.sendPacket(new PacketStatistic(stat.statId, i));
             }
         }
     }
@@ -734,33 +735,33 @@ public class PlayerServer extends Player implements ContainerListener {
     {
         I18n stringtranslate = I18n.getInstance();
         String s1 = stringtranslate.translateKey(s);
-        playerNetServerHandler.sendPacket(new ChatPacket(s1));
+        playerNetServerHandler.sendPacket(new PacketChat(s1));
     }
     
     @Override
     public void setCurrentItem(int i) {
     	super.setCurrentItem(i);
-    	playerNetServerHandler.sendPacket(new SetCarriedItemPacket(i));
+    	playerNetServerHandler.sendPacket(new PacketSetCarriedItem(i));
     }
 
     @Override
     public void setHeldObject(@Nullable ICarriable heldObject) {
         super.setHeldObject(heldObject);
-        mcServer.getEntityTracker(dimension).sendPacketToTrackedPlayers(this, new SetHeldObjectPacket(id, heldObject));
+        mcServer.getEntityTracker(dimension).sendPacketToTrackedPlayers(this, new PacketSetHeldObject(id, heldObject));
 
         // Ensure slot is definitely synced
-        playerNetServerHandler.sendPacket(new SetHotbarOffsetPacket(inventory.getHotbarOffset()));
-        playerNetServerHandler.sendPacket(new SetCarriedItemPacket(inventory.getCurrentItemIndex()));
+        playerNetServerHandler.sendPacket(new PacketSetHotbarOffset(inventory.getHotbarOffset()));
+        playerNetServerHandler.sendPacket(new PacketSetCarriedItem(inventory.getCurrentItemIndex()));
     }
 
     @Override
 	public void sendMessage(String message) {
-		playerNetServerHandler.sendPacket(new ChatPacket(message, 0, AES.keyChain.get(username)));
+		playerNetServerHandler.sendPacket(new PacketChat(message, 0, AES.keyChain.get(username)));
 	}
 
 	@Override
 	public void sendStatusMessage(String message) {
-		playerNetServerHandler.sendPacket(new ChatPacket(message, 1, AES.keyChain.get(username)));
+		playerNetServerHandler.sendPacket(new PacketChat(message, 1, AES.keyChain.get(username)));
 	}
 
     public void teleport(double x, double y, double z, float xr, float yr) {
diff --git a/src/main/java/net/minecraft/server/gui/GuiStatsComponent.java b/game/server/src/main/java/net/minecraft/server/gui/GuiStatsComponent.java
similarity index 100%
rename from src/main/java/net/minecraft/server/gui/GuiStatsComponent.java
rename to game/server/src/main/java/net/minecraft/server/gui/GuiStatsComponent.java
diff --git a/src/main/java/net/minecraft/server/gui/ServerGui.java b/game/server/src/main/java/net/minecraft/server/gui/ServerGui.java
similarity index 100%
rename from src/main/java/net/minecraft/server/gui/ServerGui.java
rename to game/server/src/main/java/net/minecraft/server/gui/ServerGui.java
diff --git a/src/main/java/net/minecraft/server/net/NetworkListenThread.java b/game/server/src/main/java/net/minecraft/server/net/NetworkListenThread.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/NetworkListenThread.java
rename to game/server/src/main/java/net/minecraft/server/net/NetworkListenThread.java
diff --git a/src/main/java/net/minecraft/server/net/PlayerHash.java b/game/server/src/main/java/net/minecraft/server/net/PlayerHash.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/PlayerHash.java
rename to game/server/src/main/java/net/minecraft/server/net/PlayerHash.java
diff --git a/src/main/java/net/minecraft/server/net/PlayerHashEntry.java b/game/server/src/main/java/net/minecraft/server/net/PlayerHashEntry.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/PlayerHashEntry.java
rename to game/server/src/main/java/net/minecraft/server/net/PlayerHashEntry.java
diff --git a/src/main/java/net/minecraft/server/net/PlayerList.java b/game/server/src/main/java/net/minecraft/server/net/PlayerList.java
similarity index 95%
rename from src/main/java/net/minecraft/server/net/PlayerList.java
rename to game/server/src/main/java/net/minecraft/server/net/PlayerList.java
index 8956e75ba..84431d4fe 100644
--- a/src/main/java/net/minecraft/server/net/PlayerList.java
+++ b/game/server/src/main/java/net/minecraft/server/net/PlayerList.java
@@ -229,15 +229,15 @@ public class PlayerList
             }
             else
             {
-                newPlayer.playerNetServerHandler.sendPacket(new BedMessagePacket(0));
+                newPlayer.playerNetServerHandler.sendPacket(new PacketBedMessage(0));
             }
         }
         worldserver.chunkProviderServer.prepareChunk((int) newPlayer.x >> 4, (int) newPlayer.z >> 4);
         for (; worldserver.getCubes(newPlayer, newPlayer.bb).size() != 0; newPlayer.setPos(newPlayer.x, newPlayer.y + 1.0D, newPlayer.z))
         {
         }
-        newPlayer.playerNetServerHandler.sendPacket(new RespawnPacket((byte) newPlayer.dimension, (byte) Registries.WORLD_TYPES.getNumericIdOfItem(worldserver.worldType)));
-        server.playerList.sendPacketToAllPlayers(new PlayerGamemodePacket(newPlayer.id, newPlayer.gamemode.getId()));
+        newPlayer.playerNetServerHandler.sendPacket(new PacketRespawn((byte) newPlayer.dimension, (byte) Registries.WORLD_TYPES.getNumericIdOfItem(worldserver.worldType)));
+        server.playerList.sendPacketToAllPlayers(new PacketPlayerGamemode(newPlayer.id, newPlayer.gamemode.getId()));
         newPlayer.playerNetServerHandler.teleportAndRotate(newPlayer.x, newPlayer.y, newPlayer.z, newPlayer.yRot, newPlayer.xRot);
         setTime(newPlayer, worldserver);
         getPlayerManager(newPlayer.dimension).addPlayer(newPlayer);
@@ -245,7 +245,7 @@ public class PlayerList
         playerEntities.add(newPlayer);
         newPlayer.setupCraftingInventoryListener();
         newPlayer.func_22068_s();
-        newPlayer.playerNetServerHandler.sendPacket(new GameRulePacket(server.getDimensionWorld(0).getLevelData().getGameRules()));
+        newPlayer.playerNetServerHandler.sendPacket(new PacketGameRule(server.getDimensionWorld(0).getLevelData().getGameRules()));
         return newPlayer;
     }
 
@@ -257,7 +257,7 @@ public class PlayerList
 
         playerServer.dimension = targetDim;
         WorldServer worldserver1 = server.getDimensionWorld(playerServer.dimension);
-        playerServer.playerNetServerHandler.sendPacket(new RespawnPacket((byte) playerServer.dimension, (byte) Registries.WORLD_TYPES.getNumericIdOfItem(worldserver1.worldType)));
+        playerServer.playerNetServerHandler.sendPacket(new PacketRespawn((byte) playerServer.dimension, (byte) Registries.WORLD_TYPES.getNumericIdOfItem(worldserver1.worldType)));
         worldserver.removePlayer(playerServer);
         playerServer.removed = false;
         double x = playerServer.x;
@@ -296,11 +296,11 @@ public class PlayerList
         }
         syncPlayerDimension(playerServer);
         playerServer.playerNetServerHandler.teleportAndRotate(playerServer.x, playerServer.y, playerServer.z, playerServer.yRot, playerServer.xRot);
-        server.playerList.sendPacketToAllPlayers(new PlayerGamemodePacket(playerServer.id, playerServer.gamemode.getId()));
+        server.playerList.sendPacketToAllPlayers(new PacketPlayerGamemode(playerServer.id, playerServer.gamemode.getId()));
         playerServer.setWorld(worldserver1);
         setTime(playerServer, worldserver1);
         initializePlayerObject(playerServer);
-        playerServer.playerNetServerHandler.sendPacket(new GameRulePacket(server.getDimensionWorld(0).getLevelData().getGameRules()));
+        playerServer.playerNetServerHandler.sendPacket(new PacketGameRule(server.getDimensionWorld(0).getLevelData().getGameRules()));
     }
 
     public void onTick()
@@ -324,14 +324,14 @@ public class PlayerList
     }
 
     public void updatePlayerProfile(String username, String nickname, UUID uuid, int score, byte chatColor, boolean isOnline, boolean isOperator) {
-        sendPacketToAllPlayers(new UpdatePlayerProfilePacket(username, nickname, uuid, score, chatColor, isOnline, isOperator));
+        sendPacketToAllPlayers(new PacketUpdatePlayerProfile(username, nickname, uuid, score, chatColor, isOnline, isOperator));
         PlayerListBox.updateList();
     }
 
     public void sendEncryptedChatToAllPlayers(String message)
     {
         for (PlayerServer player : playerEntities) {
-            player.playerNetServerHandler.sendPacket(new ChatPacket(message, 0, AES.keyChain.get(player.username)));
+            player.playerNetServerHandler.sendPacket(new PacketChat(message, 0, AES.keyChain.get(player.username)));
         }
 
     }
@@ -598,7 +598,7 @@ public class PlayerList
         PlayerServer player = getPlayerEntity(s);
         if (player != null)
         {
-            player.playerNetServerHandler.sendPacket(new ChatPacket(s1));
+            player.playerNetServerHandler.sendPacket(new PacketChat(s1));
         }
     }
 
@@ -626,7 +626,7 @@ public class PlayerList
 
     public void sendChatMessageToAllOps(String s)
     {
-        ChatPacket chatPacket = new ChatPacket(s);
+        PacketChat chatPacket = new PacketChat(s);
         for (PlayerServer player : playerEntities) {
             if (isOp(player.uuid)) {
                 player.playerNetServerHandler.sendPacket(chatPacket);
@@ -686,7 +686,7 @@ public class PlayerList
 
     public void setTime(PlayerServer player, WorldServer worldserver)
     {
-        player.playerNetServerHandler.sendPacket(new SetTimePacket(worldserver.getWorldTime()));
+        player.playerNetServerHandler.sendPacket(new PacketSetTime(worldserver.getWorldTime()));
 //        if(worldserver.func_27068_v())
 //        {
 //            player.playerNetServerHandler.sendPacket(new BedMessagePacket(1));
diff --git a/src/main/java/net/minecraft/server/net/command/ConsoleCommandSource.java b/game/server/src/main/java/net/minecraft/server/net/command/ConsoleCommandSource.java
similarity index 94%
rename from src/main/java/net/minecraft/server/net/command/ConsoleCommandSource.java
rename to game/server/src/main/java/net/minecraft/server/net/command/ConsoleCommandSource.java
index 578a9d2e9..5c1e8639f 100644
--- a/src/main/java/net/minecraft/server/net/command/ConsoleCommandSource.java
+++ b/game/server/src/main/java/net/minecraft/server/net/command/ConsoleCommandSource.java
@@ -3,7 +3,7 @@ package net.minecraft.server.net.command;
 import com.mojang.logging.LogUtils;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.net.command.CommandSource;
-import net.minecraft.core.net.packet.ChatPacket;
+import net.minecraft.core.net.packet.PacketChat;
 import net.minecraft.core.net.packet.Packet;
 import net.minecraft.core.util.helper.AES;
 import net.minecraft.core.util.helper.LoggedPrintStream;
@@ -79,12 +79,12 @@ public class ConsoleCommandSource implements CommandSource, IServerCommandSource
 
     @Override
     public void sendMessage(Player player, String message) {
-        this.server.playerList.sendPacketToPlayer(player.username, new ChatPacket(message, AES.keyChain.get(player.username)));
+        this.server.playerList.sendPacketToPlayer(player.username, new PacketChat(message, AES.keyChain.get(player.username)));
     }
 
     @Override
     public void sendMessageToAllPlayers(String message) {
-        this.getServer().playerList.sendPacketToAllPlayers(new ChatPacket(message));
+        this.getServer().playerList.sendPacketToAllPlayers(new PacketChat(message));
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/server/net/command/IServerCommandSource.java b/game/server/src/main/java/net/minecraft/server/net/command/IServerCommandSource.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/IServerCommandSource.java
rename to game/server/src/main/java/net/minecraft/server/net/command/IServerCommandSource.java
diff --git a/src/main/java/net/minecraft/server/net/command/ServerCommandSource.java b/game/server/src/main/java/net/minecraft/server/net/command/ServerCommandSource.java
similarity index 91%
rename from src/main/java/net/minecraft/server/net/command/ServerCommandSource.java
rename to game/server/src/main/java/net/minecraft/server/net/command/ServerCommandSource.java
index 901049ae8..57a3a4536 100644
--- a/src/main/java/net/minecraft/server/net/command/ServerCommandSource.java
+++ b/game/server/src/main/java/net/minecraft/server/net/command/ServerCommandSource.java
@@ -2,7 +2,7 @@ package net.minecraft.server.net.command;
 
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.net.command.CommandSource;
-import net.minecraft.core.net.packet.ChatPacket;
+import net.minecraft.core.net.packet.PacketChat;
 import net.minecraft.core.net.packet.Packet;
 import net.minecraft.core.util.helper.AES;
 import net.minecraft.core.util.helper.MathHelper;
@@ -75,17 +75,17 @@ public class ServerCommandSource implements CommandSource, IServerCommandSource
 
     @Override
     public void sendMessage(String message) {
-        this.player.playerNetServerHandler.sendPacket(new ChatPacket(message, AES.keyChain.get(this.player.username)));
+        this.player.playerNetServerHandler.sendPacket(new PacketChat(message, AES.keyChain.get(this.player.username)));
     }
 
     @Override
     public void sendMessage(Player player, String message) {
-        this.server.playerList.sendPacketToPlayer(player.username, new ChatPacket(message, AES.keyChain.get(player.username)));
+        this.server.playerList.sendPacketToPlayer(player.username, new PacketChat(message, AES.keyChain.get(player.username)));
     }
 
     @Override
     public void sendMessageToAllPlayers(String message) {
-        this.getServer().playerList.sendPacketToAllPlayers(new ChatPacket(message));
+        this.getServer().playerList.sendPacketToAllPlayers(new PacketChat(message));
     }
 
     @Override
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandBan.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandBan.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandBan.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandBan.java
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandColor.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandColor.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandColor.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandColor.java
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandDeop.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandDeop.java
similarity index 97%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandDeop.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandDeop.java
index 8c2f30377..2ae778173 100644
--- a/src/main/java/net/minecraft/server/net/command/commands/CommandDeop.java
+++ b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandDeop.java
@@ -14,7 +14,6 @@ import net.minecraft.server.net.command.IServerCommandSource;
 import net.minecraft.core.net.command.arguments.ArgumentTypeEntity;
 import net.minecraft.core.net.command.exceptions.CommandExceptions;
 import net.minecraft.core.net.command.helpers.EntitySelector;
-import net.minecraft.core.net.packet.UpdatePlayerProfilePacket;
 import net.minecraft.server.MinecraftServer;
 
 import java.util.List;
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandDifficulty.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandDifficulty.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandDifficulty.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandDifficulty.java
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandEmotes.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandEmotes.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandEmotes.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandEmotes.java
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandKick.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandKick.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandKick.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandKick.java
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandList.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandList.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandList.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandList.java
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandMe.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandMe.java
similarity index 93%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandMe.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandMe.java
index 3d8e8daa0..14b26be7d 100644
--- a/src/main/java/net/minecraft/server/net/command/commands/CommandMe.java
+++ b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandMe.java
@@ -10,7 +10,7 @@ import net.minecraft.core.net.command.CommandManager;
 import net.minecraft.core.net.command.CommandSource;
 import net.minecraft.server.net.command.IServerCommandSource;
 import net.minecraft.core.net.command.exceptions.CommandExceptions;
-import net.minecraft.core.net.packet.ChatPacket;
+import net.minecraft.core.net.packet.PacketChat;
 
 public class CommandMe implements CommandManager.CommandRegistry {
     public void register(CommandDispatcher<CommandSource> dispatcher) {
@@ -24,7 +24,7 @@ public class CommandMe implements CommandManager.CommandRegistry {
                         if (!(source instanceof IServerCommandSource))
                             throw CommandExceptions.multiplayerWorldOnly().create();
                         String senderName = source.getName();
-                        ((IServerCommandSource) source).getServer().playerList.sendPacketToAllPlayers(new ChatPacket((asterisk ? "* " : "") + senderName + message));
+                        ((IServerCommandSource) source).getServer().playerList.sendPacketToAllPlayers(new PacketChat((asterisk ? "* " : "") + senderName + message));
                         return Command.SINGLE_SUCCESS;
                     })))
             .then(RequiredArgumentBuilder.<CommandSource, String>argument("message", StringArgumentType.greedyString())
@@ -34,7 +34,7 @@ public class CommandMe implements CommandManager.CommandRegistry {
                     if (!(source instanceof IServerCommandSource))
                         throw CommandExceptions.multiplayerWorldOnly().create();
                     String senderName = source.getName();
-                    ((IServerCommandSource) source).getServer().playerList.sendPacketToAllPlayers(new ChatPacket("* " + senderName + message));
+                    ((IServerCommandSource) source).getServer().playerList.sendPacketToAllPlayers(new PacketChat("* " + senderName + message));
                     return Command.SINGLE_SUCCESS;
                 })));
     }
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandNickname.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandNickname.java
similarity index 99%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandNickname.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandNickname.java
index bb529211a..a8d76ccf1 100644
--- a/src/main/java/net/minecraft/server/net/command/commands/CommandNickname.java
+++ b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandNickname.java
@@ -14,7 +14,6 @@ import net.minecraft.core.net.command.CommandSource;
 import net.minecraft.core.net.command.arguments.ArgumentTypeEntity;
 import net.minecraft.core.net.command.exceptions.CommandExceptions;
 import net.minecraft.core.net.command.helpers.EntitySelector;
-import net.minecraft.core.net.packet.UpdatePlayerProfilePacket;
 import net.minecraft.server.entity.player.PlayerServer;
 
 import java.util.List;
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandOp.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandOp.java
similarity index 97%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandOp.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandOp.java
index 237f7afe4..f715de74a 100644
--- a/src/main/java/net/minecraft/server/net/command/commands/CommandOp.java
+++ b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandOp.java
@@ -14,7 +14,6 @@ import net.minecraft.server.net.command.IServerCommandSource;
 import net.minecraft.core.net.command.arguments.ArgumentTypeEntity;
 import net.minecraft.core.net.command.exceptions.CommandExceptions;
 import net.minecraft.core.net.command.helpers.EntitySelector;
-import net.minecraft.core.net.packet.UpdatePlayerProfilePacket;
 import net.minecraft.server.MinecraftServer;
 
 import java.util.List;
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandSave.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandSave.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandSave.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandSave.java
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandScore.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandScore.java
similarity index 98%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandScore.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandScore.java
index ed8daa8d8..791928995 100644
--- a/src/main/java/net/minecraft/server/net/command/commands/CommandScore.java
+++ b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandScore.java
@@ -15,7 +15,6 @@ import net.minecraft.core.net.command.arguments.ArgumentTypeEntity;
 import net.minecraft.core.net.command.exceptions.CommandExceptions;
 import net.minecraft.core.net.command.helpers.EntitySelector;
 import net.minecraft.core.net.command.util.CommandHelper;
-import net.minecraft.core.net.packet.UpdatePlayerProfilePacket;
 import net.minecraft.server.MinecraftServer;
 
 import java.util.List;
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandStop.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandStop.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandStop.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandStop.java
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandUnban.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandUnban.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandUnban.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandUnban.java
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandWhitelist.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandWhitelist.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandWhitelist.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandWhitelist.java
diff --git a/src/main/java/net/minecraft/server/net/command/commands/CommandWhoIs.java b/game/server/src/main/java/net/minecraft/server/net/command/commands/CommandWhoIs.java
similarity index 100%
rename from src/main/java/net/minecraft/server/net/command/commands/CommandWhoIs.java
rename to game/server/src/main/java/net/minecraft/server/net/command/commands/CommandWhoIs.java
diff --git a/src/main/java/net/minecraft/server/net/handler/PacketHandlerLogin.java b/game/server/src/main/java/net/minecraft/server/net/handler/PacketHandlerLogin.java
similarity index 81%
rename from src/main/java/net/minecraft/server/net/handler/PacketHandlerLogin.java
rename to game/server/src/main/java/net/minecraft/server/net/handler/PacketHandlerLogin.java
index 64b46d22b..c60cd08e7 100644
--- a/src/main/java/net/minecraft/server/net/handler/PacketHandlerLogin.java
+++ b/game/server/src/main/java/net/minecraft/server/net/handler/PacketHandlerLogin.java
@@ -40,7 +40,7 @@ public class PacketHandlerLogin extends PacketHandler
     private final MinecraftServer mcServer;
     private int loginTimer;
     private String username;
-    private LoginPacket loginPacket;
+    private PacketLogin loginPacket;
     private String serverId;
     public static String kickMessage = null;
 
@@ -84,7 +84,7 @@ public class PacketHandlerLogin extends PacketHandler
         try
         {
             if (!silent) LOGGER.info("Disconnecting {}: {}", getUserAndIPString(), s);
-            netManager.addToSendQueue(new DisconnectPacket(s));
+            netManager.addToSendQueue(new PacketDisconnect(s));
             netManager.serverShutdown();
             finishedProcessing = true;
         }
@@ -95,21 +95,21 @@ public class PacketHandlerLogin extends PacketHandler
     }
 
     @Override
-	public void handleHandshake(PreLoginPacket preLoginPacket)
+	public void handleHandshake(PacketPreLogin preLoginPacket)
     {
         if (mcServer.onlineMode)
         {
             serverId = Long.toHexString(rand.nextLong());
-            netManager.addToSendQueue(new PreLoginPacket(serverId));
+            netManager.addToSendQueue(new PacketPreLogin(serverId));
         }
         else
         {
-            netManager.addToSendQueue(new PreLoginPacket("-"));
+            netManager.addToSendQueue(new PacketPreLogin("-"));
         }
     }
 
     @Override
-	public void handleLogin(LoginPacket loginPacket)
+	public void handleLogin(PacketLogin loginPacket)
     {
         username = loginPacket.username;
         if (loginPacket.playerEntityIdAndProtocolVersion != Global.MP_PROTOCOL_VERSION)
@@ -157,7 +157,7 @@ public class PacketHandlerLogin extends PacketHandler
         }
     }
 
-    public void doLogin(LoginPacket loginPacket)
+    public void doLogin(PacketLogin loginPacket)
     {
         if (mcServer.onlineMode) {
             UUID mojangUUID = UUIDHelper.getUUIDFromName(loginPacket.username);
@@ -181,10 +181,10 @@ public class PacketHandlerLogin extends PacketHandler
             PacketHandlerServer packetHandler = new PacketHandlerServer(mcServer, netManager, player);
             try
             {
-                packetHandler.sendPacket(new LoginPacket("", new UUID(0, 0), player.id, worldserver.getRandomSeed(), (byte) worldserver.dimension.id, (byte) Registries.WORLD_TYPES.getNumericIdOfItem(worldserver.dimensionData.getWorldType()), NetworkManager.PACKET_DELAY, RSA.getPublicKey(RSA.RSAKeyChain.getPublic())));
+                packetHandler.sendPacket(new PacketLogin("", new UUID(0, 0), player.id, worldserver.getRandomSeed(), (byte) worldserver.dimension.id, (byte) Registries.WORLD_TYPES.getNumericIdOfItem(worldserver.dimensionData.getWorldType()), NetworkManager.PACKET_DELAY, RSA.getPublicKey(RSA.RSAKeyChain.getPublic())));
 
                 Key aesKey = AES.generateKey();
-                packetHandler.sendPacket(new AESSendKeyPacket(RSA.encrypt(AES.getKey(aesKey), RSA.getPublicKey(loginPacket.publicKey))));
+                packetHandler.sendPacket(new PacketAESSendKey(RSA.encrypt(AES.getKey(aesKey), RSA.getPublicKey(loginPacket.publicKey))));
                 AES.keyChain.put(player.username, aesKey);
             }
             catch (Exception e)
@@ -193,37 +193,37 @@ public class PacketHandlerLogin extends PacketHandler
             }
 
             for (RecipeEntryBase<?, ?, ?> recipe : Registries.RECIPES.getAllSerializableRecipes()) {
-                player.playerNetServerHandler.sendPacket(new RecipeSyncPacket(recipe,Registries.RECIPES.getAllSerializableRecipes().size()));
+                player.playerNetServerHandler.sendPacket(new PacketRecipeSync(recipe,Registries.RECIPES.getAllSerializableRecipes().size()));
             }
-            player.playerNetServerHandler.sendPacket(new SyncIDsPacket(SyncIDsPacket.DESTINATION_SOUND_IDS, SoundTypes.getSoundIds()));
-            player.playerNetServerHandler.sendPacket(new SyncIDsPacket(SyncIDsPacket.DESTINATION_ENTITY_IDS, EntityDispatcher.getEntityIds()));
+            player.playerNetServerHandler.sendPacket(new PacketSyncIDs(PacketSyncIDs.DESTINATION_SOUND_IDS, SoundTypes.getSoundIds()));
+            player.playerNetServerHandler.sendPacket(new PacketSyncIDs(PacketSyncIDs.DESTINATION_ENTITY_IDS, EntityDispatcher.getEntityIds()));
 
-            packetHandler.sendPacket(new SetSpawnPositionPacket(chunkcoordinates.x, chunkcoordinates.y, chunkcoordinates.z));
+            packetHandler.sendPacket(new PacketSetSpawnPosition(chunkcoordinates.x, chunkcoordinates.y, chunkcoordinates.z));
             mcServer.playerList.setTime(player, worldserver);
-            mcServer.playerList.sendPacketToAllPlayers(new ChatPacket(TextFormatting.YELLOW + player.getDisplayName() + TextFormatting.YELLOW + " joined the game."));
+            mcServer.playerList.sendPacketToAllPlayers(new PacketChat(TextFormatting.YELLOW + player.getDisplayName() + TextFormatting.YELLOW + " joined the game."));
             mcServer.playerList.updatePlayerProfile(player.username, player.nickname, player.uuid, player.score, player.chatColor, true, player.isOperator());
 
             if (mcServer.joinMessage != null && !mcServer.joinMessage.isEmpty())
             {
-                player.playerNetServerHandler.sendPacket(new ChatPacket(mcServer.joinMessage));
+                player.playerNetServerHandler.sendPacket(new PacketChat(mcServer.joinMessage));
             }
 
             mcServer.playerList.playerLoggedIn(player);
             packetHandler.teleportAndRotate(player.x, player.y, player.z, player.yRot, player.xRot);
             mcServer.networkServer.addPlayer(packetHandler);
-            mcServer.playerList.sendPacketToAllPlayers(new PlayerGamemodePacket(player.id, player.gamemode.getId()));
-            packetHandler.sendPacket(new SetTimePacket(worldserver.getWorldTime()));
+            mcServer.playerList.sendPacketToAllPlayers(new PacketPlayerGamemode(player.id, player.gamemode.getId()));
+            packetHandler.sendPacket(new PacketSetTime(worldserver.getWorldTime()));
             player.setupCraftingInventoryListener();
             if (MinecraftServer.statsStatus)
             {
                 RestHandler.post("https://api.betterthanadventure.net/stats?serverToken=" + MinecraftServer.statsToken + "&count=" + mcServer.playerList.playerEntities.size());
             }
-            player.playerNetServerHandler.sendPacket(new PhotoModePacket(mcServer.disablePhotoMode));
-            player.playerNetServerHandler.sendPacket(new GameRulePacket(mcServer.getDimensionWorld(0).getLevelData().getGameRules()));
-            player.playerNetServerHandler.sendPacket(new CommandManagerPacket(this.mcServer.getDimensionWorld(player.dimension).getCommandManager().getDispatcher(), new ServerCommandSource(this.mcServer, player), "", 0));
-            player.playerNetServerHandler.sendPacket(new SetHeldObjectPacket(player.id, player.getHeldObject()));
-            player.playerNetServerHandler.sendPacket(new SetHotbarOffsetPacket(player.inventory.getHotbarOffset()));
-            player.playerNetServerHandler.sendPacket(new SetCarriedItemPacket(player.inventory.getCurrentItemIndex()));
+            player.playerNetServerHandler.sendPacket(new PacketPhotoMode(mcServer.disablePhotoMode));
+            player.playerNetServerHandler.sendPacket(new PacketGameRule(mcServer.getDimensionWorld(0).getLevelData().getGameRules()));
+            player.playerNetServerHandler.sendPacket(new PacketCommandManager(this.mcServer.getDimensionWorld(player.dimension).getCommandManager().getDispatcher(), new ServerCommandSource(this.mcServer, player), "", 0));
+            player.playerNetServerHandler.sendPacket(new PacketSetHeldObject(player.id, player.getHeldObject()));
+            player.playerNetServerHandler.sendPacket(new PacketSetHotbarOffset(player.inventory.getHotbarOffset()));
+            player.playerNetServerHandler.sendPacket(new PacketSetCarriedItem(player.inventory.getCurrentItemIndex()));
         }
         finishedProcessing = true;
     }
@@ -237,7 +237,7 @@ public class PacketHandlerLogin extends PacketHandler
     }
 
     @Override
-    public void handlePingHandshake(PingHandshakePacket pingHandshakePacket) {
+    public void handlePingHandshake(PacketPingHandshake pingHandshakePacket) {
         String msg = "";
         if (pingHandshakePacket.pingHostString.equals("MC|PingHost")) {
             msg =
@@ -303,7 +303,7 @@ public class PacketHandlerLogin extends PacketHandler
         return packetHandlerLogin.serverId;
     }
 
-    public static LoginPacket setLoginPacket(PacketHandlerLogin packetHandlerLogin, LoginPacket loginPacket)
+    public static PacketLogin setLoginPacket(PacketHandlerLogin packetHandlerLogin, PacketLogin loginPacket)
     {
         return packetHandlerLogin.loginPacket = loginPacket;
     }
diff --git a/src/main/java/net/minecraft/server/net/handler/PacketHandlerServer.java b/game/server/src/main/java/net/minecraft/server/net/handler/PacketHandlerServer.java
similarity index 89%
rename from src/main/java/net/minecraft/server/net/handler/PacketHandlerServer.java
rename to game/server/src/main/java/net/minecraft/server/net/handler/PacketHandlerServer.java
index 75cc53024..057e7aae6 100644
--- a/src/main/java/net/minecraft/server/net/handler/PacketHandlerServer.java
+++ b/game/server/src/main/java/net/minecraft/server/net/handler/PacketHandlerServer.java
@@ -21,7 +21,6 @@ import net.minecraft.core.net.command.TextFormatting;
 import net.minecraft.core.player.inventory.container.ContainerInventory;
 import net.minecraft.core.util.collection.NamespaceID;
 import net.minecraft.core.world.World;
-import net.minecraft.server.net.PlayerList;
 import net.minecraft.server.net.command.ServerCommandSource;
 import net.minecraft.core.net.handler.PacketHandler;
 import net.minecraft.core.net.packet.*;
@@ -70,20 +69,20 @@ public class PacketHandlerServer extends PacketHandler
         netManager.processReadPackets();
         if (field_15_f - field_22004_g > 20)
         {
-            sendPacket(new KeepAlivePacket());
+            sendPacket(new PacketKeepAlive());
         }
     }
 
     public boolean canInteract() {
-        return playerEntity.getGamemode().canInteract() && playerEntity.isAlive();
+        return playerEntity.canInteract();
     }
 
     public void kickPlayer(String s)
     {
         playerEntity.func_30002_A();
-        sendPacket(new DisconnectPacket(s));
+        sendPacket(new PacketDisconnect(s));
         netManager.serverShutdown();
-        mcServer.playerList.sendPacketToAllPlayers(new ChatPacket(playerEntity.getDisplayName() + TextFormatting.YELLOW + " was kicked from the game."));
+        mcServer.playerList.sendPacketToAllPlayers(new PacketChat(playerEntity.getDisplayName() + TextFormatting.YELLOW + " was kicked from the game."));
         mcServer.playerList.updatePlayerProfile(playerEntity.username, playerEntity.nickname, playerEntity.uuid, playerEntity.score, playerEntity.chatColor, false, playerEntity.isOperator());
         mcServer.playerList.playerLoggedOut(playerEntity);
         connectionClosed = true;
@@ -95,7 +94,7 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleSetMobSpawner(SetMobSpawnerPacket packet) {
+    public void handleSetMobSpawner(PacketSetMobSpawner packet) {
         WorldServer world = mcServer.getDimensionWorld(playerEntity.dimension);
         if (playerEntity.getGamemode() == Gamemode.creative && world.isBlockLoaded(packet.xPosition, packet.yPosition, packet.zPosition))
         {
@@ -113,7 +112,7 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleFlying(MovePlayerPacket packet)
+    public void handleFlying(PacketMovePlayer packet)
     {
         if (!playerEntity.isAlive()) return;
         WorldServer worldserver = mcServer.getDimensionWorld(playerEntity.dimension);
@@ -292,7 +291,7 @@ public class PacketHandlerServer extends PacketHandler
 		lastPosY = y;
 		lastPosZ = z;
 		playerEntity.absMoveTo(x, y, z, playerEntity.yRot, playerEntity.xRot);
-		playerEntity.playerNetServerHandler.sendPacket(new MovePlayerPacket.Pos(x, y + 1.625, z, false));
+		playerEntity.playerNetServerHandler.sendPacket(new PacketMovePlayer.Pos(x, y + 1.625, z, false));
 	}
 
 	public void teleportAndRotate(double x, double y, double z, float yaw, float pitch) {
@@ -301,26 +300,26 @@ public class PacketHandlerServer extends PacketHandler
 		lastPosY = y;
 		lastPosZ = z;
 		playerEntity.absMoveTo(x, y, z, yaw, pitch);
-		playerEntity.playerNetServerHandler.sendPacket(new MovePlayerPacket.PosRot(x, y + 1.625, z, yaw, pitch, false));
+		playerEntity.playerNetServerHandler.sendPacket(new PacketMovePlayer.PosRot(x, y + 1.625, z, yaw, pitch, false));
 	}
 
     @Override
-    public void handleBlockDig(PlayerActionPacket playerActionPacket) {
+    public void handleBlockDig(PacketPlayerAction playerActionPacket) {
         final int x = playerActionPacket.xPosition;
         final int y = playerActionPacket.yPosition;
         final int z = playerActionPacket.zPosition;
 
         if (!canInteract() || playerEntity.getHeldObject() != null /*Forbid digging while holding object*/) return;
         WorldServer world = mcServer.getDimensionWorld(playerEntity.dimension);
-        if(playerActionPacket.action == PlayerActionPacket.ACTION_DROP_ITEM_SINGLE) {
+        if(playerActionPacket.action == PacketPlayerAction.ACTION_DROP_ITEM_SINGLE) {
             // Drop single item
             playerEntity.dropCurrentItem(false);
             return;
-        }else if(playerActionPacket.action == PlayerActionPacket.ACTION_DROP_ITEM_STACK) {
+        }else if(playerActionPacket.action == PacketPlayerAction.ACTION_DROP_ITEM_STACK) {
             // Drop full stack
             playerEntity.dropCurrentItem(true);
             return;
-        }else if(playerActionPacket.action == PlayerActionPacket.ACTION_PICK_BLOCK) {
+        }else if(playerActionPacket.action == PacketPlayerAction.ACTION_PICK_BLOCK) {
             // Pick Block
             playerEntity.pickBlock(x, y, z);
             return;
@@ -342,21 +341,21 @@ public class PacketHandlerServer extends PacketHandler
         int spawnDistZ = (int) MathHelper.abs(z - spawnPos.z);
         int distanceFromSpawn = Math.max(spawnDistX, spawnDistZ);
         if(distanceFromSpawn <= mcServer.spawnProtectionRange && !ignoreSpawnProtection) {
-            playerEntity.playerNetServerHandler.sendPacket(new BlockUpdatePacket(x, y, z, world));
+            playerEntity.playerNetServerHandler.sendPacket(new PacketBlockUpdate(x, y, z, world));
             return;
         }
 
         // handles spawn protection
-        if(playerActionPacket.action == PlayerActionPacket.ACTION_DIG_START) {
+        if(playerActionPacket.action == PacketPlayerAction.ACTION_DIG_START) {
             // Start Mining
             playerEntity.playerController.startMining(x, y, z, playerActionPacket.side);
-        } else if(playerActionPacket.action == PlayerActionPacket.ACTION_DIG_CONTINUED) {
+        } else if(playerActionPacket.action == PacketPlayerAction.ACTION_DIG_CONTINUED) {
             // Hit Block
             playerEntity.playerController.hitBlock(x, y, z, playerActionPacket.side, playerActionPacket.xHit, playerActionPacket.yHit);
-        } else if(playerActionPacket.action == PlayerActionPacket.ACTION_DIG_COMPLETE) {
+        } else if(playerActionPacket.action == PacketPlayerAction.ACTION_DIG_COMPLETE) {
             // Block Destroy
             if(!playerEntity.playerController.destroyBlock(x, y, z, playerActionPacket.side)) {
-                playerEntity.playerNetServerHandler.sendPacket(new BlockUpdatePacket(x, y, z, world));
+                playerEntity.playerNetServerHandler.sendPacket(new PacketBlockUpdate(x, y, z, world));
             }
         }
     }
@@ -365,13 +364,13 @@ public class PacketHandlerServer extends PacketHandler
     {
         for (PlayerServer playerServer : mcServer.playerList.playerEntities)
         {
-            sendPacket(new UpdatePlayerProfilePacket(playerServer.username, playerServer.nickname, playerServer.uuid, playerServer.score, playerServer.chatColor, true, playerServer.isOperator()));
+            sendPacket(new PacketUpdatePlayerProfile(playerServer.username, playerServer.nickname, playerServer.uuid, playerServer.score, playerServer.chatColor, true, playerServer.isOperator()));
         }
         PlayerListBox.updateList();
     }
 
     @Override
-    public void handlePlace(UseItemPacket packet)
+    public void handlePlace(PacketUseItem packet)
     {
         if (!canInteract()) return;
         WorldServer worldserver = mcServer.getDimensionWorld(playerEntity.dimension);
@@ -404,11 +403,11 @@ public class PacketHandlerServer extends PacketHandler
             {
                 playerEntity.playerController.activateBlockOrUseItem(playerEntity, worldserver, itemstack, x, y, z, direction.getSide(), xPlaced, yPlaced);
             }
-            playerEntity.playerNetServerHandler.sendPacket(new BlockUpdatePacket(x, y, z, worldserver));
+            playerEntity.playerNetServerHandler.sendPacket(new PacketBlockUpdate(x, y, z, worldserver));
             x += direction.getOffsetX();
             y += direction.getOffsetY();
             z += direction.getOffsetZ();
-            playerEntity.playerNetServerHandler.sendPacket(new BlockUpdatePacket(x, y, z, worldserver));
+            playerEntity.playerNetServerHandler.sendPacket(new PacketBlockUpdate(x, y, z, worldserver));
         }
         itemstack = playerEntity.inventory.getCurrentItem();
         if (itemstack != null && itemstack.stackSize <= 0)
@@ -426,7 +425,7 @@ public class PacketHandlerServer extends PacketHandler
         }
         if (!ItemStack.areItemStacksEqual(playerEntity.inventory.getCurrentItem(), packet.itemStack))
         {
-            sendPacket(new ContainerSetSlotPacket(playerEntity.craftingInventory.containerId, slot.index, playerEntity.inventory.getCurrentItem()));
+            sendPacket(new PacketContainerSetSlot(playerEntity.craftingInventory.containerId, slot.index, playerEntity.inventory.getCurrentItem()));
         }
     }
 
@@ -434,7 +433,7 @@ public class PacketHandlerServer extends PacketHandler
     public void handleErrorMessage(String message, Object[] objects)
     {
         LOGGER.info(playerEntity.username + " lost connection: " + message);
-        mcServer.playerList.sendPacketToAllPlayers(new ChatPacket(playerEntity.getDisplayName() + TextFormatting.YELLOW + " left the game."));
+        mcServer.playerList.sendPacketToAllPlayers(new PacketChat(playerEntity.getDisplayName() + TextFormatting.YELLOW + " left the game."));
         mcServer.playerList.updatePlayerProfile(playerEntity.username, playerEntity.nickname, playerEntity.uuid, playerEntity.score, playerEntity.chatColor, false, playerEntity.isOperator());
         mcServer.playerList.playerLoggedOut(playerEntity);
         connectionClosed = true;
@@ -459,7 +458,7 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleBlockItemSwitch(SetCarriedItemPacket setCarriedItemPacket)
+    public void handleBlockItemSwitch(PacketSetCarriedItem setCarriedItemPacket)
     {
         if (setCarriedItemPacket.id < 0 || setCarriedItemPacket.id > ContainerInventory.playerMainInventorySize())
         {
@@ -469,19 +468,19 @@ public class PacketHandlerServer extends PacketHandler
         {
             playerEntity.inventory.setCurrentItemIndex(setCarriedItemPacket.id, false);
             if (setCarriedItemPacket.id != playerEntity.inventory.getCurrentItemIndex()) { // If client tried to set current item while locked then send a packet back attempting to resync them
-                sendPacket(new SetCarriedItemPacket(setCarriedItemPacket.id));
+                sendPacket(new PacketSetCarriedItem(setCarriedItemPacket.id));
             }
         }
     }
 
 	@Override
-	public void handleChat(ChatPacket packet) {
+	public void handleChat(PacketChat packet) {
 		String message;
 		if(packet.encrypted) {
 			try {
 				message = AES.decrypt(packet.message, AES.keyChain.get(playerEntity.username));
 			}catch (Exception e) {
-				throw new RuntimeException(ChatPacket.ENCRYPTION_ERROR_MESSAGE, e);
+				throw new RuntimeException(PacketChat.ENCRYPTION_ERROR_MESSAGE, e);
 			}
 		}else {
 			message = packet.message;
@@ -497,7 +496,7 @@ public class PacketHandlerServer extends PacketHandler
 		for(int i = 0; i < message.length(); i++) {
 			char c = message.charAt(i);
 			if(ChatAllowedCharacters.ALLOWED_CHARACTERS.indexOf(c) < 0) {
-				sendPacket(new ChatPacket(String.valueOf(TextFormatting.GRAY) + TextFormatting.ITALIC + "[SERVER] Illegal characters in chat message."));
+				sendPacket(new PacketChat(String.valueOf(TextFormatting.GRAY) + TextFormatting.ITALIC + "[SERVER] Illegal characters in chat message."));
 				return;
 			}
 		}
@@ -518,12 +517,12 @@ public class PacketHandlerServer extends PacketHandler
         try {
             playerEntity.world.getCommandManager().execute(s.substring(1), serverCommandSource);
         } catch (CommandSyntaxException e) {
-            playerEntity.playerNetServerHandler.sendPacket(new ChatPacket(TextFormatting.RED + e.getMessage(), AES.keyChain.get(playerEntity.username)));
+            playerEntity.playerNetServerHandler.sendPacket(new PacketChat(TextFormatting.RED + e.getMessage(), AES.keyChain.get(playerEntity.username)));
         }
     }
 
     @Override
-    public void handleAnimation(AnimatePacket packet)
+    public void handleAnimation(PacketAnimate packet)
     {
         if (!playerEntity.isAlive()) return;
         if (packet.animate == 1)
@@ -533,25 +532,25 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handlePlayerState(UpdatePlayerStatePacket updatePlayerStatePacket)
+    public void handlePlayerState(PacketUpdatePlayerState updatePlayerStatePacket)
     {
         if (!playerEntity.isAlive()) return;
-        if (updatePlayerStatePacket.state == UpdatePlayerStatePacket.STATE_SNEAK)
+        if (updatePlayerStatePacket.state == PacketUpdatePlayerState.STATE_SNEAK)
         {
             playerEntity.setSneaking(true);
         }
-        else if (updatePlayerStatePacket.state == UpdatePlayerStatePacket.STATE_UN_SNEAK)
+        else if (updatePlayerStatePacket.state == PacketUpdatePlayerState.STATE_UN_SNEAK)
         {
             playerEntity.setSneaking(false);
         }
-        else if (updatePlayerStatePacket.state == UpdatePlayerStatePacket.STATE_LEAVE_BED)
+        else if (updatePlayerStatePacket.state == PacketUpdatePlayerState.STATE_LEAVE_BED)
         {
             playerEntity.wakeUpPlayer(false, true);
             hasMoved = false;
         }
     }
     @Override
-    public void handleBoatControl(BoatControlPacket boatControlPacket)
+    public void handleBoatControl(PacketBoatControl boatControlPacket)
     {
         if (!canInteract()) return;
         if (playerEntity.vehicle != null && playerEntity.vehicle instanceof EntityBoat && !Double.isNaN(boatControlPacket.targetXD) && !Double.isNaN(boatControlPacket.targetZD)) {
@@ -563,7 +562,7 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleKickDisconnect(DisconnectPacket packet)
+    public void handleKickDisconnect(PacketDisconnect packet)
     {
         netManager.networkShutdown("disconnect.quitting", new Object[0]);
     }
@@ -576,7 +575,7 @@ public class PacketHandlerServer extends PacketHandler
     @Override
     public void logInfo(String s)
     {
-        sendPacket(new ChatPacket("\2477" + s));
+        sendPacket(new PacketChat("\2477" + s));
     }
 
     @Override
@@ -586,7 +585,7 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleUseEntity(InteractPacket interactPacket)
+    public void handleUseEntity(PacketInteract interactPacket)
     {
         if (!playerEntity.getGamemode().canInteract() || !playerEntity.isAlive() || playerEntity.getHeldObject() != null /*TODO consider adding entity interactions while holding object*/) return;
         WorldServer worldserver = mcServer.getDimensionWorld(playerEntity.dimension);
@@ -619,11 +618,11 @@ public class PacketHandlerServer extends PacketHandler
             }
             if (canAttack)
             {
-                if (interactPacket.action == InteractPacket.ACTION_INTERACT)
+                if (interactPacket.action == PacketInteract.ACTION_INTERACT)
                 {
                     playerEntity.useCurrentItemOnEntity(targetEntity);
                 }
-                else if (interactPacket.action == InteractPacket.ACTION_ATTACK)
+                else if (interactPacket.action == PacketInteract.ACTION_ATTACK)
                 {
                     playerEntity.attackTargetEntityWithCurrentItem(targetEntity);
                 }
@@ -632,13 +631,13 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleOpenGuidebook(GuidebookPacket packet)
+    public void handleOpenGuidebook(PacketGuidebook packet)
     {
         playerEntity.displayGUIGuidebook();
     }
 
     @Override
-    public void handleRespawn(RespawnPacket packet)
+    public void handleRespawn(PacketRespawn packet)
     {
         if (playerEntity.getHealth() <= 0) {
             playerEntity = mcServer.playerList.recreatePlayerEntity(playerEntity, 0);
@@ -646,20 +645,20 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleCloseWindow(ContainerClosePacket containerClosePacket)
+    public void handleCloseWindow(PacketContainerClose containerClosePacket)
     {
         playerEntity.closeCraftingGui();
     }
 
     @Override
-    public void handleWindowClick(ContainerClickPacket containerClickPacket)
+    public void handleWindowClick(PacketContainerClick containerClickPacket)
     {
         if (playerEntity.craftingInventory.containerId == containerClickPacket.window_Id && playerEntity.craftingInventory.isSynched(playerEntity))
         {
             ItemStack itemstack = playerEntity.craftingInventory.clicked(containerClickPacket.action, containerClickPacket.args, playerEntity);
             if (ItemStack.areItemStacksEqual(containerClickPacket.itemStack, itemstack))
             {
-                playerEntity.playerNetServerHandler.sendPacket(new ContainerAckPacket(containerClickPacket.window_Id, containerClickPacket.actionId, true));
+                playerEntity.playerNetServerHandler.sendPacket(new PacketContainerAck(containerClickPacket.window_Id, containerClickPacket.actionId, true));
                 playerEntity.isChangingQuantityOnly = true;
                 playerEntity.craftingInventory.broadcastChanges();
                 playerEntity.updateHeldItem();
@@ -668,7 +667,7 @@ public class PacketHandlerServer extends PacketHandler
             else
             {
                 guiIdMap.put(playerEntity.craftingInventory.containerId, containerClickPacket.actionId);
-                playerEntity.playerNetServerHandler.sendPacket(new ContainerAckPacket(containerClickPacket.window_Id, containerClickPacket.actionId, false));
+                playerEntity.playerNetServerHandler.sendPacket(new PacketContainerAck(containerClickPacket.window_Id, containerClickPacket.actionId, false));
                 playerEntity.craftingInventory.setSynched(playerEntity, false);
                 ArrayList<ItemStack> arraylist = new ArrayList<>();
                 for (int i = 0; i < playerEntity.craftingInventory.slots.size(); i++)
@@ -682,7 +681,7 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleTransaction(ContainerAckPacket packet)
+    public void handleTransaction(PacketContainerAck packet)
     {
         Short short1 = guiIdMap.get(playerEntity.craftingInventory.containerId);
         if (short1 != null && packet.shortWindowId == short1 && playerEntity.craftingInventory.containerId == packet.windowId && !playerEntity.craftingInventory.isSynched(playerEntity))
@@ -692,7 +691,7 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleUpdateSign(SignUpdatePacket signUpdatePacket)
+    public void handleUpdateSign(PacketSignUpdate signUpdatePacket)
     {
         if (!playerEntity.getGamemode().canInteract() || !playerEntity.isAlive()) return;
         WorldServer worldserver = mcServer.getDimensionWorld(playerEntity.dimension);
@@ -751,7 +750,7 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleUpdateCreativeInventory(UpdateCreativeInventoryPacket packet)
+    public void handleUpdateCreativeInventory(PacketUpdateCreativeInventory packet)
     {
         if (playerEntity.craftingInventory.containerId == packet.windowId && playerEntity.craftingInventory instanceof MenuInventoryCreative)
         {
@@ -760,17 +759,17 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleSetHotbarOffset(SetHotbarOffsetPacket packet)
+    public void handleSetHotbarOffset(PacketSetHotbarOffset packet)
     {
 
         playerEntity.inventory.setHotbarOffset(packet.hotbarOffset, false);
         if (packet.hotbarOffset != playerEntity.inventory.getHotbarOffset()) { // If player tries to set hotbar offset while locked resync the clients offset
-            sendPacket(new SetHotbarOffsetPacket(packet.hotbarOffset));
+            sendPacket(new PacketSetHotbarOffset(packet.hotbarOffset));
         }
     }
     
     @Override
-    public void handleItemName(SetItemNamePacket packet)
+    public void handleItemName(PacketSetItemName packet)
     {
         String name = packet.name;
         if (name.length() > 16) name = packet.name.substring(0, 16);
@@ -778,13 +777,13 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleSetPaintingMotive(SetPaintingArtPacket setPaintingArtPacket)
+    public void handleSetPaintingMotive(PacketSetPaintingArt setPaintingArtPacket)
     {
         playerEntity.setSelectedArt(ArtType.values.get(setPaintingArtPacket.motive));
     }
     
     @Override
-    public void handleCustomPayload(CustomPayloadPacket customPayloadPacket) {
+    public void handleCustomPayload(PacketCustomPayload customPayloadPacket) {
     	if("BTA|RotationLock".equals(customPayloadPacket.channel)) {
     		if(customPayloadPacket.data.length == 4) {
         		playerEntity.rotationLock = Direction.getDirectionById(customPayloadPacket.data[0]);
@@ -818,9 +817,9 @@ public class PacketHandlerServer extends PacketHandler
     }
 
     @Override
-    public void handleRequestCommandManagerPacket(RequestCommandManagerPacket packet) {
+    public void handleRequestCommandManagerPacket(PacketRequestCommandManager packet) {
         sendPacket(
-            new CommandManagerPacket(
+            new PacketCommandManager(
                 this.mcServer.getDimensionWorld(playerEntity.dimension)
                     .getCommandManager().getDispatcher(),
                 new ServerCommandSource(this.mcServer, playerEntity),
diff --git a/src/main/java/net/minecraft/server/player/PlayerListBox.java b/game/server/src/main/java/net/minecraft/server/player/PlayerListBox.java
similarity index 90%
rename from src/main/java/net/minecraft/server/player/PlayerListBox.java
rename to game/server/src/main/java/net/minecraft/server/player/PlayerListBox.java
index ace904e31..437d6ccc1 100644
--- a/src/main/java/net/minecraft/server/player/PlayerListBox.java
+++ b/game/server/src/main/java/net/minecraft/server/player/PlayerListBox.java
@@ -3,7 +3,7 @@ package net.minecraft.server.player;
 import java.util.Vector;
 import javax.swing.JList;
 
-import net.minecraft.core.net.packet.PlayerListPacket;
+import net.minecraft.core.net.packet.PacketPlayerList;
 import net.minecraft.server.MinecraftServer;
 import net.minecraft.core.net.IUpdatePlayerListBox;
 import net.minecraft.server.entity.player.PlayerServer;
@@ -51,6 +51,6 @@ public class PlayerListBox extends JList<String>
             scores[i] = String.valueOf(player.getScore());
         }
 
-        server.playerList.sendPacketToAllPlayers(new PlayerListPacket(playerCount, players, scores));
+        server.playerList.sendPacketToAllPlayers(new PacketPlayerList(playerCount, players, scores));
     }
 }
diff --git a/src/main/java/net/minecraft/server/player/PlayerManager.java b/game/server/src/main/java/net/minecraft/server/player/PlayerManager.java
similarity index 94%
rename from src/main/java/net/minecraft/server/player/PlayerManager.java
rename to game/server/src/main/java/net/minecraft/server/player/PlayerManager.java
index bfbea731d..741d6918a 100644
--- a/src/main/java/net/minecraft/server/player/PlayerManager.java
+++ b/game/server/src/main/java/net/minecraft/server/player/PlayerManager.java
@@ -5,6 +5,7 @@ import java.util.List;
 
 import com.mojang.logging.LogUtils;
 import net.minecraft.core.block.Block;
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.net.packet.*;
 import net.minecraft.server.entity.player.PlayerServer;
@@ -218,7 +219,7 @@ public class PlayerManager
                 throw new IllegalStateException("Failed to add player. " + player + " already is in chunk " + chunkX + ", " + chunkZ);
             } else {
                 player.field_420_ah.add(currentChunk);
-                player.playerNetServerHandler.sendPacket(new ChunkVisibilityPacket(currentChunk.x, currentChunk.z, true));
+                player.playerNetServerHandler.sendPacket(new PacketChunkVisibility(currentChunk.x, currentChunk.z, true));
                 players.add(player);
                 player.loadedChunks.add(currentChunk);
             }
@@ -239,7 +240,7 @@ public class PlayerManager
             }
             player.loadedChunks.remove(currentChunk);
             if (player.field_420_ah.contains(currentChunk)) {
-                player.playerNetServerHandler.sendPacket(new ChunkVisibilityPacket(chunkX, chunkZ, false));
+                player.playerNetServerHandler.sendPacket(new PacketChunkVisibility(chunkX, chunkZ, false));
             }
         }
 
@@ -299,8 +300,8 @@ public class PlayerManager
                 int x = chunkX * Chunk.CHUNK_SIZE_X + minX;
                 int y = minY;
                 int z = chunkZ * Chunk.CHUNK_SIZE_Z + minZ;
-                sendPacketToPlayersInInstance(new BlockUpdatePacket(x, y, z, world));
-                if (Block.isEntityTile[world.getBlockId(x, y, z)]) {
+                sendPacketToPlayersInInstance(new PacketBlockUpdate(x, y, z, world));
+                if (Blocks.isEntityTile[world.getBlockId(x, y, z)]) {
                     updateTileEntity(world.getBlockEntity(x, y, z));
                 }
             }
@@ -323,7 +324,7 @@ public class PlayerManager
     //	            ySize = world.getHeightBlocks();
     //	            zSize = 16;
     //            }
-                sendPacketToPlayersInInstance(new BlockRegionUpdatePacket(minWorldX, minWorldY, minWorldZ, xSize, ySize, zSize, world));
+                sendPacketToPlayersInInstance(new PacketBlockRegionUpdate(minWorldX, minWorldY, minWorldZ, xSize, ySize, zSize, world));
                 List<TileEntity> list = world.getBlockEntitiesWithinBounds(minWorldX, minWorldY, minWorldZ, minWorldX + xSize, minWorldY + ySize, minWorldZ + zSize);
                 for(int j3 = 0; j3 < list.size(); j3++)
                 {
@@ -332,13 +333,13 @@ public class PlayerManager
 
             } else
             {
-                sendPacketToPlayersInInstance(new ChunkBlocksUpdatePacket(chunkX, chunkZ, blocksToUpdate, numBlocksToUpdate, world));
+                sendPacketToPlayersInInstance(new PacketChunkBlocksUpdate(chunkX, chunkZ, blocksToUpdate, numBlocksToUpdate, world));
                 for(int k = 0; k < numBlocksToUpdate; k++)
                 {
                     int x = chunkX * 16 + (blocksToUpdate[k] >> 0 & 0x0F);
                     int y = blocksToUpdate[k] >> 8;
                     int z = chunkZ * 16 + (blocksToUpdate[k] >> 4 & 0x0F);
-                    if(Block.isEntityTile[world.getBlockId(x, y, z)])
+                    if(Blocks.isEntityTile[world.getBlockId(x, y, z)])
                     {
                         updateTileEntity(world.getBlockEntity(x, y, z));
                     }
diff --git a/src/main/java/net/minecraft/server/world/ConvertProgressUpdater.java b/game/server/src/main/java/net/minecraft/server/world/ConvertProgressUpdater.java
similarity index 100%
rename from src/main/java/net/minecraft/server/world/ConvertProgressUpdater.java
rename to game/server/src/main/java/net/minecraft/server/world/ConvertProgressUpdater.java
diff --git a/src/main/java/net/minecraft/server/world/ServerPlayerController.java b/game/server/src/main/java/net/minecraft/server/world/ServerPlayerController.java
similarity index 89%
rename from src/main/java/net/minecraft/server/world/ServerPlayerController.java
rename to game/server/src/main/java/net/minecraft/server/world/ServerPlayerController.java
index 12dc99d2d..588a3a41f 100644
--- a/src/main/java/net/minecraft/server/world/ServerPlayerController.java
+++ b/game/server/src/main/java/net/minecraft/server/world/ServerPlayerController.java
@@ -3,11 +3,12 @@ package net.minecraft.server.world;
 
 import net.minecraft.core.block.Block;
 
+import net.minecraft.core.block.Blocks;
 import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.entity.player.Player;
 import net.minecraft.core.item.Item;
 import net.minecraft.core.item.ItemStack;
-import net.minecraft.core.net.packet.BlockUpdatePacket;
+import net.minecraft.core.net.packet.PacketBlockUpdate;
 import net.minecraft.core.util.helper.Side;
 import net.minecraft.core.world.LevelListener;
 import net.minecraft.core.world.World;
@@ -30,7 +31,7 @@ public class ServerPlayerController
             int j = thisWorld.getBlockId(destroyX, destroyY, destroyZ);
             if(j != 0)
             {
-                Block block = Block.blocksList[j];
+                Block block = Blocks.blocksList[j];
                 float f = block.blockStrength(thisWorld, destroyX, destroyY, destroyZ, destroySide, player) * (float)(i + 1);
                 if(f >= 1.0F)
                 {
@@ -76,7 +77,7 @@ public class ServerPlayerController
             int i1 = thisWorld.getBlockId(x, y, z);
             if(i1 != 0)
             {
-                Block block = Block.blocksList[i1];
+                Block block = Blocks.blocksList[i1];
                 float f = block.blockStrength(thisWorld, x, y, z, side, player) * (float)(l + 1);
                 if(f >= 0.7F)
                 {
@@ -98,7 +99,7 @@ public class ServerPlayerController
 
     public boolean removeBlock(int x, int y, int z)
     {
-        Block block = Block.blocksList[thisWorld.getBlockId(x, y, z)];
+        Block block = Blocks.blocksList[thisWorld.getBlockId(x, y, z)];
         int l = thisWorld.getBlockMetadata(x, y, z);
         return thisWorld.setBlockWithNotify(x, y, z, 0);
     }
@@ -115,7 +116,7 @@ public class ServerPlayerController
     			return false;
     		}
     	}
-        Block block = Block.getBlock(id);
+        Block block = Blocks.getBlock(id);
         TileEntity tileEntity = thisWorld.getBlockEntity(x, y, z);
         thisWorld.playBlockEvent(player, LevelListener.EVENT_BLOCK_BREAK, x, y, z, id);
         boolean flag = removeBlock(x, y, z);
@@ -124,10 +125,10 @@ public class ServerPlayerController
         		block.onBlockDestroyedByPlayer(thisWorld, x, y, z, side, meta, player, heldItem);
         	}
         }
-        if(flag && player.canHarvestBlock(Block.blocksList[id]) && player.getGamemode().dropBlockOnBreak())
+        if(flag && player.canHarvestBlock(Blocks.blocksList[id]) && player.getGamemode().dropBlockOnBreak())
         {
-            Block.blocksList[id].harvestBlock(thisWorld, player, x, y, z, meta, tileEntity);
-            ((PlayerServer) player).playerNetServerHandler.sendPacket(new BlockUpdatePacket(x, y, z, thisWorld));
+            Blocks.blocksList[id].harvestBlock(thisWorld, player, x, y, z, meta, tileEntity);
+            ((PlayerServer) player).playerNetServerHandler.sendPacket(new PacketBlockUpdate(x, y, z, thisWorld));
         }
         ItemStack itemstack = player.getCurrentEquippedItem();
         if(itemstack != null)
@@ -173,7 +174,7 @@ public class ServerPlayerController
                 }
             }
             if (!player.isSneaking() || itemstack == null) {  // If standing or hand empty perform block right click method
-                if (blockId > 0 && Block.blocksList[blockId].onBlockRightClicked(world, blockX, blockY, blockZ, player, side, xPlaced, yPlaced)) {
+                if (blockId > 0 && Blocks.blocksList[blockId].onBlockRightClicked(world, blockX, blockY, blockZ, player, side, xPlaced, yPlaced)) {
                     return true;
                 }
             }
@@ -184,7 +185,7 @@ public class ServerPlayerController
             }
         } else {
             if (!player.isSneaking()) {  // If standing or hand empty perform block right click method
-                if (blockId > 0 && Block.blocksList[blockId].onBlockRightClicked(world, blockX, blockY, blockZ, player, side, xPlaced, yPlaced)) {
+                if (blockId > 0 && Blocks.blocksList[blockId].onBlockRightClicked(world, blockX, blockY, blockZ, player, side, xPlaced, yPlaced)) {
                     return true;
                 }
             }
diff --git a/src/main/java/net/minecraft/server/world/WorldManager.java b/game/server/src/main/java/net/minecraft/server/world/WorldManager.java
similarity index 91%
rename from src/main/java/net/minecraft/server/world/WorldManager.java
rename to game/server/src/main/java/net/minecraft/server/world/WorldManager.java
index d4e2549b5..1690a0067 100644
--- a/src/main/java/net/minecraft/server/world/WorldManager.java
+++ b/game/server/src/main/java/net/minecraft/server/world/WorldManager.java
@@ -8,8 +8,8 @@ import net.minecraft.core.block.entity.TileEntity;
 import net.minecraft.core.entity.Entity;
 import net.minecraft.core.entity.EntityItem;
 import net.minecraft.core.entity.player.Player;
-import net.minecraft.core.net.packet.PlaySoundEffectPacket;
-import net.minecraft.core.net.packet.PlaySoundEffectDirectPacket;
+import net.minecraft.core.net.packet.PacketPlaySoundEffect;
+import net.minecraft.core.net.packet.PacketPlaySoundEffectDirect;
 import net.minecraft.core.sound.SoundTypes;
 import net.minecraft.core.sound.SoundCategory;
 import net.minecraft.core.world.LevelListener;
@@ -77,7 +77,7 @@ public class WorldManager
 			}
 			return;
 		}
-		PlaySoundEffectDirectPacket packet = new PlaySoundEffectDirectPacket(soundId, soundType, x, y, z, volume, pitch);
+		PacketPlaySoundEffectDirect packet = new PacketPlaySoundEffectDirect(soundId, soundType, x, y, z, volume, pitch);
 		float range = 16.0f;
 		if(volume > 1.0f) {
 			range *= volume;
@@ -119,6 +119,6 @@ public class WorldManager
     @Override
 	public void levelEvent(Player player, int id, int x, int y, int z, int data)
     {
-        mcServer.playerList.sendPacketToOtherPlayersAroundPoint(player, x, y, z, 64D, worldServer.dimension.id, new PlaySoundEffectPacket(id, x, y, z, data));
+        mcServer.playerList.sendPacketToOtherPlayersAroundPoint(player, x, y, z, 64D, worldServer.dimension.id, new PacketPlaySoundEffect(id, x, y, z, data));
     }
 }
diff --git a/src/main/java/net/minecraft/server/world/WorldServer.java b/game/server/src/main/java/net/minecraft/server/world/WorldServer.java
similarity index 89%
rename from src/main/java/net/minecraft/server/world/WorldServer.java
rename to game/server/src/main/java/net/minecraft/server/world/WorldServer.java
index 24b2b389b..719c013b0 100644
--- a/src/main/java/net/minecraft/server/world/WorldServer.java
+++ b/game/server/src/main/java/net/minecraft/server/world/WorldServer.java
@@ -110,7 +110,7 @@ public class WorldServer extends World
                             }
                         }
                         if(player != null) {
-                            MinecraftServer.getInstance().playerList.sendPacketToAllPlayersInDimension(new ChatPacket(TextFormatting.YELLOW + player.getDisplayName() + TextFormatting.ORANGE + " went to sleep. Sweet dreams!"), dimension.id);
+                            MinecraftServer.getInstance().playerList.sendPacketToAllPlayersInDimension(new PacketChat(TextFormatting.YELLOW + player.getDisplayName() + TextFormatting.ORANGE + " went to sleep. Sweet dreams!"), dimension.id);
                         }
                     }
                 }
@@ -138,15 +138,15 @@ public class WorldServer extends World
             if(MinecraftServer.getInstance() != null && player != null && players.size() > 1 && req > 1) {
                 int moreReq = req - playersSleeping;
                 if(player.isPlayerSleeping()) {
-                    MinecraftServer.getInstance().playerList.sendPacketToAllPlayersInDimension(new ChatPacket(TextFormatting.YELLOW + player.username + TextFormatting.ORANGE + " went to bed."), dimension.id);
+                    MinecraftServer.getInstance().playerList.sendPacketToAllPlayersInDimension(new PacketChat(TextFormatting.YELLOW + player.username + TextFormatting.ORANGE + " went to bed."), dimension.id);
                 }else {
-                    MinecraftServer.getInstance().playerList.sendPacketToAllPlayersInDimension(new ChatPacket(TextFormatting.YELLOW + player.username + TextFormatting.ORANGE + " has left their bed."), dimension.id);
+                    MinecraftServer.getInstance().playerList.sendPacketToAllPlayersInDimension(new PacketChat(TextFormatting.YELLOW + player.username + TextFormatting.ORANGE + " has left their bed."), dimension.id);
                 }
                 if(moreReq > 0) {
                     if(moreReq > 1) {
-                        MinecraftServer.getInstance().playerList.sendPacketToAllPlayersInDimension(new ChatPacket(TextFormatting.LIGHT_GRAY + "" + moreReq + " more players are required to sleep to skip to daytime"), dimension.id);
+                        MinecraftServer.getInstance().playerList.sendPacketToAllPlayersInDimension(new PacketChat(TextFormatting.LIGHT_GRAY + "" + moreReq + " more players are required to sleep to skip to daytime"), dimension.id);
                     }else {
-                        MinecraftServer.getInstance().playerList.sendPacketToAllPlayersInDimension(new ChatPacket(TextFormatting.LIGHT_GRAY + "1 more player is required to sleep to skip to daytime"), dimension.id);
+                        MinecraftServer.getInstance().playerList.sendPacketToAllPlayersInDimension(new PacketChat(TextFormatting.LIGHT_GRAY + "1 more player is required to sleep to skip to daytime"), dimension.id);
                     }
 
                 }
@@ -165,7 +165,7 @@ public class WorldServer extends World
     {
         if(super.addWeatherEffect(entity))
         {
-            mcServer.playerList.sendPacketToPlayersAroundPoint(entity.x, entity.y, entity.z, 512D, dimension.id, new WeatherEffectPacket(entity));
+            mcServer.playerList.sendPacketToPlayersAroundPoint(entity.x, entity.y, entity.z, 512D, dimension.id, new PacketWeatherEffect(entity));
             return true;
         } else
         {
@@ -176,20 +176,20 @@ public class WorldServer extends World
     @Override
     public void sendTrackedEntityStatusUpdatePacket(Entity entityId, byte entityStatus)
     {
-        EnitityEventPacket enitityEventPacket38Entitystatus = new EnitityEventPacket(entityId.id, entityStatus);
+        PacketEntityEvent enitityEventPacket38Entitystatus = new PacketEntityEvent(entityId.id, entityStatus);
         mcServer.getEntityTracker(dimension.id).sendPacketToTrackedPlayersAndTrackedEntity(entityId, enitityEventPacket38Entitystatus);
     }
 
     @Override
     public void sendTrackedEntityStatusUpdatePacket(Entity entityId, byte entityStatus, float attackedAtYaw)
     {
-        EnitityEventPacket enitityEventPacket38Entitystatus = new EnitityEventPacket(entityId.id, entityStatus, attackedAtYaw);
+        PacketEntityEvent enitityEventPacket38Entitystatus = new PacketEntityEvent(entityId.id, entityStatus, attackedAtYaw);
         mcServer.getEntityTracker(dimension.id).sendPacketToTrackedPlayersAndTrackedEntity(entityId, enitityEventPacket38Entitystatus);
     }
 
     @Override
     public void sendTrackedEntityDataPacket(Entity entity) {
-        EntityTagDataPacket entitytagdataNBT = new EntityTagDataPacket(entity);
+        PacketEntityTagData entitytagdataNBT = new PacketEntityTagData(entity);
         mcServer.getEntityTracker(dimension.id).sendPacketToTrackedPlayersAndTrackedEntity(entity, entitytagdataNBT);
     }
 
@@ -208,14 +208,14 @@ public class WorldServer extends World
         explosion.isFlaming = flaming;
         explosion.explode();
         explosion.addEffects(true);
-        mcServer.playerList.sendPacketToPlayersAroundPoint(x, y, z, 64D, dimension.id, new ExplosionPacket(x, y, z, explosionSize, explosion.destroyedBlockPositions, isCannonBall));
+        mcServer.playerList.sendPacketToPlayersAroundPoint(x, y, z, 64D, dimension.id, new PacketExplosion(x, y, z, explosionSize, explosion.destroyedBlockPositions, isCannonBall));
         return explosion;
     }
     @Override
     public void triggerEvent(int x, int y, int z, int index, int data)
     {
         super.triggerEvent(x, y, z, index, data);
-        mcServer.playerList.sendPacketToPlayersAroundPoint(x, y, z, 64D, dimension.id, new BlockEventPacket(x, y, z, index, data));
+        mcServer.playerList.sendPacketToPlayersAroundPoint(x, y, z, 64D, dimension.id, new PacketBlockEvent(x, y, z, index, data));
     }
 
     public void checkLock()
@@ -228,13 +228,13 @@ public class WorldServer extends World
         super.tick();
 
         if (System.currentTimeMillis() - lastWeatherSend > 1000) {
-            mcServer.playerList.sendPacketToAllPlayers(new WeatherStatusPacket(dimension.id, getCurrentWeather() != null ? getCurrentWeather().weatherId : -1, weatherManager.getNextWeather() != null ? weatherManager.getNextWeather().weatherId : -1, weatherManager.getWeatherDuration(), weatherManager.getWeatherIntensity(), weatherManager.getWeatherPower()));
+            mcServer.playerList.sendPacketToAllPlayers(new PacketWeatherStatus(dimension.id, getCurrentWeather() != null ? getCurrentWeather().weatherId : -1, weatherManager.getNextWeather() != null ? weatherManager.getNextWeather().weatherId : -1, weatherManager.getWeatherDuration(), weatherManager.getWeatherIntensity(), weatherManager.getWeatherPower()));
             lastWeatherSend = System.currentTimeMillis();
         }
     }
     @Override
     public void sendGlobalMessage(String message){
-        mcServer.playerList.sendPacketToAllPlayers(new ChatPacket(message));
+        mcServer.playerList.sendPacketToAllPlayers(new PacketChat(message));
     }
 
     @Override
@@ -245,7 +245,7 @@ public class WorldServer extends World
         byte b3 = (byte) ((rainbowTicks >>  0) & 0xFF);
 //        System.out.printf("b0:%s b1:%s b2:%s b3:%s\n", b0, b1, b2, b3);
 //        System.out.println("Sent rainbow with " + rainbowTicks + " ticks!");
-        mcServer.playerList.sendPacketToAllPlayersInDimension(new CustomPayloadPacket("BTA|RainbowStart", new byte[]{b0, b1, b2, b3}), dimension.id);
+        mcServer.playerList.sendPacketToAllPlayersInDimension(new PacketCustomPayload("BTA|RainbowStart", new byte[]{b0, b1, b2, b3}), dimension.id);
         super.addRainbow(rainbowTicks);
     }
     public ChunkProviderServer chunkProviderServer;
diff --git a/src/main/java/net/minecraft/server/world/WorldServerMulti.java b/game/server/src/main/java/net/minecraft/server/world/WorldServerMulti.java
similarity index 100%
rename from src/main/java/net/minecraft/server/world/WorldServerMulti.java
rename to game/server/src/main/java/net/minecraft/server/world/WorldServerMulti.java
diff --git a/src/main/java/net/minecraft/server/world/chunk/provider/ChunkProviderServer.java b/game/server/src/main/java/net/minecraft/server/world/chunk/provider/ChunkProviderServer.java
similarity index 100%
rename from src/main/java/net/minecraft/server/world/chunk/provider/ChunkProviderServer.java
rename to game/server/src/main/java/net/minecraft/server/world/chunk/provider/ChunkProviderServer.java
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 000000000..2d3b5a02e
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,4 @@
+bta.group = net.minecraft
+bta.version = 7.3
+bta.texturePackFormat = 3
+bta.buildChannel = BuildChannel.DEVELOPMENT
\ No newline at end of file
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
new file mode 100644
index 000000000..c536f6277
--- /dev/null
+++ b/gradle/libs.versions.toml
@@ -0,0 +1,26 @@
+[versions]
+log4j = "2.19.0"
+lwjgl = "3.3.4"
+
+[libraries]
+jetbrains-annotations = { module = "org.jetbrains:annotations", version = "24.0.0" }
+gson = { module = "com.google.code.gson:gson", version = "2.10.1" }
+brigadier = { module = "com.mojang:brigadier", version = "1.0.18" }
+slf4j-api = { module = "org.slf4j:slf4j-api", version = "2.0.7" }
+log4j-core = { module = "org.apache.logging.log4j:log4j-core", version.ref = "log4j" }
+log4j-api = { module = "org.apache.logging.log4j:log4j-api", version.ref = "log4j" }
+log4j-slf4j2 = { module = "org.apache.logging.log4j:log4j-slf4j2-impl", version.ref = "log4j" }
+lwjgl = { module = "org.lwjgl:lwjgl", version.ref = "lwjgl" }
+lwjgl-assimp = { module = "org.lwjgl:lwjgl-assimp", version.ref = "lwjgl" }
+lwjgl-glfw = { module = "org.lwjgl:lwjgl-glfw", version.ref = "lwjgl" }
+lwjgl-openal = { module = "org.lwjgl:lwjgl-openal", version.ref = "lwjgl" }
+lwjgl-opengl = { module = "org.lwjgl:lwjgl-opengl", version.ref = "lwjgl" }
+lwjgl-stb = { module = "org.lwjgl:lwjgl-stb", version.ref = "lwjgl" }
+lwjgl-bom = { module = "org.lwjgl:lwjgl-bom", version.ref = "lwjgl" }
+
+[bundles]
+log4j = ["slf4j-api", "log4j-core", "log4j-api", "log4j-slf4j2"]
+lwjgl = ["lwjgl", "lwjgl-assimp", "lwjgl-glfw", "lwjgl-openal", "lwjgl-opengl", "lwjgl-stb"]
+
+[plugins]
+shadow = { id = "com.gradleup.shadow", version = "8.3.5" }
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 41d9927a4..a4b76b953 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index da1db5f04..df97d72b8 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,7 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
index 1b6c78733..f5feea6d6 100755
--- a/gradlew
+++ b/gradlew
@@ -15,6 +15,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+# SPDX-License-Identifier: Apache-2.0
+#
 
 ##############################################################################
 #
@@ -55,7 +57,7 @@
 #       Darwin, MinGW, and NonStop.
 #
 #   (3) This script is generated from the Groovy template
-#       https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
 #       within the Gradle project.
 #
 #       You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +82,12 @@ do
     esac
 done
 
-APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
-
-APP_NAME="Gradle"
+# This is normally unused
+# shellcheck disable=SC2034
 APP_BASE_NAME=${0##*/}
-
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
+' "$PWD" ) || exit
 
 # Use the maximum available, or set MAX_FD != -1 to use that value.
 MAX_FD=maximum
@@ -133,22 +134,29 @@ location of your Java installation."
     fi
 else
     JAVACMD=java
-    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+    if ! command -v java >/dev/null 2>&1
+    then
+        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 
 Please set the JAVA_HOME variable in your environment to match the
 location of your Java installation."
+    fi
 fi
 
 # Increase the maximum file descriptors if we can.
 if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
     case $MAX_FD in #(
       max*)
+        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC2039,SC3045
         MAX_FD=$( ulimit -H -n ) ||
             warn "Could not query maximum file descriptor limit"
     esac
     case $MAX_FD in  #(
       '' | soft) :;; #(
       *)
+        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+        # shellcheck disable=SC2039,SC3045
         ulimit -n "$MAX_FD" ||
             warn "Could not set maximum file descriptor limit to $MAX_FD"
     esac
@@ -193,11 +201,15 @@ if "$cygwin" || "$msys" ; then
     done
 fi
 
-# Collect all arguments for the java command;
-#   * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
-#     shell script including quotes and variable substitutions, so put them in
-#     double quotes to make sure that they get re-expanded; and
-#   * put everything else in single quotes, so that it's not re-expanded.
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+#     and any embedded shellness will be escaped.
+#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+#     treated as '${Hostname}' itself on the command line.
 
 set -- \
         "-Dorg.gradle.appname=$APP_BASE_NAME" \
@@ -205,6 +217,12 @@ set -- \
         org.gradle.wrapper.GradleWrapperMain \
         "$@"
 
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+    die "xargs is not available"
+fi
+
 # Use "xargs" to parse quoted args.
 #
 # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
diff --git a/gradlew.bat b/gradlew.bat
index 107acd32c..9d21a2183 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -13,8 +13,10 @@
 @rem See the License for the specific language governing permissions and
 @rem limitations under the License.
 @rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
 
-@if "%DEBUG%" == "" @echo off
+@if "%DEBUG%"=="" @echo off
 @rem ##########################################################################
 @rem
 @rem  Gradle startup script for Windows
@@ -25,7 +27,8 @@
 if "%OS%"=="Windows_NT" setlocal
 
 set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
 set APP_BASE_NAME=%~n0
 set APP_HOME=%DIRNAME%
 
@@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome
 
 set JAVA_EXE=java.exe
 %JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto execute
+if %ERRORLEVEL% equ 0 goto execute
 
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
 
 goto fail
 
@@ -56,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
 
 if exist "%JAVA_EXE%" goto execute
 
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
 
 goto fail
 
@@ -75,13 +78,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
 
 :end
 @rem End local scope for the variables with windows NT shell
-if "%ERRORLEVEL%"=="0" goto mainEnd
+if %ERRORLEVEL% equ 0 goto mainEnd
 
 :fail
 rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
 rem the _cmd.exe /c_ return code!
-if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
-exit /b 1
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
 
 :mainEnd
 if "%OS%"=="Windows_NT" endlocal
diff --git a/settings.gradle.kts b/settings.gradle.kts
index e4a1a40ca..39b025406 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -1,2 +1,6 @@
 rootProject.name = "better-than-adventure"
-
+include("game:core")
+include("game:client")
+include("game:server")
+include("util:stellar")
+include("util:datagen")
diff --git a/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGate.java b/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGate.java
deleted file mode 100644
index d9b674c8a..000000000
--- a/src/main/java/net/minecraft/client/render/block/model/BlockModelFenceGate.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package net.minecraft.client.render.block.model;
-
-import net.minecraft.client.render.block.color.BlockColorDispatcher;
-import net.minecraft.client.render.tessellator.Tessellator;
-import net.minecraft.core.block.Block;
-import net.minecraft.core.block.BlockFenceGate;
-import net.minecraft.core.util.helper.Side;
-import org.jetbrains.annotations.Nullable;
-import org.lwjgl.opengl.GL11;
-
-public class BlockModelFenceGate<T extends BlockFenceGate> extends BlockModelStandard<T> {
-    public BlockModelFenceGate(Block block) {
-        super(block);
-    }
-
-    @Override
-    public boolean render(Tessellator tessellator, int x, int y, int z) {
-        block.setBlockBoundsBasedOnState(renderBlocks.blockAccess, x, y, z);
-        boolean flag = true;
-        int l = renderBlocks.blockAccess.getBlockMetadata(x, y, z);
-        boolean flag1 = BlockFenceGate.isOpen(l);
-        int i1 = BlockFenceGate.getDirection(l);
-        if(i1 == 3 || i1 == 1)
-        {
-            float f = 0.4375F;
-            float f4 = 0.5625F;
-            float f8 = 0.0F;
-            float f12 = 0.125F;
-            block.setBlockBounds(f, 0.3125F, f8, f4, 1.0F, f12);
-            renderStandardBlock(tessellator, block, x, y, z);
-            f8 = 0.875F;
-            f12 = 1.0F;
-            block.setBlockBounds(f, 0.3125F, f8, f4, 1.0F, f12);
-            renderStandardBlock(tessellator, block, x, y, z);
-        } else
-        {
-            float f1 = 0.0F;
-            float f5 = 0.125F;
-            float f9 = 0.4375F;
-            float f13 = 0.5625F;
-            block.setBlockBounds(f1, 0.3125F, f9, f5, 1.0F, f13);
-            renderStandardBlock(tessellator, block, x, y, z);
-            f1 = 0.875F;
-            f5 = 1.0F;
-            block.setBlockBounds(f1, 0.3125F, f9, f5, 1.0F, f13);
-            renderStandardBlock(tessellator, block, x, y, z);
-        }
-        if(!flag1)
-        {
-            if(i1 == 3 || i1 == 1)
-            {
-                float f2 = 0.4375F;
-                float f6 = 0.5625F;
-                float f10 = 0.375F;
-                float f14 = 0.5F;
-                block.setBlockBounds(f2, 0.375F, f10, f6, 0.9375F, f14);
-                renderStandardBlock(tessellator, block, x, y, z);
-                f10 = 0.5F;
-                f14 = 0.625F;
-                block.setBlockBounds(f2, 0.375F, f10, f6, 0.9375F, f14);
-                renderStandardBlock(tessellator, block, x, y, z);
-                f10 = 0.625F;
-                f14 = 0.875F;
-                block.setBlockBounds(f2, 0.375F, f10, f6, 0.5625F, f14);
-                renderStandardBlock(tessellator, block, x, y, z);
-                block.setBlockBounds(f2, 0.75F, f10, f6, 0.9375F, f14);
-                renderStandardBlock(tessellator, block, x, y, z);
-                f10 = 0.125F;
-                f14 = 0.375F;
-                block.setBlockBounds(f2, 0.375F, f10, f6, 0.5625F, f14);
-                renderStandardBlock(tessellator, block, x, y, z);
-                block.setBlockBounds(f2, 0.75F, f10, f6, 0.9375F, f14);
-                renderStandardBlock(tessellator, block, x, y, z);
-            } else
-            {
-                float f3 = 0.375F;
-                float f7 = 0.5F;
-                float f11 = 0.4375F;
-                float f15 = 0.5625F;
-                block.setBlockBounds(f3, 0.375F, f11, f7, 0.9375F, f15);
-                renderStandardBlock(tessellator, block, x, y, z);
-                f3 = 0.5F;
-                f7 = 0.625F;
-                block.setBlockBounds(f3, 0.375F, f11, f7, 0.9375F, f15);
-                renderStandardBlock(tessellator, block, x, y, z);
-                f3 = 0.625F;
-                f7 = 0.875F;
-                block.setBlockBounds(f3, 0.375F, f11, f7, 0.5625F, f15);
-                renderStandardBlock(tessellator, block, x, y, z);
-                block.setBlockBounds(f3, 0.75F, f11, f7, 0.9375F, f15);
-                renderStandardBlock(tessellator, block, x, y, z);
-                f3 = 0.125F;
-                f7 = 0.375F;
-                block.setBlockBounds(f3, 0.375F, f11, f7, 0.5625F, f15);
-                renderStandardBlock(tessellator, block, x, y, z);
-                block.setBlockBounds(f3, 0.75F, f11, f7, 0.9375F, f15);
-                renderStandardBlock(tessellator, block, x, y, z);
-            }
-        } else
-        if(i1 == 3)
-        {
-            block.setBlockBounds(0.8125F, 0.375F, 0.0F, 0.9375F, 0.9375F, 0.125F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.8125F, 0.375F, 0.875F, 0.9375F, 0.9375F, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.5625F, 0.375F, 0.0F, 0.8125F, 0.5625F, 0.125F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.5625F, 0.375F, 0.875F, 0.8125F, 0.5625F, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.5625F, 0.75F, 0.0F, 0.8125F, 0.9375F, 0.125F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.5625F, 0.75F, 0.875F, 0.8125F, 0.9375F, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
-        } else
-        if(i1 == 1)
-        {
-            block.setBlockBounds(0.0625F, 0.375F, 0.0F, 0.1875F, 0.9375F, 0.125F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.0625F, 0.375F, 0.875F, 0.1875F, 0.9375F, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.1875F, 0.375F, 0.0F, 0.4375F, 0.5625F, 0.125F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.1875F, 0.375F, 0.875F, 0.4375F, 0.5625F, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.1875F, 0.75F, 0.0F, 0.4375F, 0.9375F, 0.125F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.1875F, 0.75F, 0.875F, 0.4375F, 0.9375F, 1.0F);
-            renderStandardBlock(tessellator, block, x, y, z);
-        } else
-        if(i1 == 0)
-        {
-            block.setBlockBounds(0.0F, 0.375F, 0.8125F, 0.125F, 0.9375F, 0.9375F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.875F, 0.375F, 0.8125F, 1.0F, 0.9375F, 0.9375F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.0F, 0.375F, 0.5625F, 0.125F, 0.5625F, 0.8125F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.875F, 0.375F, 0.5625F, 1.0F, 0.5625F, 0.8125F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.0F, 0.75F, 0.5625F, 0.125F, 0.9375F, 0.8125F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.875F, 0.75F, 0.5625F, 1.0F, 0.9375F, 0.8125F);
-            renderStandardBlock(tessellator, block, x, y, z);
-        } else
-        if(i1 == 2)
-        {
-            block.setBlockBounds(0.0F, 0.375F, 0.0625F, 0.125F, 0.9375F, 0.1875F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.875F, 0.375F, 0.0625F, 1.0F, 0.9375F, 0.1875F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.0F, 0.375F, 0.1875F, 0.125F, 0.5625F, 0.4375F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.875F, 0.375F, 0.1875F, 1.0F, 0.5625F, 0.4375F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.0F, 0.75F, 0.1875F, 0.125F, 0.9375F, 0.4375F);
-            renderStandardBlock(tessellator, block, x, y, z);
-            block.setBlockBounds(0.875F, 0.75F, 0.1875F, 1.0F, 0.9375F, 0.4375F);
-            renderStandardBlock(tessellator, block, x, y, z);
-        }
-        block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-        return flag;
-    }
-
-    @Override
-    public void renderBlockOnInventory(Tessellator tessellator, int metadata, float brightness, float alpha, @Nullable Integer lightmapCoordinate) {
-        if(renderBlocks.useInventoryTint)
-        {
-            int j = BlockColorDispatcher.getInstance().getDispatch(block).getFallbackColor(metadata);
-            float f1 = (float)(j >> 16 & 0xff) / 255F;
-            float f3 = (float)(j >> 8 & 0xff) / 255F;
-            float f5 = (float)(j & 0xff) / 255F;
-            GL11.glColor4f(f1 * brightness, f3 * brightness, f5 * brightness, alpha);
-        }
-        for(int k1 = 0; k1 < 3; k1++)
-        {
-            float f6 = 0.0625F;
-            if(k1 == 0)
-            {
-                block.setBlockBounds(0.5F - f6, 0.3F, 0.0F, 0.5F + f6, 1.0F, f6 * 2.0F);
-            }
-            if(k1 == 1)
-            {
-                block.setBlockBounds(0.5F - f6, 0.3F, 1.0F - f6 * 2.0F, 0.5F + f6, 1.0F, 1.0F);
-            }
-            if(k1 == 2)
-            {
-                block.setBlockBounds(0.5F - f6, 0.5F, 0.0F, 0.5F + f6, 1.0F - f6, 1.0F);
-            }
-            GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
-            tessellator.startDrawingQuads();
-            tessellator.setNormal(0.0F, -1F, 0.0F);
-            renderBottomFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.BOTTOM, metadata));
-            tessellator.draw();
-            tessellator.startDrawingQuads();
-            tessellator.setNormal(0.0F, 1.0F, 0.0F);
-            renderTopFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.TOP, metadata));
-            tessellator.draw();
-            tessellator.startDrawingQuads();
-            tessellator.setNormal(0.0F, 0.0F, -1F);
-            renderNorthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.NORTH, metadata));
-            tessellator.draw();
-            tessellator.startDrawingQuads();
-            tessellator.setNormal(0.0F, 0.0F, 1.0F);
-            renderSouthFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.SOUTH, metadata));
-            tessellator.draw();
-            tessellator.startDrawingQuads();
-            tessellator.setNormal(-1F, 0.0F, 0.0F);
-            renderWestFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.WEST, metadata));
-            tessellator.draw();
-            tessellator.startDrawingQuads();
-            tessellator.setNormal(1.0F, 0.0F, 0.0F);
-            renderEastFace(tessellator, block, 0.0D, 0.0D, 0.0D, getBlockTextureFromSideAndMetadata(Side.EAST, metadata));
-            tessellator.draw();
-            GL11.glTranslatef(0.5F, 0.5F, 0.5F);
-        }
-
-        block.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
-    }
-
-}
diff --git a/src/main/java/net/minecraft/core/block/BlockCake.java b/src/main/java/net/minecraft/core/block/BlockCake.java
deleted file mode 100644
index 40571d730..000000000
--- a/src/main/java/net/minecraft/core/block/BlockCake.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package net.minecraft.core.block;
-
-import net.minecraft.core.item.Items;
-import net.minecraft.core.util.phys.AABB;
-import net.minecraft.core.world.WorldSource;
-
-public class BlockCake extends BlockEdible
-{
-
-	public BlockCake(String key, String namespaceId, int id)
-    {
-        super(key, namespaceId, id, 6, 3, () -> Items.FOOD_CAKE);
-    }
-
-    @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
-    {
-        int l = world.getBlockMetadata(x, y, z);
-        float f = 0.0625F;
-        float f1 = (float)(1 + l * 2) / 16F;
-        float f2 = 0.5F;
-        setBlockBounds(f1, 0.0F, f, 1.0F - f, f2, 1.0F - f);
-    }
-
-    @Override
-	public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        int l = world.getBlockMetadata(x, y, z);
-        float f = 0.0625F;
-        float f1 = (float)(1 + l * 2) / 16F;
-        float f2 = 0.5F;
-        return AABB.getTemporaryBB((float) x + f1, y, (float) z + f, (float)(x + 1) - f, ((float) y + f2) - f, (float)(z + 1) - f);
-    }
-
-    @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        int l = world.getBlockMetadata(x, y, z);
-        float f = 0.0625F;
-        float f1 = (float)(1 + l * 2) / 16F;
-        float f2 = 0.5F;
-        return AABB.getTemporaryBB((float) x + f1, y, (float) z + f, (float)(x + 1) - f, (float) y + f2, (float)(z + 1) - f);
-    }
-
-}
diff --git a/src/main/java/net/minecraft/core/block/BlockPiePumpkin.java b/src/main/java/net/minecraft/core/block/BlockPiePumpkin.java
deleted file mode 100644
index a9fd96800..000000000
--- a/src/main/java/net/minecraft/core/block/BlockPiePumpkin.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package net.minecraft.core.block;
-
-import net.minecraft.core.item.Items;
-import net.minecraft.core.util.phys.AABB;
-import net.minecraft.core.world.WorldSource;
-
-public class BlockPiePumpkin extends BlockEdible
-{
-
-    public BlockPiePumpkin(String key, String namespaceId, int id)
-    {
-        super(key, namespaceId, id, 4, 5, () -> Items.FOOD_PUMPKIN_PIE);
-    }
-
-    @Override
-    public void setBlockBoundsBasedOnState(WorldSource world, int x, int y, int z)
-    {
-        int l = world.getBlockMetadata(x, y, z);
-        float f = 0.0625F;
-        float xMin = l >= 2 ? 0.5f : f;
-        float zMin = l >= 3 ? 0.5f : f;
-        float f2 = 0.4375F;
-        setBlockBounds(xMin, 0.0F, zMin, 1.0F - f, f2, 1.0F - f);
-    }
-
-    @Override
-    public AABB getCollisionBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        int l = world.getBlockMetadata(x, y, z);
-        float f = 0.0625F;
-        float xMin = l >= 2 ? 0.5f : f;
-        float zMin = l >= 3 ? 0.5f : f;
-        float f2 = 0.4375F;
-        return AABB.getTemporaryBB((float) x + xMin, y, (float) z + zMin, (float)(x + 1) - f, ((float) y + f2) - f, (float)(z + 1) - f);
-    }
-
-    @Override
-    public AABB getSelectedBoundingBoxFromPool(WorldSource world, int x, int y, int z)
-    {
-        int l = world.getBlockMetadata(x, y, z);
-        float f = 0.0625F;
-        float xMin = l >= 2 ? 0.5f : f;
-        float zMin = l >= 3 ? 0.5f : f;
-        float f2 = 0.4375F;
-        return AABB.getTemporaryBB((float) x + xMin, y, (float) z + zMin, (float)(x + 1) - f, ((float) y + f2) - f, (float)(z + 1) - f);
-    }
-
-}
diff --git a/src/template/java/net/minecraft/core/Version.java b/src/template/java/net/minecraft/core/Version.java
deleted file mode 100644
index 8d3b6f449..000000000
--- a/src/template/java/net/minecraft/core/Version.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package net.minecraft.core;
-
-public class Version {
-    // DO NOT MODIFY THESE VALUES!
-    // They are generated at build time by Gradle.
-    protected static final String VERSION = "${version}";
-    protected static final String BUILD_TIME = "${buildTime}";
-    protected static final int TEXTURE_PACK_VERSION = $packVersion;
-    protected static final BuildChannel BUILD_CHANNEL = BuildChannel.valueOf("${buildChannel}");
-}
\ No newline at end of file
diff --git a/util/datagen/.gitignore b/util/datagen/.gitignore
new file mode 100644
index 000000000..2959db291
--- /dev/null
+++ b/util/datagen/.gitignore
@@ -0,0 +1,2 @@
+build
+logs
\ No newline at end of file
diff --git a/util/datagen/build.gradle.kts b/util/datagen/build.gradle.kts
new file mode 100644
index 000000000..6f0db8857
--- /dev/null
+++ b/util/datagen/build.gradle.kts
@@ -0,0 +1,48 @@
+plugins {
+    id("java")
+}
+
+repositories {
+    mavenCentral()
+    maven("https://libraries.minecraft.net/")
+}
+
+dependencies {
+    implementation(project(":game:core"))
+
+    implementation(libs.gson)
+    implementation(libs.jetbrains.annotations)
+}
+
+val output by configurations.creating
+
+//region Tasks
+val runDatagen by tasks.registering(JavaExec::class) {
+    group = "bta.generator"
+    val datagenDir = project.layout.buildDirectory.dir("generated/sources/datagen/resources")
+    val recipesDir = datagenDir.get().file("recipes")
+    outputs.dir(datagenDir)
+
+    mainClass.set("net.minecraft.datagen.RecipesGenerator")
+    classpath = sourceSets["main"].runtimeClasspath
+
+    args = listOf("--output", recipesDir.toString())
+}
+
+val datagenJar by tasks.registering(Jar::class) {
+    group = "bta.generator"
+    from(sourceSets["generated"].resources)
+}
+//endregion
+
+sourceSets {
+    create("generated") {
+        resources {
+            srcDir(runDatagen)
+        }
+    }
+}
+
+artifacts {
+    add("output", datagenJar)
+}
\ No newline at end of file
diff --git a/src/main/java/net/minecraft/datagen/RecipesGenerator.java b/util/datagen/src/main/java/net/minecraft/datagen/RecipesGenerator.java
similarity index 95%
rename from src/main/java/net/minecraft/datagen/RecipesGenerator.java
rename to util/datagen/src/main/java/net/minecraft/datagen/RecipesGenerator.java
index ed4dc625f..8d1c21f92 100644
--- a/src/main/java/net/minecraft/datagen/RecipesGenerator.java
+++ b/util/datagen/src/main/java/net/minecraft/datagen/RecipesGenerator.java
@@ -4,11 +4,11 @@ import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParser;
 import com.google.gson.stream.JsonReader;
+import net.minecraft.datagen.recipeBuilders.RecipeBuilder;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.data.registry.Registries;
 import net.minecraft.core.data.registry.recipe.RecipeGroup;
 import net.minecraft.core.item.Items;
-import net.minecraft.datagen.recipeBuilders.RecipeBuilder;
 
 import java.io.File;
 import java.io.FileReader;
@@ -58,7 +58,7 @@ public class RecipesGenerator {
 
         WorkbenchGenerator.generate();
         if (DEBUG) {
-            remainingEntries = getMissingIds(Registries.RECIPES.WORKBENCH, new File("src/common/resources/recipes/workbench.json"));
+            remainingEntries = getMissingIds(Registries.RECIPES.WORKBENCH, new File("src/main/resources/recipes/workbench.json"));
             if (remainingEntries.isEmpty()) {
                 System.out.println("Workbench contains all reference entries!");
             } else {
@@ -75,7 +75,7 @@ public class RecipesGenerator {
 
         SmeltingGenerator.generate();
         if (DEBUG) {
-            remainingEntries = getMissingIds(Registries.RECIPES.FURNACE, new File("src/common/resources/recipes/furnace.json"));
+            remainingEntries = getMissingIds(Registries.RECIPES.FURNACE, new File("src/main/resources/recipes/furnace.json"));
             if (remainingEntries.isEmpty()) {
                 System.out.println("Furnace contains all reference entries!");
             } else {
@@ -91,7 +91,7 @@ public class RecipesGenerator {
         if (DEBUG) System.out.println();
 
         if (DEBUG) {
-            remainingEntries = getMissingIds(Registries.RECIPES.BLAST_FURNACE, new File("src/common/resources/recipes/blast_furnace.json"));
+            remainingEntries = getMissingIds(Registries.RECIPES.BLAST_FURNACE, new File("src/main/resources/recipes/blast_furnace.json"));
             if (remainingEntries.isEmpty()) {
                 System.out.println("Blast furnace contains all reference entries!");
             } else {
@@ -108,7 +108,7 @@ public class RecipesGenerator {
 
         TrommelGenerator.generate();
         if (DEBUG) {
-            remainingEntries = getMissingIds(Registries.RECIPES.TROMMEL, new File("src/common/resources/recipes/trommel.json"));
+            remainingEntries = getMissingIds(Registries.RECIPES.TROMMEL, new File("src/main/resources/recipes/trommel.json"));
             if (remainingEntries.isEmpty()) {
                 System.out.println("Trommel contains all reference entries!");
             } else {
diff --git a/src/main/java/net/minecraft/datagen/SmeltingGenerator.java b/util/datagen/src/main/java/net/minecraft/datagen/SmeltingGenerator.java
similarity index 92%
rename from src/main/java/net/minecraft/datagen/SmeltingGenerator.java
rename to util/datagen/src/main/java/net/minecraft/datagen/SmeltingGenerator.java
index 963195b02..ee6baeaff 100644
--- a/src/main/java/net/minecraft/datagen/SmeltingGenerator.java
+++ b/util/datagen/src/main/java/net/minecraft/datagen/SmeltingGenerator.java
@@ -1,12 +1,10 @@
 package net.minecraft.datagen;
 
+import net.minecraft.datagen.recipeBuilders.RecipeBuilder;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.item.Items;
 import net.minecraft.core.util.helper.DyeColor;
-import net.minecraft.datagen.recipeBuilders.RecipeBuilder;
-
-import static net.minecraft.datagen.RecipesGenerator.CORE_NAMESPACE;
 
 public class SmeltingGenerator {
     public static void generate() {
@@ -49,19 +47,19 @@ public class SmeltingGenerator {
     }
 
     private static void furnaceRecipe(String id, ItemStack input, ItemStack output) {
-        RecipeBuilder.Furnace(CORE_NAMESPACE).setInput(input).create(id, output);
+        RecipeBuilder.Furnace(RecipesGenerator.CORE_NAMESPACE).setInput(input).create(id, output);
     }
 
     private static void furnaceRecipe(String id, String inputGroup, ItemStack output) {
-        RecipeBuilder.Furnace(CORE_NAMESPACE).setInput(inputGroup).create(id, output);
+        RecipeBuilder.Furnace(RecipesGenerator.CORE_NAMESPACE).setInput(inputGroup).create(id, output);
     }
 
     private static void blastRecipe(String id, ItemStack input, ItemStack output) {
-        RecipeBuilder.BlastFurnace(CORE_NAMESPACE).setInput(input).create(id, output);
+        RecipeBuilder.BlastFurnace(RecipesGenerator.CORE_NAMESPACE).setInput(input).create(id, output);
     }
 
     private static void blastRecipe(String id, String inputGroup, ItemStack output) {
-        RecipeBuilder.BlastFurnace(CORE_NAMESPACE).setInput(inputGroup).create(id, output);
+        RecipeBuilder.BlastFurnace(RecipesGenerator.CORE_NAMESPACE).setInput(inputGroup).create(id, output);
     }
 
     private static void sharedRecipe(String id, ItemStack input, ItemStack output) {
diff --git a/src/main/java/net/minecraft/datagen/TrommelGenerator.java b/util/datagen/src/main/java/net/minecraft/datagen/TrommelGenerator.java
similarity index 92%
rename from src/main/java/net/minecraft/datagen/TrommelGenerator.java
rename to util/datagen/src/main/java/net/minecraft/datagen/TrommelGenerator.java
index c2602e718..7ae13dcb6 100644
--- a/src/main/java/net/minecraft/datagen/TrommelGenerator.java
+++ b/util/datagen/src/main/java/net/minecraft/datagen/TrommelGenerator.java
@@ -1,17 +1,15 @@
 package net.minecraft.datagen;
 
+import net.minecraft.datagen.recipeBuilders.RecipeBuilder;
 import net.minecraft.core.WeightedRandomLootObject;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.item.Items;
 import net.minecraft.core.util.helper.DyeColor;
-import net.minecraft.datagen.recipeBuilders.RecipeBuilder;
-
-import static net.minecraft.datagen.RecipesGenerator.CORE_NAMESPACE;
 
 public class TrommelGenerator {
     public static void generate() {
-        RecipeBuilder.Trommel(CORE_NAMESPACE)
+        RecipeBuilder.Trommel(RecipesGenerator.CORE_NAMESPACE)
             .setInput(Blocks.BLOCK_CLAY)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.CLAY), 4, 8), 30)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.AMMO_PEBBLE), 1, 3), 20)
@@ -19,7 +17,7 @@ public class TrommelGenerator {
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_GOLD), 1), 1)
             .create("clay");
 
-        RecipeBuilder.Trommel(CORE_NAMESPACE)
+        RecipeBuilder.Trommel(RecipesGenerator.CORE_NAMESPACE)
             .setInput("minecraft:trommel_dirt")
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.AMMO_PEBBLE), 1, 3), 50)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.CLAY), 1, 5), 20)
@@ -30,7 +28,7 @@ public class TrommelGenerator {
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.QUARTZ), 1), 0.25)
             .create("dirt");
 
-        RecipeBuilder.Trommel(CORE_NAMESPACE)
+        RecipeBuilder.Trommel(RecipesGenerator.CORE_NAMESPACE)
             .setInput(Blocks.GRAVEL)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.FLINT), 1, 2), 25)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.OLIVINE), 1, 3), 30)
@@ -41,7 +39,7 @@ public class TrommelGenerator {
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.QUARTZ), 1), 0.5)
             .create("gravel");
 
-        RecipeBuilder.Trommel(CORE_NAMESPACE)
+        RecipeBuilder.Trommel(RecipesGenerator.CORE_NAMESPACE)
             .setInput(Blocks.DIRT_SCORCHED_RICH)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_GOLD), 1), 10)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_IRON), 1, 2), 15)
@@ -52,7 +50,7 @@ public class TrommelGenerator {
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.AMMO_PEBBLE), 1, 5), 5)
             .create("rich_dirt");
 
-        RecipeBuilder.Trommel(CORE_NAMESPACE)
+        RecipeBuilder.Trommel(RecipesGenerator.CORE_NAMESPACE)
             .setInput(Blocks.SAND)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.QUARTZ), 1, 3), 50)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.CLAY), 4, 8), 30)
@@ -64,7 +62,7 @@ public class TrommelGenerator {
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.ORE_RAW_GOLD), 1), 1)
             .create("sand");
 
-        RecipeBuilder.Trommel(CORE_NAMESPACE)
+        RecipeBuilder.Trommel(RecipesGenerator.CORE_NAMESPACE)
             .setInput(Blocks.SOULSAND)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.FLINT), 1, 3), 20)
             .addEntry(new WeightedRandomLootObject(new ItemStack(Items.BONE), 1, 6), 10)
diff --git a/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java b/util/datagen/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
similarity index 100%
rename from src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
rename to util/datagen/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
index 712d8e3fa..ea25de92f 100644
--- a/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
+++ b/util/datagen/src/main/java/net/minecraft/datagen/WorkbenchGenerator.java
@@ -1,5 +1,7 @@
 package net.minecraft.datagen;
 
+import net.minecraft.datagen.recipeBuilders.RecipeBuilder;
+import net.minecraft.datagen.recipeBuilders.RecipeBuilderShaped;
 import net.minecraft.core.block.Blocks;
 import net.minecraft.core.data.registry.Registries;
 import net.minecraft.core.data.registry.recipe.RecipeSymbol;
@@ -10,8 +12,6 @@ import net.minecraft.core.data.registry.recipe.entry.RecipeEntryUndyeing;
 import net.minecraft.core.item.ItemStack;
 import net.minecraft.core.item.Items;
 import net.minecraft.core.util.helper.DyeColor;
-import net.minecraft.datagen.recipeBuilders.RecipeBuilder;
-import net.minecraft.datagen.recipeBuilders.RecipeBuilderShaped;
 
 import static net.minecraft.datagen.RecipesGenerator.CORE_NAMESPACE;
 
diff --git a/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilder.java b/util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilder.java
similarity index 100%
rename from src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilder.java
rename to util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilder.java
diff --git a/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderBase.java b/util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderBase.java
similarity index 100%
rename from src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderBase.java
rename to util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderBase.java
diff --git a/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderBlastFurnace.java b/util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderBlastFurnace.java
similarity index 100%
rename from src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderBlastFurnace.java
rename to util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderBlastFurnace.java
diff --git a/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderFurnace.java b/util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderFurnace.java
similarity index 100%
rename from src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderFurnace.java
rename to util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderFurnace.java
diff --git a/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderShaped.java b/util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderShaped.java
similarity index 100%
rename from src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderShaped.java
rename to util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderShaped.java
diff --git a/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderShapeless.java b/util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderShapeless.java
similarity index 100%
rename from src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderShapeless.java
rename to util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderShapeless.java
diff --git a/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderTrommel.java b/util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderTrommel.java
similarity index 100%
rename from src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderTrommel.java
rename to util/datagen/src/main/java/net/minecraft/datagen/recipeBuilders/RecipeBuilderTrommel.java
diff --git a/util/stellar/.gitignore b/util/stellar/.gitignore
new file mode 100644
index 000000000..2959db291
--- /dev/null
+++ b/util/stellar/.gitignore
@@ -0,0 +1,2 @@
+build
+logs
\ No newline at end of file
diff --git a/util/stellar/build.gradle.kts b/util/stellar/build.gradle.kts
new file mode 100644
index 000000000..539c067b5
--- /dev/null
+++ b/util/stellar/build.gradle.kts
@@ -0,0 +1,36 @@
+plugins {
+    id("java")
+}
+
+repositories {
+    mavenCentral()
+    maven("https://libraries.minecraft.net/")
+}
+
+dependencies {
+    implementation(project(":game:core"))
+
+    implementation(libs.bundles.lwjgl)
+    for (lib in libs.bundles.lwjgl.get()) {
+        runtimeOnly(lib.group, lib.name, classifier = rootProject.ext["lwjglNatives"].toString())
+    }
+    implementation(platform(libs.lwjgl.bom))
+}
+
+//region Tasks
+val run by tasks.registering(JavaExec::class) {
+    group = "bta"
+
+    mainClass.set("org.useless.stellar.StarUtil")
+    classpath += sourceSets["main"].runtimeClasspath
+}
+
+tasks.withType(JavaCompile::class.java) {
+    options.isIncremental = false
+    options.encoding = "UTF-8"
+    if (JavaVersion.current() != JavaVersion.VERSION_1_8) {
+        options.compilerArgs.add("--release")
+        options.compilerArgs.add("8")
+    }
+}
+//endregion
\ No newline at end of file
diff --git a/src/main/java/org/useless/stellar/StarUtil.java b/util/stellar/src/main/java/org/useless/stellar/StarUtil.java
similarity index 100%
rename from src/main/java/org/useless/stellar/StarUtil.java
rename to util/stellar/src/main/java/org/useless/stellar/StarUtil.java
